github.com/0chain/gosdk@v1.17.11/patches/github.com-herumi-bls-gomobile_ios.patch (about) 1 diff --git a/Makefile b/Makefile 2 index 60a84c9..87bb1fc 100644 3 --- a/Makefile 4 +++ b/Makefile 5 @@ -169,13 +169,14 @@ CURVE_BIT?=256 6 IOS_OBJS=$(IOS_OUTDIR)/fp.o $(IOS_OUTDIR)/base64.o $(IOS_OUTDIR)/bls_c$(CURVE_BIT).o 7 IOS_LIB=libbls$(CURVE_BIT) 8 9 -GOMOBILE_ARCHS=armv7 arm64 i386 x86_64 10 11 ../mcl/src/base64.ll: 12 $(MAKE) -C ../mcl src/base64.ll 13 14 ios: ../mcl/src/base64.ll 15 - @echo "Building iOS $(ARCH)..." 16 + @echo "========================================================================================" 17 + @echo " Building iOS $(ARCH)... " 18 + @echo "----------------------------------------------------------------------------------------" 19 $(eval IOS_OUTDIR=ios/$(ARCH)) 20 $(eval IOS_SDK_PATH=$(XCODEPATH)/Platforms/$(PLATFORM).platform/Developer/SDKs/$(PLATFORM).sdk) 21 $(eval IOS_COMMON=-arch $(ARCH) -isysroot $(IOS_SDK_PATH) -mios-version-min=$(IOS_MIN_VERSION)) 22 @@ -187,19 +188,69 @@ ios: ../mcl/src/base64.ll 23 ar cru $(IOS_OUTDIR)/$(IOS_LIB).a $(IOS_OBJS) 24 ranlib $(IOS_OUTDIR)/$(IOS_LIB).a 25 26 -gomobile: ../mcl/src/base64.ll 27 - @for target in $(GOMOBILE_ARCHS); do \ 28 + 29 +# Android NDK build 30 +android: 31 + @echo "=========================================================================" 32 + @echo " Building Android ARCH=$(ARCH) ABI=$(ABI)... " 33 + @echo "-------------------------------------------------------------------------" 34 + $(eval ANDROID_NDK=$(ANDROID_HOME)/ndk-bundle) 35 + $(eval ANDROID_TOOLCHAINS=$(ANDROID_NDK)/toolchains) 36 + $(eval ANDROID_LLVM_BASE=$(ANDROID_TOOLCHAINS)/llvm/prebuilt/darwin-x86_64) 37 + $(eval ANDROID_API_LEVEL?=21) 38 + $(eval ANDROID_LDFLAGS=-shared -fPIC -Wl,-flat_namespace -Wl,-undefined -Wl,suppress) 39 + $(shell mkdir -p $(ANDROID_OUTDIR)) 40 + $(eval ANDROID_CLANG=$(ANDROID_LLVM_BASE)/bin/$(ABI)$(ANDROID_API_LEVEL)-clang++) 41 + $(eval ANDROID_AR=$(ANDROID_LLVM_BASE)/bin/$(ANDROID_SUFFIX)-ar) 42 + $(eval ANDROID_RANLIB=$(ANDROID_LLVM_BASE)/$(ANDROID_SUFFIX)/bin/ranlib) 43 + $(eval ANDROID_SYSROOT=$(ANDROID_LLVM_BASE)/sysroot) 44 + $(eval ANDROID_CFLAGS+=-Dmcl_EXPORTS) 45 + $(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) 46 + $(eval ANDROID_CFLAGS+=-fPIC -I$(ANDROID_SYSROOT)/usr/include -I$(ANDROID_SYSROOT)/usr/include/$(ABI)) 47 + $(eval ANDROID_CFLAGS+=-I./include -I../mcl/include -I/usr/local/include) 48 + $(eval ANDROID_CFLAGS+=-Wall -Wextra -Wformat=2 -Wcast-qual -Wcast-align -Wwrite-strings -Wfloat-equal -Wpointer-arith -O3 -DNDEBUG) 49 + $(eval ANDROID_OBJS=$(ANDROID_OUTDIR)/fp.o $(ANDROID_OUTDIR)/base64.o $(ANDROID_OUTDIR)/bls_c$(CURVE_BIT).o) 50 + $(eval ANDROID_LIB_BASE_NAME=libbls$(CURVE_BIT)) 51 + $(ANDROID_CLANG) $(ANDROID_CFLAGS) -c ../mcl/src/fp.cpp -o $(ANDROID_OUTDIR)/fp.o 52 + $(ANDROID_CLANG) -c ../mcl/src/base64.ll -o $(ANDROID_OUTDIR)/base64.o 53 + $(ANDROID_CLANG) $(ANDROID_CFLAGS) -c src/bls_c$(CURVE_BIT).cpp -o $(ANDROID_OUTDIR)/bls_c$(CURVE_BIT).o 54 + $(ANDROID_AR) cru $(ANDROID_OUTDIR)/$(ANDROID_LIB_BASE_NAME).a $(ANDROID_OBJS) 55 + $(ANDROID_CLANG) $(ANDROID_CFLAGS) $(ANDROID_LDFLAGS) -o $(ANDROID_OUTDIR)/$(ANDROID_LIB_BASE_NAME).so $(ANDROID_OBJS) 56 + $(ANDROID_RANLIB) $(ANDROID_OUTDIR)/$(ANDROID_LIB_BASE_NAME).a 57 + 58 +IOS_ARCHS=x86_64 armv7 arm64 i386 59 +gomobile_ios: 60 +# Build iOS targets 61 + @for target in $(IOS_ARCHS); do \ 62 if [ "$$target" == "i386" ] || [ "$$target" == "x86_64" ] ; then \ 63 - $(MAKE) ios ARCH=$$target PLATFORM="iPhoneSimulator"; \ 64 + $(MAKE) ios ARCH=$$target PLATFORM="iPhoneSimulator" || exit 1; \ 65 else \ 66 - $(MAKE) ios ARCH=$$target PLATFORM="iPhoneOS"; \ 67 + $(MAKE) ios ARCH=$$target PLATFORM="iPhoneOS" || exit 1; \ 68 fi \ 69 done 70 @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 71 - @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 72 + @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 73 + 74 + 75 +ANDROID_ARCHS=aarch64 arm x86 x86_64 76 +# Android NDK build 77 +gomobile_android: 78 + @[ "${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 ) 79 + @for target in $(ANDROID_ARCHS); do \ 80 + if [ "$$target" == "x86" ] ; then \ 81 + $(MAKE) android ARCH=$$target ABI=i686-linux-android ANDROID_SUFFIX=i686-linux-android ANDROID_OUTDIR=android/x86 || exit 1; \ 82 + elif [ "$$target" == "x86_64" ]; then \ 83 + $(MAKE) android ARCH=$$target ABI=x86_64-linux-android ANDROID_SUFFIX=x86_64-linux-android ANDROID_OUTDIR=android/x86_64 || exit 1; \ 84 + elif [ "$$target" == "aarch64" ]; then \ 85 + $(MAKE) android ARCH=$$target ABI=aarch64-linux-android ANDROID_SUFFIX=aarch64-linux-android ANDROID_OUTDIR=android/arm64-v8a || exit 1; \ 86 + elif [ "$$target" == "arm" ]; then \ 87 + $(MAKE) android ARCH=$$target ABI=armv7a-linux-androideabi ANDROID_SUFFIX=arm-linux-androideabi ANDROID_OUTDIR=android/armeabi-v7a || exit 1; \ 88 + fi \ 89 + done 90 91 clean: 92 $(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) 93 + $(RM) ios android 94 95 ALL_SRC=$(SRC_SRC) $(TEST_SRC) $(SAMPLE_SRC) 96 DEPEND_FILE=$(addprefix $(OBJ_DIR)/, $(ALL_SRC:.cpp=.d)) 97 @@ -212,7 +263,7 @@ install: lib/libbls256.a lib/libbls256.$(LIB_SUF) lib/libbls384.a lib/libbls384. 98 $(MKDIR) $(PREFIX)/lib 99 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/ 100 101 -.PHONY: test bls-wasm ios 102 +.PHONY: test bls-wasm ios android 103 104 # don't remove these files automatically 105 .SECONDARY: $(addprefix $(OBJ_DIR)/, $(ALL_SRC:.cpp=.o)) 106 diff --git a/ffi/go/bls/bls.go b/ffi/go/bls/bls.go 107 index 891870c..76edb0d 100644 108 --- a/ffi/go/bls/bls.go 109 +++ b/ffi/go/bls/bls.go 110 @@ -7,11 +7,12 @@ package bls 111 #cgo bn384 LDFLAGS:-lbls384 112 #cgo bn384_256 CFLAGS:-DMCLBN_FP_UNIT_SIZE=6 -DMCLBN_FR_UNIT_SIZE=4 113 #cgo bn384_256 LDFLAGS:-lbls384_256 114 -#cgo LDFLAGS:-lbls384 115 -#cgo LDFLAGS:-lcrypto -lgmp -lgmpxx -lstdc++ 116 +#cgo LDFLAGS:"-L${SRCDIR}/../../../ios" -lbls384 117 +// #cgo LDFLAGS:-lcrypto -lgmp -lgmpxx -lstdc++ 118 #include "config.h" 119 typedef unsigned int (*ReadRandFunc)(void *, void *, unsigned int); 120 int wrapReadRandCgo(void *self, void *buf, unsigned int n); 121 +#cgo CFLAGS: -I${SRCDIR}/../../../include -I${SRCDIR}/../../../../mcl/include 122 #include <bls/bls.h> 123 */ 124 import "C"