71 lines
2.3 KiB
CMake
Raw Normal View History

2025-07-09 03:16:40 +02:00
cmake_minimum_required(VERSION 4.0)
project(example_project VERSION 1.0 LANGUAGES CXX)
set(CMAKE_CXX_STANDARD 26)
set(VCPKG_TARGET_ARCHITECTURE wasm32)
set(VCPKG_TARGET_TRIPLET wasm32-emscripten)
set(CMAKE_EXECUTABLE_SUFFIX ".html")
if (MSVC)
add_compile_options(/W4)
add_compile_options(/WX)
add_compile_options(/external:anglebrackets)
add_compile_options(/external:W0)
add_compile_options(/wd4100)
add_compile_options(/wd5050)
add_definitions(-DWIN32_LEAN_AND_MEAN -DVC_EXTRALEAN)
add_compile_definitions(WIN32_LEAN_AND_MEAN NOMINMAX)
else ()
add_compile_options(-Wall)
add_compile_options(-Wextra)
add_compile_options(-Wpedantic)
add_compile_options(-Werror)
endif ()
if (DEFINED VCPKG_INSTALLED_DIR)
elseif (DEFINED ENV{VCPKG_ROOT})
include($ENV{VCPKG_ROOT}/scripts/buildsystems/vcpkg.cmake)
else ()
message(FATAL_ERROR "VCPKG is not loaded, set VCPKG_ROOT to automatically load it or specify the cmake toolchain")
endif ()
set(${PROJECT_NAME}_src src/main.cpp)
add_executable(${PROJECT_NAME} ${${PROJECT_NAME}_src})
# Configure Emscripten to preload the data folder
if(EMSCRIPTEN)
# Check if data folder exists and has content before preloading
file(GLOB_RECURSE DATA_FILES "${CMAKE_SOURCE_DIR}/data/*")
set_target_properties(${PROJECT_NAME} PROPERTIES
LINK_FLAGS "--preload-file ${CMAKE_SOURCE_DIR}/data@/"
SUFFIX ".html"
)
if(DATA_FILES)
message(STATUS "Preloading data folder with ${CMAKE_SOURCE_DIR}/data")
else()
message(STATUS "Data folder is empty ${CMAKE_SOURCE_DIR}/data")
endif()
endif()
find_package(SDL3 CONFIG REQUIRED)
target_link_libraries(${PROJECT_NAME} PRIVATE SDL3::SDL3)
find_package(Catch2 CONFIG 3 REQUIRED)
file(GLOB_RECURSE tests_${PROJECT_NAME}_src CONFIGURE_DEPENDS tests/*.cppm tests/*/*.cppm)
add_executable(tests_${PROJECT_NAME} ${tests_${PROJECT_NAME}_src})
target_link_libraries(tests_${PROJECT_NAME} PRIVATE Catch2::Catch2 Catch2::Catch2WithMain SDL3::SDL3)
include(CTest)
include(Catch)
catch_discover_tests(tests_${PROJECT_NAME})
enable_testing()
add_custom_target(serve
COMMAND python3 ${CMAKE_SOURCE_DIR}/serve.py 5245
WORKING_DIRECTORY ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}
COMMENT "Serving WebAssembly files at http://localhost:5245"
USES_TERMINAL
)