Skip to content

Commit

Permalink
mobile sdk build support.
Browse files Browse the repository at this point in the history
  • Loading branch information
blockcodemagic committed Jul 28, 2019
1 parent 4fb7f46 commit 101005b
Show file tree
Hide file tree
Showing 5 changed files with 350 additions and 0 deletions.
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -14,3 +14,4 @@
.idea
_herumi
zbox
out
1 change: 1 addition & 0 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ PLATFORM:=$(shell uname -s | tr "[:upper:]" "[:lower:]")
include _util/printer.mk
include _util/build_$(PLATFORM).mk
include _util/herumi.mk
include _util/build_mobile.mk

.PHONY: build-tools install-all herumi-all gosdk-all sdkver help

Expand Down
100 changes: 100 additions & 0 deletions _util/build_mobile.mk
Original file line number Diff line number Diff line change
@@ -0,0 +1,100 @@
0CHAIN_PATH := github.com/0chain
GOSDK_PATH := $(0CHAIN_PATH)/gosdk
OUTDIR := $(ROOT_DIR)/out
IOSMOBILESDKDIR := $(OUTDIR)/0chainiosmobilesdk
ANDROIDMOBILESDKDIR := $(OUTDIR)/0chainandroidmobilesdk
IOSBINNAME := zcncore.framework
ANDROIDBINNAME := zcncore.aar

.PHONY: build-mobilesdk

BLS_LIB_BASE_PATH=$(GOPATH)/src/github.com/herumi
export CGO_CFLAGS+=-I$(BLS_LIB_BASE_PATH)/bls/include -I$(BLS_LIB_BASE_PATH)/mcl/include

$(BLS_LIB_BASE_PATH):
@git clone http://github.com/herumi/mcl.git $(BLS_LIB_BASE_PATH)/mcl
@cd $(BLS_LIB_BASE_PATH)/mcl && git checkout cc9762f14f7f6d4bbc29c0ca418781af4a74f92d && cd - >/dev/null
@git clone http://github.com/herumi/bls.git $(BLS_LIB_BASE_PATH)/bls
@cd $(BLS_LIB_BASE_PATH)/bls && git checkout 058c89ea4262b6131e704f12583b2a852462d4f9 && cd - >>/dev/null
$(eval NCPU=$(shell sysctl -n hw.ncpu))
@$(PRINT_MAG)
@echo "============================================================"
@echo " Building BLS for MAC... "
@echo "------------------------------------------------------------"
@$(PRINT_NON)
@sudo $(MAKE) -C $(BLS_LIB_BASE_PATH)/bls -j$(NCPU) install
@$(PRINT_MAG)
@echo "============================================================"
@echo " Building MCL for MAC... "
@echo "------------------------------------------------------------"
@$(PRINT_NON)
@sudo $(MAKE) -C $(BLS_LIB_BASE_PATH)/mcl -j$(NCPU) lib/libmclbn256.dylib install

$(IOSMOBILESDKDIR):
$(shell mkdir -p $(IOSMOBILESDKDIR)/lib)

$(ANDROIDMOBILESDKDIR):
$(shell mkdir -p $(ANDROIDMOBILESDKDIR)/lib)

