[BACK]Return to build.sh CVS log [TXT][DIR] Up to [cvs.NetBSD.org] / src

Annotation of src/build.sh, Revision 1.78

1.67      thorpej     1: #! /usr/bin/env sh
1.78    ! lukem       2: #  $NetBSD: build.sh,v 1.77 2002/12/25 00:42:50 lukem Exp $
1.1       tv          3: #
                      4: # Top level build wrapper, for a system containing no tools.
                      5: #
                      6: # This script should run on any POSIX-compliant shell.  For systems
1.33      tv          7: # with a strange /bin/sh, "ksh" or "bash" may be an ample alternative.
1.1       tv          8: #
1.67      thorpej     9: # Note, however, that due to the way the interpreter is invoked above,
                     10: # if a POSIX-compliant shell is the first in the PATH, you won't have
                     11: # to take any further action.
                     12: #
1.1       tv         13:
                     14: bomb () {
                     15:        echo ""
                     16:        echo "ERROR: $@"
                     17:        echo "*** BUILD ABORTED ***"
                     18:        exit 1
                     19: }
1.78    ! lukem      20:
        !            21: cd `dirname $0`
1.15      tv         22: [ -d usr.bin/make ] || bomb "build.sh must be run from the top source level"
1.56      tv         23: [ -f share/mk/bsd.own.mk ] || bomb "src/share/mk is missing; please re-fetch the source tree"
1.1       tv         24:
1.77      lukem      25: uname_s=$(uname -s 2>/dev/null)
                     26: uname_m=$(uname -m 2>/dev/null)
                     27:
1.64      bjh21      28: # If $PWD is a valid name of the current directory, POSIX mandates that pwd
                     29: # return it by default which causes problems in the presence of symlinks.
                     30: # Unsetting PWD is simpler than changing every occurrence of pwd to use -P.
1.67      thorpej    31: #
                     32: # XXX Except that doesn't work on Solaris.
1.64      bjh21      33: unset PWD
1.77      lukem      34: if [ "${uname_s}" = "SunOS" ]; then
1.67      thorpej    35:        TOP=`pwd -P`
                     36: else
                     37:        TOP=`pwd`
                     38: fi
1.29      jmc        39:
1.1       tv         40: getarch () {
                     41:        # Translate a MACHINE into a default MACHINE_ARCH.
                     42:        case $MACHINE in
1.55      thorpej    43:                acorn26|acorn32|cats|netwinder|shark|*arm)
1.1       tv         44:                        MACHINE_ARCH=arm;;
                     45:
                     46:                sun2)
                     47:                        MACHINE_ARCH=m68000;;
                     48:
                     49:                amiga|atari|cesfic|hp300|sun3|*68k)
                     50:                        MACHINE_ARCH=m68k;;
                     51:
1.50      simonb     52:                mipsco|newsmips|sbmips|sgimips)
1.1       tv         53:                        MACHINE_ARCH=mipseb;;
                     54:
1.51      simonb     55:                algor|arc|cobalt|evbmips|hpcmips|playstation2|pmax)
1.1       tv         56:                        MACHINE_ARCH=mipsel;;
                     57:
                     58:                pc532)
                     59:                        MACHINE_ARCH=ns32k;;
                     60:
1.76      scw        61:                bebox|prep|sandpoint|*ppc)
1.1       tv         62:                        MACHINE_ARCH=powerpc;;
                     63:
1.22      msaitoh    64:                evbsh3|mmeye)
1.1       tv         65:                        MACHINE_ARCH=sh3eb;;
                     66:
1.22      msaitoh    67:                dreamcast|hpcsh)
1.1       tv         68:                        MACHINE_ARCH=sh3el;;
                     69:
1.62      fredette   70:                hp700)
                     71:                        MACHINE_ARCH=hppa;;
                     72:
1.69      thorpej    73:                evbsh5)
                     74:                        MACHINE_ARCH=sh5el;;
                     75:
