# SPDX-License-Identifier: GPL-3.0-or-later
cmake_minimum_required(VERSION 3.12)
project(wolf2009_source_entity_runtime_checks LANGUAGES C CXX)
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
enable_testing()
set(core "${CMAKE_CURRENT_SOURCE_DIR}/../../src/wolf2009")
set(gameplay "${CMAKE_CURRENT_SOURCE_DIR}/../../src/idtech4a_gameplay")
add_library(source_entity_inputs STATIC "${core}/Entities.cpp" "${core}/SourceDefinitions.cpp"
    "${core}/CompiledDeclarations.cpp" "${core}/CompiledDeclarationCatalog.cpp" "${gameplay}/SourceEntityRuntime.cpp")
target_include_directories(source_entity_inputs PUBLIC "${core}" "${gameplay}")
set(WOLF2009_MINIZ_SOURCE_DIR "" CACHE PATH "Optional existing pinned miniz source directory")
if(WOLF2009_MINIZ_SOURCE_DIR)
    add_library(source_entity_miniz STATIC "${WOLF2009_MINIZ_SOURCE_DIR}/miniz.c")
    target_include_directories(source_entity_miniz PUBLIC "${WOLF2009_MINIZ_SOURCE_DIR}")
    set(compression source_entity_miniz)
else()
    find_package(ZLIB REQUIRED)
    set(compression ZLIB::ZLIB)
endif()
add_library(source_entity_archive STATIC "${core}/Archive.cpp")
target_include_directories(source_entity_archive PUBLIC "${core}")
target_link_libraries(source_entity_archive PUBLIC ${compression})
if(WOLF2009_MINIZ_SOURCE_DIR)
    target_compile_definitions(source_entity_archive PRIVATE WOLF2009_USE_MINIZ)
endif()
add_executable(wolf2009-source-entity-runtime SourceEntityRuntimeTest.cpp)
target_link_libraries(wolf2009-source-entity-runtime PRIVATE source_entity_inputs source_entity_archive)
add_test(NAME wolf2009_source_entity_runtime_synthetic COMMAND wolf2009-source-entity-runtime --self-test)
set(WOLF2009_SOURCE_ENTITY_SOURCE_MAP "" CACHE FILEPATH "Optional owner-supplied selected trainyard MPK")
if(WOLF2009_SOURCE_ENTITY_SOURCE_MAP)
    add_test(NAME wolf2009_source_entity_runtime_original COMMAND wolf2009-source-entity-runtime --source-map "${WOLF2009_SOURCE_ENTITY_SOURCE_MAP}")
endif()