setup-gomobile: $(BLS_LIB_BASE_PATH) $(IOSMOBILESDKDIR) $(ANDROIDMOBILESDKDIR)
@cd $(BLS_LIB_BASE_PATH)/bls && git checkout . && git checkout 058c89ea && git apply $(ROOT_DIR)/patches/github.com-herumi-bls-gomobile_ios.patch && cd -
@$(PRINT_CYN)
@echo "============================================================"
@echo " Building BLS for iOS "
@echo "------------------------------------------------------------"
@$(PRINT_NON)
@$(MAKE) -C $(BLS_LIB_BASE_PATH)/bls gomobile_ios CURVE_BIT=256
@$(MAKE) -C $(BLS_LIB_BASE_PATH)/bls gomobile_ios CURVE_BIT=384
@cp -Rf $(BLS_LIB_BASE_PATH)/bls/ios/* $(IOSMOBILESDKDIR)/lib
ifeq ($(NOANDROID),)
@$(PRINT_CYN)
@echo "============================================================"
@echo " Building BLS for Android "
@echo "------------------------------------------------------------"
@$(PRINT_NON)
@$(MAKE) -C $(BLS_LIB_BASE_PATH)/bls gomobile_android CURVE_BIT=256
@$(MAKE) -C $(BLS_LIB_BASE_PATH)/bls gomobile_android CURVE_BIT=384
@cp -Rf $(BLS_LIB_BASE_PATH)/bls/android/* $(ANDROIDMOBILESDKDIR)/lib
endif
@$(PRINT_MAG)
@echo "============================================================"
@echo " Initializing gomobile. Please wait it may take a while ..."
@echo "------------------------------------------------------------"
@go get golang.org/x/mobile/cmd/gomobile
@$(PRINT_NON)
@gomobile init
@$(PRINT_GRN)
@echo " ___ __ _ _ ____ __ ____ ____ ____ ____ "
@echo " / __/ \( \/ ( _ ( ) ( __(_ _( __( \ "
@echo "( (_( O / \/ \) __/ (_/\) _) )( ) _) ) D ( "
@echo " \___\__/\_)(_(__) \____(____)(__)(____(____/ "
@$(PRINT_NON)

$(GOPATH)/src/$(GOSDK_PATH):
@echo "gosdk is not in GOPATH. Creating softlink..."
ifneq ($(GOPATH), )
$(shell ln -sf $(ROOT_DIR) $(GOPATH)/src/$(0CHAIN_PATH))
endif

build-mobilesdk: $(GOPATH)/src/$(GOSDK_PATH) getrev
@$(PRINT_CYN)
@echo "Building iOS framework. Please wait..."
@cd $(BLS_LIB_BASE_PATH)/bls && git checkout . && git apply $(ROOT_DIR)/patches/github.com-herumi-bls-gomobile_ios.patch && cd - >> /dev/null
@gomobile bind -ldflags="-s -w" -target=ios -o $(IOSMOBILESDKDIR)/$(IOSBINNAME) $(GOSDK_PATH)/zcncore
@echo " $(IOSMOBILESDKDIR)/$(IOSBINNAME). - [OK]"
ifeq ($(NOANDROID),)
@echo "Building Android framework. Please wait..."
@cd $(BLS_LIB_BASE_PATH)/bls && git checkout . && git apply $(ROOT_DIR)/patches/github.com-herumi-bls-gomobile_android.patch && cd - >> /dev/null
@gomobile bind -target=android/arm64,android/amd64 -ldflags=-extldflags=-Wl,-soname,libgojni.so -o $(ANDROIDMOBILESDKDIR)/$(ANDROIDBINNAME) $(GOSDK_PATH)/zcncore
@echo " $(ANDROIDMOBILESDKDIR)/$(ANDROIDBINNAME). - [OK]"
endif
@cd $(BLS_LIB_BASE_PATH)/bls && git checkout . && cd - >> /dev/null
@$(PRINT_NON)

clean-mobilesdk:
@rm -rf $(ANDROIDMOBILESDKDIR)/$(ANDROIDBINNAME)
@rm -rf $(IOSMOBILESDKDIR)/$(IOSBINNAME)

cleanall-gomobile:
@rm -rf $(OUTDIR)
@rm -rf $(BLS_LIB_BASE_PATH)
124 changes: 124 additions & 0 deletions patches/github.com-herumi-bls-gomobile_android.patch
Original file line number Diff line number Diff line change
@@ -0,0 +1,124 @@
diff --git a/Makefile b/Makefile
index 60a84c9..87bb1fc 100644
--- a/Makefile
+++ b/Makefile
@@ -169,13 +169,14 @@ CURVE_BIT?=256
IOS_OBJS=$(IOS_OUTDIR)/fp.o $(IOS_OUTDIR)/base64.o $(IOS_OUTDIR)/bls_c$(CURVE_BIT).o
IOS_LIB=libbls$(CURVE_BIT)

-GOMOBILE_ARCHS=armv7 arm64 i386 x86_64

../mcl/src/base64.ll:
$(MAKE) -C ../mcl src/base64.ll

ios: ../mcl/src/base64.ll
- @echo "Building iOS $(ARCH)..."
+ @echo "========================================================================================"
+ @echo " Building iOS $(ARCH)... "
+ @echo "----------------------------------------------------------------------------------------"
$(eval IOS_OUTDIR=ios/$(ARCH))
$(eval IOS_SDK_PATH=$(XCODEPATH)/Platforms/$(PLATFORM).platform/Developer/SDKs/$(PLATFORM).sdk)
$(eval IOS_COMMON=-arch $(ARCH) -isysroot $(IOS_SDK_PATH) -mios-version-min=$(IOS_MIN_VERSION))
@@ -187,19 +188,69 @@ ios: ../mcl/src/base64.ll
ar cru $(IOS_OUTDIR)/$(IOS_LIB).a $(IOS_OBJS)
ranlib $(IOS_OUTDIR)/$(IOS_LIB).a

-gomobile: ../mcl/src/base64.ll
- @for target in $(GOMOBILE_ARCHS); do \
+
+# Android NDK build
+android:
+ @echo "========================================================================="
+ @echo " Building Android ARCH=$(ARCH) ABI=$(ABI)... "
+ @echo "-------------------------------------------------------------------------"
+ $(eval ANDROID_NDK=$(ANDROID_HOME)/ndk-bundle)
+ $(eval ANDROID_TOOLCHAINS=$(ANDROID_NDK)/toolchains)
+ $(eval ANDROID_LLVM_BASE=$(ANDROID_TOOLCHAINS)/llvm/prebuilt/darwin-x86_64)
+ $(eval ANDROID_API_LEVEL?=21)
+ $(eval ANDROID_LDFLAGS=-shared -fPIC -Wl,-flat_namespace -Wl,-undefined -Wl,suppress)
+ $(shell mkdir -p $(ANDROID_OUTDIR))
+ $(eval ANDROID_CLANG=$(ANDROID_LLVM_BASE)/bin/$(ABI)$(ANDROID_API_LEVEL)-clang++)
+ $(eval ANDROID_AR=$(ANDROID_LLVM_BASE)/bin/$(ANDROID_SUFFIX)-ar)
+ $(eval ANDROID_RANLIB=$(ANDROID_LLVM_BASE)/$(ANDROID_SUFFIX)/bin/ranlib)
+ $(eval ANDROID_SYSROOT=$(ANDROID_LLVM_BASE)/sysroot)
+ $(eval ANDROID_CFLAGS+=-Dmcl_EXPORTS)
+ $(eval ANDROID_CFLAGS+=-DMCL_USE_VINT -DMCL_VINT_FIXED_BUFFER -DMCL_DONT_USE_OPENSSL -DMCL_DONT_USE_XBYAK -DMCL_LLVM_BMI2=0 -DMCL_USE_LLVM=1 -DMCL_SIZEOF_UNIT=8)
+ $(eval ANDROID_CFLAGS+=-fPIC -I$(ANDROID_SYSROOT)/usr/include -I$(ANDROID_SYSROOT)/usr/include/$(ABI))
+ $(eval ANDROID_CFLAGS+=-I./include -I../mcl/include -I/usr/local/include)
+ $(eval ANDROID_CFLAGS+=-Wall -Wextra -Wformat=2 -Wcast-qual -Wcast-align -Wwrite-strings -Wfloat-equal -Wpointer-arith -O3 -DNDEBUG)
+ $(eval ANDROID_OBJS=$(ANDROID_OUTDIR)/fp.o $(ANDROID_OUTDIR)/base64.o $(ANDROID_OUTDIR)/bls_c$(CURVE_BIT).o)
+ $(eval ANDROID_LIB_BASE_NAME=libbls$(CURVE_BIT))
+ $(ANDROID_CLANG) $(ANDROID_CFLAGS) -c ../mcl/src/fp.cpp -o $(ANDROID_OUTDIR)/fp.o
+ $(ANDROID_CLANG) -c ../mcl/src/base64.ll -o $(ANDROID_OUTDIR)/base64.o
+ $(ANDROID_CLANG) $(ANDROID_CFLAGS) -c src/bls_c$(CURVE_BIT).cpp -o $(ANDROID_OUTDIR)/bls_c$(CURVE_BIT).o
+ $(ANDROID_AR) cru $(ANDROID_OUTDIR)/$(ANDROID_LIB_BASE_NAME).a $(ANDROID_OBJS)
+ $(ANDROID_CLANG) $(ANDROID_CFLAGS) $(ANDROID_LDFLAGS) -o $(ANDROID_OUTDIR)/$(ANDROID_LIB_BASE_NAME).so $(ANDROID_OBJS)
+ $(ANDROID_RANLIB) $(ANDROID_OUTDIR)/$(ANDROID_LIB_BASE_NAME).a
+
+IOS_ARCHS=x86_64 armv7 arm64 i386
+gomobile_ios:
+# Build iOS targets
+ @for target in $(IOS_ARCHS); do \
if [ "$$target" == "i386" ] || [ "$$target" == "x86_64" ] ; then \
- $(MAKE) ios ARCH=$$target PLATFORM="iPhoneSimulator"; \
+ $(MAKE) ios ARCH=$$target PLATFORM="iPhoneSimulator" || exit 1; \
else \
- $(MAKE) ios ARCH=$$target PLATFORM="iPhoneOS"; \
+ $(MAKE) ios ARCH=$$target PLATFORM="iPhoneOS" || exit 1; \
fi \
done
@lipo "ios/armv7/libbls$(CURVE_BIT).a" "ios/arm64/libbls$(CURVE_BIT).a" "ios/i386/libbls$(CURVE_BIT).a" "ios/x86_64/libbls$(CURVE_BIT).a" -create -output ios/libbls$(CURVE_BIT).a
- @lipo "ios/armv7/libbls$(CURVE_BIT).dylib" "ios/arm64/libbls$(CURVE_BIT).dylib" "ios/i386/libbls$(CURVE_BIT).dylib" "ios/x86_64/libbls$(CURVE_BIT).dylib" -create -output lib/libbls$(CURVE_BIT).dylib
+ @lipo "ios/armv7/libbls$(CURVE_BIT).dylib" "ios/arm64/libbls$(CURVE_BIT).dylib" "ios/i386/libbls$(CURVE_BIT).dylib" "ios/x86_64/libbls$(CURVE_BIT).dylib" -create -output ios/libbls$(CURVE_BIT).dylib
+
+
+ANDROID_ARCHS=aarch64 arm x86 x86_64
+# Android NDK build
+gomobile_android:
+ @[ "${ANDROID_HOME}" ] || ( echo "\nERROR: ANDROID_HOME is not set.\n\tPlease install Android studio with NDK and set ANDROID_HOME env variable\n"; exit 1 )
+ @for target in $(ANDROID_ARCHS); do \
+ if [ "$$target" == "x86" ] ; then \
+ $(MAKE) android ARCH=$$target ABI=i686-linux-android ANDROID_SUFFIX=i686-linux-android ANDROID_OUTDIR=android/x86 || exit 1; \
+ elif [ "$$target" == "x86_64" ]; then \
+ $(MAKE) android ARCH=$$target ABI=x86_64-linux-android ANDROID_SUFFIX=x86_64-linux-android ANDROID_OUTDIR=android/x86_64 || exit 1; \
+ elif [ "$$target" == "aarch64" ]; then \
+ $(MAKE) android ARCH=$$target ABI=aarch64-linux-android ANDROID_SUFFIX=aarch64-linux-android ANDROID_OUTDIR=android/arm64-v8a || exit 1; \
+ elif [ "$$target" == "arm" ]; then \
+ $(MAKE) android ARCH=$$target ABI=armv7a-linux-androideabi ANDROID_SUFFIX=arm-linux-androideabi ANDROID_OUTDIR=android/armeabi-v7a || exit 1; \
+ fi \
+ done

clean:
$(RM) $(OBJ_DIR)/*.d $(OBJ_DIR)/*.o $(EXE_DIR)/*.exe $(GEN_EXE) $(ASM_SRC) $(ASM_OBJ) $(LLVM_SRC) $(BLS256_LIB) $(BLS256_SLIB) $(BLS384_LIB) $(BLS384_SLIB) $(BLS384_256_LIB) $(BLS384_256_SLIB) $(BLS512_LIB) $(BLS512_SLIB)
+ $(RM) ios android

ALL_SRC=$(SRC_SRC) $(TEST_SRC) $(SAMPLE_SRC)
DEPEND_FILE=$(addprefix $(OBJ_DIR)/, $(ALL_SRC:.cpp=.d))
@@ -212,7 +263,7 @@ install: lib/libbls256.a lib/libbls256.$(LIB_SUF) lib/libbls384.a lib/libbls384.
$(MKDIR) $(PREFIX)/lib
cp -a lib/libbls256.a lib/libbls256.$(LIB_SUF) lib/libbls384.a lib/libbls384.$(LIB_SUF) lib/libbls384_256.a lib/libbls384_256.$(LIB_SUF) $(PREFIX)/lib/

-.PHONY: test bls-wasm ios
+.PHONY: test bls-wasm ios android

# don't remove these files automatically
.SECONDARY: $(addprefix $(OBJ_DIR)/, $(ALL_SRC:.cpp=.o))
diff --git a/ffi/go/bls/bls.go b/ffi/go/bls/bls.go
index 891870c..9de28aa 100644
--- a/ffi/go/bls/bls.go
+++ b/ffi/go/bls/bls.go
@@ -7,11 +7,12 @@ package bls
#cgo bn384 LDFLAGS:-lbls384
#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++
+#cgo LDFLAGS:"-L${SRCDIR}/../../../android/armeabi-v7a" "-L${SRCDIR}/../../../android/arm64-v8a" "-L${SRCDIR}/../../../android/x86" "-L${SRCDIR}/../../../android/x86_64" -lm -lc++_shared -lbls384
+// #cgo LDFLAGS:-lcrypto -lgmp -lgmpxx -lstdc++
#include "config.h"
typedef unsigned int (*ReadRandFunc)(void *, void *, unsigned int);
int wrapReadRandCgo(void *self, void *buf, unsigned int n);
+#cgo CFLAGS: -I${SRCDIR}/../../../include -I${SRCDIR}/../../../../mcl/include
#include <bls/bls.h>
*/
import "C"
124 changes: 124 additions & 0 deletions patches/github.com-herumi-bls-gomobile_ios.patch
Original file line number Diff line number Diff line change
@@ -0,0 +1,124 @@
diff --git a/Makefile b/Makefile
index 60a84c9..87bb1fc 100644
--- a/Makefile
+++ b/Makefile
@@ -169,13 +169,14 @@ CURVE_BIT?=256
IOS_OBJS=$(IOS_OUTDIR)/fp.o $(IOS_OUTDIR)/base64.o $(IOS_OUTDIR)/bls_c$(CURVE_BIT).o
IOS_LIB=libbls$(CURVE_BIT)

