[BPI-R4] Custom Build Keeps Failing at XDP-TOOLS

I am making a OpenWRT build for a BPI-R4 with a AsiaRF-7916. And i am running make distclean first to make sure the feeds are fresh. I am doing this on a raspi 4, so it is painfully slow. And extra painful when it fails. This is all being done on Debian GNU/Linux 12 (bookworm)

I have read this page, but it did not help me at all; https://github.com/openwrt/openwrt/issues/10201

Please see the full list of actions and the error result below. Am i doing something wrong? Does a solution for this exist? Can i exclude XDP-TOOLS all together? If yes, how?


I am installing all packages listed here for debian; https://openwrt.org/docs/guide-developer/toolchain/install-buildsystem

Plus any of these packages not on the above list (most are);

apt install build-essential ccache ecj fastjar file g++ gawk \
gettext git java-propose-classpath libelf-dev libncurses5-dev \
libncursesw5-dev libssl-dev unzip wget \
python3-distutils python3-setuptools rsync subversion swig time \
xsltproc zlib1g-dev gnutls-bin

Then to limit the possibility of timeouts through git;

git config --global http.postBuffer 1048576000
git config --global https.postBuffer 1048576000

And to begin the build process;

git clone https://git.openwrt.org/openwrt/openwrt.git
---
cd openwrt/
---
./scripts/feeds update -a
---
./scripts/feeds install -a
---
curl "https://downloads.openwrt.org/snapshots/targets/mediatek/filogic/config.buildinfo" > .config
---
make menuconfig # only change: `Target Profile: Bananapi BPi-R4`
---
make defconfig
---
make -j $(nproc) toolchain/{clean,install}
---
make -j $(nproc) target/linux/{prereq,clean,download,prepare}
---
make -j $(nproc) target/linux/compile
---
find build_dir/ -name .vermagic -exec cat {} \;
curl -s "https://downloads.openwrt.org/snapshots/targets/mediatek/filogic/openwrt-mediatek-filogic.manifest" \
    | sed -n 's/^kernel - .\+\(-\|~\)\([a-f0-9]\+\)\(-r[0-9]\+\)\?$/\2/p'

Then i add the list of config packages to the .config

printf '
CONFIG_PACKAGE_libcrypto=y
CONFIG_PACKAGE_openssl=y
CONFIG_PACKAGE_base-files=y
CONFIG_PACKAGE_busybox=y
CONFIG_PACKAGE_ca-bundle=y
CONFIG_PACKAGE_dnsmasq=y
CONFIG_PACKAGE_dropbear=y
CONFIG_PACKAGE_e2fsprogs=y
CONFIG_PACKAGE_f2fsck=y
CONFIG_PACKAGE_firewall4=y
CONFIG_PACKAGE_fitblk=y
CONFIG_PACKAGE_fstools=y
CONFIG_PACKAGE_kmod-crypto-hw-safexcel=y
CONFIG_PACKAGE_kmod-eeprom-at24=y
CONFIG_PACKAGE_kmod-gpio-button-hotplug=y
CONFIG_PACKAGE_kmod-hwmon-pwmfan=y
CONFIG_PACKAGE_kmod-i2c-mux-pca954x=y
CONFIG_PACKAGE_kmod-leds-gpio=y
CONFIG_PACKAGE_kmod-mt7915e=y
CONFIG_PACKAGE_kmod-mt7996-firmware=y
CONFIG_PACKAGE_kmod-nft-offload=y
CONFIG_PACKAGE_kmod-phy-aquantia=y
CONFIG_PACKAGE_kmod-rtc-pcf8563=y
CONFIG_PACKAGE_kmod-sfp=y
CONFIG_PACKAGE_kmod-usb3=y
CONFIG_PACKAGE_libc=y
CONFIG_PACKAGE_libgcc=y
CONFIG_PACKAGE_libustream-mbedtls=y
CONFIG_PACKAGE_logd=y
CONFIG_PACKAGE_luci=y
CONFIG_PACKAGE_mkf2fs=y
CONFIG_PACKAGE_mtd=y
CONFIG_PACKAGE_netifd=y
CONFIG_PACKAGE_nftables=y
CONFIG_PACKAGE_odhcp6c=y
CONFIG_PACKAGE_odhcpd-ipv6only=y
CONFIG_PACKAGE_opkg=y
CONFIG_PACKAGE_ppp=y
CONFIG_PACKAGE_ppp-mod-pppoe=y
CONFIG_PACKAGE_procd=y
CONFIG_PACKAGE_procd-seccomp=y
CONFIG_PACKAGE_procd-ujail=y
CONFIG_PACKAGE_uboot-envtools=y
CONFIG_PACKAGE_uci=y
CONFIG_PACKAGE_uclient-fetch=y
CONFIG_PACKAGE_urandom-seed=y
CONFIG_PACKAGE_urngd=y
CONFIG_PACKAGE_wpad-basic-mbedtls=y
CONFIG_PACKAGE_pciutils=y
CONFIG_PACKAGE_kmod-mt76=y
CONFIG_PACKAGE_kmod-mt76-core=y
CONFIG_PACKAGE_kmod-mt76-connac=y
CONFIG_PACKAGE_kmod-mt7915e=y
CONFIG_PACKAGE_kmod-mt7996e=y
CONFIG_PACKAGE_kmod-mt7996-firmware=y
CONFIG_PACKAGE_kmod-mt7915-firmware=y
CONFIG_PACKAGE_kmod-mt7916-firmware=y
' >> .config

