diff --git a/cmake/Findclang.cmake b/cmake/Findclang.cmake index 37097d0c0b..d2b898a74a 100644 --- a/cmake/Findclang.cmake +++ b/cmake/Findclang.cmake @@ -7,7 +7,6 @@ # CLANG_LIBRARIES # CLANG_LIBDIRS -#TODO: FIXME find_path(CLANG_INCLUDE_DIRS NAMES clang/Frontend/ASTUnit.h HINTS ${LLVM_INCLUDE_DIRS} NO_DEFAULT_PATH # Only look for clang next to LLVM diff --git a/cmake/Findlld.cmake b/cmake/Findlld.cmake index fed89b6ef5..17e27e10f0 100644 --- a/cmake/Findlld.cmake +++ b/cmake/Findlld.cmake @@ -8,12 +8,22 @@ find_path(LLD_INCLUDE_DIRS NAMES lld/Common/Driver.h HINTS ${LLVM_INCLUDE_DIRS} - NO_DEFAULT_PATH # Only look for LLD next to LLVM -) + PATHS + /usr/lib/llvm-14/include + /usr/local/llvm140/include + /usr/local/llvm14/include + /usr/local/opt/llvm@14/include + /opt/homebrew/opt/llvm@14/include + /mingw64/include) find_library(LLD_LIBRARY NAMES lld-14.0 lld140 lld NAMES_PER_DIR HINTS ${LLVM_LIBDIRS} - NO_DEFAULT_PATH # Only look for LLD next to LLVM + PATHS + /usr/lib/llvm-14/lib + /usr/local/llvm140/lib + /usr/local/llvm14/lib + /usr/local/opt/llvm@14/lib + /opt/homebrew/opt/llvm@14/lib ) if(EXISTS ${LLD_LIBRARY}) set(LLD_LIBRARIES ${LLD_LIBRARY}) @@ -22,8 +32,16 @@ else() string(TOUPPER ${_libname_} _prettylibname_) find_library(LLD_${_prettylibname_}_LIB NAMES ${_libname_} NAMES_PER_DIR HINTS ${LLVM_LIBDIRS} - NO_DEFAULT_PATH # Only look for LLD next to LLVM - ) + PATHS + ${LLD_LIBDIRS} + /usr/lib/llvm-14/lib + /usr/local/llvm140/lib + /usr/local/llvm14/lib + /usr/local/opt/llvm@14/lib + /opt/homebrew/opt/llvm@14/lib + /mingw64/lib + /c/msys64/mingw64/lib + c:/msys64/mingw64/lib) if(LLD_${_prettylibname_}_LIB) set(LLD_LIBRARIES ${LLD_LIBRARIES} ${LLD_${_prettylibname_}_LIB}) endif() diff --git a/cmake/Findllvm.cmake b/cmake/Findllvm.cmake index ba93bd8914..d62a154b84 100644 --- a/cmake/Findllvm.cmake +++ b/cmake/Findllvm.cmake @@ -56,7 +56,7 @@ if(ZIG_USE_LLVM_CONFIG) COMMAND ${LLVM_CONFIG_EXE} --libs ${STATIC_OR_SHARED_LINK} OUTPUT_QUIET ERROR_VARIABLE LLVM_CONFIG_ERROR - OUTPUT_STRIP_TRAILING_WHITESPACE) + ERROR_STRIP_TRAILING_WHITESPACE) if (LLVM_CONFIG_ERROR) # Save the error message, in case this is the last llvm-config we find @@ -124,6 +124,12 @@ if(ZIG_USE_LLVM_CONFIG) OUTPUT_STRIP_TRAILING_WHITESPACE) string(REPLACE " " ";" LLVM_LIBDIRS "${LLVM_LIBDIRS_SPACES}") + execute_process( + COMMAND ${LLVM_CONFIG_EXE} --system-libs ${STATIC_OR_SHARED_LINK} + OUTPUT_VARIABLE LLVM_SYSTEM_LIBS_SPACES + OUTPUT_STRIP_TRAILING_WHITESPACE) + string(REPLACE " " ";" LLVM_SYSTEM_LIBS "${LLVM_SYSTEM_LIBS_SPACES}") + execute_process( COMMAND ${LLVM_CONFIG_EXE} --shared-mode ${STATIC_OR_SHARED_LINK} OUTPUT_VARIABLE LLVM_LINK_MODE @@ -141,21 +147,33 @@ if(ZIG_USE_LLVM_CONFIG) OUTPUT_STRIP_TRAILING_WHITESPACE) string(REPLACE " " ";" LLVM_LIBDIRS "${LLVM_LIBDIRS_SPACES}") + execute_process( + COMMAND ${LLVM_CONFIG_EXE} --system-libs + OUTPUT_VARIABLE LLVM_SYSTEM_LIBS_SPACES + OUTPUT_STRIP_TRAILING_WHITESPACE) + string(REPLACE " " ";" LLVM_SYSTEM_LIBS "${LLVM_SYSTEM_LIBS_SPACES}") + execute_process( COMMAND ${LLVM_CONFIG_EXE} --shared-mode OUTPUT_VARIABLE LLVM_LINK_MODE OUTPUT_STRIP_TRAILING_WHITESPACE) endif() - # We always ask for the system libs corresponding to static linking, - # since we always statically link LLD which needs these libraries - execute_process( - COMMAND ${LLVM_CONFIG_EXE} --system-libs --link-static - OUTPUT_VARIABLE LLVM_SYSTEM_LIBS_SPACES - OUTPUT_STRIP_TRAILING_WHITESPACE) - string(REPLACE " " ";" LLVM_SYSTEM_LIBS "${LLVM_SYSTEM_LIBS_SPACES}") + if (${LLVM_LINK_MODE} STREQUAL "shared") + # We always ask for the system libs corresponding to static linking, + # since on some distros LLD is only available as a static library + # and we need these libraries to link it successfully + execute_process( + COMMAND ${LLVM_CONFIG_EXE} --system-libs --link-static + OUTPUT_VARIABLE LLVM_STATIC_SYSTEM_LIBS_SPACES + ERROR_QUIET # Some installations have no static libs, we just ignore the failure + OUTPUT_STRIP_TRAILING_WHITESPACE) + string(REPLACE " " ";" LLVM_STATIC_SYSTEM_LIBS "${LLVM_STATIC_SYSTEM_LIBS_SPACES}") - set(LLVM_LIBRARIES ${LLVM_LIBRARIES} ${LLVM_SYSTEM_LIBS}) + set(LLVM_LIBRARIES ${LLVM_LIBRARIES} ${LLVM_SYSTEM_LIBS} ${LLVM_STATIC_SYSTEM_LIBS}) + else() + set(LLVM_LIBRARIES ${LLVM_LIBRARIES} ${LLVM_SYSTEM_LIBS}) + endif() execute_process( COMMAND ${LLVM_CONFIG_EXE} --includedir @@ -163,14 +181,6 @@ if(ZIG_USE_LLVM_CONFIG) OUTPUT_STRIP_TRAILING_WHITESPACE) string(REPLACE " " ";" LLVM_INCLUDE_DIRS "${LLVM_INCLUDE_DIRS_SPACES}") - if(NOT LLVM_LIBRARIES) - find_library(LLVM_LIBRARIES - NAMES LLVM LLVM-14 LLVM-14.0 NAMES_PER_DIR - HINTS "${LLVM_CONFIG_DIR}/../lib" "${LLVM_CONFIG_DIR}/../lib64" "${LLVM_CONFIG_DIR}/../${CMAKE_LIBRARY_ARCHITECTURE}") - - # TODO: Make this fallthrough work - endif() - link_directories("${CMAKE_PREFIX_PATH}/lib") link_directories("${LLVM_LIBDIRS}") else()