@@ -65,15 +65,40 @@ if (DEFINED LLVM_DIR)
6565 set (CLANG_HINTS "${LLVM_DIR} /../clang" )
6666endif ()
6767
68- find_package (Clang ${LLVM_VERSION} REQUIRED CONFIG HINTS ${CLANG_HINTS} )
69-
70- get_property (clang_path TARGET clang PROPERTY LOCATION )
71- message ("Using clang " ${Clang_VERSION} " at: " ${clang_path} )
68+ function (check_clang_version validator_result_var CANDIDATE )
69+ execute_process (COMMAND ${CANDIDATE} --version
70+ RESULT_VARIABLE CANDIDATE_VERSION_RC
71+ OUTPUT_VARIABLE CANDIDATE_VERSION_OUT )
72+ if (CANDIDATE_VERSION_RC EQUAL 0)
73+ string (REGEX MATCH "clang version [0-9]+.[0-9]+" CANDIDATE_VERSION_STR ${CANDIDATE_VERSION_OUT} )
74+ endif ()
75+ if (NOT CANDIDATE_VERSION_STR)
76+ message (VERBOSE "Unable to determine version for Clang at ${CANDIDATE} " )
77+ set (${validator_result_var} FALSE PARENT_SCOPE )
78+ else ()
79+ string (SUBSTRING ${CANDIDATE_VERSION_STR} 14 -1 CANDIDATE_VERSION)
80+ message (VERBOSE "Found Clang ${CANDIDATE_VERSION} at ${CANDIDATE} " )
81+ if (${CANDIDATE_VERSION} VERSION_GREATER "${LLVM_VERSION_MAJOR} .${LLVM_VERSION_MINOR} " )
82+ message (VERBOSE "Cannot use Clang newer than used LLVM version" )
83+ set (${validator_result_var} FALSE PARENT_SCOPE )
84+ elseif (NOT ${CANDIDATE_VERSION} VERSION_EQUAL "${LLVM_VERSION_MAJOR} .${LLVM_VERSION_MINOR} " )
85+ # TODO: run optimization in tpde-encodegen to avoid this.
86+ message (WARNING "Different Clang (${CANDIDATE_VERSION} ) and LLVM "
87+ "(${LLVM_VERSION_MAJOR} .${LLVM_VERSION_MINOR} ) versions "
88+ "might cause broken tests." )
89+ endif ()
90+ endif ()
91+ endfunction ()
92+ find_program (CLANG NO_CACHE REQUIRED
93+ NAMES clang-${LLVM_VERSION_MAJOR} clang-20 clang-19 clang-18 clang
94+ HINTS ${LLVM_TOOLS_BINARY_DIR}
95+ VALIDATOR check_clang_version )
96+ message (STATUS "Found Clang: " ${CLANG} )
7297
7398if (TPDE_X64)
7499 add_custom_command (
75100 OUTPUT ${CMAKE_CURRENT_BINARY_DIR} /encode_template_x64.bc
76- COMMAND ${clang_path } -c -emit-llvm -ffreestanding -fcf-protection=none
101+ COMMAND ${CLANG } -c -emit-llvm -ffreestanding -fcf-protection=none
77102 -O3 -fomit-frame-pointer -fno-math-errno
78103 --target=x86_64-linux -march=x86-64-v4
79104 -o ${CMAKE_CURRENT_BINARY_DIR} /encode_template_x64.bc
@@ -111,7 +136,7 @@ endif ()
111136if (TPDE_A64)
112137 add_custom_command (
113138 OUTPUT ${CMAKE_CURRENT_BINARY_DIR} /encode_template_arm64.bc
114- COMMAND ${clang_path } -c -emit-llvm -ffreestanding -fcf-protection=none
139+ COMMAND ${CLANG } -c -emit-llvm -ffreestanding -fcf-protection=none
115140 -O3 -fomit-frame-pointer -fno-math-errno
116141 --target=aarch64 -march=armv8.1-a
117142 -o ${CMAKE_CURRENT_BINARY_DIR} /encode_template_arm64.bc
0 commit comments