-GOMOBILE_ARCHS=armv7 arm64 i386 x86_64

../mcl/src/base64.ll:
$(MAKE) -C ../mcl src/base64.ll

ios: ../mcl/src/base64.ll
- @echo "Building iOS $(ARCH)..."
+ @echo "========================================================================================"
+ @echo " Building iOS $(ARCH)... "
+ @echo "----------------------------------------------------------------------------------------"
$(eval IOS_OUTDIR=ios/$(ARCH))
$(eval IOS_SDK_PATH=$(XCODEPATH)/Platforms/$(PLATFORM).platform/Developer/SDKs/$(PLATFORM).sdk)
$(eval IOS_COMMON=-arch $(ARCH) -isysroot $(IOS_SDK_PATH) -mios-version-min=$(IOS_MIN_VERSION))
@@ -187,19 +188,69 @@ ios: ../mcl/src/base64.ll
ar cru $(IOS_OUTDIR)/$(IOS_LIB).a $(IOS_OBJS)
ranlib $(IOS_OUTDIR)/$(IOS_LIB).a

-gomobile: ../mcl/src/base64.ll
- @for target in $(GOMOBILE_ARCHS); do \
+
+# Android NDK build
+android:
+ @echo "========================================================================="
+ @echo " Building Android ARCH=$(ARCH) ABI=$(ABI)... "
+ @echo "-------------------------------------------------------------------------"
+ $(eval ANDROID_NDK=$(ANDROID_HOME)/ndk-bundle)
+ $(eval ANDROID_TOOLCHAINS=$(ANDROID_NDK)/toolchains)
+ $(eval ANDROID_LLVM_BASE=$(ANDROID_TOOLCHAINS)/llvm/prebuilt/darwin-x86_64)
+ $(eval ANDROID_API_LEVEL?=21)
+ $(eval ANDROID_LDFLAGS=-shared -fPIC -Wl,-flat_namespace -Wl,-undefined -Wl,suppress)
+ $(shell mkdir -p $(ANDROID_OUTDIR))
+ $(eval ANDROID_CLANG=$(ANDROID_LLVM_BASE)/bin/$(ABI)$(ANDROID_API_LEVEL)-clang++)
+ $(eval ANDROID_AR=$(ANDROID_LLVM_BASE)/bin/$(ANDROID_SUFFIX)-ar)
+ $(eval ANDROID_RANLIB=$(ANDROID_LLVM_BASE)/$(ANDROID_SUFFIX)/bin/ranlib)
+ $(eval ANDROID_SYSROOT=$(ANDROID_LLVM_BASE)/sysroot)
+ $(eval ANDROID_CFLAGS+=-Dmcl_EXPORTS)
+ $(eval ANDROID_CFLAGS+=-DMCL_USE_VINT -DMCL_VINT_FIXED_BUFFER -DMCL_DONT_USE_OPENSSL -DMCL_DONT_USE_XBYAK -DMCL_LLVM_BMI2=0 -DMCL_USE_LLVM=1 -DMCL_SIZEOF_UNIT=8)
+ $(eval ANDROID_CFLAGS+=-fPIC -I$(ANDROID_SYSROOT)/usr/include -I$(ANDROID_SYSROOT)/usr/include/$(ABI))
+ $(eval ANDROID_CFLAGS+=-I./include -I../mcl/include -I/usr/local/include)
+ $(eval ANDROID_CFLAGS+=-Wall -Wextra -Wformat=2 -Wcast-qual -Wcast-align -Wwrite-strings -Wfloat-equal -Wpointer-arith -O3 -DNDEBUG)
+ $(eval ANDROID_OBJS=$(ANDROID_OUTDIR)/fp.o $(ANDROID_OUTDIR)/base64.o $(ANDROID_OUTDIR)/bls_c$(CURVE_BIT).o)
+ $(eval ANDROID_LIB_BASE_NAME=libbls$(CURVE_BIT))
+ $(ANDROID_CLANG) $(ANDROID_CFLAGS) -c ../mcl/src/fp.cpp -o $(ANDROID_OUTDIR)/fp.o
+ $(ANDROID_CLANG) -c ../mcl/src/base64.ll -o $(ANDROID_OUTDIR)/base64.o
+ $(ANDROID_CLANG) $(ANDROID_CFLAGS) -c src/bls_c$(CURVE_BIT).cpp -o $(ANDROID_OUTDIR)/bls_c$(CURVE_BIT).o
+ $(ANDROID_AR) cru $(ANDROID_OUTDIR)/$(ANDROID_LIB_BASE_NAME).a $(ANDROID_OBJS)
+ $(ANDROID_CLANG) $(ANDROID_CFLAGS) $(ANDROID_LDFLAGS) -o $(ANDROID_OUTDIR)/$(ANDROID_LIB_BASE_NAME).so $(ANDROID_OBJS)
+ $(ANDROID_RANLIB) $(ANDROID_OUTDIR)/$(ANDROID_LIB_BASE_NAME).a
+
+IOS_ARCHS=x86_64 armv7 arm64 i386
+gomobile_ios:
+# Build iOS targets
+ @for target in $(IOS_ARCHS); do \
if [ "$$target" == "i386" ] || [ "$$target" == "x86_64" ] ; then \
- $(MAKE) ios ARCH=$$target PLATFORM="iPhoneSimulator"; \
+ $(MAKE) ios ARCH=$$target PLATFORM="iPhoneSimulator" || exit 1; \
else \
- $(MAKE) ios ARCH=$$target PLATFORM="iPhoneOS"; \
+ $(MAKE) ios ARCH=$$target PLATFORM="iPhoneOS" || exit 1; \
fi \
done
@lipo "ios/armv7/libbls$(CURVE_BIT).a" "ios/arm64/libbls$(CURVE_BIT).a" "ios/i386/libbls$(CURVE_BIT).a" "ios/x86_64/libbls$(CURVE_BIT).a" -create -output ios/libbls$(CURVE_BIT).a
- @lipo "ios/armv7/libbls$(CURVE_BIT).dylib" "ios/arm64/libbls$(CURVE_BIT).dylib" "ios/i386/libbls$(CURVE_BIT).dylib" "ios/x86_64/libbls$(CURVE_BIT).dylib" -create -output lib/libbls$(CURVE_BIT).dylib
+ @lipo "ios/armv7/libbls$(CURVE_BIT).dylib" "ios/arm64/libbls$(CURVE_BIT).dylib" "ios/i386/libbls$(CURVE_BIT).dylib" "ios/x86_64/libbls$(CURVE_BIT).dylib" -create -output ios/libbls$(CURVE_BIT).dylib
+
+
+ANDROID_ARCHS=aarch64 arm x86 x86_64
+# Android NDK build
+gomobile_android:
+ @[ "${ANDROID_HOME}" ] || ( echo "\nERROR: ANDROID_HOME is not set.\n\tPlease install Android studio with NDK and set ANDROID_HOME env variable\n"; exit 1 )
+ @for target in $(ANDROID_ARCHS); do \
+ if [ "$$target" == "x86" ] ; then \
+ $(MAKE) android ARCH=$$target ABI=i686-linux-android ANDROID_SUFFIX=i686-linux-android ANDROID_OUTDIR=android/x86 || exit 1; \
+ elif [ "$$target" == "x86_64" ]; then \
+ $(MAKE) android ARCH=$$target ABI=x86_64-linux-android ANDROID_SUFFIX=x86_64-linux-android ANDROID_OUTDIR=android/x86_64 || exit 1; \
+ elif [ "$$target" == "aarch64" ]; then \
+ $(MAKE) android ARCH=$$target ABI=aarch64-linux-android ANDROID_SUFFIX=aarch64-linux-android ANDROID_OUTDIR=android/arm64-v8a || exit 1; \
+ elif [ "$$target" == "arm" ]; then \
+ $(MAKE) android ARCH=$$target ABI=armv7a-linux-androideabi ANDROID_SUFFIX=arm-linux-androideabi ANDROID_OUTDIR=android/armeabi-v7a || exit 1; \
+ fi \
+ done

