cmake_minimum_required(VERSION 3.20)
project(PrinceOnline C)
set(CMAKE_C_STANDARD 99)
find_package(Python3 REQUIRED COMPONENTS Interpreter)
execute_process(COMMAND ${Python3_EXECUTABLE} ${CMAKE_SOURCE_DIR}/tools/prepare_engine.py COMMAND_ERROR_IS_FATAL ANY)
file(GLOB ENGINE_SOURCES CONFIGURE_DEPENDS ${CMAKE_SOURCE_DIR}/build/engine/*.c)
list(FILTER ENGINE_SOURCES EXCLUDE REGEX "/main.c$")
add_library(pop-core STATIC ${ENGINE_SOURCES} engine/pop_net.c engine/scenes.c)
target_include_directories(pop-core PUBLIC engine build/engine)
target_compile_options(pop-core PRIVATE -Werror=implicit-function-declaration -Wno-unused-result)
if(EMSCRIPTEN)
    target_compile_options(pop-core PRIVATE -sUSE_SDL=2 -sUSE_SDL_IMAGE=2 -sUSE_ZLIB=1)
    add_executable(pop engine/wasm_main.c)
    target_link_libraries(pop PRIVATE pop-core)
    target_link_options(pop PRIVATE -sUSE_SDL=2 -sUSE_SDL_IMAGE=2 -sUSE_ZLIB=1 -sALLOW_MEMORY_GROWTH=1 -sSTACK_SIZE=2097152 -sMODULARIZE=1 -sEXPORT_ES6=1 -sENVIRONMENT=web,node -sFORCE_FILESYSTEM=1
        "-sEXPORTED_RUNTIME_METHODS=['HEAPU8','HEAPU32']"
        "-sEXPORTED_FUNCTIONS=['_pop_init','_pop_step','_pop_frame','_pop_delay','_pop_hash','_pop_pixels','_pop_snapshot','_pop_state_buffer','_pop_restore','_pop_command','_pop_phase','_pop_event_count','_pop_events']"
        "--preload-file" "${CMAKE_SOURCE_DIR}/assets@/"
    )
    set_target_properties(pop PROPERTIES SUFFIX ".js" RUNTIME_OUTPUT_DIRECTORY ${CMAKE_SOURCE_DIR}/web/public/engine)
else()
    find_package(PkgConfig REQUIRED)
    find_package(ZLIB REQUIRED)
    pkg_check_modules(SDL REQUIRED IMPORTED_TARGET sdl2 SDL2_image)
    target_link_libraries(pop-core PUBLIC PkgConfig::SDL ZLIB::ZLIB m)
    add_executable(pop-worker engine/worker.c)
    target_link_libraries(pop-worker PRIVATE pop-core)
    add_executable(pop-engine-check EXCLUDE_FROM_ALL tests/engine_check.c)
    target_link_libraries(pop-engine-check PRIVATE pop-core)
    target_compile_options(pop-engine-check PRIVATE -UNDEBUG)
endif()
