# Tencent IoT SDK —— macOS 客户源码交付包独立构建脚本
#
# 客户拿到本包后： cmake -B build && cmake --build build -j 即可编译出 demo，无需 SDK 源码。demo
# 只依赖 sdk/include 下的 public API + sdk/lib/libtc_iot_sdk.a（自包含静态库）。
#
# 本包启用了哪些模块由 sdk/module_config.cmake 决定（与 .a 一致）。
cmake_minimum_required(VERSION 3.21)
project(tc_iot_demo LANGUAGES C CXX OBJC OBJCXX)

set(CMAKE_C_STANDARD 11)
if(NOT CMAKE_BUILD_TYPE)
  set(CMAKE_BUILD_TYPE Release)
endif()

set(PKG_ROOT ${CMAKE_CURRENT_SOURCE_DIR})
set(SDK_DIR ${PKG_ROOT}/sdk)
set(DEMO_DIR ${PKG_ROOT}/demo)

# 客户包仅 TRTC/PCM 路径，不支持 WebSocket + Opus。
set(AITALK_USE_WEBSOCKET 0)

# 模块默认全开；module_config.cmake 覆盖为本包 .a 实际启用的集合。
set(BUILD_IOT_AV 1)
set(BUILD_IOT_CLOUD_STORAGE 1)
set(BUILD_IOT_AITALK 1)
set(TC_IOT_TRTC_MODE "c")
include(${SDK_DIR}/module_config.cmake OPTIONAL)

set(SDK_A ${SDK_DIR}/lib/libtc_iot_sdk.a)

find_library(FOUNDATION_FRAMEWORK Foundation REQUIRED)
find_library(SYSTEM_CONFIGURATION_FRAMEWORK SystemConfiguration REQUIRED)
find_library(APPKIT_FRAMEWORK AppKit REQUIRED)
find_library(AVFOUNDATION_FRAMEWORK AVFoundation REQUIRED)
find_library(AUDIOTOOLBOX_FRAMEWORK AudioToolbox REQUIRED)
find_library(COREAUDIO_FRAMEWORK CoreAudio REQUIRED)
set(SYS_LIBS z m pthread
    ${FOUNDATION_FRAMEWORK}
    ${SYSTEM_CONFIGURATION_FRAMEWORK}
    ${APPKIT_FRAMEWORK}
    ${AVFOUNDATION_FRAMEWORK}
    ${AUDIOTOOLBOX_FRAMEWORK}
    ${COREAUDIO_FRAMEWORK})

# 相对包根目录；运行时须在解包后的包根目录启动 demo（见 README）。
set(_DEMO_MEDIA_DEF "TC_IOT_DEMO_ROOT=\"./demo\"")

# iot_video_demo —— 音视频通话 demo，严格只依赖 public API（include 仅 sdk/include）。
if(BUILD_IOT_AV)
  # minimp4 单头文件库：生成含 #define MINIMP4_IMPLEMENTATION 的 .c 一起编译。
  set(MINIMP4_C ${CMAKE_CURRENT_BINARY_DIR}/minimp4.c)
  file(WRITE ${MINIMP4_C}
      "#define MINIMP4_IMPLEMENTATION\n"
      "#include \"minimp4.h\"\n")

  add_executable(
    iot_video_demo
    demo/iot_video_demo/main.c
    demo/iot_video_demo/iot_demo.c
    demo/iot_video_demo/cmd_exec.c
    demo/iot_video_demo/file_stream.c
    demo/iot_video_demo/av_device_linux.c
    demo/iot_video_demo/av_sender.c
    demo/iot_video_demo/av_receiver.c
    demo/iot_video_demo/cloud_storage_demo.c
    ${MINIMP4_C})
  target_include_directories(
    iot_video_demo PRIVATE ${DEMO_DIR}/iot_video_demo ${SDK_DIR}/include
                           ${SDK_DIR}/include/hal)
  target_compile_definitions(
    iot_video_demo
    PRIVATE ${_DEMO_MEDIA_DEF} BUILD_IOT_AV=${BUILD_IOT_AV}
            BUILD_IOT_CLOUD_STORAGE=${BUILD_IOT_CLOUD_STORAGE}
            BUILD_IOT_AITALK=${BUILD_IOT_AITALK})
  # Apple ld 无 --start-group；自包含 .a 直接链接即可。
  target_link_libraries(iot_video_demo PRIVATE ${SDK_A} ${SYS_LIBS})
endif()

# iot_aitalk_demo —— AI 语音 demo（mac 用 AVFoundation 采集，audio_device_mac.mm）。
if(BUILD_IOT_AITALK)
  add_executable(
    iot_aitalk_demo
    demo/iot_aitalk_demo/main.c demo/iot_aitalk_demo/aitalk_demo.c
    demo/iot_aitalk_demo/audio_device_mac.mm)
  target_include_directories(
    iot_aitalk_demo PRIVATE ${DEMO_DIR}/iot_aitalk_demo ${SDK_DIR}/include
                            ${SDK_DIR}/include/hal)
  target_compile_definitions(iot_aitalk_demo PRIVATE ${_DEMO_MEDIA_DEF})
  target_link_libraries(iot_aitalk_demo PRIVATE ${SDK_A} ${SYS_LIBS})
endif()
