diff options
author | Amavect <amavect@gmail.com> | 2021-08-28 13:15:02 +0000 |
---|---|---|
committer | Ori Bernstein <ori@eigenstate.org> | 2021-08-28 13:15:02 +0000 |
commit | 485b334608910bbf6930a4f52ca946ba092fad04 (patch) | |
tree | 1068870e264c9013c62037f2774fa7ccbf8d2512 | |
parent | 1a444750d6c331f8b96a8df986fbb239dd20d293 (diff) |
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.
-rw-r--r-- | sys/src/cmd/mkfile | 147 |
1 files changed, 42 insertions, 105 deletions
diff --git a/sys/src/cmd/mkfile b/sys/src/cmd/mkfile index 08de8cc51..9310e6b76 100644 --- a/sys/src/cmd/mkfile +++ b/sys/src/cmd/mkfile @@ -1,137 +1,74 @@ </$objtype/mkfile -TARG=`{ls *.[cy] | sed '/\.tab\.c$/d;s/..$//'} +YTARG=`{ls | sed -n '/\.y$/s/\.y$//p'} +TARG=$YTARG `{ls | sed -n '/^cp\.c$/d; /^yacc\.c$/d; /\.c$/s/\.c$//p'} HFILES=/$objtype/include/u.h /sys/include/libc.h /sys/include/bio.h + BIN=/$objtype/bin -PROGS=${TARG:%=$O.%} LDFLAGS= YFLAGS=-d -NOTSYS=sml|dup|.+\..+ -PCONLY=|vmx -NOMK=$NOTSYS`{~ $objtype (386 amd64) || echo $PCONLY} - -cpuobjtype=`{sed -n 's/^O=//p' /$cputype/mkfile} -DIRS=`{echo */mkfile | sed 's,/mkfile *,\n,g' | grep -v '^('$NOMK')$'} -APEDIRS=bzip2 compress cvs eqn grap gs links-ape lp pic postscript spin \ - tex troff - -none:VQ: - echo usage: mk cmds, dirs, all, install, installall, '$O'.cmd, cmd.install, or cmd.installall - -cmds:V: $PROGS - -ape:V: $APE - for(i in $APEDIRS) @{ - cd $i - echo mk $i - mk $MKFLAGS all - } - -dirs:V: - for(i in cc $DIRS) @{ - cd $i - echo mk $i - mk $MKFLAGS all - } - -all:V: $PROGS dirs +PCONLY=vmx +POWERLESS=dtracy # until someone fixes the build for power +NOMK=`{~ $objtype (386 amd64) || echo $PCONLY} `{~ $objtype power && echo $POWERLESS} +DIRS=`{echo */mkfile | sed 's,/mkfile *,\n,g' | grep -v '-e^'^('' $NOMK)^'$'} -^([$OS])\.(.*):R: \2.\1 - $stem1^l $LDFLAGS -o $target $stem2.$stem1 +usage:VQ: + echo 'usage: mk all, all.cpus, cmds, $O.$cmd' + echo ' install, install.cpus, $cmd.install, $cmd.install.cpus' + echo ' clean, nuke' -.*\.[$OS]:R: $HFILES +%.c %.tab.h:D: %.y + yacc $YFLAGS -o $stem.c -s $stem $stem.y -(.*)\.([$OS])'$':R: \1.c - $stem2^c $CFLAGS $stem1.c +%.$O: $HFILES -&:n: $O.& - mv $O.$stem $stem +%.$O: %.c + $CC $CFLAGS $stem.c -%.tab.h %.tab.c:D: %.y - $YACC $YFLAGS -s $stem $prereq +$O.%: %.$O + $LD $LDFLAGS -o $target $stem.$O -%.install:V: $BIN/% +$BIN/%: $O.% + cp $O.$stem $target -$cpuobjtype._cp: /bin/cp - cp $prereq $target +$BIN/cp: $O.cp + `{if(~ $objtype $cputype) echo ./$O.cp; if not echo cp} $prereq $target -%.safeinstall: $O.% $cpuobjtype._cp - test -e $BIN/$stem && mv $BIN/$stem $BIN/_$stem - ./$cpuobjtype._cp $O.$stem $BIN/$stem +$BIN/init: $O.init # hack, install location is not target + cp $O.init /$objtype/init -%.safeinstallall: - for(objtype in $CPUS) - mk $stem.safeinstall - mk $stem.clean +%.acid: %.c $HFILES + $CC $CFLAGS -a $stem.c >$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 +cmds:V: $O.cp $O.yacc ${TARG:%=$O.%} -nuke:V: cleanfiles nuke.directories +all:V: cmds + mk $MKFLAGS all.dirs -directories:V: install.directories - -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 - -%.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 + mk $MKFLAGS install.dirs -installall:V: - for(objtype in $CPUS) - mk $MKFLAGS install +installall:V: install.cpus -%.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 +cleancmds:V: + rm -f *.[$OS] [$OS].* y.tab.? y.debug y.output $YTARG.c *.tab.h -%.acid: %.$O $HFILES - $CC $CFLAGS -a $stem.c >$target +clean:V: cleancmds clean.dirs -(bc|units|mpc|pc).c:R: \1.tab.c - mv $stem1.tab.c $stem1.c - -$BIN/init: $O.init - cp $prereq /$objtype/init - -$O.cj: cj.$O - $LD $LDFLAGS -o $O.cj cj.$O /$objtype/lib/libjpg.a - -%.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 |