https://github.com/artagnon updated 
https://github.com/llvm/llvm-project/pull/176353

>From 0b79b8552ced32be8f55be6f063533f32d98dd7f Mon Sep 17 00:00:00 2001
From: Ramkumar Ramachandra <[email protected]>
Date: Thu, 15 Jan 2026 16:15:39 +0000
Subject: [PATCH 1/2] [cmake] Add config for riscv(32|64)-unknown-elf

Add a config to clang/cmake/caches to document building compiler-rt for
a baremetal RISCV target. It was tested on macOS, and has necessitated
some fixes to LLVMConfig and ClangConfig: the inclusion of LLVMExports
relies on the target system supporting shared libraries, which is not
the case for a baremetal target. However, since it is not necessary,
guard the import with CMAKE_TARGET_SUPPORTS_SHARED_LIBS, which would be
completely non-functional for all non-baremetal targets. Also add
Generic-ELF to the CMAKE_SYSTEM_NAME matcher in HandleLLVMOptions, so we
can use Generic-ELF to describe the riscv(32|64)-unknown-elf targets.

Documenting building libcxx and libcxxabi for this target is left to a
follow-up.
---
 clang/cmake/caches/BaremetalRISCV.cmake    | 37 ++++++++++++++++++++++
 clang/cmake/modules/ClangConfig.cmake.in   |  4 ++-
 llvm/cmake/modules/HandleLLVMOptions.cmake |  3 +-
 llvm/cmake/modules/LLVMConfig.cmake.in     |  2 +-
 4 files changed, 43 insertions(+), 3 deletions(-)
 create mode 100644 clang/cmake/caches/BaremetalRISCV.cmake

diff --git a/clang/cmake/caches/BaremetalRISCV.cmake 
b/clang/cmake/caches/BaremetalRISCV.cmake
new file mode 100644
index 0000000000000..bac61362f1094
--- /dev/null
+++ b/clang/cmake/caches/BaremetalRISCV.cmake
@@ -0,0 +1,37 @@
+# Build clang and compiler-rt for Baremetal RISC-V (cross-compiling)
+#
+# Use this as:
+#
+#  $ cmake -GNinja -DCMAKE_BUILD_TYPE=Debug -DLLVM_ENABLE_PROJECTS=clang \
+#    -DLLVM_ENABLE_RUNTIMES=compiler-rt \
+#    -C../clang/cmake/caches/BaremetalRISCV.cmake ../llvm
+#  $ ninja runtimes-riscv64-unknown-elf runtimes-riscv32-unknown-elf
+#
+set(TRIPLES riscv64-unknown-elf;riscv32-unknown-elf)
+set(LLVM_BUILTIN_TARGETS ${TRIPLES} CACHE STRING "")
+set(LLVM_RUNTIME_TARGETS ${TRIPLES} CACHE STRING "")
+set(LLVM_ENABLE_PER_TARGET_RUNTIME_DIR ON CACHE BOOL "")
+
+foreach(target ${TRIPLES})
+  # builtins config
+  set(BUILTINS_${target}_CMAKE_BUILD_TYPE Release CACHE STRING "")
+  set(BUILTINS_${target}_CMAKE_SYSTEM_NAME Generic-ELF CACHE STRING "")
+  set(BUILTINS_${target}_COMPILER_RT_BAREMETAL_BUILD ON CACHE BOOL "")
+  set(BUILTINS_${target}_COMPILER_RT_OS_DIR ${target} CACHE STRING "")
+
+  # enable compiler-rt in runtimes
+  set(RUNTIMES_${target}_ENABLE_RUNTIMES compiler-rt CACHE STRING "")
+
+  # runtimes config
+  set(RUNTIMES_${target}_CMAKE_BUILD_TYPE Release CACHE STRING "")
+  set(RUNTIMES_${target}_CMAKE_SYSTEM_NAME Generic-ELF CACHE STRING "")
+  set(RUNTIMES_${target}_COMPILER_RT_BAREMETAL_BUILD ON CACHE BOOL "")
+  set(RUNTIMES_${target}_COMPILER_RT_OS_DIR ${target} CACHE STRING "")
+
+  # additional runtimes config for compiler-rt
+  set(RUNTIMES_${target}_COMPILER_RT_BUILD_LIBFUZZER OFF CACHE BOOL "")
+  set(RUNTIMES_${target}_COMPILER_RT_BUILD_PROFILE OFF CACHE BOOL "")
+  set(RUNTIMES_${target}_COMPILER_RT_BUILD_SANITIZERS OFF CACHE BOOL "")
+  set(RUNTIMES_${target}_COMPILER_RT_BUILD_XRAY OFF CACHE BOOL "")
+  set(RUNTIMES_${target}_COMPILER_RT_USE_BUILTINS_LIBRARY ON CACHE BOOL "")
+endforeach()
diff --git a/clang/cmake/modules/ClangConfig.cmake.in 
b/clang/cmake/modules/ClangConfig.cmake.in
index 68f723d050117..e762cc199f49b 100644
--- a/clang/cmake/modules/ClangConfig.cmake.in
+++ b/clang/cmake/modules/ClangConfig.cmake.in
@@ -13,7 +13,9 @@ set(CLANG_LINK_CLANG_DYLIB "@CLANG_LINK_CLANG_DYLIB@")
 set(CLANG_DEFAULT_LINKER "@CLANG_DEFAULT_LINKER@")
 
 # Provide all our library targets to users.