1.5       bjh21      76:                alpha|i386|sparc|sparc64|vax|x86_64)
1.4       tv         77:                        MACHINE_ARCH=$MACHINE;;
                     78:
                     79:                *)      bomb "unknown target MACHINE: $MACHINE";;
1.1       tv         80:        esac
                     81: }
                     82:
1.47      tv         83: validatearch () {
                     84:        # Ensure that the MACHINE_ARCH exists (and is supported by build.sh).
                     85:        case $MACHINE_ARCH in
1.69      thorpej    86:                alpha|arm|armeb|hppa|i386|m68000|m68k|mipse[bl]|ns32k|powerpc|sh[35]e[bl]|sparc|sparc64|vax|x86_64)
1.47      tv         87:                        ;;
                     88:
                     89:                *)      bomb "unknown target MACHINE_ARCH: $MACHINE_ARCH";;
                     90:        esac
                     91: }
                     92:
1.15      tv         93: getmakevar () {
1.30      jmc        94:        $make -m ${TOP}/share/mk -s -f- _x_ <<EOF
1.15      tv         95: _x_:
                     96:        echo \${$1}
                     97: .include <bsd.prog.mk>
1.70      lukem      98: .include <bsd.kernobj.mk>
1.15      tv         99: EOF
                    100: }
                    101:
