linux-qubasis

linux oasis port as a qubes template

git clone https://9o.is/git/linux-qubasis.git

commit b7497f9985e0affc1dfc939d06a6b7fa09fef244
parent a8aa2accd242ed0c502d85feda87b484141998be
Author: Jul <jul@9o.is>
Date:   Wed, 27 Aug 2025 20:38:02 +0800

refactor subninja function to host

Diffstat:
Mgen.sh | 1+
Mninja/fspec.sh | 2+-
Mninja/functions.sh | 81++++++++++++++++++++++++++++++++++++++++++++++++-------------------------------
Mninja/rules.ninja | 2+-
Mpkg/b3sum/gen.sh | 13+++----------
Mpkg/fspec-sync/gen.sh | 23+++++++----------------
Mpkg/netbsd-curses/gen.sh | 31+++++++++++++------------------
7 files changed, 75 insertions(+), 78 deletions(-)

diff --git a/gen.sh b/gen.sh @@ -4,6 +4,7 @@ setv builddir $BUILDDIR setv outdir $builddir setv ninjadir $builddir/ninja setv pkgdir $builddir/pkg +setv hostdir $builddir/host setv dir $basedir setv ar $TARGET_PLATFORM-ar diff --git a/ninja/fspec.sh b/ninja/fspec.sh @@ -10,7 +10,7 @@ case $type in reg) printf '%s\ntype=reg\nmode=%s\nsource=%s\n\n' \ "$path" "$mode" "$src" > $out.tmp - out/pkg/fspec-sync/host/fspec-hash <$out.tmp > $out + out/host/fspec-hash <$out.tmp > $out rm -f $out.tmp ;; sym) diff --git a/ninja/functions.sh b/ninja/functions.sh @@ -149,16 +149,6 @@ pkg() { _ninja_fspec_file $* } -set_host_platform() { - setv ar ar - setv as as - setv cc cc - setv ld ld - setv objcopy objcopy - setv cflags $HOST_CFLAGS - setv ldflags $HOST_LDFLAGS -} - subgen() { if [ "$_ninja_type" != 'root' ]; then local subgendir="$_ninja_gendir/" @@ -168,21 +158,6 @@ subgen() { _ninja_buffer_subgen="$_ninja_buffer_subgen $1" } -subninja() { - ( - _ninja_filesuffix="-$1" - _ninja_init "$_ninja_gendir" - - setv outdir $outdir/$1 - setv tgtdir $gendir/$1 - - eval $1 - _ninja_complete - ) - - printf 'subninja $ninjadir/%s.ninja\n' "$_ninja_gendir-$1" >> "$_ninja_writepath" -} - gen() { _ninja_init "$1" _ninja_setv_init "$1" @@ -208,7 +183,7 @@ _ninja_init() { local gendir=$1 _ninja_initglobals "$gendir" - mkdir -p "$_ninja_ninjadir"/${gendir%/*} + mkdir -p "${_ninja_writepath%/*}" printf '' > "$_ninja_writepath" } @@ -242,7 +217,12 @@ _ninja_initglobals() { pkg/*|tpl/*) _ninja_type="${gendir%%/*}" _ninja_gendir="$gendir" - _ninja_file=$gendir${_ninja_filesuffix-}.ninja + + if [ "${_ninja_host-}" ]; then + _ninja_file=host/${gendir#*/}.ninja + else + _ninja_file=$gendir.ninja + fi ;; *) printf "Error gen $_ninja_file: invalid gendir: %s\n" "$gendir" @@ -283,6 +263,7 @@ _ninja_setv_init() { basedir='$basedir' builddir='$builddir' ninjadir='$ninjadir' + hostdir='$hostdir' gendir='$gendir' tgtdir='$tgtdir' dir='$dir' @@ -291,6 +272,8 @@ _ninja_setv_init() { rootdir='$rootdir' objdir='$outdir/_objects' pkgdir='$pkgdir' + + unset -f host } _ninja_prefix() { @@ -443,12 +426,39 @@ _ninja_flush_subninjas() { for pkg in $_ninja_buffer_subgen; do printf 'subninja $ninjadir/%s.ninja\n' "$pkg" >> "$_ninja_writepath" done + + if [ ! "${_ninja_host-}" ] && command -v host >/dev/null 2>&1; then + local srcs="$( + _ninja_host='true' + _ninja_init "$_ninja_gendir" + + setv outdir $builddir/host + setv tgtdir $gendir/host + setv ar ar + setv as as + setv cc cc + setv ld ld + setv objcopy objcopy + setv cflags $HOST_CFLAGS + setv ldflags $HOST_LDFLAGS + + host + _ninja_complete + )" + + printf 'subninja $ninjadir/host/%s.ninja\n' "${_ninja_gendir#*/}" >> "$_ninja_writepath" + _ninja_buffer_sync="$_ninja_buffer_sync $srcs" + fi } _ninja_flush_build() { local subbuilds='' local pkg='' + if [ "${_ninja_host-}" ]; then + return + fi + for pkg in $_ninja_buffer_subgen; do subbuilds="$subbuilds \$tgtdir/$pkg/build" done @@ -464,6 +474,11 @@ _ninja_flush_sync() { local subsyncs='' local verfile="$_ninja_dir"/version + if [ "${_ninja_host-}" ]; then + printf "$_ninja_buffer_sync" + return + fi + if [ "$_ninja_type" != 'root' ]; then subsyncs='$outdir/_files/_version' fi @@ -485,10 +500,12 @@ _ninja_flush_sync() { build sync $outdir/_files/_version $gendir/version '|' $basedir/ninja/sync.sh - if [ "$_ninja_buffer_sync" ]; then - _ninja_dedup _ninja_buffer_sync "$_ninja_buffer_sync" - build phony "$_ninja_buffer_sync" $outdir/_files/_version + if [ ! "$_ninja_buffer_sync" ]; then + return fi + + _ninja_dedup _ninja_buffer_sync "$_ninja_buffer_sync" + build phony "$_ninja_buffer_sync" $outdir/_files/_version } _ninja_flush_deps() { @@ -519,7 +536,7 @@ _ninja_flush_headers() { } _ninja_flush_fspec() { - if [ "$_ninja_type" = 'root' ]; then + if [ "$_ninja_type" = 'root' ] || [ "${_ninja_host-}" ]; then return fi @@ -536,7 +553,7 @@ _ninja_flush_fspec() { src="${4-}" out="$outdir/_files/${path##*/}" - dep='| $basedir/ninja/fspec.sh $pkgdir/fspec-sync/host/fspec-hash' + dep='| $basedir/ninja/fspec.sh $hostdir/fspec-hash' if [ "$type" = 'reg' ]; then build fspec $out $outdir/${path##*/} $dep diff --git a/ninja/rules.ninja b/ninja/rules.ninja @@ -58,5 +58,5 @@ rule fspec description = FSPEC $out rule fspec-tar - command = $builddir/pkg/fspec-sync/host/fspec-tar <$in | zstd >$out + command = $hostdir/fspec-tar <$in | zstd >$out description = FSPEC-TAR $out diff --git a/pkg/b3sum/gen.sh b/pkg/b3sum/gen.sh @@ -3,19 +3,12 @@ cflags \ -D WITH_ASM host() { - set_host_platform - - compile blake3.c - compile blake3_dispatch.c - compile blake3_portable.c - lib libblake3.a \ - $objdir/blake3.c.o \ - $objdir/blake3_dispatch.c.o \ - $objdir/blake3_portable.c.o + blake3.c \ + blake3_dispatch.c \ + blake3_portable.c } -subninja host headers blake3.h if [ "$TARGET_ARCH" = "x86_64" ]; then diff --git a/pkg/fspec-sync/gen.sh b/pkg/fspec-sync/gen.sh @@ -5,37 +5,28 @@ cflags \ -Wno-sign-compare host() { - set_host_platform cflags -I $pkgdir/b3sum/include dep b3sum/headers - compile fatal.c - compile parse.c - compile reallocarray.c - compile fspec-hash.c - compile fspec-sort.c - compile fspec-tar.c - lib libcommon.a \ - $objdir/fatal.c.o \ - $objdir/parse.c.o \ - $objdir/reallocarray.c.o + fatal.c \ + parse.c \ + reallocarray.c exe fspec-hash \ - $objdir/fspec-hash.c.o \ + fspec-hash.c \ $outdir/libcommon.a \ - $pkgdir/b3sum/host/libblake3.a + $hostdir/libblake3.a exe fspec-sort \ - $objdir/fspec-sort.c.o \ + fspec-sort.c \ $outdir/libcommon.a exe fspec-tar \ - $objdir/fspec-tar.c.o \ + fspec-tar.c \ $outdir/libcommon.a } -subninja host dep b3sum/headers lib libcommon.a \ diff --git a/pkg/netbsd-curses/gen.sh b/pkg/netbsd-curses/gen.sh @@ -16,11 +16,14 @@ cflags \ -Wno-pedantic \ -Wno-type-limits -rule tic '$outdir/tools/tic $ticflags -o $out $in $terms' -rule nbperf 'TOOL_NBPERF=$outdir/tools/nbperf $in >$out' +rule tic '$hostdir/tic $ticflags -o $out $in $terms' +bind description 'TIC $out' + +rule nbperf 'TOOL_NBPERF=$hostdir/nbperf $in >$out' +bind description 'NBPERF $out' tic() { - build tic $outdir/$1 $srcdir/share/terminfo/terminfo '|' $outdir/tools/tic + build tic $outdir/$1 $srcdir/share/terminfo/terminfo '|' $hostdir/tic bind ticflags $2 if [ "${3-}" ]; then bind term $3 @@ -34,28 +37,22 @@ nbperf() { local out=$outdir/$2 local src=$srcdir/$3 - build nbperf $out $script $src '|' $script $outdir/tools/nbperf + build nbperf $out $script $src '|' $script $hostdir/nbperf sync $src dep $out } -tools() { - set_host_platform +host() { cflags \ -I $srcdir/compat \ -I $srcdir/lib/libterminfo - compile compat/cdbw.c - compile compat/mi_vector_hash.c - compile usr.bin/tic/tic.c - compile lib/libterminfo/compile.c - exe tic \ - $objdir/lib/libterminfo/compile.c.o \ - $objdir/compat/cdbw.c.o \ - $objdir/compat/mi_vector_hash.c.o \ - $objdir/usr.bin/tic/tic.c.o \ - $outdir/../deps/hash.c + lib/libterminfo/compile.c \ + compat/cdbw.c \ + compat/mi_vector_hash.c \ + usr.bin/tic/tic.c \ + $pkgdir/netbsd-curses/deps/hash.c exe nbperf \ usr.bin/nbperf/nbperf.c \ @@ -67,8 +64,6 @@ tools() { $objdir/compat/mi_vector_hash.c.o } -subninja tools - tic deps/compiled_terms.c -Sx dumb tic terminfo -x nbperf genhash deps/hash.c lib/libterminfo/term.h