Mikemon/CMakeLists.txt
2025-04-13 13:05:06 +02:00

110 lines
2.5 KiB
CMake

cmake_minimum_required(VERSION 3.25)
project(mikemon VERSION 0.1 LANGUAGES CXX C)
set(CMAKE_C_STANDARD 11)
set(CMAKE_C_EXTENSIONS OFF)
set(CMAKE_CXX_STANDARD 20)
set(CMAKE_CXX_EXTENSIONS OFF)
option(TRACY_ENABLE "Enable Tracy profiling" OFF)
# SDL
set(SDL_SHARED OFF)
set(SDL_STATIC ON)
add_subdirectory(libs/SDL3)
# SDL_mixer
set(BUILD_SHARED_LIBS ${SDL_SHARED})
set(SDLMIXER_DEPS_SHARED OFF)
set(SDLMIXER_VENDORED ON)
set(SDLMIXER_FLAC OFF)
set(SDLMIXER_GME OFF)
set(SDLMIXER_MIDI OFF)
set(SDLMIXER_MOD OFF)
set(SDLMIXER_MP3 OFF)
set(SDLMIXER_OPUS ON)
set(SDLMIXER_VORBIS OFF)
set(SDLMIXER_WAVE ON)
set(SDLMIXER_WAVPACK OFF)
add_subdirectory(libs/SDL_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/imgui/backends/imgui_impl_sdlgpu3.cpp
)
target_include_directories(imgui PUBLIC
libs/imgui
libs/imgui/backends
)
target_link_libraries(imgui PRIVATE SDL3::SDL3)
# Shaders
find_program(SLANGC
NAMES slangc
PATHS /opt/shader-slang-bin/bin
)
# 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)
function(add_shader name)
set(INPUT_FILE ${CMAKE_CURRENT_SOURCE_DIR}/src/shaders/${name}.slang)
set(OUTPUT_FILE ${CMAKE_CURRENT_SOURCE_DIR}/src/shaders/${name}.h)
set(DEP_FILE ${CMAKE_CURRENT_BINARY_DIR}/SHADER_${name}.dep)
if (SLANGC)
if (CMAKE_BUILD_TYPE STREQUAL "Debug")
set(SLANG_FLAGS -g3 -O0)
else()
set(SLANG_FLAGS -O3)
endif()
add_custom_command(
OUTPUT ${OUTPUT_FILE}
COMMAND ${SLANGC} -target spirv -validate-uniformity -o ${OUTPUT_FILE} -depfile ${DEP_FILE} -source-embed-style u8 -source-embed-name SPIRV_${name} ${SLANG_FLAGS} -- ${INPUT_FILE}
DEPFILE ${DEP_FILE}
)
endif()
add_custom_target(SHADER_${name}
DEPENDS ${OUTPUT_FILE}
)
endfunction()
add_shader(basic)
add_shader(world)
add_shader(gui_tile)
add_shader(grid)
add_executable(mikemon
src/log.cpp
src/smol-atlas.cpp
src/math_graphics.cpp
src/main.cpp
)
target_link_libraries(mikemon
PRIVATE
SDL3::SDL3
SDL3_mixer::SDL3_mixer
stb_image
imgui
TracyClient
)
add_dependencies(mikemon
SHADER_basic
SHADER_world
SHADER_gui_tile
SHADER_grid
)