152 lines
4.4 KiB
CMake
152 lines
4.4 KiB
CMake
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)
|
|
|
|
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(basic)
|
|
add_shader(world)
|
|
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)
|