@@ -7,17 +7,80 @@ set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
77set (CMAKE_RUNTIME_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR} /bin)
88
99# set llvm-libs install path
10- if (NOT DEFINED LLVM_INSTALL_PATH OR LLVM_INSTALL_PATH STREQUAL "" )
11- message (FATAL_ERROR "Error: The variable LLVM_INSTALL_PATH is not set. Please specify it with -DLLVM_INSTALL_PATH=<value>." )
10+ if (NOT DEFINED LLVM_INSTALL_PATH OR LLVM_INSTALL_PATH EQUAL "" )
11+ message (WARNING "LLVM_INSTALL_PATH is not set. Trying to detect system LLVM installation using llvm-config." )
12+
13+ # Try to find llvm-config
14+ find_program (LLVM_CONFIG_EXEC llvm-config )
15+ if (NOT LLVM_CONFIG_EXEC)
16+ message (FATAL_ERROR "llvm-config not found. Please set -DLLVM_INSTALL_PATH=<path>." )
17+ endif ()
18+ message (STATUS "Found llvm-config: ${LLVM_CONFIG_EXEC} " )
19+
20+ # Get LLVM version
21+ execute_process (
22+ COMMAND "${LLVM_CONFIG_EXEC} " --version
23+ OUTPUT_VARIABLE LLVM_VERSION
24+ OUTPUT_STRIP_TRAILING_WHITESPACE
25+ ERROR_VARIABLE LLVM_VERSION_ERROR
26+ RESULT_VARIABLE LLVM_VERSION_RESULT
27+ )
28+ if (LLVM_VERSION_RESULT OR LLVM_VERSION EQUAL "" )
29+ message (FATAL_ERROR "Failed to get LLVM version: ${LLVM_VERSION_ERROR} " )
30+ endif ()
31+
32+ # Check version is below 20.1.6
33+ if (NOT LLVM_VERSION MATCHES "^20\\ .1\\ ..*$" OR NOT LLVM_VERSION STRLESS "20.1.6" )
34+ message (FATAL_ERROR "Incompatible LLVM version found: ${LLVM_VERSION} , expecting: 20.1.0 <= v < 20.1.6" )
35+ else ()
36+ # check minor version
37+ message (STATUS "Found compatible LLVM version: ${LLVM_VERSION} " )
38+ endif ()
39+
40+ # Get LLVM install prefix
41+ execute_process (
42+ COMMAND "${LLVM_CONFIG_EXEC} " --prefix
43+ OUTPUT_VARIABLE LLVM_INSTALL_PATH_DETECTED
44+ OUTPUT_STRIP_TRAILING_WHITESPACE
45+ ERROR_VARIABLE LLVM_PREFIX_ERROR
46+ RESULT_VARIABLE LLVM_PREFIX_RESULT
47+ )
48+ if (LLVM_PREFIX_RESULT OR LLVM_INSTALL_PATH_DETECTED EQUAL "" )
49+ message (FATAL_ERROR "Failed to get LLVM install prefix: ${LLVM_PREFIX_ERROR} " )
50+ endif ()
51+
52+ # Get LLVM cmake files prefix
53+ execute_process (
54+ COMMAND "${LLVM_CONFIG_EXEC} " --cmakedir
55+ OUTPUT_VARIABLE LLVM_CMAKE_DIR
56+ OUTPUT_STRIP_TRAILING_WHITESPACE
57+ ERROR_VARIABLE LLVM_CMAKE_DIR_ERROR
58+ RESULT_VARIABLE LLVM_CMAKE_DIR_RESULT
59+ )
60+ if (LLVM_CMAKE_DIR_RESULT OR LLVM_CMAKE_DIR STREQUAL "" )
61+ message (FATAL_ERROR "Failed to get LLVM cmake files prefix: ${LLVM_CMAKE_DIR_ERROR} " )
62+ endif ()
63+
64+ set (LLVM_INSTALL_PATH "${LLVM_INSTALL_PATH_DETECTED} " CACHE PATH "Path to LLVM installation" FORCE )
65+ set (LLVM_CMAKE_DIR "${LLVM_CMAKE_DIR} " CACHE PATH "Path to LLVM CMake files" FORCE )
66+
67+ message (STATUS "Detected LLVM_INSTALL_PATH: ${LLVM_INSTALL_PATH} , cmake files path: ${LLVM_CMAKE_DIR} " )
1268endif ()
69+
1370get_filename_component (LLVM_INSTALL_PATH "${LLVM_INSTALL_PATH} " ABSOLUTE )
1471
1572if (NOT EXISTS "${LLVM_INSTALL_PATH} " )
1673 message (FATAL_ERROR "Error: The specified LLVM_INSTALL_PATH does not exist: ${LLVM_INSTALL_PATH} " )
1774endif ()
1875message (STATUS "Found llvm-libs ${LLVM_INSTALL_PATH} " )
1976
20- set (CMAKE_PREFIX_PATH "${LLVM_INSTALL_PATH} " )
77+ if (EXISTS "${LLVM_CMAKE_DIR} " )
78+ # add to CMAKE_PREFIX_PATH
79+ set (CMAKE_PREFIX_PATH "${LLVM_CMAKE_DIR} " )
80+ else ()
81+ set (CMAKE_PREFIX_PATH "${LLVM_INSTALL_PATH} " )
82+ endif ()
83+ message (STATUS "CMake prefix path: ${CMAKE_PREFIX_PATH} " )
2184
2285# install dependencies
2386include (FetchContent )
@@ -37,6 +100,9 @@ FetchContent_Declare(
37100)
38101FetchContent_MakeAvailable (tomlplusplus libuv)
39102
103+ message (STATUS "Found tomlplusplus: ${tomlplusplus_SOURCE_DIR} " )
104+ message (STATUS "Found libuv: ${libuv_SOURCE_DIR} " )
105+
40106if (WIN32 )
41107 set (CMAKE_MSVC_RUNTIME_LIBRARY "MultiThreadedDLL" )
42108endif ()
@@ -86,6 +152,7 @@ add_library(clice-core STATIC "${CLICE_SOURCES}")
86152# set llvm include and lib path
87153add_library (llvm-libs INTERFACE IMPORTED )
88154target_include_directories (llvm-libs INTERFACE "${LLVM_INSTALL_PATH} /include" )
155+ message (STATUS "LLVM include path: ${LLVM_INSTALL_PATH} /include" )
89156if (WIN32 )
90157 target_compile_definitions (llvm-libs INTERFACE "CLANG_BUILD_STATIC" )
91158 target_link_libraries (llvm-libs INTERFACE version ntdll )
0 commit comments