diff --git a/clang-tools-extra/clangd/test/lit.site.cfg.py.in b/clang-tools-extra/clangd/test/lit.site.cfg.py.in --- a/clang-tools-extra/clangd/test/lit.site.cfg.py.in +++ b/clang-tools-extra/clangd/test/lit.site.cfg.py.in @@ -9,6 +9,7 @@ config.target_triple = "@TARGET_TRIPLE@" config.host_triple = "@LLVM_HOST_TRIPLE@" config.python_executable = "@Python3_EXECUTABLE@" +config.clang_exe_name = "@CLANG_EXE_NAME@" # Support substitution of the tools and libs dirs with user parameters. This is # used when we can't determine the tool dir at configuration time. diff --git a/clang-tools-extra/test/CMakeLists.txt b/clang-tools-extra/test/CMakeLists.txt --- a/clang-tools-extra/test/CMakeLists.txt +++ b/clang-tools-extra/test/CMakeLists.txt @@ -65,7 +65,7 @@ clang-tidy # Clang-tidy tests need clang for building modules. - clang + ${CLANG_EXE_NAME} ) # Add lit test dependencies. diff --git a/clang-tools-extra/test/lit.site.cfg.py.in b/clang-tools-extra/test/lit.site.cfg.py.in --- a/clang-tools-extra/test/lit.site.cfg.py.in +++ b/clang-tools-extra/test/lit.site.cfg.py.in @@ -11,6 +11,7 @@ config.python_executable = "@Python3_EXECUTABLE@" config.target_triple = "@TARGET_TRIPLE@" config.clang_tidy_staticanalyzer = @CLANG_TIDY_ENABLE_STATIC_ANALYZER@ +config.clang_exe_name = "@CLANG_EXE_NAME@" # Support substitution of the tools and libs dirs with user parameters. This is # used when we can't determine the tool dir at configuration time. diff --git a/clang/CMakeLists.txt b/clang/CMakeLists.txt --- a/clang/CMakeLists.txt +++ b/clang/CMakeLists.txt @@ -106,7 +106,7 @@ option(LLVM_FORCE_USE_OLD_HOST_TOOLCHAIN "Set to ON to force using an old, unsupported host toolchain." OFF) - option(CLANG_ENABLE_BOOTSTRAP "Generate the clang bootstrap target" OFF) + option(CLANG_ENABLE_BOOTSTRAP "Generate the ${CLANG_EXE_NAME} bootstrap target" OFF) option(LLVM_ENABLE_LIBXML2 "Use libxml2 if available." ON) include(AddLLVM) @@ -218,7 +218,7 @@ "Relative directory from the Clang binary to its resource files.") set(C_INCLUDE_DIRS "" CACHE STRING - "Colon separated list of directories clang will search for headers.") + "Colon separated list of directories ${CLANG_EXE_NAME} will search for headers.") set(GCC_INSTALL_PREFIX "" CACHE PATH "Directory where gcc is installed." ) set(DEFAULT_SYSROOT "" CACHE STRING @@ -230,7 +230,7 @@ "enable x86 relax relocations by default") set(CLANG_SPAWN_CC1 OFF CACHE BOOL - "Whether clang should use a new process for the CC1 invocation") + "Whether ${CLANG_EXE_NAME} should use a new process for the CC1 invocation") # TODO: verify the values against LangStandards.def? set(CLANG_DEFAULT_STD_C "" CACHE STRING @@ -349,6 +349,11 @@ "`CMakeFiles'. Please delete them.") endif() +# If CLANG_EXE_NAME is specified, use it, otherwise make it clang +if(NOT DEFINED CLANG_EXE_NAME) + set(CLANG_EXE_NAME "clang" CACHE STRING + "The name of the clang executable") +endif() # If CLANG_VERSION_* is specified, use it, if not use LLVM_VERSION_*. if(NOT DEFINED CLANG_VERSION_MAJOR) set(CLANG_VERSION_MAJOR ${LLVM_VERSION_MAJOR}) @@ -463,7 +468,7 @@ option(CLANG_ENABLE_ARCMT "Build ARCMT." ON) option(CLANG_ENABLE_STATIC_ANALYZER - "Include static analyzer in clang binary." ON) + "Include static analyzer in ${CLANG_EXE_NAME} binary." ON) option(CLANG_ENABLE_PROTO_FUZZER "Build Clang protobuf fuzzer." OFF) @@ -485,7 +490,7 @@ # Clang version information set(CLANG_EXECUTABLE_VERSION "${CLANG_VERSION_MAJOR}" CACHE STRING - "Major version number that will be appended to the clang executable name") + "Major version number that will be appended to the ${CLANG_EXE_NAME} executable name") set(LIBCLANG_LIBRARY_VERSION "${CLANG_VERSION_MAJOR}" CACHE STRING "Major version number that will be appended to the libclang library") @@ -532,7 +537,7 @@ set(CLANG_ORDER_FILE ${CMAKE_CURRENT_BINARY_DIR}/clang.order CACHE FILEPATH - "Order file to use when compiling clang in order to improve startup time (Darwin Only - requires ld64).") + "Order file to use when compiling ${CLANG_EXE_NAME} in order to improve startup time (Darwin Only - requires ld64).") if(NOT EXISTS ${CLANG_ORDER_FILE}) string(FIND "${CLANG_ORDER_FILE}" "${CMAKE_CURRENT_BINARY_DIR}" PATH_START) @@ -607,13 +612,13 @@ add_subdirectory(cmake/modules) if(CLANG_STAGE) - message(STATUS "Setting current clang stage to: ${CLANG_STAGE}") + message(STATUS "Setting current ${CLANG_EXE_NAME} stage to: ${CLANG_STAGE}") endif() if (CLANG_ENABLE_BOOTSTRAP) include(ExternalProject) - add_custom_target(clang-bootstrap-deps DEPENDS clang) + add_custom_target(clang-bootstrap-deps DEPENDS ${CLANG_EXE_NAME}) if(NOT CLANG_STAGE) set(CLANG_STAGE stage1) @@ -634,7 +639,7 @@ if(BOOTSTRAP_LLVM_BUILD_INSTRUMENTED) set(NEXT_CLANG_STAGE ${NEXT_CLANG_STAGE}-instrumented) endif() - message(STATUS "Setting next clang stage to: ${NEXT_CLANG_STAGE}") + message(STATUS "Setting next ${CLANG_EXE_NAME} stage to: ${NEXT_CLANG_STAGE}") set(STAMP_DIR ${CMAKE_CURRENT_BINARY_DIR}/${NEXT_CLANG_STAGE}-stamps/) @@ -725,11 +730,11 @@ endif() endif() - set(C_COMPILER "clang") - set(CXX_COMPILER "clang++") + set(C_COMPILER "${CLANG_EXE_NAME}") + set(CXX_COMPILER "${CLANG_EXE_NAME}++") if(WIN32) - set(C_COMPILER "clang-cl.exe") - set(CXX_COMPILER "clang-cl.exe") + set(C_COMPILER "${CLANG_EXE_NAME}-cl.exe") + set(CXX_COMPILER "${CLANG_EXE_NAME}-cl.exe") endif() set(COMPILER_OPTIONS diff --git a/clang/include/clang/Config/config.h.cmake b/clang/include/clang/Config/config.h.cmake --- a/clang/include/clang/Config/config.h.cmake +++ b/clang/include/clang/Config/config.h.cmake @@ -8,6 +8,9 @@ /* Bug report URL. */ #define BUG_REPORT_URL "${BUG_REPORT_URL}" +/* Clang executable name. */ +#define CLANG_EXE_NAME "${CLANG_EXE_NAME}" + /* Default linker to use. */ #define CLANG_DEFAULT_LINKER "${CLANG_DEFAULT_LINKER}" diff --git a/clang/runtime/CMakeLists.txt b/clang/runtime/CMakeLists.txt --- a/clang/runtime/CMakeLists.txt +++ b/clang/runtime/CMakeLists.txt @@ -67,15 +67,15 @@ endif() ExternalProject_Add(compiler-rt - DEPENDS llvm-config clang ${compiler_rt_configure_deps} + DEPENDS llvm-config ${CLANG_EXE_NAME} ${compiler_rt_configure_deps} PREFIX ${COMPILER_RT_PREFIX} SOURCE_DIR ${COMPILER_RT_SRC_ROOT} STAMP_DIR ${STAMP_DIR} BINARY_DIR ${BINARY_DIR} CMAKE_ARGS ${CLANG_COMPILER_RT_CMAKE_ARGS} - -DCMAKE_C_COMPILER=${LLVM_RUNTIME_OUTPUT_INTDIR}/clang - -DCMAKE_CXX_COMPILER=${LLVM_RUNTIME_OUTPUT_INTDIR}/clang++ - -DCMAKE_ASM_COMPILER=${LLVM_RUNTIME_OUTPUT_INTDIR}/clang + -DCMAKE_C_COMPILER=${LLVM_RUNTIME_OUTPUT_INTDIR}/${CLANG_EXE_NAME} + -DCMAKE_CXX_COMPILER=${LLVM_RUNTIME_OUTPUT_INTDIR}/${CLANG_EXE_NAME}++ + -DCMAKE_ASM_COMPILER=${LLVM_RUNTIME_OUTPUT_INTDIR}/${CLANG_EXE_NAME} -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} -DCMAKE_MAKE_PROGRAM=${CMAKE_MAKE_PROGRAM} -DLLVM_CONFIG_PATH=${LLVM_RUNTIME_OUTPUT_INTDIR}/llvm-config @@ -105,7 +105,7 @@ COMMENT "Cleaning compiler-rt..." DEPENDEES configure DEPENDERS build - DEPENDS clang + DEPENDS ${CLANG_EXE_NAME} WORKING_DIRECTORY ${BINARY_DIR} ) diff --git a/clang/test/Analysis/check-analyzer-fixit.py b/clang/test/Analysis/check-analyzer-fixit.py --- a/clang/test/Analysis/check-analyzer-fixit.py +++ b/clang/test/Analysis/check-analyzer-fixit.py @@ -38,6 +38,7 @@ def run_test_once(args, extra_args): + clang_exe_name = args.clang_exe_name input_file_name = args.input_file_name temp_file_name = args.temp_file_name clang_analyzer_extra_args = extra_args @@ -63,13 +64,13 @@ try: builtin_include_dir = subprocess.check_output( - ['clang', '-print-file-name=include'], stderr=subprocess.STDOUT).decode() + [clang_exe_name, '-print-file-name=include'], stderr=subprocess.STDOUT).decode() except subprocess.CalledProcessError as e: print('Cannot print Clang include directory: ' + e.output.decode()) builtin_include_dir = os.path.normpath(builtin_include_dir) - args = (['clang', '-cc1', '-internal-isystem', builtin_include_dir, + args = ([clang_exe_name, '-cc1', '-internal-isystem', builtin_include_dir, '-nostdsysteminc', '-analyze', '-analyzer-constraints=range', '-analyzer-config', 'apply-fixits=true'] + clang_analyzer_extra_args + ['-verify', temp_file_name]) @@ -110,6 +111,7 @@ def main(): parser = argparse.ArgumentParser() + parser.add_argument('clang_exe_name') parser.add_argument('input_file_name') parser.add_argument('temp_file_name') diff --git a/clang/test/Analysis/scan-build/cxx-name.test b/clang/test/Analysis/scan-build/cxx-name.test --- a/clang/test/Analysis/scan-build/cxx-name.test +++ b/clang/test/Analysis/scan-build/cxx-name.test @@ -6,4 +6,5 @@ consumed by ccc-analyzer) to an appropriate pathname for the clang++ executable, derived from the pathname of the clang executable: -CHECK: CLANG_CXX=/clang++{{(\.exe)?}}/ +CHECK: Using {{.*}}/[[CLANG:[^ -]+]] +CHECK: CLANG_CXX=/[[CLANG]]++/ diff --git a/clang/test/CMakeLists.txt b/clang/test/CMakeLists.txt --- a/clang/test/CMakeLists.txt +++ b/clang/test/CMakeLists.txt @@ -60,7 +60,7 @@ list(APPEND CLANG_TEST_DEPS apinotes-test c-index-test - clang + ${CLANG_EXE_NAME} clang-resource-headers clang-format clang-tblgen diff --git a/clang/test/Driver/baremetal.cpp b/clang/test/Driver/baremetal.cpp --- a/clang/test/Driver/baremetal.cpp +++ b/clang/test/Driver/baremetal.cpp @@ -4,7 +4,7 @@ // RUN: -L some/directory/user/asked/for \ // RUN: --sysroot=%S/Inputs/baremetal_arm \ // RUN: | FileCheck --check-prefix=CHECK-V6M-C %s -// CHECK-V6M-C: "[[PREFIX_DIR:.*]]{{[/\\]+}}{{[^/^\\]+}}{{[/\\]+}}clang{{.*}}" "-cc1" "-triple" "thumbv6m-none-unknown-eabi" +// CHECK-V6M-C: "[[PREFIX_DIR:.*]]{{[/\\]+}}{{[^/^\\]+}}{{[/\\]+}}{{[^/^\\]+}}" "-cc1" "-triple" "thumbv6m-none-unknown-eabi" // CHECK-V6M-C-SAME: "-resource-dir" "[[RESOURCE_DIR:[^"]+]]" // CHECK-V6M-C-SAME: "-isysroot" "[[SYSROOT:[^"]*]]" // CHECK-V6M-C-SAME: "-internal-isystem" "[[SYSROOT]]{{[/\\]+}}include{{[/\\]+}}c++{{[/\\]+}}v1" @@ -107,7 +107,7 @@ // RUN: -L some/directory/user/asked/for \ // RUN: --sysroot=%S/Inputs/basic_riscv64_tree/riscv64-unknown-elf \ // RUN: | FileCheck --check-prefix=CHECK-RV64 %s -// CHECK-RV64: "[[PREFIX_DIR:.*]]{{[/\\]+}}{{[^/^\\]+}}{{[/\\]+}}clang{{.*}}" "-cc1" "-triple" "riscv64-unknown-unknown-elf" +// CHECK-RV64: "[[PREFIX_DIR:.*]]{{[/\\]+}}{{[^/^\\]+}}{{[/\\]+}}{{[^/^\\]+}}" "-cc1" "-triple" "riscv64-unknown-unknown-elf" // CHECK-RV64-SAME: "-resource-dir" "[[RESOURCE_DIR:[^"]+]]" // CHECK-RV64-SAME: "-isysroot" "[[SYSROOT:[^"]*]]" // CHECK-RV64-SAME: "-internal-isystem" "[[SYSROOT]]{{[/\\]+}}include{{[/\\]+}}c++{{[/\\]+}}v1" @@ -167,7 +167,7 @@ // RUN: -L some/directory/user/asked/for \ // RUN: --sysroot=%S/Inputs/basic_riscv32_tree/riscv32-unknown-elf \ // RUN: | FileCheck --check-prefix=CHECK-RV32 %s -// CHECK-RV32: "[[PREFIX_DIR:.*]]{{[/\\]+}}{{[^/^\\]+}}{{[/\\]+}}clang{{.*}}" "-cc1" "-triple" "riscv32-unknown-unknown-elf" +// CHECK-RV32: "[[PREFIX_DIR:.*]]{{[/\\]+}}{{[^/^\\]+}}{{[/\\]+}}{{[^/^\\]+}}" "-cc1" "-triple" "riscv32-unknown-unknown-elf" // CHECK-RV32-SAME: "-resource-dir" "[[RESOURCE_DIR:[^"]+]]" // CHECK-RV32-SAME: "-isysroot" "[[SYSROOT:[^"]*]]" // CHECK-RV32-SAME: "-internal-isystem" "[[SYSROOT]]{{[/\\]+}}include{{[/\\]+}}c++{{[/\\]+}}v1" @@ -258,7 +258,7 @@ // RUN: --sysroot=%S/Inputs/basic_riscv64_tree/riscv64-unknown-elf \ // RUN: | FileCheck --check-prefix=CHECK-RV64FD %s -// CHECK-RV64FD: "[[PREFIX_DIR:.*]]{{[/\\]+}}{{[^/^\\]+}}{{[/\\]+}}clang{{.*}}" "-cc1" "-triple" "riscv64-unknown-unknown-elf" +// CHECK-RV64FD: "[[PREFIX_DIR:.*]]{{[/\\]+}}{{[^/^\\]+}}{{[/\\]+}}{{[^/^\\]+}}" "-cc1" "-triple" "riscv64-unknown-unknown-elf" // CHECK-RV64FD-SAME: "-resource-dir" "[[RESOURCE_DIR:[^"]+]]" // CHECK-RV64FD-SAME: "-isysroot" "[[SYSROOT:[^"]*]]" // CHECK-RV64FD-SAME: "-internal-isystem" "[[SYSROOT]]{{[/\\]+}}rv64imafdc{{[/\\]+}}lp64d{{[/\\]+}}include{{[/\\]+}}c++{{[/\\]+}}v1" @@ -280,7 +280,7 @@ // RUN: --sysroot=%S/Inputs/basic_riscv32_tree/riscv32-unknown-elf \ // RUN: | FileCheck --check-prefix=CHECK-RV32I %s -// CHECK-RV32I: "[[PREFIX_DIR:.*]]{{[/\\]+}}{{[^/^\\]+}}{{[/\\]+}}clang{{.*}}" "-cc1" "-triple" "riscv32-unknown-unknown-elf" +// CHECK-RV32I: "[[PREFIX_DIR:.*]]{{[/\\]+}}{{[^/^\\]+}}{{[/\\]+}}{{[^/^\\]+}}" "-cc1" "-triple" "riscv32-unknown-unknown-elf" // CHECK-RV32I-SAME: "-resource-dir" "[[RESOURCE_DIR:[^"]+]]" // CHECK-RV32I-SAME: "-isysroot" "[[SYSROOT:[^"]*]]" // CHECK-RV32I-SAME: "-internal-isystem" "[[SYSROOT]]{{[/\\]+}}rv32i{{[/\\]+}}ilp32{{[/\\]+}}include{{[/\\]+}}c++{{[/\\]+}}v1" @@ -302,7 +302,7 @@ // RUN: --sysroot=%S/Inputs/basic_riscv32_tree/riscv32-unknown-elf \ // RUN: | FileCheck --check-prefix=CHECK-RV32IM %s -// CHECK-RV32IM: "[[PREFIX_DIR:.*]]{{[/\\]+}}{{[^/^\\]+}}{{[/\\]+}}clang{{.*}}" "-cc1" "-triple" "riscv32-unknown-unknown-elf" +// CHECK-RV32IM: "[[PREFIX_DIR:.*]]{{[/\\]+}}{{[^/^\\]+}}{{[/\\]+}}{{[^/^\\]+}}" "-cc1" "-triple" "riscv32-unknown-unknown-elf" // CHECK-RV32IM-SAME: "-resource-dir" "[[RESOURCE_DIR:[^"]+]]" // CHECK-RV32IM-SAME: "-isysroot" "[[SYSROOT:[^"]*]]" // CHECK-RV32IM-SAME: "-internal-isystem" "[[SYSROOT]]{{[/\\]+}}rv32im{{[/\\]+}}ilp32{{[/\\]+}}include{{[/\\]+}}c++{{[/\\]+}}v1" @@ -318,7 +318,7 @@ // RUN: --sysroot=%S/Inputs/basic_riscv32_tree/riscv32-unknown-elf \ // RUN: | FileCheck --check-prefix=CHECK-RV32IAC %s -// CHECK-RV32IAC: "[[PREFIX_DIR:.*]]{{[/\\]+}}{{[^/^\\]+}}{{[/\\]+}}clang{{.*}}" "-cc1" "-triple" "riscv32-unknown-unknown-elf" +// CHECK-RV32IAC: "[[PREFIX_DIR:.*]]{{[/\\]+}}{{[^/^\\]+}}{{[/\\]+}}{{[^/^\\]+}}" "-cc1" "-triple" "riscv32-unknown-unknown-elf" // CHECK-RV32IAC-SAME: "-resource-dir" "[[RESOURCE_DIR:[^"]+]]" // CHECK-RV32IAC-SAME: "-isysroot" "[[SYSROOT:[^"]*]]" // CHECK-RV32IAC-SAME: "-internal-isystem" "[[SYSROOT]]{{[/\\]+}}rv32iac{{[/\\]+}}ilp32{{[/\\]+}}include{{[/\\]+}}c++{{[/\\]+}}v1" @@ -346,7 +346,7 @@ // RUN: --sysroot=%S/Inputs/basic_riscv32_tree/riscv32-unknown-elf \ // RUN: | FileCheck --check-prefix=CHECK-RV32IMAFC %s -// CHECK-RV32IMAFC: "[[PREFIX_DIR:.*]]{{[/\\]+}}{{[^/^\\]+}}{{[/\\]+}}clang{{.*}}" "-cc1" "-triple" "riscv32-unknown-unknown-elf" +// CHECK-RV32IMAFC: "[[PREFIX_DIR:.*]]{{[/\\]+}}{{[^/^\\]+}}{{[/\\]+}}{{[^/^\\]+}}" "-cc1" "-triple" "riscv32-unknown-unknown-elf" // CHECK-RV32IMAFC-SAME: "-resource-dir" "[[RESOURCE_DIR:[^"]+]]" // CHECK-RV32IMAFC-SAME: "-isysroot" "[[SYSROOT:[^"]*]]" // CHECK-RV32IMAFC-SAME: "-internal-isystem" "[[SYSROOT]]{{[/\\]+}}rv32imafc{{[/\\]+}}ilp32f{{[/\\]+}}include{{[/\\]+}}c++{{[/\\]+}}v1" diff --git a/clang/test/Driver/check-time-trace.cpp b/clang/test/Driver/check-time-trace.cpp --- a/clang/test/Driver/check-time-trace.cpp +++ b/clang/test/Driver/check-time-trace.cpp @@ -1,6 +1,6 @@ // RUN: %clangxx -S -ftime-trace -ftime-trace-granularity=0 -o %T/check-time-trace %s // RUN: cat %T/check-time-trace.json \ -// RUN: | %python -c 'import json, sys; json.dump(json.loads(sys.stdin.read()), sys.stdout, sort_keys=True, indent=2)' \ +// RUN: | %python -c 'import json, sys; json.dump(json.loads(sys.stdin.read()), sys.stdout, sort_keys=True, indent=">>")' \ // RUN: | FileCheck %s // CHECK: "beginningOfTime": {{[0-9]{16},}} @@ -13,7 +13,7 @@ // CHECK-NEXT: "pid": // CHECK-NEXT: "tid": // CHECK-NEXT: "ts": -// CHECK: "name": "clang{{.*}}" +// CHECK: >>>>>>>>"name": // CHECK: "name": "process_name" // CHECK: "name": "thread_name" diff --git a/clang/test/lit.cfg.py b/clang/test/lit.cfg.py --- a/clang/test/lit.cfg.py +++ b/clang/test/lit.cfg.py @@ -106,7 +106,8 @@ config.test_source_root, "Analysis", "check-analyzer-fixit.py") config.substitutions.append( ('%check_analyzer_fixit', - '"%s" %s' % (config.python_executable, check_analyzer_fixit_path))) + '"%s" %s "%s"' % (config.python_executable, check_analyzer_fixit_path, + config.clang_exe_name))) llvm_config.add_tool_substitutions(tools, tool_dirs) diff --git a/clang/test/lit.site.cfg.py.in b/clang/test/lit.site.cfg.py.in --- a/clang/test/lit.site.cfg.py.in +++ b/clang/test/lit.site.cfg.py.in @@ -33,6 +33,7 @@ config.use_z3_solver = lit_config.params.get('USE_Z3_SOLVER', "@USE_Z3_SOLVER@") config.has_plugins = @LLVM_ENABLE_PLUGINS@ config.clang_vendor_uti = "@CLANG_VENDOR_UTI@" +config.clang_exe_name = "@CLANG_EXE_NAME@" # Support substitution of the tools and libs dirs with user parameters. This is # used when we can't determine the tool dir at configuration time. diff --git a/clang/test/utils/update_cc_test_checks/lit.local.cfg b/clang/test/utils/update_cc_test_checks/lit.local.cfg --- a/clang/test/utils/update_cc_test_checks/lit.local.cfg +++ b/clang/test/utils/update_cc_test_checks/lit.local.cfg @@ -12,7 +12,7 @@ config.test_format = lit.formats.ShTest(execute_external=False) config.suffixes = ['.test'] -clang_path = os.path.join(config.clang_tools_dir, 'clang') +clang_path = os.path.join(config.clang_tools_dir, config.clang_exe_name) extra_args = '--clang ' + shell_quote(clang_path) opt_path = os.path.join(config.llvm_tools_dir, 'opt') extra_args += ' --opt ' + shell_quote(opt_path) diff --git a/clang/tools/clang-offload-bundler/CMakeLists.txt b/clang/tools/clang-offload-bundler/CMakeLists.txt --- a/clang/tools/clang-offload-bundler/CMakeLists.txt +++ b/clang/tools/clang-offload-bundler/CMakeLists.txt @@ -11,7 +11,7 @@ clangBasic ) -add_dependencies(clang clang-offload-bundler) +add_dependencies(${CLANG_EXE_NAME} clang-offload-bundler) clang_target_link_libraries(clang-offload-bundler PRIVATE diff --git a/clang/tools/clang-offload-wrapper/CMakeLists.txt b/clang/tools/clang-offload-wrapper/CMakeLists.txt --- a/clang/tools/clang-offload-wrapper/CMakeLists.txt +++ b/clang/tools/clang-offload-wrapper/CMakeLists.txt @@ -11,7 +11,7 @@ clangBasic ) -add_dependencies(clang clang-offload-wrapper) +add_dependencies(${CLANG_EXE_NAME} clang-offload-wrapper) clang_target_link_libraries(clang-offload-wrapper PRIVATE diff --git a/clang/tools/driver/CMakeLists.txt b/clang/tools/driver/CMakeLists.txt --- a/clang/tools/driver/CMakeLists.txt +++ b/clang/tools/driver/CMakeLists.txt @@ -17,14 +17,14 @@ Vectorize ) -option(CLANG_PLUGIN_SUPPORT "Build clang with plugin support" ON) +option(CLANG_PLUGIN_SUPPORT "Build ${CLANG_EXE_NAME} with plugin support" ON) # Support plugins. if(CLANG_PLUGIN_SUPPORT) set(support_plugins SUPPORT_PLUGINS) endif() -add_clang_tool(clang +add_clang_tool(${CLANG_EXE_NAME} driver.cpp cc1_main.cpp cc1as_main.cpp @@ -35,7 +35,7 @@ ${support_plugins} ) -clang_target_link_libraries(clang +clang_target_link_libraries(${CLANG_EXE_NAME} PRIVATE clangBasic clangCodeGen @@ -48,31 +48,31 @@ if(WIN32 AND NOT CYGWIN) # Prevent versioning if the buildhost is targeting for Win32. else() - set_target_properties(clang PROPERTIES VERSION ${CLANG_EXECUTABLE_VERSION}) + set_target_properties(${CLANG_EXE_NAME} PROPERTIES VERSION ${CLANG_EXECUTABLE_VERSION}) endif() # Support plugins. if(CLANG_PLUGIN_SUPPORT) - export_executable_symbols_for_plugins(clang) + export_executable_symbols_for_plugins(${CLANG_EXE_NAME}) endif() -add_dependencies(clang clang-resource-headers) +add_dependencies(${CLANG_EXE_NAME} clang-resource-headers) if(NOT CLANG_LINKS_TO_CREATE) - set(CLANG_LINKS_TO_CREATE clang++ clang-cl clang-cpp) + set(CLANG_LINKS_TO_CREATE ${CLANG_EXE_NAME}++ ${CLANG_EXE_NAME}-cl ${CLANG_EXE_NAME}-cpp) endif() foreach(link ${CLANG_LINKS_TO_CREATE}) - add_clang_symlink(${link} clang) + add_clang_symlink(${link} ${CLANG_EXE_NAME}) endforeach() # Configure plist creation for OS X. set (TOOL_INFO_PLIST "Info.plist" CACHE STRING "Plist name") if (APPLE) if (CLANG_VENDOR) - set(TOOL_INFO_NAME "${CLANG_VENDOR} clang") + set(TOOL_INFO_NAME "${CLANG_VENDOR} ${CLANG_EXE_NAME}") else() - set(TOOL_INFO_NAME "clang") + set(TOOL_INFO_NAME "${CLANG_EXE_NAME}") endif() set(TOOL_INFO_UTI "${CLANG_VENDOR_UTI}") @@ -80,7 +80,7 @@ set(TOOL_INFO_BUILD_VERSION "${LLVM_VERSION_MAJOR}.${LLVM_VERSION_MINOR}") set(TOOL_INFO_PLIST_OUT "${CMAKE_CURRENT_BINARY_DIR}/${TOOL_INFO_PLIST}") - target_link_libraries(clang + target_link_libraries(${CLANG_EXE_NAME} PRIVATE "-Wl,-sectcreate,__TEXT,__info_plist,${TOOL_INFO_PLIST_OUT}") configure_file("${TOOL_INFO_PLIST}.in" "${TOOL_INFO_PLIST_OUT}" @ONLY) @@ -114,7 +114,7 @@ if("${ORDER_FILE}" STREQUAL "\n") set_property(DIRECTORY APPEND PROPERTY CMAKE_CONFIGURE_DEPENDS ${CLANG_ORDER_FILE}) elseif(LINKER_ORDER_FILE_WORKS) - target_link_libraries(clang PRIVATE ${LINKER_ORDER_FILE_OPTION}) - set_target_properties(clang PROPERTIES LINK_DEPENDS ${CLANG_ORDER_FILE}) + target_link_libraries(${CLANG_EXE_NAME} PRIVATE ${LINKER_ORDER_FILE_OPTION}) + set_target_properties(${CLANG_EXE_NAME} PROPERTIES LINK_DEPENDS ${CLANG_ORDER_FILE}) endif() endif() diff --git a/clang/utils/perf-training/CMakeLists.txt b/clang/utils/perf-training/CMakeLists.txt --- a/clang/utils/perf-training/CMakeLists.txt +++ b/clang/utils/perf-training/CMakeLists.txt @@ -16,10 +16,10 @@ ${CMAKE_CURRENT_BINARY_DIR}/pgo-data/lit.site.cfg ) - add_lit_testsuite(generate-profraw "Generating clang PGO data" + add_lit_testsuite(generate-profraw "Generating ${CLANG_EXE_NAME} PGO data" ${CMAKE_CURRENT_BINARY_DIR}/pgo-data/ EXCLUDE_FROM_CHECK_ALL - DEPENDS clang clear-profraw + DEPENDS ${CLANG_EXE_NAME} clear-profraw ) add_custom_target(clear-profraw @@ -47,11 +47,11 @@ ${CMAKE_CURRENT_BINARY_DIR}/order-files/lit.site.cfg ) - add_lit_testsuite(generate-dtrace-logs "Generating clang dtrace data" + add_lit_testsuite(generate-dtrace-logs "Generating ${CLANG_EXE_NAME} dtrace data" ${CMAKE_CURRENT_BINARY_DIR}/order-files/ EXCLUDE_FROM_CHECK_ALL ARGS -j 1 - DEPENDS clang clear-dtrace-logs + DEPENDS ${CLANG_EXE_NAME} clear-dtrace-logs ) add_custom_target(clear-dtrace-logs @@ -59,11 +59,11 @@ COMMENT "Clearing old dtrace data") if(NOT CLANG_ORDER_FILE) - message(FATAL_ERROR "Output clang order file is not set") + message(FATAL_ERROR "Output ${CLANG_EXE_NAME} order file is not set") endif() add_custom_target(generate-order-file - COMMAND "${Python3_EXECUTABLE}" ${CMAKE_CURRENT_SOURCE_DIR}/perf-helper.py gen-order-file --binary $ --output ${CLANG_ORDER_FILE} ${CMAKE_CURRENT_BINARY_DIR} + COMMAND "${Python3_EXECUTABLE}" ${CMAKE_CURRENT_SOURCE_DIR}/perf-helper.py gen-order-file --binary $ --output ${CLANG_ORDER_FILE} ${CMAKE_CURRENT_BINARY_DIR} COMMENT "Generating order file" DEPENDS generate-dtrace-logs) endif() diff --git a/compiler-rt/cmake/Modules/AddCompilerRT.cmake b/compiler-rt/cmake/Modules/AddCompilerRT.cmake --- a/compiler-rt/cmake/Modules/AddCompilerRT.cmake +++ b/compiler-rt/cmake/Modules/AddCompilerRT.cmake @@ -460,7 +460,7 @@ # Use host compiler in a standalone build, and just-built Clang otherwise. if(NOT COMPILER_RT_STANDALONE_BUILD) - list(APPEND TEST_DEPS clang) + list(APPEND TEST_DEPS ${CLANG_EXE_NAME}) endif() get_target_flags_for_arch(${arch} TARGET_LINK_FLAGS) diff --git a/compiler-rt/cmake/base-config-ix.cmake b/compiler-rt/cmake/base-config-ix.cmake --- a/compiler-rt/cmake/base-config-ix.cmake +++ b/compiler-rt/cmake/base-config-ix.cmake @@ -59,9 +59,9 @@ set(_host_executable_suffix ${CMAKE_EXECUTABLE_SUFFIX}) endif() set(COMPILER_RT_TEST_COMPILER - ${LLVM_RUNTIME_OUTPUT_INTDIR}/clang${_host_executable_suffix}) + ${LLVM_RUNTIME_OUTPUT_INTDIR}/${CLANG_EXE_NAME}${_host_executable_suffix}) set(COMPILER_RT_TEST_CXX_COMPILER - ${LLVM_RUNTIME_OUTPUT_INTDIR}/clang++${_host_executable_suffix}) + ${LLVM_RUNTIME_OUTPUT_INTDIR}/${CLANG_EXE_NAME}++${_host_executable_suffix}) else() # Take output dir and install path from the user. set(COMPILER_RT_OUTPUT_DIR ${CMAKE_CURRENT_BINARY_DIR} CACHE PATH @@ -77,7 +77,7 @@ set(COMPILER_RT_TEST_CXX_COMPILER ${CMAKE_CXX_COMPILER} CACHE PATH "C++ Compiler to use for testing") endif() -if("${COMPILER_RT_TEST_COMPILER}" MATCHES "clang[+]*$") +if("${COMPILER_RT_TEST_COMPILER}" MATCHES "${CLANG_EXE_NAME}[+]*$") set(COMPILER_RT_TEST_COMPILER_ID Clang) elseif("${COMPILER_RT_TEST_COMPILER}" MATCHES "clang.*.exe$") set(COMPILER_RT_TEST_COMPILER_ID Clang) diff --git a/llvm/cmake/modules/LLVMExternalProjectUtils.cmake b/llvm/cmake/modules/LLVMExternalProjectUtils.cmake --- a/llvm/cmake/modules/LLVMExternalProjectUtils.cmake +++ b/llvm/cmake/modules/LLVMExternalProjectUtils.cmake @@ -80,7 +80,7 @@ is_msvc_triple(is_msvc_target ${target_triple}) if(NOT ARG_TOOLCHAIN_TOOLS) - set(ARG_TOOLCHAIN_TOOLS clang) + set(ARG_TOOLCHAIN_TOOLS ${CLANG_EXE_NAME}) # AIX 64-bit XCOFF and big AR format is not yet supported in some of these tools. if(NOT _cmake_system_name STREQUAL AIX) list(APPEND ARG_TOOLCHAIN_TOOLS lld llvm-ar llvm-ranlib llvm-nm llvm-objdump) @@ -124,7 +124,7 @@ set(always_clean clean) endif() - list(FIND TOOLCHAIN_TOOLS clang FOUND_CLANG) + list(FIND TOOLCHAIN_TOOLS ${CLANG_EXE_NAME} FOUND_CLANG) if(FOUND_CLANG GREATER -1) set(CLANG_IN_TOOLCHAIN On) endif() @@ -160,13 +160,13 @@ if(ARG_USE_TOOLCHAIN AND NOT CMAKE_CROSSCOMPILING) if(CLANG_IN_TOOLCHAIN) if(is_msvc_target) - set(compiler_args -DCMAKE_C_COMPILER=${LLVM_RUNTIME_OUTPUT_INTDIR}/clang-cl${CMAKE_EXECUTABLE_SUFFIX} - -DCMAKE_CXX_COMPILER=${LLVM_RUNTIME_OUTPUT_INTDIR}/clang-cl${CMAKE_EXECUTABLE_SUFFIX} - -DCMAKE_ASM_COMPILER=${LLVM_RUNTIME_OUTPUT_INTDIR}/clang-cl${CMAKE_EXECUTABLE_SUFFIX}) + set(compiler_args -DCMAKE_C_COMPILER=${LLVM_RUNTIME_OUTPUT_INTDIR}/${CLANG_EXE_NAME}-cl${CMAKE_EXECUTABLE_SUFFIX} + -DCMAKE_CXX_COMPILER=${LLVM_RUNTIME_OUTPUT_INTDIR}/${CLANG_EXE_NAME}-cl${CMAKE_EXECUTABLE_SUFFIX} + -DCMAKE_ASM_COMPILER=${LLVM_RUNTIME_OUTPUT_INTDIR}/${CLANG_EXE_NAME}-cl${CMAKE_EXECUTABLE_SUFFIX}) else() - set(compiler_args -DCMAKE_C_COMPILER=${LLVM_RUNTIME_OUTPUT_INTDIR}/clang${CMAKE_EXECUTABLE_SUFFIX} - -DCMAKE_CXX_COMPILER=${LLVM_RUNTIME_OUTPUT_INTDIR}/clang++${CMAKE_EXECUTABLE_SUFFIX} - -DCMAKE_ASM_COMPILER=${LLVM_RUNTIME_OUTPUT_INTDIR}/clang${CMAKE_EXECUTABLE_SUFFIX}) + set(compiler_args -DCMAKE_C_COMPILER=${LLVM_RUNTIME_OUTPUT_INTDIR}/${CLANG_EXE_NAME}${CMAKE_EXECUTABLE_SUFFIX} + -DCMAKE_CXX_COMPILER=${LLVM_RUNTIME_OUTPUT_INTDIR}/${CLANG_EXE_NAME}++${CMAKE_EXECUTABLE_SUFFIX} + -DCMAKE_ASM_COMPILER=${LLVM_RUNTIME_OUTPUT_INTDIR}/${CLANG_EXE_NAME}${CMAKE_EXECUTABLE_SUFFIX}) endif() endif() if(lld IN_LIST TOOLCHAIN_TOOLS) @@ -295,6 +295,7 @@ -DLLVM_BINARY_DIR=${PROJECT_BINARY_DIR} -DLLVM_CONFIG_PATH=${llvm_config_path} -DLLVM_ENABLE_WERROR=${LLVM_ENABLE_WERROR} + -DCLANG_EXE_NAME=${CLANG_EXE_NAME} -DLLVM_HOST_TRIPLE=${LLVM_HOST_TRIPLE} -DLLVM_HAVE_LINK_VERSION_SCRIPT=${LLVM_HAVE_LINK_VERSION_SCRIPT} -DLLVM_USE_RELATIVE_PATHS_IN_DEBUG_INFO=${LLVM_USE_RELATIVE_PATHS_IN_DEBUG_INFO} diff --git a/llvm/include/llvm/Config/config.h.cmake b/llvm/include/llvm/Config/config.h.cmake --- a/llvm/include/llvm/Config/config.h.cmake +++ b/llvm/include/llvm/Config/config.h.cmake @@ -10,6 +10,9 @@ /* Bug report URL. */ #define BUG_REPORT_URL "${BUG_REPORT_URL}" +/* Clang executable name. */ +#define CLANG_EXE_NAME "${CLANG_EXE_NAME}" + /* Define to 1 to enable backtraces, and to 0 otherwise. */ #cmakedefine01 ENABLE_BACKTRACES diff --git a/llvm/test/lit.site.cfg.py.in b/llvm/test/lit.site.cfg.py.in --- a/llvm/test/lit.site.cfg.py.in +++ b/llvm/test/lit.site.cfg.py.in @@ -53,6 +53,7 @@ config.have_tf_aot = @LLVM_HAVE_TF_AOT@ config.have_tf_api = @LLVM_HAVE_TF_API@ config.expensive_checks = @LLVM_ENABLE_EXPENSIVE_CHECKS@ +config.clang_exe_name = "@CLANG_EXE_NAME@" # Support substitution of the tools_dir with user parameters. This is # used when we can't determine the tool dir at configuration time. diff --git a/llvm/tools/llvm-config/llvm-config.cpp b/llvm/tools/llvm-config/llvm-config.cpp --- a/llvm/tools/llvm-config/llvm-config.cpp +++ b/llvm/tools/llvm-config/llvm-config.cpp @@ -221,6 +221,7 @@ --libdir Directory containing LLVM libraries.\n\ --cmakedir Directory containing LLVM cmake modules.\n\ --cppflags C preprocessor flags for files that include LLVM headers.\n\ + --clang-exe The clang executable.\n\ --cflags C compiler flags for files that include LLVM headers.\n\ --cxxflags C++ compiler flags for files that include LLVM headers.\n\ --ldflags Print Linker flags.\n\ @@ -514,6 +515,8 @@ OS << ActiveCMakeDir << '\n'; } else if (Arg == "--cppflags") { OS << ActiveIncludeOption << ' ' << LLVM_CPPFLAGS << '\n'; + } else if (Arg == "--clang-exe") { + OS << ActiveBinDir << DirSep << CLANG_EXE_NAME << '\n'; } else if (Arg == "--cflags") { OS << ActiveIncludeOption << ' ' << LLVM_CFLAGS << '\n'; } else if (Arg == "--cxxflags") { diff --git a/llvm/tools/llvm-rc/llvm-rc.cpp b/llvm/tools/llvm-rc/llvm-rc.cpp --- a/llvm/tools/llvm-rc/llvm-rc.cpp +++ b/llvm/tools/llvm-rc/llvm-rc.cpp @@ -36,6 +36,7 @@ #include "llvm/Support/Signals.h" #include "llvm/Support/StringSaver.h" #include "llvm/Support/raw_ostream.h" +#include "llvm/Config/config.h" #include #include @@ -130,14 +131,14 @@ if (!Parent.empty()) { // First look for the tool with all potential names in the specific // directory of Argv0, if known - for (const auto *Name : {"clang", "clang-cl"}) { + for (const auto *Name : {"clang", "clang-cl", CLANG_EXE_NAME}) { Path = sys::findProgramByName(Name, Parent); if (Path) return Path; } } // If no parent directory known, or not found there, look everywhere in PATH - for (const auto *Name : {"clang", "clang-cl"}) { + for (const auto *Name : {"clang", "clang-cl", CLANG_EXE_NAME}) { Path = sys::findProgramByName(Name); if (Path) return Path; diff --git a/llvm/utils/lit/lit/llvm/config.py b/llvm/utils/lit/lit/llvm/config.py --- a/llvm/utils/lit/lit/llvm/config.py +++ b/llvm/utils/lit/lit/llvm/config.py @@ -502,7 +502,7 @@ # Discover the 'clang' and 'clangcc' to use. self.config.clang = self.use_llvm_tool( - 'clang', search_env='CLANG', required=required, + self.config.clang_exe_name, search_env='CLANG', required=required, use_installed=use_installed) if self.config.clang: self.config.available_features.add('clang') diff --git a/llvm/utils/update_cc_test_checks.py b/llvm/utils/update_cc_test_checks.py --- a/llvm/utils/update_cc_test_checks.py +++ b/llvm/utils/update_cc_test_checks.py @@ -114,6 +114,17 @@ def infer_dependent_args(args): + if not args.llvm_bin: + llvm_config = 'llvm-config' + else: + llvm_config = os.path.join(args.llvm_bin, 'llvm-config') + + # If the clang executable has a different name and we knoww where to + # get llvm-config, we can get the name that way. + if not args.clang and distutils.spawn.find_executable(llvm_config): + args.clang = subprocess.check_output( + [llvm_config, '--clang-exe']).decode().strip() + if not args.clang: if not args.llvm_bin: args.clang = 'clang'