mirror of
https://github.com/RetroShare/RetroShare.git
synced 2024-10-01 02:35:48 -04:00
6a92b99da3
libretroshare (not all build options yet) and it's dependencies can now be built using CMake instead of qmake. Even Qt itself deprecated qmake, which is not developed anymore, as build system and it was making many things much more difficult and requiring an enormous amount of black magic to support a wide range of platforms. libretroshare can now easly be build as static or shared library with simple commands and a maintaniable build system: ``` cmake \ -D RS_LIBRETROSHARE_STATIC=OFF -D RS_LIBRETROSHARE_SHARED=ON \ -S $YOUR_RS_SOURCE_DIR/libretroshare/ -B . make ```
244 lines
6.0 KiB
CMake
244 lines
6.0 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)
|
|
|
|
# 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
|
|
option(
|
|
RS_BITDHT_STUNNER
|
|
"Use bitdht (BitTorrent DHT own implementation) for NAT type discovery and \
|
|
attempt the STUN (Session Traversal Utilities for NAT)"
|
|
ON )
|
|
|
|
# use_dht_stunner_ext_ip
|
|
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_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
|
|
)
|
|
|
|
include(CMakeDependentOption)
|
|
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" )
|
|
|
|
################################################################################
|
|
|
|
include(src/CMakeLists.txt)
|
|
list(TRANSFORM RS_SOURCES 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)
|
|
|
|
################################################################################
|
|
|
|
add_subdirectory(../openpgpsdk ${CMAKE_BINARY_DIR}/openpgpsdk)
|
|
target_link_libraries(${PROJECT_NAME} PRIVATE openpgpsdk)
|
|
|
|
if(RS_BITDHT)
|
|
add_compile_definitions(RS_USE_BITDHT)
|
|
add_subdirectory(../libbitdht ${CMAKE_BINARY_DIR}/libbitdht)
|
|
target_link_libraries(${PROJECT_NAME} PRIVATE libbitdht)
|
|
endif(RS_BITDHT)
|
|
|
|
## 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_MINIUPNPC)
|
|
add_compile_definitions(RS_USE_LIBMINIUPNPC)
|
|
endif(RS_MINIUPNPC)
|
|
|
|
if(RS_LIBUPNP)
|
|
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)
|
|
add_subdirectory(
|
|
../supportlibs/udp-discovery-cpp/
|
|
${CMAKE_BINARY_DIR}/supportlibs/udp-discovery-cpp/ )
|
|
target_link_libraries(${PROJECT_NAME} PRIVATE udp-discovery)
|
|
|
|
## Temporary work around target_include_directories should be added upstream
|
|
include_directories(../supportlibs/udp-discovery-cpp/)
|
|
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(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)
|