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
