From b0a83abe7389df7f4c45adc3b52d957f3996322d Mon Sep 17 00:00:00 2001 From: Sonic Date: Mon, 8 Apr 2019 15:45:19 +0800 Subject: static link bls dependencies --- .travis.yml | 2 +- Makefile | 20 ++++++++++---------- ffi/go/bls/bls.go | 14 ++++++++------ ffi/go/bls/config.h | 6 ------ ffi/go/bls/dummy.cpp | 3 +++ ffi/go/bls/mcl.go | 2 +- images/bls-go-alpine/Dockerfile | 2 +- 7 files changed, 24 insertions(+), 25 deletions(-) delete mode 100644 ffi/go/bls/config.h create mode 100644 ffi/go/bls/dummy.cpp diff --git a/.travis.yml b/.travis.yml index ceea661..71a667a 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,5 +1,5 @@ sudo: true -dist: trusty +dist: xenial services: - docker env: diff --git a/Makefile b/Makefile index 9d8cf68..efea222 100644 --- a/Makefile +++ b/Makefile @@ -43,11 +43,11 @@ MCL_LIB=$(MCL_DIR)/lib/libmcl.a $(MCL_LIB): $(MAKE) -C $(MCL_DIR) -$(BLS256_LIB): $(OBJ_DIR)/bls_c256.o +$(BLS256_LIB): $(OBJ_DIR)/bls_c256.o $(MCL_LIB) $(AR) $@ $< -$(BLS384_LIB): $(OBJ_DIR)/bls_c384.o +$(BLS384_LIB): $(OBJ_DIR)/bls_c384.o $(MCL_LIB) $(AR) $@ $< -$(BLS384_256_LIB): $(OBJ_DIR)/bls_c384_256.o +$(BLS384_256_LIB): $(OBJ_DIR)/bls_c384_256.o $(MCL_LIB) $(AR) $@ $< ifneq ($(findstring $(OS),mac/mingw64),) @@ -63,11 +63,11 @@ ifeq ($(OS),mingw64) BLS384_256_SLIB_LDFLAGS+=-Wl,--out-implib,$(LIB_DIR)/lib$(BLS384_256_SNAME).a endif $(BLS256_SLIB): $(OBJ_DIR)/bls_c256.o $(MCL_LIB) - $(PRE)$(CXX) -shared -o $@ $< -L$(MCL_DIR)/lib -lmcl $(BLS256_SLIB_LDFLAGS) + $(PRE)$(CXX) -shared -o $@ $< -L$(MCL_DIR)/lib -lmcl $(BLS256_SLIB_LDFLAGS) $(LDFLAGS) $(BLS384_SLIB): $(OBJ_DIR)/bls_c384.o $(MCL_LIB) - $(PRE)$(CXX) -shared -o $@ $< -L$(MCL_DIR)/lib -lmcl $(BLS384_SLIB_LDFLAGS) + $(PRE)$(CXX) -shared -o $@ $< -L$(MCL_DIR)/lib -lmcl $(BLS384_SLIB_LDFLAGS) $(LDFLAGS) $(BLS384_256_SLIB): $(OBJ_DIR)/bls_c384_256.o $(MCL_LIB) - $(PRE)$(CXX) -shared -o $@ $< -L$(MCL_DIR)/lib -lmcl $(BLS384_256_SLIB_LDFLAGS) + $(PRE)$(CXX) -shared -o $@ $< -L$(MCL_DIR)/lib -lmcl $(BLS384_256_SLIB_LDFLAGS) $(LDFLAGS) VPATH=test sample src @@ -116,12 +116,12 @@ sample_test: $(EXE_DIR)/bls_smpl.exe # PATH is for mingw, LD_LIBRARY_PATH is for linux, DYLD_LIBRARY_PATH is for mac COMMON_LIB_PATH="../../../lib:../../../../mcl/lib" -PATH_VAL=$$PATH:$(COMMON_LIB_PATH) LD_LIBRARY_PATH=$(COMMON_LIB_PATH) DYLD_LIBRARY_PATH=$(COMMON_LIB_PATH) CGO_LDFLAGS="-L../../../lib" CGO_CFLAGS="-I$(PWD)/include -I$(MCL_DIR)/include" -test_go256: ffi/go/bls/bls.go ffi/go/bls/bls_test.go $(BLS256_SLIB) +PATH_VAL=$$PATH:$(COMMON_LIB_PATH) LD_LIBRARY_PATH=$(COMMON_LIB_PATH) DYLD_LIBRARY_PATH=$(COMMON_LIB_PATH) +test_go256: ffi/go/bls/bls.go ffi/go/bls/bls_test.go $(BLS256_LIB) cd ffi/go/bls && env PATH=$(PATH_VAL) go test -tags bn256 . -test_go384: ffi/go/bls/bls.go ffi/go/bls/bls_test.go $(BLS384_SLIB) +test_go384: ffi/go/bls/bls.go ffi/go/bls/bls_test.go $(BLS384_LIB) cd ffi/go/bls && env PATH=$(PATH_VAL) go test -tags bn384 . -test_go384_256: ffi/go/bls/bls.go ffi/go/bls/bls_test.go $(BLS384_256_SLIB) +test_go384_256: ffi/go/bls/bls.go ffi/go/bls/bls_test.go $(BLS384_256_LIB) cd ffi/go/bls && env PATH=$(PATH_VAL) go test -tags bn384_256 . test_go: diff --git a/ffi/go/bls/bls.go b/ffi/go/bls/bls.go index 91af1d1..e9a6be3 100644 --- a/ffi/go/bls/bls.go +++ b/ffi/go/bls/bls.go @@ -2,14 +2,16 @@ package bls /* #cgo bn256 CFLAGS:-DMCLBN_FP_UNIT_SIZE=4 -#cgo bn256 LDFLAGS:-lbls256 +#cgo bn256 LDFLAGS:${SRCDIR}/../../../lib/libbls256.a #cgo bn384 CFLAGS:-DMCLBN_FP_UNIT_SIZE=6 -#cgo bn384 LDFLAGS:-lbls384 +#cgo bn384 LDFLAGS:${SRCDIR}/../../../lib/libbls384.a #cgo bn384_256 CFLAGS:-DMCLBN_FP_UNIT_SIZE=6 -DMCLBN_FR_UNIT_SIZE=4 -#cgo bn384_256 LDFLAGS:-lbls384_256 -#cgo LDFLAGS:-lbls384 -#cgo LDFLAGS:-lcrypto -lgmp -lgmpxx -lstdc++ -#include "config.h" +#cgo bn384_256 LDFLAGS:${SRCDIR}/../../../lib/libbls384_256.a +#cgo !bn256,!bn384,!bn384_256 CFLAGS:-DMCLBN_FP_UNIT_SIZE=6 +#cgo !bn256,!bn384,!bn384_256 LDFLAGS:${SRCDIR}/../../../lib/libbls384.a +#cgo CFLAGS:-I${SRCDIR}/../../../include -I${SRCDIR}/../../../../mcl/include +#cgo LDFLAGS:${SRCDIR}/../../../../mcl/lib/libmcl.a -lgmpxx -lgmp +#cgo pkg-config: libcrypto typedef unsigned int (*ReadRandFunc)(void *, void *, unsigned int); int wrapReadRandCgo(void *self, void *buf, unsigned int n); #include diff --git a/ffi/go/bls/config.h b/ffi/go/bls/config.h deleted file mode 100644 index 07e1481..0000000 --- a/ffi/go/bls/config.h +++ /dev/null @@ -1,6 +0,0 @@ -#pragma -// use bn384 unless tags is specified -#ifndef MCLBN_FP_UNIT_SIZE - #define MCLBN_FP_UNIT_SIZE 6 -#endif - diff --git a/ffi/go/bls/dummy.cpp b/ffi/go/bls/dummy.cpp new file mode 100644 index 0000000..a5103a1 --- /dev/null +++ b/ffi/go/bls/dummy.cpp @@ -0,0 +1,3 @@ +// This is a dummy source file which forces cgo to use the C++ linker instead +// of the default C linker. We can therefore eliminate non-portable linker +// flags such as -lstdc++, which is likely to break on FreeBSD and OpenBSD. diff --git a/ffi/go/bls/mcl.go b/ffi/go/bls/mcl.go index a808bad..ca8d7f0 100644 --- a/ffi/go/bls/mcl.go +++ b/ffi/go/bls/mcl.go @@ -4,7 +4,7 @@ package bls #cgo bn256 CFLAGS:-DMCLBN_FP_UNIT_SIZE=4 #cgo bn384 CFLAGS:-DMCLBN_FP_UNIT_SIZE=6 #cgo bn384_256 CFLAGS:-DMCLBN_FP_UNIT_SIZE=6 -DMCLBN_FR_UNIT_SIZE=4 -#include "config.h" +#cgo !bn256,!bn384,!bn384_256 CFLAGS:-DMCLBN_FP_UNIT_SIZE=6 #include */ import "C" diff --git a/images/bls-go-alpine/Dockerfile b/images/bls-go-alpine/Dockerfile index d8ef015..edd49eb 100644 --- a/images/bls-go-alpine/Dockerfile +++ b/images/bls-go-alpine/Dockerfile @@ -6,7 +6,7 @@ RUN apk add --update-cache build-base gmp-dev openssl-dev git # Build bls library RUN mkdir work ; cd work -RUN git clone git://github.com/dexon-foundation/mcl.git +RUN git clone --depth 1 git://github.com/dexon-foundation/mcl.git RUN mkdir bls COPY . bls/ RUN cd bls ; make clean && make test_go DOCKER=alpine -j && cp lib/* /usr/lib/ -- cgit v1.2.3