1.10      tv        102: resolvepath () {
                    103:        case $OPTARG in
                    104:        /*)     ;;
1.67      thorpej   105:        *)      OPTARG="$TOP/$OPTARG";;
1.10      tv        106:        esac
                    107: }
                    108:
1.1       tv        109: usage () {
1.70      lukem     110:        cat <<_usage_
                    111: Usage:
1.77      lukem     112: `basename $0` [-bdEnortUu] [-a arch] [-B buildid] [-D dest] [-i idir] [-j njob]
                    113:     [-k kernel] [-M obj] [-m mach] [-O obj] [-R release] [-T tools] [-w wrapper]
1.70      lukem     114:
                    115:     -a arch    set MACHINE_ARCH to arch (otherwise deduced from MACHINE)
                    116:     -B buildid set BUILDID to buildid
                    117:     -b         build nbmake and nbmake wrapper script, if needed
                    118:     -D dest    set DESTDIR to dest
                    119:     -d         build a full distribution into DESTDIR (including etc files)
1.74      lukem     120:     -E         set "expert" mode; disables some DESTDIR checks
1.77      lukem     121:     -i idir    installworld from DESTDIR to idir
1.70      lukem     122:     -j njob    run up to njob jobs in parallel; see make(1)
                    123:     -k kernel  build a kernel using the named configuration file
                    124:     -M obj     set obj root directory to obj (sets MAKEOBJDIRPREFIX)
                    125:     -m mach    set MACHINE to mach (not required if NetBSD native)
                    126:     -n         show commands that would be executed, but do not execute them
                    127:     -O obj     set obj root directory to obj (sets a MAKEOBJDIR pattern)
                    128:     -o         set MKOBJDIRS=no (do not create objdirs at start of build)
                    129:     -R release build a release (and set RELEASEDIR to release)
1.71      enami     130:     -r         remove contents of TOOLDIR and DESTDIR before building
1.70      lukem     131:     -T tools   set TOOLDIR to tools
                    132:     -t         build and install tools only (implies -b)
                    133:     -U         set UNPRIVED
                    134:     -u         set UPDATE
                    135:     -w wrapper create nbmake script at wrapper
                    136:                (default TOOLDIR/bin/nbmake-MACHINE)
                    137:
                    138: Note: if -T is unset and TOOLDIR is not set in the environment,
                    139:       nbmake will be [re]built unconditionally.
                    140: _usage_
1.1       tv        141:        exit 1
                    142: }
                    143:
1.10      tv        144: # Set defaults.
1.18      tv        145: MAKEFLAGS=
1.12      tv        146: buildtarget=build
1.10      tv        147: do_buildsystem=true
1.72      lukem     148: do_buildkernel=false
                    149: do_buildtools=false
1.10      tv        150: do_rebuildmake=false
                    151: do_removedirs=false
1.74      lukem     152: expert_mode=false
1.18      tv        153: makeenv=
                    154: makewrapper=
1.77      lukem     155: installworlddir=
1.10      tv        156: opt_a=no
1.77      lukem     157: opts='a:B:bD:dEhi:j:k:M:m:nO:oR:rT:tUuw:'
1.18      tv        158: runcmd=
1.4       tv        159:
                    160: if type getopts >/dev/null 2>&1; then
                    161:        # Use POSIX getopts.
                    162:        getoptcmd='getopts $opts opt && opt=-$opt'
                    163:        optargcmd=':'
                    164: else
1.33      tv        165:        type getopt >/dev/null 2>&1 || bomb "/bin/sh shell is too old; try ksh or bash"
1.2       tv        166:
1.4       tv        167:        # Use old-style getopt(1) (doesn't handle whitespace in args).
                    168:        args="`getopt $opts $*`"
                    169:        [ $? = 0 ] || usage
                    170:        set -- $args
1.1       tv        171:
1.4       tv        172:        getoptcmd='[ $# -gt 0 ] && opt="$1" && shift'
                    173:        optargcmd='OPTARG="$1"; shift'
                    174: fi
1.10      tv        175:
                    176: # Parse command line options.
1.4       tv        177: while eval $getoptcmd; do case $opt in
                    178:        -a)     eval $optargcmd
                    179:                MACHINE_ARCH=$OPTARG; opt_a=yes;;
1.1       tv        180:
1.52      thorpej   181:        -B)     eval $optargcmd
                    182:                BUILDID=$OPTARG;;
                    183:
1.10      tv        184:        -b)     do_buildsystem=false;;
1.9       jmc       185:
1.73      lukem     186:        -D)     eval $optargcmd; resolvepath
                    187:                DESTDIR="$OPTARG"; export DESTDIR
                    188:                makeenv="$makeenv DESTDIR";;
                    189:
1.26      thorpej   190:        -d)     buildtarget=distribution;;
                    191:
1.74      lukem     192:        -E)     expert_mode=true;;
                    193:
1.77      lukem     194:        -i)     eval $optargcmd
                    195:                installworlddir=$OPTARG;;
                    196:
1.4       tv        197:        -j)     eval $optargcmd
1.57      sommerfe  198:                parallel="-j $OPTARG";;
1.1       tv        199:
1.72      lukem     200:        -k)     do_buildkernel=true; do_buildsystem=false
1.70      lukem     201:                eval $optargcmd
1.72      lukem     202:                kernconfname=$OPTARG;;
1.70      lukem     203:
1.73      lukem     204:        -M)     eval $optargcmd; resolvepath
                    205:                MAKEOBJDIRPREFIX="$OPTARG"; export MAKEOBJDIRPREFIX
                    206:                makeobjdir=$OPTARG
                    207:                makeenv="$makeenv MAKEOBJDIRPREFIX";;
                    208:
1.4       tv        209:        # -m overrides MACHINE_ARCH unless "-a" is specified
                    210:        -m)     eval $optargcmd
                    211:                MACHINE=$OPTARG; [ "$opt_a" != "yes" ] && getarch;;
1.3       tv        212:
1.10      tv        213:        -n)     runcmd=echo;;
                    214:
1.73      lukem     215:        -O)     eval $optargcmd; resolvepath
                    216:                MAKEOBJDIR="\${.CURDIR:C,^$TOP,$OPTARG,}"; export MAKEOBJDIR
                    217:                makeobjdir=$OPTARG
                    218:                makeenv="$makeenv MAKEOBJDIR";;
                    219:
1.12      tv        220:        -o)     MKOBJDIRS=no;;
                    221:
1.73      lukem     222:        -R)     eval $optargcmd; resolvepath
                    223:                RELEASEDIR=$OPTARG; export RELEASEDIR
                    224:                makeenv="$makeenv RELEASEDIR"
                    225:                buildtarget=release;;
                    226:
1.10      tv        227:        -r)     do_removedirs=true; do_rebuildmake=true;;
1.1       tv        228:
1.73      lukem     229:        -T)     eval $optargcmd; resolvepath
                    230:                TOOLDIR="$OPTARG"; export TOOLDIR;;
                    231:
1.72      lukem     232:        -t)     do_buildtools=true; do_buildsystem=false;;
1.16      thorpej   233:
1.44      lukem     234:        -U)     UNPRIVED=yes; export UNPRIVED
                    235:                makeenv="$makeenv UNPRIVED";;
                    236:
1.18      tv        237:        -u)     UPDATE=yes; export UPDATE
                    238:                makeenv="$makeenv UPDATE";;
1.15      tv        239:
                    240:        -w)     eval $optargcmd; resolvepath
                    241:                makewrapper="$OPTARG";;
1.12      tv        242:
1.4       tv        243:        --)             break;;
                    244:        -'?'|-h)        usage;;
1.1       tv        245: esac; done
                    246:
1.15      tv        247: # Set up MACHINE*.  On a NetBSD host, these are allowed to be unset.
                    248: if [ -z "$MACHINE" ]; then
1.77      lukem     249:        if [ "${uname_s}" != "NetBSD" ]; then
1.15      tv        250:                echo "MACHINE must be set, or -m must be used, for cross builds."
1.4       tv        251:                echo ""; usage
                    252:        fi
1.77      lukem     253:        MACHINE=${uname_m}
1.15      tv        254: fi
1.10      tv        255: [ -n "$MACHINE_ARCH" ] || getarch
1.47      tv        256: validatearch
1.3       tv        257:
1.15      tv        258: # Set up default make(1) environment.
1.18      tv        259: makeenv="$makeenv TOOLDIR MACHINE MACHINE_ARCH MAKEFLAGS"
1.52      thorpej   260: if [ ! -z "$BUILDID" ]; then
                    261:        makeenv="$makeenv BUILDID"
                    262: fi
1.67      thorpej   263: MAKEFLAGS="-m $TOP/share/mk $MAKEFLAGS MKOBJDIRS=${MKOBJDIRS-yes}"
1.18      tv        264: export MAKEFLAGS MACHINE MACHINE_ARCH
1.15      tv        265:
                    266: # Test make source file timestamps against installed nbmake binary,
                    267: # if TOOLDIR is pre-set.
1.46      tv        268: #
                    269: # Note that we do NOT try to grovel "mk.conf" here to find out if TOOLDIR
                    270: # is set there, because it can contain make variable expansions and other
                    271: # stuff only parseable *after* we have a working nbmake.  So this logic
                    272: # can only work if the user has pre-set TOOLDIR in the environment or
                    273: # used the -T option to build.sh.
                    274: #
1.53      pk        275: make="${TOOLDIR-nonexistent}/bin/nbmake"
1.15      tv        276: if [ -x $make ]; then
1.1       tv        277:        for f in usr.bin/make/*.[ch] usr.bin/make/lst.lib/*.[ch]; do
1.66      thorpej   278:                if [ $f -nt $make ]; then
1.10      tv        279:                        do_rebuildmake=true; break
1.1       tv        280:                fi
                    281:        done
                    282: else
1.10      tv        283:        do_rebuildmake=true
1.1       tv        284: fi
                    285:
1.15      tv        286: # Build bootstrap nbmake if needed.
1.10      tv        287: if $do_rebuildmake; then
1.18      tv        288:        $runcmd echo "===> Bootstrapping nbmake"
1.53      pk        289:        tmpdir="${TMPDIR-/tmp}/nbbuild$$"
1.4       tv        290:
1.53      pk        291:        $runcmd mkdir "$tmpdir" || bomb "cannot mkdir: $tmpdir"
                    292:        trap "cd /; rm -r -f \"$tmpdir\"" 0
1.4       tv        293:        trap "exit 1" 1 2 3 15
1.53      pk        294:        $runcmd cd "$tmpdir"
1.1       tv        295:
1.72      lukem     296:        $runcmd env CC="${HOST_CC-cc}" CPPFLAGS="${HOST_CPPFLAGS}" \
                    297:                CFLAGS="${HOST_CFLAGS--O}" LDFLAGS="${HOST_LDFLAGS}" \
                    298:                "$TOP/tools/make/configure" \
                    299:                || bomb "configure of nbmake failed"
1.39      tv        300:        $runcmd sh buildmake.sh || bomb "build of nbmake failed"
1.1       tv        301:
1.53      pk        302:        make="$tmpdir/nbmake"
1.67      thorpej   303:        $runcmd cd "$TOP"
1.15      tv        304:        $runcmd rm -f usr.bin/make/*.o usr.bin/make/lst.lib/*.o
                    305: fi
                    306:
1.68      thorpej   307: EXTERNAL_TOOLCHAIN=`getmakevar EXTERNAL_TOOLCHAIN`
1.53      pk        308: if [ "$runcmd" = "echo" ]; then
1.68      thorpej   309:        TOOLCHAIN_MISSING=no
1.53      pk        310: else
1.68      thorpej   311:        TOOLCHAIN_MISSING=`getmakevar TOOLCHAIN_MISSING`
1.53      pk        312: fi
1.68      thorpej   313: if [ "${TOOLCHAIN_MISSING}" = "yes" -a \
                    314:      "${EXTERNAL_TOOLCHAIN}" = "" ]; then
                    315:        echo "ERROR: build.sh (in-tree cross-toolchain) is not yet available for"
1.30      jmc       316:        echo
                    317:        echo "MACHINE: ${MACHINE}"
                    318:        echo "MACHINE_ARCH: ${MACHINE_ARCH}"
                    319:        echo
                    320:        echo "All builds for this platform should be done via a traditional make"
                    321:        echo
1.68      thorpej   322:        echo "If you wish to use an external cross-toolchain, set"
1.30      jmc       323:        echo
1.68      thorpej   324:        echo "EXTERNAL_TOOLCHAIN=<path to toolchain root>"
1.30      jmc       325:        echo
                    326:        echo "in either the environment or mk.conf and rerun"
                    327:        echo
                    328:        echo "$0 $*"
                    329:        exit 1
                    330: fi
                    331:
1.15      tv        332: # If TOOLDIR isn't already set, make objdirs in "tools" in case the
                    333: # default setting from <bsd.own.mk> is used.
                    334: if [ -z "$TOOLDIR" ] && [ "$MKOBJDIRS" != "no" ]; then
1.18      tv        335:        $runcmd cd tools
1.72      lukem     336:        $runcmd $make -m ${TOP}/share/mk obj NOSUBDIR= \
                    337:                || bomb "make obj failed in tools"
1.70      lukem     338:        $runcmd cd "$TOP"
1.15      tv        339: fi
                    340:
1.27      jmc       341: #
1.58      lukem     342: # If setting -M or -O to root an obj dir make sure the base directory is made
1.27      jmc       343: # before continuing as bsd.own.mk will need this to pick up _SRC_TOP_OBJ_
                    344: #
                    345: if [ "$MKOBJDIRS" != "no" ] && [ ! -z "$makeobjdir" ]; then
1.53      pk        346:        $runcmd mkdir -p "$makeobjdir"
1.27      jmc       347: fi
                    348:
1.15      tv        349: # Find DESTDIR and TOOLDIR.
                    350: if [ "$runcmd" = "echo" ]; then
1.24      tv        351:        # shown symbolically with -n because these may come from mk.conf
                    352:        DESTDIR='$DESTDIR'
                    353:        TOOLDIR='$TOOLDIR'
1.15      tv        354: else
1.53      pk        355:        DESTDIR=`getmakevar DESTDIR`;
                    356:        [ $? = 0 ] || bomb "getmakevar DESTDIR failed";
1.72      lukem     357:        $runcmd echo "===> DESTDIR path: $DESTDIR"
1.53      pk        358:
                    359:        TOOLDIR=`getmakevar TOOLDIR`;
1.63      pooka     360:        [ $? = 0 ] || bomb "getmakevar TOOLDIR failed";
1.72      lukem     361:        $runcmd echo "===> TOOLDIR path: $TOOLDIR"
1.53      pk        362:
1.18      tv        363:        export DESTDIR TOOLDIR
1.15      tv        364: fi
                    365:
                    366: # Check validity of TOOLDIR and DESTDIR.
                    367: if [ -z "$TOOLDIR" ] || [ "$TOOLDIR" = "/" ]; then
                    368:        bomb "TOOLDIR '$TOOLDIR' invalid"
                    369: fi
                    370: removedirs="$TOOLDIR"
                    371:
                    372: if [ -z "$DESTDIR" ] || [ "$DESTDIR" = "/" ]; then
1.73      lukem     373:        if $do_buildsystem; then
                    374:                if [ "$buildtarget" != "build" ] || \
1.77      lukem     375:                   [ "${uname_s}" != "NetBSD" ] || \
                    376:                   [ "${uname_m}" != "$MACHINE" ]; then
1.73      lukem     377:                        bomb "DESTDIR must be set to a non-root path for cross builds or -d or -R."
                    378:                fi
1.74      lukem     379:                if ! $expert_mode; then
                    380:                        bomb "DESTDIR must be set to a non-root path for non -E (expert) builds"
                    381:                fi
                    382:                $runcmd echo "===> WARNING: Building to /, in expert mode."
1.75      lukem     383:                $runcmd echo "===>          This may cause your system to break!  Reasons include:"
1.74      lukem     384:                $runcmd echo "===>             - your kernel is not up to date"
                    385:                $runcmd echo "===>             - the libraries or toolchain have changed"
                    386:                $runcmd echo "===>          YOU HAVE BEEN WARNED!"
1.15      tv        387:        fi
                    388: else
                    389:        removedirs="$removedirs $DESTDIR"
                    390: fi
                    391:
1.77      lukem     392: if [ "$installworlddir" = "/" ]; then
                    393:        if [ "${uname_s}" != "NetBSD" ] || \
                    394:           [ "${uname_m}" != "$MACHINE" ]; then
                    395:                bomb "-i installworlddir must be set to a non-root path for cross builds."
                    396:        fi
                    397: fi
                    398:
1.15      tv        399: # Remove the target directories.
                    400: if $do_removedirs; then
                    401:        for f in $removedirs; do
1.72      lukem     402:                $runcmd echo "===> Removing $f"
1.15      tv        403:                $runcmd rm -r -f $f
                    404:        done
                    405: fi
                    406:
                    407: # Recreate $TOOLDIR.
1.53      pk        408: $runcmd mkdir -p "$TOOLDIR/bin" || bomb "mkdir of '$TOOLDIR/bin' failed"
1.15      tv        409:
                    410: # Install nbmake if it was built.
                    411: if $do_rebuildmake; then
1.53      pk        412:        $runcmd rm -f "$TOOLDIR/bin/nbmake"
1.72      lukem     413:        $runcmd cp $make "$TOOLDIR/bin/nbmake" \
                    414:                || bomb "failed to install \$TOOLDIR/bin/nbmake"
                    415:        make="$TOOLDIR/bin/nbmake"
1.53      pk        416:        $runcmd rm -r -f "$tmpdir"
1.4       tv        417:        trap 0 1 2 3 15
1.1       tv        418: fi
                    419:
1.4       tv        420: # Build a nbmake wrapper script, usable by hand as well as by build.sh.
1.15      tv        421: if [ -z "$makewrapper" ]; then
1.53      pk        422:        makewrapper="$TOOLDIR/bin/nbmake-$MACHINE"
1.52      thorpej   423:        if [ ! -z "$BUILDID" ]; then
1.53      pk        424:                makewrapper="$makewrapper-$BUILDID"
1.52      thorpej   425:        fi
1.15      tv        426: fi
1.4       tv        427:
1.53      pk        428: $runcmd rm -f "$makewrapper"
1.21      jmc       429: if [ "$runcmd" = "echo" ]; then
                    430:        echo 'cat <<EOF >'$makewrapper
                    431:        makewrapout=
                    432: else
1.53      pk        433:        makewrapout=">>\$makewrapper"
1.21      jmc       434: fi
1.18      tv        435:
1.21      jmc       436: eval cat <<EOF $makewrapout
1.4       tv        437: #! /bin/sh
                    438: # Set proper variables to allow easy "make" building of a NetBSD subtree.
1.78    ! lukem     439: # Generated from:  \$NetBSD: build.sh,v 1.77 2002/12/25 00:42:50 lukem Exp $
1.4       tv        440: #
1.18      tv        441:
                    442: EOF
1.21      jmc       443: for f in $makeenv; do
                    444:        eval echo "$f=\'\$`echo $f`\'\;\ export\ $f" $makewrapout
                    445: done
                    446: eval echo "USETOOLS=yes\; export USETOOLS" $makewrapout
1.18      tv        447:
1.53      pk        448: eval cat <<'EOF' $makewrapout
1.18      tv        449:
1.53      pk        450: exec "$TOOLDIR/bin/nbmake" ${1+"$@"}
1.4       tv        451: EOF
1.21      jmc       452: [ "$runcmd" = "echo" ] && echo EOF
1.53      pk        453: $runcmd chmod +x "$makewrapper"
1.4       tv        454:
1.10      tv        455: if $do_buildsystem; then
1.72      lukem     456:        # Build everything.
                    457:        ${runcmd-exec} "$makewrapper" $parallel $buildtarget \
                    458:                || bomb "failed to make $buildtarget"
1.70      lukem     459: else
1.72      lukem     460:        # One or more of do_buildtools and do_buildkernel
1.70      lukem     461:        # might be set.  Do them in the appropriate order.
1.72      lukem     462:        if $do_buildtools; then
1.70      lukem     463:                if [ "$MKOBJDIRS" != "no" ]; then
1.72      lukem     464:                        $runcmd "$makewrapper" $parallel obj-tools \
                    465:                                || bomb "failed to make obj-tools"
1.70      lukem     466:                fi
                    467:                $runcmd cd tools
                    468:                if [ "$UPDATE" = "" ]; then
1.72      lukem     469:                        $runcmd "$makewrapper" cleandir dependall install \
                    470:                                || bomb "failed to make tools"
1.70      lukem     471:                else
1.72      lukem     472:                        $runcmd "$makewrapper" dependall install \
                    473:                                || bomb "failed to make tools"
1.70      lukem     474:                fi
1.16      thorpej   475:        fi
1.72      lukem     476:        if $do_buildkernel; then
                    477:                if ! $do_buildtools; then
                    478:                        # Building tools every time we build a kernel
                    479:                        # is clearly unnecessary.  We could try to
                    480:                        # figure out whether rebuilding the tools is
                    481:                        # necessary this time, but it doesn't seem
                    482:                        # worth the trouble.  Instead, we say it's the
                    483:                        # user's responsibility to rebuild the tools if
                    484:                        # necessary.
                    485:                        $runcmd echo "===> Building kernel" \
                    486:                                "without building new tools"
                    487:                fi
                    488:                $runcmd echo "===> Building kernel ${kernconfname}"
                    489:                # The correct value of KERNOBJDIR might depend on a
                    490:                # prior "make obj" in TOP/etc.
                    491:                if [ "$MKOBJDIRS" != "no" ] && [ ! -z "$makeobjdir" ]; then
                    492:                        $runcmd cd "$TOP/etc"
                    493:                        $runcmd "$makewrapper" obj \
                    494:                                || bomb "failed to make obj in etc"
                    495:                        $runcmd cd "$TOP"
                    496:                fi
1.70      lukem     497:                if [ "$runcmd" = "echo" ]; then
                    498:                        # shown symbolically with -n
                    499:                        # because getmakevar might not work yet
1.72      lukem     500:                        KERNCONFDIR='$KERNCONFDIR'
                    501:                        KERNOBJDIR='$KERNOBJDIR'
1.70      lukem     502:                else
                    503:                        KERNCONFDIR="$( getmakevar KERNCONFDIR )"
1.72      lukem     504:                        [ $? = 0 ] || bomb "getmakevar KERNCONFDIR failed";
1.70      lukem     505:                        KERNOBJDIR="$( getmakevar KERNOBJDIR )"
1.72      lukem     506:                        [ $? = 0 ] || bomb "getmakevar KERNOBJDIR failed";
1.70      lukem     507:                fi
1.72      lukem     508:                case "${kernconfname}" in
1.70      lukem     509:                */*)
1.72      lukem     510:                        kernconfpath="${kernconfname}"
                    511:                        kernconfbase="$( basename "${kernconfname}" )"
