authorgravatar for topolarity@tapscott.meCody Tapscott <topolarity@tapscott.me> 2022-07-25 10:29:38-07:00
committergravatar for topolarity@tapscott.meCody Tapscott <topolarity@tapscott.me> 2022-07-25 10:38:52-07:00
logabc1ae538fee14af12bb5ffd35024d96da861961
tree33d038cfc5bb096c4b2962ca2e20568c5cbddc60
parent5337934bcd174987e813e192cb5ef173c13eff37

CMake: Search for Clang in CMAKE_LIBRARY_PATH, CMAKE_PREFIX_PATH, and CMAKE_FRAMEWORK_PATH

On some systems (esp. systems that use unique hashed file-paths for library-versions like Nix), we can't expect LLVM and Clang to share lib/bin directories. The best we can do is find the matching clang libraries in the CMAKE_LIBRARY_PATH provided by the environment

1 files changed, 9 insertions(+), 3 deletions(-)

cmake/Findclang.cmake+9-3
...@@ -9,7 +9,9 @@...@@ -9,7 +9,9 @@
99
10find_path(CLANG_INCLUDE_DIRS NAMES clang/Frontend/ASTUnit.h10find_path(CLANG_INCLUDE_DIRS NAMES clang/Frontend/ASTUnit.h
11 HINTS ${LLVM_INCLUDE_DIRS}11 HINTS ${LLVM_INCLUDE_DIRS}
12 NO_DEFAULT_PATH # Only look for clang next to LLVM12 # Only look for Clang next to LLVM or in { CMAKE_PREFIX_PATH, CMAKE_LIBRARY_PATH, CMAKE_FRAMEWORK_PATH }
13 NO_SYSTEM_ENVIRONMENT_PATH
14 NO_CMAKE_SYSTEM_PATH
13)15)
1416
15if(${LLVM_LINK_MODE} STREQUAL "shared")17if(${LLVM_LINK_MODE} STREQUAL "shared")
...@@ -21,14 +23,18 @@ if(${LLVM_LINK_MODE} STREQUAL "shared")...@@ -21,14 +23,18 @@ if(${LLVM_LINK_MODE} STREQUAL "shared")
21 clang-cpp23 clang-cpp
22 NAMES_PER_DIR24 NAMES_PER_DIR
23 HINTS "${LLVM_LIBDIRS}"25 HINTS "${LLVM_LIBDIRS}"
24 NO_DEFAULT_PATH # Only look for Clang next to LLVM26 # Only look for Clang next to LLVM or in { CMAKE_PREFIX_PATH, CMAKE_LIBRARY_PATH, CMAKE_FRAMEWORK_PATH }
27 NO_SYSTEM_ENVIRONMENT_PATH
28 NO_CMAKE_SYSTEM_PATH
25 )29 )
26else()30else()
27 macro(FIND_AND_ADD_CLANG_LIB _libname_)31 macro(FIND_AND_ADD_CLANG_LIB _libname_)
28 string(TOUPPER ${_libname_} _prettylibname_)32 string(TOUPPER ${_libname_} _prettylibname_)
29 find_library(CLANG_${_prettylibname_}_LIB NAMES ${_libname_} NAMES_PER_DIR33 find_library(CLANG_${_prettylibname_}_LIB NAMES ${_libname_} NAMES_PER_DIR
30 HINTS "${LLVM_LIBDIRS}"34 HINTS "${LLVM_LIBDIRS}"
31 NO_DEFAULT_PATH # Only look for Clang next to LLVM35 # Only look for Clang next to LLVM or in { CMAKE_PREFIX_PATH, CMAKE_LIBRARY_PATH, CMAKE_FRAMEWORK_PATH }
36 NO_SYSTEM_ENVIRONMENT_PATH
37 NO_CMAKE_SYSTEM_PATH
32 )38 )
33 if(CLANG_${_prettylibname_}_LIB)39 if(CLANG_${_prettylibname_}_LIB)
34 set(CLANG_LIBRARIES ${CLANG_LIBRARIES} ${CLANG_${_prettylibname_}_LIB})40 set(CLANG_LIBRARIES ${CLANG_LIBRARIES} ${CLANG_${_prettylibname_}_LIB})