cmake_minimum_required(VERSION 3.22)
project(nexus_windows C CXX)

get_filename_component(NEXUS_ROOT "${CMAKE_CURRENT_LIST_DIR}/.." ABSOLUTE)

if(NOT MSVC)
    add_compile_options(-fomit-frame-pointer -fno-math-errno -march=broadwell -mtune=broadwell)
endif()

list(APPEND CMAKE_PREFIX_PATH "${NEXUS_ROOT}/tools/sdl2-win")
find_package(SDL2 REQUIRED CONFIG)

set(ENABLE_OPT              OFF CACHE BOOL "" FORCE)
set(ENABLE_HLSL             ON  CACHE BOOL "" FORCE)
set(ENABLE_GLSLANG_BINARIES OFF CACHE BOOL "" FORCE)
set(GLSLANG_TESTS           OFF CACHE BOOL "" FORCE)
set(GLSLANG_ENABLE_INSTALL  OFF CACHE BOOL "" FORCE)
set(BUILD_EXTERNAL          OFF CACHE BOOL "" FORCE)
set(BUILD_SHARED_LIBS       OFF CACHE BOOL "" FORCE)
add_subdirectory("${NEXUS_ROOT}/tools/glslang-src" "${CMAKE_BINARY_DIR}/glslang" EXCLUDE_FROM_ALL)
foreach(t glslang SPIRV glslang-default-resource-limits)
    if(TARGET ${t} AND NOT TARGET glslang::${t})
        add_library(glslang::${t} ALIAS ${t})
    endif()
endforeach()

set(PS3RECOMP_RSX_VULKAN   ON  CACHE BOOL "" FORCE)
set(PS3RECOMP_WIN_USE_SDL2 ON  CACHE BOOL "" FORCE)
set(PS3RECOMP_BUILD_TESTS  OFF CACHE BOOL "" FORCE)
set(PS3RECOMP_DIR "${NEXUS_ROOT}/tools/ps3recomp" CACHE PATH "" FORCE)
set(RECOMP_DIR "${NEXUS_ROOT}/game/src/recomp" CACHE PATH "" FORCE)
set(SPU_DIR    "${NEXUS_ROOT}/game/spu"        CACHE PATH "" FORCE)
set(PS3RECOMP_VULKAN_INCLUDE_DIR "${NEXUS_ROOT}/tools/Vulkan-Headers/include" CACHE PATH "" FORCE)
add_subdirectory("${NEXUS_ROOT}/game" "${CMAKE_BINARY_DIR}/game")
