diff --git a/cmake/FindLLVM.cmake b/cmake/FindLLVM.cmake index e1a22d3354a..7f993944628 100644 --- a/cmake/FindLLVM.cmake +++ b/cmake/FindLLVM.cmake @@ -23,3 +23,24 @@ endif() add_library(LLVMHeaders INTERFACE IMPORTED) target_include_directories(LLVMHeaders INTERFACE ${LLVM_INCLUDE_DIRS}) + +function(find_llvm_libs REQUIRED_LLVM_LIBS) + find_library(LLVM_SHARED_LIB LLVM NO_SYSTEM_ENVIRONMENT_PATH NO_CMAKE_SYSTEM_PATH PATHS ${LLVM_LIBRARY_DIR}) + set(LLVM_LIBS_TMP "" PARENT_SCOPE) + foreach(LIB IN LISTS REQUIRED_LLVM_LIBS) + find_library(LLVM_LIB ${LIB} NO_SYSTEM_ENVIRONMENT_PATH NO_CMAKE_SYSTEM_PATH PATHS ${LLVM_LIBRARY_DIR}) + if(LLVM_LIB) + message(VERBOSE "Adding ${LIB}") + list(APPEND LLVM_LIBS_TMP ${LIB}) + elseif(LLVM_SHARED_LIB) + set(LLVM_LIBS ${LLVM_SHARED_LIB} PARENT_SCOPE) + message(STATUS "Using shared LLVM library.") + return() + else() + message(FATAL_ERROR "Can't find necessary LLVM libraries") + endif() + endforeach() + + set(LLVM_LIBS ${LLVM_LIBS_TMP} PARENT_SCOPE) + message(STATUS "Using static LLVM libraries.") +endfunction() diff --git a/src/ObjectUtils/CMakeLists.txt b/src/ObjectUtils/CMakeLists.txt index 4102545747f..2fcea6fac27 100644 --- a/src/ObjectUtils/CMakeLists.txt +++ b/src/ObjectUtils/CMakeLists.txt @@ -4,6 +4,14 @@ cmake_minimum_required(VERSION 3.15) +set(REQUIRED_LLVM_LIBS LLVMDebugInfoCodeView + LLVMDebugInfoDWARF + LLVMDebugInfoPDB + LLVMObject + LLVMSymbolize) + +find_llvm_libs("${REQUIRED_LLVM_LIBS}") + project(ObjectUtils) add_library(ObjectUtils STATIC) @@ -55,12 +63,9 @@ target_link_libraries( absl::synchronization absl::time absl::span - LLVMDebugInfoCodeView - LLVMDebugInfoDWARF - LLVMDebugInfoPDB LLVMHeaders - LLVMObject - LLVMSymbolize) + ${LLVM_LIBS} + ) if (WIN32) target_link_libraries(ObjectUtils PUBLIC DIASDK::DIASDK)