|
| 1 | +include_guard() |
| 2 | + |
| 3 | +function(setup_llvm LLVM_VERSION) |
| 4 | + find_package(Python3 COMPONENTS Interpreter REQUIRED) |
| 5 | + |
| 6 | + set(LLVM_SETUP_OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/.llvm/setup-llvm.json") |
| 7 | + set(LLVM_SETUP_SCRIPT "${PROJECT_SOURCE_DIR}/scripts/setup-llvm.py") |
| 8 | + set(LLVM_SETUP_ARGS |
| 9 | + "--version" "${LLVM_VERSION}" |
| 10 | + "--build-type" "${CMAKE_BUILD_TYPE}" |
| 11 | + "--binary-dir" "${CMAKE_CURRENT_BINARY_DIR}" |
| 12 | + "--manifest" "${PROJECT_SOURCE_DIR}/config/llvm-mainfist.json" |
| 13 | + "--output" "${LLVM_SETUP_OUTPUT}" |
| 14 | + ) |
| 15 | + |
| 16 | + if(CLICE_ENABLE_LTO) |
| 17 | + list(APPEND LLVM_SETUP_ARGS "--enable-lto") |
| 18 | + endif() |
| 19 | + |
| 20 | + if(DEFINED LLVM_INSTALL_PATH AND NOT LLVM_INSTALL_PATH STREQUAL "") |
| 21 | + list(APPEND LLVM_SETUP_ARGS "--install-path" "${LLVM_INSTALL_PATH}") |
| 22 | + endif() |
| 23 | + |
| 24 | + if(DEFINED CLICE_OFFLINE_BUILD AND CLICE_OFFLINE_BUILD) |
| 25 | + list(APPEND LLVM_SETUP_ARGS "--offline") |
| 26 | + endif() |
| 27 | + |
| 28 | + execute_process( |
| 29 | + COMMAND "${Python3_EXECUTABLE}" "${LLVM_SETUP_SCRIPT}" ${LLVM_SETUP_ARGS} |
| 30 | + RESULT_VARIABLE LLVM_SETUP_RESULT |
| 31 | + COMMAND_ERROR_IS_FATAL ANY |
| 32 | + ) |
| 33 | + |
| 34 | + file(READ "${LLVM_SETUP_OUTPUT}" LLVM_SETUP_JSON) |
| 35 | + string(JSON LLVM_INSTALL_PATH GET "${LLVM_SETUP_JSON}" install_path) |
| 36 | + string(JSON LLVM_CMAKE_DIR GET "${LLVM_SETUP_JSON}" cmake_dir) |
| 37 | + set(LLVM_INSTALL_PATH "${LLVM_INSTALL_PATH}" CACHE PATH "Path to LLVM installation" FORCE) |
| 38 | + set(LLVM_CMAKE_DIR "${LLVM_CMAKE_DIR}" CACHE PATH "Path to LLVM CMake files" FORCE) |
| 39 | + |
| 40 | + get_filename_component(LLVM_INSTALL_PATH "${LLVM_INSTALL_PATH}" ABSOLUTE) |
| 41 | + |
| 42 | + if(NOT EXISTS "${LLVM_INSTALL_PATH}") |
| 43 | + message(FATAL_ERROR "Error: The specified LLVM_INSTALL_PATH does not exist: ${LLVM_INSTALL_PATH}") |
| 44 | + endif() |
| 45 | + |
| 46 | + # set llvm include and lib path |
| 47 | + add_library(llvm-libs INTERFACE IMPORTED) |
| 48 | + |
| 49 | + # add to include directories |
| 50 | + target_include_directories(llvm-libs INTERFACE "${LLVM_INSTALL_PATH}/include") |
| 51 | + |
| 52 | + if(CMAKE_BUILD_TYPE STREQUAL "Debug" AND NOT WIN32) |
| 53 | + target_link_directories(llvm-libs INTERFACE "${LLVM_INSTALL_PATH}/lib") |
| 54 | + target_link_libraries(llvm-libs INTERFACE |
| 55 | + LLVMSupport |
| 56 | + LLVMFrontendOpenMP |
| 57 | + LLVMOption |
| 58 | + LLVMTargetParser |
| 59 | + clangAST |
| 60 | + clangASTMatchers |
| 61 | + clangBasic |
| 62 | + clangDriver |
| 63 | + clangFormat |
| 64 | + clangFrontend |
| 65 | + clangLex |
| 66 | + clangSema |
| 67 | + clangSerialization |
| 68 | + clangTidy |
| 69 | + clangTidyUtils |
| 70 | + clangTidyAndroidModule |
| 71 | + clangTidyAbseilModule |
| 72 | + clangTidyAlteraModule |
| 73 | + clangTidyBoostModule |
| 74 | + clangTidyBugproneModule |
| 75 | + clangTidyCERTModule |
| 76 | + clangTidyConcurrencyModule |
| 77 | + clangTidyCppCoreGuidelinesModule |
| 78 | + clangTidyDarwinModule |
| 79 | + clangTidyFuchsiaModule |
| 80 | + clangTidyGoogleModule |
| 81 | + clangTidyHICPPModule |
| 82 | + clangTidyLinuxKernelModule |
| 83 | + clangTidyLLVMModule |
| 84 | + clangTidyLLVMLibcModule |
| 85 | + clangTidyMiscModule |
| 86 | + clangTidyModernizeModule |
| 87 | + clangTidyObjCModule |
| 88 | + clangTidyOpenMPModule |
| 89 | + clangTidyPerformanceModule |
| 90 | + clangTidyPortabilityModule |
| 91 | + clangTidyReadabilityModule |
| 92 | + clangTidyZirconModule |
| 93 | + clangTooling |
| 94 | + clangToolingCore |
| 95 | + clangToolingInclusions |
| 96 | + clangToolingInclusionsStdlib |
| 97 | + clangToolingSyntax |
| 98 | + ) |
| 99 | + else() |
| 100 | + file(GLOB LLVM_LIBRARIES CONFIGURE_DEPENDS "${LLVM_INSTALL_PATH}/lib/*${CMAKE_STATIC_LIBRARY_SUFFIX}") |
| 101 | + target_link_libraries(llvm-libs INTERFACE ${LLVM_LIBRARIES}) |
| 102 | + target_compile_definitions(llvm-libs INTERFACE CLANG_BUILD_STATIC=1) |
| 103 | + endif() |
| 104 | +endfunction() |
0 commit comments