From 47554060f4dd9ab2929d5549f160cb6449ec46fb Mon Sep 17 00:00:00 2001 From: Bartek Kryza Date: Sat, 12 Feb 2022 19:08:07 +0100 Subject: [PATCH] Added CMake option to build using specific llvm version --- CMakeLists.txt | 27 ++++++++++++++++++++++++--- Makefile | 10 +++++++--- README.md | 3 +++ cmake/FindLibClang.cmake | 4 ++-- 4 files changed, 36 insertions(+), 8 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 566a3895..e231e608 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -15,10 +15,23 @@ set(CLANG_UML_INSTALL_BIN_DIR ${PROJECT_SOURCE_DIR}/bin) set(UML_HEADERS_DIR ${PROJECT_SOURCE_DIR}/src/uml) +option(LLVM_CONFIG_PATH "Path to custom llvm-config executable") + +if(LLVM_CONFIG_PATH) + set(LIBCLANG_LLVM_CONFIG_EXECUTABLE ${LLVM_CONFIG_PATH}) +endif(LLVM_CONFIG_PATH) + +message(STATUS "Checking for fmt...") +find_package(fmt REQUIRED) message(STATUS "Checking for spdlog...") find_package(spdlog REQUIRED) -get_target_property(SPDLOG_INCLUDE_DIRS spdlog::spdlog_header_only INTERFACE_INCLUDE_DIRECTORIES) +if(APPLE) + get_target_property(SPDLOG_INCLUDE_DIRS spdlog::spdlog_header_only INTERFACE_INCLUDE_DIRECTORIES) +else(APPLE) + get_target_property(SPDLOG_INCLUDE_DIRS spdlog::spdlog INTERFACE_INCLUDE_DIRECTORIES) +endif(APPLE) + add_definitions(-DSPDLOG_FMT_EXTERNAL) message(STATUS "Checking for yaml-cpp...") @@ -26,7 +39,9 @@ find_package(yaml-cpp REQUIRED) message(STATUS "Checking for libclang...") set(LLVM_PREFERRED_VERSION 12.0.0) -set(LIBCLANG_LLVM_CONFIG_EXECUTABLE "/usr/local/opt/llvm@12/bin/llvm-config") +# Add +# -DLLVM_CONFIG_PATH=/path/to/llvm-config +# to use custom LLVM version find_package(LibClang REQUIRED) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++17 ${LIBCLANG_CXXFLAGS}") @@ -65,7 +80,13 @@ add_library(clang-umllib OBJECT ${SOURCES}) add_executable(clang-uml ${MAIN_SOURCE_FILE}) install(TARGETS clang-uml DESTINATION ${CLANG_UML_INSTALL_BIN_DIR}) -target_link_libraries(clang-uml ${LIBCLANG_LIBRARIES} ${YAML_CPP_LIBRARIES} spdlog::spdlog_header_only cppast clang-umllib) +target_link_libraries(clang-uml ${LIBCLANG_LIBRARIES} ${YAML_CPP_LIBRARIES} fmt::fmt cppast clang-umllib) +if(APPLE) + target_link_libraries(clang-uml spdlog::spdlog_header_only) +else(APPLE) + target_link_libraries(clang-uml spdlog::spdlog) +endif(APPLE) + target_compile_features(clang-uml PRIVATE cxx_std_17) install( diff --git a/Makefile b/Makefile index 2960c91f..86f84643 100644 --- a/Makefile +++ b/Makefile @@ -22,6 +22,8 @@ NUMPROC ?= $(shell nproc) +LLVM_CONFIG_PATH ?= + .PHONY: clean clean: rm -rf debug release @@ -29,16 +31,18 @@ clean: debug/CMakeLists.txt: cmake -S . -B debug \ -DCMAKE_CXX_COMPILER_LAUNCHER=ccache \ - -DCMAKE_BUILD_TYPE=Debug + -DCMAKE_BUILD_TYPE=Debug \ + -DLLVM_CONFIG_PATH=$(LLVM_CONFIG_PATH) release/CMakeLists.txt: cmake -S . -B release \ -DCMAKE_CXX_COMPILER_LAUNCHER=ccache \ - -DCMAKE_BUILD_TYPE=Release + -DCMAKE_BUILD_TYPE=Release \ + -DLLVM_CONFIG_PATH=$(LLVM_CONFIG_PATH) debug: debug/CMakeLists.txt echo "Using ${NUMPROC} cores" - make -C debug -j$(NUMPROC) VERBOSE=1 + make -C debug -j$(NUMPROC) release: release/CMakeLists.txt make -C release -j diff --git a/README.md b/README.md index 858cb07b..24ec4634 100644 --- a/README.md +++ b/README.md @@ -42,6 +42,9 @@ make submodules make release release/clang-uml --help +# To build using a specific installed version of LLVM use: +LLVM_CONFIG_PATH=/usr/bin/llvm-config-13 make release + # Optionally make install # or diff --git a/cmake/FindLibClang.cmake b/cmake/FindLibClang.cmake index 670c8616..20d6e153 100644 --- a/cmake/FindLibClang.cmake +++ b/cmake/FindLibClang.cmake @@ -57,13 +57,13 @@ if (NOT LIBCLANG_LLVM_CONFIG_EXECUTABLE) find_program(LIBCLANG_LLVM_CONFIG_EXECUTABLE NAMES llvm-config PATHS "${BREW_LLVM_PATH}/bin") else () set(llvm_config_names llvm-config) - foreach(major RANGE 12 3) + foreach(major RANGE 13 3) list(APPEND llvm_config_names "llvm-config${major}" "llvm-config-${major}") foreach(minor RANGE 9 0) list(APPEND llvm_config_names "llvm-config${major}${minor}" "llvm-config-${major}.${minor}" "llvm-config-mp-${major}.${minor}") endforeach () endforeach () - find_program(LIBCLANG_LLVM_CONFIG_EXECUTABLE NAMES ${llvm_config_names}) + find_program(LIBCLANG_LLVM_CONFIG_EXECUTABLE NAMES ${llvm_config_names} PATHS /usr/bin) endif () endif () if (LIBCLANG_LLVM_CONFIG_EXECUTABLE)