mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-25 20:23:11 +01:00
82b6e6053d
No longer rely on an external tool to build the llvm component layout. Instead, leverage the existing `add_llvm_componentlibrary` cmake function and introduce `add_llvm_component_group` to accurately describe component behavior. These function store extra properties in the created targets. These properties are processed once all components are defined to resolve library dependencies and produce the header expected by llvm-config. Differential Revision: https://reviews.llvm.org/D90848
275 lines
7.5 KiB
CMake
275 lines
7.5 KiB
CMake
include(GetLibraryName)
|
|
|
|
if(LLVM_ENABLE_ZLIB)
|
|
set(imported_libs ZLIB::ZLIB)
|
|
endif()
|
|
|
|
if( MSVC OR MINGW )
|
|
# libuuid required for FOLDERID_Profile usage in lib/Support/Windows/Path.inc.
|
|
# advapi32 required for CryptAcquireContextW in lib/Support/Windows/Path.inc.
|
|
set(system_libs ${system_libs} psapi shell32 ole32 uuid advapi32)
|
|
elseif( CMAKE_HOST_UNIX )
|
|
if( HAVE_LIBRT )
|
|
set(system_libs ${system_libs} rt)
|
|
endif()
|
|
if( HAVE_LIBDL )
|
|
set(system_libs ${system_libs} ${CMAKE_DL_LIBS})
|
|
endif()
|
|
if( HAVE_BACKTRACE AND NOT "${Backtrace_LIBRARIES}" STREQUAL "" )
|
|
# On BSDs, CMake returns a fully qualified path to the backtrace library.
|
|
# We need to remove the path and the 'lib' prefix, to make it look like a
|
|
# regular short library name, suitable for appending to a -l link flag.
|
|
get_filename_component(Backtrace_LIBFILE ${Backtrace_LIBRARIES} NAME_WE)
|
|
STRING(REGEX REPLACE "^lib" "" Backtrace_LIBFILE ${Backtrace_LIBFILE})
|
|
set(system_libs ${system_libs} ${Backtrace_LIBFILE})
|
|
endif()
|
|
if( LLVM_ENABLE_TERMINFO )
|
|
set(imported_libs ${imported_libs} "${TERMINFO_LIB}")
|
|
endif()
|
|
if( LLVM_ENABLE_THREADS AND (HAVE_LIBATOMIC OR HAVE_CXX_LIBATOMICS64) )
|
|
set(system_libs ${system_libs} atomic)
|
|
endif()
|
|
set(system_libs ${system_libs} ${LLVM_PTHREAD_LIB})
|
|
if( UNIX AND NOT (BEOS OR HAIKU) )
|
|
set(system_libs ${system_libs} m)
|
|
endif()
|
|
if( FUCHSIA )
|
|
set(system_libs ${system_libs} zircon)
|
|
endif()
|
|
endif( MSVC OR MINGW )
|
|
|
|
# Delay load shell32.dll if possible to speed up process startup.
|
|
set (delayload_flags)
|
|
if (MSVC)
|
|
set (delayload_flags delayimp -delayload:shell32.dll -delayload:ole32.dll)
|
|
endif()
|
|
|
|
# Link Z3 if the user wants to build it.
|
|
if(LLVM_WITH_Z3)
|
|
set(system_libs ${system_libs} ${Z3_LIBRARIES})
|
|
endif()
|
|
|
|
# Override the C runtime allocator on Windows and embed it into LLVM tools & libraries
|
|
if(LLVM_INTEGRATED_CRT_ALLOC)
|
|
if (CMAKE_BUILD_TYPE AND NOT ${LLVM_USE_CRT_${uppercase_CMAKE_BUILD_TYPE}} MATCHES "^(MT|MTd)$")
|
|
message(FATAL_ERROR "LLVM_INTEGRATED_CRT_ALLOC only works with /MT or /MTd. Use LLVM_USE_CRT_${uppercase_CMAKE_BUILD_TYPE} to set the appropriate option.")
|
|
endif()
|
|
|
|
string(REGEX REPLACE "(/|\\\\)$" "" LLVM_INTEGRATED_CRT_ALLOC "${LLVM_INTEGRATED_CRT_ALLOC}")
|
|
|
|
if(NOT EXISTS "${LLVM_INTEGRATED_CRT_ALLOC}")
|
|
message(FATAL_ERROR "Cannot find the path to `git clone` for the CRT allocator! (${LLVM_INTEGRATED_CRT_ALLOC}). Currently, rpmalloc, snmalloc and mimalloc are supported.")
|
|
endif()
|
|
|
|
if(LLVM_INTEGRATED_CRT_ALLOC MATCHES "rpmalloc$")
|
|
add_definitions(-DENABLE_OVERRIDE -DENABLE_PRELOAD)
|
|
set(ALLOCATOR_FILES "${LLVM_INTEGRATED_CRT_ALLOC}/rpmalloc/rpmalloc.c")
|
|
elseif(LLVM_INTEGRATED_CRT_ALLOC MATCHES "snmalloc$")
|
|
set(ALLOCATOR_FILES "${LLVM_INTEGRATED_CRT_ALLOC}/src/override/malloc.cc" "${LLVM_INTEGRATED_CRT_ALLOC}/src/override/new.cc")
|
|
set(system_libs ${system_libs} "mincore.lib" "-INCLUDE:malloc")
|
|
elseif(LLVM_INTEGRATED_CRT_ALLOC MATCHES "mimalloc$")
|
|
set(MIMALLOC_LIB "${LLVM_INTEGRATED_CRT_ALLOC}/out/msvc-x64/Release/mimalloc-static.lib")
|
|
if(NOT EXISTS "${MIMALLOC_LIB}")
|
|
message(FATAL_ERROR "Cannot find the mimalloc static library. To build it, first apply the patch from https://github.com/microsoft/mimalloc/issues/268 then build the Release x64 target through ${LLVM_INTEGRATED_CRT_ALLOC}\\ide\\vs2019\\mimalloc.sln")
|
|
endif()
|
|
set(system_libs ${system_libs} "${MIMALLOC_LIB}" "-INCLUDE:malloc")
|
|
endif()
|
|
endif()
|
|
|
|
add_llvm_component_library(LLVMSupport
|
|
AArch64TargetParser.cpp
|
|
ABIBreak.cpp
|
|
ARMTargetParser.cpp
|
|
AMDGPUMetadata.cpp
|
|
APFixedPoint.cpp
|
|
APFloat.cpp
|
|
APInt.cpp
|
|
APSInt.cpp
|
|
ARMBuildAttrs.cpp
|
|
ARMAttributeParser.cpp
|
|
ARMWinEH.cpp
|
|
Allocator.cpp
|
|
BinaryStreamError.cpp
|
|
BinaryStreamReader.cpp
|
|
BinaryStreamRef.cpp
|
|
BinaryStreamWriter.cpp
|
|
BlockFrequency.cpp
|
|
BranchProbability.cpp
|
|
BuryPointer.cpp
|
|
CachePruning.cpp
|
|
circular_raw_ostream.cpp
|
|
Chrono.cpp
|
|
COM.cpp
|
|
CodeGenCoverage.cpp
|
|
CommandLine.cpp
|
|
Compression.cpp
|
|
CRC.cpp
|
|
ConvertUTF.cpp
|
|
ConvertUTFWrapper.cpp
|
|
CrashRecoveryContext.cpp
|
|
DataExtractor.cpp
|
|
Debug.cpp
|
|
DebugCounter.cpp
|
|
DeltaAlgorithm.cpp
|
|
DAGDeltaAlgorithm.cpp
|
|
DJB.cpp
|
|
ELFAttributeParser.cpp
|
|
ELFAttributes.cpp
|
|
Error.cpp
|
|
ErrorHandling.cpp
|
|
ExtensibleRTTI.cpp
|
|
FileCollector.cpp
|
|
FileUtilities.cpp
|
|
FileOutputBuffer.cpp
|
|
FoldingSet.cpp
|
|
FormattedStream.cpp
|
|
FormatVariadic.cpp
|
|
GlobPattern.cpp
|
|
GraphWriter.cpp
|
|
Hashing.cpp
|
|
InitLLVM.cpp
|
|
IntEqClasses.cpp
|
|
IntervalMap.cpp
|
|
ItaniumManglingCanonicalizer.cpp
|
|
JSON.cpp
|
|
KnownBits.cpp
|
|
LEB128.cpp
|
|
LineIterator.cpp
|
|
Locale.cpp
|
|
LockFileManager.cpp
|
|
LowLevelType.cpp
|
|
ManagedStatic.cpp
|
|
MathExtras.cpp
|
|
MemAlloc.cpp
|
|
MemoryBuffer.cpp
|
|
MemoryBufferRef.cpp
|
|
MD5.cpp
|
|
NativeFormatting.cpp
|
|
OptimizedStructLayout.cpp
|
|
Optional.cpp
|
|
Parallel.cpp
|
|
PluginLoader.cpp
|
|
PrettyStackTrace.cpp
|
|
RandomNumberGenerator.cpp
|
|
Regex.cpp
|
|
RISCVAttributes.cpp
|
|
RISCVAttributeParser.cpp
|
|
ScaledNumber.cpp
|
|
ScopedPrinter.cpp
|
|
SHA1.cpp
|
|
Signposts.cpp
|
|
SmallPtrSet.cpp
|
|
SmallVector.cpp
|
|
SourceMgr.cpp
|
|
SpecialCaseList.cpp
|
|
Statistic.cpp
|
|
StringExtras.cpp
|
|
StringMap.cpp
|
|
StringSaver.cpp
|
|
StringRef.cpp
|
|
SuffixTree.cpp
|
|
SymbolRemappingReader.cpp
|
|
SystemUtils.cpp
|
|
TarWriter.cpp
|
|
TargetParser.cpp
|
|
ThreadPool.cpp
|
|
TimeProfiler.cpp
|
|
Timer.cpp
|
|
ToolOutputFile.cpp
|
|
TrigramIndex.cpp
|
|
Triple.cpp
|
|
Twine.cpp
|
|
Unicode.cpp
|
|
UnicodeCaseFold.cpp
|
|
VersionTuple.cpp
|
|
VirtualFileSystem.cpp
|
|
WithColor.cpp
|
|
X86TargetParser.cpp
|
|
YAMLParser.cpp
|
|
YAMLTraits.cpp
|
|
raw_os_ostream.cpp
|
|
raw_ostream.cpp
|
|
regcomp.c
|
|
regerror.c
|
|
regexec.c
|
|
regfree.c
|
|
regstrlcpy.c
|
|
xxhash.cpp
|
|
Z3Solver.cpp
|
|
|
|
${ALLOCATOR_FILES}
|
|
|
|
# System
|
|
Atomic.cpp
|
|
DynamicLibrary.cpp
|
|
Errno.cpp
|
|
Host.cpp
|
|
Memory.cpp
|
|
Path.cpp
|
|
Process.cpp
|
|
Program.cpp
|
|
RWMutex.cpp
|
|
Signals.cpp
|
|
TargetRegistry.cpp
|
|
ThreadLocal.cpp
|
|
Threading.cpp
|
|
Valgrind.cpp
|
|
Watchdog.cpp
|
|
|
|
ADDITIONAL_HEADER_DIRS
|
|
Unix
|
|
Windows
|
|
${LLVM_MAIN_INCLUDE_DIR}/llvm/ADT
|
|
${LLVM_MAIN_INCLUDE_DIR}/llvm/Support
|
|
${Backtrace_INCLUDE_DIRS}
|
|
|
|
LINK_LIBS
|
|
${system_libs} ${imported_libs} ${delayload_flags}
|
|
|
|
LINK_COMPONENTS
|
|
Demangle
|
|
)
|
|
|
|
set(llvm_system_libs ${system_libs})
|
|
|
|
# This block is only needed for llvm-config. When we deprecate llvm-config and
|
|
# move to using CMake export, this block can be removed.
|
|
if(LLVM_ENABLE_ZLIB)
|
|
# CMAKE_BUILD_TYPE is only meaningful to single-configuration generators.
|
|
if(CMAKE_BUILD_TYPE)
|
|
string(TOUPPER ${CMAKE_BUILD_TYPE} build_type)
|
|
get_property(zlib_library TARGET ZLIB::ZLIB PROPERTY LOCATION_${build_type})
|
|
endif()
|
|
if(NOT zlib_library)
|
|
get_property(zlib_library TARGET ZLIB::ZLIB PROPERTY LOCATION)
|
|
endif()
|
|
get_library_name(${zlib_library} zlib_library)
|
|
set(llvm_system_libs ${llvm_system_libs} "${zlib_library}")
|
|
endif()
|
|
|
|
if(LLVM_ENABLE_TERMINFO)
|
|
get_library_name(${TERMINFO_LIB} terminfo_library)
|
|
set(llvm_system_libs ${llvm_system_libs} "${terminfo_library}")
|
|
endif()
|
|
|
|
set_property(TARGET LLVMSupport PROPERTY LLVM_SYSTEM_LIBS "${llvm_system_libs}")
|
|
|
|
|
|
if(LLVM_INTEGRATED_CRT_ALLOC)
|
|
if(LLVM_INTEGRATED_CRT_ALLOC MATCHES "snmalloc$")
|
|
set_property(TARGET LLVMSupport PROPERTY CXX_STANDARD 17)
|
|
add_definitions(-D_SILENCE_CXX17_ITERATOR_BASE_CLASS_DEPRECATION_WARNING)
|
|
if ("${CMAKE_CXX_COMPILER_ID}" MATCHES "Clang" AND
|
|
"${CMAKE_SYSTEM_PROCESSOR}" MATCHES "x86_64")
|
|
set_property(TARGET LLVMSupport PROPERTY COMPILE_FLAGS "-mcx16")
|
|
endif()
|
|
endif()
|
|
endif()
|
|
|
|
if(LLVM_WITH_Z3)
|
|
target_include_directories(LLVMSupport SYSTEM
|
|
PRIVATE
|
|
${Z3_INCLUDE_DIR}
|
|
)
|
|
endif()
|