Fix try_compile failure

For unknown reasons, CMake does not propagate the compiler settings to the try_compile process but instead forwards the toolchain directly. This is weird.
This commit is contained in:
Xaymar
2025-04-18 15:31:59 +02:00
parent 7ce030a181
commit c88aa45a93
2 changed files with 442 additions and 410 deletions
+10
View File
@@ -20,6 +20,14 @@ cmake_minimum_required(VERSION 3.30...4.0)
include_guard(GLOBAL)
list(APPEND CMAKE_MESSAGE_INDENT "[Ninja] ")
# Necessary for propagation into the try_compile CMake subprocesses. It's unclear why this is not the default behavior.
foreach(_T IN ITEMS CMAKE_MAKE_PROGRAM)
if(DEFINED ENV{${_T}})
set(${_T} "$ENV{${_T}}")
endif()
endforeach()
if(NOT IS_EXECUTABLE CMAKE_MAKE_PROGRAM)
# Try and figure out what processor we need to get binaries for.
if(CMAKE_HOST_SYSTEM_NAME MATCHES "[Ww]indows")
string(TOLOWER "$ENV{PROCESSOR_ARCHITECTURE}" _ARCH)
@@ -157,4 +165,6 @@ elseif(IS_EXECUTABLE "${NINJA_BIN}")
endif()
set(CMAKE_MAKE_PROGRAM "${NINJA_BIN}" CACHE STRING "" FORCE)
endif()
list(POP_BACK CMAKE_MESSAGE_INDENT)
+24 -2
View File
@@ -20,10 +20,26 @@ cmake_minimum_required(VERSION 3.30...4.0)
include_guard(GLOBAL)
list(APPEND CMAKE_MESSAGE_INDENT "[LLVM] ")
if(CMAKE_C_COMPILER OR CMAKE_CXX_COMPILER)
return()
# Necessary for propagation into the try_compile CMake subprocesses. It's unclear why this is not the default behavior.
foreach(_T IN ITEMS CMAKE_AR CMAKE_RANLIB CMAKE_LINKER CMAKE_C_COMPILER CMAKE_C_COMPILER_AR CMAKE_C_COMPILER_RANLIB CMAKE_C_COMPILER_LINKER CMAKE_C_COMPILER_LINKER_ID CMAKE_C_COMPILER_LINKER_VERSION CMAKE_CXX_COMPILER CMAKE_CXX_COMPILER_AR CMAKE_CXX_COMPILER_RANLIB CMAKE_CXX_COMPILER_LINKER CMAKE_CXX_COMPILER_LINKER_ID CMAKE_CXX_COMPILER_LINKER_VERSION CMAKE_ASM_COMPILER CMAKE_ASM_COMPILER_AR CMAKE_ASM_COMPILER_RANLIB CMAKE_ASM_COMPILER_LINKER CMAKE_ASM_COMPILER_LINKER_ID CMAKE_ASM_COMPILER_LINKER_VERSION CMAKE_RC_COMPILER CMAKE_RC_COMPILER_AR CMAKE_RC_COMPILER_RANLIB CMAKE_RC_COMPILER_LINKER CMAKE_RC_COMPILER_LINKER_ID CMAKE_RC_COMPILER_LINKER_VERSION)
if(DEFINED ENV{${_T}})
set(${_T} "$ENV{${_T}}")
endif()
endforeach()
if(
(NOT IS_EXECUTABLE CMAKE_C_COMPILER) OR
(NOT IS_EXECUTABLE CMAKE_C_COMPILER_AR) OR
(NOT IS_EXECUTABLE CMAKE_C_COMPILER_RANLIB) OR
(NOT IS_EXECUTABLE CMAKE_C_COMPILER_LINKER) OR
(NOT IS_EXECUTABLE CMAKE_CXX_COMPILER) OR
(NOT IS_EXECUTABLE CMAKE_CXX_COMPILER_AR) OR
(NOT IS_EXECUTABLE CMAKE_CXX_COMPILER_RANLIB) OR
(NOT IS_EXECUTABLE CMAKE_CXX_COMPILER_LINKER) OR
(NOT IS_EXECUTABLE CMAKE_LINKER) OR
(NOT IS_EXECUTABLE CMAKE_RANLIB) OR
(NOT IS_EXECUTABLE CMAKE_AR)
)
# Try and figure out what processor we need to get binaries for.
set(LLVM_VERSION "19.1.7")
if(CMAKE_HOST_SYSTEM_NAME MATCHES "[Ww]indows")
@@ -328,8 +344,14 @@ if(LLVM_FOUND AND (LLVM_CLANG_VERSION VERSION_GREATER_EQUAL LLVM_VERSION))
# set(CMAKE_STATIC_LINKER_FLAGS_INIT "-fuse-ld=\"${LLVM_LD}\"")
# set(CMAKE_MODULE_LINKER_FLAGS_INIT "-fuse-ld=\"${LLVM_LD}\"")
# set(CMAKE_SHARED_LINKER_FLAGS_INIT "-fuse-ld=\"${LLVM_LD}\"")
foreach(_T IN ITEMS CMAKE_AR CMAKE_RANLIB CMAKE_LINKER CMAKE_C_COMPILER CMAKE_C_COMPILER_AR CMAKE_C_COMPILER_RANLIB CMAKE_C_COMPILER_LINKER CMAKE_C_COMPILER_LINKER_ID CMAKE_C_COMPILER_LINKER_VERSION CMAKE_CXX_COMPILER CMAKE_CXX_COMPILER_AR CMAKE_CXX_COMPILER_RANLIB CMAKE_CXX_COMPILER_LINKER CMAKE_CXX_COMPILER_LINKER_ID CMAKE_CXX_COMPILER_LINKER_VERSION CMAKE_ASM_COMPILER CMAKE_ASM_COMPILER_AR CMAKE_ASM_COMPILER_RANLIB CMAKE_ASM_COMPILER_LINKER CMAKE_ASM_COMPILER_LINKER_ID CMAKE_ASM_COMPILER_LINKER_VERSION CMAKE_RC_COMPILER CMAKE_RC_COMPILER_AR CMAKE_RC_COMPILER_RANLIB CMAKE_RC_COMPILER_LINKER CMAKE_RC_COMPILER_LINKER_ID CMAKE_RC_COMPILER_LINKER_VERSION)
set(ENV{${_T}} "${${_T}}")
endforeach()
else()
message(FATAL_ERROR "Failed to find or provide a compatible LLVM installation.")
endif()
endif()
list(POP_BACK CMAKE_MESSAGE_INDENT)