1.70      lukem     512:                        ;;
                    513:                *)
1.72      lukem     514:                        kernconfpath="${KERNCONFDIR}/${kernconfname}"
                    515:                        kernconfbase="${kernconfname}"
1.70      lukem     516:                        ;;
                    517:                esac
1.72      lukem     518:                kernbuilddir="${KERNOBJDIR}/${kernconfbase}"
                    519:                $runcmd echo "===> Kernel build directory: ${kernbuilddir}"
                    520:                $runcmd mkdir -p "${kernbuilddir}" \
                    521:                        || bomb "cannot mkdir: ${kernbuilddir}"
1.70      lukem     522:                if [ "$UPDATE" = "" ]; then
1.72      lukem     523:                        $runcmd cd "${kernbuilddir}"
                    524:                        $runcmd "$makewrapper" cleandir \
                    525:                                || bomb "make cleandir failed in " \
                    526:                                        "${kernbuilddir}"
1.70      lukem     527:                        $runcmd cd "$TOP"
                    528:                fi
                    529:                $runcmd "${TOOLDIR}/bin/nbconfig" \
1.72      lukem     530:                        -b "${kernbuilddir}" \
                    531:                        -s "${TOP}/sys" "${kernconfpath}" \
                    532:                        || bomb "nbconfig failed for ${kernconfname}"
                    533:                $runcmd cd "${kernbuilddir}"
                    534:                $runcmd "$makewrapper" depend \
                    535:                        || bomb "make depend failed in ${kernbuilddir}"
                    536:                $runcmd "$makewrapper" $parallel all \
                    537:                        || bomb "make all failed in ${kernbuilddir}"
                    538:                $runcmd echo "===> New kernel should be in ${kernbuilddir}"
1.31      jmc       539:        fi
1.77      lukem     540: fi
                    541:
                    542: if [ -n "$installworlddir" ]; then
                    543:        ${runcmd-exec} "$makewrapper" INSTALLWORLDDIR=${installworlddir} \
                    544:                installworld || bomb "failed to make installworld"
1.9       jmc       545: fi

CVSweb <webmaster@jp.NetBSD.org>