cmake_minimum_required(VERSION 3.24)
project(RageNativeContracts LANGUAGES C CXX)
enable_testing()
add_executable(controller_model_tests controller_model_tests.cpp ../recomp/src/rage_multiplayer.cpp)
target_compile_features(controller_model_tests PRIVATE cxx_std_17)
target_include_directories(controller_model_tests PRIVATE ../recomp/include ../vendor/psxrecomp/runtime/include)
if(MSVC)
    target_compile_options(controller_model_tests PRIVATE /UNDEBUG)
else()
    target_compile_options(controller_model_tests PRIVATE -UNDEBUG)
endif()
add_test(NAME multiplayer_controller_geometry COMMAND controller_model_tests)
add_executable(free_world_tests free_world_tests.cpp ../recomp/src/rage_track_topology.cpp ../recomp/src/track_texture_snapshot.c)
target_compile_features(free_world_tests PRIVATE cxx_std_17)
target_include_directories(free_world_tests PRIVATE ../recomp/include ../vendor/psxrecomp/runtime/include)
if(MSVC)
    target_compile_options(free_world_tests PRIVATE /UNDEBUG)
else()
    target_compile_options(free_world_tests PRIVATE -UNDEBUG)
endif()
add_test(NAME free_world_geometry_and_routes COMMAND free_world_tests "${CMAKE_CURRENT_SOURCE_DIR}/../../Port/data/assets/PACK")
add_executable(free_run_tests free_run_tests.cpp ../recomp/src/rage_free_run.cpp)
target_compile_features(free_run_tests PRIVATE cxx_std_17)
target_include_directories(free_run_tests PRIVATE ../recomp/include ../vendor/psxrecomp/runtime/include)
if(MSVC)
    target_compile_options(free_run_tests PRIVATE /UNDEBUG)
else()
    target_compile_options(free_run_tests PRIVATE -UNDEBUG)
endif()
add_test(NAME free_run_menu_and_unlimited_driving COMMAND free_run_tests)
add_executable(minimap_tests minimap_tests.cpp ../recomp/src/rage_minimap.cpp)
target_compile_features(minimap_tests PRIVATE cxx_std_17)
target_include_directories(minimap_tests PRIVATE ../recomp/include ../vendor/psxrecomp/runtime/include)
if(MSVC)
    target_compile_options(minimap_tests PRIVATE /UNDEBUG)
else()
    target_compile_options(minimap_tests PRIVATE -UNDEBUG)
endif()
add_test(NAME minimap_fit_and_heading COMMAND minimap_tests)
add_executable(car_lights_tests car_lights_tests.cpp ../recomp/src/rage_car_lamps.c)
target_compile_features(car_lights_tests PRIVATE cxx_std_17)
target_include_directories(car_lights_tests PRIVATE ../recomp/include)
if(MSVC)
    target_compile_options(car_lights_tests PRIVATE /UNDEBUG)
else()
    target_compile_options(car_lights_tests PRIVATE -UNDEBUG)
endif()
add_test(NAME car_lamp_states_and_profiles COMMAND car_lights_tests)
add_executable(music_selector_tests music_selector_tests.cpp)
target_compile_features(music_selector_tests PRIVATE cxx_std_17)
target_include_directories(music_selector_tests PRIVATE ../recomp/include)
if(MSVC)
    target_compile_options(music_selector_tests PRIVATE /UNDEBUG)
else()
    target_compile_options(music_selector_tests PRIVATE -UNDEBUG)
endif()
add_test(NAME music_selector_timing_and_confirmation COMMAND music_selector_tests)
add_executable(vehicle_shadow_tests vehicle_shadow_tests.cpp)
target_compile_features(vehicle_shadow_tests PRIVATE cxx_std_17)
target_include_directories(vehicle_shadow_tests PRIVATE ../recomp/include)
if(MSVC)
    target_compile_options(vehicle_shadow_tests PRIVATE /UNDEBUG)
else()
    target_compile_options(vehicle_shadow_tests PRIVATE -UNDEBUG)
endif()
add_test(NAME vehicle_shadow_projection COMMAND vehicle_shadow_tests)
add_executable(vehicle_pose_tests vehicle_pose_tests.cpp)
target_compile_features(vehicle_pose_tests PRIVATE cxx_std_17)
target_include_directories(vehicle_pose_tests PRIVATE ../recomp/include ../vendor/psxrecomp/runtime/include)
if(MSVC)
    target_compile_options(vehicle_pose_tests PRIVATE /UNDEBUG)
else()
    target_compile_options(vehicle_pose_tests PRIVATE -UNDEBUG)
