https://github.com/androm3da updated 
https://github.com/llvm/llvm-project/pull/201207

>From ea240269bbb901367e1acad7375e3f7521edb015 Mon Sep 17 00:00:00 2001
From: Brian Cain <[email protected]>
Date: Mon, 1 Jun 2026 18:37:04 -0700
Subject: [PATCH] [Hexagon] Add cmake cache files for cross-toolchain
 distribution build

Add and extend clang/cmake/caches/hexagon-unknown-linux-musl-clang*
to drive install-distribution builds: host tools, per-target builtins,
and runtimes for hexagon-unknown-linux-musl.
---
 .../caches/generic-allow-shared-imports.cmake |  11 ++
 ...-unknown-linux-musl-clang-cross-dist.cmake |  32 ++++
 ...known-linux-musl-clang-defaults-dist.cmake |  15 ++
 ...exagon-unknown-linux-musl-clang-dist.cmake | 180 ++++++++++++++++++
 ...-unknown-linux-musl-clang-dylib-dist.cmake |  10 +
 5 files changed, 248 insertions(+)
 create mode 100644 clang/cmake/caches/generic-allow-shared-imports.cmake
 create mode 100644 
clang/cmake/caches/hexagon-unknown-linux-musl-clang-cross-dist.cmake
 create mode 100644 
clang/cmake/caches/hexagon-unknown-linux-musl-clang-defaults-dist.cmake
 create mode 100644 
clang/cmake/caches/hexagon-unknown-linux-musl-clang-dist.cmake
 create mode 100644 
clang/cmake/caches/hexagon-unknown-linux-musl-clang-dylib-dist.cmake

