cmake_minimum_required(VERSION 3.20)
project(X360PS5 VERSION 0.1.1 LANGUAGES CXX)
set(CMAKE_CXX_STANDARD 20)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
find_package(Threads REQUIRED)
find_package(Python3 REQUIRED COMPONENTS Interpreter)
find_program(GLSLANG glslangValidator REQUIRED)
file(MAKE_DIRECTORY "${CMAKE_BINARY_DIR}/generated")
execute_process(COMMAND "${Python3_EXECUTABLE}" "${CMAKE_SOURCE_DIR}/tools/build_info.py" "${CMAKE_BINARY_DIR}/generated" HOST COMMAND_ERROR_IS_FATAL ANY)
add_custom_command(OUTPUT "${CMAKE_BINARY_DIR}/generated/probe_shader.hpp"
 COMMAND "${GLSLANG}" -V --target-env vulkan1.1 --vn probe_shader "${CMAKE_SOURCE_DIR}/shaders/probe.comp" -o "${CMAKE_BINARY_DIR}/generated/probe_shader.hpp"
 DEPENDS shaders/probe.comp VERBATIM)
add_executable(x360ps5-host src/host_main.cpp src/diagnostics.cpp src/platform.cpp src/exception_probe.cpp src/xenia_probe.cpp src/gpu_probe.cpp "${CMAKE_BINARY_DIR}/generated/probe_shader.hpp")
target_include_directories(x360ps5-host PRIVATE "${CMAKE_BINARY_DIR}/generated")
target_compile_definitions(x360ps5-host PRIVATE X360_PS5=0)
target_compile_options(x360ps5-host PRIVATE -Wall -Wextra -Wpedantic -Wno-missing-field-initializers)
target_link_libraries(x360ps5-host PRIVATE Threads::Threads ${CMAKE_DL_LIBS})
enable_testing()
add_test(NAME diagnostic_host COMMAND x360ps5-host "${CMAKE_BINARY_DIR}/logs")
set_tests_properties(diagnostic_host PROPERTIES TIMEOUT 60)
if(EXISTS "${CMAKE_SOURCE_DIR}/.deps/PS5_Vulkan/.deps/native/ps5-payload-sdk/target/include/ps5platform/shm.h")
  add_executable(memory-adapter-test tests/memory_adapter_test.cpp tests/memory_sdk_mock.cpp port/xenia/memory_ps5.cc)
  target_include_directories(memory-adapter-test PRIVATE .deps/xenia/src .deps/xenia)
  target_compile_options(memory-adapter-test PRIVATE -idirafter "${CMAKE_SOURCE_DIR}/.deps/PS5_Vulkan/.deps/native/ps5-payload-sdk/target/include")
  target_link_libraries(memory-adapter-test PRIVATE Threads::Threads)
  add_test(NAME xenia_memory_adapter_host_model COMMAND memory-adapter-test)
endif()
