From 1e8c3cd52307a1675a9246dbb829f8acfed0d5fe Mon Sep 17 00:00:00 2001 From: Your Name Date: Mon, 2 Jun 2025 21:55:57 +1200 Subject: [PATCH] 'Generic Commit' --- Dockerfile | 13 ++++++++ build.sh | 3 ++ src/build.aarch64/libunwind | 1 + src/dropshell-build | 39 ++++++++++++++++------- src/dropshell-build-install-requirements | 40 ++++++++++++++++++++++++ 5 files changed, 85 insertions(+), 11 deletions(-) create mode 160000 src/build.aarch64/libunwind diff --git a/Dockerfile b/Dockerfile index 4b2854e..7e9095e 100644 --- a/Dockerfile +++ b/Dockerfile @@ -18,6 +18,19 @@ RUN apt-get update && \ apt-get install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin && \ rm -rf /var/lib/apt/lists/* +RUN mkdir -p "$HOME/.musl-cross" + +RUN wget -nc -O "$HOME/.musl-cross/x86_64-linux-musl-cross.tgz" "https://getbin.xyz/x86_64-linux-musl-cross.tgz:latest" && \ + tar -C "$HOME/.musl-cross" -xvf "$HOME/.musl-cross/x86_64-linux-musl-cross.tgz" && \ + rm "$HOME/.musl-cross/x86_64-linux-musl-cross.tgz" + +RUN wget -nc -O "$HOME/.musl-cross/x86_64-linux-musl-native.tgz" "https://getbin.xyz/x86_64-linux-musl-native.tgz:latest" && \ + tar -C "$HOME/.musl-cross" -xvf "$HOME/.musl-cross/x86_64-linux-musl-native.tgz" && \ + rm "$HOME/.musl-cross/x86_64-linux-musl-native.tgz" + +RUN wget -nc -O "$HOME/.musl-cross/aarch64-linux-musl-cross.tgz" "https://getbin.xyz/aarch64-linux-musl-cross.tgz:latest" && \ + tar -C "$HOME/.musl-cross" -xvf "$HOME/.musl-cross/aarch64-linux-musl-cross.tgz" && \ + rm "$HOME/.musl-cross/aarch64-linux-musl-cross.tgz" COPY --chmod=0755 ./src/* /usr/local/bin/ diff --git a/build.sh b/build.sh index faafdae..67e8be8 100755 --- a/build.sh +++ b/build.sh @@ -4,5 +4,8 @@ set -euo pipefail SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )" +rm -rf "${SCRIPT_DIR}/src/build" +rm -rf "${SCRIPT_DIR}/src/build.*" + docker build -t gitea.jde.nz/public/dropshell-build:test -f "${SCRIPT_DIR}/Dockerfile" "${SCRIPT_DIR}" diff --git a/src/build.aarch64/libunwind b/src/build.aarch64/libunwind new file mode 160000 index 0000000..f75061c --- /dev/null +++ b/src/build.aarch64/libunwind @@ -0,0 +1 @@ +Subproject commit f75061c3b6499ba3b616a04d913c0a4a3c79cbe2 diff --git a/src/dropshell-build b/src/dropshell-build index 9f05c32..350db43 100755 --- a/src/dropshell-build +++ b/src/dropshell-build @@ -79,6 +79,22 @@ trap 'cd "${OLD_PWD}"' EXIT # BUILD # ---------------------------------------------------------------------------------------------------------- +# function create_openssl_cmake_vars() { +# mkdir -p "$1/cmake/OpenSSL" +# cat < "$1/cmake/OpenSSL/OpenSSLConfig.cmake" +# add_library(OpenSSL::SSL STATIC IMPORTED) +# set_target_properties(OpenSSL::SSL PROPERTIES +# IMPORTED_LOCATION "${OPENSSL_LIBDIR}/libssl.a" +# INTERFACE_INCLUDE_DIRECTORIES "${ARCH_SYSROOT}/usr/include" +# ) +# add_library(OpenSSL::Crypto STATIC IMPORTED) +# set_target_properties(OpenSSL::Crypto PROPERTIES +# IMPORTED_LOCATION "${OPENSSL_LIBDIR}/libcrypto.a" +# INTERFACE_INCLUDE_DIRECTORIES "${ARCH_SYSROOT}/usr/include" +# ) +# EOF +# } + function build_arch() { local CMAKE_DIR="$1" @@ -118,14 +134,15 @@ function build_arch() { export CMAKE_MODULE_LINKER_FLAGS="-fuse-ld=mold" export CMAKE_SHARED_LINKER_FLAGS="-fuse-ld=mold" - if [ -d "${ARCH_SYSROOT}/usr/lib64" ]; then - export OPENSSL_LIBDIR="${ARCH_SYSROOT}/usr/lib64" - elif [ -d "${ARCH_SYSROOT}/usr/lib" ]; then - export OPENSSL_LIBDIR="${ARCH_SYSROOT}/usr/lib" - else - echo "Neither lib nor lib64 found in ${ARCH_SYSROOT}/usr" - exit 1 - fi + # if [ -d "${ARCH_SYSROOT}/usr/lib64" ]; then + # export OPENSSL_LIBDIR="${ARCH_SYSROOT}/usr/lib64" + # elif [ -d "${ARCH_SYSROOT}/usr/lib" ]; then + # export OPENSSL_LIBDIR="${ARCH_SYSROOT}/usr/lib" + # else + # echo "Neither lib nor lib64 found in ${ARCH_SYSROOT}/usr" + # exit 1 + # fi + #create_openssl_cmake_vars "$OPENSSL_LIBDIR" cmake -B "${ARCH_BUILD_DIR}" -G Ninja \ -DCMAKE_BUILD_TYPE="${CMAKE_BUILD_TYPE}" \ @@ -136,9 +153,9 @@ function build_arch() { -DCMAKE_CXX_COMPILER_TARGET="${ARCH}-linux-musl" \ -DCMAKE_C_FLAGS="${CFLAGS}" \ -DCMAKE_CXX_FLAGS="${CXXFLAGS}" \ - -DCMAKE_FIND_ROOT_PATH="${SYSROOT}" \ - -DCMAKE_SYSROOT="${SYSROOT}" \ - -DCMAKE_FIND_ROOT_PATH="${SYSROOT}" + -DCMAKE_FIND_ROOT_PATH="${ARCH_SYSROOT}" \ + -DCMAKE_SYSROOT="${ARCH_SYSROOT}" \ + -DCMAKE_PREFIX_PATH="${ARCH_SYSROOT}/usr" cd "${ARCH_BUILD_DIR}" || exit 1 ninja -k0 -j"${JOBS}" diff --git a/src/dropshell-build-install-requirements b/src/dropshell-build-install-requirements index c1c7bed..88467fd 100755 --- a/src/dropshell-build-install-requirements +++ b/src/dropshell-build-install-requirements @@ -163,6 +163,43 @@ function install_packages() { # fi # } +#---------------------------------------------------------------------------------------------------------- +# unwind for musl cross toolchains +#---------------------------------------------------------------------------------------------------------- + +function install_unwind_musl() { + local FULLARCH="$1" + local ARCH="${FULLARCH%%-*}" + local ARCH_SHORT_PREFIX="${FULLARCH%-*}" + local MUSL_PATH="${INSTALL_DIR}/${FULLARCH}" + [ -d "$MUSL_PATH" ] || _die "MUSL_PATH does not exist: $MUSL_PATH" + + local BUILD_DIR="${SCRIPT_DIR}/build.$ARCH" + PREVDIR="$PWD" + rm -rf "$BUILD_DIR" + mkdir -p "$BUILD_DIR" + cd "$BUILD_DIR" + + local SYSROOT="$MUSL_PATH/${ARCH_SHORT_PREFIX}/sysroot" + + LIBPATH="$MUSL_PATH/${ARCH_SHORT_PREFIX}/sysroot/usr/lib" + [ -d "$LIBPATH" ] || LIBPATH="$MUSL_PATH/${ARCH_SHORT_PREFIX}/sysroot/usr/lib64" + if [ -f "$LIBPATH/libunwind.a" ]; then + echo "Unwind $ARCH is already installed" + return + fi + + # download and install unwind + git clone https://github.com/libunwind/libunwind.git + cd libunwind + autoreconf -i + ./configure --enable-static --disable-minidebuginfo --disable-zlibdebuginfo + make -j + ${SUDOCMD:-} make install + + cd "$PREVDIR" + rm -rf "$BUILD_DIR" +} #---------------------------------------------------------------------------------------------------------- # OpenSSL for musl cross toolchains @@ -251,6 +288,8 @@ function install_openssl_musl() { echo fi + rm -rf "$BUILD_DIR" + cd "$PREVDIR" echo "OpenSSL built and installed for $FULLARCH" @@ -310,6 +349,7 @@ function install_musl() { check_path "$TOOLCHAIN" install_openssl_musl "$TOOLCHAIN" + install_unwind_musl "$TOOLCHAIN" done # Clean up