aboutsummaryrefslogtreecommitdiff
path: root/plugins/signal-protocol/CMakeLists.txt
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/signal-protocol/CMakeLists.txt')
-rw-r--r--plugins/signal-protocol/CMakeLists.txt138
1 files changed, 138 insertions, 0 deletions
diff --git a/plugins/signal-protocol/CMakeLists.txt b/plugins/signal-protocol/CMakeLists.txt
new file mode 100644
index 00000000..de95adc6
--- /dev/null
+++ b/plugins/signal-protocol/CMakeLists.txt
@@ -0,0 +1,138 @@
+add_subdirectory(libsignal-protocol-c)
+set_property(TARGET curve25519 PROPERTY POSITION_INDEPENDENT_CODE ON)
+set_property(TARGET protobuf-c PROPERTY POSITION_INDEPENDENT_CODE ON)
+set_property(TARGET signal-protocol-c PROPERTY POSITION_INDEPENDENT_CODE ON)
+
+find_package(Vala REQUIRED)
+find_package(PkgConfig REQUIRED)
+find_package(OpenSSL REQUIRED)
+include(${VALA_USE_FILE})
+
+set(SIGNAL_PROTOCOL_PACKAGES
+ glib-2.0
+ gee-0.8
+ gobject-2.0
+)
+
+pkg_check_modules(SIGNAL_PROTOCOL REQUIRED ${SIGNAL_PROTOCOL_PACKAGES})
+
+vala_precompile(SIGNAL_PROTOCOL_VALA_C
+SOURCES
+ "src/context.vala"
+ "src/simple_iks.vala"
+ "src/simple_ss.vala"
+ "src/simple_pks.vala"
+ "src/simple_spks.vala"
+ "src/store.vala"
+ "src/util.vala"
+CUSTOM_VAPIS
+ ${CMAKE_CURRENT_SOURCE_DIR}/vapi/signal-protocol-public.vapi
+ ${CMAKE_CURRENT_SOURCE_DIR}/vapi/signal-protocol-native.vapi
+PACKAGES
+ ${SIGNAL_PROTOCOL_PACKAGES}
+GENERATE_VAPI
+ signal-protocol-vala
+GENERATE_HEADER
+ signal-protocol-vala
+OPTIONS
+ ${GLOBAL_DEBUG_FLAGS}
+ --thread
+)
+
+set(CFLAGS ${VALA_CFLAGS} ${SIGNAL_PROTOCOL_CFLAGS} -I${CMAKE_CURRENT_SOURCE_DIR}/libsignal-protocol-c/src -I${CMAKE_CURRENT_SOURCE_DIR}/src)
+add_definitions(${CFLAGS})
+add_library(signal-protocol-vala ${SIGNAL_PROTOCOL_VALA_C} ${CMAKE_CURRENT_SOURCE_DIR}/src/signal_helper.c)
+add_dependencies(signal-protocol-vala signal-protocol-c)
+target_link_libraries(signal-protocol-vala ${SIGNAL_PROTOCOL_LIBRARIES} ${OPENSSL_CRYPTO_LIBRARY} signal-protocol-c -lm)
+set_property(TARGET signal-protocol-vala PROPERTY POSITION_INDEPENDENT_CODE ON)
+
+set(SIGNAL_PROTOCOL_C_HEADERS
+ signal_protocol.h
+ signal_protocol_types.h
+ curve.h
+ hkdf.h
+ ratchet.h
+ protocol.h
+ session_state.h
+ session_record.h
+ session_pre_key.h
+ session_builder.h
+ session_cipher.h
+ key_helper.h
+ sender_key.h
+ sender_key_state.h
+ sender_key_record.h
+ group_session_builder.h
+ group_cipher.h
+ fingerprint.h
+ device_consistency.h
+)
+
+set(C_HEADERS_SRC "")
+set(C_HEADERS_TARGET "")
+
+foreach(f ${SIGNAL_PROTOCOL_C_HEADERS})
+ list(APPEND C_HEADERS_SRC "${CMAKE_CURRENT_SOURCE_DIR}/libsignal-protocol-c/src/${f}")
+ list(APPEND C_HEADERS_TARGET "${CMAKE_BINARY_DIR}/exports/${f}")
+ add_custom_command(OUTPUT "${CMAKE_BINARY_DIR}/exports/${f}"
+ COMMAND
+ cp "${CMAKE_CURRENT_SOURCE_DIR}/libsignal-protocol-c/src/${f}" "${CMAKE_BINARY_DIR}/exports/${f}"
+ DEPENDS
+ "${CMAKE_CURRENT_SOURCE_DIR}/libsignal-protocol-c/src/${f}"
+ COMMENT
+ Copy header file ${f}
+ )
+endforeach(f)
+
+list(APPEND C_HEADERS_SRC "${CMAKE_CURRENT_SOURCE_DIR}/src/signal_helper.h")
+list(APPEND C_HEADERS_TARGET "${CMAKE_BINARY_DIR}/exports/signal_helper.h")
+
+add_custom_command(OUTPUT "${CMAKE_BINARY_DIR}/exports/signal_helper.h"
+COMMAND
+ cp "${CMAKE_CURRENT_SOURCE_DIR}/src/signal_helper.h" "${CMAKE_BINARY_DIR}/exports/signal_helper.h"
+DEPENDS
+ "${CMAKE_CURRENT_SOURCE_DIR}/src/signal_helper.h"
+COMMENT
+ Copy header file signal_helper.h
+)
+
+add_custom_command(OUTPUT ${CMAKE_BINARY_DIR}/exports/signal-protocol.vapi
+COMMAND
+ cat "${CMAKE_CURRENT_SOURCE_DIR}/vapi/signal-protocol-public.vapi" "${CMAKE_BINARY_DIR}/exports/signal-protocol-vala.vapi" > "${CMAKE_BINARY_DIR}/exports/signal-protocol.vapi"
+DEPENDS
+ ${CMAKE_CURRENT_SOURCE_DIR}/vapi/signal-protocol-public.vapi
+ ${CMAKE_BINARY_DIR}/exports/signal-protocol-vala.vapi
+)
+
+add_custom_target(signal-protocol-vapi
+DEPENDS
+ ${CMAKE_BINARY_DIR}/exports/signal-protocol.vapi
+ ${CMAKE_BINARY_DIR}/exports/signal-protocol-vala.h
+ ${C_HEADERS_TARGET}
+)
+
+if(BUILD_TESTING)
+ vala_precompile(SIGNAL_TEST_VALA_C
+ SOURCES
+ "tests/common.vala"
+ "tests/testcase.vala"
+
+ "tests/curve25519.vala"
+ "tests/hkdf.vala"
+ "tests/session_builder.vala"
+ CUSTOM_VAPIS
+ ${CMAKE_BINARY_DIR}/exports/signal-protocol-vala-internal.vapi
+ ${CMAKE_CURRENT_SOURCE_DIR}/vapi/signal-protocol-public.vapi
+ ${CMAKE_CURRENT_SOURCE_DIR}/vapi/signal-protocol-native.vapi
+ PACKAGES
+ ${SIGNAL_PROTOCOL_PACKAGES}
+ OPTIONS
+ ${GLOBAL_DEBUG_FLAGS}
+ --thread
+ )
+
+ set(CFLAGS ${VALA_CFLAGS} ${SIGNAL_PROTOCOL_CFLAGS} -I${CMAKE_CURRENT_BINARY_DIR}/signal-protocol)
+ add_executable(signal-protocol-vala-test ${SIGNAL_TEST_VALA_C})
+ add_dependencies(signal-protocol-vala-test signal-protocol-vala signal-protocol-vapi)
+ target_link_libraries(signal-protocol-vala-test signal-protocol-vala)
+endif(BUILD_TESTING) \ No newline at end of file