#!/bin/rc -e # sysbuild: build the system (userspace + kernel) # options: # -6 build amd64 only # (with -k: install only amd64 kernel) # -8 build 386 only # (with -k: install only 386 kernel) # -k install kernel(s) and bootloader to 9fat without building; # run "sysbuild -[6|8]k" after building if the kernels are # to be installed to 9fat rfork e flagfmt='6,8,k' args='' targets=(386 amd64) fn usage{ aux/usage exit usage } fn fatal{ echo $* >[1=2] exit $"* } fn info{ echo $* >[1=2] } fn mkstub{ cd / . /sys/lib/rootstub } fn mkuser{ objtype=$1 cd /sys/src mk install mk clean } fn mkmandoc{ cd /sys/man mk cd /sys/doc mk mk html } fn mkkernel{ objtype=$1 switch($objtype){ case 386 cd /sys/src/9/pc case amd64 cd /sys/src/9/pc64 case * fatal invalid kernel objtype } mk install } fn mountfat{ bind -b '#S' /dev 9fs 9fat } fn bootfat{ src=/386/9bootfat dst=/n/9fat/9bootfat if(! test -e $src) fatal '9bootfat doesn''t exist' if(cmp $src $dst) info $src and $dst are the same if not{ if(test -e $dst){ bak=$dst.`{timestamp $dst} info copying $dst to $bak cp -x $dst $bak } info copying $src to $dst rm -f $dst cp $src $dst chmod +al $dst # defrag magic if(! cmp $src $dst) fatal copying 9bootfat failed } status='' } fn kernel2fat{ objtype=$1 switch($objtype){ case 386 kfile=9pc case amd64 kfile=9pc64 case * fatal invalid kernel objtype } src=/$objtype/$kfile dst=/n/9fat/$kfile if(! test -e $src) fatal 'kernel file doesn''t exist' if(cmp $src $dst) info $src and $dst are the same if not{ if(test -e $dst){ bak=$dst.`{timestamp $dst} info copying $dst to $bak cp -x $dst $bak } info copying $src to $dst cp $src $dst if(! cmp $src $dst) fatal copying kernel failed } status='' } fn timestamp{ ls -l $1 | awk 'BEGIN { OFS="_" } { print $7, $8, $9 }' } if(! ifs=() eval `{aux/getflags $*}) usage if(~ $#flag6 1){ info amd64 only targets=amd64 } if(~ $#flag8 1){ info 386 only targets=386 } if(~ $#flagk 1){ info 'installing kernel(s) and bootloader' mountfat bootfat for(t in $targets) kernel2fat $t info 'install done; edit /n/9fat/plan9.ini if needed' exit } info building mkstub for(t in $targets) mkuser $t mkmandoc for(t in $targets) mkkernel $t o='' if(~ $#flag6 1) o=6 if(~ $#flag8 1) o=8 info 'build done; run sysbuild -'$o'k to install the kernel(s) and bootloader to 9fat if needed'