cmake_minimum_required(VERSION 3.25) project(mikemon VERSION 0.1 LANGUAGES CXX C) set(CMAKE_C_STANDARD 23) set(CMAKE_C_EXTENSIONS OFF) set(CMAKE_CXX_STANDARD 20) set(CMAKE_CXX_EXTENSIONS OFF) set(CMAKE_DISABLE_PRECOMPILE_HEADERS ON) option(TRACY_ENABLE "Enable Tracy profiling" OFF) # glm add_subdirectory(libs/glm) target_compile_definitions(glm PUBLIC GLM_FORCE_SWIZZLE GLM_FORCE_XYZW_ONLY) # SDL set(SDL_SHARED OFF) set(SDL_STATIC ON) add_subdirectory(libs/SDL3) # wgpu add_subdirectory(libs/wgpu) # SDL3_mixer set(BUILD_SHARED_LIBS ${SDL_SHARED}) set(SDLMIXER_DEPS_SHARED OFF) set(SDLMIXER_VENDORED ON) set(SDLMIXER_OPUS ON) set(SDLMIXER_VORBIS_VORBISFILE OFF) set(SDLMIXER_AIFF OFF) set(SDLMIXER_WAVE OFF) set(SDLMIXER_VOC OFF) set(SDLMIXER_AU OFF) set(SDLMIXER_FLAC OFF) set(SDLMIXER_GME OFF) set(SDLMIXER_MOD OFF) set(SDLMIXER_MP3 OFF) set(SDLMIXER_MIDI OFF) set(SDLMIXER_WAVPACK OFF) add_subdirectory(libs/SDL3_mixer) # Dear ImGui add_library(imgui STATIC libs/imgui/imgui.cpp libs/imgui/imgui_draw.cpp libs/imgui/imgui_demo.cpp libs/imgui/imgui_tables.cpp libs/imgui/imgui_widgets.cpp libs/imgui/backends/imgui_impl_sdl3.cpp libs/dcimgui/dcimgui.cpp libs/dcimgui/dcimgui_internal.cpp libs/dcimgui/backends/dcimgui_impl_sdl3.cpp ) target_include_directories(imgui PUBLIC libs/imgui libs/dcimgui libs/imgui/backends ) target_link_libraries(imgui PRIVATE SDL3::SDL3) # Dear ImGui WGPU backend add_library(imgui_wgpu STATIC libs/imgui/backends/imgui_impl_wgpu.cpp libs/dcimgui/backends/dcimgui_impl_wgpu.cpp ) target_include_directories(imgui_wgpu PUBLIC libs/imgui/backends libs/dcimgui/backends ) target_link_libraries(imgui_wgpu PRIVATE imgui wgpu) target_compile_definitions(imgui_wgpu PRIVATE IMGUI_IMPL_WEBGPU_BACKEND_WGPU=1) # Dear ImGui SDLGPU backend add_library(imgui_sdlgpu STATIC libs/imgui/backends/imgui_impl_sdlgpu3.cpp libs/dcimgui/backends/dcimgui_impl_sdlgpu3.cpp ) target_include_directories(imgui_sdlgpu PUBLIC libs/imgui/backends libs/dcimgui/backends ) target_link_libraries(imgui_sdlgpu PRIVATE imgui SDL3::SDL3) # stb_image add_library(stb_image STATIC libs/stb/stb_image.c) target_include_directories(stb_image INTERFACE libs/stb) # tracy option(TRACY_ONLY_LOCALHOST "" ON) add_subdirectory(libs/tracy) # shaders find_program(SLANGC_EXECUTABLE slangc) set(SHADERS_SPV "") set(SHADERS_WGSL "") function(add_shader name) if(SLANGC_EXECUTABLE) add_custom_command(OUTPUT "${CMAKE_CURRENT_SOURCE_DIR}/src/shaders/spirv/${name}.spv" DEPFILE "${CMAKE_CURRENT_BINARY_DIR}/${name}-spv.dep" COMMAND "${SLANGC_EXECUTABLE}" -depfile "${CMAKE_CURRENT_BINARY_DIR}/${name}-spv.dep" "${CMAKE_CURRENT_SOURCE_DIR}/src/shaders/src/${name}.slang" -o "${CMAKE_CURRENT_SOURCE_DIR}/src/shaders/spirv/${name}.spv" -target spirv -profile spirv_1_0) add_custom_command(OUTPUT "${CMAKE_CURRENT_SOURCE_DIR}/src/shaders/wgsl/${name}.wgsl" DEPFILE "${CMAKE_CURRENT_BINARY_DIR}/${name}-wgsl.dep" COMMAND "${SLANGC_EXECUTABLE}" -depfile "${CMAKE_CURRENT_BINARY_DIR}/${name}-wgsl.dep" "${CMAKE_CURRENT_SOURCE_DIR}/src/shaders/src/${name}.slang" -o "${CMAKE_CURRENT_SOURCE_DIR}/src/shaders/wgsl/${name}.wgsl" -target wgsl -D__wgsl__) endif() set(SHADERS_SPV ${SHADERS_SPV} "${CMAKE_CURRENT_SOURCE_DIR}/src/shaders/spirv/${name}.spv" PARENT_SCOPE) set(SHADERS_WGSL ${SHADERS_WGSL} "${CMAKE_CURRENT_SOURCE_DIR}/src/shaders/wgsl/${name}.wgsl" PARENT_SCOPE) endfunction() add_shader(character) add_shader(character_shadow) add_shader(world) add_shader(placeable) add_shader(grid) add_custom_target(shaders-spv DEPENDS ${SHADERS_SPV}) add_custom_target(shaders-wgsl DEPENDS ${SHADERS_WGSL}) # game add_executable(mikemon src/smol-atlas.cpp src/change_directory.c src/renderer_wgpu.c src/main.cpp ) target_link_libraries(mikemon PRIVATE glm SDL3::SDL3 SDL3_mixer::SDL3_mixer stb_image imgui imgui_wgpu TracyClient wgpu ) add_dependencies(mikemon shaders-wgsl) add_executable(mikemon-sdlgpu src/smol-atlas.cpp src/change_directory.c src/renderer_sdlgpu.c src/main.cpp ) target_link_libraries(mikemon-sdlgpu PRIVATE glm SDL3::SDL3 SDL3_mixer::SDL3_mixer stb_image imgui imgui_sdlgpu TracyClient wgpu ) add_dependencies(mikemon-sdlgpu shaders-spv)