mstorsjo created this revision. mstorsjo added reviewers: sammccall, tstellar, smeenai, beanz. Herald added subscribers: carlosgalvezp, mgorny. Herald added a project: All. mstorsjo requested review of this revision. Herald added projects: LLVM, clang-tools-extra. Herald added a subscriber: cfe-commits.
This avoids having to specify the location of all individual tools. In current builds, one may want to specify LLVM_TABLEGEN, CLANG_TABLEGEN, LLDB_TABLEGEN, LLVM_CONFIG_PATH, CLANG_PSEUDO_GEN and CLANG_TIDY_CONFUSABLE_CHARS_GEN; specifying just the base directory containing all of them is much more convenient. Note that HOST_EXECUTABLE_SUFFIX is different from CMAKE_EXECUTABLE_SUFFIX (the suffix used for the cross compiled binaries). There's an upstream request for CMake to provide such a variable, e.g. CMAKE_HOST_EXECUTABLE_SUFFIX, in https://gitlab.kitware.com/cmake/cmake/-/issues/17553, but it hasn't been implemented yet. This is a bit of an RFC, we could of course factorize setting of HOST_EXECUTABLE_SUFFIX to a helper function/macro, and possibly factorize the whole setup (including checking LLVM_USE_HOST_TOOLS and calling build_native_tools) of clang-pseudo-gen and clang-tidy-confusable-chars-gen, as it does end up as a fair bit of boilerplate. Repository: rG LLVM Github Monorepo https://reviews.llvm.org/D131052 Files: clang-tools-extra/clang-tidy/misc/CMakeLists.txt clang-tools-extra/pseudo/include/CMakeLists.txt llvm/CMakeLists.txt llvm/cmake/modules/TableGen.cmake llvm/tools/llvm-config/CMakeLists.txt
Index: llvm/tools/llvm-config/CMakeLists.txt =================================================================== --- llvm/tools/llvm-config/CMakeLists.txt +++ llvm/tools/llvm-config/CMakeLists.txt @@ -82,10 +82,23 @@ # Add the dependency on the generation step. add_file_dependencies(${CMAKE_CURRENT_SOURCE_DIR}/llvm-config.cpp ${BUILDVARIABLES_OBJPATH}) -if(CMAKE_CROSSCOMPILING AND NOT LLVM_CONFIG_PATH) - build_native_tool(llvm-config LLVM_CONFIG_PATH) - set(LLVM_CONFIG_PATH "${LLVM_CONFIG_PATH}" CACHE STRING "") +if(CMAKE_CROSSCOMPILING) + if (LLVM_NATIVE_TOOL_DIR AND NOT LLVM_CONFIG_PATH) + if (CMAKE_HOST_WIN32) + set(HOST_EXECUTABLE_SUFFIX ".exe") + else() + set(HOST_EXECUTABLE_SUFFIX "") + endif() + if (EXISTS "${LLVM_NATIVE_TOOL_DIR}/llvm-config${HOST_EXECUTABLE_SUFFIX}") + set(LLVM_CONFIG_PATH "${LLVM_NATIVE_TOOL_DIR}/llvm-config${HOST_EXECUTABLE_SUFFIX}") + endif() + endif() + + if (NOT LLVM_CONFIG_PATH) + build_native_tool(llvm-config LLVM_CONFIG_PATH) + set(LLVM_CONFIG_PATH "${LLVM_CONFIG_PATH}" CACHE STRING "") - add_custom_target(NativeLLVMConfig DEPENDS ${LLVM_CONFIG_PATH}) - add_dependencies(llvm-config NativeLLVMConfig) + add_custom_target(NativeLLVMConfig DEPENDS ${LLVM_CONFIG_PATH}) + add_dependencies(llvm-config NativeLLVMConfig) + endif() endif() Index: llvm/cmake/modules/TableGen.cmake =================================================================== --- llvm/cmake/modules/TableGen.cmake +++ llvm/cmake/modules/TableGen.cmake @@ -152,7 +152,18 @@ add_llvm_executable(${target} DISABLE_LLVM_LINK_LLVM_DYLIB ${ARGN}) set(LLVM_LINK_COMPONENTS ${${target}_OLD_LLVM_LINK_COMPONENTS}) - set(${project}_TABLEGEN "${target}" CACHE + set(${project}_TABLEGEN_DEFAULT "${target}") + if (LLVM_NATIVE_TOOL_DIR) + if (CMAKE_HOST_WIN32) + set(HOST_EXECUTABLE_SUFFIX ".exe") + else() + set(HOST_EXECUTABLE_SUFFIX "") + endif() + if (EXISTS "${LLVM_NATIVE_TOOL_DIR}/${target}${HOST_EXECUTABLE_SUFFIX}") + set(${project}_TABLEGEN_DEFAULT "${LLVM_NATIVE_TOOL_DIR}/${target}${HOST_EXECUTABLE_SUFFIX}") + endif() + endif() + set(${project}_TABLEGEN "${${project}_TABLEGEN_DEFAULT}" CACHE STRING "Native TableGen executable. Saves building one when cross-compiling.") # Effective tblgen executable to be used: Index: llvm/CMakeLists.txt =================================================================== --- llvm/CMakeLists.txt +++ llvm/CMakeLists.txt @@ -598,6 +598,7 @@ if( WIN32 AND NOT CYGWIN ) set(LLVM_LIT_TOOLS_DIR "" CACHE PATH "Path to GnuWin32 tools") endif() +set(LLVM_NATIVE_TOOL_DIR "" CACHE PATH "Path to a directory containing prebuilt matching native tools (such as llvm-tblgen)") set(LLVM_INTEGRATED_CRT_ALLOC "" CACHE PATH "Replace the Windows CRT allocator with any of {rpmalloc|mimalloc|snmalloc}. Only works with /MT enabled.") if(LLVM_INTEGRATED_CRT_ALLOC) Index: clang-tools-extra/pseudo/include/CMakeLists.txt =================================================================== --- clang-tools-extra/pseudo/include/CMakeLists.txt +++ clang-tools-extra/pseudo/include/CMakeLists.txt @@ -1,7 +1,20 @@ # The cxx.bnf grammar file set(cxx_bnf ${CMAKE_CURRENT_SOURCE_DIR}/../lib/cxx/cxx.bnf) -set(CLANG_PSEUDO_GEN "clang-pseudo-gen" CACHE +set(CLANG_PSEUDO_GEN_DEFAULT "clang-pseudo-gen") + +if (LLVM_NATIVE_TOOL_DIR) + if (CMAKE_HOST_WIN32) + set(HOST_EXECUTABLE_SUFFIX ".exe") + else() + set(HOST_EXECUTABLE_SUFFIX "") + endif() + if (EXISTS "${LLVM_NATIVE_TOOL_DIR}/clang-pseudo-gen${HOST_EXECUTABLE_SUFFIX}") + set(CLANG_PSEUDO_GEN_DEFAULT "${LLVM_NATIVE_TOOL_DIR}/clang-pseudo-gen${HOST_EXECUTABLE_SUFFIX}") + endif() +endif() + +set(CLANG_PSEUDO_GEN "${CLANG_PSEUDO_GEN_DEFAULT}" CACHE STRING "Host clang-pseudo-gen executable. Saves building if cross-compiling.") if(NOT CLANG_PSEUDO_GEN STREQUAL "clang-pseudo-gen") Index: clang-tools-extra/clang-tidy/misc/CMakeLists.txt =================================================================== --- clang-tools-extra/clang-tidy/misc/CMakeLists.txt +++ clang-tools-extra/clang-tidy/misc/CMakeLists.txt @@ -3,7 +3,21 @@ Support ) -set(CLANG_TIDY_CONFUSABLE_CHARS_GEN "clang-tidy-confusable-chars-gen" CACHE +set(CLANG_TIDY_CONFUSABLE_CHARS_GEN_DEFAULT "clang-tidy-confusable-chars-gen") + +if (LLVM_NATIVE_TOOL_DIR) + if (CMAKE_HOST_WIN32) + set(HOST_EXECUTABLE_SUFFIX ".exe") + else() + set(HOST_EXECUTABLE_SUFFIX "") + endif() + if (EXISTS "${LLVM_NATIVE_TOOL_DIR}/clang-tidy-confusable-chars-gen${HOST_EXECUTABLE_SUFFIX}") + set(CLANG_TIDY_CONFUSABLE_CHARS_GEN_DEFAULT "${LLVM_NATIVE_TOOL_DIR}/clang-tidy-confusable-chars-gen${HOST_EXECUTABLE_SUFFIX}") + endif() +endif() + + +set(CLANG_TIDY_CONFUSABLE_CHARS_GEN "${CLANG_TIDY_CONFUSABLE_CHARS_GEN_DEFAULT}" CACHE STRING "Host clang-tidy-confusable-chars-gen executable. Saves building if cross-compiling.") if(NOT CLANG_TIDY_CONFUSABLE_CHARS_GEN STREQUAL "clang-tidy-confusable-chars-gen")
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits