mirror of
https://github.com/bkryza/clang-uml.git
synced 2025-04-20 04:06:48 +08:00
Use CMake defaults as sane default, as LLVM also uses it by default. 1. The policy was ambiguous as CMake sets it to NEW since CMake 3.15 (as we have CMake 3.16); 2. The `/MD` flag just override the target's property MSVC_RUNTIME_LIBRARY, so all configuration types used the /MD flag (instead of CMAKE_MSVC_RUNTIME_LIBRARY); 3. The manual override for CMAKE_MSVC_RUNTIME_LIBRARY was removed as a potential ODR-violation against LLVM's used MSVC runtime and a real runtime mismatch (which follows to LNK2038 error with text like "Detected mismatch for "RuntimeLibrary": value "MDd_DynamicDebug" doesn't match value "MD_StaticDebug").
104 lines
3.1 KiB
CMake
104 lines
3.1 KiB
CMake
message(STATUS "Checking for LLVM and Clang...")
|
|
|
|
# If user provided a path to llvm-config executable use it to detect
|
|
# LLVM Version and appropriate CMake module path
|
|
if(NOT "${LLVM_CONFIG_PATH}" STREQUAL "")
|
|
# Get LLVM prefix
|
|
message(STATUS "Using llvm-config from ${LLVM_CONFIG_PATH}")
|
|
set(LIBCLANG_LLVM_CONFIG_EXECUTABLE ${LLVM_CONFIG_PATH})
|
|
set(LLVM_CONFIG_BINARY ${LLVM_CONFIG_PATH})
|
|
execute_process(COMMAND ${LLVM_CONFIG_PATH} --prefix
|
|
OUTPUT_VARIABLE LLVM_PREFIX OUTPUT_STRIP_TRAILING_WHITESPACE)
|
|
set(LLVM_CMAKE_DIR "${LLVM_PREFIX}/lib/cmake/llvm")
|
|
|
|
list(APPEND CMAKE_MODULE_PATH ${LLVM_DIR})
|
|
|
|
# Get LLVM version
|
|
execute_process(COMMAND ${LLVM_CONFIG_PATH} --version
|
|
OUTPUT_VARIABLE LLVM_VERSION_STR OUTPUT_STRIP_TRAILING_WHITESPACE)
|
|
|
|
string(REGEX MATCH "^([0-9]+)\\.([0-9]+)\\.(.+)"
|
|
GIT_VERSION_MATCH ${LLVM_VERSION_STR})
|
|
set(LLVM_VERSION ${CMAKE_MATCH_1})
|
|
endif()
|
|
|
|
if(LLVM_VERSION STREQUAL "18")
|
|
set(LLVM_VERSION "18.1")
|
|
endif()
|
|
|
|
if(LLVM_VERSION STREQUAL "19")
|
|
set(LLVM_VERSION "19.1")
|
|
endif()
|
|
|
|
find_package(LLVM ${LLVM_VERSION} CONFIG REQUIRED)
|
|
|
|
list(APPEND CMAKE_MODULE_PATH ${LLVM_CMAKE_DIR})
|
|
include(AddLLVM)
|
|
|
|
message(STATUS "Found LLVM ${LLVM_PACKAGE_VERSION}")
|
|
message(STATUS "Using LLVMConfig.cmake from: ${LLVM_CMAKE_DIR}")
|
|
message(STATUS "LLVM library dir: ${LLVM_LIBRARY_DIR}")
|
|
|
|
if(MSVC)
|
|
# LLVM_BUILD_LLVM_DYLIB is not available on Windows
|
|
set(LINK_LLVM_SHARED NO)
|
|
endif(MSVC)
|
|
|
|
if(LINK_LLVM_SHARED)
|
|
set(LIBTOOLING_LIBS clang-cpp LLVM)
|
|
else(LINK_LLVM_SHARED)
|
|
set(LIBTOOLING_LIBS
|
|
clangLex
|
|
clangFrontend
|
|
clangSerialization
|
|
clangDriver
|
|
clangParse
|
|
clangSema
|
|
clangSupport
|
|
clangAnalysis
|
|
clangAST
|
|
clangBasic
|
|
clangEdit
|
|
clangLex
|
|
clangTooling
|
|
LLVMipo
|
|
LLVMScalarOpts
|
|
LLVMInstCombine
|
|
LLVMTransformUtils
|
|
LLVMAnalysis
|
|
LLVMTarget
|
|
LLVMOption
|
|
LLVMMCParser
|
|
LLVMMC
|
|
LLVMObject
|
|
LLVMBitReader
|
|
LLVMCore
|
|
LLVMSupport)
|
|
if(${LLVM_PACKAGE_VERSION} VERSION_LESS "15.0")
|
|
list(REMOVE_ITEM LIBTOOLING_LIBS clangSupport)
|
|
else()
|
|
list(APPEND LIBTOOLING_LIBS
|
|
LLVMWindowsDriver
|
|
LLVMWindowsManifest)
|
|
endif()
|
|
if(${LLVM_PACKAGE_VERSION} VERSION_GREATER_EQUAL "16.0")
|
|
list(APPEND LIBTOOLING_LIBS clangASTMatchers)
|
|
endif()
|
|
if(MSVC)
|
|
if(${LLVM_PACKAGE_VERSION} VERSION_GREATER_EQUAL "18.1")
|
|
list(APPEND LIBTOOLING_LIBS clangAPINotes)
|
|
endif()
|
|
endif(MSVC)
|
|
endif(LINK_LLVM_SHARED)
|
|
|
|
if("${LIBTOOLING_LIBS}" STREQUAL "")
|
|
message(FATAL_ERROR "Failed to find LibTooling libraries!")
|
|
else()
|
|
message(STATUS "Found LibTooling libraries: ${LIBTOOLING_LIBS}")
|
|
endif()
|
|
|
|
if(APPLE OR (LLVM_VERSION_MAJOR GREATER_EQUAL 16))
|
|
set(CMAKE_CXX_STANDARD_INCLUDE_DIRECTORIES
|
|
${CMAKE_CXX_IMPLICIT_INCLUDE_DIRECTORIES})
|
|
endif()
|