webgpu-engine/CMakeLists.txt
2026-05-14 14:32:37 +01:00

48 lines
1.4 KiB
CMake

cmake_minimum_required(VERSION 3.22)
project(webgpu)
set(CMAKE_CXX_STANDARD 20)
# Compile commands for dev
set(CMAKE_EXPORT_COMPILE_COMMANDS ON CACHE INTERNAL "")
if(CMAKE_EXPORT_COMPILE_COMMANDS)
set(CMAKE_C_STANDARD_INCLUDE_DIRECTORIES
${CMAKE_C_IMPLICIT_INCLUDE_DIRECTORIES})
endif()
# Binaries
add_executable( ${PROJECT_NAME} )
target_include_directories(${PROJECT_NAME} PUBLIC
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include/>
$<INSTALL_INTERFACE:include/>
)
file(GLOB_RECURSE SOURCE_FILES
${CMAKE_SOURCE_DIR}/src/*.cpp)
target_sources(${PROJECT_NAME} PRIVATE ${SOURCE_FILES})
# Error on memory address issues in debug mode
if(CMAKE_BUILD_TYPE MATCHES "Debug")
set(CMAKE_C_FLAGS
"${CMAKE_C_FLAGS} -Werror -fsanitize=undefined -fsanitize=address"
)
target_link_options(${PROJECT_NAME}
BEFORE PUBLIC -fsanitize=undefined PUBLIC -fsanitize=address
)
endif()
# Dawn library set up
# If we're in debug mode fast linking is the priority over easy distribution.
if(CMAKE_BUILD_TYPE MATCHES "Debug")
set(DAWN_BUILD_MONOLITHIC_LIBRARY "SHARED")
endif()
set(DAWN_FETCH_DEPENDENCIES ON)
add_subdirectory("extern/dawn" EXCLUDE_FROM_ALL)
# Linking
if(EMSCRIPTEN)
set_target_properties(app PROPERTIES SUFFIX ".html")
target_link_libraries(app PRIVATE emdawnwebgpu_cpp webgpu_glfw)
target_link_options(app PRIVATE "-sASYNCIFY=1" "-sUSE_GLFW=3")
else()
target_link_libraries(${PROJECT_NAME} PRIVATE webgpu_dawn webgpu_glfw glfw)
endif()