logo

bootstrap-initrd

Linux initrd to bootstrap from a small binary seed git clone https://anongit.hacktivis.me/git/bootstrap-initrd.git/
commit: 5f6678eae7f6b7cd533197d6eba2fd13de378552
parent caf2ba1aec84c87911731418f9224f0efa3cc5aa
Author: Haelwenn (lanodan) Monnier <contact@hacktivis.me>
Date:   Mon, 13 Oct 2025 07:11:07 +0200

extras/iproute2: switch to custom meson.build

Diffstat:

Mextras-build-all.sh5++---
Mextras/iproute2.sh32+++++++++++++-------------------
Aextras/iproute2/meson.build35+++++++++++++++++++++++++++++++++++
Mmake-root.sh6++++--
4 files changed, 54 insertions(+), 24 deletions(-)

diff --git a/extras-build-all.sh b/extras-build-all.sh @@ -13,11 +13,10 @@ set -ex /extras/pkgconf.sh /extras/muon-stage2.sh # libpkgconf +/extras/iproute2.sh # muon-stage2 + /extras/tiny-curl.sh /extras/git.sh # muon-stage2 tiny-curl /extras/make.sh - -/extras/iproute2.sh # make pkgconf - diff --git a/extras/iproute2.sh b/extras/iproute2.sh @@ -6,30 +6,24 @@ die() { exit 1 } -# With pdpmake-2.0.3: -# pdpmake: don't know how to make %.c -# Needs support for `.EXPORT_ALL_VARIABLES:` -command -v make || die "Run /extras/make.sh" - -command -v pkg-config || die "Run /extras/pkgconf-lite.sh" +command -v muon || die "Run /extras/muon-stage2.sh" cd /extras/iproute2-*/ -./configure --prefix /usr +{ + printf 'man_man8 = [' + printf "'%s', " man/man8/*.8 + printf ']\n' +} > man/man8/meson.build -# tc(1) requires flex (or at least a lex with -o) -# -maxdepth 1 is unsupported by both sbase and heirloom find(1) -printf '%s\n' \ - '/SUBDIRS=/s;tc ;;' \ - '/iproute2 -maxdepth 1/s;install;\# install;' \ - w q | ed Makefile +export CC_LD=$CC -# Requires static_assert which is guarded behind C11 -export CFLAGS="${CFLAGS} -std=c11" +muon setup \ + -Dbuildtype=debugoptimized \ + -Dprefix=/usr \ + build || die -unset MAKE -make clean -make HOSTCC=$CC -make install +muon -C build samu +muon -C build install cd - diff --git a/extras/iproute2/meson.build b/extras/iproute2/meson.build @@ -0,0 +1,35 @@ +# version needs to be in sync with include/version.h +# C11 for static_assert +project('iproute2', 'c', version: '6.16.0', default_options: 'c_std=c11') + +subdir('man/man8') + +# meson-format-array bridge/*.c +bridge_src = ['bridge/bridge.c', 'bridge/fdb.c', 'bridge/link.c', 'bridge/mdb.c', 'bridge/monitor.c', 'bridge/mst.c', 'bridge/vlan.c', 'bridge/vni.c'] + +# ip/*.c excluding ip/static-syms.c ip/rtmon.c +ip_src = ['ip/ip.c', 'ip/ip6tunnel.c', 'ip/ipaddress.c', 'ip/ipaddrlabel.c', 'ip/ipfou.c', 'ip/ipila.c', 'ip/ipioam6.c', 'ip/ipl2tp.c', 'ip/iplink.c', 'ip/iplink_amt.c', 'ip/iplink_bareudp.c', 'ip/iplink_batadv.c', 'ip/iplink_bond.c', 'ip/iplink_bond_slave.c', 'ip/iplink_bridge.c', 'ip/iplink_bridge_slave.c', 'ip/iplink_can.c', 'ip/iplink_dsa.c', 'ip/iplink_dummy.c', 'ip/iplink_geneve.c', 'ip/iplink_gtp.c', 'ip/iplink_hsr.c', 'ip/iplink_ifb.c', 'ip/iplink_ipoib.c', 'ip/iplink_ipvlan.c', 'ip/iplink_macvlan.c', 'ip/iplink_netdevsim.c', 'ip/iplink_netkit.c', 'ip/iplink_nlmon.c', 'ip/iplink_rmnet.c', 'ip/iplink_team.c', 'ip/iplink_vcan.c', 'ip/iplink_virt_wifi.c', 'ip/iplink_vlan.c', 'ip/iplink_vrf.c', 'ip/iplink_vxcan.c', 'ip/iplink_vxlan.c', 'ip/iplink_wwan.c', 'ip/iplink_xdp.c', 'ip/iplink_xstats.c', 'ip/ipmacsec.c', 'ip/ipmaddr.c', 'ip/ipmonitor.c', 'ip/ipmptcp.c', 'ip/ipmroute.c', 'ip/ipneigh.c', 'ip/ipnetconf.c', 'ip/ipnetns.c', 'ip/ipnexthop.c', 'ip/ipntable.c', 'ip/ipprefix.c', 'ip/iproute.c', 'ip/iproute_lwtunnel.c', 'ip/iprule.c', 'ip/ipseg6.c', 'ip/ipstats.c', 'ip/iptoken.c', 'ip/iptunnel.c', 'ip/iptuntap.c', 'ip/ipvrf.c', 'ip/ipxfrm.c', 'ip/link_gre.c', 'ip/link_gre6.c', 'ip/link_ip6tnl.c', 'ip/link_iptnl.c', 'ip/link_veth.c', 'ip/link_vti.c', 'ip/link_vti6.c', 'ip/link_xfrm.c', 'ip/rtm_map.c', 'ip/tcp_metrics.c', 'ip/tunnel.c', 'ip/xfrm_monitor.c', 'ip/xfrm_policy.c', 'ip/xfrm_state.c'] + +# == lib == +# Loosely based on lib/Makefile +libnetlink_src = ['lib/libgenl.c', 'lib/libnetlink.c'] + +libutil_src = ['lib/utils.c', 'lib/utils_math.c', 'lib/rt_names.c', 'lib/ll_map.c', 'lib/ll_types.c', 'lib/ll_proto.c', 'lib/ll_addr.c', 'lib/inet_proto.c', 'lib/namespace.c', 'lib/json_writer.c', 'lib/json_print.c', 'lib/json_print_math.c', 'lib/names.c', 'lib/color.c', 'lib/bpf_legacy.c', 'lib/bpf_glue.c', 'lib/exec.c', 'lib/fs.c', 'lib/cg_map.c', 'lib/ppp_proto.c'] +libutil_src += [ 'lib/selinux.c' ] + +libaddlib_src = [ 'lib/ax25_ntop.c', 'lib/rose_ntop.c', 'lib/mpls_ntop.c', 'lib/mpls_pton.c', 'lib/netrom_ntop.c' ] + +# ====== + +# Note: libmnl uses autotools so not including it +add_project_arguments('-std=c11', '-D _GNU_SOURCE', '-D HAVE_SETNS', '-D HAVE_HANDLE_AT', '-D CONF_COLOR=COLOR_OPT_AUTO', language: 'c') + +inc = include_directories('./include/', './include/uapi', './misc/') +# All in the same target as they pretty much all use it anyway +libnetlink = static_library('libnetlink', libnetlink_src, libutil_src, libaddlib_src, build_by_default: false, install: false, include_directories: inc) + +executable('ip', ip_src, link_with: [libnetlink], install: true, include_directories: inc) +executable('rtmon', 'ip/rtmon.c', link_with: [libnetlink], install: true, include_directories: inc) +executable('bridge', bridge_src, link_with: [libnetlink], install: true, include_directories: inc) +# TODO: ss (requires yacc) +install_man(man_man8) diff --git a/make-root.sh b/make-root.sh @@ -55,8 +55,8 @@ extra_local_files=" extras/tiny-curl.sh extras/usign.sh " -WORKDIR="$(dirname "$0")" -WORKDIR="$(realpath "$WORKDIR")" +dir0=$(dirname "$0") +WORKDIR=$(realpath "$dir0") . "$WORKDIR/common.sh" @@ -126,6 +126,8 @@ if ! test "${EXCLUDE_EXTRAS:+y}" = "y"; then # config.status: error: cannot find input file: `po/Makefile.in.in' #rm -r ./extras/make-*/po || die + cp "${WORKDIR}"/extras/iproute2/meson.build ./extras/iproute2-*/ || die + mkdir -p ./distfiles for i in $extra_distfiles do