Skip to content
Snippets Groups Projects
Commit 40546005 authored by Konstantinos Sideris's avatar Konstantinos Sideris
Browse files

Add upstream cmakelists file for building & installing libolm

parent c566fa0a
No related branches found
No related tags found
No related merge requests found
......@@ -12,10 +12,6 @@ set(CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake)
set(CMAKE_CXX_STANDARD 14)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(DEPS_PREFIX "${CMAKE_CURRENT_SOURCE_DIR}/.deps/usr"
CACHE PATH "Path prefix for finding dependencies")
list(INSERT CMAKE_PREFIX_PATH 0 ${DEPS_PREFIX})
if(NOT MSVC)
set(
CMAKE_CXX_FLAGS
......@@ -52,7 +48,7 @@ find_package(OpenSSL REQUIRED)
find_package(ZLIB REQUIRED)
find_package(MatrixStructs REQUIRED)
find_package(spdlog 0.16.0 CONFIG REQUIRED)
find_package(olm REQUIRED)
find_package(Olm REQUIRED)
find_package(sodium REQUIRED)
set(Boost_USE_STATIC_LIBS OFF)
......@@ -69,9 +65,7 @@ target_include_directories(matrix_client
PUBLIC
${OPENSSL_INCLUDE_DIR}
${Boost_INCLUDE_DIRS}
${sodium_INCLUDE_DIR}
PRIVATE
${OLM_INCLUDE_DIR})
${sodium_INCLUDE_DIR})
target_include_directories(
matrix_client
PUBLIC
......@@ -84,8 +78,8 @@ target_link_libraries(matrix_client
${sodium_LIBRARY_RELEASE}
OpenSSL::Crypto
OpenSSL::SSL
Olm::Olm
PRIVATE
${OLM_LIBRARY}
ZLIB::ZLIB)
if(NOT MSVC AND NOT APPLE)
......@@ -144,15 +138,12 @@ if(BUILD_LIB_EXAMPLES)
add_executable(room_feed examples/room_feed.cpp)
target_link_libraries(room_feed matrix_client)
target_include_directories(room_feed PRIVATE ${OLM_INCLUDE_DIR})
add_executable(simple_bot examples/simple_bot.cpp)
target_link_libraries(simple_bot matrix_client)
target_include_directories(simple_bot PRIVATE ${OLM_INCLUDE_DIR})
add_executable(crypto_bot examples/crypto_bot.cpp)
target_link_libraries(crypto_bot matrix_client)
target_include_directories(crypto_bot PRIVATE ${OLM_INCLUDE_DIR})
target_link_libraries(crypto_bot matrix_client Olm::Olm)
endif()
#
......
......@@ -9,8 +9,7 @@ help: ## This help message
@grep -E '^[0-9a-zA-Z_-]+:.*?## .*$$' $(MAKEFILE_LIST) | sort | awk 'BEGIN {FS = ":.*?## "}; {printf "\033[36m%-20s\033[0m %s\n", $$1, $$2}'
@# Change the digit following by an 's' to adjust the width of the help text
third_party: ## Build & install third party dependencies
@mkdir -p ${DEPS_BUILD_DIR}/usr/{lib,include}/
third-party: ## Build & install third party dependencies
@cmake -GNinja -H${DEPS_SOURCE_DIR} -B${DEPS_BUILD_DIR} -DCMAKE_BUILD_TYPE=Release -DUSE_BUNDLED_BOOST=OFF
@cmake --build ${DEPS_BUILD_DIR}
......@@ -18,13 +17,15 @@ debug: ## Create a debug build
@cmake -GNinja -H. -Bbuild \
-DCMAKE_BUILD_TYPE=Debug \
-DCMAKE_EXPORT_COMPILE_COMMANDS=1 \
-DOPENSSL_ROOT_DIR=/usr/local/opt/openssl
-DOPENSSL_ROOT_DIR=/usr/local/opt/openssl \
-DCMAKE_INSTALL_PREFIX=${DEPS_BUILD_DIR}/usr
@cmake --build build
release: ## Create an optimized build
@cmake -GNinja -H. -Bbuild \
-DCMAKE_BUILD_TYPE=Release \
-DOPENSSL_ROOT_DIR=/usr/local/opt/openssl
-DOPENSSL_ROOT_DIR=/usr/local/opt/openssl \
-DCMAKE_INSTALL_PREFIX=${DEPS_BUILD_DIR}/usr
@cmake --build build
test: ## Run the tests
......@@ -34,6 +35,7 @@ asan: ## Create a debug build using address sanitizers
@cmake -GNinja -H. -Bbuild \
-DCMAKE_BUILD_TYPE=Debug \
-DOPENSSL_ROOT_DIR=/usr/local/opt/openssl \
-DCMAKE_INSTALL_PREFIX=${DEPS_BUILD_DIR}/usr
-DASAN=1
@cmake --build build
......
if(WIN32)
link_directories(${DEPS_PREFIX}/../build/olm/build)
include_directories(SYSTEM ${DEPS_PREFIX}/../build/olm/include)
return()
endif()
find_path(OLM_INCLUDE_DIR NAMES olm/olm.h HINTS ${DEPS_PREFIX})
find_library(OLM_LIBRARY NAMES olm HINTS ${DEPS_PREFIX})
include(FindPackageHandleStandardArgs)
find_package_handle_standard_args(OLM DEFAULT_MSG OLM_INCLUDE_DIR OLM_LIBRARY)
if(WIN32)
link_directories(${DEPS_PREFIX}/../build/olm/build)
include_directories(SYSTEM ${DEPS_PREFIX}/../build/olm/include)
return()
endif()
find_path(OLM_INCLUDE_DIR NAMES olm/olm.h HINTS ${DEPS_PREFIX})
find_library(OLM_LIBRARY NAMES olm HINTS ${DEPS_PREFIX})
include(FindPackageHandleStandardArgs)
find_package_handle_standard_args(OLM DEFAULT_MSG OLM_INCLUDE_DIR OLM_LIBRARY)
if(MSVC)
set(MAKE_CMD "mingw32-make.exe")
else()
set(MAKE_CMD "make")
endif()
ExternalProject_Add(
Olm
......@@ -12,11 +6,21 @@ ExternalProject_Add(
BUILD_IN_SOURCE 1
SOURCE_DIR ${DEPS_BUILD_DIR}/olm
CONFIGURE_COMMAND ""
BUILD_COMMAND ${MAKE_CMD} static
INSTALL_COMMAND
cp -R ${DEPS_BUILD_DIR}/olm/include ${DEPS_INSTALL_DIR} &&
cp ${DEPS_BUILD_DIR}/olm/build/libolm.a ${DEPS_INSTALL_DIR}/lib
)
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
BUILD_COMMAND ${CMAKE_COMMAND}
--build ${DEPS_BUILD_DIR}/olm
--config Release
INSTALL_COMMAND ${CMAKE_COMMAND}
--build ${DEPS_BUILD_DIR}/olm
--target install)
list(APPEND THIRD_PARTY_DEPS Olm)
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)
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)
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment