cmake_minimum_required(VERSION 3.22.1)
project(airplaytv C CXX)

set(UX ${CMAKE_CURRENT_SOURCE_DIR}/../../../../third_party/uxplay/lib)
set(ALAC ${CMAKE_CURRENT_SOURCE_DIR}/../../../../third_party/alac/codec)
set(DEPS ${CMAKE_CURRENT_SOURCE_DIR}/../../../../third_party/out/${ANDROID_ABI})

file(GLOB UX_SRC ${UX}/*.c ${UX}/mdnsd/*.c ${UX}/playfair/*.c ${UX}/llhttp/*.c)

# Apple ALAC referans çözücüsü (iPhone müzik yayını ct=2); yalnız çözücü dosyaları
set(ALAC_SRC ${ALAC}/ALACDecoder.cpp ${ALAC}/ALACBitUtilities.c ${ALAC}/ag_dec.c ${ALAC}/dp_dec.c
    ${ALAC}/matrix_dec.c ${ALAC}/EndianPortable.c)
# EndianPortable.c ARM'ı tanımaz; Android ABI'lerimizin hepsi küçük-endian (bkz. third_party/alac/PATCHES.md)
set_source_files_properties(${ALAC_SRC} PROPERTIES COMPILE_OPTIONS "-w" COMPILE_DEFINITIONS "TARGET_RT_LITTLE_ENDIAN=1")

add_library(airplaytv SHARED ${UX_SRC} ${ALAC_SRC} alac_bridge.cpp jni_bridge.c)

target_include_directories(airplaytv PRIVATE
    ${UX} ${UX}/mdnsd ${UX}/playfair ${UX}/llhttp ${ALAC} ${DEPS}/include)

target_compile_definitions(airplaytv PRIVATE
    STANDALONE __STDC_CONSTANT_MACROS __STDC_LIMIT_MACROS TARGET_POSIX _LINUX _REENTRANT
    NOHOLD PLIST_210 PLIST_230 OPENSSL_API_COMPAT=0x10101000L)

target_compile_options(airplaytv PRIVATE -O2 -Wall -Wno-unused-variable -Wno-unused-function)

# Play: Android 15+ 16 KB bellek sayfası uyumu
target_link_options(airplaytv PRIVATE -Wl,--no-undefined -Wl,-z,max-page-size=16384)

target_link_libraries(airplaytv
    ${DEPS}/lib/libplist-2.0.a
    ${DEPS}/lib/libcrypto.a
    log m)