clean:
$(RM) $(OBJ_DIR)/*.d $(OBJ_DIR)/*.o $(EXE_DIR)/*.exe $(GEN_EXE) $(ASM_SRC) $(ASM_OBJ) $(LLVM_SRC) $(BLS256_LIB) $(BLS256_SLIB) $(BLS384_LIB) $(BLS384_SLIB) $(BLS384_256_LIB) $(BLS384_256_SLIB) $(BLS512_LIB) $(BLS512_SLIB)
+ $(RM) ios android

ALL_SRC=$(SRC_SRC) $(TEST_SRC) $(SAMPLE_SRC)
DEPEND_FILE=$(addprefix $(OBJ_DIR)/, $(ALL_SRC:.cpp=.d))
@@ -212,7 +263,7 @@ install: lib/libbls256.a lib/libbls256.$(LIB_SUF) lib/libbls384.a lib/libbls384.
$(MKDIR) $(PREFIX)/lib
cp -a lib/libbls256.a lib/libbls256.$(LIB_SUF) lib/libbls384.a lib/libbls384.$(LIB_SUF) lib/libbls384_256.a lib/libbls384_256.$(LIB_SUF) $(PREFIX)/lib/

-.PHONY: test bls-wasm ios
+.PHONY: test bls-wasm ios android

# don't remove these files automatically
.SECONDARY: $(addprefix $(OBJ_DIR)/, $(ALL_SRC:.cpp=.o))
diff --git a/ffi/go/bls/bls.go b/ffi/go/bls/bls.go
index 891870c..76edb0d 100644
--- a/ffi/go/bls/bls.go
+++ b/ffi/go/bls/bls.go
@@ -7,11 +7,12 @@ package bls
#cgo bn384 LDFLAGS:-lbls384
#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++
+#cgo LDFLAGS:"-L${SRCDIR}/../../../ios" -lbls384
+// #cgo LDFLAGS:-lcrypto -lgmp -lgmpxx -lstdc++
#include "config.h"
typedef unsigned int (*ReadRandFunc)(void *, void *, unsigned int);
int wrapReadRandCgo(void *self, void *buf, unsigned int n);
+#cgo CFLAGS: -I${SRCDIR}/../../../include -I${SRCDIR}/../../../../mcl/include
#include <bls/bls.h>
*/
import "C"

0 comments on commit 101005b

Please sign in to comment.