linux-qubasis

linux oasis port as a qubes template

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

commit 52a7a2045a1cab9323e08b286518b61ccdc9542a
parent ac73c24ac30814e8801b0029b02b450d206d9abd
Author: Jul <jul@9o.is>
Date:   Fri, 29 Aug 2025 20:07:39 +0800

refactor _ninja_compile

  - define $objdir in ninja files
  - allow header dependencies for individual lib/exe

Diffstat:
Mninja/functions.sh | 103+++++++++++++++++++++++++++++++++++++------------------------------------------
1 file changed, 48 insertions(+), 55 deletions(-)

diff --git a/ninja/functions.sh b/ninja/functions.sh @@ -210,6 +210,7 @@ _ninja_initglobals() { pkg/*|tpl/*) _ninja_type=${1%%/*} _ninja_gendir=$1 + _ninja_name=${1#*/} if [ ${_ninja_host-} ]; then _ninja_file=host/${1#*/}.ninja @@ -228,7 +229,6 @@ _ninja_initglobals() { _ninja_buffer_objs= _ninja_buffer_exe= _ninja_buffer_lib= - _ninja_buffer_d= _ninja_buffer_deps= _ninja_buffer_headers= _ninja_buffer_sync= @@ -253,7 +253,7 @@ _ninja_setv_init() { rootdir='$rootdir' pkgdir='$pkgdir' yaccdir='$yaccdir' - objdir='$outdir/_obj' + objdir='$objdir' unset -f host @@ -262,6 +262,7 @@ _ninja_setv_init() { setv dir $basedir/$gendir setv outdir $builddir/$gendir setv srcdir $dir/repo + setv objdir $outdir/_obj ;; tpl) setv dir $basedir/$gendir @@ -319,40 +320,44 @@ _ninja_fspec_file() { } _ninja_compile() { + _srcs= _objs= + _libs= + _deps= + _hdrs= + for _src in $*; do case $_src in - *.[cS]) - case $_src in - \$srcdir*) _obj=$objdir/${_src#\$srcdir/}.o;; - \$yaccdir*) _obj=$objdir/${_src#\$yaccdir/}.o;; - *) _obj=$objdir/$_src.o;; - esac - - if _ninja_has $_obj $_ninja_buffer_objs; then - _objs="$_objs $_obj" - continue - fi - - if [ "$_ninja_buffer_deps" ]; then - _src="$_src || \$tgtdir/deps" - fi - - build cc $_obj $_src - _objs="$_objs $_obj" - _ninja_buffer_objs="$_ninja_buffer_objs $_obj" - ;; - *.[ao]) - _objs="$_objs $_src" - ;; - *.a.d) - _ninja_buffer_d="$_ninja_buffer_d $_src" - ;; - *) - error unknown file to compile: $_src - ;; + *.[cS]) _srcs="$_srcs $_src";; + *.o) _objs="$_objs $_src";; + *.a) _libs="$_libs $_src";; + *.a.d) _deps="$_deps $_src";; + *.h) _hdrs="$_hdrs $_src";; + *) error unknown file to compile: $_src;; esac done + + for _src in $_srcs; do + case $_src in + \$*) _obj=$objdir/${_src#\$*/}.o;; + *) _obj=$objdir/$_src.o;; + esac + + if _ninja_has $_obj $_ninja_buffer_objs; then + _objs="$_objs $_obj" + continue + fi + + if [ "$_ninja_buffer_deps" ]; then + _src="$_src || \$tgtdir/deps $_hdrs" + elif [ "$_hdrs" ]; then + _src="$_src || $_hdrs" + fi + + build cc $_obj $_src + _objs="$_objs $_obj" + _ninja_buffer_objs="$_ninja_buffer_objs $_obj" + done } _ninja_flush_exe() { @@ -365,21 +370,17 @@ _ninja_flush_exe() { _out=$1; shift _ninja_compile $* - if [ "$_objs" ]; then - if [ "$_ninja_buffer_d" ]; then - _rspfile=$outdir/_rsp/${_out##*/} + if [ "$_objs" ] && [ "$_deps" ]; then + _rspfile=$outdir/_rsp/${_out##*/} - build link $_out $_objs '|' $_rspfile - bind ldlibs @$_rspfile - build awk $_rspfile $_ninja_buffer_d '|' $basedir/ninja/rsp.awk - bind expr '-f $basedir/ninja/rsp.awk' - else - build link $_out $_objs - fi - fi + build awk $_rspfile $_deps '|' $basedir/ninja/rsp.awk + bind expr '-f $basedir/ninja/rsp.awk' - _ninja_buffer_exe= - _ninja_buffer_d= + build link $_out $_objs $_libs '|' $_rspfile + bind ldlibs @$_rspfile + elif [ "$_objs" ]; then + build link $_out $_objs $_libs + fi } _ninja_flush_lib() { @@ -390,21 +391,12 @@ _ninja_flush_lib() { set -- $_ninja_buffer_lib _out=$1; shift - _srcs= _ninja_compile $* - for _src in $*; do - case $_src in - *.a) _srcs="$_srcs $_src" - esac - done - if [ "$_objs" ]; then - build ar $_out $_objs - build rsp $_out.d $_out $_srcs + build ar $_out $_objs $_libs + build rsp $_out.d $_out $_libs fi - - _ninja_buffer_lib= } _ninja_flush_subninjas() { @@ -419,6 +411,7 @@ _ninja_flush_subninjas() { setv outdir $builddir/host setv tgtdir $gendir/host + setv objdir $outdir/_obj/$_ninja_name setv ar ar setv as as setv cc cc