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 $ $ ) 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()