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 <[email protected]> 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 <[email protected]> --- 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@VZRi3ycTt@p89E?Ex4-4O~yEd39*Rwn)f z3mg9iy@?h!mf|eu$pOx0Z)V=S%<SG<=P?U!53k;{1h5XVk&q3;-#Bp@tfx%@dPN*F zG}9o)i@XNV7h(m$0&OY16+EZU>~O%6BK@Zy<O@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@Z$w<lk2s%_ T|2`WS5zYtQOVe@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 <[email protected]> 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@ _______________________________________________ cfe-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
