(linenum→info "unix/slp.c:2238")

netbsdsrc/4.0/usr/src/Makefile

    1: #       $NetBSD: Makefile,v 1.246.2.3 2007/10/26 14:23:20 liamjfoy Exp $
    2: 
    3: #
    4: # This is the top-level makefile for building NetBSD. For an outline of
    5: # how to build a snapshot or release, as well as other release engineering
    6: # information, see http://www.NetBSD.org/developers/releng/index.html
    7: #
    8: # Not everything you can set or do is documented in this makefile. In
    9: # particular, you should review the files in /usr/share/mk (especially
   10: # bsd.README) for general information on building programs and writing
   11: # Makefiles within this structure, and see the comments in src/etc/Makefile
   12: # for further information on installation and release set options.
   13: #
   14: # Variables listed below can be set on the make command line (highest
   15: # priority), in /etc/mk.conf (middle priority), or in the environment
   16: # (lowest priority).
   17: #
   18: # Variables:
   19: #   DESTDIR is the target directory for installation of the compiled
   20: #       software. It defaults to /. Note that programs are built against
   21: #       libraries installed in DESTDIR.
   22: #   MKMAN, if `no', will prevent building of manual pages.
   23: #   MKOBJDIRS, if not `no', will build object directories at
   24: #       an appropriate point in a build.
   25: #   MKSHARE, if `no', will prevent building and installing
   26: #       anything in /usr/share.
   27: #   MKUPDATE, if not `no', will avoid a `make cleandir' at the start of
   28: #       `make build', as well as having the effects listed in
   29: #       /usr/share/mk/bsd.README.
   30: #   NOCLEANDIR, if defined, will avoid a `make cleandir' at the start
   31: #       of the `make build'.
   32: #   NOINCLUDES will avoid the `make includes' usually done by `make build'.
   33: #
   34: #   See mk.conf(5) for more details.
   35: #
   36: #
   37: # Targets:
   38: #   build:
   39: #       Builds a full release of NetBSD in DESTDIR, except for the
   40: #       /etc configuration files.
   41: #       If BUILD_DONE is set, this is an empty target.
   42: #   distribution:
   43: #       Builds a full release of NetBSD in DESTDIR, including the /etc
   44: #       configuration files.
   45: #   buildworld:
   46: #       As per `make distribution', except that it ensures that DESTDIR
   47: #       is not the root directory.
   48: #   installworld:
   49: #       Install the distribution from DESTDIR to INSTALLWORLDDIR (which
   50: #       defaults to the root directory).  Ensures that INSTALLWORLDDIR
   51: #       is the not root directory if cross compiling.
   52: #   release:
   53: #       Does a `make distribution', and then tars up the DESTDIR files
   54: #       into RELEASEDIR/${MACHINE}, in release(7) format.
   55: #       (See etc/Makefile for more information on this.)
   56: #   regression-tests:
   57: #       Runs the regression tests in "regress" on this host.
   58: #   sets:
   59: #       Populate ${RELEASEDIR}/${MACHINE}/binary/sets from ${DESTDIR}
   60: #   sourcesets:
   61: #       Populate ${RELEASEDIR}/source/sets from ${NETBSDSRCDIR}
   62: #   syspkgs:
   63: #       Populate ${RELEASEDIR}/${MACHINE}/binary/syspkgs from ${DESTDIR}
   64: #   iso-image:
   65: #       Create CD-ROM image in RELEASEDIR/iso.
   66: #       RELEASEDIR must already have been populated by `make release'
   67: #       or equivalent.
   68: #   iso-image-source:
   69: #       Create CD-ROM image with source in RELEASEDIR/iso.
   70: #       RELEASEDIR must already have been populated by
   71: #       `make release sourcesets' or equivalent.
   72: #
   73: # Targets invoked by `make build,' in order:
   74: #   cleandir:        cleans the tree.
   75: #   obj:             creates object directories.
   76: #   do-tools:        builds host toolchain.
   77: #   do-distrib-dirs: creates the distribution directories.
   78: #   includes:        installs include files.
   79: #   do-tools-compat: builds the "libnbcompat" library; needed for some
   80: #                    random host tool programs in the source tree.
   81: #   do-lib-csu:      builds and installs prerequisites from lib/csu.
   82: #   do-gnu-lib-crtstuff3: builds and installs prerequisites from
   83: #                         gnu/lib/crtstuff3
   84: #   do-gnu-lib-libgcc3: builds and installs prerequisites from gnu/lib/libgcc3
   85: #   do-lib-libc:     builds and installs prerequisites from lib/libc.
   86: #   do-lib:          builds and installs prerequisites from lib.
   87: #   do-gnu-lib:      builds and installs prerequisites from gnu/lib.
   88: #   do-ld.so:        builds and installs prerequisites from libexec/ld.*_so.
   89: #   do-build:        builds and installs the entire system.
   90: #   do-x11:          builds and installs X11R6 from src/x11 if ${MKX11} != "no"
   91: #   do-obsolete:     installs the obsolete sets (for the postinstall-* targets).
   92: #
   93: 
   94: .if ${.MAKEFLAGS:M${.CURDIR}/share/mk} == ""
   95: .MAKEFLAGS: -m ${.CURDIR}/share/mk
   96: .endif
   97: 
   98: #
   99: # If _SRC_TOP_OBJ_ gets set here, we will end up with a directory that may
  100: # not be the top level objdir, because "make obj" can happen in the *middle*
  101: # of "make build" (long after <bsd.own.mk> is calculated it).  So, pre-set
  102: # _SRC_TOP_OBJ_ here so it will not be added to ${.MAKEOVERRIDES}.
  103: #
  104: _SRC_TOP_OBJ_=
  105: 
  106: .include <bsd.own.mk>
  107: 
  108: #
  109: # Sanity check: make sure that "make build" is not invoked simultaneously
  110: # with a standard recursive target.
  111: #
  112: 
  113: .if make(build) || make(release) || make(snapshot)
  114: .for targ in ${TARGETS:Nobj:Ncleandir}
  115: .if make(${targ}) && !target(.BEGIN)
  116: .BEGIN:
  117:         @echo 'BUILD ABORTED: "make build" and "make ${targ}" are mutually exclusive.'
  118:         @false
  119: .endif
  120: .endfor
  121: .endif
  122: 
  123: _SUBDIR=        tools lib include gnu bin games libexec sbin usr.bin
  124: _SUBDIR+=       usr.sbin share rescue sys etc .WAIT distrib regress
  125: 
  126: #
  127: # Weed out directories that don't exist.
  128: #
  129: 
  130: .for dir in ${_SUBDIR}
  131: .if ("${dir}" == ".WAIT") || exists(${dir}/Makefile) && (${BUILD_${dir}:Uyes} != "no")
  132: SUBDIR+=        ${dir}
  133: .endif
  134: .endfor
  135: 
  136: .if exists(regress)
  137: regression-tests: .PHONY .MAKE
  138:         @echo Running regression tests...
  139:         ${MAKEDIRTARGET} regress regress
  140: .endif
  141: 
  142: .if ${MKUNPRIVED} != "no"
  143: NOPOSTINSTALL=  # defined
  144: .endif
  145: 
  146: afterinstall: .PHONY .MAKE
  147: .if ${MKMAN} != "no"
  148:         ${MAKEDIRTARGET} share/man makedb
  149: .endif
  150: .if (${MKUNPRIVED} != "no" && ${MKINFO} != "no")
  151:         ${MAKEDIRTARGET} gnu/usr.bin/texinfo/install-info infodir-meta
  152: .endif
  153: .if !defined(NOPOSTINSTALL)
  154:         ${MAKEDIRTARGET} . postinstall-check
  155: .endif
  156: 
  157: _POSTINSTALL=   ${.CURDIR}/usr.sbin/postinstall/postinstall
  158: 
  159: postinstall-check: .PHONY
  160:         @echo "   === Post installation checks ==="
  161:         ${HOST_SH} ${_POSTINSTALL} -s ${.CURDIR} -d ${DESTDIR}/ check; if [ $$? -gt 1 ]; then exit 1; fi
  162:         @echo "   ================================"
  163: 
  164: postinstall-fix: .NOTMAIN .PHONY
  165:         @echo "   === Post installation fixes ==="
  166:         ${HOST_SH} ${_POSTINSTALL} -s ${.CURDIR} -d ${DESTDIR}/ fix
  167:         @echo "   ==============================="
  168: 
  169: postinstall-fix-obsolete: .NOTMAIN .PHONY
  170:         @echo "   === Removing obsolete files ==="
  171:         ${HOST_SH} ${_POSTINSTALL} -s ${.CURDIR} -d ${DESTDIR}/ fix obsolete
  172:         @echo "   ==============================="
  173: 
  174: 
  175: #
  176: # Targets (in order!) called by "make build".
  177: #
  178: .if ${HAVE_GCC} == "3"
  179: LIBGCC_EXT=3
  180: .else
  181: LIBGCC_EXT=4
  182: .endif
  183: 
  184: BUILDTARGETS+=  check-tools
  185: .if ${MKUPDATE} == "no" && !defined(NOCLEANDIR)
  186: BUILDTARGETS+=  cleandir
  187: .endif
  188: .if ${MKOBJDIRS} != "no"
  189: BUILDTARGETS+=  obj
  190: .endif
  191: .if ${USETOOLS} == "yes"
  192: BUILDTARGETS+=  do-tools
  193: .endif
  194: .if !defined(NODISTRIBDIRS)
  195: BUILDTARGETS+=  do-distrib-dirs
  196: .endif
  197: .if !defined(NOINCLUDES)
  198: BUILDTARGETS+=  includes
  199: .endif
  200: BUILDTARGETS+=  do-tools-compat
  201: BUILDTARGETS+=  do-lib-csu
  202: .if ${MKGCC} != "no"
  203: .if (${HAVE_GCC} == "3" || ${HAVE_GCC} == "4")
  204: BUILDTARGETS+=  do-gnu-lib-crtstuff${LIBGCC_EXT}
  205: .endif
  206: BUILDTARGETS+=  do-gnu-lib-libgcc${LIBGCC_EXT}
  207: .endif
  208: BUILDTARGETS+=  do-lib-libc
  209: BUILDTARGETS+=  do-lib do-gnu-lib
  210: BUILDTARGETS+=  do-ld.so
  211: BUILDTARGETS+=  do-build
  212: .if ${MKX11} != "no"
  213: BUILDTARGETS+=  do-x11
  214: .endif
  215: BUILDTARGETS+=  do-obsolete
  216: 
  217: #
  218: # Enforce proper ordering of some rules.
  219: #
  220: 
  221: .ORDER:         ${BUILDTARGETS}
  222: includes-lib:   .PHONY includes-include includes-sys
  223: includes-gnu:   .PHONY includes-lib
  224: 
  225: #
  226: # Build the system and install into DESTDIR.
  227: #
  228: 
  229: START_TIME!=    date
  230: 
  231: build: .PHONY .MAKE
  232: .if defined(BUILD_DONE)
  233:         @echo "Build already installed into ${DESTDIR}"
  234: .else
  235:         @echo "Build started at: ${START_TIME}"
  236: .for tgt in ${BUILDTARGETS}
  237:         ${MAKEDIRTARGET} . ${tgt}
  238: .endfor
  239:         ${MAKEDIRTARGET} etc install-etc-release
  240:         @echo   "Build started at:  ${START_TIME}"
  241:         @printf "Build finished at: " && date
  242: .endif
  243: 
  244: #
  245: # Build a full distribution, but not a release (i.e. no sets into
  246: # ${RELEASEDIR}).  "buildworld" enforces a build to ${DESTDIR} != /
  247: #
  248: 
  249: distribution buildworld: .PHONY .MAKE
  250: .if make(buildworld) && \
  251:     (!defined(DESTDIR) || ${DESTDIR} == "" || ${DESTDIR} == "/")
  252:         @echo "Won't make ${.TARGET} with DESTDIR=/"
  253:         @false
  254: .endif
  255:         ${MAKEDIRTARGET} . build NOPOSTINSTALL=1
  256:         ${MAKEDIRTARGET} etc distribution INSTALL_DONE=1
  257: .if defined(DESTDIR) && ${DESTDIR} != "" && ${DESTDIR} != "/"
  258:         ${MAKEDIRTARGET} . postinstall-fix-obsolete
  259:         ${MAKEDIRTARGET} distrib/sets checkflist
  260: .endif
  261:         @echo   "make ${.TARGET} started at:  ${START_TIME}"
  262:         @printf "make ${.TARGET} finished at: " && date
  263: 
  264: #
  265: # Install the distribution from $DESTDIR to $INSTALLWORLDDIR (defaults to `/')
  266: # If installing to /, ensures that the host's operating system is NetBSD and
  267: # the host's `uname -m` == ${MACHINE}.
  268: #
  269: 
  270: HOST_UNAME_S!=  uname -s
  271: HOST_UNAME_M!=  uname -m
  272: 
  273: installworld: .PHONY .MAKE
  274: .if (!defined(DESTDIR) || ${DESTDIR} == "" || ${DESTDIR} == "/")
  275:         @echo "Can't make ${.TARGET} to DESTDIR=/"
  276:         @false
  277: .endif
  278: .if !defined(INSTALLWORLDDIR) || \
  279:     ${INSTALLWORLDDIR} == "" || ${INSTALLWORLDDIR} == "/"
  280: .if (${HOST_UNAME_S} != "NetBSD")
  281:         @echo "Won't cross-make ${.TARGET} from ${HOST_UNAME_S} to NetBSD with INSTALLWORLDDIR=/"
  282:         @false
  283: .endif
  284: .if (${HOST_UNAME_M} != ${MACHINE})
  285:         @echo "Won't cross-make ${.TARGET} from ${HOST_UNAME_M} to ${MACHINE} with INSTALLWORLDDIR=/"
  286:         @false
  287: .endif
  288: .endif
  289:         ${MAKEDIRTARGET} distrib/sets installsets \
  290:             INSTALLDIR=${INSTALLWORLDDIR:U/} INSTALLSETS=
  291:         ${MAKEDIRTARGET} . postinstall-check DESTDIR=${INSTALLWORLDDIR}
  292:         @echo   "make ${.TARGET} started at:  ${START_TIME}"
  293:         @printf "make ${.TARGET} finished at: " && date
  294: 
  295: #
  296: # Create sets from $DESTDIR or $NETBSDSRCDIR into $RELEASEDIR
  297: #
  298: 
  299: .for tgt in sets sourcesets syspkgs
  300: ${tgt}: .PHONY .MAKE
  301:         ${MAKEDIRTARGET} distrib/sets ${tgt}
  302: .endfor
  303: 
  304: #
  305: # Build a release or snapshot (implies "make distribution").  Note that
  306: # in this case, the set lists will be checked before the tar files
  307: # are made.
  308: #
  309: 
  310: release snapshot: .PHONY .MAKE
  311:         ${MAKEDIRTARGET} . distribution
  312:         ${MAKEDIRTARGET} etc release DISTRIBUTION_DONE=1
  313:         @echo   "make ${.TARGET} started at:  ${START_TIME}"
  314:         @printf "make ${.TARGET} finished at: " && date
  315: 
  316: #
  317: # Create a CD-ROM image.
  318: #
  319: 
  320: iso-image: .PHONY
  321:         ${MAKEDIRTARGET} distrib iso_image
  322:         ${MAKEDIRTARGET} etc iso-image
  323:         @echo   "make ${.TARGET} started at:  ${START_TIME}"
  324:         @printf "make ${.TARGET} finished at: " && date
  325: 
  326: iso-image-source: .PHONY
  327:         ${MAKEDIRTARGET} distrib iso_image CDSOURCE=true
  328:         ${MAKEDIRTARGET} etc iso-image
  329:         @echo   "make ${.TARGET} started at:  ${START_TIME}"
  330:         @printf "make ${.TARGET} finished at: " && date
  331: 
  332: #
  333: # Special components of the "make build" process.
  334: #
  335: 
  336: check-tools: .PHONY
  337: .if ${TOOLCHAIN_MISSING} != "no" && !defined(EXTERNAL_TOOLCHAIN)
  338:         @echo '*** WARNING:  Building on MACHINE=${MACHINE} with missing toolchain.'
  339:         @echo '*** May result in a failed build or corrupt binaries!'
  340: .elif defined(EXTERNAL_TOOLCHAIN)
  341:         @echo '*** Using external toolchain rooted at ${EXTERNAL_TOOLCHAIN}.'
  342: .endif
  343: .if defined(NBUILDJOBS)
  344:         @echo '*** WARNING: NBUILDJOBS is obsolete; use -j directly instead!'
  345: .endif
  346: 
  347: do-distrib-dirs: .PHONY .MAKE
  348: .if !defined(DESTDIR) || ${DESTDIR} == ""
  349:         ${MAKEDIRTARGET} etc distrib-dirs DESTDIR=/
  350: .else
  351:         ${MAKEDIRTARGET} etc distrib-dirs DESTDIR=${DESTDIR}
  352: .endif
  353: 
  354: .for targ in cleandir obj includes
  355: do-${targ}: .PHONY ${targ}
  356:         @true
  357: .endfor
  358: 
  359: .for dir in tools tools/compat lib/csu gnu/lib/crtstuff${LIBGCC_EXT} gnu/lib/libgcc${LIBGCC_EXT} lib/libc lib/libdes lib gnu/lib
  360: do-${dir:S/\//-/g}: .PHONY .MAKE
  361: .for targ in dependall install
  362:         ${MAKEDIRTARGET} ${dir} ${targ}
  363: .endfor
  364: .endfor
  365: 
  366: do-ld.so: .PHONY .MAKE
  367: .for targ in dependall install
  368: .if (${OBJECT_FMT} == "a.out")
  369:         ${MAKEDIRTARGET} libexec/ld.aout_so ${targ}
  370: .endif
  371: .if (${OBJECT_FMT} == "ELF")
  372:         ${MAKEDIRTARGET} libexec/ld.elf_so ${targ}
  373: .endif
  374: .endfor
  375: 
  376: do-build: .PHONY .MAKE
  377: .for targ in dependall install
  378:         ${MAKEDIRTARGET} . ${targ} BUILD_tools=no BUILD_lib=no
  379: .endfor
  380: 
  381: do-x11: .PHONY .MAKE
  382:         ${MAKEDIRTARGET} x11 build
  383: 
  384: do-obsolete: .PHONY .MAKE
  385:         ${MAKEDIRTARGET} etc install-obsolete-lists
  386: 
  387: #
  388: # Speedup stubs for some subtrees that don't need to run these rules.
  389: # (Tells <bsd.subdir.mk> not to recurse for them.)
  390: #
  391: 
  392: .for dir in bin etc distrib games libexec regress sbin usr.sbin tools
  393: includes-${dir}: .PHONY
  394:         @true
  395: .endfor
  396: .for dir in etc distrib regress
  397: install-${dir}: .PHONY
  398:         @true
  399: .endfor
  400: 
  401: #
  402: # XXX this needs to change when distrib Makefiles are recursion compliant
  403: # XXX many distrib subdirs need "cd etc && make snap_pre snap_kern" first...
  404: #
  405: dependall-distrib depend-distrib all-distrib: .PHONY
  406:         @true
  407: 
  408: .include <bsd.sys.mk>
  409: .include <bsd.obj.mk>
  410: .include <bsd.kernobj.mk>
  411: .include <bsd.subdir.mk>
  412: 
  413: build-docs: .PHONY ${.CURDIR}/BUILDING
  414: ${.CURDIR}/BUILDING: doc/BUILDING.mdoc
  415:         ${_MKMSG_CREATE} ${.TARGET}
  416:         ${TOOL_GROFF} -mdoc -Tascii -P-bou $> >$@
  417: 
  418: 
  419: #
  420: # Display current make(1) parameters
  421: #
  422: params: .PHONY .MAKE
  423:         ${MAKEDIRTARGET} etc params
Syntax (Markdown)