cmake_minimum_required(VERSION 3.20)
project(NFSU2PortableRuntimeCheck C CXX)
get_filename_component(NFS_ROOT "${CMAKE_CURRENT_SOURCE_DIR}/../.." ABSOLUTE)
set(PORT "${NFS_ROOT}/android/app/src/main/cpp")
set(RT "${NFS_ROOT}/../pcrecomp/runtime")
file(GLOB GEN_SOURCES "${NFS_ROOT}/src/recomp/gen/recomp_*.c")
add_library(guest OBJECT ${GEN_SOURCES})
target_include_directories(guest PRIVATE "${RT}/recomp32" "${NFS_ROOT}/src/recomp/gen")
target_compile_definitions(guest PRIVATE RECOMP_STRICT_ICALL)
target_compile_options(guest PRIVATE -O0 -w -fno-strict-aliasing -fexceptions -ffp-contract=off -include "${PORT}/arm64_guest.h")
add_executable(runtime_check main.cpp "${PORT}/guest_runtime.cpp" "${NFS_ROOT}/src/runtime/overrides.c" $<TARGET_OBJECTS:guest>)
set(NFS_D3D9_NATIVE_LIBRARY "" CACHE FILEPATH "Optional host DXVK query build")
if(NFS_D3D9_NATIVE_LIBRARY)
  add_library(native_d3d9 SHARED IMPORTED)
  set_target_properties(native_d3d9 PROPERTIES IMPORTED_LOCATION "${NFS_D3D9_NATIVE_LIBRARY}")
  target_sources(runtime_check PRIVATE "${PORT}/d3d9_bridge.cpp")
  target_compile_definitions(runtime_check PRIVATE NFS_D3D9_BACKEND)
  target_include_directories(runtime_check SYSTEM PRIVATE "${NFS_ROOT}/build/dxvk-source/include/native/windows"
    "${NFS_ROOT}/build/dxvk-source/include/native/directx")
  target_link_libraries(runtime_check PRIVATE native_d3d9)
endif()
target_compile_features(runtime_check PRIVATE cxx_std_17)
target_compile_definitions(runtime_check PRIVATE RECOMP_STRICT_ICALL)
target_include_directories(runtime_check PRIVATE "${PORT}" "${RT}/recomp32" "${RT}/win32hle" "${NFS_ROOT}/src/runtime")
target_compile_options(runtime_check PRIVATE -Wall -Wextra -Werror -Wno-missing-field-initializers)
target_link_libraries(runtime_check PRIVATE m pthread)
