From 33e1214fe44c38ac110f14f35e960e6239c6531e Mon Sep 17 00:00:00 2001
From: Anonymous Maarten <[EMAIL REDACTED]>
Date: Sun, 27 Oct 2024 01:04:27 +0200
Subject: [PATCH] cmake: download, configure, build and install dependencies
---
.github/workflows/main.yml | 9 ++---
CMakeLists.txt | 73 ++++++++++++++++++++++++++++++++++++--
2 files changed, 76 insertions(+), 6 deletions(-)
diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml
index 2bc411b..348f857 100644
--- a/.github/workflows/main.yml
+++ b/.github/workflows/main.yml
@@ -15,10 +15,10 @@ jobs:
fail-fast: false
matrix:
platform:
- - { name: Windows (MSVC), os: windows-2019, shell: sh, msvc: true, artifact: 'SDL_gpu_shadercross-VC-x64' }
- - { name: Windows (mingw64), os: windows-latest, shell: 'msys2 {0}', msystem: mingw64, msys-env: mingw-w64-x86_64, artifact: 'SDL_gpu_shadercross-mingw64' }
- - { name: Linux, os: ubuntu-20.04, shell: sh, artifact: 'SDL_gpu_shadercross-linux-x64' }
- - { name: Macos, os: macos-latest, shell: sh, artifact: 'SDL_gpu_shadercross-macos-x64' }
+ - { name: Windows (MSVC), os: windows-2019, shell: sh, msvc: true, artifact: 'SDL3_gpu_shadercross-VC-x64' }
+ - { name: Windows (mingw64), os: windows-latest, shell: 'msys2 {0}', msystem: mingw64, msys-env: mingw-w64-x86_64, artifact: 'SDL3_gpu_shadercross-mingw64' }
+ - { name: Linux, os: ubuntu-20.04, shell: sh, artifact: 'SDL3_gpu_shadercross-linux-x64' }
+ - { name: Macos, os: macos-latest, shell: sh, artifact: 'SDL3_gpu_shadercross-macos-x64' }
steps:
@@ -57,6 +57,7 @@ jobs:
-DBUILD_CLI=ON \
-DENABLE_WERROR=ON \
-DENABLE_INSTALL=ON \
+ -DENABLE_DEPS=ON \
-DENABLE_INSTALL_CPACK=ON \
-DCMAKE_INSTALL_PREFIX=prefix
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 684ca94..08676cc 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -24,8 +24,11 @@ cmake_dependent_option(BUILD_CLI_STATIC "Link CLI with static libraries" OFF "BU
option(ENABLE_WERROR "Enable Werror" OFF)
option(ENABLE_INSTALL "Enable installation" OFF)
cmake_dependent_option(ENABLE_INSTALL_CPACK "Enable CPack installation" OFF "ENABLE_INSTALL" OFF)
+cmake_dependent_option(ENABLE_DEPS "Download, build and install dependencies" OFF "ENABLE_INSTALL" OFF)
sdl_calculate_derived_version_variables(${MAJOR_VERSION} ${MINOR_VERSION} ${MICRO_VERSION})
+SDL_DetectTargetCPUArchitectures(SDL_CPU_NAMES)
+SDL_DetectCMakePlatform()
# Platform Flags
if(APPLE)
@@ -203,8 +206,6 @@ if(ENABLE_INSTALL)
COMPONENT library
)
if(ENABLE_INSTALL_CPACK)
- SDL_DetectTargetCPUArchitectures(SDL_CPU_NAMES)
- SDL_DetectCMakePlatform()
if(MSVC)
set(CPACK_GENERATOR "ZIP")
else()
@@ -218,3 +219,71 @@ if(ENABLE_INSTALL)
include(CPack)
endif()
endif()
+
+set(DXC_LINUX_X64_URL "https://github.com/microsoft/DirectXShaderCompiler/releases/download/v1.8.2407/linux_dxc_2024_07_31.x86_64.tar.gz")
+set(DXC_LINUX_X64_HASH "SHA256=b58725ac191df0686994fb9d54d27ee8dd3f180b023d562733112a499ea1195c")
+set(DXC_WINDOWS_X86_X64_ARM64_URL "https://github.com/microsoft/DirectXShaderCompiler/releases/download/v1.8.2407/dxc_2024_07_31.zip")
+set(DXC_WINDOWS_X86_X64_ARM64_HASH "SHA256=e2627f004f0f9424d8c71ea1314d04f38c5a5096884ae9217f1f18bd320267b5")
+
+if(ENABLE_DEPS)
+ set(chmod_0755 OWNER_READ OWNER_WRITE OWNER_EXECUTE GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE)
+
+ # Install SDL3
+ if(BUILD_CLI AND NOT BUILD_CLI_STATIC)
+ if(WIN32)
+ install(FILES $<TARGET_FILE:SDL3::SDL3-shared> DESTINATION "${CMAKE_INSTALL_BINDIR}" PERMISSIONS ${chmod_0755})
+ else()
+ install(FILES $<TARGET_FILE:SDL3::SDL3-shared> $<TARGET_SONAME_FILE:SDL3::SDL3-shared> DESTINATION "${CMAKE_INSTALL_LIBDIR}" PERMISSIONS ${chmod_0755})
+ endif()
+ endif()
+
+ # Download and install prebuilt dxil and dxcompiler shared libraries
+ include(ExternalProject)
+ if(LINUX AND SDL_CPU_X64)
+ ExternalProject_Add(dxc
+ URL "${DXC_LINUX_X64_URL}"
+ URL_HASH "${DXC_LINUX_X64_HASH}"
+ DOWNLOAD_EXTRACT_TIMESTAMP "1"
+ CONFIGURE_COMMAND ""
+ BUILD_COMMAND ""
+ INSTALL_COMMAND ""
+ )
+ ExternalProject_Get_property(dxc SOURCE_DIR)
+ install(FILES "${SOURCE_DIR}/lib/libdxcompiler.so" "${SOURCE_DIR}/lib/libdxil.so" DESTINATION "${CMAKE_INSTALL_LIBDIR}" PERMISSIONS ${chmod_0755})
+ install(FILES "${SOURCE_DIR}/LICENSE-LLVM.txt" "${SOURCE_DIR}/LICENSE-MS.txt" DESTINATION "${CMAKE_INSTALL_DATAROOTDIR}/licenses/dxc")
+ elseif(WINDOWS AND (SDL_CPU_ARM64 OR SDL_CPU_X86 OR SDL_CPU_X64))
+ ExternalProject_Add(dxc
+ URL "${DXC_WINDOWS_X86_X64_ARM64_URL}"
+ URL_HASH "${DXC_WINDOWS_X86_X64_ARM64_HASH}"
+ DOWNLOAD_EXTRACT_TIMESTAMP "1"
+ CONFIGURE_COMMAND ""
+ BUILD_COMMAND ""
+ INSTALL_COMMAND ""
+ )
+ if(SDL_CPU_ARM64)
+ set(arch_dir "arm64")
+ elseif(SDL_CPU_X86)
+ set(arch_dir "x86")
+ elseif(SDL_CPU_X64)
+ set(arch_dir "x64")
+ endif()
+ ExternalProject_Get_property(dxc SOURCE_DIR)
+ install(FILES "${SOURCE_DIR}/bin/${arch_dir}/dxcompiler.dll" "${SOURCE_DIR}/bin/${arch_dir}/dxil.dll" DESTINATION "${CMAKE_INSTALL_BINDIR}" PERMISSIONS ${chmod_0755})
+ install(FILES "${SOURCE_DIR}/LICENSE-LLVM.txt" "${SOURCE_DIR}/LICENSE-MS.txt" "${SOURCE_DIR}/LICENSE-MIT.txt" DESTINATION "${CMAKE_INSTALL_DATAROOTDIR}/licenses/dxc")
+ endif()
+
+ # Download, configure, build and install spirv-cross
+ ExternalProject_Add(spirv_cross
+ GIT_REPOSITORY "https://github.com/KhronosGroup/SPIRV-Cross.git"
+ GIT_TAG "main"
+ CMAKE_ARGS "-DCMAKE_BUILD_TYPE=Release" "-DSPIRV_CROSS_SHARED=ON" "-DSPIRV_CROSS_STATIC=OFF" "-DSPIRV_CROSS_CLI=OFF" "-DSPIRV_CROSS_ENABLE_TESTS=OFF" "-DCMAKE_INSTALL_LIBDIR=lib" "-DCMAKE_INSTALL_BINDIR=bin" "-DCMAKE_INSTALL_PREFIX=<INSTALL_DIR>" "-DCMAKE_C_COMPILER=${CMAKE_C_COMPILER}" "-DCMAKE_TOOLCHAIN_FILE=${CMAKE_TOOLCHAIN_FILE}"
+ BUILD_COMMAND "${CMAKE_COMMAND}" "--build" "<BINARY_DIR>" --config "Release"
+ INSTALL_COMMAND "${CMAKE_COMMAND}" "--install" "<BINARY_DIR>" --config "Release"
+ )
+ ExternalProject_Get_property(spirv_cross INSTALL_DIR)
+ ExternalProject_Get_property(spirv_cross SOURCE_DIR)
+ install(FILES "${SOURCE_DIR}/LICENSE" DESTINATION "${CMAKE_INSTALL_DATAROOTDIR}/licenses/spirv-cross")
+ install(DIRECTORY "${INSTALL_DIR}/lib/" DESTINATION "${CMAKE_INSTALL_LIBDIR}" FILES_MATCHING PATTERN "*.so*" PERMISSIONS ${chmod_0755})
+ install(DIRECTORY "${INSTALL_DIR}/lib/" DESTINATION "${CMAKE_INSTALL_LIBDIR}" FILES_MATCHING PATTERN "*.dylib*" PERMISSIONS ${chmod_0755})
+ install(DIRECTORY "${INSTALL_DIR}/bin/" DESTINATION "${CMAKE_INSTALL_BINDIR}" FILES_MATCHING PATTERN "*.dll" PERMISSIONS ${chmod_0755})
+endif()