[clang] [compiler-rt] [llvm] Reapply "Skipping host target exports during cross-compilation" (#210… (PR #210496)
via cfe-commits
cfe-commits at lists.llvm.org
Sat Jul 18 13:21:38 PDT 2026
https://github.com/zeroomega updated https://github.com/llvm/llvm-project/pull/210496
>From bb4a35e9159eaf8eb0c372184b7be35b2df5ad8d Mon Sep 17 00:00:00 2001
From: Haowei Wu <haowei at google.com>
Date: Fri, 17 Jul 2026 17:26:19 -0700
Subject: [PATCH] Reapply "Skipping host target exports during
cross-compilation" (#210468)
This reverts commit 42eb7db188f23625872b6f1d722979a3100d170e.
This reland 3fbb037d03e7ff1ef1cd9156363e895af7caaf98 (#209922).
Under CMake 4+, calling add_library(... SHARED IMPORTED) on a
target platform that lacks dynamic linking support triggers a fatal
error. This becomes an issue when building LLVM and runtimes for
baremetal targets like armv6m-none-eabi. This patch
adds the option "LLVM_OMIT_EXPORTS_FROM_CONFIG" in LLVM.
When used in sub builds like LLVM runtimes, it makes CMake to skip
including the LLVM and Clang exports. This mitigates the CMake 4
errors on baremetal runtimes.
---
clang/cmake/modules/ClangConfig.cmake.in | 7 +++++--
compiler-rt/cmake/Modules/CompilerRTUtils.cmake | 10 ++++++++++
llvm/cmake/modules/LLVMConfig.cmake.in | 2 +-
runtimes/CMakeLists.txt | 11 +++++++++++
4 files changed, 27 insertions(+), 3 deletions(-)
diff --git a/clang/cmake/modules/ClangConfig.cmake.in b/clang/cmake/modules/ClangConfig.cmake.in
index 68f723d050117..f72a7d49602d8 100644
--- a/clang/cmake/modules/ClangConfig.cmake.in
+++ b/clang/cmake/modules/ClangConfig.cmake.in
@@ -12,8 +12,11 @@ set(CLANG_INCLUDE_DIRS "@CLANG_CONFIG_INCLUDE_DIRS@")
set(CLANG_LINK_CLANG_DYLIB "@CLANG_LINK_CLANG_DYLIB@")
set(CLANG_DEFAULT_LINKER "@CLANG_DEFAULT_LINKER@")
-# Provide all our library targets to users.
- at CLANG_CONFIG_INCLUDE_EXPORTS@
+# Provide all our library targets to users. Skip when
+# LLVM_OMIT_EXPORTS_FROM_CONFIG flag is set.
+if(NOT LLVM_OMIT_EXPORTS_FROM_CONFIG)
+ @CLANG_CONFIG_INCLUDE_EXPORTS@
+endif()
# 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/compiler-rt/cmake/Modules/CompilerRTUtils.cmake b/compiler-rt/cmake/Modules/CompilerRTUtils.cmake
index c2bf2e54b9fd4..ee54125618bcd 100644
--- a/compiler-rt/cmake/Modules/CompilerRTUtils.cmake
+++ b/compiler-rt/cmake/Modules/CompilerRTUtils.cmake
@@ -313,6 +313,16 @@ macro(load_llvm_config)
"You are not using the monorepo layout. This configuration is DEPRECATED.")
endif()
+ # Exports from LLVM and Clang may contain shared libraries. When targeting
+ # platforms that lack shared library support, importing such
+ # exports unrestrictedly will trigger an error. Set
+ # LLVM_OMIT_EXPORTS_FROM_CONFIG flag to skip importing these exports
+ # when the target platform does not support shared libraries.
+ get_property(HAS_SHARED_SUPPORT GLOBAL PROPERTY TARGET_SUPPORTS_SHARED_LIBS)
+ message(NOTICE "HAS_SHARED_SUPPORT is ${HAS_SHARED_SUPPORT}")
+ if (NOT HAS_SHARED_SUPPORT)
+ set(LLVM_OMIT_EXPORTS_FROM_CONFIG ON)
+ endif()
find_package(LLVM HINTS "${LLVM_CMAKE_DIR}")
if (NOT LLVM_FOUND)
message(WARNING "UNSUPPORTED COMPILER-RT CONFIGURATION DETECTED: "
diff --git a/llvm/cmake/modules/LLVMConfig.cmake.in b/llvm/cmake/modules/LLVMConfig.cmake.in
index 300c25e7c6101..6f5fcc6a926f9 100644
--- a/llvm/cmake/modules/LLVMConfig.cmake.in
+++ b/llvm/cmake/modules/LLVMConfig.cmake.in
@@ -152,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)
+if(NOT TARGET LLVMSupport AND NOT LLVM_OMIT_EXPORTS_FROM_CONFIG)
@LLVM_CONFIG_INCLUDE_EXPORTS@
@llvm_config_include_buildtree_only_exports@
endif()
diff --git a/runtimes/CMakeLists.txt b/runtimes/CMakeLists.txt
index 67ed49a7dcabb..9bf30b10f67f9 100644
--- a/runtimes/CMakeLists.txt
+++ b/runtimes/CMakeLists.txt
@@ -76,6 +76,17 @@ if(LLVM_BINARY_DIR)
list(APPEND llvm_search_paths "${LLVM_BINARY_DIR}/lib${LLVM_LIBDIR_SUFFIX}/cmake/llvm")
list(APPEND clang_search_paths "${LLVM_BINARY_DIR}/lib${LLVM_LIBDIR_SUFFIX}/cmake/clang")
endif()
+
+# Exports from LLVM and Clang may contain shared libraries. When targeting
+# platforms that lack shared library support, importing such
+# exports unrestrictedly will trigger an error. Set
+# LLVM_OMIT_EXPORTS_FROM_CONFIG flag to skip importing these exports
+# when the target platform does not support shared libraries.
+get_property(HAS_SHARED_SUPPORT GLOBAL PROPERTY TARGET_SUPPORTS_SHARED_LIBS)
+message(NOTICE "HAS_SHARED_SUPPORT is ${HAS_SHARED_SUPPORT}")
+if (NOT HAS_SHARED_SUPPORT)
+ set(LLVM_OMIT_EXPORTS_FROM_CONFIG ON)
+endif()
find_package(LLVM PATHS ${llvm_search_paths} NO_DEFAULT_PATH NO_CMAKE_FIND_ROOT_PATH)
find_package(Clang PATHS ${clang_search_paths} NO_DEFAULT_PATH NO_CMAKE_FIND_ROOT_PATH)
More information about the cfe-commits
mailing list