Skip to content

Commit 8c6b792

Browse files
committed
[ci] cmake detect system llvm
- Detect llvm-libs at best effort Signed-off-by: 蔡略 <cailue@apache.org>
1 parent 260c268 commit 8c6b792

File tree

2 files changed

+75
-4
lines changed

2 files changed

+75
-4
lines changed

.gitignore

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,13 +31,17 @@
3131
*.out
3232
*.app
3333

34+
# LSP & IDE
35+
compile_commands.json
36+
.vscode/
37+
.idea/
38+
3439
temp/
3540
*build*/
3641
.cache/
3742
.clice/
3843
.llvm*/
3944
.xmake/
40-
.vscode/
4145
__pycache__/
4246
.pytest_cache/
4347
tests/unit/Local/

CMakeLists.txt

Lines changed: 70 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,17 +7,80 @@ set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
77
set(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}")
1268
endif()
69+
1370
get_filename_component(LLVM_INSTALL_PATH "${LLVM_INSTALL_PATH}" ABSOLUTE)
1471

1572
if(NOT EXISTS "${LLVM_INSTALL_PATH}")
1673
message(FATAL_ERROR "Error: The specified LLVM_INSTALL_PATH does not exist: ${LLVM_INSTALL_PATH}")
1774
endif()
1875
message(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
2386
include(FetchContent)
@@ -37,6 +100,9 @@ FetchContent_Declare(
37100
)
38101
FetchContent_MakeAvailable(tomlplusplus libuv)
39102

103+
message(STATUS "Found tomlplusplus: ${tomlplusplus_SOURCE_DIR}")
104+
message(STATUS "Found libuv: ${libuv_SOURCE_DIR}")
105+
40106
if(WIN32)
41107
set(CMAKE_MSVC_RUNTIME_LIBRARY "MultiThreadedDLL")
42108
endif()
@@ -86,6 +152,7 @@ add_library(clice-core STATIC "${CLICE_SOURCES}")
86152
# set llvm include and lib path
87153
add_library(llvm-libs INTERFACE IMPORTED)
88154
target_include_directories(llvm-libs INTERFACE "${LLVM_INSTALL_PATH}/include")
155+
message(STATUS "LLVM include path: ${LLVM_INSTALL_PATH}/include")
89156
if(WIN32)
90157
target_compile_definitions(llvm-libs INTERFACE "CLANG_BUILD_STATIC")
91158
target_link_libraries(llvm-libs INTERFACE version ntdll)

0 commit comments

Comments
 (0)