From fa7a825f7068604bdbf1fa2829de958c1d35ff19 Mon Sep 17 00:00:00 2001 From: Skyth <19259897+blueskythlikesclouds@users.noreply.github.com> Date: Fri, 13 Dec 2024 00:51:14 +0300 Subject: [PATCH] Add clang toolchain & make tools compile. --- CMakePresets.json | 3 +- thirdparty/ShaderRecomp | 2 +- thirdparty/fshasher/plainargs.h | 4 +- toolchains/linux-clang.cmake | 86 +++++++++++++++++++++++++++++++++ tools/bc_diff/bc_diff.cpp | 2 + tools/file_to_c/file_to_c.cpp | 1 + 6 files changed, 95 insertions(+), 3 deletions(-) create mode 100644 toolchains/linux-clang.cmake diff --git a/CMakePresets.json b/CMakePresets.json index ee1d078b..5c6e1093 100644 --- a/CMakePresets.json +++ b/CMakePresets.json @@ -62,7 +62,8 @@ "VCPKG_TARGET_TRIPLET": { "value": "x64-linux", "type": "STRING" - } + }, + "VCPKG_CHAINLOAD_TOOLCHAIN_FILE": "${sourceDir}/toolchains/linux-clang.cmake" }, "environment": { "VCPKG_ROOT": "~/vcpkg" diff --git a/thirdparty/ShaderRecomp b/thirdparty/ShaderRecomp index 5eaf5424..bf639980 160000 --- a/thirdparty/ShaderRecomp +++ b/thirdparty/ShaderRecomp @@ -1 +1 @@ -Subproject commit 5eaf542426992cec9b98ab14a1c46c85d4ad3120 +Subproject commit bf6399804d3f1864ba551d9aeca5dd631fa25b6c diff --git a/thirdparty/fshasher/plainargs.h b/thirdparty/fshasher/plainargs.h index 18ee421a..c19bd91b 100644 --- a/thirdparty/fshasher/plainargs.h +++ b/thirdparty/fshasher/plainargs.h @@ -25,8 +25,10 @@ // OTHER DEALINGS IN THE SOFTWARE. // +#include #include #include +#include namespace plainargs { class Result { @@ -144,4 +146,4 @@ namespace plainargs { Result parse(int argc, char *argv[]) { return Result(argc, argv); } -}; \ No newline at end of file +}; diff --git a/toolchains/linux-clang.cmake b/toolchains/linux-clang.cmake new file mode 100644 index 00000000..5a2365c7 --- /dev/null +++ b/toolchains/linux-clang.cmake @@ -0,0 +1,86 @@ +# Copied and adapted from: +# https://github.com/microsoft/vcpkg/blob/7adc2e4d49e8d0efc07a369079faa6bc3dbb90f3/scripts/toolchains/linux.cmake +# +# The original seems to be written only for GCC. This version is changed to use clang and +# LLVM bin tools. + +if(NOT _VCPKG_LINUX_CLANG_TOOLCHAIN) + set(_VCPKG_LINUX_CLANG_TOOLCHAIN 1) + + if(POLICY CMP0056) + cmake_policy(SET CMP0056 NEW) + endif() + if(POLICY CMP0066) + cmake_policy(SET CMP0066 NEW) + endif() + if(POLICY CMP0067) + cmake_policy(SET CMP0067 NEW) + endif() + if(POLICY CMP0137) + cmake_policy(SET CMP0137 NEW) + endif() + list(APPEND CMAKE_TRY_COMPILE_PLATFORM_VARIABLES + VCPKG_CRT_LINKAGE VCPKG_TARGET_ARCHITECTURE + VCPKG_C_FLAGS VCPKG_CXX_FLAGS + VCPKG_C_FLAGS_DEBUG VCPKG_CXX_FLAGS_DEBUG + VCPKG_C_FLAGS_RELEASE VCPKG_CXX_FLAGS_RELEASE + VCPKG_LINKER_FLAGS VCPKG_LINKER_FLAGS_RELEASE VCPKG_LINKER_FLAGS_DEBUG + ) + + set(CMAKE_SYSTEM_NAME Linux CACHE STRING "") + + # Set compiler to clang + set(CMAKE_C_COMPILER clang) + set(CMAKE_CXX_COMPILER clang++) + SET(CMAKE_ASM_COMPILER clang) + + # Pick target architecture for clang + if(VCPKG_TARGET_ARCHITECTURE STREQUAL "x64") + set(CMAKE_SYSTEM_PROCESSOR x86_64 CACHE STRING "") + set(CLANG_TARGET x86_64-unknown-linux-gnu) + elseif(VCPKG_TARGET_ARCHITECTURE STREQUAL "x86") + set(CMAKE_SYSTEM_PROCESSOR i686 CACHE STRING "") + set(CLANG_TARGET i686-unknown-linux-gnu) + elseif(VCPKG_TARGET_ARCHITECTURE STREQUAL "arm") + set(CMAKE_SYSTEM_PROCESSOR armv7l CACHE STRING "") + set(CLANG_TARGET armv7-unknown-linux-gnueabihf) + elseif(VCPKG_TARGET_ARCHITECTURE STREQUAL "arm64") + set(CMAKE_SYSTEM_PROCESSOR aarch64 CACHE STRING "") + set(CLANG_TARGET aarch64-unknown-linux-gnu) + endif() + if(DEFINED CLANG_TARGET) + set(CMAKE_C_COMPILER_TARGET ${CLANG_TARGET}) + set(CMAKE_CXX_COMPILER_TARGET ${CLANG_TARGET}) + set(CMAKE_ASM_COMPILER_TARGET ${CLANG_TARGET}) + endif() + + if(CMAKE_HOST_SYSTEM_NAME STREQUAL "Linux" AND CMAKE_SYSTEM_PROCESSOR STREQUAL CMAKE_HOST_SYSTEM_PROCESSOR) + set(CMAKE_CROSSCOMPILING OFF CACHE BOOL "") + endif() + + string(APPEND CMAKE_C_FLAGS_INIT " -fPIC ${VCPKG_C_FLAGS} ") + string(APPEND CMAKE_CXX_FLAGS_INIT " -fPIC ${VCPKG_CXX_FLAGS} ") + string(APPEND CMAKE_C_FLAGS_DEBUG_INIT " ${VCPKG_C_FLAGS_DEBUG} ") + string(APPEND CMAKE_CXX_FLAGS_DEBUG_INIT " ${VCPKG_CXX_FLAGS_DEBUG} ") + string(APPEND CMAKE_C_FLAGS_RELEASE_INIT " ${VCPKG_C_FLAGS_RELEASE} ") + string(APPEND CMAKE_CXX_FLAGS_RELEASE_INIT " ${VCPKG_CXX_FLAGS_RELEASE} ") + + # Use LLVM's lld linker + set(CMAKE_LINKER_TYPE LLD) + + string(APPEND CMAKE_MODULE_LINKER_FLAGS_INIT " ${VCPKG_LINKER_FLAGS} ") + string(APPEND CMAKE_SHARED_LINKER_FLAGS_INIT " ${VCPKG_LINKER_FLAGS} ") + string(APPEND CMAKE_EXE_LINKER_FLAGS_INIT " ${VCPKG_LINKER_FLAGS} ") + if(VCPKG_CRT_LINKAGE STREQUAL "static") + string(APPEND CMAKE_MODULE_LINKER_FLAGS_INIT "-static ") + string(APPEND CMAKE_SHARED_LINKER_FLAGS_INIT "-static ") + string(APPEND CMAKE_EXE_LINKER_FLAGS_INIT "-static ") + endif() + string(APPEND CMAKE_MODULE_LINKER_FLAGS_DEBUG_INIT " ${VCPKG_LINKER_FLAGS_DEBUG} ") + string(APPEND CMAKE_SHARED_LINKER_FLAGS_DEBUG_INIT " ${VCPKG_LINKER_FLAGS_DEBUG} ") + string(APPEND CMAKE_EXE_LINKER_FLAGS_DEBUG_INIT " ${VCPKG_LINKER_FLAGS_DEBUG} ") + string(APPEND CMAKE_MODULE_LINKER_FLAGS_RELEASE_INIT " ${VCPKG_LINKER_FLAGS_RELEASE} ") + string(APPEND CMAKE_SHARED_LINKER_FLAGS_RELEASE_INIT " ${VCPKG_LINKER_FLAGS_RELEASE} ") + string(APPEND CMAKE_EXE_LINKER_FLAGS_RELEASE_INIT " ${VCPKG_LINKER_FLAGS_RELEASE} ") + string(APPEND CMAKE_ASM_FLAGS_INIT " ${VCPKG_C_FLAGS} ") +endif() diff --git a/tools/bc_diff/bc_diff.cpp b/tools/bc_diff/bc_diff.cpp index f6e6753b..51ea7b28 100644 --- a/tools/bc_diff/bc_diff.cpp +++ b/tools/bc_diff/bc_diff.cpp @@ -1,5 +1,7 @@ #include "bc_diff.h" +#include #include +#include #include #include #include diff --git a/tools/file_to_c/file_to_c.cpp b/tools/file_to_c/file_to_c.cpp index 4a9eb490..8a999784 100644 --- a/tools/file_to_c/file_to_c.cpp +++ b/tools/file_to_c/file_to_c.cpp @@ -22,6 +22,7 @@ SOFTWARE. */ +#include #include #include #include