summary refs log tree commit diff
path: root/deps
diff options
context:
space:
mode:
Diffstat (limited to 'deps')
-rw-r--r--deps/CMakeLists.txt82
-rw-r--r--deps/cmake/Boost.cmake23
-rw-r--r--deps/cmake/MatrixClient.cmake31
-rw-r--r--deps/cmake/MatrixStructs.cmake25
-rw-r--r--deps/cmake/Olm.cmake34
-rw-r--r--deps/cmake/OlmCMakeLists.txt107
-rw-r--r--deps/cmake/OlmConfig.cmake.in11
-rw-r--r--deps/cmake/SpdLog.cmake22
8 files changed, 335 insertions, 0 deletions
diff --git a/deps/CMakeLists.txt b/deps/CMakeLists.txt
new file mode 100644

index 00000000..06b1f7e1 --- /dev/null +++ b/deps/CMakeLists.txt
@@ -0,0 +1,82 @@ +cmake_minimum_required(VERSION 3.1) +project(NHEKO_DEPS) + +# Point CMake at any custom modules we may ship +list(APPEND CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR}/cmake") + +if(NOT CMAKE_BUILD_TYPE) + set(CMAKE_BUILD_TYPE Release) +endif() + +set(DEPS_INSTALL_DIR "${CMAKE_BINARY_DIR}/usr" + CACHE PATH "Dependencies install directory.") +set(DEPS_BIN_DIR "${DEPS_INSTALL_DIR}/bin" + CACHE PATH "Dependencies binary install directory.") +set(DEPS_LIB_DIR "${DEPS_INSTALL_DIR}/lib" + CACHE PATH "Dependencies library install directory.") +set(DEPS_BUILD_DIR "${CMAKE_BINARY_DIR}/build" + CACHE PATH "Dependencies build directory.") +set(DEPS_DOWNLOAD_DIR "${DEPS_BUILD_DIR}/downloads" + CACHE PATH "Dependencies download directory.") + +option(USE_BUNDLED "Use bundled dependencies." ON) + +option(USE_BUNDLED_BOOST "Use the bundled version of Boost." ${USE_BUNDLED}) +option(USE_BUNDLED_SPDLOG "Use the bundled version of spdlog." ${USE_BUNDLED}) +option(USE_BUNDLED_OLM "Use the bundled version of libolm." ${USE_BUNDLED}) +option(USE_BUNDLED_MATRIX_STRUCTS "Use the bundled version of matrix-structs." + ${USE_BUNDLED}) +option(USE_BUNDLED_MATRIX_CLIENT "Use the bundled version of mtxclient." + ${USE_BUNDLED}) + +include(ExternalProject) + +set(BOOST_URL + https://dl.bintray.com/boostorg/release/1.66.0/source/boost_1_66_0.tar.bz2) +set(BOOST_SHA256 + 5721818253e6a0989583192f96782c4a98eb6204965316df9f5ad75819225ca9) + +set(MATRIX_STRUCTS_URL https://github.com/mujx/matrix-structs) +set(MATRIX_STRUCTS_TAG eeb7373729a1618e2b3838407863342b88b8a0de) + +set(MTXCLIENT_URL https://github.com/mujx/mtxclient) +set(MTXCLIENT_TAG 68188721e042ff5b47ea9a87aa97d3a9efbca989) + +set(OLM_URL https://git.matrix.org/git/olm.git) +set(OLM_TAG 4065c8e11a33ba41133a086ed3de4da94dcb6bae) + +set(SPDLOG_URL https://github.com/gabime/spdlog) +set(SPDLOG_TAG 560df2878ad308b27873b3cc5e810635d69cfad6) + +if(USE_BUNDLED_BOOST) + include(Boost) +endif() + +if(USE_BUNDLED_SPDLOG) + include(SpdLog) +endif() + +if(USE_BUNDLED_OLM) + include(Olm) +endif() + +if(USE_BUNDLED_MATRIX_STRUCTS) + include(MatrixStructs) +endif() + +if(WIN32) + if("${TARGET_ARCH}" STREQUAL "X86_64") + set(TARGET_ARCH x64) + elseif(TARGET_ARCH STREQUAL "X86") + set(TARGET_ARCH ia32) + endif() +endif() + +add_custom_target(third-party ALL + COMMAND ${CMAKE_COMMAND} -E touch .third-party + DEPENDS ${THIRD_PARTY_DEPS}) + +if(USE_BUNDLED_MATRIX_CLIENT) + include(MatrixClient) + add_dependencies(MatrixClient third-party) +endif() diff --git a/deps/cmake/Boost.cmake b/deps/cmake/Boost.cmake new file mode 100644
index 00000000..572d1d07 --- /dev/null +++ b/deps/cmake/Boost.cmake
@@ -0,0 +1,23 @@ +if(WIN32) + message(STATUS "Building Boost in Windows is not supported (skipping)") + return() +endif() + +ExternalProject_Add( + Boost + + URL ${BOOST_URL} + URL_HASH SHA256=${BOOST_SHA256} + DOWNLOAD_DIR ${DEPS_DOWNLOAD_DIR}/boost + DOWNLOAD_NO_PROGRESS 0 + + BUILD_IN_SOURCE 1 + SOURCE_DIR ${DEPS_BUILD_DIR}/boost + CONFIGURE_COMMAND ${DEPS_BUILD_DIR}/boost/bootstrap.sh + --with-libraries=random,thread,system,iostreams,atomic,chrono,date_time,regex + --prefix=${DEPS_INSTALL_DIR} + BUILD_COMMAND ${DEPS_BUILD_DIR}/boost/b2 -d0 variant=release link=static threading=multi --layout=system + INSTALL_COMMAND ${DEPS_BUILD_DIR}/boost/b2 -d0 install +) + +list(APPEND THIRD_PARTY_DEPS Boost) diff --git a/deps/cmake/MatrixClient.cmake b/deps/cmake/MatrixClient.cmake new file mode 100644
index 00000000..d8dd48c7 --- /dev/null +++ b/deps/cmake/MatrixClient.cmake
@@ -0,0 +1,31 @@ +set(PLATFORM_FLAGS "") + +if(MSVC) + set(PLATFORM_FLAGS "-DCMAKE_GENERATOR_PLATFORM=x64") +endif() + +if(APPLE) + set(PLATFORM_FLAGS "-DOPENSSL_ROOT_DIR=/usr/local/opt/openssl") +endif() + +ExternalProject_Add( + MatrixClient + + DOWNLOAD_DIR ${DEPS_DOWNLOAD_DIR}/mtxclient + GIT_REPOSITORY ${MTXCLIENT_URL} + GIT_TAG ${MTXCLIENT_TAG} + + BUILD_IN_SOURCE 1 + SOURCE_DIR ${DEPS_BUILD_DIR}/mtxclient + CONFIGURE_COMMAND ${CMAKE_COMMAND} + -DCMAKE_INSTALL_PREFIX=${DEPS_INSTALL_DIR} + -DCMAKE_BUILD_TYPE=Release + -DBUILD_LIB_TESTS=OFF + -DBUILD_LIB_EXAMPLES=OFF + -DCMAKE_TOOLCHAIN_FILE=${CMAKE_TOOLCHAIN_FILE} + ${PLATFORM_FLAGS} + ${DEPS_BUILD_DIR}/mtxclient + BUILD_COMMAND + ${CMAKE_COMMAND} --build ${DEPS_BUILD_DIR}/mtxclient --config Release) + +list(APPEND THIRD_PARTY_DEPS MatrixClient) diff --git a/deps/cmake/MatrixStructs.cmake b/deps/cmake/MatrixStructs.cmake new file mode 100644
index 00000000..fd12ad39 --- /dev/null +++ b/deps/cmake/MatrixStructs.cmake
@@ -0,0 +1,25 @@ +set(WINDOWS_FLAGS "") + +if(MSVC) + set(WINDOWS_FLAGS "-DCMAKE_GENERATOR_PLATFORM=x64") +endif() + +ExternalProject_Add( + MatrixStructs + + DOWNLOAD_DIR ${DEPS_DOWNLOAD_DIR}/matrix_structs + GIT_REPOSITORY ${MATRIX_STRUCTS_URL} + GIT_TAG ${MATRIX_STRUCTS_TAG} + + BUILD_IN_SOURCE 1 + SOURCE_DIR ${DEPS_BUILD_DIR}/matrix_structs + CONFIGURE_COMMAND ${CMAKE_COMMAND} + -DCMAKE_INSTALL_PREFIX=${DEPS_INSTALL_DIR} + -DCMAKE_BUILD_TYPE=Release + ${DEPS_BUILD_DIR}/matrix_structs + ${WINDOWS_FLAGS} + BUILD_COMMAND ${CMAKE_COMMAND} + --build ${DEPS_BUILD_DIR}/matrix_structs + --config Release) + +list(APPEND THIRD_PARTY_DEPS MatrixStructs) diff --git a/deps/cmake/Olm.cmake b/deps/cmake/Olm.cmake new file mode 100644
index 00000000..a5b8be76 --- /dev/null +++ b/deps/cmake/Olm.cmake
@@ -0,0 +1,34 @@ +set(WINDOWS_FLAGS "") + +if(MSVC) + set(WINDOWS_FLAGS "-DCMAKE_GENERATOR_PLATFORM=x64") +endif() + +ExternalProject_Add( + Olm + + GIT_REPOSITORY ${OLM_URL} + GIT_TAG ${OLM_TAG} + + BUILD_IN_SOURCE 1 + SOURCE_DIR ${DEPS_BUILD_DIR}/olm + CONFIGURE_COMMAND ${CMAKE_COMMAND} -E copy + ${CMAKE_CURRENT_SOURCE_DIR}/cmake/OlmCMakeLists.txt + ${DEPS_BUILD_DIR}/olm/CMakeLists.txt + COMMAND ${CMAKE_COMMAND} -E copy + ${CMAKE_CURRENT_SOURCE_DIR}/cmake/OlmConfig.cmake.in + ${DEPS_BUILD_DIR}/olm/cmake/OlmConfig.cmake.in + COMMAND ${CMAKE_COMMAND} + -DCMAKE_INSTALL_PREFIX=${DEPS_INSTALL_DIR} + -DCMAKE_BUILD_TYPE=Release + ${DEPS_BUILD_DIR}/olm + ${WINDOWS_FLAGS} + BUILD_COMMAND ${CMAKE_COMMAND} + --build ${DEPS_BUILD_DIR}/olm + --config Release + INSTALL_COMMAND ${CMAKE_COMMAND} + --build ${DEPS_BUILD_DIR}/olm + --config Release + --target install) + +list(APPEND THIRD_PARTY_DEPS Olm) diff --git a/deps/cmake/OlmCMakeLists.txt b/deps/cmake/OlmCMakeLists.txt new file mode 100644
index 00000000..529cbb92 --- /dev/null +++ b/deps/cmake/OlmCMakeLists.txt
@@ -0,0 +1,107 @@ +cmake_minimum_required(VERSION 3.1) + +project(olm VERSION 2.2.2 LANGUAGES CXX C) + +add_definitions(-DOLMLIB_VERSION_MAJOR=${PROJECT_VERSION_MAJOR}) +add_definitions(-DOLMLIB_VERSION_MINOR=${PROJECT_VERSION_MINOR}) +add_definitions(-DOLMLIB_VERSION_PATCH=${PROJECT_VERSION_PATCH}) + +set(CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake) +set(CMAKE_CXX_STANDARD 11) +set(CMAKE_CXX_STANDARD_REQUIRED ON) +set(CMAKE_C_STANDARD 99) +set(CMAKE_C_STANDARD_REQUIRED ON) +set(CMAKE_POSITION_INDEPENDENT_CODE ON) + +if(NOT CMAKE_BUILD_TYPE) + set(CMAKE_BUILD_TYPE Release) +endif() + +add_library(olm + src/account.cpp + src/base64.cpp + src/cipher.cpp + src/crypto.cpp + src/memory.cpp + src/message.cpp + src/pickle.cpp + src/ratchet.cpp + src/session.cpp + src/utility.cpp + + src/ed25519.c + src/error.c + src/inbound_group_session.c + src/megolm.c + src/olm.cpp + src/outbound_group_session.c + src/pickle_encoding.c + + lib/crypto-algorithms/aes.c + lib/crypto-algorithms/sha256.c + lib/curve25519-donna/curve25519-donna.c) +add_library(Olm::Olm ALIAS olm) + +target_include_directories(olm + PUBLIC + $<BUILD_INTERFACE:${CMAKE_SOURCE_DIR}/include> + $<INSTALL_INTERFACE:include> + PRIVATE + ${CMAKE_CURRENT_SOURCE_DIR}/lib) + +set_target_properties(olm PROPERTIES + SOVERSION ${PROJECT_VERSION_MAJOR} + VERSION ${PROJECT_VERSION}) + +set_target_properties(olm PROPERTIES + ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/${CMAKE_INSTALL_BINDIR} + LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/${CMAKE_INSTALL_LIBDIR} + RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/${CMAKE_INSTALL_LIBDIR}) + +# +# Installation +# +include(GNUInstallDirs) +set(INSTALL_CONFIGDIR ${CMAKE_INSTALL_LIBDIR}/cmake/Olm) +install(TARGETS olm + EXPORT olm-targets + LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} + ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}) + +# The exported target will be named Olm. +set_target_properties(olm PROPERTIES EXPORT_NAME Olm) +install(FILES + ${CMAKE_SOURCE_DIR}/include/olm/olm.h + ${CMAKE_SOURCE_DIR}/include/olm/outbound_group_session.h + ${CMAKE_SOURCE_DIR}/include/olm/inbound_group_session.h + DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/olm) + +# Export the targets to a script. +install(EXPORT olm-targets + FILE OlmTargets.cmake + NAMESPACE Olm:: + DESTINATION ${INSTALL_CONFIGDIR}) + +# Create a ConfigVersion.cmake file. +include(CMakePackageConfigHelpers) +write_basic_package_version_file( + ${CMAKE_CURRENT_BINARY_DIR}/OlmConfigVersion.cmake + VERSION ${PROJECT_VERSION} + COMPATIBILITY SameMajorVersion) + +configure_package_config_file( + ${CMAKE_CURRENT_LIST_DIR}/cmake/OlmConfig.cmake.in + ${CMAKE_CURRENT_BINARY_DIR}/OlmConfig.cmake + INSTALL_DESTINATION ${INSTALL_CONFIGDIR}) + +#Install the config & configversion. +install(FILES + ${CMAKE_CURRENT_BINARY_DIR}/OlmConfig.cmake + ${CMAKE_CURRENT_BINARY_DIR}/OlmConfigVersion.cmake + DESTINATION ${INSTALL_CONFIGDIR}) + +# Register package in user's package registry +export(EXPORT olm-targets + FILE ${CMAKE_CURRENT_BINARY_DIR}/OlmTargets.cmake + NAMESPACE Olm::) +export(PACKAGE Olm) diff --git a/deps/cmake/OlmConfig.cmake.in b/deps/cmake/OlmConfig.cmake.in new file mode 100644
index 00000000..b670fe85 --- /dev/null +++ b/deps/cmake/OlmConfig.cmake.in
@@ -0,0 +1,11 @@ +get_filename_component(Olm_CMAKE_DIR "${CMAKE_CURRENT_LIST_FILE}" PATH) +include(CMakeFindDependencyMacro) + +list(APPEND CMAKE_MODULE_PATH ${Olm_CMAKE_DIR}) +list(REMOVE_AT CMAKE_MODULE_PATH -1) + +if(NOT TARGET Olm::Olm) + include("${Olm_CMAKE_DIR}/OlmTargets.cmake") +endif() + +set(Olm_LIBRARIES Olm::Olm) diff --git a/deps/cmake/SpdLog.cmake b/deps/cmake/SpdLog.cmake new file mode 100644
index 00000000..5a5f318c --- /dev/null +++ b/deps/cmake/SpdLog.cmake
@@ -0,0 +1,22 @@ +set(WINDOWS_FLAGS "") + +if(MSVC) + set(WINDOWS_FLAGS "-DCMAKE_GENERATOR_PLATFORM=x64") +endif() + +ExternalProject_Add( + SpdLog + + GIT_REPOSITORY ${SPDLOG_URL} + GIT_TAG ${SPDLOG_TAG} + + BUILD_IN_SOURCE 1 + SOURCE_DIR ${DEPS_BUILD_DIR}/spdlog + CONFIGURE_COMMAND ${CMAKE_COMMAND} + -DCMAKE_INSTALL_PREFIX=${DEPS_INSTALL_DIR} + -DSPDLOG_BUILD_EXAMPLES=0 + -DSPDLOG_BUILD_TESTING=0 + ${DEPS_BUILD_DIR}/spdlog + ${WINDOWS_FLAGS}) + +list(APPEND THIRD_PARTY_DEPS SpdLog)