'Generic Commit'
Some checks failed
dropshell-build / build (push) Failing after 1m30s

This commit is contained in:
Your Name 2025-06-02 15:59:16 +12:00
parent 22a109e4b4
commit d3c80d6d9d
2 changed files with 60 additions and 91 deletions

View File

@ -51,23 +51,21 @@ function centerlittletitle() {
}
function set_current_arch() {
local FULLARCH="$1"
export FULLARCH="$1"
# e.g. aarch64-linux-musl-cross
# ARCH=aarch64
# ARCH_OS=linux-musl-cross
# ARCH_FULL_PREFIX=aarch64-linux-musl-cross
# FULLARCH=aarch64-linux-musl-cross
# ARCH_SHORT_PREFIX=aarch64-linux-musl
# MUSL_PATH=/home/jde/.musl-cross/aarch64-linux-musl-cross
# arch should just be x86_64 or aarch64
export ARCH="${FULLARCH%%-*}"
export ARCH_OS="${FULLARCH#*-}"
export ARCH_FULL_PREFIX="${FULLARCH}"
export ARCH_SHORT_PREFIX="${FULLARCH%-*}"
export MUSL_PATH="${MUSL_ROOT_PATH}/${FULLARCH}"
echo "ARCH: ${ARCH}"
echo "ARCH_OS: ${ARCH_OS}"
echo "ARCH_FULL_PREFIX: ${ARCH_FULL_PREFIX}"
echo "ARCH_SHORT_PREFIX: ${ARCH_SHORT_PREFIX}"
echo "MUSL_PATH: ${MUSL_PATH}"
}

View File

