[clang] [Hexagon] Fix compiler-rt install dir type, scope sanitizers (PR #209375)

Brian Cain via cfe-commits cfe-commits at lists.llvm.org
Mon Jul 13 21:58:11 PDT 2026


https://github.com/androm3da created https://github.com/llvm/llvm-project/pull/209375

COMPILER_RT_INSTALL_LIBRARY_DIR must be CACHE STRING, not CACHE PATH: a relative PATH-typed cache entry resolves against the runtimes sub-build directory instead of CMAKE_INSTALL_PREFIX, misplacing sanitizer libs.

Replace the explicit COMPILER_RT_BUILD_* ON list with COMPILER_RT_SANITIZERS_TO_BUILD=all, since those options already default ON upstream and infeasible sanitizers self-exclude via their own ALL_<X>_SUPPORTED_ARCH lists.

Add FORCE to the dylib overrides so they take effect after hexagon-unknown-linux-musl-clang-dist.cmake has already cached them OFF.

>From a61e2691c1c99821faa06fb85be835cb9405b64d Mon Sep 17 00:00:00 2001
From: Brian Cain <brian.cain at oss.qualcomm.com>
Date: Mon, 13 Jul 2026 21:55:31 -0700
Subject: [PATCH] [Hexagon] Fix compiler-rt install dir type, scope sanitizers,
 force dylib override

COMPILER_RT_INSTALL_LIBRARY_DIR must be CACHE STRING, not CACHE PATH: a
relative PATH-typed cache entry resolves against the runtimes sub-build
directory instead of CMAKE_INSTALL_PREFIX, misplacing sanitizer libs.

Replace the explicit COMPILER_RT_BUILD_* ON list with
COMPILER_RT_SANITIZERS_TO_BUILD=all, since those options already default ON
upstream and infeasible sanitizers self-exclude via their own
ALL_<X>_SUPPORTED_ARCH lists.

Add FORCE to the dylib overrides so they take effect after
hexagon-unknown-linux-musl-clang-dist.cmake has already cached them OFF.
---
 ...exagon-unknown-linux-musl-clang-dist.cmake | 20 +++++++++++--------
 ...-unknown-linux-musl-clang-dylib-dist.cmake |  6 +++---
 2 files changed, 15 insertions(+), 11 deletions(-)

diff --git a/clang/cmake/caches/hexagon-unknown-linux-musl-clang-dist.cmake b/clang/cmake/caches/hexagon-unknown-linux-musl-clang-dist.cmake
index 66c40e694d119..98fceee6d52e8 100644
--- a/clang/cmake/caches/hexagon-unknown-linux-musl-clang-dist.cmake
+++ b/clang/cmake/caches/hexagon-unknown-linux-musl-clang-dist.cmake
@@ -127,8 +127,12 @@ set(RUNTIMES_hexagon-unknown-linux-musl_LLVM_ENABLE_PER_TARGET_RUNTIME_DIR OFF C
 # 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).
+# NOTE: must be CACHE STRING, not CACHE PATH.  A relative PATH-typed cache
+# entry is resolved against the (runtimes sub-) build directory, which sent the
+# sanitizer libs to obj_llvm/.../runtimes-bins instead of the sysroot.  STRING
+# is joined to CMAKE_INSTALL_PREFIX at install time, matching LIBCXX_* below.
 set(RUNTIMES_hexagon-unknown-linux-musl_COMPILER_RT_INSTALL_LIBRARY_DIR
-    "target/hexagon-unknown-linux-musl/usr/lib" CACHE PATH "")
+    "target/hexagon-unknown-linux-musl/usr/lib" CACHE STRING "")
 
 # libc++/libcxxabi/libunwind headers and libraries -> sysroot.
 # Paths are relative to CMAKE_INSTALL_PREFIX (the host toolchain root).
@@ -170,11 +174,11 @@ set(RUNTIMES_hexagon-unknown-linux-musl_COMPILER_RT_CXX_LIBRARY "libcxx" CACHE S
 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 "")
+# COMPILER_RT_BUILD_{SANITIZERS,XRAY,PROFILE,GWP_ASAN,LIBFUZZER,MEMPROF,
+# CTX_PROFILE} all default ON upstream, so they're left unset here.
+# COMPILER_RT_SANITIZERS_TO_BUILD defaults to "all"; set explicitly for
+# documentation clarity. Sanitizers Hexagon can't support (e.g. tsan) simply
+# aren't built, since Hexagon is absent from their own
+# ALL_<X>_SUPPORTED_ARCH list in cmake/Modules/AllSupportedArchDefs.cmake.
 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 "")
+set(RUNTIMES_hexagon-unknown-linux-musl_COMPILER_RT_SANITIZERS_TO_BUILD "all" CACHE STRING "")
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
index b653a159faeed..310a28cf4cca2 100644
--- a/clang/cmake/caches/hexagon-unknown-linux-musl-clang-dylib-dist.cmake
+++ b/clang/cmake/caches/hexagon-unknown-linux-musl-clang-dylib-dist.cmake
@@ -5,6 +5,6 @@
 # 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 "")
+set(LLVM_BUILD_LLVM_DYLIB ON CACHE BOOL "" FORCE)
+set(LLVM_LINK_LLVM_DYLIB ON CACHE BOOL "" FORCE)
+set(CLANG_LINK_LLVM_DYLIB ON CACHE BOOL "" FORCE)



More information about the cfe-commits mailing list