Restore openssl

This commit is contained in:
2024-04-05 21:02:11 +01:00
parent d2748a5c1a
commit 07e2a663ba
10 changed files with 557 additions and 0 deletions

3
project/jni/openssl/.gitignore vendored Normal file
View File

@@ -0,0 +1,3 @@
/build
/lib-*
/include

View File

@@ -0,0 +1,26 @@
LOCAL_PATH:=$(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := $(notdir $(LOCAL_PATH))
ifneq (openssl,$(LOCAL_MODULE))
ifneq ($(filter $(LOCAL_MODULE), $(APP_MODULES)),)
LOCAL_MODULE_FILENAME := lib$(notdir $(LOCAL_PATH)).so.sdl.1 # It clashes with system libcrypto and libssl in Android 4.3 and older
LOCAL_C_INCLUDES := $(LOCAL_PATH)/include
LOCAL_SRC_FILES := lib/$(TARGET_ARCH_ABI)/lib$(LOCAL_MODULE).so.sdl.1.so
LOCAL_BUILT_MODULE := # This fixes a bug in NDK r10d
# NDK is buggy meh
obj/local/$(TARGET_ARCH_ABI)/lib$(LOCAL_MODULE).so.sdl.1.so: $(LOCAL_PATH)/$(LOCAL_SRC_FILES)
cp -f $< $@
obj/local/$(TARGET_ARCH_ABI)/lib$(LOCAL_MODULE).so.sdl.0.so: obj/local/$(TARGET_ARCH_ABI)/lib$(LOCAL_MODULE).so.sdl.1.so
cp -f $< $@
include $(PREBUILT_SHARED_LIBRARY)
endif
endif

104
project/jni/openssl/compile.sh Executable file
View File

@@ -0,0 +1,104 @@
#!/bin/sh
if [ -z "$ARCH_LIST" ] || [ "$ARCH_LIST" = "all" ]; then
ARCH_LIST="arm64-v8a armeabi-v7a x86_64 x86"
fi
PARALLEL=false
mkdir -p build
build() {
ARCH=$1
NO_ASM=""
case $ARCH in
armeabi-v7a)
#NO_ASM="-DOPENSSL_NO_ASM=1" # Assembler in OpenSSL is broken when using clang
export CONFIGURE_ARCH=android-arm
;;
x86)
export CONFIGURE_ARCH=android-x86
;;
arm64-v8a)
export CONFIGURE_ARCH=android-arm64
;;
x86_64)
#NO_ASM="-DOPENSSL_NO_ASM=1" # Assembler in OpenSSL is broken when using clang
export CONFIGURE_ARCH=android64-x86_64 # No-asm variant
;;
*)
echo "Arch $ARCH not defined"
exit 1;;
esac
rm -rf build/$ARCH
mkdir -p build/$ARCH
cd build/$ARCH
tar -x -v -z -f ../../openssl-1.1.1j.tar.gz --strip=1
patch -p1 < ../../config.patch || exit 1
env LDFLAGS="-shared -landroid -llog" \
CFLAGS="$NO_ASM" \
../../setCrossEnvironment-$ARCH.sh \
sh -c '
ln -s $AR `basename -s -clang $CC`-ar
export PATH=`pwd`:`dirname $CC`:$PATH
export ANDROID_NDK_HOME=`dirname $CC`/..
export CC=clang
export AR=ar
./Configure shared zlib --prefix=`pwd`/dist --openssldir=. $CONFIGURE_ARCH -fPIC' \
|| exit 1
sed -i.old 's/^CNF_CPPFLAGS=.*/CNF_CPPFLAGS=/' Makefile
sed -i.old 's/^CNF_CFLAGS=.*/CNF_CFLAGS=/' Makefile
sed -i.old 's/^CNF_CXXFLAGS=.*/CNF_CXXFLAGS=/' Makefile
sed -i.old 's/^CNF_LDFLAGS=.*/CNF_LDFLAGS=/' Makefile
sed -i.old 's/^SHLIB_VERSION_NUMBER=.*/SHLIB_VERSION_NUMBER=sdl.1.so/' Makefile
if [ "$ARCH" = armeabi-v7a ]; then
sed -i.old 's/-DPOLY1305_ASM //' Makefile
sed -i.old 's@crypto/poly1305/poly1305-armv4.S @@' Makefile
sed -i.old 's@crypto/poly1305/poly1305-armv4.o @@' Makefile
fi
env LDFLAGS="-shared -landroid -llog" \
CFLAGS="$NO_ASM" \
../../setCrossEnvironment-$ARCH.sh \
sh -c '
export PATH=`pwd`:`dirname $CC`:$PATH
make -j8' \
|| exit 1
cd ../..
rm -rf lib/$ARCH
mkdir -p lib/$ARCH
cp build/$ARCH/libcrypto.so.sdl.1.so lib/${ARCH}/libcrypto.so.sdl.1.so || exit 1
cp build/$ARCH/libssl.so.sdl.1.so lib/${ARCH}/libssl.so.sdl.1.so || exit 1
}
if $PARALLEL; then
PIDS=""
for ARCH in $ARCH_LIST; do
build $ARCH &
PIDS="$PIDS $!"
done
for PID in $PIDS; do
wait $PID || exit 1
done
else
for ARCH in $ARCH_LIST; do
build $ARCH || exit 1
done
fi
FIRSTARCH=`echo $ARCH_LIST | sed 's/ .*//'`
rm -rf include
echo "cp -r -L build/$FIRSTARCH/include ./"
cp -r -L build/$FIRSTARCH/include ./ || exit 1
patch -p1 < opensslconf.h.patch || exit 1
rm -rf build