endif()
add_test(NAME vehicle_world_pose COMMAND vehicle_pose_tests)
add_executable(actor_clip_tests actor_clip_tests.cpp)
target_compile_features(actor_clip_tests PRIVATE cxx_std_17)
target_include_directories(actor_clip_tests PRIVATE ../recomp/include)
add_test(NAME starter_clip_scope COMMAND actor_clip_tests)
add_executable(native_index_tests native_index_tests.cpp)
target_compile_features(native_index_tests PRIVATE cxx_std_17)
target_include_directories(native_index_tests PRIVATE ../recomp/include ../vendor/psxrecomp/runtime/include)
add_test(NAME native_index_reconstruction COMMAND native_index_tests)
add_executable(native_geometry_tests native_geometry_tests.cpp)
target_compile_features(native_geometry_tests PRIVATE cxx_std_17)
target_include_directories(native_geometry_tests PRIVATE ../recomp/include)
add_test(NAME native_geometry_contract COMMAND native_geometry_tests)

add_executable(oval_tests oval_tests.cpp ../recomp/src/rage_track_topology.cpp ../recomp/src/track_texture_snapshot.c)
target_compile_features(oval_tests PRIVATE cxx_std_17)
target_include_directories(oval_tests PRIVATE ../recomp/include ../vendor/psxrecomp/runtime/include)
add_test(NAME oval_geometry_contract COMMAND oval_tests "${CMAKE_CURRENT_SOURCE_DIR}/../../Old attempt/Extracted/RageBin/PACK")

add_executable(track_texture_snapshot_tests track_texture_snapshot_tests.c ../recomp/src/track_texture_snapshot.c)
target_include_directories(track_texture_snapshot_tests PRIVATE ../recomp/include)
add_test(NAME retained_track_textures COMMAND track_texture_snapshot_tests)

add_executable(native_visibility_tests native_visibility_tests.c ../recomp/src/native_visibility.c)
target_include_directories(native_visibility_tests PRIVATE ../recomp/include)
add_test(NAME track_region_visibility COMMAND native_visibility_tests)

foreach(contract native_visibility_tests track_texture_snapshot_tests)
    if(MSVC)
        target_compile_options(${contract} PRIVATE /UNDEBUG)
    else()
        target_compile_options(${contract} PRIVATE -UNDEBUG)
    endif()
endforeach()

add_executable(stitch_tests stitch_tests.cpp ../recomp/src/rage_track_topology.cpp)
target_compile_features(stitch_tests PRIVATE cxx_std_17)
target_include_directories(stitch_tests PRIVATE ../recomp/include)
add_test(NAME watertight_track_seams COMMAND stitch_tests)

add_executable(native_publication_tests native_publication_tests.cpp)
target_compile_features(native_publication_tests PRIVATE cxx_std_17)
target_include_directories(native_publication_tests PRIVATE ../recomp/include)
add_test(NAME native_terrain_publication COMMAND native_publication_tests)

add_executable(native_mirror_tests native_mirror_tests.cpp)
target_compile_features(native_mirror_tests PRIVATE cxx_std_17)
target_include_directories(native_mirror_tests PRIVATE ../recomp/include ../vendor/psxrecomp/runtime/include)
add_test(NAME native_mirror_state COMMAND native_mirror_tests)
add_executable(track_fade_tests track_fade_tests.cpp)
target_include_directories(track_fade_tests PRIVATE ../recomp/include)
add_test(NAME nearby_terrain_opacity COMMAND track_fade_tests)

add_executable(split_selection_tests split_selection_tests.cpp)
target_compile_features(split_selection_tests PRIVATE cxx_std_17)
target_include_directories(split_selection_tests PRIVATE ../recomp/include)
if(MSVC)
 target_compile_options(split_selection_tests PRIVATE /UNDEBUG)
else()
 target_compile_options(split_selection_tests PRIVATE -UNDEBUG)
endif()
add_test(NAME independent_split_screen_car_selection COMMAND split_selection_tests)
add_executable(car_preview_tests car_preview_tests.cpp)
target_compile_features(car_preview_tests PRIVATE cxx_std_17)
target_include_directories(car_preview_tests PRIVATE ../recomp/include)
if(MSVC)
 target_compile_options(car_preview_tests PRIVATE /UNDEBUG)
else()
 target_compile_options(car_preview_tests PRIVATE -UNDEBUG)
endif()
add_test(NAME all_unlocked_car_previews COMMAND car_preview_tests "${CMAKE_CURRENT_SOURCE_DIR}/../../Port/data/assets/PACK")
add_executable(preview_precision_tests preview_precision_tests.cpp ../vendor/psxrecomp/runtime/src/pgxp.cpp)
target_compile_features(preview_precision_tests PRIVATE cxx_std_17)
target_include_directories(preview_precision_tests PRIVATE ../recomp/include ../vendor/psxrecomp/runtime/INCLUDE)
target_compile_definitions(preview_precision_tests PRIVATE RAGE_GRAPHICS_OPTIONS=1 PSX_PGXP=1)
if(MSVC)
 target_compile_options(preview_precision_tests PRIVATE /UNDEBUG)
else()
 target_compile_options(preview_precision_tests PRIVATE -UNDEBUG)
endif()
add_test(NAME native_preview_subpixel_precision COMMAND preview_precision_tests)
