#!/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."