cmake_minimum_required(VERSION 3.20)
project(MaxSpinCharacterContracts C)
set(CMAKE_C_STANDARD 11)
set(CMAKE_C_STANDARD_REQUIRED ON)
add_executable(character_windows_contract ../tests/character_windows_contract.c ../src/character_windows.c ../src/ui_layout_windows.c ../src/ui_layout_overlay.c)
target_include_directories(character_windows_contract PRIVATE ../src ../../../native-linux/src)
if(TOPSPIN_SDK_ROOT)
  target_sources(character_windows_contract PRIVATE sdk_file_open.c "${TOPSPIN_SDK_ROOT}/src/kernel/kernel_file.c")
  target_include_directories(character_windows_contract PRIVATE "${TOPSPIN_SDK_ROOT}/src" ../runtime)
  target_compile_definitions(character_windows_contract PRIVATE TOPSPIN_CHARACTER_SDK_FILE_TEST)
  if(WIN32)
    # The prepared runtime's file-close hooks require their actual owners.
    target_sources(character_windows_contract PRIVATE ../runtime/material_save_transaction_windows.c ../runtime/guest_turn_windows.c)
  else()
    add_subdirectory("${TOPSPIN_SDK_ROOT}/src/platform" "${CMAKE_CURRENT_BINARY_DIR}/sdk-platform")
    target_link_libraries(character_windows_contract PRIVATE platform m)
  endif()
endif()
if(WIN32)
  target_link_libraries(character_windows_contract PRIVATE advapi32)
else()
  target_include_directories(character_windows_contract PRIVATE portable-win32)
  find_package(OpenSSL REQUIRED)
  target_link_libraries(character_windows_contract PRIVATE OpenSSL::Crypto)
  target_compile_definitions(character_windows_contract PRIVATE _POSIX_C_SOURCE=200809L TOPSPIN_CHARACTER_WRAPPER_TEST)
endif()
enable_testing()
add_test(NAME character_windows_contract COMMAND character_windows_contract)
set_tests_properties(character_windows_contract PROPERTIES TIMEOUT 30)
