platform-game/CMakeLists.txt
Andras Schmelczer c9b542eccf
All checks were successful
Build & deploy web version / Build WebAssembly & deploy (push) Successful in 1m8s
Migrate to SDL2 and deploy as WASM
2026-08-09 20:00:56 +01:00

79 lines
3 KiB
CMake

cmake_minimum_required(VERSION 3.21)
project(platform_game C)
set(CMAKE_C_STANDARD 11)
set(CMAKE_C_STANDARD_REQUIRED ON)
if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES)
set(CMAKE_BUILD_TYPE Release CACHE STRING "Build type" FORCE)
endif()
option(GAME_VENDOR_SDL "Build pinned SDL2/SDL2_ttf from source instead of using system packages" ON)
set(GAME_SRC "${CMAKE_CURRENT_SOURCE_DIR}/Forráskód")
file(GLOB_RECURSE GAME_SOURCES CONFIGURE_DEPENDS "${GAME_SRC}/*.c")
add_executable(game ${GAME_SOURCES})
target_include_directories(game PRIVATE "${GAME_SRC}")
target_compile_options(game PRIVATE -Wall)
if(EMSCRIPTEN)
set(GAME_EM_FLAGS "SHELL:-sUSE_SDL=2" "SHELL:-sUSE_SDL_TTF=2")
set(GAME_WEB_SHELL "${CMAKE_CURRENT_SOURCE_DIR}/web/shell.html")
set(GAME_WEB_PREJS "${CMAKE_CURRENT_SOURCE_DIR}/web/pre.js")
target_compile_options(game PRIVATE ${GAME_EM_FLAGS})
target_link_options(game PRIVATE
${GAME_EM_FLAGS}
"SHELL:-sALLOW_MEMORY_GROWTH=1"
"SHELL:-sEXIT_RUNTIME=0"
"SHELL:-sFORCE_FILESYSTEM=1"
"SHELL:-lidbfs.js"
"SHELL:--preload-file ${GAME_SRC}/resources@/resources"
"SHELL:--shell-file ${GAME_WEB_SHELL}"
"SHELL:--pre-js ${GAME_WEB_PREJS}"
)
set_target_properties(game PROPERTIES
OUTPUT_NAME index
SUFFIX ".html"
RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/web"
LINK_DEPENDS "${GAME_WEB_SHELL};${GAME_WEB_PREJS}"
)
elseif(GAME_VENDOR_SDL)
include(FetchContent)
set(FETCHCONTENT_QUIET OFF)
# As a subproject both libraries already default to no samples and no install
# rules, and BUILD_SHARED_LIBS=OFF is what turns SDL2 static-only, so these
# three are the only knobs that still differ from the defaults.
set(BUILD_SHARED_LIBS OFF CACHE BOOL "" FORCE)
set(SDL_TEST OFF CACHE BOOL "" FORCE)
set(SDL2TTF_VENDORED ON CACHE BOOL "" FORCE) # build freetype instead of finding it
FetchContent_Declare(SDL2
URL https://github.com/libsdl-org/SDL/releases/download/release-2.32.4/SDL2-2.32.4.tar.gz
URL_HASH SHA256=f15b478253e1ff6dac62257ded225ff4e7d0c5230204ac3450f1144ee806f934
)
FetchContent_Declare(SDL2_ttf
URL https://github.com/libsdl-org/SDL_ttf/releases/download/release-2.24.0/SDL2_ttf-2.24.0.tar.gz
URL_HASH SHA256=0b2bf1e7b6568adbdbc9bb924643f79d9dedafe061fa1ed687d1d9ac4e453bfd
)
FetchContent_MakeAvailable(SDL2 SDL2_ttf)
target_link_libraries(game PRIVATE SDL2::SDL2-static SDL2::SDL2main SDL2_ttf::SDL2_ttf-static)
else()
find_package(SDL2 REQUIRED)
find_package(SDL2_ttf REQUIRED)
target_link_libraries(game PRIVATE SDL2::SDL2 SDL2::SDL2main SDL2_ttf::SDL2_ttf)
endif()
if(NOT EMSCRIPTEN)
target_link_libraries(game PRIVATE m)
add_custom_command(TARGET game POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy_directory
"${GAME_SRC}/resources" "$<TARGET_FILE_DIR:game>/resources"
COMMAND ${CMAKE_COMMAND} -E make_directory "$<TARGET_FILE_DIR:game>/saves"
)
endif()