Page MenuHomePhorge

No OneTemporary

Size
5 KB
Referenced Files
None
Subscribers
None
diff --git a/README.md b/README.md
index 20ae2aa..083c243 100644
--- a/README.md
+++ b/README.md
@@ -1,7 +1,39 @@
# vodozemac-bindings
Collection of language bindings for the [vodozemac] cryptographic library.
[vodozemac]: https://github.com/matrix-org/vodozemac
Documentation on how to use the c++ bindings can be found at [IronLily](https://iron.lily-is.land/w/from-libolm-to-vodozemac/).
+
+## Installation
+
+It has the following build-time dependencies:
+
+- cargo
+- perl
+- g++
+- make
+- cp, ln, install
+
+If you want to build tests, you will also need:
+
+- boost-json
+- Catch2-3
+- libolm
+
+On Windows, the build dependencies can be satisfied by rustup (Please make sure you are targeting the GNU abi, **not MSVC**), perl, mingw, and msys. Make sure the tools you need are in your PATH or override them with the absolute path.
+
+To build, run:
+
+```
+make -C cpp
+```
+
+To install, run:
+
+```
+make -C cpp PREFIX=somewhere install
+```
+
+https://lily-is.land/kazv/craft-blueprints-project-kazv/-/blob/servant/libs/vodozemac-bindings/vodozemac-bindings.py?ref_type=heads has an example of how to build it on Windows.
diff --git a/cpp/Makefile b/cpp/Makefile
index e15ef9f..a509117 100644
--- a/cpp/Makefile
+++ b/cpp/Makefile
@@ -1,83 +1,97 @@
-all: dynamic-lib
.PHONY: all dynamic-lib test install
BUILD_TYPE := debug
ifeq ($(BUILD_TYPE), release)
CARGO_ARGS = --release
else
CARGO_ARGS =
endif
VERSION = 0.1.0
SOVERSION = 1
TARGET_DIR = ../target/$(BUILD_TYPE)
CXXBRIDGE_DIR = $(TARGET_DIR)/../cxxbridge
STATIC_LIB = $(TARGET_DIR)/libvodozemac.a
+ifeq ($(OS), Windows_NT)
+SHARED_LIB_NAME = libvodozemac.dll
+else
SHARED_LIB_NAME = libvodozemac.so
+endif
SHARED_LIB_PREFIX = $(TARGET_DIR)/$(SHARED_LIB_NAME)
SHARED_LIBS = $(SHARED_LIB_PREFIX) $(SHARED_LIB_PREFIX).$(VERSION) $(SHARED_LIB_PREFIX).$(SOVERSION)
+
+# The list of libraries are obtained by running
+# `cargo rustc -- --print native-static-libs`.
+# Unfortunately, the output format is really hostile to automatically generating the list on the fly.
+ifeq ($(OS), Windows_NT)
+SHARED_LIB_LDFLAGS = -lbcrypt -ladvapi32 -lstdc++ -lkernel32 -ladvapi32 -lntdll -luserenv -lws2_32 -lkernel32 -Wl,--out-implib,$(SHARED_LIB_PREFIX).a
+else
+SHARED_LIB_LDFLAGS = -lstdc++ -lgcc_s -lutil -lrt -lpthread -lm -ldl -lc
+endif
+
HEADER = $(CXXBRIDGE_DIR)/vodozemac/src/lib.rs.h
SOURCES = src/account.rs src/group_sessions.rs src/lib.rs src/sas.rs src/session.rs src/types.rs src/maybe.rs build.rs vodozemac_maybe_derive/src/lib.rs
-AR ?= ar
+all: dynamic-lib
+
CXX ?= c++
LN ?= ln
INSTALL ?= install
CP ?= cp
+PERL ?= perl
+CARGO ?= cargo
# Packagers may need to override them all.
PREFIX = /usr/local
DESTDIR =
LIBDIR = $(PREFIX)/lib
INCLUDEDIR = $(PREFIX)/include
src/lib.rs: src/lib.rs.in inject-maybe
- ./inject-maybe < src/lib.rs.in > src/lib.rs
+ $(PERL) ./inject-maybe < src/lib.rs.in > src/lib.rs
$(STATIC_LIB): $(SOURCES)
- cargo build $(CARGO_ARGS)
+ $(CARGO) build $(CARGO_ARGS)
dynamic-lib: $(SHARED_LIB_PREFIX)
$(SHARED_LIB_PREFIX).$(SOVERSION): $(SHARED_LIB_PREFIX).$(VERSION)
- $(LN) -sfv libvodozemac.so.$(VERSION) $(SHARED_LIB_PREFIX).$(SOVERSION)
+ $(LN) -sfv $(SHARED_LIB_NAME).$(VERSION) $(SHARED_LIB_PREFIX).$(SOVERSION)
$(SHARED_LIB_PREFIX): $(SHARED_LIB_PREFIX).$(SOVERSION)
- $(LN) -sfv libvodozemac.so.$(SOVERSION) $(SHARED_LIB_PREFIX)
+ $(LN) -sfv $(SHARED_LIB_NAME).$(SOVERSION) $(SHARED_LIB_PREFIX)
$(SHARED_LIB_PREFIX).$(VERSION): $(STATIC_LIB)
- rm -rf objects && \
- mkdir objects && \
- cd objects && \
- $(AR) x ../$(STATIC_LIB) && \
- cd .. && \
- $(CXX) objects/*.o -shared -fPIC -Wl,-soname=$(SHARED_LIB_NAME) -o $(SHARED_LIB_PREFIX).$(VERSION)
+ $(CXX) -Wl,--whole-archive $(STATIC_LIB) -Wl,--no-whole-archive $(SHARED_LIB_LDFLAGS) -shared -fPIC -Wl,-soname=$(SHARED_LIB_NAME) -o $(SHARED_LIB_PREFIX).$(VERSION)
TEST_CXXFLAGS = -Wall -g -std=c++17 -I $(CXXBRIDGE_DIR)
TEST_LDFLAGS = -lCatch2Main -lCatch2 -lolm -lboost_json \
-L $(TARGET_DIR) -l vodozemac -ldl -Wl,-rpath,$(TARGET_DIR) \
-L /usr/local/lib -Wl,-rpath,/usr/local/lib
TEST_DEPS = $(SHARED_LIB_PREFIX).$(VERSION) tests/util.hpp
TESTS_EXCEPT = account-test session-test sas-test group-session-test
TESTS_NOEXCEPT = $(TESTS_EXCEPT:-test=-noexcept-test)
TESTS = $(TESTS_EXCEPT) $(TESTS_NOEXCEPT)
%-test: tests/%.cpp $(TEST_DEPS)
$(CXX) $(TEST_CXXFLAGS) -DVODOZEMAC_TEST_EXCEPTIONS=1 -fexceptions $< $(TEST_LDFLAGS) -o $@
%-noexcept-test: tests/%.cpp $(TEST_DEPS)
$(CXX) $(TEST_CXXFLAGS) -DVODOZEMAC_TEST_EXCEPTIONS=0 -fno-exceptions $< $(TEST_LDFLAGS) -o $@
test: $(TESTS)
for i in $^; do ./$$i || exit 1; done
install:
$(INSTALL) -d $(DESTDIR)$(INCLUDEDIR) $(DESTDIR)$(LIBDIR)
$(INSTALL) -m644 $(STATIC_LIB) $(DESTDIR)$(LIBDIR)
$(INSTALL) -m755 $(SHARED_LIB_PREFIX).$(VERSION) $(DESTDIR)$(LIBDIR)
+ifeq ($(OS), Windows_NT)
+ $(INSTALL) -m755 $(SHARED_LIB_PREFIX).a $(DESTDIR)$(LIBDIR)
+endif
$(LN) -sfv $(SHARED_LIB_NAME).$(VERSION) $(DESTDIR)$(LIBDIR)/$(SHARED_LIB_NAME).$(SOVERSION)
$(LN) -sfv $(SHARED_LIB_NAME).$(SOVERSION) $(DESTDIR)$(LIBDIR)/$(SHARED_LIB_NAME)
$(CP) $(HEADER) $(DESTDIR)$(INCLUDEDIR)/vodozemac.h

File Metadata

Mime Type
text/x-diff
Expires
Sat, Sep 19, 5:06 AM (1 d, 9 h)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
1766922
Default Alt Text
(5 KB)

Event Timeline