https://github.com/arsenm created https://github.com/llvm/llvm-project/pull/205133
Reverts llvm/llvm-project#203504 Breaks build pending #205130 >From 9783b3c3413133623d4fb6dc24daa77199bb50d6 Mon Sep 17 00:00:00 2001 From: Matt Arsenault <[email protected]> Date: Mon, 22 Jun 2026 18:29:57 +0200 Subject: [PATCH] Revert "runtimes: Pass CMAKE_SYSTEM_NAME based on target triple (#203504)" This reverts commit 6e4e181c83d076bb8e4c208ae28817f3900b23fa. --- clang/cmake/modules/ClangConfig.cmake.in | 5 +- cmake/Modules/GetTripleCMakeSystemName.cmake | 89 ------------------- cmake/Modules/NormalizeTriple.cmake | 36 -------- llvm/cmake/modules/LLVMConfig.cmake.in | 69 +++++++------- .../modules/LLVMExternalProjectUtils.cmake | 64 ++++--------- llvm/runtimes/CMakeLists.txt | 4 + runtimes/CMakeLists.txt | 18 +++- 7 files changed, 73 insertions(+), 212 deletions(-) delete mode 100644 cmake/Modules/GetTripleCMakeSystemName.cmake delete mode 100644 cmake/Modules/NormalizeTriple.cmake diff --git a/clang/cmake/modules/ClangConfig.cmake.in b/clang/cmake/modules/ClangConfig.cmake.in index e199c7e17b6b7..68f723d050117 100644 --- a/clang/cmake/modules/ClangConfig.cmake.in +++ b/clang/cmake/modules/ClangConfig.cmake.in @@ -13,10 +13,7 @@ set(CLANG_LINK_CLANG_DYLIB "@CLANG_LINK_CLANG_DYLIB@") set(CLANG_DEFAULT_LINKER "@CLANG_DEFAULT_LINKER@") # Provide all our library targets to users. -# Skip when cross-compiling, as host library targets are not usable. -if(NOT CMAKE_CROSSCOMPILING) - @CLANG_CONFIG_INCLUDE_EXPORTS@ -endif() +@CLANG_CONFIG_INCLUDE_EXPORTS@ # By creating clang-tablegen-targets here, subprojects that depend on Clang's # tablegen-generated headers can always depend on this target whether building diff --git a/cmake/Modules/GetTripleCMakeSystemName.cmake b/cmake/Modules/GetTripleCMakeSystemName.cmake deleted file mode 100644 index 6cd8d3c59324e..0000000000000 --- a/cmake/Modules/GetTripleCMakeSystemName.cmake +++ /dev/null @@ -1,89 +0,0 @@ -#===--------------------------------------------------------------------===// -# -# Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. -# See https://llvm.org/LICENSE.txt for details. -# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception -# -#===--------------------------------------------------------------------===// - -# Extract the OS component from a target triple and map it to the -# corresponding CMake system name. -# -# Usage: -# get_triple_cmake_system_name(<triple> <out_var>) -# -# Parses the triple (arch-vendor-os[-env]) and sets <out_var> to the -# CMake-style system name (e.g. "Darwin", "Linux", "Windows"). -# Unrecognized OS values are mapped to "Generic". This expects a -# normalized triple. - -function(get_triple_cmake_system_name triple out_var) - string(REPLACE "-" ";" _components "${triple}") - list(LENGTH _components _len) - if(_len LESS 3) - set(${out_var} "${CMAKE_HOST_SYSTEM_NAME}" PARENT_SCOPE) - return() - endif() - - list(GET _components 1 _vendor) - list(GET _components 2 _os) - set(_env "") - if(_len GREATER_EQUAL 4) - list(GET _components 3 _env) - endif() - - # Check the special environment components first, since it can - # override the usual OS mapping. - if("${_env}" MATCHES "^android") - set(${out_var} "Android" PARENT_SCOPE) - elseif("${_env}" MATCHES "^cygnus") - set(${out_var} "CYGWIN" PARENT_SCOPE) - elseif("${_os}" MATCHES "^darwin|^macos") - set(${out_var} "Darwin" PARENT_SCOPE) - elseif("${_os}" MATCHES "^ios") - set(${out_var} "iOS" PARENT_SCOPE) - elseif("${_os}" MATCHES "^tvos") - set(${out_var} "tvOS" PARENT_SCOPE) - elseif("${_os}" MATCHES "^watchos") - set(${out_var} "watchOS" PARENT_SCOPE) - elseif("${_os}" MATCHES "^xros|^visionos") - set(${out_var} "visionOS" PARENT_SCOPE) - elseif("${_vendor}" STREQUAL "apple") - # Catch-all for other Apple triples (e.g. driverkit, bridgeos). - set(${out_var} "Darwin" PARENT_SCOPE) - elseif("${_os}" MATCHES "^linux") - set(${out_var} "Linux" PARENT_SCOPE) - elseif("${_os}" MATCHES "^windows") - set(${out_var} "Windows" PARENT_SCOPE) - elseif("${_os}" MATCHES "^freebsd|^kfreebsd") - set(${out_var} "FreeBSD" PARENT_SCOPE) - elseif("${_os}" MATCHES "^netbsd") - set(${out_var} "NetBSD" PARENT_SCOPE) - elseif("${_os}" MATCHES "^openbsd") - set(${out_var} "OpenBSD" PARENT_SCOPE) - elseif("${_os}" MATCHES "^dragonfly") - set(${out_var} "DragonFly" PARENT_SCOPE) - elseif("${_os}" MATCHES "^solaris") - set(${out_var} "SunOS" PARENT_SCOPE) - elseif("${_os}" MATCHES "^aix") - set(${out_var} "AIX" PARENT_SCOPE) - elseif("${_os}" MATCHES "^fuchsia") - set(${out_var} "Fuchsia" PARENT_SCOPE) - elseif("${_os}" MATCHES "^haiku") - set(${out_var} "Haiku" PARENT_SCOPE) - elseif("${_os}" MATCHES "^emscripten") - set(${out_var} "Emscripten" PARENT_SCOPE) - elseif("${_os}" MATCHES "^wasi") - set(${out_var} "WASI" PARENT_SCOPE) - elseif("${_os}" MATCHES "^rtems") - set(${out_var} "RTEMS" PARENT_SCOPE) - elseif("${_os}" MATCHES "^zos") - set(${out_var} "OS390" PARENT_SCOPE) - elseif("${_os}" MATCHES "^hurd") - set(${out_var} "GNU" PARENT_SCOPE) - elseif("${_os}" MATCHES "^serenity") - set(${out_var} "SerenityOS" PARENT_SCOPE) - else() - set(${out_var} "Generic" PARENT_SCOPE) - endif() -endfunction() diff --git a/cmake/Modules/NormalizeTriple.cmake b/cmake/Modules/NormalizeTriple.cmake deleted file mode 100644 index 08f09a22bdbb0..0000000000000 --- a/cmake/Modules/NormalizeTriple.cmake +++ /dev/null @@ -1,36 +0,0 @@ -#===--------------------------------------------------------------------===// -# -# Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. -# See https://llvm.org/LICENSE.txt for details. -# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception -# -#===--------------------------------------------------------------------===// - -# Normalize a target triple using clang's -print-target-triple. -# -# Usage: -# normalize_triple(<compiler> <triple> <out_var>) -# -# Runs <compiler> --target=<triple> -print-target-triple to produce a -# canonical triple. If the compiler invocation fails (e.g. the compiler -# is not clang), <triple> is returned unchanged. - -function(normalize_triple compiler triple out_var) - set(_prefix "") - if(CMAKE_C_COMPILER_FRONTEND_VARIANT MATCHES "MSVC") - set(_prefix "/clang:") - endif() - execute_process( - COMMAND "${compiler}" "${_prefix}--target=${triple}" "${_prefix}-print-target-triple" - RESULT_VARIABLE _result - OUTPUT_VARIABLE _output - OUTPUT_STRIP_TRAILING_WHITESPACE - ERROR_QUIET) - if(_result EQUAL 0 AND _output) - set(${out_var} "${_output}" PARENT_SCOPE) - else() - # TODO(#97876): Report an error. - message(WARNING "Failed to execute `${compiler} ${_prefix}--target=${triple} ${_prefix}-print-target-triple` to normalize target triple.") - set(${out_var} "${triple}" PARENT_SCOPE) - endif() -endfunction() diff --git a/llvm/cmake/modules/LLVMConfig.cmake.in b/llvm/cmake/modules/LLVMConfig.cmake.in index 6ef0cef7d0296..300c25e7c6101 100644 --- a/llvm/cmake/modules/LLVMConfig.cmake.in +++ b/llvm/cmake/modules/LLVMConfig.cmake.in @@ -56,47 +56,52 @@ set(LLVM_ENABLE_ASSERTIONS @LLVM_ENABLE_ASSERTIONS@) set(LLVM_ENABLE_EH @LLVM_ENABLE_EH@) set(LLVM_ENABLE_FFI @LLVM_ENABLE_FFI@) +if(LLVM_ENABLE_FFI) + find_package(FFI) +endif() + set(LLVM_ENABLE_RTTI @LLVM_ENABLE_RTTI@) + +set(LLVM_ENABLE_LIBEDIT @HAVE_LIBEDIT@) +if(LLVM_ENABLE_LIBEDIT) + find_package(LibEdit) +endif() + set(LLVM_ENABLE_THREADS @LLVM_ENABLE_THREADS@) + set(LLVM_ENABLE_UNWIND_TABLES @LLVM_ENABLE_UNWIND_TABLES@) + set(LLVM_ENABLE_ZLIB @LLVM_ENABLE_ZLIB@) +if(LLVM_ENABLE_ZLIB) + set(ZLIB_ROOT @ZLIB_ROOT@) + find_package(ZLIB) +endif() + set(LLVM_ENABLE_ZSTD @LLVM_ENABLE_ZSTD@) +if(LLVM_ENABLE_ZSTD) + find_package(zstd) +endif() + set(LLVM_ENABLE_LIBXML2 @LLVM_ENABLE_LIBXML2@) +if(LLVM_ENABLE_LIBXML2) + find_package(LibXml2) +endif() + set(LLVM_ENABLE_CURL @LLVM_ENABLE_CURL@) +if(LLVM_ENABLE_CURL) + find_package(CURL) +endif() + set(LLVM_ENABLE_HTTPLIB @LLVM_ENABLE_HTTPLIB@) +if(LLVM_ENABLE_HTTPLIB) + find_package(httplib) +endif() + set(LLVM_WITH_Z3 @LLVM_WITH_Z3@) -set(LLVM_ENABLE_DIA_SDK @LLVM_ENABLE_DIA_SDK@) -set(LLVM_ENABLE_LIBEDIT @HAVE_LIBEDIT@) -# These are host libraries that LLVM was built with. Only find them when the -# consumer can actually use them (i.e. not when cross-compiling for an -# incompatible target). -if(NOT CMAKE_CROSSCOMPILING) - if(LLVM_ENABLE_FFI) - find_package(FFI) - endif() - if(LLVM_ENABLE_LIBEDIT) - find_package(LibEdit) - endif() - if(LLVM_ENABLE_ZLIB) - set(ZLIB_ROOT @ZLIB_ROOT@) - find_package(ZLIB) - endif() - if(LLVM_ENABLE_ZSTD) - find_package(zstd) - endif() - if(LLVM_ENABLE_LIBXML2) - find_package(LibXml2) - endif() - if(LLVM_ENABLE_CURL) - find_package(CURL) - endif() - if(LLVM_ENABLE_HTTPLIB) - find_package(httplib) - endif() - if(LLVM_ENABLE_DIA_SDK) - find_package(DIASDK) - endif() +set(LLVM_ENABLE_DIA_SDK @LLVM_ENABLE_DIA_SDK@) +if(LLVM_ENABLE_DIA_SDK) + find_package(DIASDK) endif() set(LLVM_NATIVE_ARCH @LLVM_NATIVE_ARCH@) @@ -147,7 +152,7 @@ set(LLVM_ENABLE_SHARED_LIBS @BUILD_SHARED_LIBS@) set(LLVM_DEFAULT_EXTERNAL_LIT "@LLVM_CONFIG_DEFAULT_EXTERNAL_LIT@") set(LLVM_LIT_ARGS "@LLVM_LIT_ARGS@") -if(NOT TARGET LLVMSupport AND NOT CMAKE_CROSSCOMPILING) +if(NOT TARGET LLVMSupport) @LLVM_CONFIG_INCLUDE_EXPORTS@ @llvm_config_include_buildtree_only_exports@ endif() diff --git a/llvm/cmake/modules/LLVMExternalProjectUtils.cmake b/llvm/cmake/modules/LLVMExternalProjectUtils.cmake index 9567792e664e4..ee270d70a778d 100644 --- a/llvm/cmake/modules/LLVMExternalProjectUtils.cmake +++ b/llvm/cmake/modules/LLVMExternalProjectUtils.cmake @@ -84,6 +84,12 @@ function(llvm_ExternalProject_Add name source_dir) endif() endforeach() + # If CMAKE_SYSTEM_NAME is not set explicitly in the arguments passed to us, + # reflect CMake's own default. + if (NOT _cmake_system_name) + set(_cmake_system_name "${CMAKE_HOST_SYSTEM_NAME}") + endif() + if(NOT ARG_TARGET_TRIPLE) set(target_triple ${LLVM_DEFAULT_TARGET_TRIPLE}) else() @@ -92,36 +98,6 @@ function(llvm_ExternalProject_Add name source_dir) is_msvc_triple(is_msvc_target "${target_triple}") - if(ARG_USE_TOOLCHAIN AND NOT CMAKE_CROSSCOMPILING) - set(_cmake_c_compiler "${LLVM_RUNTIME_OUTPUT_INTDIR}/clang${CMAKE_EXECUTABLE_SUFFIX}") - set(_cmake_cxx_compiler "${LLVM_RUNTIME_OUTPUT_INTDIR}/clang++${CMAKE_EXECUTABLE_SUFFIX}") - set(_cmake_asm_compiler "${_cmake_c_compiler}") - if(is_msvc_target) - set(_cmake_c_compiler "${LLVM_RUNTIME_OUTPUT_INTDIR}/clang-cl${CMAKE_EXECUTABLE_SUFFIX}") - set(_cmake_cxx_compiler "${_cmake_c_compiler}") - set(_cmake_asm_compiler "${_cmake_c_compiler}") - endif() - else() - set(_cmake_c_compiler "${CMAKE_C_COMPILER}") - set(_cmake_cxx_compiler "${CMAKE_CXX_COMPILER}") - set(_cmake_asm_compiler "${CMAKE_C_COMPILER}") - endif() - - # If CMAKE_SYSTEM_NAME is not set explicitly in the arguments passed to us, - # derive it from the target triple if available, otherwise reflect CMake's - # own default. This ensures that cross-compilation targets get the correct - # platform files (e.g. AMDGPU targets on a Darwin host won't get macOS flags). - if (NOT _cmake_system_name) - if(ARG_TARGET_TRIPLE) - include(NormalizeTriple) - normalize_triple("${_cmake_c_compiler}" "${ARG_TARGET_TRIPLE}" _normalized_triple) - include(GetTripleCMakeSystemName) - get_triple_cmake_system_name("${_normalized_triple}" _cmake_system_name) - else() - set(_cmake_system_name "${CMAKE_HOST_SYSTEM_NAME}") - endif() - endif() - if(NOT ARG_TOOLCHAIN_TOOLS) set(ARG_TOOLCHAIN_TOOLS clang) if (ARG_ENABLE_FORTRAN) @@ -255,9 +231,15 @@ function(llvm_ExternalProject_Add name source_dir) if(ARG_USE_TOOLCHAIN AND NOT CMAKE_CROSSCOMPILING) if(CLANG_IN_TOOLCHAIN) - set(compiler_args -DCMAKE_C_COMPILER=${_cmake_c_compiler} - -DCMAKE_CXX_COMPILER=${_cmake_cxx_compiler} - -DCMAKE_ASM_COMPILER=${_cmake_asm_compiler}) + if(is_msvc_target) + set(compiler_args -DCMAKE_C_COMPILER=${LLVM_RUNTIME_OUTPUT_INTDIR}/clang-cl${CMAKE_EXECUTABLE_SUFFIX} + -DCMAKE_CXX_COMPILER=${LLVM_RUNTIME_OUTPUT_INTDIR}/clang-cl${CMAKE_EXECUTABLE_SUFFIX} + -DCMAKE_ASM_COMPILER=${LLVM_RUNTIME_OUTPUT_INTDIR}/clang-cl${CMAKE_EXECUTABLE_SUFFIX}) + else() + set(compiler_args -DCMAKE_C_COMPILER=${LLVM_RUNTIME_OUTPUT_INTDIR}/clang${CMAKE_EXECUTABLE_SUFFIX} + -DCMAKE_CXX_COMPILER=${LLVM_RUNTIME_OUTPUT_INTDIR}/clang++${CMAKE_EXECUTABLE_SUFFIX} + -DCMAKE_ASM_COMPILER=${LLVM_RUNTIME_OUTPUT_INTDIR}/clang${CMAKE_EXECUTABLE_SUFFIX}) + endif() endif() if(FLANG_IN_TOOLCHAIN) list(APPEND compiler_args -DCMAKE_Fortran_COMPILER=${LLVM_RUNTIME_OUTPUT_INTDIR}/flang${CMAKE_EXECUTABLE_SUFFIX}) @@ -397,22 +379,6 @@ function(llvm_ExternalProject_Add name source_dir) list(APPEND compiler_args -DCMAKE_CXX_COMPILER_TARGET=${ARG_TARGET_TRIPLE}) list(APPEND compiler_args -DCMAKE_Fortran_COMPILER_TARGET=${ARG_TARGET_TRIPLE}) list(APPEND compiler_args -DCMAKE_ASM_COMPILER_TARGET=${ARG_TARGET_TRIPLE}) - - # Pass CMAKE_SYSTEM_NAME derived from the target triple so the sub-build - # loads the correct platform files instead of the host's. - if(NOT "${_cmake_system_name}" STREQUAL "${CMAKE_HOST_SYSTEM_NAME}") - list(APPEND compiler_args -DCMAKE_SYSTEM_NAME=${_cmake_system_name}) - endif() - - # Forward Darwin-specific variables only when targeting Darwin. - if("${_cmake_system_name}" STREQUAL "Darwin") - if(CMAKE_OSX_SYSROOT) - list(APPEND compiler_args -DCMAKE_OSX_SYSROOT=${CMAKE_OSX_SYSROOT}) - endif() - if(CMAKE_OSX_DEPLOYMENT_TARGET) - list(APPEND compiler_args -DCMAKE_OSX_DEPLOYMENT_TARGET=${CMAKE_OSX_DEPLOYMENT_TARGET}) - endif() - endif() endif() if(CMAKE_VERBOSE_MAKEFILE) diff --git a/llvm/runtimes/CMakeLists.txt b/llvm/runtimes/CMakeLists.txt index af50413c9b0b7..6d81b26d2d416 100644 --- a/llvm/runtimes/CMakeLists.txt +++ b/llvm/runtimes/CMakeLists.txt @@ -4,6 +4,10 @@ # the two files. set(COMMON_CMAKE_ARGS "-DHAVE_LLVM_LIT=ON;-DCLANG_RESOURCE_DIR=${CLANG_RESOURCE_DIR}") +if(APPLE AND CMAKE_OSX_SYSROOT AND (LLVM_TARGET_TRIPLE STREQUAL LLVM_HOST_TRIPLE)) + # Only propagate the host sysroot for native runtimes builds. + list(APPEND RUNTIMES_CMAKE_ARGS "-DCMAKE_OSX_SYSROOT=${CMAKE_OSX_SYSROOT}") +endif() foreach(proj ${LLVM_ENABLE_RUNTIMES}) string(TOUPPER "${proj}" canon_name) STRING(REGEX REPLACE "-" "_" canon_name ${canon_name}) diff --git a/runtimes/CMakeLists.txt b/runtimes/CMakeLists.txt index 36ebe594edc0d..0a84ef3957f76 100644 --- a/runtimes/CMakeLists.txt +++ b/runtimes/CMakeLists.txt @@ -228,8 +228,22 @@ message(STATUS "LLVM default target triple: ${LLVM_DEFAULT_TARGET_TRIPLE}") set(LLVM_TARGET_TRIPLE "${LLVM_DEFAULT_TARGET_TRIPLE}") if(CMAKE_C_COMPILER_ID MATCHES "Clang") - include(NormalizeTriple) - normalize_triple("${CMAKE_C_COMPILER}" "${LLVM_DEFAULT_TARGET_TRIPLE}" LLVM_DEFAULT_TARGET_TRIPLE) + set(option_prefix "") + if (CMAKE_C_COMPILER_FRONTEND_VARIANT MATCHES "MSVC") + set(option_prefix "/clang:") + endif() + set(print_target_triple ${CMAKE_C_COMPILER} ${option_prefix}--target=${LLVM_DEFAULT_TARGET_TRIPLE} ${option_prefix}-print-target-triple) + execute_process(COMMAND ${print_target_triple} + RESULT_VARIABLE result + OUTPUT_VARIABLE output + OUTPUT_STRIP_TRAILING_WHITESPACE) + if(result EQUAL 0) + set(LLVM_DEFAULT_TARGET_TRIPLE ${output}) + else() + string(REPLACE ";" " " print_target_triple "${print_target_triple}") + # TODO(#97876): Report an error. + message(WARNING "Failed to execute `${print_target_triple}` to normalize target triple.") + endif() endif() # Determine output and install paths based on LLVM_TARGET_TRIPLE _______________________________________________ cfe-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
