build: Add step "Download tools and toolchain"

This commit is contained in:
remittor
2025-12-30 14:13:45 +03:00
parent f9ab8e3841
commit a775b82e5b

View File

@@ -222,6 +222,7 @@ jobs:
exit 41 exit 41
fi fi
echo "status=success" >> $GITHUB_OUTPUT echo "status=success" >> $GITHUB_OUTPUT
echo "FW_VER=$FW_VER" >> $GITHUB_ENV
echo "G_DEVICE_NAME=$G_DEVICE_NAME" >> $GITHUB_ENV echo "G_DEVICE_NAME=$G_DEVICE_NAME" >> $GITHUB_ENV
echo "G_BOARD_NAME=$G_BOARD_NAME" >> $GITHUB_ENV echo "G_BOARD_NAME=$G_BOARD_NAME" >> $GITHUB_ENV
echo "G_SUBTARGET_NAME=$G_SUBTARGET_NAME" >> $GITHUB_ENV echo "G_SUBTARGET_NAME=$G_SUBTARGET_NAME" >> $GITHUB_ENV
@@ -233,6 +234,79 @@ jobs:
cat $BUILD_ROOT/.config cat $BUILD_ROOT/.config
echo "========================" echo "========================"
- name: Download tools and toolchain
id: tools_download
if: steps.configure.outputs.status == 'success'
run: |
cd $BUILD_ROOT
G_TARGET_ARCH=$( grep -so '^CONFIG_TARGET_ARCH_PACKAGES=' .config | cut -d'"' -f2 )
echo "G_TARGET_ARCH=$G_TARGET_ARCH" >> $GITHUB_ENV
echo "OpenWrt version: $FW_VER"
SDK_URL_BASE="https://downloads.openwrt.org/releases/${FW_VER}/targets/${G_BOARD_NAME}/${G_SUBTARGET_NAME}"
echo "Searching SDK at $SDK_URL_BASE"
SDK_TARBALL=$( curl -s "$SDK_URL_BASE/" | grep -oE 'openwrt-sdk-[^"]+Linux-x86_64\.tar\.(xz|zst)' | head -n1 )
if [ -z "$SDK_TARBALL" ]; then
echo "ERROR: SDK not found for ${G_BOARD_NAME}/${G_SUBTARGET_NAME}"
exit 81
fi
echo "Found SDK: $SDK_TARBALL"
#curl -L --fail --retry 5 --retry-delay 5 --progress-bar -o "$SDK_TARBALL" "$SDK_URL_BASE/$SDK_TARBALL"
wget --progress=dot:mega "$SDK_URL_BASE/$SDK_TARBALL"
if [[ "$SDK_TARBALL" == *.tar.xz ]]; then
tar -xf "$SDK_TARBALL"
elif [[ "$SDK_TARBALL" == *.tar.zst ]]; then
tar -I zstd -xf "$SDK_TARBALL"
else
echo "Unknown archive format: $SDK_TARBALL"
exit 82
fi
SDK_DIR=$(tar -tf "$SDK_TARBALL" | head -n1 | cut -d/ -f1)
echo "Using SDK dir: $SDK_DIR"
rm -rf staging_dir
mv "$SDK_DIR/staging_dir" .
echo "========= staging_dir =========="
ls -l staging_dir
echo "================================"
#cp -a "$SDK_DIR"/toolchain/* toolchain/ 2>/dev/null || true
TOOLS_DIR=staging_dir/host
touch $TOOLS_DIR/.prepared
TOOLS_STAMP_DIR=$TOOLS_DIR/stamp
TOOLS_PKGS=$(
find tools/ -maxdepth 1 -mindepth 1 -type d | while read -r d; do
mk="$d/Makefile"
[ -f "$mk" ] || continue
awk -F':=' '
/^[[:space:]]*PKG_NAME[[:space:]]*:=/ {
v=$2
gsub(/\r/, "", v)
gsub(/^[[:space:]]+/, "", v)
gsub(/[[:space:]]+$/, "", v)
if (v != "") print v
}
' "$mk"
done | sort -u
)
mkdir -p "$TOOLS_STAMP_DIR"
echo "Found host tools packages: $TOOLS_PKGS"
for pkg in $TOOLS_PKGS; do
touch "$TOOLS_STAMP_DIR/.$pkg"_installed
done
TOOLCHAIN_DIR=$( find staging_dir -maxdepth 1 -type d -name "toolchain-*" )
echo "Found toolchain directory: $TOOLCHAIN_DIR"
#touch $TOOLCHAIN_DIR/.prepared
mkdir -p "$TOOLCHAIN_DIR/stamp"
touch $TOOLCHAIN_DIR/stamp/.binutils_installed
#touch $TOOLCHAIN_DIR/stamp/.fortify-headers_installed
touch $TOOLCHAIN_DIR/stamp/.gcc_final_installed
touch $TOOLCHAIN_DIR/stamp/.gcc_initial_installed
touch $TOOLCHAIN_DIR/stamp/.gdb_installed
#touch $TOOLCHAIN_DIR/stamp/.linux_installed
touch $TOOLCHAIN_DIR/stamp/.musl_installed
touch $TOOLCHAIN_DIR/stamp/.toolchain_compile
echo "Checking cross-compiler..."
find staging_dir -name '*gcc' | head -n 10
echo "status=success" >> $GITHUB_OUTPUT
- name: Build tools and toolchain - name: Build tools and toolchain
id: tools id: tools
if: steps.configure.outputs.status == 'success' if: steps.configure.outputs.status == 'success'
@@ -240,6 +314,7 @@ jobs:
cd $BUILD_ROOT cd $BUILD_ROOT
MAKE_JOBS=$(nproc) MAKE_JOBS=$(nproc)
echo "$MAKE_JOBS thread compile" echo "$MAKE_JOBS thread compile"
export CCACHE=1
make tools/install -j$MAKE_JOBS make tools/install -j$MAKE_JOBS
make toolchain/install -j$MAKE_JOBS make toolchain/install -j$MAKE_JOBS
echo "status=success" >> $GITHUB_OUTPUT echo "status=success" >> $GITHUB_OUTPUT
@@ -249,11 +324,11 @@ jobs:
if: steps.tools.outputs.status == 'success' if: steps.tools.outputs.status == 'success'
env: env:
TARGET: ${{ matrix.target }} TARGET: ${{ matrix.target }}
FW_VER: ${{ needs.check.outputs.fw_ver }}
run: | run: |
cd $BUILD_ROOT cd $BUILD_ROOT
MAKE_JOBS=$(nproc) MAKE_JOBS=$(nproc)
echo "$MAKE_JOBS thread compile" echo "$MAKE_JOBS thread compile"
export CCACHE=1
if [ "$FAKE_BUILD" != "true" -a "$TEST_BUILD" = "true" -a "$PACKAGE_DIR" != "" ]; then if [ "$FAKE_BUILD" != "true" -a "$TEST_BUILD" = "true" -a "$PACKAGE_DIR" != "" ]; then
make $PACKAGE_DIR/compile V=sc BUILD_LOG=1 make $PACKAGE_DIR/compile V=sc BUILD_LOG=1
exit 99 exit 99