'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() { function set_current_arch() {
local FULLARCH="$1" export FULLARCH="$1"
# e.g. aarch64-linux-musl-cross # e.g. aarch64-linux-musl-cross
# ARCH=aarch64 # ARCH=aarch64
# ARCH_OS=linux-musl-cross # ARCH_OS=linux-musl-cross
# ARCH_FULL_PREFIX=aarch64-linux-musl-cross # FULLARCH=aarch64-linux-musl-cross
# ARCH_SHORT_PREFIX=aarch64-linux-musl # ARCH_SHORT_PREFIX=aarch64-linux-musl
# MUSL_PATH=/home/jde/.musl-cross/aarch64-linux-musl-cross # MUSL_PATH=/home/jde/.musl-cross/aarch64-linux-musl-cross
# arch should just be x86_64 or aarch64 # arch should just be x86_64 or aarch64
export ARCH="${FULLARCH%%-*}" export ARCH="${FULLARCH%%-*}"
export ARCH_OS="${FULLARCH#*-}" export ARCH_OS="${FULLARCH#*-}"
export ARCH_FULL_PREFIX="${FULLARCH}"
export ARCH_SHORT_PREFIX="${FULLARCH%-*}" export ARCH_SHORT_PREFIX="${FULLARCH%-*}"
export MUSL_PATH="${MUSL_ROOT_PATH}/${FULLARCH}" export MUSL_PATH="${MUSL_ROOT_PATH}/${FULLARCH}"
echo "ARCH: ${ARCH}" echo "ARCH: ${ARCH}"
echo "ARCH_OS: ${ARCH_OS}" echo "ARCH_OS: ${ARCH_OS}"
echo "ARCH_FULL_PREFIX: ${ARCH_FULL_PREFIX}"
echo "ARCH_SHORT_PREFIX: ${ARCH_SHORT_PREFIX}" echo "ARCH_SHORT_PREFIX: ${ARCH_SHORT_PREFIX}"
echo "MUSL_PATH: ${MUSL_PATH}" echo "MUSL_PATH: ${MUSL_PATH}"
} }

View File

@ -4,6 +4,14 @@ set -euo pipefail
SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )" 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 # If the user is not root, use sudo
SUDOCMD="" SUDOCMD=""
[ "$EUID" -eq 0 ] || SUDOCMD="sudo" [ "$EUID" -eq 0 ] || SUDOCMD="sudo"
@ -160,97 +168,66 @@ function install_headers() {
# OpenSSL for musl cross toolchains # 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() { function install_openssl_musl() {
OPENSSL_VERSION=3.5.0 OPENSSL_VERSION=3.5.0
SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" PREVDIR="$PWD"
BUILD_DIR="${SCRIPT_DIR}/build"
MUSL_CROSS_DIR="$HOME/.musl-cross" # 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" mkdir -p "$BUILD_DIR"
# Helper: compare versions (returns 0 if $1 >= $2) # Helper: compare versions (returns 0 if $1 >= $2)
version_ge() { version_ge() {
[ "$1" = "$2" ] && return 0 [ "$1" = "$2" ] && return 0
[ "$(printf '%s\n' "$1" "$2" | sort -V | head -n1)" = "$2" ] [ "$(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 "==============================="
echo "Checking OpenSSL for $ARCH..." echo "Checking OpenSSL for $ARCH..."
echo "===============================" echo "==============================="
if [ "$ARCH" = "x86_64" ]; then local OPENSSL_TARGET
MUSL_PREFIX="$MUSL_CROSS_DIR/x86_64-linux-musl-cross" OPENSSL_TARGET=$(toolchain_to_openssl_target "$FULLARCH")
OPENSSL_TARGET=linux-x86_64 local SYSROOT="$MUSL_PATH/${ARCH_SHORT_PREFIX}/sysroot"
elif [ "$ARCH" = "aarch64" ]; then local CC="$MUSL_PATH/bin/${ARCH_SHORT_PREFIX}-gcc"
MUSL_PREFIX="$MUSL_CROSS_DIR/aarch64-linux-musl-cross" local AR="$MUSL_PATH/bin/${ARCH_SHORT_PREFIX}-ar"
OPENSSL_TARGET=linux-aarch64 local RANLIB="$MUSL_PATH/bin/${ARCH_SHORT_PREFIX}-ranlib"
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"
DEST_PATH="$SYSROOT/usr/lib/libssl.a" DEST_PATH="$SYSROOT/usr/lib/libssl.a"
if [ -f "$DEST_PATH" ]; then if [ -f "$DEST_PATH" ]; then
echo "OpenSSL $ARCH is already installed" 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 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" cd "$BUILD_DIR"
if [ ! -d "openssl-${OPENSSL_VERSION}" ]; then if [ ! -d "openssl-${OPENSSL_VERSION}" ]; then
if [ ! -f "openssl-${OPENSSL_VERSION}.tar.gz" ]; 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 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 fi
cd "openssl-${OPENSSL_VERSION}" cd "openssl-${OPENSSL_VERSION}" || _die "Failed to cd to openssl-${OPENSSL_VERSION}"
echo "----------------------------------------------" echo "----------------------------------------------"
echo "Configuring for $ARCH with sysroot $SYSROOT..." echo "Configuring for $ARCH with sysroot $SYSROOT..."
@ -259,13 +236,12 @@ function install_openssl_musl() {
make -j"$(nproc)" make -j"$(nproc)"
echo "Installing to $SYSROOT/usr ..." echo "Installing to $SYSROOT/usr ..."
make install_sw make install_sw
cd "$BUILD_DIR"
echo "Done for $ARCH." echo "Done for $ARCH."
echo echo
# Remove build dir for next arch to avoid cross contamination fi
rm -rf "openssl-${OPENSSL_VERSION}"
tar xf "openssl-${OPENSSL_VERSION}.tar.gz" cd "$PREVDIR"
done
echo "OpenSSL built and installed for all detected musl toolchains." echo "OpenSSL built and installed for all detected musl toolchains."
} }
@ -319,14 +295,11 @@ function install_musl() {
TMPDIR=$(mktemp -d) TMPDIR=$(mktemp -d)
trap 'rm -rf "$TMPDIR"' EXIT trap 'rm -rf "$TMPDIR"' EXIT
TOOLCHAIN_LIST=(
"aarch64-linux-musl-cross"
"x86_64-linux-musl-cross"
)
for TOOLCHAIN in "${TOOLCHAIN_LIST[@]}"; do for TOOLCHAIN in "${TOOLCHAIN_LIST[@]}"; do
install_musl_cross "$TOOLCHAIN" install_musl_cross "$TOOLCHAIN"
check_path "$TOOLCHAIN" check_path "$TOOLCHAIN"
install_openssl_musl "$TOOLCHAIN"
done done
# Clean up # Clean up
@ -355,8 +328,6 @@ function main() {
install_musl install_musl
install_openssl_musl
output_version output_version
echo "Done" echo "Done"