Skip to content

Commit

Permalink
cmake tweaks
Browse files Browse the repository at this point in the history
  • Loading branch information
skallweitNV committed Sep 23, 2024
1 parent b53737e commit 2139b65
Showing 1 changed file with 70 additions and 62 deletions.
132 changes: 70 additions & 62 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -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}/$<CONFIG>)
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)
Expand Down Expand Up @@ -41,17 +48,22 @@ 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)
cmake_dependent_option(SLANG_RHI_ENABLE_METAL "Enable Metal backend" ON "SLANG_RHI_HAS_METAL" OFF)
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")
Expand Down Expand Up @@ -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")
Expand All @@ -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}/$<CONFIG>)
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 $<$<CXX_COMPILER_ID:AppleClang>:-Wall>) # -Wextra -Wpedantic -Wno-unused-parameter -Wno-missing-field-initializer
Expand Down Expand Up @@ -162,42 +194,13 @@ 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()

file(GLOB RHI_SOURCES
src/*.cpp
src/core/*.cpp
src/cpu/*.cpp
src/debug-layer/*.cpp
)
target_sources(slang-rhi PRIVATE ${RHI_SOURCES})
Expand All @@ -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})
Expand Down Expand Up @@ -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=$<BOOL:${SLANG_RHI_ENABLE_CPU}>
SLANG_RHI_ENABLE_D3D11=$<BOOL:${SLANG_RHI_ENABLE_D3D11}>
SLANG_RHI_ENABLE_D3D12=$<BOOL:${SLANG_RHI_ENABLE_D3D12}>
SLANG_RHI_ENABLE_VULKAN=$<BOOL:${SLANG_RHI_ENABLE_VULKAN}>
Expand Down

0 comments on commit 2139b65

Please sign in to comment.