mirror of
https://github.com/ClusterM/open-bamboo-networking.git
synced 2026-10-22 02:52:25 -05:00
69 lines
2.9 KiB
CMake
69 lines
2.9 KiB
CMake
# Static PIC cJSON via FetchContent for embedding into vendored mosquitto's
|
|
# libmosquitto_common without a host libcjson.so NEEDED on libbambu_networking.
|
|
|
|
function(obn_vendor_cjson_setup)
|
|
include(FetchContent)
|
|
|
|
set(_obn_cjson_override_dir "${CMAKE_CURRENT_BINARY_DIR}/_obn_cmake_overrides")
|
|
file(MAKE_DIRECTORY "${_obn_cjson_override_dir}")
|
|
|
|
list(PREPEND CMAKE_MODULE_PATH "${_obn_cjson_override_dir}")
|
|
set(CMAKE_MODULE_PATH "${CMAKE_MODULE_PATH}" PARENT_SCOPE)
|
|
|
|
# CACHE+FORCE so cJSON option() calls cannot reset these when combined with
|
|
# mosquitto in the same CMake run.
|
|
set(BUILD_SHARED_LIBS OFF CACHE BOOL "" FORCE)
|
|
set(CJSON_OVERRIDE_BUILD_SHARED_LIBS ON CACHE BOOL "" FORCE)
|
|
set(CJSON_BUILD_SHARED_LIBS OFF CACHE BOOL "" FORCE)
|
|
set(ENABLE_CJSON_TEST OFF CACHE BOOL "" FORCE)
|
|
set(ENABLE_CJSON_UTILS OFF CACHE BOOL "" FORCE)
|
|
set(ENABLE_CUSTOM_COMPILER_FLAGS OFF CACHE BOOL "" FORCE)
|
|
set(ENABLE_TARGET_EXPORT OFF CACHE BOOL "" FORCE)
|
|
set(ENABLE_CJSON_UNINSTALL OFF CACHE BOOL "" FORCE)
|
|
|
|
FetchContent_Declare(cjson
|
|
GIT_REPOSITORY https://github.com/DaveGamble/cJSON.git
|
|
GIT_TAG ${OBN_CJSON_GIT_TAG}
|
|
GIT_SHALLOW TRUE
|
|
GIT_PROGRESS TRUE
|
|
)
|
|
FetchContent_GetProperties(cjson)
|
|
if(NOT cjson_POPULATED)
|
|
FetchContent_Populate(cjson)
|
|
add_subdirectory("${cjson_SOURCE_DIR}" "${cjson_BINARY_DIR}" EXCLUDE_FROM_ALL)
|
|
endif()
|
|
|
|
if(NOT TARGET cjson)
|
|
message(FATAL_ERROR "obn: FetchContent cJSON did not produce target cjson")
|
|
endif()
|
|
|
|
# Mosquitto includes <cjson/cJSON.h>; upstream tarball uses cJSON.h at root.
|
|
set(_obn_cjson_iface_root "${CMAKE_CURRENT_BINARY_DIR}/_obn_cjson_include")
|
|
file(MAKE_DIRECTORY "${_obn_cjson_iface_root}/cjson")
|
|
file(COPY "${cjson_SOURCE_DIR}/cJSON.h" DESTINATION "${_obn_cjson_iface_root}/cjson")
|
|
|
|
target_include_directories(cjson PUBLIC "$<BUILD_INTERFACE:${_obn_cjson_iface_root}>")
|
|
set_target_properties(cjson PROPERTIES POSITION_INDEPENDENT_CODE ON)
|
|
|
|
# Consumers of mosquitto's public headers need this path too (#include
|
|
# <cjson/cJSON.h> via mosquitto/libcommon_cjson.h); do not link the cjson
|
|
# target into the plugin again (already inside vendored libmosquitto_common).
|
|
add_library(obn_vendor_cjson_iface INTERFACE)
|
|
target_include_directories(obn_vendor_cjson_iface INTERFACE
|
|
"$<BUILD_INTERFACE:${_obn_cjson_iface_root}>")
|
|
|
|
add_library(cJSON ALIAS cjson)
|
|
|
|
file(WRITE "${_obn_cjson_override_dir}/FindcJSON.cmake"
|
|
"include_guard(GLOBAL)\n"
|
|
"if(NOT TARGET cJSON)\n"
|
|
" message(FATAL_ERROR \"obn: FindcJSON: vendored cJSON target missing\")\n"
|
|
"endif()\n"
|
|
"set(CJSON_FOUND TRUE)\n"
|
|
"set(cJSON_FOUND TRUE)\n"
|
|
"set(CJSON_INCLUDE_DIRS \"${_obn_cjson_iface_root}\")\n"
|
|
)
|
|
|
|
message(STATUS "obn: using vendored cJSON static (${OBN_CJSON_GIT_TAG})")
|
|
endfunction()
|