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"