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:
+124
-114
@@ -1,15 +1,15 @@
|
|||||||
# Copyright (C) 2024-2025 Michael Fabian 'Xaymar' Dirks
|
# Copyright (C) 2024-2025 Michael Fabian 'Xaymar' Dirks
|
||||||
#
|
#
|
||||||
# This program is free software: you can redistribute it and/or modify
|
# This program is free software: you can redistribute it and/or modify
|
||||||
# it under the terms of the GNU General Public License as published by
|
# it under the terms of the GNU General Public License as published by
|
||||||
# the Free Software Foundation, either version 3 of the License, or
|
# the Free Software Foundation, either version 3 of the License, or
|
||||||
# (at your option) any later version.
|
# (at your option) any later version.
|
||||||
#
|
#
|
||||||
# This program is distributed in the hope that it will be useful,
|
# This program is distributed in the hope that it will be useful,
|
||||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
# GNU General Public License for more details.
|
# GNU General Public License for more details.
|
||||||
#
|
#
|
||||||
# You should have received a copy of the GNU General Public License
|
# You should have received a copy of the GNU General Public License
|
||||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
@@ -20,119 +20,50 @@ cmake_minimum_required(VERSION 3.30...4.0)
|
|||||||
include_guard(GLOBAL)
|
include_guard(GLOBAL)
|
||||||
list(APPEND CMAKE_MESSAGE_INDENT "[Ninja] ")
|
list(APPEND CMAKE_MESSAGE_INDENT "[Ninja] ")
|
||||||
|
|
||||||
# Try and figure out what processor we need to get binaries for.
|
# Necessary for propagation into the try_compile CMake subprocesses. It's unclear why this is not the default behavior.
|
||||||
if(CMAKE_HOST_SYSTEM_NAME MATCHES "[Ww]indows")
|
foreach(_T IN ITEMS CMAKE_MAKE_PROGRAM)
|
||||||
string(TOLOWER "$ENV{PROCESSOR_ARCHITECTURE}" _ARCH)
|
if(DEFINED ENV{${_T}})
|
||||||
set(_OS "windows")
|
set(${_T} "$ENV{${_T}}")
|
||||||
elseif(CMAKE_HOST_SYSTEM_NAME MATCHES "[Dd]arwin")
|
endif()
|
||||||
set(_ARCH "multiarch")
|
endforeach()
|
||||||
set(_OS "macos")
|
|
||||||
elseif(CMAKE_HOST_SYSTEM_NAME MATCHES "[Oo]pen[Bb][Ss][Dd]")
|
if(NOT IS_EXECUTABLE CMAKE_MAKE_PROGRAM)
|
||||||
set(_OS "openbsd")
|
# Try and figure out what processor we need to get binaries for.
|
||||||
execute_process(
|
if(CMAKE_HOST_SYSTEM_NAME MATCHES "[Ww]indows")
|
||||||
COMMAND "arch"
|
string(TOLOWER "$ENV{PROCESSOR_ARCHITECTURE}" _ARCH)
|
||||||
OUTPUT_VARIABLE _ARCH
|
set(_OS "windows")
|
||||||
OUTPUT_STRIP_TRAILING_WHITESPACE
|
elseif(CMAKE_HOST_SYSTEM_NAME MATCHES "[Dd]arwin")
|
||||||
)
|
set(_ARCH "multiarch")
|
||||||
else()
|
set(_OS "macos")
|
||||||
set(_OS "linux")
|
elseif(CMAKE_HOST_SYSTEM_NAME MATCHES "[Oo]pen[Bb][Ss][Dd]")
|
||||||
execute_process(
|
set(_OS "openbsd")
|
||||||
COMMAND "uname -p"
|
|
||||||
OUTPUT_VARIABLE _ARCH
|
|
||||||
OUTPUT_STRIP_TRAILING_WHITESPACE
|
|
||||||
RESULT_VARIABLE _RES
|
|
||||||
)
|
|
||||||
if(_RES EQUAL 0)
|
|
||||||
execute_process(
|
execute_process(
|
||||||
COMMAND "uname -m"
|
COMMAND "arch"
|
||||||
|
OUTPUT_VARIABLE _ARCH
|
||||||
|
OUTPUT_STRIP_TRAILING_WHITESPACE
|
||||||
|
)
|
||||||
|
else()
|
||||||
|
set(_OS "linux")
|
||||||
|
execute_process(
|
||||||
|
COMMAND "uname -p"
|
||||||
OUTPUT_VARIABLE _ARCH
|
OUTPUT_VARIABLE _ARCH
|
||||||
OUTPUT_STRIP_TRAILING_WHITESPACE
|
OUTPUT_STRIP_TRAILING_WHITESPACE
|
||||||
RESULT_VARIABLE _RES
|
RESULT_VARIABLE _RES
|
||||||
)
|
)
|
||||||
endif()
|
if(_RES EQUAL 0)
|
||||||
endif()
|
execute_process(
|
||||||
|
COMMAND "uname -m"
|
||||||
set(NINJA_VERSION "1.12.1")
|
OUTPUT_VARIABLE _ARCH
|
||||||
set(NINJA_DIR "${CMAKE_SOURCE_DIR}/extra/ninja-${NINJA_VERSION}-${_OS}-${_ARCH}")
|
OUTPUT_STRIP_TRAILING_WHITESPACE
|
||||||
|
RESULT_VARIABLE _RES
|
||||||
# Check if Ninja is present and if it is up to date.
|
)
|
||||||
find_program(NINJA_BIN
|
|
||||||
NAMES
|
|
||||||
ninja
|
|
||||||
HINTS
|
|
||||||
"${NINJA_DIR}/"
|
|
||||||
NO_CACHE NO_DEFAULT_PATH NO_PACKAGE_ROOT_PATH NO_CMAKE_PATH NO_CMAKE_ENVIRONMENT_PATH NO_SYSTEM_ENVIRONMENT_PATH NO_CMAKE_SYSTEM_PATH NO_CMAKE_INSTALL_PREFIX NO_CMAKE_FIND_ROOT_PATH
|
|
||||||
)
|
|
||||||
if(IS_EXECUTABLE "${NINJA_BIN}")
|
|
||||||
execute_process(
|
|
||||||
COMMAND ${NINJA_BIN} --version
|
|
||||||
OUTPUT_VARIABLE NINJA_VERSION_INSTALLED
|
|
||||||
OUTPUT_STRIP_TRAILING_WHITESPACE
|
|
||||||
)
|
|
||||||
string(REGEX REPLACE "[\r\n]+" "" NINJA_VERSION_INSTALLED "${NINJA_VERSION_INSTALLED}")
|
|
||||||
if((EXISTS NINJA_BIN) AND (NINJA_VERSION_INSTALLED VERSION_LESS NINJA_VERSION))
|
|
||||||
message(STATUS "Found outdated v${NINJA_VERSION_INSTALLED}.")
|
|
||||||
unset(NINJA_BIN)
|
|
||||||
else()
|
|
||||||
#message(STATUS "Found v${NINJA_VERSION_INSTALLED}.")
|
|
||||||
endif()
|
|
||||||
endif()
|
|
||||||
|
|
||||||
if((NOT IS_EXECUTABLE "${NINJA_BIN}") OR (NINJA_VERSION_INSTALLED VERSION_LESS NINJA_VERSION))
|
|
||||||
# It isn't up to date or doesn't exist, so try to download the latest version.
|
|
||||||
|
|
||||||
# First we'll have to figure out what we need to download, and from where.
|
|
||||||
if(_OS MATCHES "windows")
|
|
||||||
# Windows and Windows-like
|
|
||||||
SET (_FILE_EXT "zip")
|
|
||||||
if(_ARCH MATCHES "([xX]86)|([aA][mM][dD]64)")
|
|
||||||
# It's x86, x86-64 or amd64
|
|
||||||
SET (_FILE_NAME "ninja-win")
|
|
||||||
else()
|
|
||||||
# Assume ARM or ARM64
|
|
||||||
SET (_FILE_NAME "ninja-winarm64")
|
|
||||||
endif()
|
|
||||||
elseif(_OS MATCHES "macos")
|
|
||||||
# MacOS and MacOS-like
|
|
||||||
SET (_FILE_EXT "zip")
|
|
||||||
SET (_FILE_NAME "ninja-mac")
|
|
||||||
else()
|
|
||||||
# Assume this to be generic Unix-like.
|
|
||||||
SET (_FILE_EXT "tar.xz")
|
|
||||||
if(_ARCH MATCHES "([xX]86)|([aA][mM][dD]64)")
|
|
||||||
# It's x86, x86-64 or amd64
|
|
||||||
SET (_FILE_NAME "ninja-linux")
|
|
||||||
else()
|
|
||||||
# Assume ARM or ARM64
|
|
||||||
SET (_FILE_NAME "ninja-linux-aarch64")
|
|
||||||
endif()
|
endif()
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
# Download the ideal version.
|
set(NINJA_VERSION "1.12.1")
|
||||||
if(NOT EXISTS "${NINJA_DIR}.${_FILE_EXT}")
|
set(NINJA_DIR "${CMAKE_SOURCE_DIR}/extra/ninja-${NINJA_VERSION}-${_OS}-${_ARCH}")
|
||||||
message(STATUS "Downloading Ninja v${NINJA_VERSION}...")
|
|
||||||
file(DOWNLOAD
|
|
||||||
"https://github.com/ninja-build/ninja/releases/download/v${NINJA_VERSION}/${_FILE_NAME}.${_FILE_EXT}"
|
|
||||||
"${NINJA_DIR}.${_FILE_EXT}"
|
|
||||||
SHOW_PROGRESS
|
|
||||||
)
|
|
||||||
else()
|
|
||||||
message(STATUS "Skipping download as file already exists.")
|
|
||||||
endif()
|
|
||||||
|
|
||||||
# Extract it.
|
|
||||||
message(STATUS "Extracting...")
|
|
||||||
file(ARCHIVE_EXTRACT
|
|
||||||
INPUT "${NINJA_DIR}.${_FILE_EXT}"
|
|
||||||
DESTINATION "${NINJA_DIR}/"
|
|
||||||
)
|
|
||||||
|
|
||||||
# Delete the archive itself.
|
|
||||||
message(STATUS "Cleaning...")
|
|
||||||
file(REMOVE "${NINJA_DIR}.${_FILE_EXT}")
|
|
||||||
|
|
||||||
# Check if Ninja is present and if it is up to date.
|
# Check if Ninja is present and if it is up to date.
|
||||||
message(STATUS "Testing...")
|
|
||||||
find_program(NINJA_BIN
|
find_program(NINJA_BIN
|
||||||
NAMES
|
NAMES
|
||||||
ninja
|
ninja
|
||||||
@@ -147,14 +78,93 @@ if((NOT IS_EXECUTABLE "${NINJA_BIN}") OR (NINJA_VERSION_INSTALLED VERSION_LESS N
|
|||||||
OUTPUT_STRIP_TRAILING_WHITESPACE
|
OUTPUT_STRIP_TRAILING_WHITESPACE
|
||||||
)
|
)
|
||||||
string(REGEX REPLACE "[\r\n]+" "" NINJA_VERSION_INSTALLED "${NINJA_VERSION_INSTALLED}")
|
string(REGEX REPLACE "[\r\n]+" "" NINJA_VERSION_INSTALLED "${NINJA_VERSION_INSTALLED}")
|
||||||
|
if((EXISTS NINJA_BIN) AND (NINJA_VERSION_INSTALLED VERSION_LESS NINJA_VERSION))
|
||||||
|
message(STATUS "Found outdated v${NINJA_VERSION_INSTALLED}.")
|
||||||
|
unset(NINJA_BIN)
|
||||||
|
else()
|
||||||
|
#message(STATUS "Found v${NINJA_VERSION_INSTALLED}.")
|
||||||
|
endif()
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
if((NOT IS_EXECUTABLE "${NINJA_BIN}") OR (NINJA_VERSION_INSTALLED VERSION_LESS NINJA_VERSION))
|
||||||
|
# It isn't up to date or doesn't exist, so try to download the latest version.
|
||||||
|
|
||||||
|
# First we'll have to figure out what we need to download, and from where.
|
||||||
|
if(_OS MATCHES "windows")
|
||||||
|
# Windows and Windows-like
|
||||||
|
SET (_FILE_EXT "zip")
|
||||||
|
if(_ARCH MATCHES "([xX]86)|([aA][mM][dD]64)")
|
||||||
|
# It's x86, x86-64 or amd64
|
||||||
|
SET (_FILE_NAME "ninja-win")
|
||||||
|
else()
|
||||||
|
# Assume ARM or ARM64
|
||||||
|
SET (_FILE_NAME "ninja-winarm64")
|
||||||
|
endif()
|
||||||
|
elseif(_OS MATCHES "macos")
|
||||||
|
# MacOS and MacOS-like
|
||||||
|
SET (_FILE_EXT "zip")
|
||||||
|
SET (_FILE_NAME "ninja-mac")
|
||||||
|
else()
|
||||||
|
# Assume this to be generic Unix-like.
|
||||||
|
SET (_FILE_EXT "tar.xz")
|
||||||
|
if(_ARCH MATCHES "([xX]86)|([aA][mM][dD]64)")
|
||||||
|
# It's x86, x86-64 or amd64
|
||||||
|
SET (_FILE_NAME "ninja-linux")
|
||||||
|
else()
|
||||||
|
# Assume ARM or ARM64
|
||||||
|
SET (_FILE_NAME "ninja-linux-aarch64")
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
|
||||||
|
# Download the ideal version.
|
||||||
|
if(NOT EXISTS "${NINJA_DIR}.${_FILE_EXT}")
|
||||||
|
message(STATUS "Downloading Ninja v${NINJA_VERSION}...")
|
||||||
|
file(DOWNLOAD
|
||||||
|
"https://github.com/ninja-build/ninja/releases/download/v${NINJA_VERSION}/${_FILE_NAME}.${_FILE_EXT}"
|
||||||
|
"${NINJA_DIR}.${_FILE_EXT}"
|
||||||
|
SHOW_PROGRESS
|
||||||
|
)
|
||||||
|
else()
|
||||||
|
message(STATUS "Skipping download as file already exists.")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
# Extract it.
|
||||||
|
message(STATUS "Extracting...")
|
||||||
|
file(ARCHIVE_EXTRACT
|
||||||
|
INPUT "${NINJA_DIR}.${_FILE_EXT}"
|
||||||
|
DESTINATION "${NINJA_DIR}/"
|
||||||
|
)
|
||||||
|
|
||||||
|
# Delete the archive itself.
|
||||||
|
message(STATUS "Cleaning...")
|
||||||
|
file(REMOVE "${NINJA_DIR}.${_FILE_EXT}")
|
||||||
|
|
||||||
|
# Check if Ninja is present and if it is up to date.
|
||||||
|
message(STATUS "Testing...")
|
||||||
|
find_program(NINJA_BIN
|
||||||
|
NAMES
|
||||||
|
ninja
|
||||||
|
HINTS
|
||||||
|
"${NINJA_DIR}/"
|
||||||
|
NO_CACHE NO_DEFAULT_PATH NO_PACKAGE_ROOT_PATH NO_CMAKE_PATH NO_CMAKE_ENVIRONMENT_PATH NO_SYSTEM_ENVIRONMENT_PATH NO_CMAKE_SYSTEM_PATH NO_CMAKE_INSTALL_PREFIX NO_CMAKE_FIND_ROOT_PATH
|
||||||
|
)
|
||||||
|
if(IS_EXECUTABLE "${NINJA_BIN}")
|
||||||
|
execute_process(
|
||||||
|
COMMAND ${NINJA_BIN} --version
|
||||||
|
OUTPUT_VARIABLE NINJA_VERSION_INSTALLED
|
||||||
|
OUTPUT_STRIP_TRAILING_WHITESPACE
|
||||||
|
)
|
||||||
|
string(REGEX REPLACE "[\r\n]+" "" NINJA_VERSION_INSTALLED "${NINJA_VERSION_INSTALLED}")
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if((NOT IS_EXECUTABLE "${NINJA_BIN}") OR (NINJA_VERSION_INSTALLED VERSION_LESS NINJA_VERSION))
|
||||||
|
message(FATAL_ERROR "Failed to install newer version of Ninja.")
|
||||||
|
elseif(IS_EXECUTABLE "${NINJA_BIN}")
|
||||||
|
message(STATUS "Found v${NINJA_VERSION_INSTALLED}.")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
set(CMAKE_MAKE_PROGRAM "${NINJA_BIN}" CACHE STRING "" FORCE)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if((NOT IS_EXECUTABLE "${NINJA_BIN}") OR (NINJA_VERSION_INSTALLED VERSION_LESS NINJA_VERSION))
|
list(POP_BACK CMAKE_MESSAGE_INDENT)
|
||||||
message(FATAL_ERROR "Failed to install newer version of Ninja.")
|
|
||||||
elseif(IS_EXECUTABLE "${NINJA_BIN}")
|
|
||||||
message(STATUS "Found v${NINJA_VERSION_INSTALLED}.")
|
|
||||||
endif()
|
|
||||||
|
|
||||||
set(CMAKE_MAKE_PROGRAM "${NINJA_BIN}" CACHE STRING "" FORCE)
|
|
||||||
list(POP_BACK CMAKE_MESSAGE_INDENT)
|
|
||||||
|
|||||||
+318
-296
@@ -1,15 +1,15 @@
|
|||||||
# Copyright (C) 2019-2025 Michael Fabian 'Xaymar' Dirks
|
# Copyright (C) 2019-2025 Michael Fabian 'Xaymar' Dirks
|
||||||
#
|
#
|
||||||
# This program is free software: you can redistribute it and/or modify
|
# This program is free software: you can redistribute it and/or modify
|
||||||
# it under the terms of the GNU General Public License as published by
|
# it under the terms of the GNU General Public License as published by
|
||||||
# the Free Software Foundation, either version 3 of the License, or
|
# the Free Software Foundation, either version 3 of the License, or
|
||||||
# (at your option) any later version.
|
# (at your option) any later version.
|
||||||
#
|
#
|
||||||
# This program is distributed in the hope that it will be useful,
|
# This program is distributed in the hope that it will be useful,
|
||||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
# GNU General Public License for more details.
|
# GNU General Public License for more details.
|
||||||
#
|
#
|
||||||
# You should have received a copy of the GNU General Public License
|
# You should have received a copy of the GNU General Public License
|
||||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
@@ -20,316 +20,338 @@ cmake_minimum_required(VERSION 3.30...4.0)
|
|||||||
include_guard(GLOBAL)
|
include_guard(GLOBAL)
|
||||||
list(APPEND CMAKE_MESSAGE_INDENT "[LLVM] ")
|
list(APPEND CMAKE_MESSAGE_INDENT "[LLVM] ")
|
||||||
|
|
||||||
if(CMAKE_C_COMPILER OR CMAKE_CXX_COMPILER)
|
# Necessary for propagation into the try_compile CMake subprocesses. It's unclear why this is not the default behavior.
|
||||||
return()
|
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)
|
||||||
endif()
|
if(DEFINED ENV{${_T}})
|
||||||
|
set(${_T} "$ENV{${_T}}")
|
||||||
|
endif()
|
||||||
|
endforeach()
|
||||||
|
|
||||||
# Try and figure out what processor we need to get binaries for.
|
if(
|
||||||
set(LLVM_VERSION "19.1.7")
|
(NOT IS_EXECUTABLE CMAKE_C_COMPILER) OR
|
||||||
if(CMAKE_HOST_SYSTEM_NAME MATCHES "[Ww]indows")
|
(NOT IS_EXECUTABLE CMAKE_C_COMPILER_AR) OR
|
||||||
set(_OS "windows")
|
(NOT IS_EXECUTABLE CMAKE_C_COMPILER_RANLIB) OR
|
||||||
string(TOLOWER "$ENV{PROCESSOR_ARCHITECTURE}" _ARCH)
|
(NOT IS_EXECUTABLE CMAKE_C_COMPILER_LINKER) OR
|
||||||
if(_ARCH MATCHES "(amd64)|(AMD64)")
|
(NOT IS_EXECUTABLE CMAKE_CXX_COMPILER) OR
|
||||||
set(_FILE_NAME "LLVM-${LLVM_VERSION}-win64")
|
(NOT IS_EXECUTABLE CMAKE_CXX_COMPILER_AR) OR
|
||||||
elseif(_ARCH MATCHES "(x86)|(X86)")
|
(NOT IS_EXECUTABLE CMAKE_CXX_COMPILER_RANLIB) OR
|
||||||
set(_FILE_NAME "LLVM-${LLVM_VERSION}-win32")
|
(NOT IS_EXECUTABLE CMAKE_CXX_COMPILER_LINKER) OR
|
||||||
else()
|
(NOT IS_EXECUTABLE CMAKE_LINKER) OR
|
||||||
set(_FILE_NAME "LLVM-${LLVM_VERSION}-woa64")
|
(NOT IS_EXECUTABLE CMAKE_RANLIB) OR
|
||||||
endif()
|
(NOT IS_EXECUTABLE CMAKE_AR)
|
||||||
set(_FILE_EXT "exe")
|
)
|
||||||
|
# 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")
|
||||||
|
set(_OS "windows")
|
||||||
|
string(TOLOWER "$ENV{PROCESSOR_ARCHITECTURE}" _ARCH)
|
||||||
|
if(_ARCH MATCHES "(amd64)|(AMD64)")
|
||||||
|
set(_FILE_NAME "LLVM-${LLVM_VERSION}-win64")
|
||||||
|
elseif(_ARCH MATCHES "(x86)|(X86)")
|
||||||
|
set(_FILE_NAME "LLVM-${LLVM_VERSION}-win32")
|
||||||
|
else()
|
||||||
|
set(_FILE_NAME "LLVM-${LLVM_VERSION}-woa64")
|
||||||
|
endif()
|
||||||
|
set(_FILE_EXT "exe")
|
||||||
|
|
||||||
#Computer\HKEY_CURRENT_USER\SOFTWARE\7-Zip\Path64
|
#Computer\HKEY_CURRENT_USER\SOFTWARE\7-Zip\Path64
|
||||||
cmake_host_system_information(
|
cmake_host_system_information(
|
||||||
RESULT 7ZIP_DIR
|
RESULT 7ZIP_DIR
|
||||||
QUERY WINDOWS_REGISTRY "HKCU/SOFTWARE/7-Zip" VALUE "Path64"
|
QUERY WINDOWS_REGISTRY "HKCU/SOFTWARE/7-Zip" VALUE "Path64"
|
||||||
VIEW HOST
|
VIEW HOST
|
||||||
)
|
)
|
||||||
find_program(7ZIP_BIN
|
find_program(7ZIP_BIN
|
||||||
NAMES
|
NAMES
|
||||||
7z
|
7z
|
||||||
7za
|
7za
|
||||||
HINTS
|
HINTS
|
||||||
"${7ZIP_DIR}"
|
"${7ZIP_DIR}"
|
||||||
"C:/Program Files/7-Zip"
|
"C:/Program Files/7-Zip"
|
||||||
"C:/Program Files (x86)/7-Zip"
|
"C:/Program Files (x86)/7-Zip"
|
||||||
)
|
)
|
||||||
elseif(CMAKE_HOST_SYSTEM_NAME MATCHES "[Dd]arwin")
|
elseif(CMAKE_HOST_SYSTEM_NAME MATCHES "[Dd]arwin")
|
||||||
set(_OS "macos")
|
set(_OS "macos")
|
||||||
execute_process(
|
|
||||||
COMMAND "uname -m"
|
|
||||||
OUTPUT_VARIABLE _ARCH
|
|
||||||
OUTPUT_STRIP_TRAILING_WHITESPACE
|
|
||||||
RESULT_VARIABLE _RES
|
|
||||||
)
|
|
||||||
if(_ARCH MATCHES "(x86)|(X86)|(amd64)|(AMD64)")
|
|
||||||
set(_FILE_NAME "LLVM-${LLVM_VERSION}-MacOS-X64")
|
|
||||||
else()
|
|
||||||
set(_FILE_NAME "LLVM-${LLVM_VERSION}-MacOS-ARM64")
|
|
||||||
endif()
|
|
||||||
set(_FILE_EXT "tar.xz")
|
|
||||||
elseif(CMAKE_HOST_SYSTEM_NAME MATCHES "[Oo]pen[Bb][Ss][Dd]")
|
|
||||||
set(_OS "openbsd")
|
|
||||||
execute_process(
|
|
||||||
COMMAND "arch"
|
|
||||||
OUTPUT_VARIABLE _ARCH
|
|
||||||
OUTPUT_STRIP_TRAILING_WHITESPACE
|
|
||||||
)
|
|
||||||
set(_FILE_EXT "tar.xz")
|
|
||||||
if(_ARCH MATCHES "(x86)|(X86)|(amd64)|(AMD64)")
|
|
||||||
set(_FILE_NAME "LLVM-${LLVM_VERSION}-Linux-X64")
|
|
||||||
else()
|
|
||||||
set(_FILE_NAME "LLVM-${LLVM_VERSION}-Linux-ARM64")
|
|
||||||
endif()
|
|
||||||
else()
|
|
||||||
set(_OS "linux")
|
|
||||||
execute_process(
|
|
||||||
COMMAND "uname -p"
|
|
||||||
OUTPUT_VARIABLE _ARCH
|
|
||||||
OUTPUT_STRIP_TRAILING_WHITESPACE
|
|
||||||
RESULT_VARIABLE _RES
|
|
||||||
)
|
|
||||||
if(_RES EQUAL 0)
|
|
||||||
execute_process(
|
execute_process(
|
||||||
COMMAND "uname -m"
|
COMMAND "uname -m"
|
||||||
OUTPUT_VARIABLE _ARCH
|
OUTPUT_VARIABLE _ARCH
|
||||||
OUTPUT_STRIP_TRAILING_WHITESPACE
|
OUTPUT_STRIP_TRAILING_WHITESPACE
|
||||||
RESULT_VARIABLE _RES
|
RESULT_VARIABLE _RES
|
||||||
)
|
)
|
||||||
endif()
|
if(_ARCH MATCHES "(x86)|(X86)|(amd64)|(AMD64)")
|
||||||
set(_FILE_EXT "tar.xz")
|
set(_FILE_NAME "LLVM-${LLVM_VERSION}-MacOS-X64")
|
||||||
if(_ARCH MATCHES "(x86)|(X86)|(amd64)|(AMD64)")
|
|
||||||
set(_FILE_NAME "LLVM-${LLVM_VERSION}-Linux-X64")
|
|
||||||
else()
|
|
||||||
set(_FILE_NAME "LLVM-${LLVM_VERSION}-Linux-ARM64")
|
|
||||||
endif()
|
|
||||||
endif()
|
|
||||||
set(LLVM_DIR "${CMAKE_SOURCE_DIR}/extra/llvm-${LLVM_VERSION}-${_OS}-${_ARCH}")
|
|
||||||
|
|
||||||
macro(find_llvm)
|
|
||||||
set(LLVM_FOUND "FALSE")
|
|
||||||
|
|
||||||
# - AR
|
|
||||||
find_program(
|
|
||||||
LLVM_AR
|
|
||||||
NAMES
|
|
||||||
llvm-ar
|
|
||||||
PATHS
|
|
||||||
"${LLVM_DIR}/bin/"
|
|
||||||
NO_CACHE
|
|
||||||
)
|
|
||||||
|
|
||||||
# - Library Randomizer
|
|
||||||
find_program(
|
|
||||||
LLVM_RANLIB
|
|
||||||
NAMES
|
|
||||||
llvm-ranlib
|
|
||||||
PATHS
|
|
||||||
"${LLVM_DIR}/bin/"
|
|
||||||
NO_CACHE
|
|
||||||
)
|
|
||||||
|
|
||||||
# - Linker
|
|
||||||
if(_ARCH MATCHES "[xX]64")
|
|
||||||
find_program(
|
|
||||||
LLVM_LD
|
|
||||||
NAMES
|
|
||||||
ld64.lld
|
|
||||||
ld.lld
|
|
||||||
PATHS
|
|
||||||
"${LLVM_DIR}/bin/"
|
|
||||||
NO_CACHE
|
|
||||||
)
|
|
||||||
else()
|
|
||||||
find_program(
|
|
||||||
LLVM_LD
|
|
||||||
NAMES
|
|
||||||
ld.lld
|
|
||||||
PATHS
|
|
||||||
"${LLVM_DIR}/bin/"
|
|
||||||
NO_CACHE
|
|
||||||
)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
# - Object Copy
|
|
||||||
find_program(
|
|
||||||
LLVM_OBJCOPY
|
|
||||||
NAMES
|
|
||||||
llvm-objcopy
|
|
||||||
PATHS
|
|
||||||
"${LLVM_DIR}/bin/"
|
|
||||||
NO_CACHE
|
|
||||||
)
|
|
||||||
|
|
||||||
# - Object Dump
|
|
||||||
find_program(
|
|
||||||
LLVM_OBJDUMP
|
|
||||||
NAMES
|
|
||||||
llvm-objdump
|
|
||||||
PATHS
|
|
||||||
"${LLVM_DIR}/bin/"
|
|
||||||
NO_CACHE
|
|
||||||
)
|
|
||||||
|
|
||||||
# - Strip Debug Info
|
|
||||||
find_program(
|
|
||||||
LLVM_STRIP
|
|
||||||
NAMES
|
|
||||||
llvm-strip
|
|
||||||
PATHS
|
|
||||||
"${LLVM_DIR}/bin/"
|
|
||||||
NO_CACHE
|
|
||||||
)
|
|
||||||
|
|
||||||
# - C Compiler
|
|
||||||
find_program(
|
|
||||||
LLVM_CLANG
|
|
||||||
NAMES
|
|
||||||
clang
|
|
||||||
PATHS
|
|
||||||
"${LLVM_DIR}/bin/"
|
|
||||||
NO_CACHE
|
|
||||||
)
|
|
||||||
|
|
||||||
# - C++ Compiler
|
|
||||||
find_program(
|
|
||||||
LLVM_CLANGPP
|
|
||||||
NAMES
|
|
||||||
clang++
|
|
||||||
PATHS
|
|
||||||
"${LLVM_DIR}/bin/"
|
|
||||||
NO_CACHE
|
|
||||||
)
|
|
||||||
|
|
||||||
set(LLVM_FOUND TRUE)
|
|
||||||
foreach(_TEST IN ITEMS
|
|
||||||
"LLVM_AR"
|
|
||||||
"LLVM_LD"
|
|
||||||
"LLVM_RANLIB"
|
|
||||||
"LLVM_OBJCOPY"
|
|
||||||
"LLVM_OBJDUMP"
|
|
||||||
"LLVM_STRIP"
|
|
||||||
"LLVM_CLANG"
|
|
||||||
"LLVM_CLANGPP")
|
|
||||||
if(NOT IS_EXECUTABLE ${${_TEST}})
|
|
||||||
set(LLVM_FOUND FALSE)
|
|
||||||
break()
|
|
||||||
else()
|
else()
|
||||||
|
set(_FILE_NAME "LLVM-${LLVM_VERSION}-MacOS-ARM64")
|
||||||
|
endif()
|
||||||
|
set(_FILE_EXT "tar.xz")
|
||||||
|
elseif(CMAKE_HOST_SYSTEM_NAME MATCHES "[Oo]pen[Bb][Ss][Dd]")
|
||||||
|
set(_OS "openbsd")
|
||||||
|
execute_process(
|
||||||
|
COMMAND "arch"
|
||||||
|
OUTPUT_VARIABLE _ARCH
|
||||||
|
OUTPUT_STRIP_TRAILING_WHITESPACE
|
||||||
|
)
|
||||||
|
set(_FILE_EXT "tar.xz")
|
||||||
|
if(_ARCH MATCHES "(x86)|(X86)|(amd64)|(AMD64)")
|
||||||
|
set(_FILE_NAME "LLVM-${LLVM_VERSION}-Linux-X64")
|
||||||
|
else()
|
||||||
|
set(_FILE_NAME "LLVM-${LLVM_VERSION}-Linux-ARM64")
|
||||||
|
endif()
|
||||||
|
else()
|
||||||
|
set(_OS "linux")
|
||||||
|
execute_process(
|
||||||
|
COMMAND "uname -p"
|
||||||
|
OUTPUT_VARIABLE _ARCH
|
||||||
|
OUTPUT_STRIP_TRAILING_WHITESPACE
|
||||||
|
RESULT_VARIABLE _RES
|
||||||
|
)
|
||||||
|
if(_RES EQUAL 0)
|
||||||
execute_process(
|
execute_process(
|
||||||
COMMAND "${${_TEST}}" --version
|
COMMAND "uname -m"
|
||||||
OUTPUT_VARIABLE ${_TEST}_VERSION
|
OUTPUT_VARIABLE _ARCH
|
||||||
|
OUTPUT_STRIP_TRAILING_WHITESPACE
|
||||||
RESULT_VARIABLE _RES
|
RESULT_VARIABLE _RES
|
||||||
)
|
)
|
||||||
if(NOT _RES EQUAL 0)
|
endif()
|
||||||
|
set(_FILE_EXT "tar.xz")
|
||||||
|
if(_ARCH MATCHES "(x86)|(X86)|(amd64)|(AMD64)")
|
||||||
|
set(_FILE_NAME "LLVM-${LLVM_VERSION}-Linux-X64")
|
||||||
|
else()
|
||||||
|
set(_FILE_NAME "LLVM-${LLVM_VERSION}-Linux-ARM64")
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
set(LLVM_DIR "${CMAKE_SOURCE_DIR}/extra/llvm-${LLVM_VERSION}-${_OS}-${_ARCH}")
|
||||||
|
|
||||||
|
macro(find_llvm)
|
||||||
|
set(LLVM_FOUND "FALSE")
|
||||||
|
|
||||||
|
# - AR
|
||||||
|
find_program(
|
||||||
|
LLVM_AR
|
||||||
|
NAMES
|
||||||
|
llvm-ar
|
||||||
|
PATHS
|
||||||
|
"${LLVM_DIR}/bin/"
|
||||||
|
NO_CACHE
|
||||||
|
)
|
||||||
|
|
||||||
|
# - Library Randomizer
|
||||||
|
find_program(
|
||||||
|
LLVM_RANLIB
|
||||||
|
NAMES
|
||||||
|
llvm-ranlib
|
||||||
|
PATHS
|
||||||
|
"${LLVM_DIR}/bin/"
|
||||||
|
NO_CACHE
|
||||||
|
)
|
||||||
|
|
||||||
|
# - Linker
|
||||||
|
if(_ARCH MATCHES "[xX]64")
|
||||||
|
find_program(
|
||||||
|
LLVM_LD
|
||||||
|
NAMES
|
||||||
|
ld64.lld
|
||||||
|
ld.lld
|
||||||
|
PATHS
|
||||||
|
"${LLVM_DIR}/bin/"
|
||||||
|
NO_CACHE
|
||||||
|
)
|
||||||
|
else()
|
||||||
|
find_program(
|
||||||
|
LLVM_LD
|
||||||
|
NAMES
|
||||||
|
ld.lld
|
||||||
|
PATHS
|
||||||
|
"${LLVM_DIR}/bin/"
|
||||||
|
NO_CACHE
|
||||||
|
)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
# - Object Copy
|
||||||
|
find_program(
|
||||||
|
LLVM_OBJCOPY
|
||||||
|
NAMES
|
||||||
|
llvm-objcopy
|
||||||
|
PATHS
|
||||||
|
"${LLVM_DIR}/bin/"
|
||||||
|
NO_CACHE
|
||||||
|
)
|
||||||
|
|
||||||
|
# - Object Dump
|
||||||
|
find_program(
|
||||||
|
LLVM_OBJDUMP
|
||||||
|
NAMES
|
||||||
|
llvm-objdump
|
||||||
|
PATHS
|
||||||
|
"${LLVM_DIR}/bin/"
|
||||||
|
NO_CACHE
|
||||||
|
)
|
||||||
|
|
||||||
|
# - Strip Debug Info
|
||||||
|
find_program(
|
||||||
|
LLVM_STRIP
|
||||||
|
NAMES
|
||||||
|
llvm-strip
|
||||||
|
PATHS
|
||||||
|
"${LLVM_DIR}/bin/"
|
||||||
|
NO_CACHE
|
||||||
|
)
|
||||||
|
|
||||||
|
# - C Compiler
|
||||||
|
find_program(
|
||||||
|
LLVM_CLANG
|
||||||
|
NAMES
|
||||||
|
clang
|
||||||
|
PATHS
|
||||||
|
"${LLVM_DIR}/bin/"
|
||||||
|
NO_CACHE
|
||||||
|
)
|
||||||
|
|
||||||
|
# - C++ Compiler
|
||||||
|
find_program(
|
||||||
|
LLVM_CLANGPP
|
||||||
|
NAMES
|
||||||
|
clang++
|
||||||
|
PATHS
|
||||||
|
"${LLVM_DIR}/bin/"
|
||||||
|
NO_CACHE
|
||||||
|
)
|
||||||
|
|
||||||
|
set(LLVM_FOUND TRUE)
|
||||||
|
foreach(_TEST IN ITEMS
|
||||||
|
"LLVM_AR"
|
||||||
|
"LLVM_LD"
|
||||||
|
"LLVM_RANLIB"
|
||||||
|
"LLVM_OBJCOPY"
|
||||||
|
"LLVM_OBJDUMP"
|
||||||
|
"LLVM_STRIP"
|
||||||
|
"LLVM_CLANG"
|
||||||
|
"LLVM_CLANGPP")
|
||||||
|
if(NOT IS_EXECUTABLE ${${_TEST}})
|
||||||
set(LLVM_FOUND FALSE)
|
set(LLVM_FOUND FALSE)
|
||||||
break()
|
break()
|
||||||
|
else()
|
||||||
|
execute_process(
|
||||||
|
COMMAND "${${_TEST}}" --version
|
||||||
|
OUTPUT_VARIABLE ${_TEST}_VERSION
|
||||||
|
RESULT_VARIABLE _RES
|
||||||
|
)
|
||||||
|
if(NOT _RES EQUAL 0)
|
||||||
|
set(LLVM_FOUND FALSE)
|
||||||
|
break()
|
||||||
|
endif()
|
||||||
|
|
||||||
|
string(REGEX MATCH "[1-9+]?[0-9+]\.[1-9+]?[0-9+]\.[1-9+]?[0-9+]\." "${_TEST}_VERSION" "${${_TEST}_VERSION}")
|
||||||
|
string(REGEX REPLACE "[\r\n]+" "" "${_TEST}_VERSION" "${${_TEST}_VERSION}")
|
||||||
|
if(${_TEST}_VERSION VERSION_LESS LLVM_VERSION)
|
||||||
|
set(LLVM_FOUND FALSE)
|
||||||
|
endif()
|
||||||
endif()
|
endif()
|
||||||
|
endforeach()
|
||||||
|
|
||||||
string(REGEX MATCH "[1-9+]?[0-9+]\.[1-9+]?[0-9+]\.[1-9+]?[0-9+]\." "${_TEST}_VERSION" "${${_TEST}_VERSION}")
|
# foreach(_T IN ITEMS LLVM_VERSION LLVM_DIR LLVM_AR LLVM_LD LLVM_RANLIB LLVM_OBJCOPY LLVM_OBJDUMP LLVM_STRIP LLVM_CLANG LLVM_CLANGPP LLVM_AR_VERSION LLVM_LD_VERSION LLVM_RANLIB_VERSION LLVM_OBJCOPY_VERSION LLVM_OBJDUMP_VERSION LLVM_STRIP_VERSION LLVM_CLANG_VERSION LLVM_CLANGPP)
|
||||||
string(REGEX REPLACE "[\r\n]+" "" "${_TEST}_VERSION" "${${_TEST}_VERSION}")
|
# message(STATUS "${_T}=${${_T}}")
|
||||||
if(${_TEST}_VERSION VERSION_LESS LLVM_VERSION)
|
# endforeach()
|
||||||
set(LLVM_FOUND FALSE)
|
endmacro()
|
||||||
endif()
|
|
||||||
endif()
|
|
||||||
endforeach()
|
|
||||||
|
|
||||||
# foreach(_T IN ITEMS LLVM_VERSION LLVM_DIR LLVM_AR LLVM_LD LLVM_RANLIB LLVM_OBJCOPY LLVM_OBJDUMP LLVM_STRIP LLVM_CLANG LLVM_CLANGPP LLVM_AR_VERSION LLVM_LD_VERSION LLVM_RANLIB_VERSION LLVM_OBJCOPY_VERSION LLVM_OBJDUMP_VERSION LLVM_STRIP_VERSION LLVM_CLANG_VERSION LLVM_CLANGPP)
|
# Try and find an existing LLVM installation.
|
||||||
# message(STATUS "${_T}=${${_T}}")
|
|
||||||
# endforeach()
|
|
||||||
endmacro()
|
|
||||||
|
|
||||||
# Try and find an existing LLVM installation.
|
|
||||||
find_llvm()
|
|
||||||
if(LLVM_CLANG_VERSION AND LLVM_CLANG_VERSION VERSION_LESS LLVM_VERSION)
|
|
||||||
message(STATUS "Found outdated v${LLVM_CLANG_VERSION}.")
|
|
||||||
elseif(NOT LLVM_FOUND)
|
|
||||||
message(STATUS "No installed LLVM found.")
|
|
||||||
endif()
|
|
||||||
|
|
||||||
if(NOT LLVM_FOUND OR (LLVM_CLANG_VERSION VERSION_LESS LLVM_VERSION))
|
|
||||||
# It isn't up to date or doesn't exist, so try to download the latest version.
|
|
||||||
if((_FILE_EXT MATCHES "exe") AND NOT 7ZIP_BIN)
|
|
||||||
message(FATAL_ERROR "7-Zip is required to continue setting up LLVM. Please provide '7z.exe' in PATH or by installing the latest version from https://www.7-zip.org/.")
|
|
||||||
endif()
|
|
||||||
|
|
||||||
# Download the ideal version.
|
|
||||||
if(NOT EXISTS "${LLVM_DIR}.${_FILE_EXT}")
|
|
||||||
message(STATUS "Downloading LLVM v${LLVM_VERSION}...")
|
|
||||||
file(DOWNLOAD
|
|
||||||
"https://github.com/llvm/llvm-project/releases/download/llvmorg-${LLVM_VERSION}/${_FILE_NAME}.${_FILE_EXT}"
|
|
||||||
"${LLVM_DIR}.${_FILE_EXT}"
|
|
||||||
SHOW_PROGRESS
|
|
||||||
)
|
|
||||||
else()
|
|
||||||
message(STATUS "Skipping download as file already exists.")
|
|
||||||
endif()
|
|
||||||
|
|
||||||
# Extract it.
|
|
||||||
message(STATUS "Extracting...")
|
|
||||||
if(_FILE_EXT MATCHES "exe")
|
|
||||||
execute_process(
|
|
||||||
COMMAND ${7ZIP_BIN} x -y -aoa "-o${LLVM_DIR}/" "${LLVM_DIR}.${_FILE_EXT}"
|
|
||||||
COMMAND_ERROR_IS_FATAL ANY
|
|
||||||
OUTPUT_QUIET
|
|
||||||
ERROR_QUIET
|
|
||||||
)
|
|
||||||
else()
|
|
||||||
file(ARCHIVE_EXTRACT
|
|
||||||
INPUT "${LLVM_DIR}.${_FILE_EXT}"
|
|
||||||
DESTINATION "${LLVM_DIR}/"
|
|
||||||
)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
# Delete the archive itself.
|
|
||||||
message(STATUS "Cleaning...")
|
|
||||||
file(REMOVE "${LLVM_DIR}.${_FILE_EXT}")
|
|
||||||
|
|
||||||
# Final stuff
|
|
||||||
#message(STATUS "Testing...")
|
|
||||||
find_llvm()
|
find_llvm()
|
||||||
|
if(LLVM_CLANG_VERSION AND LLVM_CLANG_VERSION VERSION_LESS LLVM_VERSION)
|
||||||
|
message(STATUS "Found outdated v${LLVM_CLANG_VERSION}.")
|
||||||
|
elseif(NOT LLVM_FOUND)
|
||||||
|
message(STATUS "No installed LLVM found.")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if(NOT LLVM_FOUND OR (LLVM_CLANG_VERSION VERSION_LESS LLVM_VERSION))
|
||||||
|
# It isn't up to date or doesn't exist, so try to download the latest version.
|
||||||
|
if((_FILE_EXT MATCHES "exe") AND NOT 7ZIP_BIN)
|
||||||
|
message(FATAL_ERROR "7-Zip is required to continue setting up LLVM. Please provide '7z.exe' in PATH or by installing the latest version from https://www.7-zip.org/.")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
# Download the ideal version.
|
||||||
|
if(NOT EXISTS "${LLVM_DIR}.${_FILE_EXT}")
|
||||||
|
message(STATUS "Downloading LLVM v${LLVM_VERSION}...")
|
||||||
|
file(DOWNLOAD
|
||||||
|
"https://github.com/llvm/llvm-project/releases/download/llvmorg-${LLVM_VERSION}/${_FILE_NAME}.${_FILE_EXT}"
|
||||||
|
"${LLVM_DIR}.${_FILE_EXT}"
|
||||||
|
SHOW_PROGRESS
|
||||||
|
)
|
||||||
|
else()
|
||||||
|
message(STATUS "Skipping download as file already exists.")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
# Extract it.
|
||||||
|
message(STATUS "Extracting...")
|
||||||
|
if(_FILE_EXT MATCHES "exe")
|
||||||
|
execute_process(
|
||||||
|
COMMAND ${7ZIP_BIN} x -y -aoa "-o${LLVM_DIR}/" "${LLVM_DIR}.${_FILE_EXT}"
|
||||||
|
COMMAND_ERROR_IS_FATAL ANY
|
||||||
|
OUTPUT_QUIET
|
||||||
|
ERROR_QUIET
|
||||||
|
)
|
||||||
|
else()
|
||||||
|
file(ARCHIVE_EXTRACT
|
||||||
|
INPUT "${LLVM_DIR}.${_FILE_EXT}"
|
||||||
|
DESTINATION "${LLVM_DIR}/"
|
||||||
|
)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
# Delete the archive itself.
|
||||||
|
message(STATUS "Cleaning...")
|
||||||
|
file(REMOVE "${LLVM_DIR}.${_FILE_EXT}")
|
||||||
|
|
||||||
|
# Final stuff
|
||||||
|
#message(STATUS "Testing...")
|
||||||
|
find_llvm()
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if(LLVM_FOUND AND (LLVM_CLANG_VERSION VERSION_GREATER_EQUAL LLVM_VERSION))
|
||||||
|
message(STATUS "Found v${LLVM_CLANG_VERSION}.")
|
||||||
|
|
||||||
|
set(CMAKE_AR "${LLVM_AR}" CACHE STRING "" FORCE)
|
||||||
|
set(CMAKE_RANLIB "${LLVM_RANLIB}" CACHE STRING "" FORCE)
|
||||||
|
set(CMAKE_LINKER "${LLVM_LD}" CACHE STRING "" FORCE)
|
||||||
|
|
||||||
|
set(CMAKE_C_COMPILER "${LLVM_CLANG}" CACHE STRING "" FORCE)
|
||||||
|
set(CMAKE_C_COMPILER_AR "${LLVM_AR}" CACHE STRING "" FORCE)
|
||||||
|
set(CMAKE_C_COMPILER_RANLIB "${LLVM_RANLIB}" CACHE STRING "" FORCE)
|
||||||
|
set(CMAKE_C_COMPILER_LINKER "${LLVM_LD}" CACHE STRING "" FORCE)
|
||||||
|
set(CMAKE_C_COMPILER_LINKER_ID "LLD" CACHE STRING "" FORCE)
|
||||||
|
set(CMAKE_C_COMPILER_LINKER_VERSION "${LLVM_LD_VERSION}" CACHE STRING "" FORCE)
|
||||||
|
|
||||||
|
set(CMAKE_CXX_COMPILER "${LLVM_CLANGPP}" CACHE STRING "" FORCE)
|
||||||
|
set(CMAKE_CXX_COMPILER_AR "${LLVM_AR}" CACHE STRING "" FORCE)
|
||||||
|
set(CMAKE_CXX_COMPILER_RANLIB "${LLVM_RANLIB}" CACHE STRING "" FORCE)
|
||||||
|
set(CMAKE_CXX_COMPILER_LINKER "${LLVM_LD}" CACHE STRING "" FORCE)
|
||||||
|
set(CMAKE_CXX_COMPILER_LINKER_ID "LLD" CACHE STRING "" FORCE)
|
||||||
|
set(CMAKE_CXX_COMPILER_LINKER_VERSION "${LLVM_LD_VERSION}" CACHE STRING "" FORCE)
|
||||||
|
|
||||||
|
set(CMAKE_ASM_COMPILER "${LLVM_CLANG}" CACHE STRING "" FORCE)
|
||||||
|
set(CMAKE_ASM_COMPILER_AR "${LLVM_AR}" CACHE STRING "" FORCE)
|
||||||
|
set(CMAKE_ASM_COMPILER_RANLIB "${LLVM_RANLIB}" CACHE STRING "" FORCE)
|
||||||
|
set(CMAKE_ASM_COMPILER_LINKER "${LLVM_LD}" CACHE STRING "" FORCE)
|
||||||
|
set(CMAKE_ASM_COMPILER_LINKER_ID "LLD" CACHE STRING "" FORCE)
|
||||||
|
set(CMAKE_ASM_COMPILER_LINKER_VERSION "${LLVM_LD_VERSION}" CACHE STRING "" FORCE)
|
||||||
|
|
||||||
|
set(CMAKE_RC_COMPILER "${LLVM_CLANG}" CACHE STRING "" FORCE)
|
||||||
|
set(CMAKE_RC_COMPILER_AR "${LLVM_AR}" CACHE STRING "" FORCE)
|
||||||
|
set(CMAKE_RC_COMPILER_RANLIB "${LLVM_RANLIB}" CACHE STRING "" FORCE)
|
||||||
|
set(CMAKE_RC_COMPILER_LINKER "${LLVM_LD}" CACHE STRING "" FORCE)
|
||||||
|
set(CMAKE_RC_COMPILER_LINKER_ID "LLD" CACHE STRING "" FORCE)
|
||||||
|
set(CMAKE_RC_COMPILER_LINKER_VERSION "${LLVM_LD_VERSION}" CACHE STRING "" FORCE)
|
||||||
|
|
||||||
|
# Needed otherwise CMake will attempt to use GNU ld, MSVC link.exe, or AppleClangs lld
|
||||||
|
# set(CMAKE_EXE_LINKER_FLAGS_INIT "-fuse-ld=\"${LLVM_LD}\"")
|
||||||
|
# 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()
|
endif()
|
||||||
|
|
||||||
if(LLVM_FOUND AND (LLVM_CLANG_VERSION VERSION_GREATER_EQUAL LLVM_VERSION))
|
list(POP_BACK CMAKE_MESSAGE_INDENT)
|
||||||
message(STATUS "Found v${LLVM_CLANG_VERSION}.")
|
|
||||||
|
|
||||||
set(CMAKE_AR "${LLVM_AR}" CACHE STRING "" FORCE)
|
|
||||||
set(CMAKE_RANLIB "${LLVM_RANLIB}" CACHE STRING "" FORCE)
|
|
||||||
set(CMAKE_LINKER "${LLVM_LD}" CACHE STRING "" FORCE)
|
|
||||||
|
|
||||||
set(CMAKE_C_COMPILER "${LLVM_CLANG}" CACHE STRING "" FORCE)
|
|
||||||
set(CMAKE_C_COMPILER_AR "${LLVM_AR}" CACHE STRING "" FORCE)
|
|
||||||
set(CMAKE_C_COMPILER_RANLIB "${LLVM_RANLIB}" CACHE STRING "" FORCE)
|
|
||||||
set(CMAKE_C_COMPILER_LINKER "${LLVM_LD}" CACHE STRING "" FORCE)
|
|
||||||
set(CMAKE_C_COMPILER_LINKER_ID "LLD" CACHE STRING "" FORCE)
|
|
||||||
set(CMAKE_C_COMPILER_LINKER_VERSION "${LLVM_LD_VERSION}" CACHE STRING "" FORCE)
|
|
||||||
|
|
||||||
set(CMAKE_CXX_COMPILER "${LLVM_CLANGPP}" CACHE STRING "" FORCE)
|
|
||||||
set(CMAKE_CXX_COMPILER_AR "${LLVM_AR}" CACHE STRING "" FORCE)
|
|
||||||
set(CMAKE_CXX_COMPILER_RANLIB "${LLVM_RANLIB}" CACHE STRING "" FORCE)
|
|
||||||
set(CMAKE_CXX_COMPILER_LINKER "${LLVM_LD}" CACHE STRING "" FORCE)
|
|
||||||
set(CMAKE_CXX_COMPILER_LINKER_ID "LLD" CACHE STRING "" FORCE)
|
|
||||||
set(CMAKE_CXX_COMPILER_LINKER_VERSION "${LLVM_LD_VERSION}" CACHE STRING "" FORCE)
|
|
||||||
|
|
||||||
set(CMAKE_ASM_COMPILER "${LLVM_CLANG}" CACHE STRING "" FORCE)
|
|
||||||
set(CMAKE_ASM_COMPILER_AR "${LLVM_AR}" CACHE STRING "" FORCE)
|
|
||||||
set(CMAKE_ASM_COMPILER_RANLIB "${LLVM_RANLIB}" CACHE STRING "" FORCE)
|
|
||||||
set(CMAKE_ASM_COMPILER_LINKER "${LLVM_LD}" CACHE STRING "" FORCE)
|
|
||||||
set(CMAKE_ASM_COMPILER_LINKER_ID "LLD" CACHE STRING "" FORCE)
|
|
||||||
set(CMAKE_ASM_COMPILER_LINKER_VERSION "${LLVM_LD_VERSION}" CACHE STRING "" FORCE)
|
|
||||||
|
|
||||||
set(CMAKE_RC_COMPILER "${LLVM_CLANG}" CACHE STRING "" FORCE)
|
|
||||||
set(CMAKE_RC_COMPILER_AR "${LLVM_AR}" CACHE STRING "" FORCE)
|
|
||||||
set(CMAKE_RC_COMPILER_RANLIB "${LLVM_RANLIB}" CACHE STRING "" FORCE)
|
|
||||||
set(CMAKE_RC_COMPILER_LINKER "${LLVM_LD}" CACHE STRING "" FORCE)
|
|
||||||
set(CMAKE_RC_COMPILER_LINKER_ID "LLD" CACHE STRING "" FORCE)
|
|
||||||
set(CMAKE_RC_COMPILER_LINKER_VERSION "${LLVM_LD_VERSION}" CACHE STRING "" FORCE)
|
|
||||||
|
|
||||||
# Needed otherwise CMake will attempt to use GNU ld, MSVC link.exe, or AppleClangs lld
|
|
||||||
# set(CMAKE_EXE_LINKER_FLAGS_INIT "-fuse-ld=\"${LLVM_LD}\"")
|
|
||||||
# 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}\"")
|
|
||||||
else()
|
|
||||||
message(FATAL_ERROR "Failed to find or provide a compatible LLVM installation.")
|
|
||||||
endif()
|
|
||||||
|
|
||||||
list(POP_BACK CMAKE_MESSAGE_INDENT)
|
|
||||||
|
|||||||
Reference in New Issue
Block a user