@ -4,6 +4,14 @@ set -euo pipefail
SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )"
# list of toolchains to install
TOOLCHAIN_LIST=(
"aarch64-linux-musl-cross"
"x86_64-linux-musl-cross"
"x86_64-linux-musl-native"
)
# If the user is not root, use sudo
SUDOCMD=""
[ "$EUID" -eq 0 ] || SUDOCMD="sudo"
@ -160,97 +168,66 @@ function install_headers() {
# OpenSSL for musl cross toolchains
#----------------------------------------------------------------------------------------------------------
toolchain_to_openssl_target() {
case "$1" in
aarch64-linux-musl-*) echo "linux-aarch64" ;;
x86_64-linux-musl-*) echo "linux-x86_64" ;;
*) _die "unsupported toolchain: $1" ;;
esac
}
function install_openssl_musl() {
OPENSSL_VERSION=3.5.0
SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
BUILD_DIR="${SCRIPT_DIR}/build"
MUSL_CROSS_DIR="$HOME/.musl-cross"
PREVDIR="$PWD"
# set the ARCH, ARCH_OS, ARCH_FULL_PREFIX, ARCH_SHORT_PREFIX, and MUSL_PATH variables
# e.g. aarch64-linux-musl-cross
# ARCH=aarch64
# ARCH_OS=linux-musl-cross
# ARCH_SHORT_PREFIX=aarch64-linux-musl
# MUSL_PATH=/home/jde/.musl-cross/aarch64-linux-musl-cross
# arch should just be x86_64 or aarch64
local FULLARCH="${1:-}"
[ -n "$FULLARCH" ] || _die "No toolchain provided"
local ARCH="${FULLARCH%%-*}"
#local ARCH_OS="${FULLARCH#*-}"
local ARCH_SHORT_PREFIX="${FULLARCH%-*}"
local MUSL_PATH="${MUSL_ROOT_PATH}/${FULLARCH}"
[ -d "$MUSL_PATH" ] || _die "MUSL_PATH does not exist: $MUSL_PATH"
local BUILD_DIR="${SCRIPT_DIR}/build.$ARCH"
mkdir -p "$BUILD_DIR"
# Helper: compare versions (returns 0 if $1 >= $2)
version_ge() {
[ "$1" = "$2" ] && return 0
[ "$(printf '%s\n' "$1" "$2" | sort -V | head -n1)" = "$2" ]
}
# Find all installed musl cross 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 cross toolchains found in $MUSL_CROSS_DIR. Exiting."
exit 1
fi
echo "Found musl cross 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"
local OPENSSL_TARGET
OPENSSL_TARGET=$(toolchain_to_openssl_target "$FULLARCH")
local SYSROOT="$MUSL_PATH/${ARCH_SHORT_PREFIX}/sysroot"
local CC="$MUSL_PATH/bin/${ARCH_SHORT_PREFIX}-gcc"
local AR="$MUSL_PATH/bin/${ARCH_SHORT_PREFIX}-ar"
local RANLIB="$MUSL_PATH/bin/${ARCH_SHORT_PREFIX}-ranlib"
DEST_PATH="$SYSROOT/usr/lib/libssl.a"
if [ -f "$DEST_PATH" ]; then
echo "OpenSSL $ARCH is already installed"
continue
fi
SKIP_BUILD=0
if [ -f "$SYSROOT/usr/lib/libssl.a" ]; then
# Try to extract version from opensslv.h
OPENSSLV_H="$SYSROOT/usr/include/openssl/opensslv.h"
if [ -f "$OPENSSLV_H" ]; then
INSTALLED_VERSION=$(grep '# *define *OPENSSL_VERSION_TEXT' "$OPENSSLV_H" | sed -E 's/.*OpenSSL ([0-9.]+)[^ ]*.*/\1/')
if [ -n "$INSTALLED_VERSION" ]; then
echo "Found installed OpenSSL version: $INSTALLED_VERSION"
if version_ge "$INSTALLED_VERSION" "$OPENSSL_VERSION"; then
echo "OpenSSL $INSTALLED_VERSION is up-to-date (>= $OPENSSL_VERSION), skipping build for $ARCH."
SKIP_BUILD=1
else
echo "OpenSSL $INSTALLED_VERSION is older than $OPENSSL_VERSION, will rebuild."
fi
else
echo "Could not determine installed OpenSSL version, will rebuild."
fi
else
echo "No opensslv.h found, will rebuild."
fi
else
echo "No libssl.a found, will rebuild."
fi
if [ "$SKIP_BUILD" -eq 1 ]; then
echo "Skipping build for $ARCH."
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"
wget "https://www.openssl.org/source/openssl-${OPENSSL_VERSION}.tar.gz" || _die "Failed to download openssl-${OPENSSL_VERSION}.tar.gz"
fi
tar xf "openssl-${OPENSSL_VERSION}.tar.gz"
tar xf "openssl-${OPENSSL_VERSION}.tar.gz" || _die "Failed to extract openssl-${OPENSSL_VERSION}.tar.gz"
fi
cd "openssl-${OPENSSL_VERSION}"
cd "openssl-${OPENSSL_VERSION}" || _die "Failed to cd to openssl-${OPENSSL_VERSION}"
echo "----------------------------------------------"
echo "Configuring for $ARCH with sysroot $SYSROOT..."
@ -259,13 +236,12 @@ function install_openssl_musl() {
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
fi
cd "$PREVDIR"
echo "OpenSSL built and installed for all detected musl toolchains."
}
@ -319,14 +295,11 @@ function install_musl() {
TMPDIR=$(mktemp -d)
trap 'rm -rf "$TMPDIR"' EXIT
TOOLCHAIN_LIST=(
"aarch64-linux-musl-cross"
"x86_64-linux-musl-cross"
)
for TOOLCHAIN in "${TOOLCHAIN_LIST[@]}"; do
install_musl_cross "$TOOLCHAIN"
check_path "$TOOLCHAIN"
install_openssl_musl "$TOOLCHAIN"
done
# Clean up
@ -355,8 +328,6 @@ function main() {
install_musl
install_openssl_musl
output_version
echo "Done"