[PATCH] D51714: CMake: Deprecate using llvm-config to detect llvm installation
This revision was automatically updated to reflect the committed changes. Closed by commit rC346732: CMake: Deprecate using llvm-config to detect llvm installation (authored by tstellar, committed by ). Changed prior to commit: https://reviews.llvm.org/D51714?vs=167413=173808#toc Repository: rC Clang https://reviews.llvm.org/D51714 Files: CMakeLists.txt Index: CMakeLists.txt === --- CMakeLists.txt +++ CMakeLists.txt @@ -11,9 +11,14 @@ # Rely on llvm-config. set(CONFIG_OUTPUT) - find_program(LLVM_CONFIG "llvm-config") if(LLVM_CONFIG) +set (LLVM_CONFIG_FOUND 1) message(STATUS "Found LLVM_CONFIG as ${LLVM_CONFIG}") +message(DEPRECATION "Using llvm-config to detect the LLVM installation is \ + deprecated. The installed cmake files should be used \ + instead. CMake should be able to detect your LLVM install \ + automatically, but you can also use LLVM_DIR to specify \ + the path containing LLVMConfig.cmake.") set(CONFIG_COMMAND ${LLVM_CONFIG} "--assertion-mode" "--bindir" @@ -36,41 +41,51 @@ message(STATUS "${CONFIG_COMMAND_STR}") message(FATAL_ERROR "llvm-config failed with status ${HAD_ERROR}") endif() - else() -message(FATAL_ERROR "llvm-config not found -- ${LLVM_CONFIG}") + +list(GET CONFIG_OUTPUT 0 ENABLE_ASSERTIONS) +list(GET CONFIG_OUTPUT 1 TOOLS_BINARY_DIR) +list(GET CONFIG_OUTPUT 2 LIBRARY_DIR) +list(GET CONFIG_OUTPUT 3 INCLUDE_DIR) +list(GET CONFIG_OUTPUT 4 LLVM_OBJ_ROOT) +list(GET CONFIG_OUTPUT 5 MAIN_SRC_DIR) +list(GET CONFIG_OUTPUT 6 LLVM_CONFIG_CMAKE_PATH) + +# Normalize LLVM_CMAKE_PATH. --cmakedir might contain backslashes. +# CMake assumes slashes as PATH. +file(TO_CMAKE_PATH ${LLVM_CONFIG_CMAKE_PATH} LLVM_CMAKE_PATH) endif() - list(GET CONFIG_OUTPUT 0 ENABLE_ASSERTIONS) - list(GET CONFIG_OUTPUT 1 TOOLS_BINARY_DIR) - list(GET CONFIG_OUTPUT 2 LIBRARY_DIR) - list(GET CONFIG_OUTPUT 3 INCLUDE_DIR) - list(GET CONFIG_OUTPUT 4 LLVM_OBJ_ROOT) - list(GET CONFIG_OUTPUT 5 MAIN_SRC_DIR) - list(GET CONFIG_OUTPUT 6 LLVM_CONFIG_CMAKE_PATH) if(NOT MSVC_IDE) set(LLVM_ENABLE_ASSERTIONS ${ENABLE_ASSERTIONS} CACHE BOOL "Enable assertions") # Assertions should follow llvm-config's. mark_as_advanced(LLVM_ENABLE_ASSERTIONS) endif() + find_package(LLVM REQUIRED HINTS "${LLVM_CMAKE_PATH}") + list(APPEND CMAKE_MODULE_PATH ${LLVM_DIR}) + + # We can't check LLVM_CONFIG here, because find_package(LLVM ...) also sets + # LLVM_CONFIG. + if (NOT LLVM_CONFIG_FOUND) +# Pull values from LLVMConfig.cmake. We can drop this once the llvm-config +# path is removed. +set(TOOLS_BINARY_DIR ${LLVM_TOOLS_BINARY_DIR}) +set(LIBRARY_DIR ${LLVM_LIBRARY_DIR}) +set(INCLUDE_DIR ${LLVM_INCLUDE_DIR}) +set(LLVM_OBJ_DIR ${LLVM_BINARY_DIR}) + endif() + set(LLVM_TOOLS_BINARY_DIR ${TOOLS_BINARY_DIR} CACHE PATH "Path to llvm/bin") set(LLVM_LIBRARY_DIR ${LIBRARY_DIR} CACHE PATH "Path to llvm/lib") set(LLVM_MAIN_INCLUDE_DIR ${INCLUDE_DIR} CACHE PATH "Path to llvm/include") set(LLVM_BINARY_DIR ${LLVM_OBJ_ROOT} CACHE PATH "Path to LLVM build tree") set(LLVM_MAIN_SRC_DIR ${MAIN_SRC_DIR} CACHE PATH "Path to LLVM source tree") - # Normalize LLVM_CMAKE_PATH. --cmakedir might contain backslashes. - # CMake assumes slashes as PATH. - file(TO_CMAKE_PATH ${LLVM_CONFIG_CMAKE_PATH} LLVM_CMAKE_PATH) - find_program(LLVM_TABLEGEN_EXE "llvm-tblgen" ${LLVM_TOOLS_BINARY_DIR} NO_DEFAULT_PATH) - find_package(LLVM REQUIRED HINTS "${LLVM_CMAKE_PATH}") - list(APPEND CMAKE_MODULE_PATH ${LLVM_DIR}) - # They are used as destination of target generators. set(LLVM_RUNTIME_OUTPUT_INTDIR ${CMAKE_BINARY_DIR}/${CMAKE_CFG_INTDIR}/bin) set(LLVM_LIBRARY_OUTPUT_INTDIR ${CMAKE_BINARY_DIR}/${CMAKE_CFG_INTDIR}/lib${LLVM_LIBDIR_SUFFIX}) Index: CMakeLists.txt === --- CMakeLists.txt +++ CMakeLists.txt @@ -11,9 +11,14 @@ # Rely on llvm-config. set(CONFIG_OUTPUT) - find_program(LLVM_CONFIG "llvm-config") if(LLVM_CONFIG) +set (LLVM_CONFIG_FOUND 1) message(STATUS "Found LLVM_CONFIG as ${LLVM_CONFIG}") +message(DEPRECATION "Using llvm-config to detect the LLVM installation is \ + deprecated. The installed cmake files should be used \ + instead. CMake should be able to detect your LLVM install \ + automatically, but you can also use LLVM_DIR to specify \ + the path containing LLVMConfig.cmake.") set(CONFIG_COMMAND ${LLVM_CONFIG} "--assertion-mode" "--bindir" @@ -36,41 +41,51 @@ message(STATUS "${CONFIG_COMMAND_STR}") message(FATAL_ERROR "llvm-config failed with status ${HAD_ERROR}") endif() - else() -message(FATAL_ERROR "llvm-config not found -- ${LLVM_CONFIG}") + +list(GET CONFIG_OUTPUT 0
[PATCH] D51714: CMake: Deprecate using llvm-config to detect llvm installation
tstellar added a comment. In https://reviews.llvm.org/D51714#1248643, @smeenai wrote: > Is there anything holding this up? No hold up, I just wanted to address the review comment. I'll commit on Monday if there are no other comments. Repository: rC Clang https://reviews.llvm.org/D51714 ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[PATCH] D51714: CMake: Deprecate using llvm-config to detect llvm installation
tstellar updated this revision to Diff 167413. tstellar added a comment. Use cmake's DEPRECATION message. Repository: rC Clang https://reviews.llvm.org/D51714 Files: CMakeLists.txt Index: CMakeLists.txt === --- CMakeLists.txt +++ CMakeLists.txt @@ -7,9 +7,14 @@ # Rely on llvm-config. set(CONFIG_OUTPUT) - find_program(LLVM_CONFIG "llvm-config") if(LLVM_CONFIG) +set (LLVM_CONFIG_FOUND 1) message(STATUS "Found LLVM_CONFIG as ${LLVM_CONFIG}") +message(DEPRECATION "Using llvm-config to detect the LLVM installation is \ + deprecated. The installed cmake files should be used \ + instead. CMake should be able to detect your LLVM install \ + automatically, but you can also use LLVM_DIR to specify \ + the path containing LLVMConfig.cmake.") set(CONFIG_COMMAND ${LLVM_CONFIG} "--assertion-mode" "--bindir" @@ -32,41 +37,51 @@ message(STATUS "${CONFIG_COMMAND_STR}") message(FATAL_ERROR "llvm-config failed with status ${HAD_ERROR}") endif() - else() -message(FATAL_ERROR "llvm-config not found -- ${LLVM_CONFIG}") + +list(GET CONFIG_OUTPUT 0 ENABLE_ASSERTIONS) +list(GET CONFIG_OUTPUT 1 TOOLS_BINARY_DIR) +list(GET CONFIG_OUTPUT 2 LIBRARY_DIR) +list(GET CONFIG_OUTPUT 3 INCLUDE_DIR) +list(GET CONFIG_OUTPUT 4 LLVM_OBJ_ROOT) +list(GET CONFIG_OUTPUT 5 MAIN_SRC_DIR) +list(GET CONFIG_OUTPUT 6 LLVM_CONFIG_CMAKE_PATH) + +# Normalize LLVM_CMAKE_PATH. --cmakedir might contain backslashes. +# CMake assumes slashes as PATH. +file(TO_CMAKE_PATH ${LLVM_CONFIG_CMAKE_PATH} LLVM_CMAKE_PATH) endif() - list(GET CONFIG_OUTPUT 0 ENABLE_ASSERTIONS) - list(GET CONFIG_OUTPUT 1 TOOLS_BINARY_DIR) - list(GET CONFIG_OUTPUT 2 LIBRARY_DIR) - list(GET CONFIG_OUTPUT 3 INCLUDE_DIR) - list(GET CONFIG_OUTPUT 4 LLVM_OBJ_ROOT) - list(GET CONFIG_OUTPUT 5 MAIN_SRC_DIR) - list(GET CONFIG_OUTPUT 6 LLVM_CONFIG_CMAKE_PATH) if(NOT MSVC_IDE) set(LLVM_ENABLE_ASSERTIONS ${ENABLE_ASSERTIONS} CACHE BOOL "Enable assertions") # Assertions should follow llvm-config's. mark_as_advanced(LLVM_ENABLE_ASSERTIONS) endif() + find_package(LLVM REQUIRED HINTS "${LLVM_CMAKE_PATH}") + list(APPEND CMAKE_MODULE_PATH ${LLVM_DIR}) + + # We can't check LLVM_CONFIG here, because find_package(LLVM ...) also sets + # LLVM_CONFIG. + if (NOT LLVM_CONFIG_FOUND) +# Pull values from LLVMConfig.cmake. We can drop this once the llvm-config +# path is removed. +set(TOOLS_BINARY_DIR ${LLVM_TOOLS_BINARY_DIR}) +set(LIBRARY_DIR ${LLVM_LIBRARY_DIR}) +set(INCLUDE_DIR ${LLVM_INCLUDE_DIR}) +set(LLVM_OBJ_DIR ${LLVM_BINARY_DIR}) + endif() + set(LLVM_TOOLS_BINARY_DIR ${TOOLS_BINARY_DIR} CACHE PATH "Path to llvm/bin") set(LLVM_LIBRARY_DIR ${LIBRARY_DIR} CACHE PATH "Path to llvm/lib") set(LLVM_MAIN_INCLUDE_DIR ${INCLUDE_DIR} CACHE PATH "Path to llvm/include") set(LLVM_BINARY_DIR ${LLVM_OBJ_ROOT} CACHE PATH "Path to LLVM build tree") set(LLVM_MAIN_SRC_DIR ${MAIN_SRC_DIR} CACHE PATH "Path to LLVM source tree") - # Normalize LLVM_CMAKE_PATH. --cmakedir might contain backslashes. - # CMake assumes slashes as PATH. - file(TO_CMAKE_PATH ${LLVM_CONFIG_CMAKE_PATH} LLVM_CMAKE_PATH) - find_program(LLVM_TABLEGEN_EXE "llvm-tblgen" ${LLVM_TOOLS_BINARY_DIR} NO_DEFAULT_PATH) - find_package(LLVM REQUIRED HINTS "${LLVM_CMAKE_PATH}") - list(APPEND CMAKE_MODULE_PATH ${LLVM_DIR}) - # They are used as destination of target generators. set(LLVM_RUNTIME_OUTPUT_INTDIR ${CMAKE_BINARY_DIR}/${CMAKE_CFG_INTDIR}/bin) set(LLVM_LIBRARY_OUTPUT_INTDIR ${CMAKE_BINARY_DIR}/${CMAKE_CFG_INTDIR}/lib${LLVM_LIBDIR_SUFFIX}) Index: CMakeLists.txt === --- CMakeLists.txt +++ CMakeLists.txt @@ -7,9 +7,14 @@ # Rely on llvm-config. set(CONFIG_OUTPUT) - find_program(LLVM_CONFIG "llvm-config") if(LLVM_CONFIG) +set (LLVM_CONFIG_FOUND 1) message(STATUS "Found LLVM_CONFIG as ${LLVM_CONFIG}") +message(DEPRECATION "Using llvm-config to detect the LLVM installation is \ + deprecated. The installed cmake files should be used \ + instead. CMake should be able to detect your LLVM install \ + automatically, but you can also use LLVM_DIR to specify \ + the path containing LLVMConfig.cmake.") set(CONFIG_COMMAND ${LLVM_CONFIG} "--assertion-mode" "--bindir" @@ -32,41 +37,51 @@ message(STATUS "${CONFIG_COMMAND_STR}") message(FATAL_ERROR "llvm-config failed with status ${HAD_ERROR}") endif() - else() -message(FATAL_ERROR "llvm-config not found -- ${LLVM_CONFIG}") + +list(GET CONFIG_OUTPUT 0 ENABLE_ASSERTIONS) +list(GET CONFIG_OUTPUT 1 TOOLS_BINARY_DIR) +list(GET CONFIG_OUTPUT 2 LIBRARY_DIR) +list(GET CONFIG_OUTPUT 3 INCLUDE_DIR) +list(GET CONFIG_OUTPUT 4
[PATCH] D51714: CMake: Deprecate using llvm-config to detect llvm installation
smeenai added a comment. Is there anything holding this up? Repository: rC Clang https://reviews.llvm.org/D51714 ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[PATCH] D51714: CMake: Deprecate using llvm-config to detect llvm installation
steveire accepted this revision. steveire added a comment. This revision is now accepted and ready to land. Brilliant, I've wanted to do this for years, and I still have many improvements to the LLVM/Clang cmake files on my todo list. Good to know others are similarly motivated. Comment at: CMakeLists.txt:13 message(STATUS "Found LLVM_CONFIG as ${LLVM_CONFIG}") +message(WARNING "Using llvm-config to detect the LLVM installation is \ + deprecated. The installed cmake files should be used \ message(DEPRECATION) is designed for deprecation messages. It announces itself as a "CMake Deprecation Warning at CMakeLists.txt:6 (message):". The user can silence the warning with `-Wno-deprecated` or make it an error with `Wdeprecated` since old versions of CMake: https://cmake.org/pipermail/cmake-developers/2013-July/019634.html Repository: rC Clang https://reviews.llvm.org/D51714 ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[PATCH] D51714: CMake: Deprecate using llvm-config to detect llvm installation
mgorny added a comment. I don't have a strong opinion here. Repository: rC Clang https://reviews.llvm.org/D51714 ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[PATCH] D51714: CMake: Deprecate using llvm-config to detect llvm installation
tstellar added a comment. In https://reviews.llvm.org/D51714#1225545, @mgorny wrote: > Is LLVM_CONFIG dropped from cache here? I suspect the warning might fire for > everyone who has LLVM configured. Yes, it is dropped from the cache, is it a problem to having the warning fire for people who have already configured LLVM? Repository: rC Clang https://reviews.llvm.org/D51714 ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[PATCH] D51714: CMake: Deprecate using llvm-config to detect llvm installation
mgorny added a comment. Is LLVM_CONFIG dropped from cache here? I suspect the warning might fire for everyone who has LLVM configured. Repository: rC Clang https://reviews.llvm.org/D51714 ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[PATCH] D51714: CMake: Deprecate using llvm-config to detect llvm installation
tstellar created this revision. tstellar added reviewers: chandlerc, beanz, mgorny, chapuni. Herald added subscribers: dexonsmith, mehdi_amini. clang currently uses llvm-config to determine the installation paths for llvm's headers and binaries. clang is also using LLVM's cmake files to determine other information about the LLVM build, like LLVM_LIBDIR_SUFFIX, LLVM_VERSION_*, etc. Since the installation paths are also available via the cmake files, we can simplify the code by only relying on information from cmake about the LLVM install and dropping the use of llvm-config altogether. In addition to simplifying the code, the cmake files have more accurate information about the llvm installation paths. llvm-config assumes that the lib, bin, and cmake directories are always located in the same place relative to the path of the llvm-config executable. This can be wrong if a user decides to install headers, binaries or libraries to a non-standard location: e.g. static libraries installed to /usr/lib/llvm6.0/ This patch takes the first step towards dropping llvm-config by removing the automatic detection of llvm-config (users can still manually supply a path to llvm-config by passing -DLLVM_CONFIG=/usr/bin/llvm-config to cmake) and adding a deprecation warning when users try to use this option. Repository: rC Clang https://reviews.llvm.org/D51714 Files: CMakeLists.txt Index: CMakeLists.txt === --- CMakeLists.txt +++ CMakeLists.txt @@ -7,9 +7,14 @@ # Rely on llvm-config. set(CONFIG_OUTPUT) - find_program(LLVM_CONFIG "llvm-config") if(LLVM_CONFIG) +set (LLVM_CONFIG_FOUND 1) message(STATUS "Found LLVM_CONFIG as ${LLVM_CONFIG}") +message(WARNING "Using llvm-config to detect the LLVM installation is \ + deprecated. The installed cmake files should be used \ + instead. CMake should be able to detect your LLVM install \ + automatically, but you can also use LLVM_DIR to specify \ + the path containing LLVMConfig.cmake.") set(CONFIG_COMMAND ${LLVM_CONFIG} "--assertion-mode" "--bindir" @@ -32,41 +37,51 @@ message(STATUS "${CONFIG_COMMAND_STR}") message(FATAL_ERROR "llvm-config failed with status ${HAD_ERROR}") endif() - else() -message(FATAL_ERROR "llvm-config not found -- ${LLVM_CONFIG}") + +list(GET CONFIG_OUTPUT 0 ENABLE_ASSERTIONS) +list(GET CONFIG_OUTPUT 1 TOOLS_BINARY_DIR) +list(GET CONFIG_OUTPUT 2 LIBRARY_DIR) +list(GET CONFIG_OUTPUT 3 INCLUDE_DIR) +list(GET CONFIG_OUTPUT 4 LLVM_OBJ_ROOT) +list(GET CONFIG_OUTPUT 5 MAIN_SRC_DIR) +list(GET CONFIG_OUTPUT 6 LLVM_CONFIG_CMAKE_PATH) + +# Normalize LLVM_CMAKE_PATH. --cmakedir might contain backslashes. +# CMake assumes slashes as PATH. +file(TO_CMAKE_PATH ${LLVM_CONFIG_CMAKE_PATH} LLVM_CMAKE_PATH) endif() - list(GET CONFIG_OUTPUT 0 ENABLE_ASSERTIONS) - list(GET CONFIG_OUTPUT 1 TOOLS_BINARY_DIR) - list(GET CONFIG_OUTPUT 2 LIBRARY_DIR) - list(GET CONFIG_OUTPUT 3 INCLUDE_DIR) - list(GET CONFIG_OUTPUT 4 LLVM_OBJ_ROOT) - list(GET CONFIG_OUTPUT 5 MAIN_SRC_DIR) - list(GET CONFIG_OUTPUT 6 LLVM_CONFIG_CMAKE_PATH) if(NOT MSVC_IDE) set(LLVM_ENABLE_ASSERTIONS ${ENABLE_ASSERTIONS} CACHE BOOL "Enable assertions") # Assertions should follow llvm-config's. mark_as_advanced(LLVM_ENABLE_ASSERTIONS) endif() + find_package(LLVM REQUIRED HINTS "${LLVM_CMAKE_PATH}") + list(APPEND CMAKE_MODULE_PATH ${LLVM_DIR}) + + # We can't check LLVM_CONFIG here, because find_package(LLVM ...) also sets + # LLVM_CONFIG. + if (NOT LLVM_CONFIG_FOUND) +# Pull values from LLVMConfig.cmake. We can drop this once the llvm-config +# path is removed. +set(TOOLS_BINARY_DIR ${LLVM_TOOLS_BINARY_DIR}) +set(LIBRARY_DIR ${LLVM_LIBRARY_DIR}) +set(INCLUDE_DIR ${LLVM_INCLUDE_DIR}) +set(LLVM_OBJ_DIR ${LLVM_BINARY_DIR}) + endif() + set(LLVM_TOOLS_BINARY_DIR ${TOOLS_BINARY_DIR} CACHE PATH "Path to llvm/bin") set(LLVM_LIBRARY_DIR ${LIBRARY_DIR} CACHE PATH "Path to llvm/lib") set(LLVM_MAIN_INCLUDE_DIR ${INCLUDE_DIR} CACHE PATH "Path to llvm/include") set(LLVM_BINARY_DIR ${LLVM_OBJ_ROOT} CACHE PATH "Path to LLVM build tree") set(LLVM_MAIN_SRC_DIR ${MAIN_SRC_DIR} CACHE PATH "Path to LLVM source tree") - # Normalize LLVM_CMAKE_PATH. --cmakedir might contain backslashes. - # CMake assumes slashes as PATH. - file(TO_CMAKE_PATH ${LLVM_CONFIG_CMAKE_PATH} LLVM_CMAKE_PATH) - find_program(LLVM_TABLEGEN_EXE "llvm-tblgen" ${LLVM_TOOLS_BINARY_DIR} NO_DEFAULT_PATH) - find_package(LLVM REQUIRED HINTS "${LLVM_CMAKE_PATH}") - list(APPEND CMAKE_MODULE_PATH ${LLVM_DIR}) - # They are used as destination of target generators. set(LLVM_RUNTIME_OUTPUT_INTDIR ${CMAKE_BINARY_DIR}/${CMAKE_CFG_INTDIR}/bin) set(LLVM_LIBRARY_OUTPUT_INTDIR ${CMAKE_BINARY_DIR}/${CMAKE_CFG_INTDIR}/lib${LLVM_LIBDIR_SUFFIX}) Index: