diff --git a/project/jni/Makefile.prebuilt b/project/jni/Makefile.prebuilt index e3daa851a..f154aae99 100644 --- a/project/jni/Makefile.prebuilt +++ b/project/jni/Makefile.prebuilt @@ -2,7 +2,7 @@ # TODO: libboost, libffmpeg, libpython (used only in GemRB) ARCHES32 := armeabi armeabi-v7a x86 mips -ARCHES64 := arm64-v8a +ARCHES64 := arm64-v8a x86_64 ICONV := $(foreach ARCH, $(ARCHES32), iconv/lib/$(ARCH)/libiconv.so iconv/lib/$(ARCH)/libcharset.so) diff --git a/project/jni/openssl/Android.mk b/project/jni/openssl/Android.mk index 8f2a0cd9a..68d03dee7 100644 --- a/project/jni/openssl/Android.mk +++ b/project/jni/openssl/Android.mk @@ -7,7 +7,7 @@ LOCAL_MODULE_FILENAME := lib$(notdir $(LOCAL_PATH)).so.sdl.1 # It clashes with s ifneq (openssl,$(LOCAL_MODULE)) -ifneq ($(filter arm mips x86 arm64, $(TARGET_ARCH)),) +ifneq ($(filter arm mips x86 arm64 x86_64, $(TARGET_ARCH)),) LOCAL_C_INCLUDES := $(LOCAL_PATH)/include LOCAL_SRC_FILES := lib-$(TARGET_ARCH_ABI)/lib$(LOCAL_MODULE).so.sdl.1.so diff --git a/project/jni/openssl/compile.sh b/project/jni/openssl/compile.sh index bb620269a..aba9e7439 100755 --- a/project/jni/openssl/compile.sh +++ b/project/jni/openssl/compile.sh @@ -1,6 +1,6 @@ #!/bin/sh -ARCH_LIST="arm64-v8a x86 mips armeabi-v7a armeabi" +ARCH_LIST="arm64-v8a x86_64 x86 mips armeabi-v7a armeabi" mkdir -p build @@ -21,7 +21,7 @@ build() { mkdir -p build/$ARCH cd build/$ARCH - tar -x -v -z -f ../../openssl-1.0.2h.tar.gz --strip=1 + tar -x -v -z -f ../../openssl-1.0.2k.tar.gz --strip=1 #sed -i.old 's/-Wl,-soname=[$][$]SHLIB[$][$]SHLIB_SOVER[$][$]SHLIB_SUFFIX//g' Makefile.shared ../../setCrossEnvironment-$ARCH.sh ./Configure shared zlib --prefix=`pwd`/dist $CONFIGURE_ARCH -fPIC || exit 1 # OpenSSL build system disables parallel compilation, -j4 won't do anything diff --git a/project/jni/openssl/include/openssl/bio.h b/project/jni/openssl/include/openssl/bio.h index 6790aed28..8f2438cda 100644 --- a/project/jni/openssl/include/openssl/bio.h +++ b/project/jni/openssl/include/openssl/bio.h @@ -559,11 +559,11 @@ int BIO_read_filename(BIO *b, const char *name); # define BIO_get_ssl(b,sslp) BIO_ctrl(b,BIO_C_GET_SSL,0,(char *)sslp) # define BIO_set_ssl_mode(b,client) BIO_ctrl(b,BIO_C_SSL_MODE,client,NULL) # define BIO_set_ssl_renegotiate_bytes(b,num) \ - BIO_ctrl(b,BIO_C_SET_SSL_RENEGOTIATE_BYTES,num,NULL); + BIO_ctrl(b,BIO_C_SET_SSL_RENEGOTIATE_BYTES,num,NULL) # define BIO_get_num_renegotiates(b) \ - BIO_ctrl(b,BIO_C_GET_SSL_NUM_RENEGOTIATES,0,NULL); + BIO_ctrl(b,BIO_C_GET_SSL_NUM_RENEGOTIATES,0,NULL) # define BIO_set_ssl_renegotiate_timeout(b,seconds) \ - BIO_ctrl(b,BIO_C_SET_SSL_RENEGOTIATE_TIMEOUT,seconds,NULL); + BIO_ctrl(b,BIO_C_SET_SSL_RENEGOTIATE_TIMEOUT,seconds,NULL) /* defined in evp.h */ /* #define BIO_set_md(b,md) BIO_ctrl(b,BIO_C_SET_MD,1,(char *)md) */ diff --git a/project/jni/openssl/include/openssl/bn.h b/project/jni/openssl/include/openssl/bn.h index 86264ae63..633d1b1f6 100644 --- a/project/jni/openssl/include/openssl/bn.h +++ b/project/jni/openssl/include/openssl/bn.h @@ -842,6 +842,8 @@ int RAND_pseudo_bytes(unsigned char *buf, int num); if (*(ftl--)) break; \ (a)->top = tmp_top; \ } \ + if ((a)->top == 0) \ + (a)->neg = 0; \ bn_pollute(a); \ } diff --git a/project/jni/openssl/include/openssl/comp.h b/project/jni/openssl/include/openssl/comp.h index 60a073404..df599ba33 100644 --- a/project/jni/openssl/include/openssl/comp.h +++ b/project/jni/openssl/include/openssl/comp.h @@ -14,7 +14,7 @@ extern "C" { typedef struct comp_ctx_st COMP_CTX; -typedef struct comp_method_st { +struct comp_method_st { int type; /* NID for compression library */ const char *name; /* A text string to identify the library */ int (*init) (COMP_CTX *ctx); @@ -30,7 +30,7 @@ typedef struct comp_method_st { */ long (*ctrl) (void); long (*callback_ctrl) (void); -} COMP_METHOD; +}; struct comp_ctx_st { COMP_METHOD *meth; diff --git a/project/jni/openssl/include/openssl/evp.h b/project/jni/openssl/include/openssl/evp.h index 39ab7937d..d258ef870 100644 --- a/project/jni/openssl/include/openssl/evp.h +++ b/project/jni/openssl/include/openssl/evp.h @@ -1370,6 +1370,7 @@ void EVP_add_alg_module(void); * The following lines are auto generated by the script mkerr.pl. Any changes * made after this point may be overwritten when the script is next run. */ + void ERR_load_EVP_strings(void); /* Error codes for the EVP functions. */ @@ -1489,6 +1490,7 @@ void ERR_load_EVP_strings(void); # define EVP_R_INPUT_NOT_INITIALIZED 111 # define EVP_R_INVALID_DIGEST 152 # define EVP_R_INVALID_FIPS_MODE 168 +# define EVP_R_INVALID_KEY 171 # define EVP_R_INVALID_KEY_LENGTH 130 # define EVP_R_INVALID_OPERATION 148 # define EVP_R_IV_TOO_LARGE 102 @@ -1528,7 +1530,7 @@ void ERR_load_EVP_strings(void); # define EVP_R_WRONG_FINAL_BLOCK_LENGTH 109 # define EVP_R_WRONG_PUBLIC_KEY_TYPE 110 -#ifdef __cplusplus +# ifdef __cplusplus } -#endif +# endif #endif diff --git a/project/jni/openssl/include/openssl/opensslv.h b/project/jni/openssl/include/openssl/opensslv.h index 13fe44023..645dd0793 100644 --- a/project/jni/openssl/include/openssl/opensslv.h +++ b/project/jni/openssl/include/openssl/opensslv.h @@ -30,11 +30,11 @@ extern "C" { * (Prior to 0.9.5a beta1, a different scheme was used: MMNNFFRBB for * major minor fix final patch/beta) */ -# define OPENSSL_VERSION_NUMBER 0x1000208fL +# define OPENSSL_VERSION_NUMBER 0x100020bfL # ifdef OPENSSL_FIPS -# define OPENSSL_VERSION_TEXT "OpenSSL 1.0.2h-fips 3 May 2016" +# define OPENSSL_VERSION_TEXT "OpenSSL 1.0.2k-fips 26 Jan 2017" # else -# define OPENSSL_VERSION_TEXT "OpenSSL 1.0.2h 3 May 2016" +# define OPENSSL_VERSION_TEXT "OpenSSL 1.0.2k 26 Jan 2017" # endif # define OPENSSL_VERSION_PTEXT " part of " OPENSSL_VERSION_TEXT diff --git a/project/jni/openssl/include/openssl/ossl_typ.h b/project/jni/openssl/include/openssl/ossl_typ.h index 9144ea2cf..364d26238 100644 --- a/project/jni/openssl/include/openssl/ossl_typ.h +++ b/project/jni/openssl/include/openssl/ossl_typ.h @@ -178,6 +178,8 @@ typedef struct engine_st ENGINE; typedef struct ssl_st SSL; typedef struct ssl_ctx_st SSL_CTX; +typedef struct comp_method_st COMP_METHOD; + typedef struct X509_POLICY_NODE_st X509_POLICY_NODE; typedef struct X509_POLICY_LEVEL_st X509_POLICY_LEVEL; typedef struct X509_POLICY_TREE_st X509_POLICY_TREE; diff --git a/project/jni/openssl/include/openssl/pem.h b/project/jni/openssl/include/openssl/pem.h index d3b23fc99..aac72fb21 100644 --- a/project/jni/openssl/include/openssl/pem.h +++ b/project/jni/openssl/include/openssl/pem.h @@ -531,6 +531,7 @@ int i2b_PVK_bio(BIO *out, EVP_PKEY *pk, int enclevel, * The following lines are auto generated by the script mkerr.pl. Any changes * made after this point may be overwritten when the script is next run. */ + void ERR_load_PEM_strings(void); /* Error codes for the PEM functions. */ @@ -592,6 +593,7 @@ void ERR_load_PEM_strings(void); # define PEM_R_ERROR_CONVERTING_PRIVATE_KEY 115 # define PEM_R_EXPECTING_PRIVATE_KEY_BLOB 119 # define PEM_R_EXPECTING_PUBLIC_KEY_BLOB 120 +# define PEM_R_HEADER_TOO_LONG 128 # define PEM_R_INCONSISTENT_HEADER 121 # define PEM_R_KEYBLOB_HEADER_PARSE_ERROR 122 # define PEM_R_KEYBLOB_TOO_SHORT 123 @@ -609,7 +611,7 @@ void ERR_load_PEM_strings(void); # define PEM_R_UNSUPPORTED_ENCRYPTION 114 # define PEM_R_UNSUPPORTED_KEY_COMPONENTS 126 -#ifdef __cplusplus +# ifdef __cplusplus } -#endif +# endif #endif diff --git a/project/jni/openssl/include/openssl/pkcs12.h b/project/jni/openssl/include/openssl/pkcs12.h index a39adf5eb..21f1f62b3 100644 --- a/project/jni/openssl/include/openssl/pkcs12.h +++ b/project/jni/openssl/include/openssl/pkcs12.h @@ -270,7 +270,7 @@ int i2d_PKCS12_bio(BIO *bp, PKCS12 *p12); int i2d_PKCS12_fp(FILE *fp, PKCS12 *p12); PKCS12 *d2i_PKCS12_bio(BIO *bp, PKCS12 **p12); PKCS12 *d2i_PKCS12_fp(FILE *fp, PKCS12 **p12); -int PKCS12_newpass(PKCS12 *p12, char *oldpass, char *newpass); +int PKCS12_newpass(PKCS12 *p12, const char *oldpass, const char *newpass); /* BEGIN ERROR CODES */ /* diff --git a/project/jni/openssl/include/openssl/ssl.h b/project/jni/openssl/include/openssl/ssl.h index 5ef56faa5..90aeb0ce4 100644 --- a/project/jni/openssl/include/openssl/ssl.h +++ b/project/jni/openssl/include/openssl/ssl.h @@ -2532,7 +2532,6 @@ void SSL_set_tmp_ecdh_callback(SSL *ssl, int keylength)); # endif -# ifndef OPENSSL_NO_COMP const COMP_METHOD *SSL_get_current_compression(SSL *s); const COMP_METHOD *SSL_get_current_expansion(SSL *s); const char *SSL_COMP_get_name(const COMP_METHOD *comp); @@ -2541,13 +2540,6 @@ STACK_OF(SSL_COMP) *SSL_COMP_set0_compression_methods(STACK_OF(SSL_COMP) *meths); void SSL_COMP_free_compression_methods(void); int SSL_COMP_add_compression_method(int id, COMP_METHOD *cm); -# else -const void *SSL_get_current_compression(SSL *s); -const void *SSL_get_current_expansion(SSL *s); -const char *SSL_COMP_get_name(const void *comp); -void *SSL_COMP_get_compression_methods(void); -int SSL_COMP_add_compression_method(int id, void *cm); -# endif const SSL_CIPHER *SSL_CIPHER_find(SSL *ssl, const unsigned char *ptr); @@ -2623,6 +2615,7 @@ void ERR_load_SSL_strings(void); # define SSL_F_DTLS1_HEARTBEAT 305 # define SSL_F_DTLS1_OUTPUT_CERT_CHAIN 255 # define SSL_F_DTLS1_PREPROCESS_FRAGMENT 288 +# define SSL_F_DTLS1_PROCESS_BUFFERED_RECORDS 424 # define SSL_F_DTLS1_PROCESS_OUT_OF_SEQ_MESSAGE 256 # define SSL_F_DTLS1_PROCESS_RECORD 257 # define SSL_F_DTLS1_READ_BYTES 258 @@ -3114,6 +3107,7 @@ void ERR_load_SSL_strings(void); # define SSL_R_TLS_INVALID_ECPOINTFORMAT_LIST 157 # define SSL_R_TLS_PEER_DID_NOT_RESPOND_WITH_CERTIFICATE_LIST 233 # define SSL_R_TLS_RSA_ENCRYPTED_VALUE_LENGTH_IS_WRONG 234 +# define SSL_R_TOO_MANY_WARN_ALERTS 409 # define SSL_R_TRIED_TO_USE_UNSUPPORTED_CIPHER 235 # define SSL_R_UNABLE_TO_DECODE_DH_CERTS 236 # define SSL_R_UNABLE_TO_DECODE_ECDH_CERTS 313 diff --git a/project/jni/openssl/include/openssl/ts.h b/project/jni/openssl/include/openssl/ts.h index 16eccbb38..2daa1b2fb 100644 --- a/project/jni/openssl/include/openssl/ts.h +++ b/project/jni/openssl/include/openssl/ts.h @@ -565,6 +565,9 @@ int TS_RESP_CTX_set_clock_precision_digits(TS_RESP_CTX *ctx, /* At most we accept usec precision. */ # define TS_MAX_CLOCK_PRECISION_DIGITS 6 +/* Maximum status message length */ +# define TS_MAX_STATUS_LENGTH (1024 * 1024) + /* No flags are set by default. */ void TS_RESP_CTX_add_flags(TS_RESP_CTX *ctx, int flags); diff --git a/project/jni/openssl/include/openssl/x509.h b/project/jni/openssl/include/openssl/x509.h index fc613ce63..6fa28ebad 100644 --- a/project/jni/openssl/include/openssl/x509.h +++ b/project/jni/openssl/include/openssl/x509.h @@ -1234,6 +1234,7 @@ int X509_TRUST_get_trust(X509_TRUST *xp); * The following lines are auto generated by the script mkerr.pl. Any changes * made after this point may be overwritten when the script is next run. */ + void ERR_load_X509_strings(void); /* Error codes for the X509 functions. */ @@ -1241,6 +1242,7 @@ void ERR_load_X509_strings(void); /* Function codes. */ # define X509_F_ADD_CERT_DIR 100 # define X509_F_BY_FILE_CTRL 101 +# define X509_F_CHECK_NAME_CONSTRAINTS 106 # define X509_F_CHECK_POLICY 145 # define X509_F_DIR_CTRL 102 # define X509_F_GET_CERT_BY_SUBJECT 103 @@ -1322,7 +1324,7 @@ void ERR_load_X509_strings(void); # define X509_R_WRONG_LOOKUP_TYPE 112 # define X509_R_WRONG_TYPE 122 -#ifdef __cplusplus +# ifdef __cplusplus } -#endif +# endif #endif diff --git a/project/jni/openssl/include/openssl/x509_vfy.h b/project/jni/openssl/include/openssl/x509_vfy.h index 2663e1c0a..50626826e 100644 --- a/project/jni/openssl/include/openssl/x509_vfy.h +++ b/project/jni/openssl/include/openssl/x509_vfy.h @@ -368,6 +368,7 @@ void X509_STORE_CTX_set_depth(X509_STORE_CTX *ctx, int depth); # define X509_V_ERR_PERMITTED_VIOLATION 47 # define X509_V_ERR_EXCLUDED_VIOLATION 48 # define X509_V_ERR_SUBTREE_MINMAX 49 +# define X509_V_ERR_APPLICATION_VERIFICATION 50 # define X509_V_ERR_UNSUPPORTED_CONSTRAINT_TYPE 51 # define X509_V_ERR_UNSUPPORTED_CONSTRAINT_SYNTAX 52 # define X509_V_ERR_UNSUPPORTED_NAME_SYNTAX 53 @@ -386,8 +387,12 @@ void X509_STORE_CTX_set_depth(X509_STORE_CTX *ctx, int depth); # define X509_V_ERR_EMAIL_MISMATCH 63 # define X509_V_ERR_IP_ADDRESS_MISMATCH 64 -/* The application is not happy */ -# define X509_V_ERR_APPLICATION_VERIFICATION 50 +/* Caller error */ +# define X509_V_ERR_INVALID_CALL 65 +/* Issuer lookup error */ +# define X509_V_ERR_STORE_LOOKUP 66 + +# define X509_V_ERR_PROXY_SUBJECT_NAME_VIOLATION 67 /* Certificate verify flags */ diff --git a/project/jni/openssl/openssl-1.0.2h.tar.gz b/project/jni/openssl/openssl-1.0.2h.tar.gz deleted file mode 100644 index 7eb74e70b..000000000 Binary files a/project/jni/openssl/openssl-1.0.2h.tar.gz and /dev/null differ diff --git a/project/jni/openssl/openssl-1.0.2k-android-x86_64.diff b/project/jni/openssl/openssl-1.0.2k-android-x86_64.diff new file mode 100644 index 000000000..86a2835eb --- /dev/null +++ b/project/jni/openssl/openssl-1.0.2k-android-x86_64.diff @@ -0,0 +1,11 @@ +diff -Nru orig/openssl-1.0.2k/Configure openssl-1.0.2k/Configure +--- orig/openssl-1.0.2k/Configure 2017-01-26 15:22:03.000000000 +0200 ++++ openssl-1.0.2k/Configure 2017-03-19 22:11:58.906136059 +0200 +@@ -475,6 +475,7 @@ + "android-x86","gcc:-mandroid -I\$(ANDROID_DEV)/include -B\$(ANDROID_DEV)/lib -O3 -fomit-frame-pointer -Wall::-D_REENTRANT::-ldl:BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:".eval{my $asm=${x86_elf_asm};$asm=~s/:elf/:android/;$asm}.":dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)", + "android-armv7","gcc:-march=armv7-a -mandroid -I\$(ANDROID_DEV)/include -B\$(ANDROID_DEV)/lib -O3 -fomit-frame-pointer -Wall::-D_REENTRANT::-ldl:BN_LLONG RC4_CHAR RC4_CHUNK DES_INT DES_UNROLL BF_PTR:${armv4_asm}:dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)", + "android-mips","gcc:-mandroid -I\$(ANDROID_DEV)/include -B\$(ANDROID_DEV)/lib -O3 -Wall::-D_REENTRANT::-ldl:BN_LLONG RC4_CHAR RC4_CHUNK DES_INT DES_UNROLL BF_PTR:${mips32_asm}:o32:dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)", ++"android-x86_64","gcc:-mandroid -I\$(ANDROID_DEV)/include -B\$(ANDROID_DEV)/lib64 -O3 -fomit-frame-pointer -Wall::-D_REENTRANT::-ldl:SIXTY_FOUR_BIT_LONG RC4_CHAR RC4_CHUNK DES_INT DES_UNROLL BF_PTR:${no_asm}:dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)", + + #### *BSD [do see comment about ${BSDthreads} above!] + "BSD-generic32","gcc:-O3 -fomit-frame-pointer -Wall::${BSDthreads}:::BN_LLONG RC2_CHAR RC4_INDEX DES_INT DES_UNROLL:${no_asm}:dlfcn:bsd-gcc-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)", diff --git a/project/jni/openssl/openssl-1.0.2k.tar.gz b/project/jni/openssl/openssl-1.0.2k.tar.gz new file mode 100644 index 000000000..30ede7e4c Binary files /dev/null and b/project/jni/openssl/openssl-1.0.2k.tar.gz differ diff --git a/project/jni/openssl/setCrossEnvironment-x86_64.sh b/project/jni/openssl/setCrossEnvironment-x86_64.sh new file mode 100755 index 000000000..e20b27e8f --- /dev/null +++ b/project/jni/openssl/setCrossEnvironment-x86_64.sh @@ -0,0 +1,80 @@ +#!/bin/sh + +IFS=' +' + +MYARCH=linux-x86_64 +if uname -s | grep -i "linux" > /dev/null ; then + MYARCH=linux-x86_64 +fi +if uname -s | grep -i "darwin" > /dev/null ; then + MYARCH=darwin-x86_64 +fi +if uname -s | grep -i "windows" > /dev/null ; then + MYARCH=windows-x86_64 +fi + +NDK=`which ndk-build` +NDK=`dirname $NDK` +NDK=`readlink -f $NDK` + +[ -z "$NDK" ] && { echo "You need Andorid NDK r8 or newer installed to run this script" ; exit 1 ; } +GCCPREFIX=x86_64-linux-android +GCCVER=${GCCVER:-4.9} +PLATFORMVER=${PLATFORMVER:-android-21} +LOCAL_PATH=`dirname $0` +if which realpath > /dev/null ; then + LOCAL_PATH=`realpath $LOCAL_PATH` +else + LOCAL_PATH=`cd $LOCAL_PATH && pwd` +fi +ARCH=x86_64 + +CFLAGS="\ +-fpic -ffunction-sections -funwind-tables -no-canonical-prefixes \ +-fstack-protector -O2 -g -DNDEBUG \ +-fomit-frame-pointer -fstrict-aliasing -funswitch-loops \ +-finline-limit=300 \ +-DANDROID -Wall -Wno-unused -Wa,--noexecstack -Wformat -Werror=format-security \ +-isystem$NDK/platforms/$PLATFORMVER/arch-x86_64/usr/include \ +-isystem$NDK/sources/cxx-stl/gnu-libstdc++/$GCCVER/include \ +-isystem$NDK/sources/cxx-stl/gnu-libstdc++/$GCCVER/libs/$ARCH/include \ +$CFLAGS" + +UNRESOLVED="-Wl,--no-undefined" +SHARED="-Wl,--gc-sections -Wl,-z,nocopyreloc" +if [ -n "$BUILD_LIBRARY" ]; then + [ -z "$SHARED_LIBRARY_NAME" ] && SHARED_LIBRARY_NAME=libapplication.so + SHARED="-shared -Wl,-soname,$SHARED_LIBRARY_NAME" +fi +if [ -n "$ALLOW_UNRESOLVED_SYMBOLS" ]; then + UNRESOLVED= +fi + +LDFLAGS="\ +$SHARED \ +--sysroot=$NDK/platforms/$PLATFORMVER/arch-x86_64 \ +-L$NDK/platforms/$PLATFORMVER/arch-x86_64/usr/lib64 \ +-lc -lm -ldl -lz \ +-L$NDK/sources/cxx-stl/gnu-libstdc++/$GCCVER/libs/$ARCH \ +-lgnustl_static \ +-no-canonical-prefixes $UNRESOLVED -Wl,-z,noexecstack -Wl,-z,relro -Wl,-z,now \ +-lsupc++ \ +$LDFLAGS" + +env PATH=$NDK/toolchains/$ARCH-$GCCVER/prebuilt/$MYARCH/bin:$LOCAL_PATH:$PATH \ +ANDROID_DEV=$NDK/platforms/$PLATFORMVER/arch-x86_64/usr \ +CFLAGS="$CFLAGS" \ +CXXFLAGS="$CXXFLAGS $CFLAGS" \ +LDFLAGS="$LDFLAGS" \ +CC="$NDK/toolchains/$ARCH-$GCCVER/prebuilt/$MYARCH/bin/$GCCPREFIX-gcc" \ +CXX="$NDK/toolchains/$ARCH-$GCCVER/prebuilt/$MYARCH/bin/$GCCPREFIX-g++" \ +RANLIB="$NDK/toolchains/$ARCH-$GCCVER/prebuilt/$MYARCH/bin/$GCCPREFIX-ranlib" \ +LD="$NDK/toolchains/$ARCH-$GCCVER/prebuilt/$MYARCH/bin/$GCCPREFIX-ld" \ +AR="$NDK/toolchains/$ARCH-$GCCVER/prebuilt/$MYARCH/bin/$GCCPREFIX-ar" \ +CPP="$NDK/toolchains/$ARCH-$GCCVER/prebuilt/$MYARCH/bin/$GCCPREFIX-cpp $CFLAGS" \ +CXXCPP="$NDK/toolchains/$ARCH-$GCCVER/prebuilt/$MYARCH/bin/$GCCPREFIX-cpp -x c++ $CFLAGS" \ +NM="$NDK/toolchains/$ARCH-$GCCVER/prebuilt/$MYARCH/bin/$GCCPREFIX-nm" \ +AS="$NDK/toolchains/$ARCH-$GCCVER/prebuilt/$MYARCH/bin/$GCCPREFIX-as" \ +STRIP="$NDK/toolchains/$ARCH-$GCCVER/prebuilt/$MYARCH/bin/$GCCPREFIX-strip" \ +"$@"