cmake_minimum_required(VERSION 3.25)
project(AsterPresenterFilter LANGUAGES CXX)
if(NOT CMAKE_SYSTEM_NAME STREQUAL "Linux" OR NOT CMAKE_SYSTEM_PROCESSOR MATCHES "^(AMD64|x86_64)$")
    message(FATAL_ERROR "Compatibility wrapper requires the pinned Linux x86-64 SDK ABI")
endif()
# Arena lifetime cleanup is independent of the SDK presenter ABI. The source
# runtime must preload this small module instead of the legacy presenter shim.
add_library(aster_arena_lifetime SHARED arena_lifetime.cpp)
target_compile_features(aster_arena_lifetime PRIVATE cxx_std_11)
target_link_libraries(aster_arena_lifetime PRIVATE ${CMAKE_DL_LIBS})
target_link_options(aster_arena_lifetime PRIVATE -Wl,--no-undefined)
option(ASTER_ARENA_ONLY "Build only the ABI-independent arena lifetime helper" OFF)
if(ASTER_ARENA_ONLY)
    return()
endif()
find_package(rexglue 0.10.0 EXACT CONFIG REQUIRED)
get_filename_component(_prefix "${rexglue_DIR}/../../.." ABSOLUTE)
add_library(aster_presenter_compat SHARED presenter_filter.cpp arena_lifetime.cpp)
target_include_directories(aster_presenter_compat PRIVATE "${_prefix}/include/renderdoc")
target_compile_features(aster_presenter_compat PRIVATE cxx_std_23)
target_compile_definitions(aster_presenter_compat PRIVATE REX_HAS_VULKAN=1 REX_HAS_D3D12=0)
target_link_libraries(aster_presenter_compat PRIVATE rex::runtime Vulkan::Headers ${CMAKE_DL_LIBS})
target_link_options(aster_presenter_compat PRIVATE -Wl,--no-undefined)
