authorgravatar for topolarity@tapscott.meCody Tapscott <topolarity@tapscott.me> 2022-07-16 08:26:45-07:00
committergravatar for topolarity@tapscott.meCody Tapscott <topolarity@tapscott.me> 2022-07-23 08:55:56-07:00
log4113a790b0da56d7081aca52d0ca4e349d27a6a1
treeb43a9874521451f41a06198369fbedf95f30fa4a
parent3f640ef3d20db848a4d38299cb66db8a3c14b3b1

CMake: Search more permissively for LLD

This change relaxes the restriction added in the prior commit that LLD should be alongside LLVM. This also leaves unresolved the issue of making sure the link mode (static or shared) of LLD matches that of LLVM/Clang. That would be an unfortunate restriction, since LLD seems to be provided only as a static lib on some distros.

3 files changed, 50 insertions(+), 23 deletions(-)

cmake/Findclang.cmake-1
......@@ -7,7 +7,6 @@
77# CLANG_LIBRARIES
88# CLANG_LIBDIRS
99
10#TODO: FIXME
1110find_path(CLANG_INCLUDE_DIRS NAMES clang/Frontend/ASTUnit.h
1211 HINTS ${LLVM_INCLUDE_DIRS}
1312 NO_DEFAULT_PATH # Only look for clang next to LLVM
cmake/Findlld.cmake+23-5
......@@ -8,12 +8,22 @@
88
99find_path(LLD_INCLUDE_DIRS NAMES lld/Common/Driver.h
1010 HINTS ${LLVM_INCLUDE_DIRS}
11 NO_DEFAULT_PATH # Only look for LLD next to LLVM
12)
11 PATHS
12 /usr/lib/llvm-14/include
13 /usr/local/llvm140/include
14 /usr/local/llvm14/include
15 /usr/local/opt/llvm@14/include
16 /opt/homebrew/opt/llvm@14/include
17 /mingw64/include)
1318
1419find_library(LLD_LIBRARY NAMES lld-14.0 lld140 lld NAMES_PER_DIR
1520 HINTS ${LLVM_LIBDIRS}
16 NO_DEFAULT_PATH # Only look for LLD next to LLVM
21 PATHS
22 /usr/lib/llvm-14/lib
23 /usr/local/llvm140/lib
24 /usr/local/llvm14/lib
25 /usr/local/opt/llvm@14/lib
26 /opt/homebrew/opt/llvm@14/lib
1727)
1828if(EXISTS ${LLD_LIBRARY})
1929 set(LLD_LIBRARIES ${LLD_LIBRARY})
......@@ -22,8 +32,16 @@ else()
2232 string(TOUPPER ${_libname_} _prettylibname_)
2333 find_library(LLD_${_prettylibname_}_LIB NAMES ${_libname_} NAMES_PER_DIR
2434 HINTS ${LLVM_LIBDIRS}
25 NO_DEFAULT_PATH # Only look for LLD next to LLVM
26 )
35 PATHS
36 ${LLD_LIBDIRS}
37 /usr/lib/llvm-14/lib
38 /usr/local/llvm140/lib
39 /usr/local/llvm14/lib
40 /usr/local/opt/llvm@14/lib
41 /opt/homebrew/opt/llvm@14/lib
42 /mingw64/lib
43 /c/msys64/mingw64/lib
44 c:/msys64/mingw64/lib)
2745 if(LLD_${_prettylibname_}_LIB)
2846 set(LLD_LIBRARIES ${LLD_LIBRARIES} ${LLD_${_prettylibname_}_LIB})
2947 endif()
cmake/Findllvm.cmake+27-17
......@@ -56,7 +56,7 @@ if(ZIG_USE_LLVM_CONFIG)
5656 COMMAND ${LLVM_CONFIG_EXE} --libs ${STATIC_OR_SHARED_LINK}
5757 OUTPUT_QUIET
5858 ERROR_VARIABLE LLVM_CONFIG_ERROR
59 OUTPUT_STRIP_TRAILING_WHITESPACE)
59 ERROR_STRIP_TRAILING_WHITESPACE)
6060
6161 if (LLVM_CONFIG_ERROR)
6262 # Save the error message, in case this is the last llvm-config we find
......@@ -124,6 +124,12 @@ if(ZIG_USE_LLVM_CONFIG)
124124 OUTPUT_STRIP_TRAILING_WHITESPACE)
125125 string(REPLACE " " ";" LLVM_LIBDIRS "${LLVM_LIBDIRS_SPACES}")
126126
127 execute_process(
128 COMMAND ${LLVM_CONFIG_EXE} --system-libs ${STATIC_OR_SHARED_LINK}
129 OUTPUT_VARIABLE LLVM_SYSTEM_LIBS_SPACES
130 OUTPUT_STRIP_TRAILING_WHITESPACE)
131 string(REPLACE " " ";" LLVM_SYSTEM_LIBS "${LLVM_SYSTEM_LIBS_SPACES}")
132
127133 execute_process(
128134 COMMAND ${LLVM_CONFIG_EXE} --shared-mode ${STATIC_OR_SHARED_LINK}
129135 OUTPUT_VARIABLE LLVM_LINK_MODE
......@@ -141,21 +147,33 @@ if(ZIG_USE_LLVM_CONFIG)
141147 OUTPUT_STRIP_TRAILING_WHITESPACE)
142148 string(REPLACE " " ";" LLVM_LIBDIRS "${LLVM_LIBDIRS_SPACES}")
143149
150 execute_process(
151 COMMAND ${LLVM_CONFIG_EXE} --system-libs
152 OUTPUT_VARIABLE LLVM_SYSTEM_LIBS_SPACES
153 OUTPUT_STRIP_TRAILING_WHITESPACE)
154 string(REPLACE " " ";" LLVM_SYSTEM_LIBS "${LLVM_SYSTEM_LIBS_SPACES}")
155
144156 execute_process(
145157 COMMAND ${LLVM_CONFIG_EXE} --shared-mode
146158 OUTPUT_VARIABLE LLVM_LINK_MODE
147159 OUTPUT_STRIP_TRAILING_WHITESPACE)
148160 endif()
149161
150 # We always ask for the system libs corresponding to static linking,
151 # since we always statically link LLD which needs these libraries
152 execute_process(
153 COMMAND ${LLVM_CONFIG_EXE} --system-libs --link-static
154 OUTPUT_VARIABLE LLVM_SYSTEM_LIBS_SPACES
155 OUTPUT_STRIP_TRAILING_WHITESPACE)
156 string(REPLACE " " ";" LLVM_SYSTEM_LIBS "${LLVM_SYSTEM_LIBS_SPACES}")
162 if (${LLVM_LINK_MODE} STREQUAL "shared")
163 # We always ask for the system libs corresponding to static linking,
164 # since on some distros LLD is only available as a static library
165 # and we need these libraries to link it successfully
166 execute_process(
167 COMMAND ${LLVM_CONFIG_EXE} --system-libs --link-static
168 OUTPUT_VARIABLE LLVM_STATIC_SYSTEM_LIBS_SPACES
169 ERROR_QUIET # Some installations have no static libs, we just ignore the failure
170 OUTPUT_STRIP_TRAILING_WHITESPACE)
171 string(REPLACE " " ";" LLVM_STATIC_SYSTEM_LIBS "${LLVM_STATIC_SYSTEM_LIBS_SPACES}")
157172
158 set(LLVM_LIBRARIES ${LLVM_LIBRARIES} ${LLVM_SYSTEM_LIBS})
173 set(LLVM_LIBRARIES ${LLVM_LIBRARIES} ${LLVM_SYSTEM_LIBS} ${LLVM_STATIC_SYSTEM_LIBS})
174 else()
175 set(LLVM_LIBRARIES ${LLVM_LIBRARIES} ${LLVM_SYSTEM_LIBS})
176 endif()
159177
160178 execute_process(
161179 COMMAND ${LLVM_CONFIG_EXE} --includedir
......@@ -163,14 +181,6 @@ if(ZIG_USE_LLVM_CONFIG)
163181 OUTPUT_STRIP_TRAILING_WHITESPACE)
164182 string(REPLACE " " ";" LLVM_INCLUDE_DIRS "${LLVM_INCLUDE_DIRS_SPACES}")
165183
166 if(NOT LLVM_LIBRARIES)
167 find_library(LLVM_LIBRARIES
168 NAMES LLVM LLVM-14 LLVM-14.0 NAMES_PER_DIR
169 HINTS "${LLVM_CONFIG_DIR}/../lib" "${LLVM_CONFIG_DIR}/../lib64" "${LLVM_CONFIG_DIR}/../${CMAKE_LIBRARY_ARCHITECTURE}")
170
171 # TODO: Make this fallthrough work
172 endif()
173
174184 link_directories("${CMAKE_PREFIX_PATH}/lib")
175185 link_directories("${LLVM_LIBDIRS}")
176186else()