-@CLANG_CONFIG_INCLUDE_EXPORTS@
+if(CMAKE_TARGET_SUPPORTS_SHARED_LIBS)
+  @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/llvm/cmake/modules/HandleLLVMOptions.cmake 
b/llvm/cmake/modules/HandleLLVMOptions.cmake
index 311123084bf58..653bfd2330c91 100644
--- a/llvm/cmake/modules/HandleLLVMOptions.cmake
+++ b/llvm/cmake/modules/HandleLLVMOptions.cmake
@@ -242,7 +242,8 @@ elseif(FUCHSIA OR UNIX OR CYGWIN)
   else()
     set(LLVM_HAVE_LINK_VERSION_SCRIPT 1)
   endif()
-elseif(CMAKE_SYSTEM_NAME STREQUAL "Generic")
+elseif(CMAKE_SYSTEM_NAME STREQUAL "Generic" OR
+       CMAKE_SYSTEM_NAME STREQUAL "Generic-ELF")
   set(LLVM_ON_UNIX 0)
   set(LLVM_HAVE_LINK_VERSION_SCRIPT 0)
 else()
diff --git a/llvm/cmake/modules/LLVMConfig.cmake.in 
b/llvm/cmake/modules/LLVMConfig.cmake.in
index 70c807abea98a..9d050b8d21d41 100644
--- a/llvm/cmake/modules/LLVMConfig.cmake.in
+++ b/llvm/cmake/modules/LLVMConfig.cmake.in
@@ -144,7 +144,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 CMAKE_TARGET_SUPPORTS_SHARED_LIBS)
   @LLVM_CONFIG_INCLUDE_EXPORTS@
   @llvm_config_include_buildtree_only_exports@
 endif()

>From c7d7634941fe509863be073c2e225386da053b73 Mon Sep 17 00:00:00 2001
From: Ramkumar Ramachandra <[email protected]>
Date: Fri, 16 Jan 2026 15:11:58 +0000
Subject: [PATCH 2/2] [cmake] Fix issues with patch

---
 clang/cmake/caches/BaremetalRISCV.cmake  | 2 ++
 clang/cmake/modules/ClangConfig.cmake.in | 2 +-
 llvm/CMakeLists.txt                      | 3 +++
 llvm/cmake/modules/LLVMConfig.cmake.in   | 2 +-
 4 files changed, 7 insertions(+), 2 deletions(-)

