authorgravatar for bratishkaerik@getgoogleoff.meEric Joldasov <bratishkaerik@getgoogleoff.me> 2022-12-22 19:12:10+06:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2022-12-27 13:53:46-05:00
log55c3efcb58cc153fc3109a61c6949e470b57b81e
tree37e08402a0f4b9cbb7bdc9fe8582e6611483839b
parentaea3460cf5a7f0bf03f09181bd6352ea5818d00e

cmake: check llvm-config in separate function


1 files changed, 49 insertions(+), 47 deletions(-)

cmake/Findllvm.cmake+49-47
......@@ -8,27 +8,9 @@
88# LLVM_LIBDIRS
99# LLVM_LINK_MODE
1010
11
12if(ZIG_USE_LLVM_CONFIG)
13 set(LLVM_CONFIG_ERROR_MESSAGES "")
14 while(1)
15 unset(LLVM_CONFIG_EXE CACHE)
16 find_program(LLVM_CONFIG_EXE
17 NAMES llvm-config-15 llvm-config-15.0 llvm-config150 llvm-config15 llvm-config NAMES_PER_DIR
18 PATHS
19 "/mingw64/bin"
20 "/c/msys64/mingw64/bin"
21 "c:/msys64/mingw64/bin"
22 "C:/Libraries/llvm-15.0.0/bin")
23
24 if ("${LLVM_CONFIG_EXE}" STREQUAL "LLVM_CONFIG_EXE-NOTFOUND")
25 if (NOT LLVM_CONFIG_ERROR_MESSAGES STREQUAL "")
26 list(JOIN LLVM_CONFIG_ERROR_MESSAGES "\n" LLVM_CONFIG_ERROR_MESSAGE)
27 message(FATAL_ERROR ${LLVM_CONFIG_ERROR_MESSAGE})
28 else()
29 message(FATAL_ERROR "unable to find llvm-config")
30 endif()
31 endif()
11function(check_llvm_config LLVM_CONFIG_EXE)
12 # Start with empty message for current llvm-config
13 set(LLVM_CONFIG_ERROR_MESSAGES "" PARENT_SCOPE)
3214
3315 # Check that this LLVM is the right version
3416 execute_process(
......@@ -36,14 +18,10 @@ if(ZIG_USE_LLVM_CONFIG)
3618 OUTPUT_VARIABLE LLVM_CONFIG_VERSION
3719 OUTPUT_STRIP_TRAILING_WHITESPACE)
3820
39 get_filename_component(LLVM_CONFIG_DIR "${LLVM_CONFIG_EXE}" DIRECTORY)
40 if("${LLVM_CONFIG_VERSION}" VERSION_LESS 15 OR "${LLVM_CONFIG_VERSION}" VERSION_EQUAL 16 OR "${LLVM_CONFIG_VERSION}" VERSION_GREATER 16)
41 # Save the error message, in case this is the last llvm-config we find
42 list(APPEND LLVM_CONFIG_ERROR_MESSAGES "expected LLVM 15.x but found ${LLVM_CONFIG_VERSION} using ${LLVM_CONFIG_EXE}")
43
44 # Ignore this directory and try the search again
45 list(APPEND CMAKE_IGNORE_PATH "${LLVM_CONFIG_DIR}")
46 continue()
21 if("${LLVM_CONFIG_VERSION}" VERSION_LESS 15 OR "${LLVM_CONFIG_VERSION}" VERSION_GREATER_EQUAL 16)
22 # Save the error message for current llvm-config we find
23 set(LLVM_CONFIG_ERROR_MESSAGES "Expected LLVM 15.x but found ${LLVM_CONFIG_VERSION}" PARENT_SCOPE)
24 return()
4725 endif()
4826
4927 # Check that this LLVM supports linking as a shared/static library, if requested
......@@ -60,17 +38,13 @@ if(ZIG_USE_LLVM_CONFIG)
6038 ERROR_VARIABLE LLVM_CONFIG_ERROR
6139 ERROR_STRIP_TRAILING_WHITESPACE)
6240
63 if (LLVM_CONFIG_ERROR)
64 # Save the error message, in case this is the last llvm-config we find
41 if (LLVM_CONFIG_ERROR)
6542 if (ZIG_SHARED_LLVM)
66 list(APPEND LLVM_CONFIG_ERROR_MESSAGES "LLVM 15.x found at ${LLVM_CONFIG_EXE} does not support linking as a shared library")
43 set(LLVM_CONFIG_ERROR_MESSAGES "This LLVM does not support linking as a shared library" PARENT_SCOPE)
6744 else()
68 list(APPEND LLVM_CONFIG_ERROR_MESSAGES "LLVM 15.x found at ${LLVM_CONFIG_EXE} does not support linking as a static library")
45 set(LLVM_CONFIG_ERROR_MESSAGES "This LLVM does not support linking as a static library" PARENT_SCOPE)
6946 endif()
70
71 # Ignore this directory and try the search again
72 list(APPEND CMAKE_IGNORE_PATH "${LLVM_CONFIG_DIR}")
73 continue()
47 return()
7448 endif()
7549 endif()
7650
......@@ -79,17 +53,15 @@ if(ZIG_USE_LLVM_CONFIG)
7953 OUTPUT_VARIABLE LLVM_TARGETS_BUILT_SPACES
8054 OUTPUT_STRIP_TRAILING_WHITESPACE)
8155 string(REPLACE " " ";" LLVM_TARGETS_BUILT "${LLVM_TARGETS_BUILT_SPACES}")
82 function(NEED_TARGET TARGET_NAME)
56
57 macro(NEED_TARGET TARGET_NAME)
8358 list (FIND LLVM_TARGETS_BUILT "${TARGET_NAME}" _index)
8459 if (${_index} EQUAL -1)
85 # Save the error message, in case this is the last llvm-config we find
86 list(APPEND LLVM_CONFIG_ERROR_MESSAGES "LLVM (according to ${LLVM_CONFIG_EXE}) is missing target ${TARGET_NAME}. Zig requires LLVM to be built with all default targets enabled.")
87
88 # Ignore this directory and try the search again
89 list(APPEND CMAKE_IGNORE_PATH "${LLVM_CONFIG_DIR}")
90 continue()
60 set(LLVM_CONFIG_ERROR_MESSAGES "This LLVM is missing target ${TARGET_NAME}. Zig requires LLVM to be built with all default targets enabled." PARENT_SCOPE)
61 return()
9162 endif()
92 endfunction(NEED_TARGET)
63 endmacro()
64
9365 NEED_TARGET("AArch64")
9466 NEED_TARGET("AMDGPU")
9567 NEED_TARGET("ARM")
......@@ -108,9 +80,39 @@ if(ZIG_USE_LLVM_CONFIG)
10880 NEED_TARGET("WebAssembly")
10981 NEED_TARGET("X86")
11082 NEED_TARGET("XCore")
83endfunction()
84
85if(ZIG_USE_LLVM_CONFIG)
86 while(1)
87 unset(LLVM_CONFIG_EXE CACHE)
88 find_program(LLVM_CONFIG_EXE
89 NAMES llvm-config-15 llvm-config-15.0 llvm-config150 llvm-config15 llvm-config NAMES_PER_DIR
90 PATHS
91 "/mingw64/bin"
92 "/c/msys64/mingw64/bin"
93 "c:/msys64/mingw64/bin"
94 "C:/Libraries/llvm-15.0.0/bin")
95
96 if("${LLVM_CONFIG_EXE}" STREQUAL "LLVM_CONFIG_EXE-NOTFOUND")
97 message(FATAL_ERROR "Suitable llvm-config is not found.")
98 endif()
99
100 message("Trying ${LLVM_CONFIG_EXE}...")
111101
112 # Got it!
113 break()
102 check_llvm_config(${LLVM_CONFIG_EXE})
103 if(LLVM_CONFIG_ERROR_MESSAGES STREQUAL "")
104 message("This llvm-config is suitable for us, continuing...")
105 break()
106 else()
107
108 message("This llvm-config is not suitable for us:")
109 list(JOIN LLVM_CONFIG_ERROR_MESSAGES "\n" LLVM_CONFIG_ERROR_MESSAGE)
110 message(${LLVM_CONFIG_ERROR_MESSAGE})
111 message("Trying another llvm-config...")
112
113 get_filename_component(LLVM_CONFIG_DIR "${LLVM_CONFIG_EXE}" DIRECTORY)
114 list(APPEND CMAKE_IGNORE_PATH "${LLVM_CONFIG_DIR}")
115 endif()
114116 endwhile()
115117
116118 if(ZIG_SHARED_LLVM OR ZIG_STATIC_LLVM)