cmake_minimum_required(VERSION 3.16)
project(ohos_coap_cangjie_bridge LANGUAGES C)

set(LIBCOAP_SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/../third_party/libcoap" CACHE PATH "Pinned libcoap source directory")
if(NOT EXISTS "${LIBCOAP_SOURCE_DIR}/CMakeLists.txt")
  message(FATAL_ERROR "Initialize third_party/libcoap, or set LIBCOAP_SOURCE_DIR")
endif()
set(BUILD_SHARED_LIBS OFF CACHE BOOL "" FORCE)
set(ENABLE_DTLS OFF CACHE BOOL "" FORCE)
set(ENABLE_TCP OFF CACHE BOOL "" FORCE)
set(ENABLE_WS OFF CACHE BOOL "" FORCE)
set(ENABLE_OSCORE OFF CACHE BOOL "" FORCE)
set(ENABLE_AF_UNIX OFF CACHE BOOL "" FORCE)
set(ENABLE_EXAMPLES OFF CACHE BOOL "" FORCE)
set(ENABLE_DOCS OFF CACHE BOOL "" FORCE)
set(ENABLE_TESTS OFF CACHE BOOL "" FORCE)
set(WITH_OBSERVE_PERSIST OFF CACHE BOOL "" FORCE)
set(WITH_EPOLL OFF CACHE BOOL "" FORCE)
set(CMAKE_POSITION_INDEPENDENT_CODE ON)
add_subdirectory("${LIBCOAP_SOURCE_DIR}" "${CMAKE_CURRENT_BINARY_DIR}/libcoap")

add_library(coap_cj_bridge SHARED coap_bridge.c)
target_compile_features(coap_cj_bridge PRIVATE c_std_11)
target_compile_definitions(coap_cj_bridge PRIVATE CC_COAP_EXPORTS)
target_link_libraries(coap_cj_bridge PRIVATE coap-3)
target_include_directories(coap_cj_bridge PUBLIC "${CMAKE_CURRENT_SOURCE_DIR}")
if(MINGW)
  # Avoid mixing MinGW 15 clock_gettime64 with the SDK's older pthread DLL.
  target_link_libraries(coap_cj_bridge PRIVATE ws2_32 "-Wl,-Bstatic" winpthread "-Wl,-Bdynamic")
  target_link_options(coap_cj_bridge PRIVATE -static-libgcc)
endif()
if(NOT WIN32)
  set_target_properties(coap_cj_bridge PROPERTIES C_VISIBILITY_PRESET hidden)
endif()
