From 2139b652216f1b92b9c726a32d20ebf240949965 Mon Sep 17 00:00:00 2001 From: Simon Kallweit Date: Mon, 23 Sep 2024 22:22:31 +0200 Subject: [PATCH] cmake tweaks --- CMakeLists.txt | 132 ++++++++++++++++++++++++++----------------------- 1 file changed, 70 insertions(+), 62 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 57e86c8..53e748a 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -2,17 +2,24 @@ cmake_minimum_required(VERSION 3.20) project(slang-rhi) -include(CMakeDependentOption) - # Add the cmake directory to the module path. list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake") +include(CMakeDependentOption) +include(FetchPackage) + # Check if this project is the master cmake project (i.e. not included via add_subdirectory). set(SLANG_RHI_MASTER_PROJECT OFF) if (${CMAKE_CURRENT_SOURCE_DIR} STREQUAL ${CMAKE_SOURCE_DIR}) set(SLANG_RHI_MASTER_PROJECT ON) endif() +if(CMAKE_CONFIGURATION_TYPES) + set(SLANG_RHI_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/$) +else() + set(SLANG_RHI_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}) +endif() + # Configuration options option(SLANG_RHI_BUILD_SHARED "Build shared library" OFF) option(SLANG_RHI_BUILD_TESTS "Build tests" ON) @@ -41,6 +48,7 @@ elseif(CMAKE_SYSTEM_NAME STREQUAL "Darwin") endif() # Backend options +option(SLANG_RHI_ENABLE_CPU "Enable CPU backend" ON) cmake_dependent_option(SLANG_RHI_ENABLE_D3D11 "Enable D3D11 backend" ON "SLANG_RHI_HAS_D3D11" OFF) cmake_dependent_option(SLANG_RHI_ENABLE_D3D12 "Enable D3D12 backend" ON "SLANG_RHI_HAS_D3D12" OFF) cmake_dependent_option(SLANG_RHI_ENABLE_VULKAN "Enable Vulkan backend" ON "SLANG_RHI_HAS_VULKAN" OFF) @@ -48,10 +56,14 @@ cmake_dependent_option(SLANG_RHI_ENABLE_METAL "Enable Metal backend" ON "SLANG_R cmake_dependent_option(SLANG_RHI_ENABLE_CUDA "Enable CUDA backend" ON "SLANG_RHI_HAS_CUDA" OFF) cmake_dependent_option(SLANG_RHI_ENABLE_WGPU "Enable WebGPU backend" ON "SLANG_RHI_HAS_WGPU" OFF) -# If this is the master project, fetch binary dependencies. +if(SLANG_RHI_BUILD_SHARED) + add_library(slang-rhi SHARED) +else() + add_library(slang-rhi STATIC) +endif() + +# Fetch slang binary release if this is the master project if(SLANG_RHI_MASTER_PROJECT) - include(FetchPackage) - # Fetch slang set(SLANG_VERSION "2024.11.1") set(SLANG_URL "https://github.com/shader-slang/slang/releases/download/v${SLANG_VERSION}/slang-${SLANG_VERSION}") if(CMAKE_SYSTEM_NAME STREQUAL "Windows") @@ -84,23 +96,6 @@ if(SLANG_RHI_MASTER_PROJECT) # set(AGILITY_SDK_VERSION "1.611.2") # FetchPackage(agility_sdk URL "https://www.nuget.org/api/v2/package/Microsoft.Direct3D.D3D12/${AGILITY_SDK_VERSION}") endif() - - # Fetch Google Dawn - if(SLANG_RHI_ENABLE_WGPU) - set(DAWN_VERSION "129.0.6728") - set(DAWN_URL "https://github.com/skallweitNV/webgpu-dawn-binaries/releases/download/v${DAWN_VERSION}.0/webgpu-dawn-${DAWN_VERSION}") - if(CMAKE_SYSTEM_NAME STREQUAL "Windows") - set(DAWN_URL "${DAWN_URL}-win64.zip") - elseif(CMAKE_SYSTEM_NAME STREQUAL "Linux") - set(DAWN_URL "${DAWN_URL}-Linux.zip") - elseif(CMAKE_SYSTEM_NAME STREQUAL "Darwin") - set(DAWN_URL "${DAWN_URL}-Darwin.zip") - endif() - FetchPackage(dawn URL ${DAWN_URL}) - set(SLANG_RHI_DAWN_INCLUDE_DIR ${dawn_SOURCE_DIR}/include) - set(SLANG_RHI_DAWN_LIB_DIR ${dawn_SOURCE_DIR}/lib) - set(SLANG_RHI_DAWN_BIN_DIR ${dawn_SOURCE_DIR}/bin) - endif() endif() set(SLANG_RHI_SLANG_INCLUDE_DIR ${SLANG_RHI_SLANG_INCLUDE_DIR} CACHE STRING "Slang include directory") @@ -109,20 +104,57 @@ set(SLANG_RHI_SLANG_BINARY_DIR ${SLANG_RHI_SLANG_BINARY_DIR} CACHE STRING "Slang unset(SLANG_RHI_SLANG_INCLUDE_DIR) unset(SLANG_RHI_SLANG_BINARY_DIR) -if(APPLE) - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-assume -Wno-switch") -endif() +# Fetch and setup Google Dawn library (WebGPU implementation) +if(SLANG_RHI_ENABLE_WGPU) + set(DAWN_VERSION "129.0.6728") + set(DAWN_URL "https://github.com/skallweitNV/webgpu-dawn-binaries/releases/download/v${DAWN_VERSION}.0/webgpu-dawn-${DAWN_VERSION}") + if(CMAKE_SYSTEM_NAME STREQUAL "Windows") + set(DAWN_URL "${DAWN_URL}-win64.zip") + elseif(CMAKE_SYSTEM_NAME STREQUAL "Linux") + set(DAWN_URL "${DAWN_URL}-Linux.zip") + elseif(CMAKE_SYSTEM_NAME STREQUAL "Darwin") + set(DAWN_URL "${DAWN_URL}-Darwin.zip") + endif() + FetchPackage(dawn URL ${DAWN_URL}) + set(SLANG_RHI_DAWN_INCLUDE_DIR ${dawn_SOURCE_DIR}/include CACHE STRING "Dawn include directory") + set(SLANG_RHI_DAWN_LIB_DIR ${dawn_SOURCE_DIR}/lib CACHE STRING "Dawn lib directory") + set(SLANG_RHI_DAWN_BIN_DIR ${dawn_SOURCE_DIR}/bin CACHE STRING "Dawn bin directory") + # Use the variables from the cache. + unset(SLANG_RHI_DAWN_INCLUDE_DIR) + unset(SLANG_RHI_DAWN_LIB_DIR) + unset(SLANG_RHI_DAWN_BIN_DIR) -if(CMAKE_CONFIGURATION_TYPES) - set(SLANG_RHI_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/$) -else() - set(SLANG_RHI_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}) + add_library(slang-rhi-dawn SHARED IMPORTED GLOBAL) + if(CMAKE_SYSTEM_NAME STREQUAL "Windows") + set_target_properties(slang-rhi-dawn PROPERTIES + INTERFACE_INCLUDE_DIRECTORIES ${SLANG_RHI_DAWN_INCLUDE_DIR} + IMPORTED_IMPLIB ${SLANG_RHI_DAWN_LIB_DIR}/dawn.lib + IMPORTED_LOCATION ${SLANG_RHI_DAWN_BIN_DIR}/dawn.dll + ) + add_custom_command( + OUTPUT ${SLANG_RHI_OUTPUT_DIRECTORY}/dawn.dll + DEPENDS ${SLANG_RHI_DAWN_BIN_DIR}/dawn.dll + COMMAND ${CMAKE_COMMAND} -E copy ${SLANG_RHI_DAWN_BIN_DIR}/dawn.dll ${SLANG_RHI_OUTPUT_DIRECTORY}/ + COMMENT "Copy Dawn DLLs" + ) + add_custom_target(slang-rhi-copy-dawn ALL DEPENDS ${SLANG_RHI_OUTPUT_DIRECTORY}/dawn.dll) + add_dependencies(slang-rhi slang-rhi-copy-dawn) + elseif(CMAKE_SYSTEM_NAME STREQUAL "Linux") + set_target_properties(slang-rhi-dawn PROPERTIES + INTERFACE_INCLUDE_DIRECTORIES ${SLANG_RHI_DAWN_INCLUDE_DIR} + IMPORTED_LOCATION ${SLANG_RHI_DAWN_LIB_DIR}64/libdawn.so + ) + elseif(CMAKE_SYSTEM_NAME STREQUAL "Darwin") + set_target_properties(slang-rhi-dawn PROPERTIES + INTERFACE_INCLUDE_DIRECTORIES ${SLANG_RHI_DAWN_INCLUDE_DIR} + IMPORTED_LOCATION ${SLANG_RHI_DAWN_LIB_DIR}/libdawn.dylib + ) + endif() + target_link_libraries(slang-rhi PUBLIC slang-rhi-dawn) endif() -if(SLANG_RHI_BUILD_SHARED) - add_library(slang-rhi SHARED) -else() - add_library(slang-rhi STATIC) +if(APPLE) + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-assume -Wno-switch") endif() # target_compile_options(slang-rhi PRIVATE $<$:-Wall>) # -Wextra -Wpedantic -Wno-unused-parameter -Wno-missing-field-initializer @@ -162,34 +194,6 @@ if(SLANG_RHI_MASTER_PROJECT) add_custom_target(slang-rhi-copy-binaries ALL DEPENDS ${SLANG_RHI_OUTPUT_DIRECTORY}/slang.dll) add_dependencies(slang slang-rhi-copy-binaries) endif() - - if(SLANG_RHI_ENABLE_WGPU) - add_library(dawn SHARED IMPORTED GLOBAL) - if(CMAKE_SYSTEM_NAME STREQUAL "Windows") - set_target_properties(dawn PROPERTIES - INTERFACE_INCLUDE_DIRECTORIES ${SLANG_RHI_DAWN_INCLUDE_DIR} - IMPORTED_IMPLIB ${SLANG_RHI_DAWN_LIB_DIR}/dawn.lib - IMPORTED_LOCATION ${SLANG_RHI_DAWN_BIN_DIR}/dawn.dll - ) - # hacky way to copy the dawn.dll to the output directory - add_custom_command( - OUTPUT ${SLANG_RHI_OUTPUT_DIRECTORY}/slang.dll - COMMAND ${CMAKE_COMMAND} -E copy ${SLANG_RHI_DAWN_BIN_DIR}/dawn.dll ${SLANG_RHI_OUTPUT_DIRECTORY}/ - APPEND - ) - elseif(CMAKE_SYSTEM_NAME STREQUAL "Linux") - set_target_properties(dawn PROPERTIES - INTERFACE_INCLUDE_DIRECTORIES ${SLANG_RHI_DAWN_INCLUDE_DIR} - IMPORTED_LOCATION ${SLANG_RHI_DAWN_LIB_DIR}64/libdawn.so - ) - elseif(CMAKE_SYSTEM_NAME STREQUAL "Darwin") - set_target_properties(dawn PROPERTIES - INTERFACE_INCLUDE_DIRECTORIES ${SLANG_RHI_DAWN_INCLUDE_DIR} - IMPORTED_LOCATION ${SLANG_RHI_DAWN_LIB_DIR}/libdawn.dylib - ) - endif() - target_link_libraries(slang-rhi PUBLIC dawn) - endif() else() target_include_directories(slang-rhi PUBLIC ${SLANG_RHI_SLANG_INCLUDE_DIR}) endif() @@ -197,7 +201,6 @@ endif() file(GLOB RHI_SOURCES src/*.cpp src/core/*.cpp - src/cpu/*.cpp src/debug-layer/*.cpp ) target_sources(slang-rhi PRIVATE ${RHI_SOURCES}) @@ -206,6 +209,10 @@ if(APPLE) file(GLOB OBJC_SOURCES src/*.mm) target_sources(slang-rhi PRIVATE ${OBJC_SOURCES}) endif() +if(SLANG_RHI_ENABLE_CPU) + file(GLOB CPU_SOURCES src/cpu/*.cpp) + target_sources(slang-rhi PRIVATE ${CPU_SOURCES}) +endif() if(SLANG_RHI_ENABLE_D3D11 OR SLANG_RHI_HAS_D3D12) file(GLOB D3D_SOURCES src/d3d/*.cpp src/nvapi/*.cpp) target_sources(slang-rhi PRIVATE ${D3D_SOURCES}) @@ -248,6 +255,7 @@ target_include_directories(slang-rhi PUBLIC include) target_include_directories(slang-rhi PRIVATE src) target_compile_definitions(slang-rhi PRIVATE + SLANG_RHI_ENABLE_CPU=$ SLANG_RHI_ENABLE_D3D11=$ SLANG_RHI_ENABLE_D3D12=$ SLANG_RHI_ENABLE_VULKAN=$