[clang] [llvm] [clang] Use clang.cfg for Library Defaults (PR #188857)
Sam Elliott via llvm-commits
llvm-commits at lists.llvm.org
Thu Mar 26 16:53:53 PDT 2026
https://github.com/lenary updated https://github.com/llvm/llvm-project/pull/188857
>From 72949095e9408ce402e9f7f182ddedde42ab7d63 Mon Sep 17 00:00:00 2001
From: Sam Elliott <aelliott at qti.qualcomm.com>
Date: Thu, 26 Mar 2026 14:53:11 -0700
Subject: [PATCH 1/2] [clang] Use clang.cfg for Library Defaults
This change moves the library configuration out of being hard-coded into
the driver and instead puts it in the clang*.cfg files which are picked
up automatically by clang when invoked.
Co-authored-by: Jonathon Penix <jpenix at qti.qualcomm.com>
---
clang/include/clang/Config/config.h.cmake | 9 ----
clang/lib/Driver/ToolChain.cpp | 12 +++---
clang/tools/driver/CMakeLists.txt | 40 ++++++++++++++----
clang/tools/driver/clang.cfg.in | 4 ++
.../clang/include/clang/Config/BUILD.gn | 3 --
null.o | Bin 0 -> 732 bytes
.../clang/include/clang/Config/config.h | 9 ----
7 files changed, 40 insertions(+), 37 deletions(-)
create mode 100644 clang/tools/driver/clang.cfg.in
create mode 100644 null.o
diff --git a/clang/include/clang/Config/config.h.cmake b/clang/include/clang/Config/config.h.cmake
index 05e4deb671a7e..e8c16ee3fe2b5 100644
--- a/clang/include/clang/Config/config.h.cmake
+++ b/clang/include/clang/Config/config.h.cmake
@@ -14,15 +14,6 @@
/* Default linker to use. */
#define CLANG_DEFAULT_LINKER "${CLANG_DEFAULT_LINKER}"
-/* Default C++ stdlib to use. */
-#define CLANG_DEFAULT_CXX_STDLIB "${CLANG_DEFAULT_CXX_STDLIB}"
-
-/* Default runtime library to use. */
-#define CLANG_DEFAULT_RTLIB "${CLANG_DEFAULT_RTLIB}"
-
-/* Default unwind library to use. */
-#define CLANG_DEFAULT_UNWINDLIB "${CLANG_DEFAULT_UNWINDLIB}"
-
/* Default objcopy to use */
#define CLANG_DEFAULT_OBJCOPY "${CLANG_DEFAULT_OBJCOPY}"
diff --git a/clang/lib/Driver/ToolChain.cpp b/clang/lib/Driver/ToolChain.cpp
index 94913837f5339..4891934ccce0a 100644
--- a/clang/lib/Driver/ToolChain.cpp
+++ b/clang/lib/Driver/ToolChain.cpp
@@ -1332,14 +1332,13 @@ ToolChain::RuntimeLibType ToolChain::GetRuntimeLibType(
return *runtimeLibType;
const Arg* A = Args.getLastArg(options::OPT_rtlib_EQ);
- StringRef LibName = A ? A->getValue() : CLANG_DEFAULT_RTLIB;
+ StringRef LibName = A ? A->getValue() : "";
- // Only use "platform" in tests to override CLANG_DEFAULT_RTLIB!
if (LibName == "compiler-rt")
runtimeLibType = ToolChain::RLT_CompilerRT;
else if (LibName == "libgcc")
runtimeLibType = ToolChain::RLT_Libgcc;
- else if (LibName == "platform")
+ else if (LibName == "platform" || LibName == "")
runtimeLibType = GetDefaultRuntimeLibType();
else {
if (A)
@@ -1358,7 +1357,7 @@ ToolChain::UnwindLibType ToolChain::GetUnwindLibType(
return *unwindLibType;
const Arg *A = Args.getLastArg(options::OPT_unwindlib_EQ);
- StringRef LibName = A ? A->getValue() : CLANG_DEFAULT_UNWINDLIB;
+ StringRef LibName = A ? A->getValue() : "";
if (LibName == "none")
unwindLibType = ToolChain::UNW_None;
@@ -1393,14 +1392,13 @@ ToolChain::CXXStdlibType ToolChain::GetCXXStdlibType(const ArgList &Args) const{
return *cxxStdlibType;
const Arg *A = Args.getLastArg(options::OPT_stdlib_EQ);
- StringRef LibName = A ? A->getValue() : CLANG_DEFAULT_CXX_STDLIB;
+ StringRef LibName = A ? A->getValue() : "";
- // Only use "platform" in tests to override CLANG_DEFAULT_CXX_STDLIB!
if (LibName == "libc++")
cxxStdlibType = ToolChain::CST_Libcxx;
else if (LibName == "libstdc++")
cxxStdlibType = ToolChain::CST_Libstdcxx;
- else if (LibName == "platform")
+ else if (LibName == "platform" || LibName == "")
cxxStdlibType = GetDefaultCXXStdlibType();
else {
if (A)
diff --git a/clang/tools/driver/CMakeLists.txt b/clang/tools/driver/CMakeLists.txt
index 002aaef005253..d9924b8164f2a 100644
--- a/clang/tools/driver/CMakeLists.txt
+++ b/clang/tools/driver/CMakeLists.txt
@@ -39,6 +39,36 @@ if (CLANG_BOLT AND NOT LLVM_BUILD_INSTRUMENTED)
endif()
endif()
+if(NOT CLANG_LINKS_TO_CREATE)
+ set(CLANG_LINKS_TO_CREATE clang++ clang-cl clang-cpp)
+endif()
+
+if (CLANG_ENABLE_HLSL)
+ set(HLSL_LINK clang-dxc)
+endif()
+
+set(config_files)
+foreach(binary clang ${CLANG_LINKS_TO_CREATE} ${HLSL_LINK})
+ set(config_path "${LLVM_RUNTIME_OUTPUT_INTDIR}/${binary}.cfg")
+ configure_file(clang.cfg.in "${config_path}" @ONLY)
+ list(APPEND config_files "${config_path}")
+endforeach()
+
+install(
+ FILES ${config_files}
+ DESTINATION "${CMAKE_INSTALL_BINDIR}"
+ COMPONENT clang-config-files
+)
+
+if(NOT LLVM_ENABLE_IDE)
+ # Add a dummy target so this can be used with LLVM_DISTRIBUTION_COMPONENTS
+ add_custom_target(clang-config-files
+ DEPENDS ${config_files}
+ )
+ add_llvm_install_targets(install-clang-config-files
+ COMPONENT clang-config-files)
+endif()
+
add_clang_tool(clang
driver.cpp
cc1_main.cpp
@@ -78,15 +108,7 @@ if(CLANG_PLUGIN_SUPPORT)
export_executable_symbols_for_plugins(clang)
endif()
-add_dependencies(clang clang-resource-headers)
-
-if(NOT CLANG_LINKS_TO_CREATE)
- set(CLANG_LINKS_TO_CREATE clang++ clang-cl clang-cpp)
-endif()
-
-if (CLANG_ENABLE_HLSL)
- set(HLSL_LINK clang-dxc)
-endif()
+add_dependencies(clang clang-resource-headers clang-config-files)
foreach(link ${CLANG_LINKS_TO_CREATE} ${HLSL_LINK})
add_clang_symlink(${link} clang)
diff --git a/clang/tools/driver/clang.cfg.in b/clang/tools/driver/clang.cfg.in
new file mode 100644
index 0000000000000..5767499ced72e
--- /dev/null
+++ b/clang/tools/driver/clang.cfg.in
@@ -0,0 +1,4 @@
+
+--stdlib=@CLANG_DEFAULT_CXX_STDLIB@
+--unwindlib=@CLANG_DEFAULT_UNWINDLIB@
+--rtlib=@CLANG_DEFAULT_RTLIB@
diff --git a/llvm/utils/gn/secondary/clang/include/clang/Config/BUILD.gn b/llvm/utils/gn/secondary/clang/include/clang/Config/BUILD.gn
index e4d1e9e3d6f2b..097e8120dd656 100644
--- a/llvm/utils/gn/secondary/clang/include/clang/Config/BUILD.gn
+++ b/llvm/utils/gn/secondary/clang/include/clang/Config/BUILD.gn
@@ -10,11 +10,8 @@ write_cmake_config("Config") {
"BUG_REPORT_URL=https://github.com/llvm/llvm-project/issues/",
"CLANG_DEFAULT_PIE_ON_LINUX=1",
"CLANG_DEFAULT_LINKER=",
- "CLANG_DEFAULT_CXX_STDLIB=",
- "CLANG_DEFAULT_RTLIB=",
"CLANG_DEFAULT_OBJCOPY=objcopy",
"CLANG_DEFAULT_OPENMP_RUNTIME=libomp",
- "CLANG_DEFAULT_UNWINDLIB=",
"CLANG_INSTALL_LIBDIR_BASENAME=lib",
"CLANG_RESOURCE_DIR=",
"C_INCLUDE_DIRS=",
diff --git a/null.o b/null.o
new file mode 100644
index 0000000000000000000000000000000000000000..4ea713dceea815f0703e3f3ceb9ede698d866e20
GIT binary patch
literal 732
zcmZuvJx>Bb5S{Z735}q!zrsR8T=qT)U at VZRi3ycTt@p89E?Ex4-4O~yEd39*Rwn)f
z3mg9iy@?h!mf|eu$pOx0Z)V=S%<SG<=P?U!53k;{1h5XVk&q3;-#Bp at tfx%@dPN*F
zG}9o)i at XNV7h(m$0&OY16+EZU>~O%6BK at Zy<O at I?W<~DydBVHHz*smR&TW>Bgfa8t
zo^zHffKom>J~?c+E?TF}eePLyHzerh;2w8;v&#Ze$Y6s{+&8%MAQh8-J{%OG0q_M|
zAmIYoJd0~>EAqogvAOBH%7FC)ujeb8N^mJVrIJRq3azUZs_B|uD|L)Itx}_|)hhO$
zI%30Xb(Bz4L)X<R(djNgS|>40p1WI|q%~Su;s^x$r1X)OI08XVN*i&1SrY098?U|R
z1R^*yT~;xdC83P4@%__>Kw^v809j1u&nystMu(Xpq0<4A337mRJf1v at Z$w<lk2s%_
T|2`WS5zYtQOVe at i54-RKv>;!P
literal 0
HcmV?d00001
diff --git a/utils/bazel/llvm-project-overlay/clang/include/clang/Config/config.h b/utils/bazel/llvm-project-overlay/clang/include/clang/Config/config.h
index fd26489ffd5a8..de8b64e3989ec 100644
--- a/utils/bazel/llvm-project-overlay/clang/include/clang/Config/config.h
+++ b/utils/bazel/llvm-project-overlay/clang/include/clang/Config/config.h
@@ -28,15 +28,6 @@
/* Default linker to use. */
#define CLANG_DEFAULT_LINKER ""
-/* Default C++ stdlib to use. */
-#define CLANG_DEFAULT_CXX_STDLIB ""
-
-/* Default runtime library to use. */
-#define CLANG_DEFAULT_RTLIB ""
-
-/* Default unwind library to use. */
-#define CLANG_DEFAULT_UNWINDLIB ""
-
/* Default objcopy to use */
#define CLANG_DEFAULT_OBJCOPY "objcopy"
>From 9b7b56a780cfd77fb9139fd840674d7caf851174 Mon Sep 17 00:00:00 2001
From: Sam Elliott <aelliott at qti.qualcomm.com>
Date: Thu, 26 Mar 2026 16:43:08 -0700
Subject: [PATCH 2/2] minor tidy up to reduce diff
---
clang/tools/driver/CMakeLists.txt | 66 ++++++++++++++++---------------
clang/tools/driver/clang.cfg.in | 2 +-
2 files changed, 36 insertions(+), 32 deletions(-)
diff --git a/clang/tools/driver/CMakeLists.txt b/clang/tools/driver/CMakeLists.txt
index d9924b8164f2a..c31ee7d6e756c 100644
--- a/clang/tools/driver/CMakeLists.txt
+++ b/clang/tools/driver/CMakeLists.txt
@@ -39,36 +39,6 @@ if (CLANG_BOLT AND NOT LLVM_BUILD_INSTRUMENTED)
endif()
endif()
-if(NOT CLANG_LINKS_TO_CREATE)
- set(CLANG_LINKS_TO_CREATE clang++ clang-cl clang-cpp)
-endif()
-
-if (CLANG_ENABLE_HLSL)
- set(HLSL_LINK clang-dxc)
-endif()
-
-set(config_files)
-foreach(binary clang ${CLANG_LINKS_TO_CREATE} ${HLSL_LINK})
- set(config_path "${LLVM_RUNTIME_OUTPUT_INTDIR}/${binary}.cfg")
- configure_file(clang.cfg.in "${config_path}" @ONLY)
- list(APPEND config_files "${config_path}")
-endforeach()
-
-install(
- FILES ${config_files}
- DESTINATION "${CMAKE_INSTALL_BINDIR}"
- COMPONENT clang-config-files
-)
-
-if(NOT LLVM_ENABLE_IDE)
- # Add a dummy target so this can be used with LLVM_DISTRIBUTION_COMPONENTS
- add_custom_target(clang-config-files
- DEPENDS ${config_files}
- )
- add_llvm_install_targets(install-clang-config-files
- COMPONENT clang-config-files)
-endif()
-
add_clang_tool(clang
driver.cpp
cc1_main.cpp
@@ -108,12 +78,46 @@ if(CLANG_PLUGIN_SUPPORT)
export_executable_symbols_for_plugins(clang)
endif()
-add_dependencies(clang clang-resource-headers clang-config-files)
+add_dependencies(clang clang-resource-headers)
+
+if(NOT CLANG_LINKS_TO_CREATE)
+ set(CLANG_LINKS_TO_CREATE clang++ clang-cl clang-cpp)
+endif()
+
+if (CLANG_ENABLE_HLSL)
+ set(HLSL_LINK clang-dxc)
+endif()
foreach(link ${CLANG_LINKS_TO_CREATE} ${HLSL_LINK})
add_clang_symlink(${link} clang)
endforeach()
+set(config_files)
+foreach(binary clang ${CLANG_LINKS_TO_CREATE})
+ if (NOT ${binary} STREQUAL "clang-cl")
+ set(config_path "${LLVM_RUNTIME_OUTPUT_INTDIR}/${binary}.cfg")
+ configure_file(clang.cfg.in "${config_path}" @ONLY)
+ list(APPEND config_files "${config_path}")
+ endif()
+endforeach()
+
+install(
+ FILES ${config_files}
+ DESTINATION "${CMAKE_INSTALL_BINDIR}"
+ COMPONENT clang-config-files
+)
+
+if(NOT LLVM_ENABLE_IDE)
+ # Add a dummy target so this can be used with LLVM_DISTRIBUTION_COMPONENTS
+ add_custom_target(clang-config-files
+ DEPENDS ${config_files}
+ )
+ add_llvm_install_targets(install-clang-config-files
+ COMPONENT clang-config-files)
+endif()
+
+add_dependencies(clang clang-config-files)
+
# Configure plist creation for OS X.
set (TOOL_INFO_PLIST "Info.plist" CACHE STRING "Plist name")
if (APPLE)
diff --git a/clang/tools/driver/clang.cfg.in b/clang/tools/driver/clang.cfg.in
index 5767499ced72e..30134b2c6d35a 100644
--- a/clang/tools/driver/clang.cfg.in
+++ b/clang/tools/driver/clang.cfg.in
@@ -1,4 +1,4 @@
-
+# This file provides the defaults for the stdlib/unwindlib/rtlib arguments
--stdlib=@CLANG_DEFAULT_CXX_STDLIB@
--unwindlib=@CLANG_DEFAULT_UNWINDLIB@
--rtlib=@CLANG_DEFAULT_RTLIB@
More information about the llvm-commits
mailing list