diff --git a/clang/cmake/caches/BaremetalRISCV.cmake 
b/clang/cmake/caches/BaremetalRISCV.cmake
index bac61362f1094..5830268c48b1a 100644
--- a/clang/cmake/caches/BaremetalRISCV.cmake
+++ b/clang/cmake/caches/BaremetalRISCV.cmake
@@ -18,6 +18,7 @@ foreach(target ${TRIPLES})
   set(BUILTINS_${target}_CMAKE_SYSTEM_NAME Generic-ELF CACHE STRING "")
   set(BUILTINS_${target}_COMPILER_RT_BAREMETAL_BUILD ON CACHE BOOL "")
   set(BUILTINS_${target}_COMPILER_RT_OS_DIR ${target} CACHE STRING "")
+  set(BUILTINS_${target}_LLVM_CONFIG_NO_EXPORTS ON CACHE BOOL "")
 
   # enable compiler-rt in runtimes
   set(RUNTIMES_${target}_ENABLE_RUNTIMES compiler-rt CACHE STRING "")
@@ -27,6 +28,7 @@ foreach(target ${TRIPLES})
   set(RUNTIMES_${target}_CMAKE_SYSTEM_NAME Generic-ELF CACHE STRING "")
   set(RUNTIMES_${target}_COMPILER_RT_BAREMETAL_BUILD ON CACHE BOOL "")
   set(RUNTIMES_${target}_COMPILER_RT_OS_DIR ${target} CACHE STRING "")
+  set(RUNTIMES_${target}_LLVM_CONFIG_NO_EXPORTS ON CACHE BOOL "")
 
   # additional runtimes config for compiler-rt
   set(RUNTIMES_${target}_COMPILER_RT_BUILD_LIBFUZZER OFF CACHE BOOL "")
diff --git a/clang/cmake/modules/ClangConfig.cmake.in 
b/clang/cmake/modules/ClangConfig.cmake.in
index e762cc199f49b..65e9b53d8fa6b 100644
--- a/clang/cmake/modules/ClangConfig.cmake.in
+++ b/clang/cmake/modules/ClangConfig.cmake.in
@@ -13,7 +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.
-if(CMAKE_TARGET_SUPPORTS_SHARED_LIBS)
+if(NOT LLVM_CONFIG_NO_EXPORTS)
   @CLANG_CONFIG_INCLUDE_EXPORTS@
 endif()
 
diff --git a/llvm/CMakeLists.txt b/llvm/CMakeLists.txt
index fcbfed4953832..38b32db9cd1c9 100644
--- a/llvm/CMakeLists.txt
+++ b/llvm/CMakeLists.txt
@@ -899,6 +899,9 @@ else()
   option(LLVM_BUILD_LLVM_C_DYLIB "Build libllvm-c re-export library (Darwin 
only)" OFF)
 endif()
 
+option(LLVM_CONFIG_NO_EXPORTS "Suppress exports in CMake package" OFF)
+mark_as_advanced(LLVM_CONFIG_NO_EXPORTS)
+
 # Used to test building the llvm shared library with explicit symbol 
visibility on
 # Windows and Linux. For ELF platforms default symbols visibility is set to 
hidden.
 set(LLVM_BUILD_LLVM_DYLIB_VIS FALSE CACHE BOOL "")
diff --git a/llvm/cmake/modules/LLVMConfig.cmake.in 
b/llvm/cmake/modules/LLVMConfig.cmake.in
index 9d050b8d21d41..60c9cc3c3093f 100644
--- a/llvm/cmake/modules/LLVMConfig.cmake.in
+++ b/llvm/cmake/modules/LLVMConfig.cmake.in
@@ -144,7 +144,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 CMAKE_TARGET_SUPPORTS_SHARED_LIBS)
+if((NOT TARGET LLVMSupport) AND (NOT LLVM_CONFIG_NO_EXPORTS))
   @LLVM_CONFIG_INCLUDE_EXPORTS@
   @llvm_config_include_buildtree_only_exports@
 endif()

_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to