|
| 1 | +include(ExternalProject) |
| 2 | + |
| 3 | +if (${CMAKE_SYSTEM_NAME} STREQUAL "Emscripten") |
| 4 | + set(JSONCPP_CMAKE_COMMAND emcmake cmake) |
| 5 | +else() |
| 6 | + set(JSONCPP_CMAKE_COMMAND ${CMAKE_COMMAND}) |
| 7 | +endif() |
| 8 | + |
| 9 | +# Disable implicit fallthrough warning in jsoncpp for gcc >= 7 until the upstream handles it properly |
| 10 | +if (("${CMAKE_CXX_COMPILER_ID}" MATCHES "GNU") AND CMAKE_CXX_COMPILER_VERSION VERSION_GREATER 7.0) |
| 11 | + set(JSONCCP_EXTRA_FLAGS -Wno-implicit-fallthrough) |
| 12 | +else() |
| 13 | + set(JSONCCP_EXTRA_FLAGS "") |
| 14 | +endif() |
| 15 | + |
| 16 | +set(prefix "${CMAKE_BINARY_DIR}/deps") |
| 17 | +set(JSONCPP_LIBRARY "${prefix}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}jsoncpp${CMAKE_STATIC_LIBRARY_SUFFIX}") |
| 18 | +set(JSONCPP_INCLUDE_DIR "${prefix}/include") |
| 19 | + |
| 20 | +set(byproducts "") |
| 21 | +if(CMAKE_VERSION VERSION_GREATER 3.1) |
| 22 | + set(byproducts BUILD_BYPRODUCTS "${JSONCPP_LIBRARY}") |
| 23 | +endif() |
| 24 | + |
| 25 | +ExternalProject_Add(jsoncpp-project |
| 26 | + PREFIX "${prefix}" |
| 27 | + DOWNLOAD_DIR "${CMAKE_SOURCE_DIR}/deps/downloads" |
| 28 | + DOWNLOAD_NAME jsoncpp-1.7.7.tar.gz |
| 29 | + URL https://github.com/open-source-parsers/jsoncpp/archive/1.7.7.tar.gz |
| 30 | + URL_HASH SHA256=087640ebcf7fbcfe8e2717a0b9528fff89c52fcf69fa2a18cc2b538008098f97 |
| 31 | + CMAKE_COMMAND ${JSONCPP_CMAKE_COMMAND} |
| 32 | + CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=<INSTALL_DIR> |
| 33 | + -DCMAKE_C_COMPILER=${CMAKE_C_COMPILER} |
| 34 | + -DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER} |
| 35 | + # Build static lib but suitable to be included in a shared lib. |
| 36 | + -DCMAKE_POSITION_INDEPENDENT_CODE=${BUILD_SHARED_LIBS} |
| 37 | + -DJSONCPP_WITH_TESTS=OFF |
| 38 | + -DJSONCPP_WITH_PKGCONFIG_SUPPORT=OFF |
| 39 | + -DCMAKE_CXX_FLAGS=${JSONCCP_EXTRA_FLAGS} |
| 40 | + # Overwrite build and install commands to force Release build on MSVC. |
| 41 | + BUILD_COMMAND cmake --build <BINARY_DIR> --config Release |
| 42 | + INSTALL_COMMAND cmake --build <BINARY_DIR> --config Release --target install |
| 43 | + ${byproducts} |
| 44 | +) |
| 45 | + |
| 46 | +# Create jsoncpp imported library |
| 47 | +add_library(jsoncpp STATIC IMPORTED) |
| 48 | +file(MAKE_DIRECTORY ${JSONCPP_INCLUDE_DIR}) # Must exist. |
| 49 | +set_property(TARGET jsoncpp PROPERTY IMPORTED_LOCATION ${JSONCPP_LIBRARY}) |
| 50 | +set_property(TARGET jsoncpp PROPERTY INTERFACE_INCLUDE_DIRECTORIES ${JSONCPP_INCLUDE_DIR}) |
| 51 | +add_dependencies(jsoncpp jsoncpp-project) |
0 commit comments