mirror of
https://github.com/ziglang/zig.git
synced 2025-12-06 06:13:07 +00:00
This commit reworks the LLVM/Clang/LLD discovery process for CMake. The
biggest changes are that:
1. We search for LLVM from most preferred directory to least, skipping
any `llvm-config` that is the wrong version, or that doesn't
support the requested link mode ("static" or "shared").
2. `ZIG_PREFER_CLANG_CPP_DYLIB` has been renamed to `ZIG_SHARED_LLVM`,
to better align with `ZIG_STATIC_LLVM`.
3. We only search for LLVM in the same directory alongside LLVM.
4. LLVM's link mode is forwarded to Clang, so that we can look for the
appropriate shared/static libraries.
5. We use `--link-static` when querying `--system-libs` from llvm-config,
so that this will include libz and other dependencies for
statically linking LLD
44 lines
1.3 KiB
CMake
44 lines
1.3 KiB
CMake
# Copyright (c) 2017 Andrew Kelley
|
|
# This file is MIT licensed.
|
|
# See http://opensource.org/licenses/MIT
|
|
|
|
# LLD_FOUND
|
|
# LLD_INCLUDE_DIRS
|
|
# LLD_LIBRARIES
|
|
|
|
find_path(LLD_INCLUDE_DIRS NAMES lld/Common/Driver.h
|
|
HINTS ${LLVM_INCLUDE_DIRS}
|
|
NO_DEFAULT_PATH # Only look for LLD next to LLVM
|
|
)
|
|
|
|
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
|
|
)
|
|
if(EXISTS ${LLD_LIBRARY})
|
|
set(LLD_LIBRARIES ${LLD_LIBRARY})
|
|
else()
|
|
macro(FIND_AND_ADD_LLD_LIB _libname_)
|
|
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
|
|
)
|
|
if(LLD_${_prettylibname_}_LIB)
|
|
set(LLD_LIBRARIES ${LLD_LIBRARIES} ${LLD_${_prettylibname_}_LIB})
|
|
endif()
|
|
endmacro(FIND_AND_ADD_LLD_LIB)
|
|
|
|
FIND_AND_ADD_LLD_LIB(lldMinGW)
|
|
FIND_AND_ADD_LLD_LIB(lldELF)
|
|
FIND_AND_ADD_LLD_LIB(lldCOFF)
|
|
FIND_AND_ADD_LLD_LIB(lldWasm)
|
|
FIND_AND_ADD_LLD_LIB(lldMachO)
|
|
FIND_AND_ADD_LLD_LIB(lldCommon)
|
|
endif()
|
|
|
|
include(FindPackageHandleStandardArgs)
|
|
find_package_handle_standard_args(lld DEFAULT_MSG LLD_LIBRARIES LLD_INCLUDE_DIRS)
|
|
|
|
mark_as_advanced(LLD_INCLUDE_DIRS LLD_LIBRARIES)
|