aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--CMakeLists.txt115
-rw-r--r--README.rst7
-rw-r--r--cmake/OlmConfig.cmake.in11
-rw-r--r--tests/CMakeLists.txt37
4 files changed, 167 insertions, 3 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt
new file mode 100644
index 0000000..19e1a86
--- /dev/null
+++ b/CMakeLists.txt
@@ -0,0 +1,115 @@
+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()
diff --git a/README.rst b/README.rst
index 5a5413e..98346af 100644
--- a/README.rst
+++ b/README.rst
@@ -58,9 +58,10 @@ To build olm as a static library (which still needs libstdc++ dynamically) run:
Release process
---------------
-First: bump version numbers in ``common.mk``, ``javascript/package.json``,
-``OLMKit.podspec``, and ``android/olm-sdk/build.gradle`` (``versionCode``,
-``versionName`` and ``version``).
+First: bump version numbers in ``common.mk``, ``CMakeLists.txt``,
+``javascript/package.json``, ``OLMKit.podspec``, and
+``android/olm-sdk/build.gradle`` (``versionCode``, ``versionName`` and
+``version``).
Also, ensure the changelog is up to date, and that everyting is committed to
git.
diff --git a/cmake/OlmConfig.cmake.in b/cmake/OlmConfig.cmake.in
new file mode 100644
index 0000000..a7541f7
--- /dev/null
+++ b/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/tests/CMakeLists.txt b/tests/CMakeLists.txt
new file mode 100644
index 0000000..12aaac4
--- /dev/null
+++ b/tests/CMakeLists.txt
@@ -0,0 +1,37 @@
+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)