cmake_minimum_required(VERSION 3.22) project(webgpu-engine) 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() add_executable(${PROJECT_NAME}) # Error on memory address issues in debug mode if(CMAKE_BUILD_TYPE MATCHES "Debug") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Werror -fsanitize=undefined -fsanitize=address" ) target_link_options(${PROJECT_NAME} BEFORE PUBLIC -fsanitize=undefined PUBLIC -fsanitize=address ) endif() # Dawn library setup find_package(Threads REQUIRED) find_package(Dawn) if (NOT Dawn_FOUND) if(CMAKE_BUILD_TYPE MATCHES "Debug") set(DAWN_BUILD_MONOLITHIC_LIBRARY "SHARED") endif() set(DAWN_FETCH_DEPENDENCIES ON CACHE BOOL "" FORCE) # Prevent Dawn from building excessive tools/samples to save compile time set(DAWN_BUILD_SAMPLES OFF CACHE BOOL "" FORCE) set(DAWN_ENABLE_INSTALL OFF CACHE BOOL "" FORCE) add_subdirectory("extern/dawn" EXCLUDE_FROM_ALL) set(DAWN_LINK_TARGET webgpu_dawn) else() set(DAWN_LINK_TARGET dawn::webgpu_dawn) endif() # Find SDL3 Packages find_package(SDL3 REQUIRED) find_package(SDL3_image REQUIRED) set(SDL3_image_LIBRARIES SDL3_image::SDL3_image) # Force the 'webgpu' dependency expected by sdl3webgpu to point to Dawn instead if(NOT TARGET webgpu) add_library(webgpu ALIAS ${DAWN_LINK_TARGET}) endif() # Configure and include sdl3webgpu add_subdirectory(extern/sdl3webgpu) # Include directories target_include_directories(${PROJECT_NAME} PUBLIC $ $ ${SDL3_INCLUDE_DIRS} ${SDL3_image_INCLUDE_DIRS} ) file(GLOB_RECURSE SOURCE_FILES ${CMAKE_SOURCE_DIR}/src/*.cpp) target_sources(${PROJECT_NAME} PRIVATE ${SOURCE_FILES}) # Linking Layer if(EMSCRIPTEN) # Note: your target is ${PROJECT_NAME}, updated 'app' references to match set_target_properties(${PROJECT_NAME} PROPERTIES SUFFIX ".html") target_link_libraries(${PROJECT_NAME} PRIVATE emdawnwebgpu_cpp webgpu_glfw) target_link_options(${PROJECT_NAME} PRIVATE "-sASYNCIFY=1" "-sUSE_GLFW=3") else() target_link_libraries(${PROJECT_NAME} PRIVATE ${DAWN_LINK_TARGET} sdl3webgpu SDL3::SDL3 ${SDL3_image_LIBRARIES} ) endif()