4 # Make command line options:
5 # -DMAKE_KERBEROS4 to build KerberosIV
6 # -DMAKE_KERBEROS5 to build Kerberos5
7 # -DNOCLEANDIR run ${MAKE} clean, instead of ${MAKE} cleandir
8 # -DNOCLEAN do not clean at all
9 # -DNOCRYPT will prevent building of crypt versions
10 # -DNOMAN do not build the manual pages
11 # -DNOPROFILE do not build profiled libraries
12 # -DNOSECURE do not go into secure subdir
13 # -DNOGAMES do not go into games subdir
14 # -DNOSHARE do not go into share subdir
15 # -DNOINFO do not make or install info files
16 # -DNOLIBC_R do not build libc_r.
17 # -DNO_FORTRAN do not build g77 and related libraries.
18 # -DNO_KERNELCONFIG do not run config in ${MAKE} buildkernel
19 # -DNO_KERNELCLEAN do not run ${MAKE} clean in ${MAKE} buildkernel
20 # -DNO_KERNELDEPEND do not run ${MAKE} depend in ${MAKE} buildkernel
21 # -DNO_PORTSUPDATE do not update ports in ${MAKE} update
22 # -DNO_DOCUPDATE do not update doc in ${MAKE} update
23 # LOCAL_DIRS="list of dirs" to add additional dirs to the SUBDIR list
24 # TARGET_ARCH="arch" to crossbuild world to a different arch
27 # The intended user-driven targets are:
28 # buildworld - rebuild *everything*, including glue to help do upgrades
29 # installworld- install everything built by "buildworld"
30 # update - convenient way to update your source tree (eg: sup/cvs)
31 # most - build user commands, no libraries or include files
32 # installmost - install user commands, no libraries or include files
34 # Standard targets (not defined here) are documented in the makefiles in
35 # /usr/share/mk. These include:
36 # obj depend all install clean cleandepend cleanobj
38 # Put initial settings here.
41 # We must do share/info early so that installation of info `dir'
42 # entries works correctly. Do it first since it is less likely to
43 # grow dependencies on include and lib than vice versa.
44 .if exists(${.CURDIR}/share/info)
48 .if exists(${.CURDIR}/include)
51 .if exists(${.CURDIR}/lib)
55 .if exists(${.CURDIR}/bin)
58 .if exists(${.CURDIR}/games) && !defined(NOGAMES)
61 .if exists(${.CURDIR}/gnu)
64 .if exists(${.CURDIR}/kerberosIV) && exists(${.CURDIR}/crypto) && \
65 !defined(NOCRYPT) && !defined(NO_OPENSSL) && defined(MAKE_KERBEROS4)
68 .if exists(${.CURDIR}/kerberos5) && exists(${.CURDIR}/crypto) && \
69 !defined(NOCRYPT) && !defined(NO_OPENSSL) && defined(MAKE_KERBEROS5)
72 .if exists(${.CURDIR}/libexec)
75 .if exists(${.CURDIR}/sbin)
78 .if exists(${.CURDIR}/secure) && !defined(NOCRYPT) && !defined(NOSECURE)
81 .if exists(${.CURDIR}/share) && !defined(NOSHARE)
84 .if exists(${.CURDIR}/sys)
87 .if exists(${.CURDIR}/usr.bin)
90 .if exists(${.CURDIR}/usr.sbin)
94 # etc must be last for "distribute" to work
95 .if exists(${.CURDIR}/etc)
99 # These are last, since it is nice to at least get the base system
100 # rebuilt before you do them.
101 .if defined(LOCAL_DIRS)
102 .for _DIR in ${LOCAL_DIRS}
103 .if exists(${.CURDIR}/${_DIR}) & exists(${.CURDIR}/${_DIR}/Makefile)
109 .if defined(SUBDIR_OVERRIDE)
110 SUBDIR= ${SUBDIR_OVERRIDE}
113 .if defined(NOCLEANDIR)
114 CLEANDIR= clean cleandepend
120 SUP?= /usr/local/bin/cvsup
121 SUPFLAGS?= -g -L 2 -P -
123 SUPFLAGS+= -h ${SUPHOST}
126 MAKEOBJDIRPREFIX?= /usr/obj
127 OSRELDATE!= sysctl -n kern.osreldate
128 TARGET_ARCH?= ${MACHINE_ARCH}
129 .if ${TARGET_ARCH} == ${MACHINE_ARCH}
131 TARGET_CPUTYPE?=${CPUTYPE}
133 TARGET?= ${TARGET_ARCH}
136 .if !empty(TARGET_CPUTYPE)
137 _TARGET_CPUTYPE=${TARGET_CPUTYPE}
139 _TARGET_CPUTYPE=dummy
141 _CPUTYPE!= ${MAKE} -f /dev/null -m ${.CURDIR}/share/mk \
142 CPUTYPE=${_TARGET_CPUTYPE} -V CPUTYPE
143 .if ${_CPUTYPE} != ${_TARGET_CPUTYPE}
144 .error CPUTYPE global should be set with ?=.
147 BUILD_ARCH!= sysctl -n hw.machine_arch
148 .if ${MACHINE_ARCH} != ${BUILD_ARCH}
149 .error To cross-build, set TARGET_ARCH.
152 .if ${MACHINE} == ${TARGET}
153 OBJTREE= ${MAKEOBJDIRPREFIX}
155 OBJTREE= ${MAKEOBJDIRPREFIX}/${TARGET}
157 WORLDTMP= ${OBJTREE}${.CURDIR}/${MACHINE_ARCH}
158 # /usr/games added for fortune which depend on strfile
159 STRICTTMPPATH= ${WORLDTMP}/usr/sbin:${WORLDTMP}/usr/bin:${WORLDTMP}/usr/games
160 TMPPATH= ${STRICTTMPPATH}:${PATH}
162 INSTALLTMP!= /usr/bin/mktemp -d -u -t install
165 # Building a world goes through the following stages
167 # 1. bootstrap-tool stage [BMAKE]
168 # This stage is responsible for creating programs that
169 # are needed for backward compatibility reasons. They
170 # are not built as cross-tools.
171 # 2. build-tool stage [TMAKE]
172 # This stage is responsible for creating the object
173 # tree and building any tools that are needed during
175 # 3. cross-tool stage [XMAKE]
176 # This stage is responsible for creating any tools that
177 # are needed for cross-builds. A cross-compiler is one
179 # 4. world stage [WMAKE]
180 # This stage actually builds the world.
181 # 5. install stage (optional) [IMAKE]
182 # This stage installs a previously built world.
185 # Common environment for world related stages
186 CROSSENV= MAKEOBJDIRPREFIX=${OBJTREE} \
187 MACHINE_ARCH=${TARGET_ARCH} \
189 CPUTYPE=${TARGET_CPUTYPE} \
190 GROFF_BIN_PATH=${WORLDTMP}/usr/bin \
191 GROFF_FONT_PATH=${WORLDTMP}/usr/share/groff_font \
192 GROFF_TMAC_PATH=${WORLDTMP}/usr/share/tmac
194 # bootstrap-tool stage
195 BMAKEENV= MAKEOBJDIRPREFIX=${WORLDTMP} \
197 INSTALL="sh ${.CURDIR}/tools/install.sh"
198 BMAKE= ${BMAKEENV} ${MAKE} -f Makefile.inc1 \
199 BOOTSTRAPPING=${OSRELDATE} \
200 -DNOHTML -DNOINFO -DNOMAN -DNOPIC -DNOPROFILE -DNOSHARED \
201 -DNO_CPU_CFLAGS -DNO_WERROR
204 TMAKEENV= MAKEOBJDIRPREFIX=${OBJTREE} \
206 INSTALL="sh ${.CURDIR}/tools/install.sh"
207 TMAKE= ${TMAKEENV} ${MAKE} -f Makefile.inc1 \
208 BOOTSTRAPPING=${OSRELDATE} -DNO_CPU_CFLAGS
211 XMAKE= TOOLS_PREFIX=${WORLDTMP} ${BMAKE} -DNO_FORTRAN -DNO_GDB
214 WMAKEENV= ${CROSSENV} \
215 DESTDIR=${WORLDTMP} \
216 INSTALL="sh ${.CURDIR}/tools/install.sh" \
218 WMAKE= ${WMAKEENV} ${MAKE} -f Makefile.inc1
221 IMAKEENV= ${CROSSENV} \
222 PATH=${STRICTTMPPATH}:${INSTALLTMP}
223 IMAKE= ${IMAKEENV} ${MAKE} -f Makefile.inc1
226 KMAKEENV= ${WMAKEENV}
228 USRDIRS= usr/bin usr/lib/compat/aout usr/games usr/libdata/ldscripts \
229 usr/libexec usr/sbin usr/share/misc \
231 usr/share/groff_font/devX100 \
232 usr/share/groff_font/devX100-12 \
233 usr/share/groff_font/devX75 \
234 usr/share/groff_font/devX75-12 \
235 usr/share/groff_font/devascii \
236 usr/share/groff_font/devcp1047 \
237 usr/share/groff_font/devdvi \
238 usr/share/groff_font/devhtml \
239 usr/share/groff_font/devkoi8-r \
240 usr/share/groff_font/devlatin1 \
241 usr/share/groff_font/devlbp \
242 usr/share/groff_font/devlj4 \
243 usr/share/groff_font/devps \
244 usr/share/groff_font/devutf8 \
245 usr/share/tmac/mdoc usr/share/tmac/mm
247 INCDIRS= arpa dev fs g++/backward g++/bits g++/ext isc isofs libmilter \
248 objc openssl protocols readline rpc rpcsvc security ufs
253 # Attempt to rebuild the entire system, with reasonable chance of
254 # success, regardless of how old your existing system is.
257 .if ${.CURDIR:C/[^,]//g} != ""
258 # The m4 build of sendmail files doesn't like it if ',' is used
259 # anywhere in the path of it's files.
261 @echo "*** Error: path to source tree contains a comma ','"
266 @echo "--------------------------------------------------------------"
267 @echo ">>> Rebuilding the temporary build tree"
268 @echo "--------------------------------------------------------------"
269 .if !defined(NOCLEAN)
272 # XXX - These two can depend on any header file.
273 rm -f ${OBJTREE}${.CURDIR}/usr.bin/kdump/ioctl.c
274 rm -f ${OBJTREE}${.CURDIR}/usr.bin/truss/ioctl.c
276 .for _dir in ${USRDIRS}
277 mkdir -p ${WORLDTMP}/${_dir}
279 .for _dir in ${INCDIRS}
280 mkdir -p ${WORLDTMP}/usr/include/${_dir}
282 ln -sf ${.CURDIR}/sys ${WORLDTMP}
285 @echo "--------------------------------------------------------------"
286 @echo ">>> stage 1: bootstrap tools"
287 @echo "--------------------------------------------------------------"
288 cd ${.CURDIR}; ${BMAKE} bootstrap-tools
290 .if !defined(NOCLEAN)
292 @echo "--------------------------------------------------------------"
293 @echo ">>> stage 2: cleaning up the object tree"
294 @echo "--------------------------------------------------------------"
295 cd ${.CURDIR}; ${WMAKE} ${CLEANDIR:S/^/par-/}
299 @echo "--------------------------------------------------------------"
300 @echo ">>> stage 2: rebuilding the object tree"
301 @echo "--------------------------------------------------------------"
302 cd ${.CURDIR}; ${WMAKE} par-obj
305 @echo "--------------------------------------------------------------"
306 @echo ">>> stage 2: build tools"
307 @echo "--------------------------------------------------------------"
308 cd ${.CURDIR}; ${TMAKE} build-tools
311 @echo "--------------------------------------------------------------"
312 @echo ">>> stage 3: cross tools"
313 @echo "--------------------------------------------------------------"
314 cd ${.CURDIR}; ${XMAKE} cross-tools
317 @echo "--------------------------------------------------------------"
318 @echo ">>> stage 4: populating ${WORLDTMP}/usr/include"
319 @echo "--------------------------------------------------------------"
320 cd ${.CURDIR}; ${WMAKE} SHARED=symlinks par-includes
323 @echo "--------------------------------------------------------------"
324 @echo ">>> stage 4: building libraries"
325 @echo "--------------------------------------------------------------"
326 cd ${.CURDIR}; ${WMAKE} -DNOHTML -DNOINFO -DNOMAN -DNOFSCHG libraries
329 @echo "--------------------------------------------------------------"
330 @echo ">>> stage 4: make dependencies"
331 @echo "--------------------------------------------------------------"
332 cd ${.CURDIR}; ${WMAKE} par-depend
335 @echo "--------------------------------------------------------------"
336 @echo ">>> stage 4: building everything.."
337 @echo "--------------------------------------------------------------"
338 cd ${.CURDIR}; ${WMAKE} all
342 .if !defined(SUBDIR_OVERRIDE)
343 WMAKE_TGTS+= _worldtmp _bootstrap-tools
345 WMAKE_TGTS+= _cleanobj _obj _build-tools
346 .if !defined(SUBDIR_OVERRIDE)
347 WMAKE_TGTS+= _cross-tools
349 WMAKE_TGTS+= _includes _libraries _depend everything
351 buildworld: ${WMAKE_TGTS}
352 .ORDER: ${WMAKE_TGTS}
357 # Checks to be sure system is ready for installworld
360 .if !defined(NO_SENDMAIL)
361 @if ! `grep -q '^smmsp:' /etc/passwd`; then \
362 echo "ERROR: Required smmsp user is missing, see /usr/src/UPDATING."; \
365 @if ! `grep -q '^smmsp:' /etc/group`; then \
366 echo "ERROR: Required smmsp group is missing, see /usr/src/UPDATING."; \
370 .if ${TARGET_ARCH} == ${MACHINE_ARCH} && !defined(DISTDIR) && \
371 (!defined(DESTDIR) || empty(DESTDIR) || ${DESTDIR} == "/")
372 @echo "Checking to see if your booted kernel is fresh enough.."
373 ${.OBJDIR}/bin/sh/sh -c \
374 'echo "Testing installed kernel for new sigaction(2) syscall"'
381 # Distributes everything compiled by a `buildworld'.
385 # Installs everything compiled by a 'buildworld'.
387 distributeworld installworld: installcheck
388 mkdir -p ${INSTALLTMP}
389 for prog in [ awk cat chflags chmod chown date echo egrep find grep \
390 ln make mkdir mtree mv pwd_mkdb rm sed sh sysctl \
391 test true uname wc zic; do \
392 cp `which $$prog` ${INSTALLTMP}; \
394 cd ${.CURDIR}; ${IMAKE} re${.TARGET:S/world$//}
400 # If you have a build server, you can NFS mount the source and obj directories
401 # and do a 'make reinstall' on the *client* to install new binaries from the
402 # most recent server build.
405 @echo "--------------------------------------------------------------"
406 @echo ">>> Making hierarchy"
407 @echo "--------------------------------------------------------------"
408 cd ${.CURDIR}; ${MAKE} -f Makefile.inc1 hierarchy
410 @echo "--------------------------------------------------------------"
411 @echo ">>> Installing everything.."
412 @echo "--------------------------------------------------------------"
413 cd ${.CURDIR}; ${MAKE} -f Makefile.inc1 install
414 .if !defined(NOMAN) && !defined(NO_MAKEDB_RUN)
416 @echo "--------------------------------------------------------------"
417 @echo ">>> Rebuilding man page indices"
418 @echo "--------------------------------------------------------------"
419 cd ${.CURDIR}/share/man; ${MAKE} makedb
423 @echo "--------------------------------------------------------------"
424 @echo ">>> Distributing everything.."
425 @echo "--------------------------------------------------------------"
426 cd ${.CURDIR}; ${MAKE} -f Makefile.inc1 distribute
429 # buildkernel and installkernel
431 # Which kernels to build and/or install is specified by setting
432 # KERNCONF. If not defined a GENERIC kernel is built/installed.
433 # Only the existing (depending TARGET) config files are used
434 # for building kernels and only the first of these is designated
435 # as the one being installed.
437 # Note that we have to use TARGET instead of TARGET_ARCH when
438 # we're in kernel-land. Since only TARGET_ARCH is (expected) to
439 # be set to cross-build, we have to make sure TARGET is set
442 .if !defined(KERNCONF) && defined(KERNEL)
448 INSTKERNNAME?= kernel
450 KRNLSRCDIR= ${.CURDIR}/sys
451 KRNLCONFDIR= ${KRNLSRCDIR}/${TARGET}/conf
452 KRNLOBJDIR= ${OBJTREE}${KRNLSRCDIR}
453 KERNCONFDIR?= ${KRNLCONFDIR}
457 .for _kernel in ${KERNCONF}
458 .if exists(${KERNCONFDIR}/${_kernel})
459 BUILDKERNELS+= ${_kernel}
460 .if empty(INSTALLKERNEL)
461 INSTALLKERNEL= ${_kernel}
469 # Builds all kernels defined by BUILDKERNELS.
472 .if empty(BUILDKERNELS)
473 @echo "ERROR: Missing kernel configuration file(s) (${KERNCONF}).";
476 .if defined(KERNWARN)
477 @echo "--------------------------------------------------------------"
478 @echo ">>> WARNING: KERNEL= setting should be changed to KERNCONF="
479 @echo "--------------------------------------------------------------"
483 .for _kernel in ${BUILDKERNELS}
484 @echo "--------------------------------------------------------------"
485 @echo ">>> Kernel build for ${_kernel} started on `LC_ALL=C date`"
486 @echo "--------------------------------------------------------------"
487 @echo "===> ${_kernel}"
488 mkdir -p ${KRNLOBJDIR}
489 .if !defined(NO_KERNELCONFIG)
492 config ${CONFIGARGS} -d ${KRNLOBJDIR}/${_kernel} \
493 ${KERNCONFDIR}/${_kernel}
495 .if !defined(NOCLEAN) && !defined(NO_KERNELCLEAN)
496 cd ${KRNLOBJDIR}/${_kernel}; \
497 ${KMAKEENV} ${MAKE} KERNEL=${INSTKERNNAME} ${CLEANDIR}
499 cd ${KRNLOBJDIR}/${_kernel}; \
500 MAKESRCPATH=${KRNLSRCDIR}/dev/aic7xxx/aicasm \
501 ${MAKE} -DNO_CPU_CFLAGS -f ${KRNLSRCDIR}/dev/aic7xxx/aicasm/Makefile
502 cd ${KRNLOBJDIR}/${_kernel}; \
503 ${KMAKEENV} ${MAKE} KERNEL=${INSTKERNNAME} obj
504 # XXX - Gratuitously builds aicasm in the ``makeoptions NO_MODULES'' case.
505 .if !defined(MODULES_WITH_WORLD) && !defined(NO_MODULES) && exists(${KRNLSRCDIR}/modules)
506 .for target in obj depend all
507 cd ${.CURDIR}/sys/modules/aic7xxx/aicasm; \
508 MAKEOBJDIRPREFIX=${KRNLOBJDIR}/${_kernel}/modules \
509 ${MAKE} -DNO_CPU_CFLAGS ${target}
512 .if !defined(NO_KERNELDEPEND)
513 cd ${KRNLOBJDIR}/${_kernel}; \
514 ${KMAKEENV} ${MAKE} KERNEL=${INSTKERNNAME} depend -DNO_MODULES_OBJ
516 cd ${KRNLOBJDIR}/${_kernel}; \
517 ${KMAKEENV} ${MAKE} KERNEL=${INSTKERNNAME} all -DNO_MODULES_OBJ
518 @echo "--------------------------------------------------------------"
519 @echo ">>> Kernel build for ${_kernel} completed on `LC_ALL=C date`"
520 @echo "--------------------------------------------------------------"
526 # Install the kernel defined by INSTALLKERNEL
528 installkernel reinstallkernel:
529 .if empty(INSTALLKERNEL)
530 @echo "ERROR: No kernel \"${KERNCONF}\" to install."
533 cd ${KRNLOBJDIR}/${INSTALLKERNEL}; \
534 ${CROSSENV} PATH=${TMPPATH} \
535 ${MAKE} KERNEL=${INSTKERNNAME} ${.TARGET:S/kernel$//}
540 # Update the source tree, by running sup and/or running cvs to update to the
544 .if defined(SUP_UPDATE)
545 @echo "--------------------------------------------------------------"
546 @echo ">>> Running ${SUP}"
547 @echo "--------------------------------------------------------------"
549 @${SUP} ${SUPFLAGS} ${SUPFILE}
551 .if defined(SUPFILE1)
552 @${SUP} ${SUPFLAGS} ${SUPFILE1}
554 .if defined(SUPFILE2)
555 @${SUP} ${SUPFLAGS} ${SUPFILE2}
557 .if defined(PORTSSUPFILE) && !defined(NO_PORTSUPDATE)
558 @${SUP} ${SUPFLAGS} ${PORTSSUPFILE}
560 .if defined(DOCSUPFILE) && !defined(NO_DOCUPDATE)
561 @${SUP} ${SUPFLAGS} ${DOCSUPFILE}
564 .if defined(CVS_UPDATE)
565 @echo "--------------------------------------------------------------"
566 @echo ">>> Updating ${.CURDIR} from cvs repository" ${CVSROOT}
567 @echo "--------------------------------------------------------------"
568 cd ${.CURDIR}; ${CVS} -q update -A -P -d
574 # Build most of the user binaries on the existing system libs and includes.
577 @echo "--------------------------------------------------------------"
578 @echo ">>> Building programs only"
579 @echo "--------------------------------------------------------------"
580 .for _dir in bin sbin libexec usr.bin usr.sbin gnu/usr.bin gnu/usr.sbin
581 cd ${.CURDIR}/${_dir}; ${MAKE} DIRPRFX=${_dir}/ all
587 # Install the binaries built by the 'most' target. This does not include
588 # libraries or include files.
591 @echo "--------------------------------------------------------------"
592 @echo ">>> Installing programs only"
593 @echo "--------------------------------------------------------------"
594 .for _dir in bin sbin libexec usr.bin usr.sbin gnu/usr.bin gnu/usr.sbin
595 cd ${.CURDIR}/${_dir}; ${MAKE} DIRPRFX=${_dir}/ install
599 # ------------------------------------------------------------------------
601 # From here onwards are utility targets used by the 'make world' and
602 # related targets. If your 'world' breaks, you may like to try to fix
603 # the problem and manually run the following targets to attempt to
604 # complete the build. Beware, this is *not* guaranteed to work, you
605 # need to have a pretty good grip on the current state of the system
606 # to attempt to manually finish it. If in doubt, 'make world' again.
610 # bootstrap-tools: Build tools needed for compatibility
612 .if exists(${.CURDIR}/games) && !defined(NOGAMES)
613 _strfile= games/fortune/strfile
617 .for _tool in ${_strfile} usr.bin/yacc usr.bin/colldef \
618 usr.bin/makewhatis usr.bin/rpcgen usr.bin/uudecode \
619 usr.bin/xargs usr.bin/xinstall \
620 usr.sbin/config usr.sbin/kbdcontrol \
621 gnu/usr.bin/gperf gnu/usr.bin/groff gnu/usr.bin/texinfo
622 ${ECHODIR} "===> ${_tool}"; \
623 cd ${.CURDIR}/${_tool}; \
624 ${MAKE} DIRPRFX=${_tool}/ obj; \
625 ${MAKE} DIRPRFX=${_tool}/ depend; \
626 ${MAKE} DIRPRFX=${_tool}/ all; \
627 ${MAKE} DIRPRFX=${_tool}/ DESTDIR=${MAKEOBJDIRPREFIX} install
631 # build-tools: Build special purpose build tools
633 .if defined(MODULES_WITH_WORLD) && exists(${KRNLSRCDIR}/modules)
634 _aicasm= sys/modules/aic7xxx/aicasm
637 .if exists(${.CURDIR}/share) && !defined(NOSHARE)
638 _share= share/syscons/scrnmaps
641 .if !defined(NO_FORTRAN)
642 _fortran= gnu/usr.bin/cc/f771
645 .if exists(${.CURDIR}/kerberosIV) && exists(${.CURDIR}/crypto) && \
646 !defined(NOCRYPT) && defined(MAKE_KERBEROS4)
647 _libroken4= kerberosIV/lib/libroken
650 .if exists(${.CURDIR}/kerberos5) && exists(${.CURDIR}/crypto) && \
651 !defined(NOCRYPT) && defined(MAKE_KERBEROS5)
652 _libkrb5= kerberos5/lib/libroken kerberos5/lib/libvers \
653 kerberos5/lib/libasn1 kerberos5/lib/libhdb kerberos5/lib/libsl
657 .for _tool in bin/csh bin/sh gnu/usr.bin/cc/cc_tools ${_fortran} \
658 ${_libroken4} ${_libkrb5} lib/libncurses ${_share} \
659 ${_aicasm} usr.bin/awk usr.bin/file usr.sbin/sysinstall
660 ${ECHODIR} "===> ${_tool}"; \
661 cd ${.CURDIR}/${_tool}; \
662 ${MAKE} DIRPRFX=${_tool}/ obj; \
663 ${MAKE} DIRPRFX=${_tool}/ build-tools
667 # cross-tools: Build cross-building tools
669 .if ${TARGET_ARCH} == "alpha" && ${MACHINE_ARCH} != "alpha"
670 _elf2exe= usr.sbin/elf2exe
673 .if ${TARGET_ARCH} == "i386" && ${MACHINE_ARCH} != "i386"
674 _btxld= usr.sbin/btxld
677 .if ${TARGET_ARCH} == "sparc64"
678 _elf2aout= usr.bin/elf2aout
681 _xlint= usr.bin/xlint/lint1 usr.bin/xlint/lint2 usr.bin/xlint/xlint
684 .for _tool in ${_btxld} ${_elf2aout} ${_elf2exe} \
685 gnu/usr.bin/binutils usr.sbin/crunch/crunchide \
686 gnu/usr.bin/cc ${_xlint}
687 ${ECHODIR} "===> ${_tool}"; \
688 cd ${.CURDIR}/${_tool}; \
689 ${MAKE} DIRPRFX=${_tool}/ obj; \
690 ${MAKE} DIRPRFX=${_tool}/ depend; \
691 ${MAKE} DIRPRFX=${_tool}/ all; \
692 ${MAKE} DIRPRFX=${_tool}/ DESTDIR=${MAKEOBJDIRPREFIX} install
696 # hierarchy - ensure that all the needed directories are present
699 cd ${.CURDIR}/etc; ${MAKE} distrib-dirs
702 # libraries - build all libraries, and install them under ${DESTDIR}.
704 # The list of libraries with dependents (${_prebuild_libs}) and their
705 # interdependencies (__L) are built automatically by the
706 # ${.CURDIR}/tools/make_libdeps.sh script.
710 ${MAKE} -f Makefile.inc1 _startup_libs; \
711 ${MAKE} -f Makefile.inc1 _prebuild_libs; \
712 ${MAKE} -f Makefile.inc1 _generic_libs;
714 # These dependencies are not automatically generated:
716 # gnu/lib/csu, gnu/lib/libgcc and lib/csu must be built before all
717 # shared libraries for ELF.
719 _startup_libs= gnu/lib/csu gnu/lib/libgcc
720 .if exists(${.CURDIR}/lib/csu/${MACHINE_ARCH}-elf)
721 _startup_libs+= lib/csu/${MACHINE_ARCH}-elf
723 _startup_libs+= lib/csu/${MACHINE_ARCH}
728 _generic_libs= gnu/lib
730 .if !defined(NOCRYPT) && defined(MAKE_KERBEROS5)
731 _prebuild_libs+= kerberos5/lib/libasn1
732 _prebuild_libs+= kerberos5/lib/libgssapi
733 _prebuild_libs+= kerberos5/lib/libkrb5
734 _prebuild_libs+= kerberos5/lib/libroken
735 _generic_libs+= kerberos5/lib
738 .if !defined(NOCRYPT) && defined(MAKE_KERBEROS4)
739 _prebuild_libs+= kerberosIV/lib/libkrb
740 kerberosIV/lib/libkrb__L: lib/libcrypt__L
741 _generic_libs+= kerberosIV/lib
744 _prebuild_libs+= lib/libcom_err lib/libcrypt lib/libkvm lib/libmd \
745 lib/libncurses lib/libopie lib/libpam lib/libradius \
747 lib/libsbuf lib/libtacplus lib/libutil lib/libypclnt \
750 lib/libopie__L lib/libradius__L lib/libtacplus__L: lib/libmd__L
751 lib/libypclnt__L: lib/librpcsvc__L
755 .if !defined(NOCRYPT) && !defined(NOSECURE)
756 .if !defined(NO_OPENSSL)
757 _prebuild_libs+= secure/lib/libcrypto secure/lib/libssl
758 .if !defined(NO_OPENSSH)
759 _prebuild_libs+= secure/lib/libssh
760 secure/lib/libssh__L: secure/lib/libcrypto__L lib/libz__L
763 _generic_libs+= secure/lib
766 _generic_libs+= usr.bin/lex/lib
768 .if ${MACHINE_ARCH} == "i386"
769 _generic_libs+= usr.sbin/pcvt/keycap
772 .for _lib in ${_startup_libs} ${_prebuild_libs:Nlib/libpam} ${_generic_libs}
774 .if exists(${.CURDIR}/${_lib})
775 ${ECHODIR} "===> ${_lib}"; \
776 cd ${.CURDIR}/${_lib}; \
777 ${MAKE} DIRPRFX=${_lib}/ depend; \
778 ${MAKE} DIRPRFX=${_lib}/ all; \
779 ${MAKE} DIRPRFX=${_lib}/ install
783 # libpam is special: we need to build static PAM modules before
784 # static PAM library, and dynamic PAM library before dynamic PAM
786 lib/libpam__L: .PHONY
787 ${ECHODIR} "===> lib/libpam"; \
788 cd ${.CURDIR}/lib/libpam; \
789 ${MAKE} DIRPRFX=lib/libpam/ depend; \
790 ${MAKE} DIRPRFX=lib/libpam/ -D_NO_LIBPAM_SO_YET all; \
791 ${MAKE} DIRPRFX=lib/libpam/ -D_NO_LIBPAM_SO_YET install
793 _startup_libs: ${_startup_libs:S/$/__L/}
794 _prebuild_libs: ${_prebuild_libs:S/$/__L/}
795 _generic_libs: ${_generic_libs:S/$/__L/}
797 .for __target in clean cleandepend cleandir depend includes obj
798 .for entry in ${SUBDIR}
799 ${entry}.${__target}__D: .PHONY
800 @if test -d ${.CURDIR}/${entry}.${MACHINE_ARCH}; then \
801 ${ECHODIR} "===> ${DIRPRFX}${entry}.${MACHINE_ARCH}"; \
802 edir=${entry}.${MACHINE_ARCH}; \
803 cd ${.CURDIR}/$${edir}; \
805 ${ECHODIR} "===> ${DIRPRFX}${entry}"; \
807 cd ${.CURDIR}/$${edir}; \
809 ${MAKE} ${__target} DIRPRFX=${DIRPRFX}$${edir}/
811 par-${__target}: ${SUBDIR:S/$/.${__target}__D/}
814 .include <bsd.subdir.mk>