cmake_minimum_required(VERSION 3.30)
project(TriAevumPassShaderPreparation LANGUAGES CXX)
set(CMAKE_CXX_STANDARD 20)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_SCAN_FOR_MODULES OFF)
get_filename_component(root "${CMAKE_CURRENT_SOURCE_DIR}/../../.." ABSOLUTE)
find_package(nlohmann_json CONFIG REQUIRED)
find_path(SHADERC_INCLUDE_DIR shaderc/shaderc.hpp REQUIRED)
find_library(SHADERC_LIBRARY NAMES shaderc_shared REQUIRED)
set(runtime "${root}/runtime/three_ds_recomp")
add_executable(oot3d_native_pica_aot_compiler
    "${root}/tools/oot3d/native_pica_frontend/oot3d_native_pica_aot_compiler.cpp"
    "${runtime}/src/fast/oot3d/pica_aot_shader_pack.cpp")
include("${runtime}/cmake/pass_shader_sources.cmake")
triaevum_add_pass_shader_sources(oot3d_native_pica_aot_compiler)
target_include_directories(oot3d_native_pica_aot_compiler PRIVATE "${runtime}/include" "${SHADERC_INCLUDE_DIR}")
target_link_libraries(oot3d_native_pica_aot_compiler PRIVATE nlohmann_json::nlohmann_json "${SHADERC_LIBRARY}" ${CMAKE_DL_LIBS})
if(MSVC)
    target_compile_definitions(oot3d_native_pica_aot_compiler PRIVATE NOMINMAX)
    target_compile_options(oot3d_native_pica_aot_compiler PRIVATE /utf-8)
    set_property(TARGET oot3d_native_pica_aot_compiler PROPERTY MSVC_RUNTIME_LIBRARY "MultiThreaded$<$<CONFIG:Debug>:Debug>")
    set(SHADERC_RUNTIME "" CACHE FILEPATH "Bundled matching shaderc_shared.dll")
    if(NOT EXISTS "${SHADERC_RUNTIME}")
        message(FATAL_ERROR "Set SHADERC_RUNTIME to the matching shaderc DLL")
    endif()
    add_custom_command(TARGET oot3d_native_pica_aot_compiler POST_BUILD
        COMMAND ${CMAKE_COMMAND} -E copy_if_different "${SHADERC_RUNTIME}" $<TARGET_FILE_DIR:oot3d_native_pica_aot_compiler>)
endif()
find_package(Python3 COMPONENTS Interpreter QUIET)
if(Python3_FOUND AND NOT CMAKE_CROSSCOMPILING)
    enable_testing()
    add_test(NAME renderer_shader_cache COMMAND ${CMAKE_COMMAND} -E env
        TRIAEVUM_TEST_SHADER_COMPILER=$<TARGET_FILE:oot3d_native_pica_aot_compiler>
        "${Python3_EXECUTABLE}" "${root}/tools/triaevum_release/test_shader_compiler.py")
endif()
