On Tue, 24 Aug 2021 19:01:33 -0400 ori@eigenstate.org wrote: > Thanks for the ping -- it looks fine with a quick skim, > and I'll try to look closer in the next few days. Chatted with ori yesterday. He had some good ideas with simplifying $NOMK and $DIRS generation. TODO: init.c doesn't really belong in cmd/ and should probably be moved to /sys/src/boot/ since it complicates cmd/mkfile. That will be a separate patch. Thanks, Amavect From: Amavect Date: Sat, 28 Aug 2021 13:15:02 +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. $DIRS regexp is simplified, simplifing $NOMK. $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 61f37abf576a02c7f1e3561cfaba3c0457f55c9d 5fb0b83b0ca45b5830227f0c82af3a7696ad1acc --- a/sys/src/cmd/mkfile Fri Aug 27 09:13:11 2021 +++ b/sys/src/cmd/mkfile Sat Aug 28 08:15:02 2021 @@ -1,137 +1,74 @@ $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