[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