getpkg/dropshell-tool/build_openssl.sh
2025-05-28 20:03:34 +12:00

78 lines
2.5 KiB
Bash
Executable File

#!/bin/bash
set -e
OPENSSL_VERSION=3.5.1
SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
BUILD_DIR="${SCRIPT_DIR}/build"
MUSL_CROSS_DIR="$HOME/.musl-cross"
mkdir -p "$BUILD_DIR"
# Find all installed musl toolchains
TOOLCHAINS=()
for tc in "$MUSL_CROSS_DIR"/*-linux-musl-cross; do
[ -d "$tc" ] || continue
arch=$(basename "$tc" | sed 's/-linux-musl-cross//')
TOOLCHAINS+=("$arch")
done
if [ ${#TOOLCHAINS[@]} -eq 0 ]; then
echo "No musl toolchains found in $MUSL_CROSS_DIR. Exiting."
exit 1
fi
echo "Found musl toolchains: ${TOOLCHAINS[*]}"
for ARCH in "${TOOLCHAINS[@]}"; do
echo "==============================="
echo "Checking OpenSSL for $ARCH..."
echo "==============================="
if [ "$ARCH" = "x86_64" ]; then
MUSL_PREFIX="$MUSL_CROSS_DIR/x86_64-linux-musl-cross"
OPENSSL_TARGET=linux-x86_64
elif [ "$ARCH" = "aarch64" ]; then
MUSL_PREFIX="$MUSL_CROSS_DIR/aarch64-linux-musl-cross"
OPENSSL_TARGET=linux-aarch64
else
# Try to guess OpenSSL target for other musl toolchains
OPENSSL_TARGET="linux-$ARCH"
MUSL_PREFIX="$MUSL_CROSS_DIR/${ARCH}-linux-musl-cross"
fi
SYSROOT="$MUSL_PREFIX/${ARCH}-linux-musl/sysroot"
CC="$MUSL_PREFIX/bin/${ARCH}-linux-musl-gcc"
AR="$MUSL_PREFIX/bin/${ARCH}-linux-musl-ar"
RANLIB="$MUSL_PREFIX/bin/${ARCH}-linux-musl-ranlib"
if [ -f "$SYSROOT/usr/lib/libssl.a" ]; then
echo "libssl.a already exists for $ARCH at $SYSROOT/usr/lib/libssl.a, skipping build."
echo
continue
fi
cd "$BUILD_DIR"
if [ ! -d "openssl-${OPENSSL_VERSION}" ]; then
if [ ! -f "openssl-${OPENSSL_VERSION}.tar.gz" ]; then
wget "https://www.openssl.org/source/openssl-${OPENSSL_VERSION}.tar.gz"
fi
tar xf "openssl-${OPENSSL_VERSION}.tar.gz"
fi
cd "openssl-${OPENSSL_VERSION}"
# Clean previous build for this arch
make clean || true
echo "Configuring for $ARCH with sysroot $SYSROOT..."
CC="$CC" AR="$AR" RANLIB="$RANLIB" ./Configure "$OPENSSL_TARGET" no-shared --prefix="$SYSROOT/usr"
echo "Building..."
make -j"$(nproc)"
echo "Installing to $SYSROOT/usr ..."
make install_sw
cd "$BUILD_DIR"
echo "Done for $ARCH."
echo
# Remove build dir for next arch to avoid cross contamination
rm -rf "openssl-${OPENSSL_VERSION}"
tar xf "openssl-${OPENSSL_VERSION}.tar.gz"
done
echo "OpenSSL built and installed for all detected musl toolchains."