cmake_minimum_required(VERSION 3.25)
get_property(MAXSPIN_MULTI_CONFIG GLOBAL PROPERTY GENERATOR_IS_MULTI_CONFIG)
if(NOT MAXSPIN_MULTI_CONFIG AND NOT CMAKE_BUILD_TYPE)
    set(CMAKE_BUILD_TYPE Release CACHE STRING "Build configuration" FORCE)
endif()
set(CMAKE_C_FLAGS_RELEASE "-O1 -DNDEBUG" CACHE STRING "Release C flags")
set(CMAKE_CXX_FLAGS_RELEASE "-O1 -DNDEBUG" CACHE STRING "Release C++ flags")
project(MaxSpinWindows LANGUAGES C CXX)
if(NOT WIN32 OR NOT CMAKE_SIZEOF_VOID_P EQUAL 8 OR NOT CMAKE_C_COMPILER_ID MATCHES "Clang")
    message(FATAL_ERROR "Max Spin requires a native Windows x64 Clang toolchain")
endif()
set(MAXSPIN_WINDOWS_RUNTIME_DIR "${CMAKE_CURRENT_SOURCE_DIR}/runtime" CACHE PATH "Native Windows CPU/save runtime")
if(NOT TOPSPIN_SDK_ROOT)
    get_filename_component(MAXSPIN_PROJECT_ROOT "${CMAKE_CURRENT_SOURCE_DIR}/../.." ABSOLUTE)
    set(MAXSPIN_SDK_SOURCE "${MAXSPIN_PROJECT_ROOT}/vendor/xboxrecomp")
    find_package(Python3 REQUIRED COMPONENTS Interpreter)
    set(TOPSPIN_SDK_ROOT "${CMAKE_CURRENT_BINARY_DIR}/sdk-windows" CACHE PATH "Isolated Windows SDK")
    execute_process(COMMAND "${Python3_EXECUTABLE}" "${CMAKE_CURRENT_SOURCE_DIR}/prepare_sdk.py"
        --source "${MAXSPIN_SDK_SOURCE}" --destination "${TOPSPIN_SDK_ROOT}"
        COMMAND_ERROR_IS_FATAL ANY)
endif()
set(TOPSPIN_MATH_LIBRARY "" CACHE STRING "Windows CRT provides math")
set(TOPSPIN_IMAGE menu CACHE STRING "Initial image")
set(TOPSPIN_ADDITIONAL_IMAGES "boot;game;career;training;playercreator;shop;online;stop" CACHE STRING "Additional images")
get_filename_component(MAXSPIN_SOURCE_ROOT "${CMAKE_CURRENT_SOURCE_DIR}/../.." ABSOLUTE)
add_compile_options("-ffile-prefix-map=${MAXSPIN_SOURCE_ROOT}=." "-fdebug-prefix-map=${MAXSPIN_SOURCE_ROOT}=.")
add_compile_options("-ffile-prefix-map=${TOPSPIN_SDK_ROOT}=vendor/xboxrecomp"
                    "-fdebug-prefix-map=${TOPSPIN_SDK_ROOT}=vendor/xboxrecomp")
add_subdirectory("${CMAKE_CURRENT_SOURCE_DIR}/../../native-linux" title)

add_executable(MaxSpin WIN32 src/launcher_windows.c "${MAXSPIN_SOURCE_ROOT}/native-linux/src/graphics_settings.c" src/graphics_settings_windows.c src/ui_layout_windows.c src/character_windows.c src/character_launcher.c src/character_launcher_windows.c src/character_command.c)
target_compile_definitions(MaxSpin PRIVATE TOPSPIN_UI_LAYOUT_LAUNCHER=1)
target_include_directories(MaxSpin PRIVATE "${MAXSPIN_SOURCE_ROOT}/native-linux/src")
target_link_libraries(MaxSpin PRIVATE shell32 comdlg32 user32 ole32 advapi32)
target_link_options(MaxSpin PRIVATE -municode -Wl,--stack,8388608)
set_target_properties(MaxSpin PROPERTIES RUNTIME_OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/title")
