Add initial work towards a one-click build setup
We can use some of CMakes built-in systems to ease the required workflow for the whole toolchain. This may eventually allow us to do a single click system where a developer does not need to do anything to get started. If Google can do this (even if slightly scuffed), so can we.
This commit is contained in:
+4
-4
@@ -168,11 +168,11 @@ project(
|
|||||||
${PROJECT_NAME}
|
${PROJECT_NAME}
|
||||||
VERSION ${PROJECT_VERSION}
|
VERSION ${PROJECT_VERSION}
|
||||||
)
|
)
|
||||||
set(PROJECT_IDENTIFER "com.xaymar.BlitzLLVM")
|
set(PROJECT_IDENTIFER "com.xaymar.blitzllvm")
|
||||||
set(PROJECT_TITLE "BlitzLLVM")
|
set(PROJECT_TITLE "BlitzLLVM")
|
||||||
set(PROJECT_AUTHORS "See AUTHORS file")
|
set(PROJECT_AUTHORS "Xaymar <info@xaymar.com>") # ToDo: Generate from AUTHORS
|
||||||
set(PROJECT_COPYRIGHT "All Rights Reserved. See LICENSE file for more information")
|
set(PROJECT_COPYRIGHT "All Rights Reserved. See LICENSE file for more information") # ToDo: Generate from LICENSE
|
||||||
set(PROJECT_TRADEMARKS "")
|
set(PROJECT_TRADEMARKS "")
|
||||||
|
|
||||||
function(init_project TARGET)
|
function(init_project TARGET)
|
||||||
set_target_properties(${TARGET} PROPERTIES
|
set_target_properties(${TARGET} PROPERTIES
|
||||||
|
|||||||
@@ -0,0 +1,55 @@
|
|||||||
|
{
|
||||||
|
"version": 6,
|
||||||
|
"cmakeMinimumRequired": {
|
||||||
|
"major": 4,
|
||||||
|
"minor": 0,
|
||||||
|
"patch": 0
|
||||||
|
},
|
||||||
|
"configurePresets": [
|
||||||
|
{
|
||||||
|
"name": "default",
|
||||||
|
"cacheVariables": {
|
||||||
|
"__CMAKE_VERBOSE_MAKEFILE": "ON",
|
||||||
|
"CMAKE_INTERPROCEDURAL_OPTIMIZATION": "ON"
|
||||||
|
},
|
||||||
|
"hidden": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"inherits": "default",
|
||||||
|
"name": "windows-x64-llvm",
|
||||||
|
"description": "Windows, x86-64 (LLVM)",
|
||||||
|
"binaryDir": "build/windows-x64-llvm",
|
||||||
|
"installDir": "distrib/windows-x64-llvm",
|
||||||
|
"toolchainFile": "cmake/toolchains/llvm.cmake",
|
||||||
|
"generator": "Ninja Multi-Config",
|
||||||
|
"cacheVariables": {
|
||||||
|
"CMAKE_TOOLCHAIN_FILE": "${sourceDir}/cmake/toolchains/llvm.cmake",
|
||||||
|
"CMAKE_MAKE_PROGRAM": "build/windows-x64-llvm/toolchains/ninja/ninja.exe"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"inherits": "default",
|
||||||
|
"name": "windows-x64-msvc",
|
||||||
|
"description": "Windows, x86-64 (MSVC 2022)",
|
||||||
|
"binaryDir": "build/windows-x64-msvc",
|
||||||
|
"installDir": "distrib/windows-x64-msvc",
|
||||||
|
"generator": "Visual Studio 17 2022",
|
||||||
|
"cacheVariables": {
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"buildPresets": [
|
||||||
|
{
|
||||||
|
"configurePreset": "windows-x64-llvm",
|
||||||
|
"name": "windows-x64-llvm",
|
||||||
|
"description": "",
|
||||||
|
"displayName": "Windows, x64 (LLVM)"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"configurePreset": "windows-x64-msvc",
|
||||||
|
"name": "windows-x64-msvc",
|
||||||
|
"description": "",
|
||||||
|
"displayName": "Windows, x64 (MSVC 2022)"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
@@ -0,0 +1,155 @@
|
|||||||
|
# Copyright (C) 2024-2025 Michael Fabian 'Xaymar' Dirks
|
||||||
|
#
|
||||||
|
# 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
|
||||||
|
# the Free Software Foundation, either version 3 of the License, or
|
||||||
|
# (at your option) any later version.
|
||||||
|
#
|
||||||
|
# This program is distributed in the hope that it will be useful,
|
||||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
# GNU General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU General Public License
|
||||||
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
# This is a script file that installs the necessary "Ninja" and "Ninja Multi-Config" generators.
|
||||||
|
# Run with `cmake -P cmake/generators/ninja.cmake` from the source directory.
|
||||||
|
|
||||||
|
cmake_minimum_required(VERSION 3.30...4.0)
|
||||||
|
include_guard(GLOBAL)
|
||||||
|
list(APPEND CMAKE_MESSAGE_INDENT "[Ninja] ")
|
||||||
|
|
||||||
|
# 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)
|
||||||
|
set(_OS "windows")
|
||||||
|
elseif(CMAKE_HOST_SYSTEM_NAME MATCHES "[Dd]arwin")
|
||||||
|
set(_ARCH "multiarch")
|
||||||
|
set(_OS "macos")
|
||||||
|
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
|
||||||
|
)
|
||||||
|
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(
|
||||||
|
COMMAND "uname -m"
|
||||||
|
OUTPUT_VARIABLE _ARCH
|
||||||
|
OUTPUT_STRIP_TRAILING_WHITESPACE
|
||||||
|
RESULT_VARIABLE _RES
|
||||||
|
)
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
|
||||||
|
set(NINJA_VERSION "1.12.1")
|
||||||
|
set(NINJA_DIR "${CMAKE_SOURCE_DIR}/extra/ninja-${NINJA_VERSION}-${_OS}-${_ARCH}")
|
||||||
|
|
||||||
|
# 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}.")
|
||||||
|
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()
|
||||||
|
|
||||||
|
# Download the ideal version.
|
||||||
|
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}"
|
||||||
|
)
|
||||||
|
|
||||||
|
# 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(STATUS "NINJA_DIR=${NINJA_DIR}")
|
||||||
|
message(STATUS "NINJA_BIN=${NINJA_BIN}")
|
||||||
|
message(STATUS "NINJA_VERSION=${NINJA_VERSION}")
|
||||||
|
message(STATUS "NINJA_VERSION_INSTALLED=${NINJA_VERSION_INSTALLED}")
|
||||||
|
message(FATAL_ERROR "Failed to install newer version of Ninja.")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
set(CMAKE_MAKE_PROGRAM "${NINJA_BIN}" CACHE STRING "" FORCE)
|
||||||
@@ -0,0 +1,220 @@
|
|||||||
|
# Copyright (C) 2023-2024 Michael Fabian 'Xaymar' Dirks
|
||||||
|
#
|
||||||
|
# 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
|
||||||
|
# the Free Software Foundation, either version 3 of the License, or
|
||||||
|
# (at your option) any later version.
|
||||||
|
#
|
||||||
|
# This program is distributed in the hope that it will be useful,
|
||||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
# GNU General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU General Public License
|
||||||
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
cmake_minimum_required(VERSION 3.30...4.0)
|
||||||
|
include_guard(GLOBAL)
|
||||||
|
|
||||||
|
if((CMAKE_GENERATOR STREQUAL "Ninja") OR (CMAKE_GENERATOR STREQUAL "Ninja Multi-Config"))
|
||||||
|
include("${CMAKE_CURRENT_LIST_DIR}/../generators/ninja.cmake")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
list(APPEND CMAKE_MESSAGE_INDENT "[LLVM-ARM] ")
|
||||||
|
set(_VERSION "18.1.3")
|
||||||
|
set(_FILE "llvm-arm-${CMAKE_HOST_SYSTEM_NAME}-${CMAKE_HOST_SYSTEM_PROCESSOR}")
|
||||||
|
if(CMAKE_HOST_SYSTEM_NAME MATCHES "Windows") # Windows
|
||||||
|
set(_FILENAME "LLVM-ET-Arm-${_VERSION}-Windows-x86_64")
|
||||||
|
set(_FILEEXT "zip")
|
||||||
|
elseif(CMAKE_HOST_SYSTEM_NAME MATCHES "Darwin") # Darwin
|
||||||
|
set(_FILENAME "LLVM-ET-Arm-${_VERSION}-Darwin")
|
||||||
|
set(_FILEEXT "dmg")
|
||||||
|
else() # Generic Unix-like
|
||||||
|
set(_FILEEXT "tar.xz")
|
||||||
|
if(CMAKE_HOST_SYSTEM_PROCESSOR MATCHES "(x86)|(X86)|(amd64)|(AMD64)")
|
||||||
|
set(_FILENAME "LLVM-ET-Arm-${_VERSION}-Linux-x86_64")
|
||||||
|
else()
|
||||||
|
set(_FILENAME "LLVM-ET-Arm-${_VERSION}-Linux-AArch64")
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
|
||||||
|
# Very hacky way to get CMake to behave like a normal makefile generator, instead of a mentally challenged makefile generator.
|
||||||
|
if(TRUE) # Check if we've already installed one of these,
|
||||||
|
if(WIN32)
|
||||||
|
set(TEMP "$ENV{TEMP}")
|
||||||
|
else()
|
||||||
|
set(TEMP "$ENV{TMPDIR}")
|
||||||
|
endif()
|
||||||
|
set(_PATH "${TEMP}/cmake/llvm-arm/${_VERSION}")
|
||||||
|
if(EXISTS "${_PATH}")
|
||||||
|
file(READ "${_PATH}" _DIR)
|
||||||
|
if (NOT EXISTS "${_DIR}")
|
||||||
|
file(REMOVE "${_PATH}")
|
||||||
|
unset(_DIR)
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if((NOT _DIR) OR (EXISTS "${PROJECT_BINARY_DIR}/toolchain/${_FILE}.version"))
|
||||||
|
# Check if the version is what we expect.
|
||||||
|
if(EXISTS "${PROJECT_BINARY_DIR}/toolchain/${_FILE}.version")
|
||||||
|
file(READ "${PROJECT_BINARY_DIR}/toolchain/${_FILE}.version" _VERSION_STORED)
|
||||||
|
endif()
|
||||||
|
if((NOT _VERSION_STORED) OR (_VERSION_STORED VERSION_LESS _VERSION))
|
||||||
|
message(STATUS "Updating... (${_VERSION_STORED} < ${_VERSION})")
|
||||||
|
|
||||||
|
|
||||||
|
# Download the appropriate package from https://github.com/ARM-software/LLVM-embedded-toolchain-for-Arm
|
||||||
|
#- Grab the latest hash from the remote.
|
||||||
|
set(_HASH_FILE "${PROJECT_BINARY_DIR}/toolchain/${_FILE}.sha256")
|
||||||
|
file(DOWNLOAD
|
||||||
|
"https://github.com/ARM-software/LLVM-embedded-toolchain-for-Arm/releases/download/release-${_VERSION}/${_FILENAME}.${_FILEEXT}.sha256"
|
||||||
|
"${_HASH_FILE}"
|
||||||
|
)
|
||||||
|
file(READ "${_HASH_FILE}" _DOWNLOAD_SHA256)
|
||||||
|
string(REGEX MATCH "[0-9a-fA-F]+" _DOWNLOAD_SHA256 "${_DOWNLOAD_SHA256}")
|
||||||
|
file(REMOVE "${_HASH_FILE}")
|
||||||
|
|
||||||
|
#- Download the latest toolchain
|
||||||
|
set(_PACKAGE_FILE "${PROJECT_BINARY_DIR}/toolchain/${_FILE}.${_FILEEXT}")
|
||||||
|
file(DOWNLOAD
|
||||||
|
"https://github.com/ARM-software/LLVM-embedded-toolchain-for-Arm/releases/download/release-${_VERSION}/${_FILENAME}.${_FILEEXT}"
|
||||||
|
"${_PACKAGE_FILE}"
|
||||||
|
EXPECTED_HASH SHA256=${_DOWNLOAD_SHA256}
|
||||||
|
)
|
||||||
|
|
||||||
|
#- Extract the contents
|
||||||
|
file(ARCHIVE_EXTRACT
|
||||||
|
INPUT "${_PACKAGE_FILE}"
|
||||||
|
DESTINATION "${PROJECT_BINARY_DIR}/toolchain/"
|
||||||
|
)
|
||||||
|
#file(REMOVE "${_PACKAGE_FILE}")
|
||||||
|
|
||||||
|
file(WRITE "${PROJECT_BINARY_DIR}/toolchain/${_FILE}.version" "${_VERSION}")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
# Update the virtual link
|
||||||
|
file(WRITE "${_PATH}" "${PROJECT_BINARY_DIR}/toolchain/${_FILENAME}/")
|
||||||
|
|
||||||
|
set(_LLVM_TOOLCHAIN "${PROJECT_BINARY_DIR}/toolchain/${_FILENAME}/")
|
||||||
|
else()
|
||||||
|
set(_LLVM_TOOLCHAIN "${_DIR}")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
list(APPEND CMAKE_PREFIX_PATH
|
||||||
|
"${_LLVM_TOOLCHAIN}/bin"
|
||||||
|
"${_LLVM_TOOLCHAIN}"
|
||||||
|
)
|
||||||
|
# Find necessary programs.
|
||||||
|
# - AR
|
||||||
|
find_program(
|
||||||
|
CMAKE_AR
|
||||||
|
NAMES
|
||||||
|
llvm-ar
|
||||||
|
PATHS
|
||||||
|
"${_LLVM_TOOLCHAIN}/bin"
|
||||||
|
NO_DEFAULT_PATH NO_PACKAGE_ROOT_PATH NO_CMAKE_PATH NO_CMAKE_ENVIRONMENT_PATH NO_SYSTEM_ENVIRONMENT_PATH NO_CMAKE_INSTALL_PREFIX NO_CMAKE_FIND_ROOT_PATH
|
||||||
|
)
|
||||||
|
# - Library Randomizer
|
||||||
|
find_program(
|
||||||
|
CMAKE_RANLIB
|
||||||
|
NAMES
|
||||||
|
llvm-ranlib
|
||||||
|
PATHS
|
||||||
|
"${_LLVM_TOOLCHAIN}/bin"
|
||||||
|
NO_DEFAULT_PATH NO_PACKAGE_ROOT_PATH NO_CMAKE_PATH NO_CMAKE_ENVIRONMENT_PATH NO_SYSTEM_ENVIRONMENT_PATH NO_CMAKE_INSTALL_PREFIX NO_CMAKE_FIND_ROOT_PATH
|
||||||
|
)
|
||||||
|
# - Linker
|
||||||
|
find_program(
|
||||||
|
CMAKE_LINKER
|
||||||
|
NAMES
|
||||||
|
ld.lld
|
||||||
|
PATHS
|
||||||
|
"${_LLVM_TOOLCHAIN}/bin"
|
||||||
|
NO_DEFAULT_PATH NO_PACKAGE_ROOT_PATH NO_CMAKE_PATH NO_CMAKE_ENVIRONMENT_PATH NO_SYSTEM_ENVIRONMENT_PATH NO_CMAKE_INSTALL_PREFIX NO_CMAKE_FIND_ROOT_PATH
|
||||||
|
)
|
||||||
|
# - Object Copy
|
||||||
|
find_program(
|
||||||
|
CMAKE_OBJCOPY
|
||||||
|
NAMES
|
||||||
|
llvm-objcopy
|
||||||
|
PATHS
|
||||||
|
"${_LLVM_TOOLCHAIN}/bin"
|
||||||
|
NO_DEFAULT_PATH NO_PACKAGE_ROOT_PATH NO_CMAKE_PATH NO_CMAKE_ENVIRONMENT_PATH NO_SYSTEM_ENVIRONMENT_PATH NO_CMAKE_INSTALL_PREFIX NO_CMAKE_FIND_ROOT_PATH
|
||||||
|
)
|
||||||
|
# - Object Dump
|
||||||
|
find_program(
|
||||||
|
CMAKE_OBJDUMP
|
||||||
|
NAMES
|
||||||
|
llvm-objdump
|
||||||
|
PATHS
|
||||||
|
"${_LLVM_TOOLCHAIN}/bin"
|
||||||
|
NO_DEFAULT_PATH NO_PACKAGE_ROOT_PATH NO_CMAKE_PATH NO_CMAKE_ENVIRONMENT_PATH NO_SYSTEM_ENVIRONMENT_PATH NO_CMAKE_INSTALL_PREFIX NO_CMAKE_FIND_ROOT_PATH
|
||||||
|
)
|
||||||
|
# - Strip Debug Info
|
||||||
|
find_program(
|
||||||
|
CMAKE_STRIP
|
||||||
|
NAMES
|
||||||
|
llvm-strip
|
||||||
|
PATHS
|
||||||
|
"${_LLVM_TOOLCHAIN}/bin"
|
||||||
|
NO_DEFAULT_PATH NO_PACKAGE_ROOT_PATH NO_CMAKE_PATH NO_CMAKE_ENVIRONMENT_PATH NO_SYSTEM_ENVIRONMENT_PATH NO_CMAKE_INSTALL_PREFIX NO_CMAKE_FIND_ROOT_PATH
|
||||||
|
)
|
||||||
|
# - C Compiler
|
||||||
|
find_program(
|
||||||
|
CMAKE_C_COMPILER
|
||||||
|
NAMES
|
||||||
|
clang
|
||||||
|
clang++
|
||||||
|
clang-cpp
|
||||||
|
PATHS
|
||||||
|
"${_LLVM_TOOLCHAIN}/bin"
|
||||||
|
NO_DEFAULT_PATH NO_PACKAGE_ROOT_PATH NO_CMAKE_PATH NO_CMAKE_ENVIRONMENT_PATH NO_SYSTEM_ENVIRONMENT_PATH NO_CMAKE_INSTALL_PREFIX NO_CMAKE_FIND_ROOT_PATH
|
||||||
|
)
|
||||||
|
set(CMAKE_C_COMPILER_AR "${CMAKE_AR}" CACHE STRING "" FORCE)
|
||||||
|
#set(CMAKE_C_COMPILER_CLANG_SCAN_DEPS "NOT-FOUND" CACHE STRING "" FORCE)
|
||||||
|
set(CMAKE_C_COMPILER_RANLIB "${CMAKE_RANLIB}" CACHE STRING "" FORCE)
|
||||||
|
set(CMAKE_C_LINKER "${CMAKE_LINKER}" CACHE STRING "" FORCE)
|
||||||
|
set(CMAKE_C_LINKER_ID "LDD" CACHE STRING "" FORCE)
|
||||||
|
set(CMAKE_C_LINKER_FRONTEND_VARIANT "LLD" CACHE STRING "" FORCE)
|
||||||
|
# - C++ Compiler
|
||||||
|
find_program(
|
||||||
|
CMAKE_CXX_COMPILER
|
||||||
|
NAMES
|
||||||
|
clang++
|
||||||
|
clang-cpp
|
||||||
|
clang
|
||||||
|
PATHS
|
||||||
|
"${_LLVM_TOOLCHAIN}/bin"
|
||||||
|
NO_DEFAULT_PATH NO_PACKAGE_ROOT_PATH NO_CMAKE_PATH NO_CMAKE_ENVIRONMENT_PATH NO_SYSTEM_ENVIRONMENT_PATH NO_CMAKE_INSTALL_PREFIX NO_CMAKE_FIND_ROOT_PATH
|
||||||
|
)
|
||||||
|
set(CMAKE_CXX_COMPILER_AR "${CMAKE_AR}" CACHE STRING "" FORCE)
|
||||||
|
#set(CMAKE_CXX_COMPILER_CLANG_SCAN_DEPS "NOT-FOUND" CACHE STRING "" FORCE)
|
||||||
|
set(CMAKE_CXX_SCAN_FOR_MODULES OFF CACHE BOOL "" FORCE)
|
||||||
|
set(CMAKE_CXX_COMPILER_RANLIB "${CMAKE_RANLIB}" CACHE STRING "" FORCE)
|
||||||
|
set(CMAKE_CXX_LINKER "${CMAKE_C_LINKER}" CACHE STRING "" FORCE)
|
||||||
|
set(CMAKE_CXX_LINKER_ID "LLD" CACHE STRING "" FORCE)
|
||||||
|
set(CMAKE_CXX_LINKER_FRONTEND_VARIANT "LLD" CACHE STRING "" FORCE)
|
||||||
|
# - Assembly Compiler
|
||||||
|
set(CMAKE_ASM_COMPILER "${CMAKE_C_COMPILER}" CACHE STRING "" FORCE)
|
||||||
|
set(CMAKE_ASM_COMPILER_AR "${CMAKE_AR}" CACHE STRING "" FORCE)
|
||||||
|
#set(CMAKE_ASM_COMPILER_CLANG_SCAN_DEPS "NOT-FOUND" CACHE STRING "" FORCE)
|
||||||
|
set(CMAKE_ASM_COMPILER_RANLIB "${CMAKE_RANLIB}" CACHE STRING "" FORCE)
|
||||||
|
set(CMAKE_ASM_LINKER "${CMAKE_C_LINKER}" CACHE STRING "" FORCE)
|
||||||
|
set(CMAKE_ASM_LINKER_ID "LLD" CACHE STRING "" FORCE)
|
||||||
|
set(CMAKE_ASM_LINKER_FRONTEND_VARIANT "LLD" CACHE STRING "" FORCE)
|
||||||
|
|
||||||
|
#mark_as_advanced(CLANG_C_COMPILER CLANG_CPP_COMPILER CLANG__AR CLANG__LD_LDD)
|
||||||
|
set(CMAKE_EXE_LINKER_FLAGS_INIT "-fuse-ld=\"${CMAKE_C_LINKER}\"")
|
||||||
|
set(CMAKE_STATIC_LINKER_FLAGS_INIT "-fuse-ld=\"${CMAKE_C_LINKER}\"")
|
||||||
|
set(CMAKE_MODULE_LINKER_FLAGS_INIT "-fuse-ld=\"${CMAKE_C_LINKER}\"")
|
||||||
|
set(CMAKE_SHARED_LINKER_FLAGS_INIT "-fuse-ld=\"${CMAKE_C_LINKER}\"")
|
||||||
|
|
||||||
|
execute_process(
|
||||||
|
COMMAND "${CMAKE_C_COMPILER}" "--version"
|
||||||
|
OUTPUT_VARIABLE _VERSION_INSTALLED
|
||||||
|
OUTPUT_STRIP_TRAILING_WHITESPACE
|
||||||
|
)
|
||||||
|
string(REGEX MATCH "[0-9]+\.[0-9]+\.[0-9]+" _VERSION_INSTALLED "${_VERSION_INSTALLED}")
|
||||||
|
message(STATUS "v${_VERSION_INSTALLED}")
|
||||||
|
list(POP_BACK CMAKE_MESSAGE_INDENT)
|
||||||
@@ -0,0 +1,60 @@
|
|||||||
|
# TinyAudioLink - Seamlessly transfer Audio between USB capable devices
|
||||||
|
# Copyright (C) 2019 Michael Fabian 'Xaymar' Dirks
|
||||||
|
#
|
||||||
|
# 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
|
||||||
|
# the Free Software Foundation, either version 3 of the License, or
|
||||||
|
# (at your option) any later version.
|
||||||
|
#
|
||||||
|
# This program is distributed in the hope that it will be useful,
|
||||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
# GNU General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU General Public License
|
||||||
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
find_program(
|
||||||
|
CLANG_C_COMPILER
|
||||||
|
NAMES
|
||||||
|
clang
|
||||||
|
clang-cl
|
||||||
|
clang++
|
||||||
|
clang-cpp
|
||||||
|
NO_CACHE
|
||||||
|
)
|
||||||
|
find_program(
|
||||||
|
CLANG_CPP_COMPILER
|
||||||
|
NAMES
|
||||||
|
clang++
|
||||||
|
clang-cpp
|
||||||
|
clang
|
||||||
|
clang-cl
|
||||||
|
NO_CACHE
|
||||||
|
)
|
||||||
|
find_program(
|
||||||
|
CLANG_LLVM_AR
|
||||||
|
NAMES
|
||||||
|
llvm-ar
|
||||||
|
NO_CACHE
|
||||||
|
)
|
||||||
|
find_program(
|
||||||
|
CLANG_LLVM_LD_LDD
|
||||||
|
NAMES
|
||||||
|
ld.lld
|
||||||
|
NO_CACHE
|
||||||
|
)
|
||||||
|
mark_as_advanced(CLANG_C_COMPILER CLANG_CPP_COMPILER CLANG_LLVM_AR CLANG_LLVM_LD_LDD)
|
||||||
|
|
||||||
|
set(CMAKE_C_COMPILER "${CLANG_C_COMPILER}")
|
||||||
|
set(CMAKE_CXX_COMPILER "${CLANG_CPP_COMPILER}")
|
||||||
|
set(CMAKE_AR "${CLANG_LLVM_AR}")
|
||||||
|
|
||||||
|
if(CMAKE_VERSION VERSION_GREATER_EQUAL 3.29)
|
||||||
|
set(CMAKE_LINKER_TYPE "LLD")
|
||||||
|
else()
|
||||||
|
set(CMAKE_EXE_LINKER_FLAGS_INIT "-fuse-ld=\"${CLANG_LLVM_LD_LDD}\"")
|
||||||
|
set(CMAKE_STATIC_LINKER_FLAGS_INIT "-fuse-ld=\"${CLANG_LLVM_LD_LDD}\"")
|
||||||
|
set(CMAKE_MODULE_LINKER_FLAGS_INIT "-fuse-ld=\"${CLANG_LLVM_LD_LDD}\"")
|
||||||
|
set(CMAKE_SHARED_LINKER_FLAGS_INIT "-fuse-ld=\"${CLANG_LLVM_LD_LDD}\"")
|
||||||
|
endif()
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
This directory contains automatically downloaded toolchains and generators.
|
||||||
Reference in New Issue
Block a user