cmake_minimum_required(VERSION 3.20)
project(gpolice_native DESCRIPTION "G-Police: Recommissioned native port" LANGUAGES C)
set(CMAKE_C_STANDARD 11)
set(PCRECOMP "${CMAKE_CURRENT_SOURCE_DIR}/third_party/pcrecomp" CACHE PATH "Pinned pcrecomp checkout")
file(GLOB HLE CONFIGURE_DEPENDS "${PCRECOMP}/runtime/win32hle/*.c")
list(FILTER HLE EXCLUDE REGEX "_selftest\\.c$")
file(GLOB LIFT CONFIGURE_DEPENDS "${CMAKE_CURRENT_SOURCE_DIR}/generated/recomp_*.c")
add_library(hle STATIC ${HLE})
target_compile_definitions(hle PUBLIC RECOMP_X87_EXTENDED=1 RECOMP_STRICT_DISPATCH=1)
target_include_directories(hle PUBLIC "${PCRECOMP}/runtime/win32hle" "${PCRECOMP}/runtime/recomp32"
  "${CMAKE_CURRENT_SOURCE_DIR}/local/sdk/usr/include"
  "${CMAKE_CURRENT_SOURCE_DIR}/local/sdk/usr/include/SDL2"
  "${CMAKE_CURRENT_SOURCE_DIR}/local/sdk/usr/include/x86_64-linux-gnu")
target_compile_options(hle PRIVATE -Wno-incompatible-pointer-types)
target_link_libraries(hle PUBLIC -l:libSDL2-2.0.so.0 -l:libSDL2_ttf-2.0.so.0 pthread m)
add_executable(gpolice-native src/control_menu.c src/graphics_settings.c src/graphics_menu.c src/render/native_haze.c src/ship_collisions.c src/main.c src/projection.c src/mouse_menu.c src/config_store.c src/world_options.c src/keyboard_config.c src/diagnostics.c src/config.c src/camera_tools.c src/crash.c src/snapshot.c src/compat.c src/music.c src/dinput.c src/bindings.c src/movie_kernel.c src/controls.c src/controller_weapons.c src/controls_strafe.c ${LIFT})
add_library(native-render STATIC src/crash_context.c src/render/native_render.c src/render/frontend_cache.c src/render/native_smaa.c src/render/engine_geometry.c
  src/render/engine_sprite.c src/render/engine_tinted_sprite.c src/render/engine_texture.c src/render/engine_bridge.c
  src/render/oem_resources.c src/render/oem_runtime.c src/render/native_session.c
  src/render/engine_lines.c src/render/engine_line_variants.c src/render/engine_polygon_variants.c
  src/render/engine_aux_primitives.c src/render/engine_quad_family.c src/render/engine_scaled_entry.c src/render/engine_aux_triangle.c
  src/render/engine_general_polygon.c src/render/engine_general_polygon_entry.c
  src/render/shadows/project.c src/render/shadows/mask.c src/render/shadows/receiver-mesh.c
  src/render/shadows/native_shadow_mesh.c src/render/shadows/native_shadow_project.c
  src/render/shadows/native_shadow_collision.c src/render/shadows/native_shadow_live.c src/render/shadows/native_shadow_casters.c
  src/render/shadows/vehicle_shadows.c src/render/shadows/vehicle_sources.c
  src/render/shadows/native_shadow_surfaces.c src/render/shadows/silhouette.c
  src/render/engine_material_state.c src/render/engine_material_resolve.c
  src/render/engine_material_scene.c src/render/engine_material_initial.c
  src/render/engine_material_mode.c src/render/engine_live_material.c src/render/engine_registration_owner.c
  src/render/engine_texture_registration.c src/render/engine_texture_slot.c
  src/render/engine_ui_material.c src/render/engine_scaled_material.c
  src/render/engine_textured_material.c src/render/engine_textured_variants.c
  src/render/hud_text.c src/render/map_text.c src/render/frontend_art.c
  src/render/frontend_background.c src/render/movie_frame.c src/render/fps_overlay.c src/render/bitmap_text.c src/render/engine_rect.c)
target_include_directories(native-render PUBLIC src/render)
target_link_libraries(native-render PUBLIC hle)
target_link_libraries(gpolice-native PRIVATE native-render hle)
target_sources(gpolice-native PRIVATE src/cockpit_extension.c src/loadout_spin.c src/debug_tools.c src/debug_tools_draw.c src/demo_tools.c src/demo_bar.c)
target_sources(gpolice-native PRIVATE src/resource_overrides.c src/resource_overrides_runtime.c)
target_compile_definitions(gpolice-native PRIVATE _GNU_SOURCE)
target_compile_options(gpolice-native PRIVATE -include ${CMAKE_CURRENT_SOURCE_DIR}/generated/recomp_funcs.h -Wno-overflow -Wno-unused-label)
