mirror of
https://github.com/RetroShare/RetroShare.git
synced 2024-12-26 16:09:35 -05:00
e62b847234
Add more options to CMake: Support for JSON API Support for forum deep index Fix bitdht CMake project name General CMake files improvements
412 lines
11 KiB
CMake
412 lines
11 KiB
CMake
# RetroShare decentralized communication platform
|
|
#
|
|
# Copyright (C) 2021 Gioacchino Mazzurco <gio@eigenlab.org>
|
|
# Copyright (C) 2021 Asociación Civil Altermundi <info@altermundi.net>
|
|
#
|
|
# SPDX-License-Identifier: CC0-1.0
|
|
|
|
cmake_minimum_required (VERSION 3.18.0)
|
|
project(retroshare)
|
|
|
|
include(CMakeDependentOption)
|
|
|
|
set(FETCHCONTENT_QUIET OFF)
|
|
include(FetchContent)
|
|
|
|
# sqlcipher
|
|
option(
|
|
RS_SQLCIPHER
|
|
"SQLCipher encryption for GXS database"
|
|
ON )
|
|
|
|
# rs_gxs_send_all
|
|
option(
|
|
RS_GXS_SEND_ALL
|
|
"GXS distribute all available messages on request, indipendently from \
|
|
local sync timer"
|
|
ON )
|
|
|
|
# bitdht
|
|
option(
|
|
RS_BITDHT
|
|
"Use bitdht (BitTorrent DHT own implementation) to look for online peers"
|
|
ON )
|
|
|
|
# use_dht_stunner
|
|
cmake_dependent_option(
|
|
RS_BITDHT_STUNNER
|
|
"Use bitdht (BitTorrent DHT own implementation) for NAT type discovery and \
|
|
attempt the STUN (Session Traversal Utilities for NAT)"
|
|
ON
|
|
"RS_BITDHT"
|
|
OFF )
|
|
|
|
# use_dht_stunner_ext_ip
|
|
cmake_dependent_option(
|
|
RS_BITDHT_STUNNER_EXT_IP
|
|
"Use bitdht (BitTorrent DHT own implementation) stunner to figure out our \
|
|
external IP. As this purely relying on random DHT peers that answer our \
|
|
request, it can easily be abused. Therefore, it is turned off by default."
|
|
OFF
|
|
"RS_BITDHT_STUNNER"
|
|
OFF )
|
|
|
|
# rs_jsonapi
|
|
option(
|
|
RS_JSON_API
|
|
"Use restbed to expose libretroshare as JSON API via HTTP"
|
|
OFF )
|
|
|
|
# rs_deep_forums_index
|
|
option(
|
|
RS_FORUM_DEEP_INDEX
|
|
"Xapian based full text index and search of GXS forums"
|
|
OFF )
|
|
|
|
# rs_broadcast_discovery
|
|
option(
|
|
RS_BRODCAST_DISCOVERY
|
|
"Local area network peer discovery via udp-discovery-cpp"
|
|
ON )
|
|
|
|
# rs_dh_init_check
|
|
option(
|
|
RS_DH_PRIME_INIT_CHECK
|
|
"Check Diffie Hellman prime at each startup. This is not necessary and on \
|
|
all Android mobile phones tested this take at least one minute at startup \
|
|
which is untolerable for most phone users."
|
|
ON )
|
|
|
|
option(
|
|
RS_MINIUPNPC
|
|
"Forward ports in NAT router via miniupnpc"
|
|
ON )
|
|
|
|
cmake_dependent_option(
|
|
RS_LIBUPNP
|
|
"Forward ports in NAT router via libupnp (unstable)"
|
|
OFF
|
|
"NOT RS_MINIUPNPC"
|
|
OFF )
|
|
|
|
option(
|
|
RS_LIBRETROSHARE_STATIC
|
|
"Build RetroShare static library"
|
|
ON )
|
|
|
|
cmake_dependent_option(
|
|
RS_LIBRETROSHARE_SHARED
|
|
"Build RetroShare shared library"
|
|
OFF
|
|
"NOT RS_LIBRETROSHARE_STATIC"
|
|
OFF )
|
|
|
|
# rs_deprecatedwarning
|
|
option(
|
|
RS_WARN_DEPRECATED
|
|
"Print warning about RetroShare deprecated components usage during build"
|
|
ON )
|
|
|
|
# rs_cppwarning
|
|
option(
|
|
RS_WARN_LESS
|
|
"Silence a few at the moment very common warnings about RetroShare \
|
|
components during build"
|
|
OFF )
|
|
|
|
# rs_v07_changes
|
|
option(
|
|
RS_V07_BREAKING_CHANGES
|
|
"Enable retro-compatibility breaking changes planned for RetroShare 0.7.0"
|
|
OFF )
|
|
|
|
set(
|
|
RS_DATA_DIR
|
|
"${CMAKE_INSTALL_PREFIX}/share/retroshare"
|
|
CACHE STRING
|
|
"Path where to install RetroShare system wide data" )
|
|
|
|
################################################################################
|
|
|
|
find_package(Git REQUIRED)
|
|
|
|
#function(check_submodule sPath)
|
|
# if(NOT EXISTS "${sPath}/.git" )
|
|
# message("Initializing submodule ${sPath}")
|
|
# execute_process(
|
|
# COMMAND "${GIT_EXECUTABLE}" submodule update --init
|
|
# WORKING_DIRECTORY "${sPath}"
|
|
# COMMAND_ECHO STDERR
|
|
# COMMAND_ERROR_IS_FATAL ANY)
|
|
# endif()
|
|
#endfunction()
|
|
|
|
################################################################################
|
|
|
|
include(src/CMakeLists.txt)
|
|
list(TRANSFORM RS_SOURCES PREPEND src/)
|
|
list(TRANSFORM RS_PUBLIC_HEADERS PREPEND src/)
|
|
|
|
if(RS_LIBRETROSHARE_STATIC)
|
|
add_library(${PROJECT_NAME} STATIC ${RS_SOURCES})
|
|
endif(RS_LIBRETROSHARE_STATIC)
|
|
|
|
if(RS_LIBRETROSHARE_SHARED)
|
|
add_library(${PROJECT_NAME} SHARED ${RS_SOURCES})
|
|
|
|
## Ensure statically linked libraries such as openpgpsdk are compiled with
|
|
## PIC Which is needed for shared library
|
|
set(CMAKE_POSITION_INDEPENDENT_CODE ON)
|
|
endif(RS_LIBRETROSHARE_SHARED)
|
|
|
|
target_include_directories(
|
|
${PROJECT_NAME}
|
|
PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/src )
|
|
|
|
|
|
find_package(OpenSSL REQUIRED)
|
|
target_include_directories(${PROJECT_NAME} PRIVATE ${OPENSSL_INCLUDE_DIR})
|
|
target_link_libraries(${PROJECT_NAME} PRIVATE OpenSSL::SSL OpenSSL::Crypto)
|
|
|
|
################################################################################
|
|
|
|
set(OPENPGPSDK_DEVEL_DIR "${CMAKE_CURRENT_SOURCE_DIR}/../openpgpsdk/")
|
|
if(EXISTS "${OPENPGPSDK_DEVEL_DIR}/.git" )
|
|
message(
|
|
CHECK_PASS
|
|
"openpgpsdk submodule found at ${OPENPGPSDK_DEVEL_DIR} using it" )
|
|
add_subdirectory(${OPENPGPSDK_DEVEL_DIR} ${CMAKE_BINARY_DIR}/openpgpsdk)
|
|
else()
|
|
FetchContent_Declare(
|
|
openpgpsdk
|
|
GIT_REPOSITORY "https://gitlab.com/RetroShare/openpgpsdk.git"
|
|
GIT_TAG "origin/master"
|
|
GIT_SHALLOW TRUE
|
|
GIT_PROGRESS TRUE
|
|
TIMEOUT 10
|
|
)
|
|
FetchContent_MakeAvailable(openpgpsdk)
|
|
endif()
|
|
|
|
target_link_libraries(${PROJECT_NAME} PRIVATE openpgpsdk)
|
|
|
|
################################################################################
|
|
|
|
if(RS_BITDHT)
|
|
set(BITDHT_DEVEL_DIR "${CMAKE_CURRENT_SOURCE_DIR}/../libbitdht/")
|
|
if(EXISTS "${BITDHT_DEVEL_DIR}/.git" )
|
|
message(
|
|
CHECK_PASS
|
|
"BitDHT submodule found at ${BITDHT_DEVEL_DIR} using it" )
|
|
add_subdirectory(${BITDHT_DEVEL_DIR} ${CMAKE_BINARY_DIR}/bitdht)
|
|
else()
|
|
FetchContent_Declare(
|
|
bitdht
|
|
GIT_REPOSITORY "https://gitlab.com/RetroShare/bitdht.git"
|
|
GIT_TAG "origin/master"
|
|
GIT_SHALLOW TRUE
|
|
GIT_PROGRESS TRUE
|
|
TIMEOUT 10
|
|
)
|
|
FetchContent_MakeAvailable(bitdht)
|
|
endif()
|
|
|
|
add_compile_definitions(RS_USE_BITDHT)
|
|
target_link_libraries(${PROJECT_NAME} PRIVATE bitdht)
|
|
|
|
if(RS_BITDHT_STUNNER)
|
|
add_compile_definitions(RS_USE_DHT_STUNNER)
|
|
|
|
if(RS_BITDHT_STUNNER_EXT_IP)
|
|
# TODO: Refactor this define to use proper naming
|
|
add_compile_definitions(ALLOW_DHT_STUNNER)
|
|
endif(RS_BITDHT_STUNNER_EXT_IP)
|
|
endif(RS_BITDHT_STUNNER)
|
|
endif(RS_BITDHT)
|
|
|
|
################################################################################
|
|
|
|
if(RS_JSON_API)
|
|
find_package(Doxygen REQUIRED)
|
|
find_package(Python3 REQUIRED)
|
|
|
|
## TODO: execute at build time instead that at cofiguration time see
|
|
## add_custom_command or add_custom_target
|
|
|
|
set(
|
|
JSON_API_GENERATOR_WORK_DIR
|
|
"${CMAKE_BINARY_DIR}/jsonapi-generator.workdir/" )
|
|
|
|
set(
|
|
JSON_API_GENERATOR_DOXYFILE
|
|
"${JSON_API_GENERATOR_WORK_DIR}/jsonapi-generator-doxygen.conf" )
|
|
|
|
set(
|
|
JSONAPI_GENERATOR_OUTPUT_DIR
|
|
"${JSON_API_GENERATOR_WORK_DIR}/src/" )
|
|
|
|
set(
|
|
JSONAPI_GENERATOR_SOURCE_DIR
|
|
"${CMAKE_CURRENT_SOURCE_DIR}/src/jsonapi/" )
|
|
|
|
set(
|
|
JSONAPI_GENERATOR_EXECUTABLE
|
|
"${JSONAPI_GENERATOR_SOURCE_DIR}/jsonapi-generator.py" )
|
|
|
|
file(
|
|
COPY "src/jsonapi/jsonapi-generator-doxygen.conf"
|
|
DESTINATION "${JSON_API_GENERATOR_WORK_DIR}" )
|
|
|
|
file(
|
|
APPEND
|
|
"${JSON_API_GENERATOR_DOXYFILE}"
|
|
"OUTPUT_DIRECTORY=${JSONAPI_GENERATOR_OUTPUT_DIR}\n"
|
|
"INPUT=${CMAKE_CURRENT_SOURCE_DIR}" )
|
|
|
|
add_custom_command(
|
|
OUTPUT
|
|
"${JSONAPI_GENERATOR_OUTPUT_DIR}/jsonapi-includes.inl"
|
|
"${JSONAPI_GENERATOR_OUTPUT_DIR}/jsonapi-wrappers.inl"
|
|
COMMAND ${DOXYGEN_EXECUTABLE} ${JSON_API_GENERATOR_DOXYFILE}
|
|
COMMAND
|
|
${Python3_EXECUTABLE} ${JSONAPI_GENERATOR_EXECUTABLE}
|
|
${JSONAPI_GENERATOR_SOURCE_DIR} ${JSONAPI_GENERATOR_OUTPUT_DIR}
|
|
MAIN_DEPENDENCY "${JSONAPI_GENERATOR_EXECUTABLE}"
|
|
DEPENDS ${JSON_API_GENERATOR_DOXYFILE} ${RS_PUBLIC_HEADERS} )
|
|
|
|
target_sources(
|
|
${PROJECT_NAME} PRIVATE
|
|
"${JSONAPI_GENERATOR_OUTPUT_DIR}/jsonapi-includes.inl"
|
|
"${JSONAPI_GENERATOR_OUTPUT_DIR}/jsonapi-wrappers.inl" )
|
|
|
|
include_directories(${JSONAPI_GENERATOR_OUTPUT_DIR})
|
|
|
|
set(BUILD_TESTS OFF CACHE BOOL "Do not build restbed tests")
|
|
set(BUILD_SSL OFF CACHE BOOL "Do not build restbed SSL support")
|
|
|
|
FetchContent_Declare(
|
|
restbed
|
|
GIT_REPOSITORY "https://github.com/Corvusoft/restbed.git"
|
|
GIT_TAG "4.8"
|
|
GIT_SUBMODULES dependency/asio dependency/catch
|
|
GIT_SHALLOW TRUE
|
|
GIT_PROGRESS TRUE
|
|
TIMEOUT 10
|
|
)
|
|
FetchContent_MakeAvailable(restbed)
|
|
|
|
target_link_libraries(${PROJECT_NAME} PRIVATE restbed)
|
|
|
|
## TODO: work around target_include_directories should be added upstream
|
|
include_directories(${restbed_SOURCE_DIR}/source/)
|
|
|
|
add_compile_definitions(RS_JSONAPI)
|
|
endif(RS_JSON_API)
|
|
|
|
################################################################################
|
|
|
|
if(RS_FORUM_DEEP_INDEX)
|
|
find_package(Xapian REQUIRED)
|
|
target_link_libraries(${PROJECT_NAME} PRIVATE ${XAPIAN_LIBRARIES})
|
|
|
|
add_compile_definitions(RS_DEEP_FORUMS_INDEX)
|
|
endif(RS_FORUM_DEEP_INDEX)
|
|
|
|
################################################################################
|
|
|
|
## TODO: Check if https://github.com/rbock/sqlpp11 or
|
|
## https://github.com/rbock/sqlpp17 may improve GXS code
|
|
if(RS_SQLCIPHER)
|
|
find_library(RS_SQL_LIB "sqlcipher" REQUIRED)
|
|
find_path(
|
|
RS_SQL_LIB_INCLUDE "sqlcipher/sqlite3.h"
|
|
PATH_SUFFIXES "include" "includes"
|
|
REQUIRED )
|
|
target_include_directories(
|
|
${PROJECT_NAME}
|
|
PRIVATE "${RS_SQL_LIB_INCLUDE}/sqlcipher" )
|
|
target_link_libraries(${PROJECT_NAME} PRIVATE ${RS_SQL_LIB})
|
|
else()
|
|
add_compile_definitions(NO_SQLCIPHER)
|
|
find_package(SQLite3 REQUIRED)
|
|
target_link_libraries(${PROJECT_NAME} PRIVATE SQLite::SQLite3)
|
|
endif()
|
|
|
|
add_compile_definitions(
|
|
SQLITE_HAS_CODEC
|
|
RS_ENABLE_GXS
|
|
GXS_ENABLE_SYNC_MSGS
|
|
RS_USE_GXS_DISTANT_SYNC
|
|
RS_GXS_TRANS
|
|
V07_NON_BACKWARD_COMPATIBLE_CHANGE_001
|
|
V07_NON_BACKWARD_COMPATIBLE_CHANGE_002
|
|
V07_NON_BACKWARD_COMPATIBLE_CHANGE_003 )
|
|
|
|
if(RS_V07_BREAKING_CHANGES)
|
|
add_compile_definitions(
|
|
V07_NON_BACKWARD_COMPATIBLE_CHANGE_004
|
|
V07_NON_BACKWARD_COMPATIBLE_CHANGE_UNNAMED )
|
|
endif()
|
|
|
|
if(RS_DH_PRIME_INIT_CHECK)
|
|
add_compile_definitions(RS_DISABLE_DIFFIE_HELLMAN_INIT_CHECK)
|
|
endif(RS_DH_PRIME_INIT_CHECK)
|
|
|
|
if(RS_MINIUPNPC)
|
|
add_compile_definitions(RS_USE_LIBMINIUPNPC)
|
|
endif(RS_MINIUPNPC)
|
|
|
|
if(RS_LIBUPNP)
|
|
message(FATAL_ERROR "UPnP support via libupnp is currently not supported")
|
|
#add_compile_definitions(RS_USE_LIBUPNP)
|
|
endif(RS_LIBUPNP)
|
|
|
|
if(RS_GXS_SEND_ALL)
|
|
add_compile_definitions(RS_GXS_SEND_ALL)
|
|
endif(RS_GXS_SEND_ALL)
|
|
|
|
if(RS_BRODCAST_DISCOVERY)
|
|
## TODO: upstream option to disable tests building
|
|
set(BUILD_EXAMPLE OFF CACHE BOOL "Do not build udp-discovery-cpp examples")
|
|
set(BUILD_TOOL OFF CACHE BOOL "Do not build udp-discovery-tool application")
|
|
FetchContent_Declare(
|
|
udp-discovery-cpp
|
|
GIT_REPOSITORY "https://github.com/truvorskameikin/udp-discovery-cpp.git"
|
|
GIT_TAG "origin/master"
|
|
GIT_SHALLOW TRUE
|
|
GIT_PROGRESS TRUE
|
|
TIMEOUT 10
|
|
)
|
|
FetchContent_MakeAvailable(udp-discovery-cpp)
|
|
|
|
target_link_libraries(${PROJECT_NAME} PRIVATE udp-discovery-cpp)
|
|
|
|
## TODO: Temporary work around target_include_directories should be added
|
|
## upstream
|
|
include_directories(${udp-discovery-cpp_SOURCE_DIR})
|
|
endif(RS_BRODCAST_DISCOVERY)
|
|
|
|
if(NOT RS_WARN_DEPRECATED)
|
|
add_compile_definitions(RS_NO_WARN_DEPRECATED)
|
|
target_compile_options(
|
|
${PROJECT_NAME} PRIVATE
|
|
-Wno-deprecated -Wno-deprecated-declarations )
|
|
endif(NOT RS_WARN_DEPRECATED)
|
|
|
|
if(RS_WARN_LESS)
|
|
add_compile_definitions(RS_NO_WARN_CPP)
|
|
|
|
target_compile_options(
|
|
${PROJECT_NAME} PRIVATE
|
|
-Wno-cpp -Wno-inconsistent-missing-override )
|
|
endif(RS_WARN_LESS)
|
|
|
|
################################################################################
|
|
|
|
if(CMAKE_SYSTEM_NAME STREQUAL "Linux")
|
|
add_compile_definitions(RS_DATA_DIR="${RS_DATA_DIR}")
|
|
endif(CMAKE_SYSTEM_NAME STREQUAL "Linux")
|
|
|
|
## Useful to debug CMake
|
|
#set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
|