And continue the build process;

# save customized `.config` for later builds:
./scripts/diffconfig.sh | awk '!seen[$0]++' > diffconfig
mv diffconfig .config
---
mkdir -p files/etc/uci-defaults
---
nano files/etc/uci-defaults/99-custom
(add whatever default uci boots settings i want, like static IP, gateway, mask, etc..)
chmod 0644 files/etc/uci-defaults/99-custom
---
make defconfig
---
make -j $(nproc) download

And now the part that ALWAYS fails;

make -j $(nproc) world

Here is the failure message;

    *ERROR: package/network/utils/xdp-tools failed to build.*
make -r world: build failed. Please re-run make with -j1 V=s or V=sc for a higher verbosity level to see what's going on
make: *** [/home/user/openwrt1/openwrt/include/toplevel.mk:233: world] Error 1

Then i execute with verbose options;

root@raspi4:/home/user/openwrt1/openwrt# make -j1 V=s $(nproc) world
make[2]: Entering directory '/home/user/openwrt1/openwrt/scripts/config'
make[2]: 'conf' is up to date.
make[2]: Leaving directory '/home/user/openwrt1/openwrt/scripts/config'
make[1]: Entering directory '/home/user/openwrt1/openwrt'
cd "/home/user/openwrt1/openwrt"; git log --format=%h -1 toolchain > /home/user/openwrt1/openwrt/tmp/.ver_check
cmp -s /home/user/openwrt1/openwrt/tmp/.ver_check /home/user/openwrt1/openwrt/staging_dir/toolchain-aarch64_cortex-a53_gcc-13.2.0_musl/stamp/.ver_che                                                                                                                          ck || { \
        rm -rf /home/user/openwrt1/openwrt/build_dir/target-aarch64_cortex-a53_musl /home/user/openwrt1/openwrt/staging_dir/target-aarch64_cortex-a53                                                                                                                          _musl /home/user/openwrt1/openwrt/staging_dir/toolchain-aarch64_cortex-a53_gcc-13.2.0_musl /home/user/openwrt1/openwrt/build_dir/toolchain-aarch64_co                                                                                                                          rtex-a53_gcc-13.2.0_musl; \
        mkdir -p /home/user/openwrt1/openwrt/staging_dir/toolchain-aarch64_cortex-a53_gcc-13.2.0_musl/stamp; \
        mv /home/user/openwrt1/openwrt/tmp/.ver_check /home/user/openwrt1/openwrt/staging_dir/toolchain-aarch64_cortex-a53_gcc-13.2.0_musl/stamp/.ver                                                                                                                          _check; \
}
make[1]: *** No rule to make target '4'.  Stop.
make[1]: Leaving directory '/home/user/openwrt1/openwrt'
make: *** [/home/user/openwrt1/openwrt/include/toplevel.mk:233: 4] Error 2

Why not compile on x86 host? As you noticed compile on arm is slow…

I can spin up a x86 hyper-v VM and give that a shot. Do you think that may help this issue?

At least it should be faster…

Wonder about your steps…normally only these are needed

https://wiki.fw-web.de/doku.php?id=en:bpi-r4:start#openwrt

Thank you for that! I don’t know how i missed that page. I’ll review and correct.