Unverified Commit 1aafac28 authored by Hubert Chathi's avatar Hubert Chathi Committed by GitHub
Browse files

Merge pull request #67 from matrix-org/cmake

CMake support
parents 2784e495 46f80e71
cmake_minimum_required(VERSION 3.1)
project(olm VERSION 2.3.0 LANGUAGES CXX C)
option(OLM_TESTS "Build tests" ON)
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/pk.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
${CMAKE_SOURCE_DIR}/include/olm/pk.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)
if (OLM_TESTS)
add_subdirectory(tests)
endif()
...@@ -58,9 +58,10 @@ To build olm as a static library (which still needs libstdc++ dynamically) run: ...@@ -58,9 +58,10 @@ To build olm as a static library (which still needs libstdc++ dynamically) run:
Release process Release process
--------------- ---------------
First: bump version numbers in ``common.mk``, ``javascript/package.json``, First: bump version numbers in ``common.mk``, ``CMakeLists.txt``,
``OLMKit.podspec``, and ``android/olm-sdk/build.gradle`` (``versionCode``, ``javascript/package.json``, ``OLMKit.podspec``, and
``versionName`` and ``version``). ``android/olm-sdk/build.gradle`` (``versionCode``, ``versionName`` and
``version``).
Also, ensure the changelog is up to date, and that everyting is committed to Also, ensure the changelog is up to date, and that everyting is committed to
git. git.
......
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)
enable_testing()
foreach(test IN ITEMS
test_base64
test_crypto
test_group_session
test_list
test_megolm
test_message
test_olm
test_olm_decrypt
test_olm_sha256
test_olm_signature
test_olm_using_malloc
test_ratchet
test_session
test_pk
)
add_executable(${test} ${test}.cpp)
target_include_directories(${test} PRIVATE include)
target_link_libraries(${test} Olm::Olm)
endforeach(test)
add_test(Base64 test_base64)
add_test(Crypto test_crypto)
add_test(GroupSession test_group_session)
add_test(List test_list)
add_test(Megolm test_megolm)
add_test(Message test_message)
add_test(Olm test_olm)
add_test(OlmDecrypt test_olm_decrypt)
add_test(OlmSha256 test_olm_sha256)
add_test(OlmSignature test_olm_signature)
add_test(OlmUsingMalloc test_olm_using_malloc)
add_test(Ratchet test_ratchet)
add_test(Session test_session)
add_test(PublicKey test_session)
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment