I'm pinging this patch again, wondering if there is interest. Thanks Amavect From: Amavect Date: Sat, 21 Aug 2021 18:41:01 +0000 Subject: [PATCH] cmd/mkfile: major cleanup Target generation is revised, split into $YTARG and $TARG. $PROGS is inlined to the cmd target. %.cpus is added to allow chaining: mk all.cpus $POWERLESS is added, since dtracy doesn't build yet on ppc. $cpuobjtype is replaced with cp's recipe for copying itself on $cputype. $APEDIRS is removed. The none target is renamed to usage, since it prints out usage. The ape target is removed. The dirs target is replaced by all.dirs %.directories is replaced by %.dirs The all target serializes directories after cmds to match the install target recipe. All regexp rules are replaced with nonregexp versions for clarity. The &:n: rule is removed. Just build the $O.$cmd file. .y files now build .c files, not .tab.c files, and remove (bc|units|mpc|pc).c:R: All safeinstall rules are removed. The cleanfiles rule is renamed to cleancmds and simplified. %.clean is removed. Just use mk cleancmds. The install rule serializes cp and yacc before building anything else, avoiding races. The installall recipe is simplified with the install.cpus prereq. %.installall is removed. Just use mk $cmd.install.cpus The $O.cj, %.update, and compilers rules are removed. --- diff 8c796bf8b9c10a0845717c47af908e47dfe14482 0e7549936b6b628ff6d1600628726f316d5301d2 --- a/sys/src/cmd/mkfile Thu Aug 19 23:07:37 2021 +++ b/sys/src/cmd/mkfile Sat Aug 21 13:41:01 2021 @@ -1,137 +1,75 @@ $target -$BIN/%: $O.% $cpuobjtype._cp - ./$cpuobjtype._cp $O.$stem $BIN/$stem +%.cpus:V: + for(objtype in $CPUS) mk $MKFLAGS $stem -%.directories:V: +%.dirs:V: for(i in $DIRS) @{ cd $i echo mk $i mk $MKFLAGS $stem } -clean:V: cleanfiles clean.directories - -nuke:V: cleanfiles nuke.directories - -directories:V: install.directories +cmds:V: $O.cp $O.yacc ${TARG:%=$O.%} -cleanfiles:V: - rm -f [$OS].out *.[$OS] y.tab.? y.debug y.output [$OS].$TARG [$OS].units.tab $TARG bc.c bc.tab.h units.tab.h units.c mpc.c mpc.tab.h [$OS]._cp +all:V: cmds + mk $MKFLAGS all.dirs -%.clean:V: - rm -f [$OS].$stem $stem.[$OS] +%.install:V: $BIN/% -install:V: - test -e $cpuobjtype._cp || cp /bin/cp $cpuobjtype._cp +install:V: cp.install + mk $MKFLAGS yacc.install mk $MKFLAGS $TARG.install - mk $MKFLAGS directories - -installall:V: - for(objtype in $CPUS) - mk $MKFLAGS install - -%.installall: %.c - test -e $cpuobjtype._cp || cp /bin/cp $cpuobjtype._cp - for (objtype in $CPUS) { - rfork e - mk $stem.install & - } - wait - rm -f $stem.[$OS] y.tab.? $stem.tab.? y.debug y.output [$OS].$stem bc.c bc.tab.h units.c mpc.c - -%.acid: %.$O $HFILES - $CC $CFLAGS -a $stem.c >$target + mk $MKFLAGS install.dirs -(bc|units|mpc|pc).c:R: \1.tab.c - mv $stem1.tab.c $stem1.c +installall:V: install.cpus -$BIN/init: $O.init - cp $prereq /$objtype/init +cleancmds:V: + rm -f *.[$OS] [$OS].* y.tab.? y.debug y.output $YTARG.c *.tab.h -$O.cj: cj.$O - $LD $LDFLAGS -o $O.cj cj.$O /$objtype/lib/libjpg.a +clean:V: cleancmds clean.dirs -%.update:V: - update $stem.c /386/bin/$stem - -compilers:V: - for(i in ?c) - if(! ~ $i cc rc) @{ - cd $i - mk clean - objtype=$cputype mk install - mk clean - } - for(i in ?c) - if(! ~ $i cc rc) @{ - cd $i - mk clean - mk installall - mk clean - } +nuke:V: cleancmds nuke.dirs + rm -f *.acid