diff --git a/clang/cmake/caches/generic-allow-shared-imports.cmake 
b/clang/cmake/caches/generic-allow-shared-imports.cmake
new file mode 100644
index 0000000000000..50f336a23b8a0
--- /dev/null
+++ b/clang/cmake/caches/generic-allow-shared-imports.cmake
@@ -0,0 +1,11 @@
+# Override Platform/Generic.cmake's TARGET_SUPPORTS_SHARED_LIBS=FALSE.
+#
+# The baremetal builtins ExternalProject (CMAKE_SYSTEM_NAME=Generic) does
+# find_package(LLVM) which loads LLVMExports.cmake.  That file declares
+# host-only shared libraries (LTO, Remarks) as SHARED IMPORTED targets.
+# CMake 4.x rejects these on platforms where TARGET_SUPPORTS_SHARED_LIBS
+# is FALSE, even though the builtins build never links against them.
+#
+# Loaded via CMAKE_PROJECT_INCLUDE so it runs after project() (which loads
+# Platform/Generic.cmake) but before find_package(LLVM).
+set_property(GLOBAL PROPERTY TARGET_SUPPORTS_SHARED_LIBS TRUE)
diff --git 
a/clang/cmake/caches/hexagon-unknown-linux-musl-clang-cross-dist.cmake 
b/clang/cmake/caches/hexagon-unknown-linux-musl-clang-cross-dist.cmake
new file mode 100644
index 0000000000000..64c3fa2fcb467
--- /dev/null
+++ b/clang/cmake/caches/hexagon-unknown-linux-musl-clang-cross-dist.cmake
@@ -0,0 +1,32 @@
+# Cross-compilation additions: sysroot and clang symlinks — distribution build
+#
+# Loaded after hexagon-unknown-linux-musl-clang-dist.cmake to add
+# cross-toolchain specifics.
+
+set(DEFAULT_SYSROOT "../target/hexagon-unknown-linux-musl/" CACHE STRING "")
+
+set(CLANG_LINKS_TO_CREATE
+  hexagon-linux-musl-clang++
+  hexagon-linux-musl-clang
+  hexagon-unknown-linux-musl-clang++
+  hexagon-unknown-linux-musl-clang
+  hexagon-none-elf-clang++
+  hexagon-none-elf-clang
+  hexagon-unknown-none-elf-clang++
+  hexagon-unknown-none-elf-clang
+  hexagon-h2-clang++
+  hexagon-h2-clang
+  hexagon-unknown-h2-clang++
+  hexagon-unknown-h2-clang
+  hexagon-unknown-h2-elf-clang++
+  hexagon-unknown-h2-elf-clang
+  hexagon-h2-elf-clang++
+  hexagon-h2-elf-clang
+  hexagon-qurt-clang++
+  hexagon-qurt-clang
+  hexagon-unknown-qurt-clang++
+  hexagon-unknown-qurt-clang
+  clang++
+  clang-cl
+  clang-cpp
+  CACHE STRING "")
diff --git 
a/clang/cmake/caches/hexagon-unknown-linux-musl-clang-defaults-dist.cmake 
b/clang/cmake/caches/hexagon-unknown-linux-musl-clang-defaults-dist.cmake
new file mode 100644
index 0000000000000..9136a26c5f778
--- /dev/null
+++ b/clang/cmake/caches/hexagon-unknown-linux-musl-clang-defaults-dist.cmake
@@ -0,0 +1,15 @@
+# Clang defaults for Hexagon Linux (musl) cross-compilation — distribution 
build.
+#
+# Used by build-toolchain.sh for the full install-distribution build path.
+# Load this before hexagon-unknown-linux-musl-clang-dist.cmake.
+#
+# Sets the compiler driver defaults so that plain `clang` invocations
+# target hexagon-unknown-linux-musl with the expected runtime libraries.
+
+
+set(LLVM_DEFAULT_TARGET_TRIPLE "hexagon-unknown-linux-musl" CACHE STRING "")
+set(CLANG_DEFAULT_CXX_STDLIB "libc++" CACHE STRING "")
+set(CLANG_DEFAULT_RTLIB "compiler-rt" CACHE STRING "")
+set(CLANG_DEFAULT_UNWINDLIB "libunwind" CACHE STRING "")
+set(CLANG_DEFAULT_LINKER "lld" CACHE STRING "")
+set(CLANG_DEFAULT_OBJCOPY "llvm-objcopy" CACHE STRING "")
diff --git a/clang/cmake/caches/hexagon-unknown-linux-musl-clang-dist.cmake 
b/clang/cmake/caches/hexagon-unknown-linux-musl-clang-dist.cmake
new file mode 100644
index 0000000000000..66c40e694d119
--- /dev/null
+++ b/clang/cmake/caches/hexagon-unknown-linux-musl-clang-dist.cmake
@@ -0,0 +1,180 @@
+# Clang + LLVM host toolchain for Hexagon cross-compilation — distribution 
build
+#
+# Configures a distribution build of clang/lld/llvm-tools targeting
+# hexagon-unknown-linux-musl, including per-target compiler-rt builtins
+# and runtimes (libcxx/libcxxabi/libunwind/compiler-rt sanitizers).
+#
+# Usage (native host build):
+#   cmake -G Ninja \
+#     -C 
clang/cmake/caches/hexagon-unknown-linux-musl-clang-defaults-dist.cmake \
+#     -C clang/cmake/caches/hexagon-unknown-linux-musl-clang-dist.cmake \
+#     -C clang/cmake/caches/hexagon-unknown-linux-musl-clang-cross-dist.cmake \
+#     -DCMAKE_INSTALL_PREFIX=<prefix> \
+#     -B <build> -S llvm
+#   cmake --build <build> --target install-distribution
+#   cmake --build <build> --target install-builtins      # after musl headers
+#   cmake --build <build> --target install-runtimes-hexagon-unknown-linux-musl
+#
+# For zig cross-builds also add:
+#   -C clang/cmake/caches/hexagon-unknown-linux-musl-clang-dylib-dist.cmake
+
+set(LLVM_TARGETS_TO_BUILD "Hexagon" CACHE STRING "")
+set(LLVM_ENABLE_PROJECTS "clang;lld" CACHE STRING "")
+set(CMAKE_BUILD_TYPE Release CACHE STRING "")
+set(LLVM_ENABLE_PIC ON CACHE BOOL "")
+
+# LLVM dylib is not needed for the cross-toolchain distribution.
+# Kept OFF for consistency with ELD's static LLVM linkage (libLW.so).
+set(LLVM_BUILD_LLVM_DYLIB OFF CACHE BOOL "")
+set(LLVM_LINK_LLVM_DYLIB OFF CACHE BOOL "")
+set(LLVM_VERSION_SUFFIX "" CACHE STRING "")
+
+set(CMAKE_INSTALL_RPATH "$ORIGIN/../lib" CACHE STRING "")
+
+# Trim
+set(LLVM_INSTALL_TOOLCHAIN_ONLY ON CACHE BOOL "")
+set(LLVM_INCLUDE_TESTS OFF CACHE BOOL "")
+set(LLVM_INCLUDE_DOCS OFF CACHE BOOL "")
+set(LLVM_ENABLE_ZLIB ON CACHE BOOL "")
+set(LLVM_ENABLE_ZSTD ON CACHE BOOL "")
+
+# Distribution components -- installed via `--target install-distribution`
+set(LLVM_TOOLCHAIN_TOOLS
+  llvm-addr2line
+  llvm-ar
+  llvm-config
+  llvm-cov
+  llvm-cxxfilt
+  llvm-dwarfdump
+  llvm-mc
+  llvm-nm
+  llvm-objcopy
+  llvm-objdump
+  llvm-profdata
+  llvm-ranlib
+  llvm-readelf
+  llvm-readobj
+  llvm-size
+  llvm-strings
+  llvm-strip
+  llvm-symbolizer
+  CACHE STRING "")
+
+set(LLVM_DISTRIBUTION_COMPONENTS
+  clang
+  clang-resource-headers
+  lld
+  LTO
+  ${LLVM_TOOLCHAIN_TOOLS}
+  CACHE STRING "")
+# Note: builtins are NOT in LLVM_DISTRIBUTION_COMPONENTS because the
+# hexagon-unknown-linux-musl builtins need musl headers (stdlib.h) which
+# are installed later.  Build builtins explicitly via:
+#   cmake --build <build> --target install-builtins
+
+# -- Per-target builtins -----------------------------------------------
+set(LLVM_BUILTIN_TARGETS "hexagon-unknown-linux-musl;hexagon-unknown-none-elf" 
CACHE STRING "")
+
+# Linux builtins (see compiler-rt/cmake/caches/hexagon-linux-builtins.cmake)
+# CMAKE_SYSROOT is needed because the build-tree clang doesn't resolve the
+# relative DEFAULT_SYSROOT correctly; musl headers must be installed first.
+set(BUILTINS_hexagon-unknown-linux-musl_CMAKE_SYSTEM_NAME Linux CACHE STRING 
"")
+set(BUILTINS_hexagon-unknown-linux-musl_CMAKE_BUILD_TYPE Release CACHE STRING 
"")
+set(BUILTINS_hexagon-unknown-linux-musl_CMAKE_SYSROOT
+    "${CMAKE_INSTALL_PREFIX}/target/hexagon-unknown-linux-musl" CACHE STRING 
"")
+set(BUILTINS_hexagon-unknown-linux-musl_CMAKE_ASM_FLAGS "-G0 -mlong-calls 
-fno-pic" CACHE STRING "")
+set(BUILTINS_hexagon-unknown-linux-musl_COMPILER_RT_BUILTINS_ENABLE_PIC OFF 
CACHE BOOL "")
+
+# Baremetal builtins (see 
compiler-rt/cmake/caches/hexagon-builtins-baremetal.cmake)
+set(BUILTINS_hexagon-unknown-none-elf_CMAKE_SYSTEM_NAME Generic CACHE STRING 
"")
+set(BUILTINS_hexagon-unknown-none-elf_CMAKE_BUILD_TYPE Release CACHE STRING "")
+set(BUILTINS_hexagon-unknown-none-elf_CMAKE_ASM_FLAGS "-G0 -mlong-calls 
-fno-pic" CACHE STRING "")
+set(BUILTINS_hexagon-unknown-none-elf_CMAKE_C_FLAGS "-ffreestanding" CACHE 
STRING "")
+set(BUILTINS_hexagon-unknown-none-elf_CMAKE_CXX_FLAGS "-ffreestanding" CACHE 
STRING "")
+set(BUILTINS_hexagon-unknown-none-elf_COMPILER_RT_BAREMETAL_BUILD ON CACHE 
BOOL "")
+set(BUILTINS_hexagon-unknown-none-elf_COMPILER_RT_BUILTINS_ENABLE_PIC OFF 
CACHE BOOL "")
+# CMake 4.x + Generic platform rejects SHARED IMPORTED targets from
+# find_package(LLVM).  Override after project() so the declarations succeed.
+set(BUILTINS_hexagon-unknown-none-elf_CMAKE_PROJECT_INCLUDE
+    "${CMAKE_CURRENT_LIST_DIR}/generic-allow-shared-imports.cmake" CACHE 
STRING "")
+
+# -- Per-target runtimes (built AFTER musl, via separate build target) -
+set(LLVM_RUNTIME_TARGETS "hexagon-unknown-linux-musl" CACHE STRING "")
+
+# Sysroot path for musl headers -- populated by musl build before runtimes.
+set(RUNTIMES_hexagon-unknown-linux-musl_CMAKE_SYSTEM_NAME Linux CACHE STRING 
"")
+set(RUNTIMES_hexagon-unknown-linux-musl_CMAKE_BUILD_TYPE Release CACHE STRING 
"")
+set(RUNTIMES_hexagon-unknown-linux-musl_CMAKE_SYSROOT
+    "${CMAKE_INSTALL_PREFIX}/target/hexagon-unknown-linux-musl" CACHE STRING 
"")
+# Note: CMAKE_TRY_COMPILE_TARGET_TYPE is intentionally NOT set to 
STATIC_LIBRARY
+# here.  Runtimes configure lazily (at cmake --build time), after musl+builtins
+# are fully installed, so cmake can do real link tests.  This avoids false
+# positives from check_library_exists() (e.g. __cxa_thread_atexit_impl).
+
+# Runtimes to build (see libcxx/cmake/caches/hexagon-linux-runtimes.cmake
+# and compiler-rt/cmake/caches/hexagon-linux-clangrt.cmake)
+set(RUNTIMES_hexagon-unknown-linux-musl_LLVM_ENABLE_RUNTIMES
+    "libcxx;libcxxabi;libunwind;compiler-rt" CACHE STRING "")
+
+# Per-target runtime dirs OFF -- the Hexagon driver overrides 
getCompilerRTPath()
+# to return ${SysRoot}/usr/lib/ and searches there with arch-suffix naming
+# (libclang_rt.<name>-hexagon.{a,so}).  Per-target ON would install to a
+# <triple>/ subdirectory that the driver doesn't search.  All install dirs
+# below are set explicitly, so the per-target default paths don't matter.
+set(RUNTIMES_hexagon-unknown-linux-musl_LLVM_ENABLE_PER_TARGET_RUNTIME_DIR OFF 
CACHE BOOL "")
+
+# compiler-rt sanitizer/xray/memprof libraries -> sysroot lib dir.
+# The Hexagon driver's getCompilerRTPath() returns ${SysRoot}/usr/lib/,
+# so compiler-rt libraries must be installed there with arch-suffix names.
+# Headers stay in the resource dir (COMPILER_RT_INSTALL_INCLUDE_DIR default).
+set(RUNTIMES_hexagon-unknown-linux-musl_COMPILER_RT_INSTALL_LIBRARY_DIR
+    "target/hexagon-unknown-linux-musl/usr/lib" CACHE PATH "")
+
+# libc++/libcxxabi/libunwind headers and libraries -> sysroot.
+# Paths are relative to CMAKE_INSTALL_PREFIX (the host toolchain root).
+set(RUNTIMES_hexagon-unknown-linux-musl_LIBCXX_INSTALL_LIBRARY_DIR
+    "target/hexagon-unknown-linux-musl/usr/lib" CACHE STRING "")
+set(RUNTIMES_hexagon-unknown-linux-musl_LIBCXX_INSTALL_INCLUDE_DIR
+    "target/hexagon-unknown-linux-musl/usr/include/c++/v1" CACHE STRING "")
+set(RUNTIMES_hexagon-unknown-linux-musl_LIBCXX_INSTALL_INCLUDE_TARGET_DIR
+    "target/hexagon-unknown-linux-musl/usr/include/c++/v1" CACHE STRING "")
+set(RUNTIMES_hexagon-unknown-linux-musl_LIBCXXABI_INSTALL_LIBRARY_DIR
+    "target/hexagon-unknown-linux-musl/usr/lib" CACHE STRING "")
+set(RUNTIMES_hexagon-unknown-linux-musl_LIBCXXABI_INSTALL_INCLUDE_DIR
+    "target/hexagon-unknown-linux-musl/usr/include/c++/v1" CACHE STRING "")
+set(RUNTIMES_hexagon-unknown-linux-musl_LIBUNWIND_INSTALL_LIBRARY_DIR
+    "target/hexagon-unknown-linux-musl/usr/lib" CACHE STRING "")
+set(RUNTIMES_hexagon-unknown-linux-musl_LIBUNWIND_INSTALL_INCLUDE_DIR
+    "target/hexagon-unknown-linux-musl/usr/include" CACHE STRING "")
+set(RUNTIMES_hexagon-unknown-linux-musl_LIBCXX_HAS_MUSL_LIBC ON CACHE BOOL "")
+set(RUNTIMES_hexagon-unknown-linux-musl_LIBCXX_INCLUDE_BENCHMARKS OFF CACHE 
BOOL "")
+set(RUNTIMES_hexagon-unknown-linux-musl_LIBCXX_INCLUDE_TESTS OFF CACHE BOOL "")
+set(RUNTIMES_hexagon-unknown-linux-musl_LIBCXXABI_INCLUDE_TESTS OFF CACHE BOOL 
"")
+set(RUNTIMES_hexagon-unknown-linux-musl_LIBUNWIND_INCLUDE_TESTS OFF CACHE BOOL 
"")
+set(RUNTIMES_hexagon-unknown-linux-musl_LIBCXX_CXX_ABI libcxxabi CACHE STRING 
"")
+set(RUNTIMES_hexagon-unknown-linux-musl_LIBCXXABI_USE_LLVM_UNWINDER ON CACHE 
BOOL "")
+set(RUNTIMES_hexagon-unknown-linux-musl_LIBCXXABI_ENABLE_SHARED ON CACHE BOOL 
"")
+set(RUNTIMES_hexagon-unknown-linux-musl_LIBCXX_USE_COMPILER_RT ON CACHE BOOL 
"")
+set(RUNTIMES_hexagon-unknown-linux-musl_LIBCXXABI_USE_COMPILER_RT ON CACHE 
BOOL "")
+set(RUNTIMES_hexagon-unknown-linux-musl_LIBUNWIND_USE_COMPILER_RT ON CACHE 
BOOL "")
+set(RUNTIMES_hexagon-unknown-linux-musl_COMPILER_RT_USE_LLVM_UNWINDER ON CACHE 
BOOL "")
+# compiler-rt sanitizer/xray shared libs need in-tree libc++ and builtins.
+# Following Fuchsia's runtimes configuration pattern:
+#   - COMPILER_RT_CXX_LIBRARY=libcxx: in-tree libc++ headers for C++ sources 
(XRay)
+#   - SANITIZER_CXX_ABI=libc++ + INTREE: link sanitizer .so against in-tree 
libc++abi
+#   - COMPILER_RT_USE_BUILTINS_LIBRARY=ON: statically links builtins into each
+#     compiler-rt runtime (via AddCompilerRT.cmake's add_compiler_rt_runtime),
+#     needed because Hexagon uses library calls for division (__hexagon_udivsi3
+#     etc.) and also removes -Wl,-z,defs for any remaining deferred symbols
+set(RUNTIMES_hexagon-unknown-linux-musl_COMPILER_RT_CXX_LIBRARY "libcxx" CACHE 
STRING "")
+set(RUNTIMES_hexagon-unknown-linux-musl_COMPILER_RT_USE_BUILTINS_LIBRARY ON 
CACHE BOOL "")
+set(RUNTIMES_hexagon-unknown-linux-musl_SANITIZER_CXX_ABI "libc++" CACHE 
STRING "")
+set(RUNTIMES_hexagon-unknown-linux-musl_SANITIZER_CXX_ABI_INTREE ON CACHE BOOL 
"")
+set(RUNTIMES_hexagon-unknown-linux-musl_COMPILER_RT_BUILD_BUILTINS OFF CACHE 
BOOL "")
+set(RUNTIMES_hexagon-unknown-linux-musl_COMPILER_RT_BUILD_SANITIZERS ON CACHE 
BOOL "")
+set(RUNTIMES_hexagon-unknown-linux-musl_COMPILER_RT_BUILD_XRAY ON CACHE BOOL 
"")
+set(RUNTIMES_hexagon-unknown-linux-musl_COMPILER_RT_BUILD_PROFILE ON CACHE 
BOOL "")
+set(RUNTIMES_hexagon-unknown-linux-musl_COMPILER_RT_BUILD_GWP_ASAN ON CACHE 
BOOL "")
+set(RUNTIMES_hexagon-unknown-linux-musl_COMPILER_RT_BUILD_LIBFUZZER ON CACHE 
BOOL "")
+set(RUNTIMES_hexagon-unknown-linux-musl_COMPILER_RT_BUILD_MEMPROF ON CACHE 
BOOL "")
+set(RUNTIMES_hexagon-unknown-linux-musl_COMPILER_RT_BUILD_CTX_PROFILE ON CACHE 
BOOL "")
diff --git 
a/clang/cmake/caches/hexagon-unknown-linux-musl-clang-dylib-dist.cmake 
b/clang/cmake/caches/hexagon-unknown-linux-musl-clang-dylib-dist.cmake
new file mode 100644
index 0000000000000..b653a159faeed
--- /dev/null
+++ b/clang/cmake/caches/hexagon-unknown-linux-musl-clang-dylib-dist.cmake
@@ -0,0 +1,10 @@
+# LLVM dylib settings for distribution cross-builds
+#
+# Loaded after hexagon-unknown-linux-musl-clang-dist.cmake to override the
+# static linking defaults.  ELD is incompatible with dylib (libLW.so
+# conflicts with libLLVM.so), so ELD must be excluded when this cache
+# is used.
+
+set(LLVM_BUILD_LLVM_DYLIB ON CACHE BOOL "")
+set(LLVM_LINK_LLVM_DYLIB ON CACHE BOOL "")
+set(CLANG_LINK_LLVM_DYLIB ON CACHE BOOL "")

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

Reply via email to