
cmake_minimum_required(VERSION 3.10.0)

if (${CMAKE_VERSION} VERSION_GREATER "3.13.0")
    cmake_policy(SET CMP0079 NEW)
    set_property(GLOBAL PROPERTY USE_FOLDERS ON)
endif()

# Project
project(rtccli)

option(DYNAMIC_LOAD_BYTE ON)

set(CMAKE_CONFIGURATION_TYPES Debug Release)

if ("${BYTERTC_SDK_DIR}" STREQUAL "")
    message(FATAL_ERROR "missing BYTERTC_SDK_DIR, please set BYTERTC_SDK_DIR")
endif()
message(STATUS "BYTERTC_SDK_DIR: ${BYTERTC_SDK_DIR}")

set(CMAKE_CXX_FLAGS_DEBUG "-ggdb '-std=c++14' -fPIC -pthread")
file(GLOB_RECURSE RTCCLI_SRCS "${CMAKE_SOURCE_DIR}/src/*.h" "${CMAKE_SOURCE_DIR}/src/*.cc")

set(RTCCLI_SRCS 
    src/main.cc
    src/rtc_wrapper.h
    src/rtc_wrapper.cc
    src/rtc_event_handler.h
    src/util/argparser.cc
    src/util/argparser.h
    src/util/util.cc
    src/util/util.h

)

if (NOT "x${FFMPEG_DEV_ROOT}" STREQUAL "x")
    message(STATUS "LINK FFMPEG_DEV_ROOT with ${FFMPEG_DEV_ROOT}")
    set(RTCCLI_SRCS ${RTCCLI_SRCS}
        src/decode_mp4_to_yuv.cc
        src/decode_mp4_to_yuv.h
)

endif()

add_executable(rtccli ${RTCCLI_SRCS})
set(CMAKE_BUILD_TYPE Debug)

if(DEFINED FFMPEG_DEV_ROOT)
    target_include_directories(${PROJECT_NAME} PRIVATE ${FFMPEG_DEV_ROOT}/include SYSTEM)
    target_link_directories(${PROJECT_NAME} PRIVATE ${FFMPEG_DEV_ROOT}/lib)
    target_link_libraries(${PROJECT_NAME} PRIVATE -ldl -lavformat -lavcodec -pthread -lswresample -lavutil -lswscale -lavutil -lz)
    target_compile_definitions(${PROJECT_NAME} PRIVATE FFMPEG_DEV_ROOT)
endif()


set(CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/cmake/modules)
find_package(ByteRTCSDK REQUIRED)

target_include_directories(${PROJECT_NAME} PUBLIC ${BYTERTC_SDK_DIR}/include)
message(STATUS ${BYTERTC_LIBRARY} )
target_link_libraries(${PROJECT_NAME} PUBLIC ${BYTERTC_LIBRARY})

target_link_options(${PROJECT_NAME} PUBLIC -Wl,-rpath-link=${BYTERTC_LIBRARY})

find_package(OpenGL REQUIRED)
target_include_directories(${PROJECT_NAME} PUBLIC ${OpenGL_INCLUDE_DIRS})
target_link_libraries(${PROJECT_NAME} PUBLIC ${OPENGL_LIBRARIES})

find_path(PULSEAUDIO_INCLUDE_DIR
        NAMES pulse/pulseaudio.h
        DOC "The PulseAudio include directory"
    )
find_library(PULSEAUDIO_LIBRARY
        NAMES pulse
        DOC "The PulseAudio library"
    )
target_include_directories(${PROJECT_NAME} PUBLIC ${PULSEAUDIO_INCLUDE_DIRS})
target_link_libraries(${PROJECT_NAME} PUBLIC pulse-simple pulse)

set(ARCHIVE_DIR archive)
add_custom_target(
  archive
  COMMAND ${CMAKE_COMMAND} -E make_directory ${ARCHIVE_DIR}
  COMMAND ${CMAKE_COMMAND} -E copy  ${BYTERTC_LIBRARY} ${ARCHIVE_DIR}/
  COMMAND ${CMAKE_COMMAND} -E copy  ${CMAKE_BINARY_DIR}/${PROJECT_NAME}  ${ARCHIVE_DIR}/
  COMMAND patchelf --set-rpath '$$ORIGIN' ${ARCHIVE_DIR}/${PROJECT_NAME}
  WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
)
add_dependencies(archive ${PROJECT_NAME})

add_custom_command(
  TARGET archive POST_BUILD
  COMMAND ${CMAKE_COMMAND} -E tar cvf "${ARCHIVE_DIR}.zip" --format=zip
  ${ARCHIVE_DIR}
    WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
)