View File

@@ -0,0 +1,20 @@
diff -u -r armeabi-v7a-old/Configurations/15-android.conf armeabi-v7a/Configurations/15-android.conf
--- armeabi-v7a-old/Configurations/15-android.conf 2021-02-16 17:24:01.000000000 +0200
+++ armeabi-v7a/Configurations/15-android.conf 2021-03-12 23:18:14.799128642 +0200
@@ -8,12 +8,12 @@
my $android_ndk = {};
my %triplet = (
- arm => "arm-linux-androideabi",
- arm64 => "aarch64-linux-android",
+ arm => "armv7a-linux-androideabi19",
+ arm64 => "aarch64-linux-android21",
mips => "mipsel-linux-android",
mips64 => "mips64el-linux-android",
- x86 => "i686-linux-android",
- x86_64 => "x86_64-linux-android",
+ x86 => "i686-linux-android19",
+ x86_64 => "x86_64-linux-android21",
);
sub android_ndk {

Binary file not shown.

View File

@@ -0,0 +1,37 @@
diff -u -r arm64-v8a-old/include/crypto/bn_conf.h arm64-v8a/include/crypto/bn_conf.h
--- arm64-v8a-old/include/crypto/bn_conf.h 2021-03-12 23:45:55.475710837 +0200
+++ arm64-v8a/include/crypto/bn_conf.h 2021-03-13 00:52:09.517668615 +0200
@@ -21,8 +21,13 @@
/* Should we define BN_DIV2W here? */
/* Only one for the following should be defined */
-#define SIXTY_FOUR_BIT_LONG
+#undef SIXTY_FOUR_BIT_LONG
#undef SIXTY_FOUR_BIT
#undef THIRTY_TWO_BIT
+#ifdef __LP64__
+#define SIXTY_FOUR_BIT_LONG
+#else
+#define THIRTY_TWO_BIT
+#endif
#endif
diff -u -r arm64-v8a-old/include/openssl/opensslconf.h arm64-v8a/include/openssl/opensslconf.h
--- arm64-v8a-old/include/openssl/opensslconf.h 2021-03-12 23:45:55.475710837 +0200
+++ arm64-v8a/include/openssl/opensslconf.h 2021-03-13 00:53:06.261987869 +0200
@@ -188,9 +188,14 @@
#if !defined(OPENSSL_SYS_UEFI)
# undef BN_LLONG
/* Only one for the following should be defined */
-# define SIXTY_FOUR_BIT_LONG
+# undef SIXTY_FOUR_BIT_LONG
# undef SIXTY_FOUR_BIT
# undef THIRTY_TWO_BIT
+# ifdef __LP64__
+# define SIXTY_FOUR_BIT_LONG
+# else
+# define THIRTY_TWO_BIT
+# endif
#endif
#define RC4_INT unsigned char

View File

@@ -0,0 +1,88 @@
#!/bin/sh
IFS='
'
NDK=`which ndk-build`
NDK=`dirname $NDK`
if uname -s | grep -i "linux" > /dev/null ; then
MYARCH=linux-$(arch)
NDK=`readlink -f $NDK`
elif uname -s | grep -i "darwin" > /dev/null ; then
MYARCH=darwin-x86_64
elif uname -s | grep -i "windows" > /dev/null ; then
MYARCH=windows-x86_64
fi
#echo NDK $NDK
[ -z "$NDK_TOOLCHAIN_VERSION" ] && NDK_TOOLCHAIN_VERSION=4.9
LOCAL_PATH=`dirname $0`
if which realpath > /dev/null ; then
LOCAL_PATH=`realpath $LOCAL_PATH`
else
LOCAL_PATH=`cd $LOCAL_PATH && pwd`
fi
ARCH=arm64-v8a
GCCPREFIX=aarch64-linux-android
APILEVEL=21
CFLAGS="
-g
-ffunction-sections
-fdata-sections
-funwind-tables
-fstack-protector-strong
-no-canonical-prefixes
-Wformat
-Werror=format-security
-Oz
-DNDEBUG
-fPIC
$CFLAGS"
CFLAGS="`echo $CFLAGS | tr '\n' ' '`"
LDFLAGS="
-fPIC
-g
-ffunction-sections
-fdata-sections
-Wl,--gc-sections
-funwind-tables
-fstack-protector-strong
-no-canonical-prefixes
-Oz
-Wl,--build-id
-Wl,--warn-shared-textrel
-Wl,--fatal-warnings
-Wl,--no-undefined
-Wl,-z,noexecstack
-Qunused-arguments
-Wl,-z,relro
-Wl,-z,now
-latomic
-lm
$LDFLAGS"
LDFLAGS="`echo $LDFLAGS | tr '\n' ' '`"
CC="$NDK/toolchains/llvm/prebuilt/$MYARCH/bin/$GCCPREFIX$APILEVEL-clang"
CXX="$NDK/toolchains/llvm/prebuilt/$MYARCH/bin/$GCCPREFIX$APILEVEL-clang++"
CPP="$CC -E $CFLAGS"
env \
CFLAGS="$CFLAGS" \
CXXFLAGS="$CXXFLAGS $CFLAGS -frtti -fexceptions" \
LDFLAGS="$LDFLAGS" \
CC="$CC" \
CXX="$CXX" \
RANLIB="$NDK/toolchains/llvm/prebuilt/$MYARCH/bin/llvm-ranlib" \
LD="$CXX" \
AR="$NDK/toolchains/llvm/prebuilt/$MYARCH/bin/llvm-ar" \
CPP="$CPP" \
NM="$NDK/toolchains/llvm/prebuilt/$MYARCH/bin/llvm-nm" \
AS="$NDK/toolchains/llvm/prebuilt/$MYARCH/bin/$GCCPREFIX-as" \
STRIP="$NDK/toolchains/llvm/prebuilt/$MYARCH/bin/llvm-strip" \
"$@"

View File

@@ -0,0 +1,95 @@
#!/bin/sh
IFS='
'
NDK=`which ndk-build`
NDK=`dirname $NDK`
if uname -s | grep -i "linux" > /dev/null ; then
MYARCH=linux-$(arch)
NDK=`readlink -f $NDK`
elif uname -s | grep -i "darwin" > /dev/null ; then
MYARCH=darwin-x86_64
elif uname -s | grep -i "windows" > /dev/null ; then
MYARCH=windows-x86_64
fi
#echo NDK $NDK
[ -z "$NDK_TOOLCHAIN_VERSION" ] && NDK_TOOLCHAIN_VERSION=4.9
LOCAL_PATH=`dirname $0`
if which realpath > /dev/null ; then
LOCAL_PATH=`realpath $LOCAL_PATH`
else
LOCAL_PATH=`cd $LOCAL_PATH && pwd`
fi
ARCH=armeabi-v7a
GCCPREFIX=armv7a-linux-androideabi
BINUTILSPREFIX=arm-linux-androideabi
APILEVEL=19
CFLAGS="
-g
-ffunction-sections
-fdata-sections
-funwind-tables
-fstack-protector-strong
-no-canonical-prefixes
-mthumb
-Wformat
-Werror=format-security
-Oz
-DNDEBUG
-fPIC
$CFLAGS"
CFLAGS="`echo $CFLAGS | tr '\n' ' '`"
LDFLAGS="
-fPIC
-g
-ffunction-sections
-fdata-sections
-Wl,--gc-sections
-funwind-tables
-fstack-protector-strong
-no-canonical-prefixes
-mthumb
-Wformat
-Werror=format-security
-Oz
-DNDEBUG
-Wl,--build-id
-Wl,--warn-shared-textrel
-Wl,--fatal-warnings
-Wl,--no-undefined
-Wl,-z,noexecstack
-Qunused-arguments
-Wl,-z,relro
-Wl,-z,now
-latomic
-lm
-ldl
$LDFLAGS"
LDFLAGS="`echo $LDFLAGS | tr '\n' ' '`"
CC="$NDK/toolchains/llvm/prebuilt/$MYARCH/bin/$GCCPREFIX$APILEVEL-clang"
CXX="$NDK/toolchains/llvm/prebuilt/$MYARCH/bin/$GCCPREFIX$APILEVEL-clang++"
CPP="$CC -E $CFLAGS"
env \
CFLAGS="$CFLAGS" \
CXXFLAGS="$CXXFLAGS $CFLAGS -frtti -fexceptions" \
LDFLAGS="$LDFLAGS" \
CC="$CC" \
CXX="$CXX" \
RANLIB="$NDK/toolchains/llvm/prebuilt/$MYARCH/bin/llvm-ranlib" \
LD="$CXX" \
AR="$NDK/toolchains/llvm/prebuilt/$MYARCH/bin/llvm-ar" \
CPP="$CPP" \
NM="$NDK/toolchains/llvm/prebuilt/$MYARCH/bin/llvm-nm" \
AS="$NDK/toolchains/llvm/prebuilt/$MYARCH/bin/$BINUTILSPREFIX-as" \
STRIP="$NDK/toolchains/llvm/prebuilt/$MYARCH/bin/llvm-strip" \
"$@"

View File

@@ -0,0 +1,92 @@
#!/bin/sh
IFS='
'
NDK=`which ndk-build`
NDK=`dirname $NDK`
if uname -s | grep -i "linux" > /dev/null ; then
MYARCH=linux-$(arch)
NDK=`readlink -f $NDK`
elif uname -s | grep -i "darwin" > /dev/null ; then
MYARCH=darwin-x86_64
elif uname -s | grep -i "windows" > /dev/null ; then
MYARCH=windows-x86_64
fi
#echo NDK $NDK
[ -z "$NDK_TOOLCHAIN_VERSION" ] && NDK_TOOLCHAIN_VERSION=4.9
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
GCCPREFIX=i686-linux-android
APILEVEL=19
CFLAGS="
-g
-ffunction-sections
-funwind-tables
-fdata-sections
-fstack-protector-strong
-no-canonical-prefixes
-Wformat
-Werror=format-security
-Oz
-DNDEBUG
-fPIC
$CFLAGS"
CFLAGS="`echo $CFLAGS | tr '\n' ' '`"
LDFLAGS="
-fPIC
-g
-ffunction-sections
-fdata-sections
-Wl,--gc-sections
-funwind-tables
-fstack-protector-strong
-no-canonical-prefixes
-Wformat
-Werror=format-security
-Oz
-DNDEBUG
-Wl,--build-id
-Wl,--warn-shared-textrel
-Wl,--fatal-warnings
-Wl,--no-undefined
-Wl,-z,noexecstack
-Qunused-arguments
-Wl,-z,relro
-Wl,-z,now
-latomic
-lm
$LDFLAGS
"
LDFLAGS="`echo $LDFLAGS | tr '\n' ' '`"
CC="$NDK/toolchains/llvm/prebuilt/$MYARCH/bin/$GCCPREFIX$APILEVEL-clang"
CXX="$NDK/toolchains/llvm/prebuilt/$MYARCH/bin/$GCCPREFIX$APILEVEL-clang++"
CPP="$CC -E $CFLAGS"
env \
CFLAGS="$CFLAGS" \
CXXFLAGS="$CXXFLAGS $CFLAGS -frtti -fexceptions" \
LDFLAGS="$LDFLAGS" \
CC="$CC" \
CXX="$CXX" \
RANLIB="$NDK/toolchains/llvm/prebuilt/$MYARCH/bin/llvm-ranlib" \
LD="$CXX" \
AR="$NDK/toolchains/llvm/prebuilt/$MYARCH/bin/llvm-ar" \
CPP="$CPP" \
NM="$NDK/toolchains/llvm/prebuilt/$MYARCH/bin/llvm-nm" \
AS="$NDK/toolchains/llvm/prebuilt/$MYARCH/bin/$GCCPREFIX-as" \
STRIP="$NDK/toolchains/llvm/prebuilt/$MYARCH/bin/llvm-strip" \
"$@"

View File

@@ -0,0 +1,92 @@
#!/bin/sh
IFS='
'
NDK=`which ndk-build`
NDK=`dirname $NDK`
if uname -s | grep -i "linux" > /dev/null ; then
MYARCH=linux-$(arch)
NDK=`readlink -f $NDK`
elif uname -s | grep -i "darwin" > /dev/null ; then
MYARCH=darwin-x86_64
elif uname -s | grep -i "windows" > /dev/null ; then
MYARCH=windows-x86_64
fi
#echo NDK $NDK
[ -z "$NDK_TOOLCHAIN_VERSION" ] && NDK_TOOLCHAIN_VERSION=4.9
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
GCCPREFIX=x86_64-linux-android
APILEVEL=21
CFLAGS="
-g
-ffunction-sections
-fdata-sections
-funwind-tables
-fstack-protector-strong
-no-canonical-prefixes
-Wformat
-Werror=format-security
-Oz
-DNDEBUG
-fPIC
$CFLAGS"
CFLAGS="`echo $CFLAGS | tr '\n' ' '`"
LDFLAGS="
-fPIC
-g
-ffunction-sections
-fdata-sections
-Wl,--gc-sections
-funwind-tables
-fstack-protector-strong
-no-canonical-prefixes
-Wformat
-Werror=format-security
-Oz
-DNDEBUG
-Wl,--build-id
-Wl,--warn-shared-textrel
-Wl,--fatal-warnings
-Wl,--no-undefined
-Wl,-z,noexecstack
-Qunused-arguments
-Wl,-z,relro
-Wl,-z,now
-latomic
-lm
$LDFLAGS
"
LDFLAGS="`echo $LDFLAGS | tr '\n' ' '`"
CC="$NDK/toolchains/llvm/prebuilt/$MYARCH/bin/$GCCPREFIX$APILEVEL-clang"
CXX="$NDK/toolchains/llvm/prebuilt/$MYARCH/bin/$GCCPREFIX$APILEVEL-clang++"
CPP="$CC -E $CFLAGS"
env \
CFLAGS="$CFLAGS" \
CXXFLAGS="$CXXFLAGS $CFLAGS -frtti -fexceptions" \
LDFLAGS="$LDFLAGS" \
CC="$CC" \
CXX="$CXX" \
RANLIB="$NDK/toolchains/llvm/prebuilt/$MYARCH/bin/llvm-ranlib" \
LD="$CXX" \
AR="$NDK/toolchains/llvm/prebuilt/$MYARCH/bin/llvm-ar" \
CPP="$CPP" \
NM="$NDK/toolchains/llvm/prebuilt/$MYARCH/bin/llvm-nm" \
AS="$NDK/toolchains/llvm/prebuilt/$MYARCH/bin/$GCCPREFIX-as" \
STRIP="$NDK/toolchains/llvm/prebuilt/$MYARCH/bin/llvm-strip" \
"$@"