cmake_minimum_required(VERSION 3.25)
project(camera_hook LANGUAGES CXX C)

set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_POSITION_INDEPENDENT_CODE ON)

# Find Android libraries
find_library(log-lib log)
find_library(dl-lib dl)
find_library(mediandk-lib mediandk)
find_library(android-lib android)

# HAL hook shared library
add_library(camera_hook SHARED
    src/camera_wrapper.cpp
    src/video_decoder.cpp
    src/rtsp_client.cpp
    src/buffer_converter.cpp
)

target_include_directories(camera_hook PRIVATE
    ${CMAKE_SOURCE_DIR}/include
)

target_link_libraries(camera_hook
    ${log-lib}
    ${dl-lib}
    ${mediandk-lib}
    ${android-lib}
)

# Compiler flags for LD_PRELOAD hook
target_compile_options(camera_hook PRIVATE
    -Wall
    -Wextra
    -fvisibility=hidden
    -fPIC
)

# Enable NEON intrinsics for ARM64
if(ANDROID_ABI STREQUAL "arm64-v8a")
    target_compile_options(camera_hook PRIVATE -march=armv8-a+simd)
endif()

# Output name
set_target_properties(camera_hook PROPERTIES
    OUTPUT_NAME "camera_hook"
    LIBRARY_OUTPUT_DIRECTORY "${CMAKE_SOURCE_DIR}/../app/src/main/jniLibs/${ANDROID_ABI}"
)

# Camera provider wrapper (static C binary, bind-mounted over original)
add_executable(camera_provider_wrapper src/camera_provider_wrapper.c)
set_target_properties(camera_provider_wrapper PROPERTIES
    LINKER_LANGUAGE C
    RUNTIME_OUTPUT_DIRECTORY "${CMAKE_SOURCE_DIR}/../root-module"
)
