# $Id: Makefile.alpha,v 1.13 1998/05/12 21:04:53 jb Exp $ # # NOTE: # # This is a makefile for use while porting FreeBSD to the Alpha # architecture. It is based on src/Makefile and is included by # it rather than filling it with a lot of temporary crud. # # To use this Makefile on a NetBSD/Alpha 1.3 system, load the # entire FreeBSD source tree, or mount /usr/src via NFS. From # /usr/src type: # # make -m /usr/src/share/mk buildworld # # and you're away. The bootstrap is pretty much complete now, with # all tools (except the lorder script) being built from FreeBSD # source. If you have lots of disk space (like 1G) for the obj # tree, then define IHAVELOTSOFDISKSPACE in your environment before # running this script. Without this, the bootstrap will complete # with all the tools, libraries and headers in the /usr/obj/usr/src/tmp # tree. Then you can build the rest bit by bit by setting the DIRS # environment variable to the list of directories you want to build, # then running 'make dirs". So, to make /usr/src/usr.bin, # export DIRS=usr.bin; cd /usr/src; make dirs # The programs will build and install in the /usr/obj/usr/src/tmp # tree. You should run them from there to see if they work. And just # because they compile, don't assume they work. 8-) # # Warning: This build is not supposed to clobber anything on the # ======= system you are building on, but you should consider what # ======= you would do if that happened. # SUBDIR = share/info lib bin gnu libexec sbin share sys usr.bin \ usr.sbin .if exists(secure) && !defined(NOCRYPT) && !defined(NOSECURE) SUBDIR+= secure .endif OBJDIR = obj CLEANDIR= cleandir .MAKEFLAGS:= ${.MAKEFLAGS} -m ${.CURDIR}/share/mk # # While building tools for bootstrapping, we dont need to waste time on # profiled libraries or man pages. This speeds things up somewhat. # MK_FLAGS= -DNOINFO -DNOMAN -DNOPROFILE -DNOPIC -DNOLIBC_R .if defined(MAKEOBJDIRPREFIX) WORLDTMP= ${MAKEOBJDIRPREFIX}${.CURDIR}/tmp .else WORLDTMP= /usr/obj${.CURDIR}/tmp .endif STRICTTMPPATH= ${WORLDTMP}/sbin:${WORLDTMP}/usr/sbin:${WORLDTMP}/bin:${WORLDTMP}/usr/bin TMPPATH= ${STRICTTMPPATH}:${PATH} # XXX COMPILER_PATH is needed for finding cc1, ld and as # XXX GCC_EXEC_PREFIX is for *crt.o. It is probably unnecssary now # tbat LIBRARY_PATH is set. We still can't use -nostdlib, since gcc # wouldn't link *crt.o or libgcc if it were used. # XXX LD_LIBRARY_PATH is for ld.so. It is also used by ld, although we don't # want that - all compile-time library paths should be resolved by gcc. # It fails for set[ug]id executables (are any used?). COMPILER_ENV= BISON_SIMPLE=${WORLDTMP}/usr/share/misc/bison.simple \ COMPILER_PATH=${WORLDTMP}/usr/libexec:${WORLDTMP}/usr/bin \ GCC_EXEC_PREFIX=${WORLDTMP}/usr/lib/ \ LD_LIBRARY_PATH=${WORLDTMP}${SHLIBDIR} \ LIBRARY_PATH=${WORLDTMP}${SHLIBDIR}:${WORLDTMP}/usr/lib BMAKEENV= PATH=${TMPPATH} ${COMPILER_ENV} NOEXTRADEPEND=t \ LDFLAGS=-static LMAKEENV= PATH=${TMPPATH} ${COMPILER_ENV} CC='cc -nostdinc' \ LDFLAGS=-static \ MKDEP_CPP='${WORLDTMP}/usr/bin/cc -E -nostdinc' XMAKEENV= PATH=${STRICTTMPPATH} ${COMPILER_ENV} \ CC='cc -nostdinc' MKDEP_CPP='${WORLDTMP}/usr/bin/cc -nostdinc -E' # used to compile and install 'make' in temporary build tree IBMAKE= ${BMAKEENV} ${MAKE} DESTDIR=${WORLDTMP} # bootstrap make BMAKE= ${BMAKEENV} ${WORLDTMP}/usr/bin/${MAKE} DESTDIR=${WORLDTMP} # library make LMAKE= ${LMAKEENV} ${WORLDTMP}/usr/bin/${MAKE} DESTDIR=${WORLDTMP} # cross make used for compilation XMAKE= ${XMAKEENV} ${WORLDTMP}/usr/bin/${MAKE} DESTDIR=${WORLDTMP} # cross make used for final installation IXMAKE= ${XMAKEENV} ${WORLDTMP}/usr/bin/${MAKE} # # buildworld # # Attempt to rebuild the entire system, with reasonable chance of # success, regardless of how old your existing system is. # buildworld: @echo " Warning: This build is not supposed to clobber anything on the" @echo " ======= system you are building on, but you should consider what" @echo " ======= you would do if that happened." @echo @echo " You will need to manually edit /etc/group on your NetBSD" @echo " system to include any missing groups in FreeBSD's" @echo " src/etc/group." @echo @echo " You will need to manually add the man user." @echo @echo " ABORT NOW IF UNSURE!" @sleep 10 @echo " OK, here we go......" mkdir -p ${WORLDTMP} @echo "--------------------------------------------------------------" @echo " Cleaning up the temporary build tree" @echo "--------------------------------------------------------------" chflags -R noschg ${WORLDTMP}/ rm -rf ${WORLDTMP} @echo @echo "--------------------------------------------------------------" @echo " Install the FreeBSD mkdep ('cause the NetBSD one isn't good enough!)" @echo "--------------------------------------------------------------" mkdir -p ${WORLDTMP}/usr/bin @cd ${.CURDIR}/usr.bin/mkdep && \ ${IBMAKE} -I${.CURDIR}/share/mk ${MK_FLAGS} install @echo @echo @echo "--------------------------------------------------------------" @echo " Making a FreeBSD make using the NetBSD one" @echo "--------------------------------------------------------------" @cd ${.CURDIR}/usr.bin/make && \ ${IBMAKE} -I${.CURDIR}/share/mk ${CLEANDIR} ${OBJDIR} @cd ${.CURDIR}/usr.bin/make && \ ${IBMAKE} -I${.CURDIR}/share/mk ${MK_FLAGS} depend && \ ${IBMAKE} -I${.CURDIR}/share/mk ${MK_FLAGS} all && \ ${IBMAKE} -I${.CURDIR}/share/mk ${MK_FLAGS} install && \ ${IBMAKE} -I${.CURDIR}/share/mk ${MK_FLAGS} ${CLEANDIR} ${OBJDIR} @echo @echo "--------------------------------------------------------------" @echo " Making a FreeBSD find which knows the -L argument" @echo "--------------------------------------------------------------" @cd ${.CURDIR}/usr.bin/find && \ ${IBMAKE} -I${.CURDIR}/share/mk ${CLEANDIR} ${OBJDIR} @cd ${.CURDIR}/usr.bin/find && \ ${IBMAKE} -I${.CURDIR}/share/mk ${MK_FLAGS} depend && \ ${IBMAKE} -I${.CURDIR}/share/mk ${MK_FLAGS} all && \ ${IBMAKE} -I${.CURDIR}/share/mk ${MK_FLAGS} install && \ ${IBMAKE} -I${.CURDIR}/share/mk ${MK_FLAGS} ${CLEANDIR} ${OBJDIR} @echo @echo "--------------------------------------------------------------" @echo " Making hierarchy like normal" @echo "--------------------------------------------------------------" @cd ${.CURDIR} && ${BMAKE} hierarchy @echo @echo "--------------------------------------------------------------" @echo " Rebuilding the obj tree like normal" @echo "--------------------------------------------------------------" @cd ${.CURDIR} && ${BMAKE} par-obj @echo @echo "--------------------------------------------------------------" @echo " Rebuilding FreeBSD bootstrap tools using the NetBSD ones" @echo "--------------------------------------------------------------" @cd ${.CURDIR} && ${BMAKE} bootstrap @echo @echo "--------------------------------------------------------------" @echo " Rebuilding FreeBSD tools necessary to build the include files" @echo "--------------------------------------------------------------" @cd ${.CURDIR} && ${BMAKE} include-tools @echo @echo "--------------------------------------------------------------" @echo " Rebuilding FreeBSD tools needed to build the libraries" @echo "--------------------------------------------------------------" @cd ${.CURDIR} && ${BMAKE} lib-tools @echo @echo "--------------------------------------------------------------" @echo " AT THIS POINT, THE TEMPORARY TREE IS SUPPOSED TO HAVE ALL" @echo " THE TOOLS TO BUILD THE ENTIRE FreeBSD TREE USING FreeBSD" @echo " HEADER FILES" @echo @echo " Rebuilding /usr/include" @echo "--------------------------------------------------------------" @cd ${.CURDIR} && SHARED=copies ${BMAKE} includes @echo @echo "--------------------------------------------------------------" @echo " Rebuilding /usr/lib" @echo "--------------------------------------------------------------" @cd ${.CURDIR} && ${LMAKE} libraries @echo @echo "--------------------------------------------------------------" @echo " Rebuilding all other tools needed to build the world" @echo "--------------------------------------------------------------" @cd ${.CURDIR} && ${LMAKE} build-tools @echo @echo "--------------------------------------------------------------" @echo " Rebuilding all tools with the new FreeBSD tools to see" @echo " if they work..." @echo "--------------------------------------------------------------" @cd ${.CURDIR} && ${XMAKE} build-tools .if IHAVELOTSOFDISKSPACE @echo @echo "--------------------------------------------------------------" @echo " Rebuilding dependencies" @echo "--------------------------------------------------------------" @cd ${.CURDIR} && ${XMAKE} par-depend @echo @echo "--------------------------------------------------------------" @echo " Building everything.." @echo "--------------------------------------------------------------" @cd ${.CURDIR} && ${XMAKE} all && ${XMAKE} install .else @echo "Now build specific directories: export DIRS=foo; make dirs" .endif dirs: @echo DIRS = ${DIRS} .for d in ${DIRS} cd ${.CURDIR}/$d && ${XMAKE} obj && \ ${XMAKE} depend && \ ${XMAKE} all && \ ${XMAKE} install .endfor dirs_clean: @echo DIRS = ${DIRS} .for d in ${DIRS} cd ${.CURDIR}/$d && ${XMAKE} ${CLEANDIR} ${OBJDIR} .endfor # # ------------------------------------------------------------------------ # # From here onwards are utility targets used by the 'make world' and # related targets. If your 'world' breaks, you may like to try to fix # the problem and manually run the following targets to attempt to # complete the build. Beware, this is *not* guaranteed to work, you # need to have a pretty good grip on the current state of the system # to attempt to manually finish it. If in doubt, 'make world' again. # # # heirarchy - ensure that all the needed directories are present # hierarchy: cd ${.CURDIR}/etc && ${MAKE} distrib-dirs # # bootstrap - [re]build tools needed to run the actual build, this includes # tools needed by 'make depend', as some tools are needed to generate source # for the dependency information to be gathered from. # bootstrap: cd ${.CURDIR}/usr.bin/make && ${MAKE} ${MK_FLAGS} depend && \ ${MAKE} ${MK_FLAGS} all && \ ${MAKE} ${MK_FLAGS} -B install ${CLEANDIR} ${OBJDIR} cd ${.CURDIR}/usr.bin/xinstall && \ ${MAKE} ${MK_FLAGS} ${OBJDIR} depend && \ ${MAKE} ${MK_FLAGS} all && \ ${MAKE} ${MK_FLAGS} -B install ${CLEANDIR} ${OBJDIR} cd ${.CURDIR}/usr.bin/lex && \ ${MAKE} ${MK_FLAGS} ${OBJDIR} bootstrap && \ ${MAKE} ${MK_FLAGS} depend && \ ${MAKE} ${MK_FLAGS} -DNOLIB all && \ ${MAKE} ${MK_FLAGS} -DNOLIB -B install ${CLEANDIR} cd ${.CURDIR}/usr.bin/lex && ${MAKE} obj # # include-tools - generally the same as 'bootstrap', except that it's for # things that are specifically needed to generate include files. # # XXX should be merged with bootstrap, it's not worth keeeping them separate. # Well, maybe it is now. We force 'cleandepend' here to avoid dependencies # on cleaned away headers in ${WORLDTMP}. # include-tools: cd ${.CURDIR}/usr.bin/rpcgen && ${MAKE} -B cleandepend depend && \ ${MAKE} ${MK_FLAGS} all && \ ${MAKE} ${MK_FLAGS} -B install ${CLEANDIR} ${OBJDIR} # # includes - possibly generate and install the include files. # includes: cd ${.CURDIR}/include && ${MAKE} obj && \ ${MAKE} -B all install cd ${.CURDIR}/gnu/include && ${MAKE} install cd ${.CURDIR}/gnu/lib/libmp && ${MAKE} beforeinstall cd ${.CURDIR}/gnu/lib/libobjc && ${MAKE} beforeinstall cd ${.CURDIR}/gnu/lib/libreadline && ${MAKE} beforeinstall cd ${.CURDIR}/gnu/lib/libregex && ${MAKE} beforeinstall cd ${.CURDIR}/gnu/lib/libstdc++ && ${MAKE} beforeinstall cd ${.CURDIR}/gnu/lib/libg++ && ${MAKE} beforeinstall cd ${.CURDIR}/gnu/lib/libdialog && ${MAKE} beforeinstall cd ${.CURDIR}/gnu/lib/libgmp && ${MAKE} beforeinstall .if exists(secure) && !defined(NOCRYPT) && !defined(NOSECURE) cd ${.CURDIR}/secure/lib/libdes && ${MAKE} beforeinstall .endif .if exists(kerberosIV) && !defined(NOCRYPT) && defined(MAKE_KERBEROS4) cd ${.CURDIR}/kerberosIV/lib/libacl && ${MAKE} beforeinstall cd ${.CURDIR}/kerberosIV/lib/libkadm && ${MAKE} beforeinstall cd ${.CURDIR}/kerberosIV/lib/libkafs && ${MAKE} beforeinstall cd ${.CURDIR}/kerberosIV/lib/libkdb && ${MAKE} beforeinstall cd ${.CURDIR}/kerberosIV/lib/libkrb && ${MAKE} beforeinstall cd ${.CURDIR}/kerberosIV/lib/libtelnet && ${MAKE} beforeinstall .else cd ${.CURDIR}/lib/libtelnet && ${MAKE} beforeinstall .endif cd ${.CURDIR}/lib/csu/${MACHINE_ARCH} && ${MAKE} beforeinstall cd ${.CURDIR}/lib/libalias && ${MAKE} beforeinstall cd ${.CURDIR}/lib/libc && ${MAKE} beforeinstall cd ${.CURDIR}/lib/libcurses && ${MAKE} beforeinstall cd ${.CURDIR}/lib/libdisk && ${MAKE} beforeinstall cd ${.CURDIR}/lib/libedit && ${MAKE} beforeinstall cd ${.CURDIR}/lib/libftpio && ${MAKE} beforeinstall cd ${.CURDIR}/lib/libmd && ${MAKE} beforeinstall cd ${.CURDIR}/lib/libmytinfo && ${MAKE} beforeinstall cd ${.CURDIR}/lib/libncurses && ${MAKE} beforeinstall .if !defined(WANT_CSRG_LIBM) cd ${.CURDIR}/lib/msun && ${MAKE} beforeinstall .endif cd ${.CURDIR}/lib/libopie && ${MAKE} beforeinstall cd ${.CURDIR}/lib/libpcap && ${MAKE} beforeinstall cd ${.CURDIR}/lib/librpcsvc && ${MAKE} beforeinstall cd ${.CURDIR}/lib/libskey && ${MAKE} beforeinstall .if !defined(NOTCL) && exists (${.CURDIR}/contrib/tcl) && \ exists(${.CURDIR}/usr.bin/tclsh) && exists (${.CURDIR}/lib/libtcl) cd ${.CURDIR}/lib/libtcl && ${MAKE} installhdrs .endif cd ${.CURDIR}/lib/libtermcap && ${MAKE} beforeinstall cd ${.CURDIR}/lib/libcom_err && ${MAKE} beforeinstall cd ${.CURDIR}/lib/libss && ${MAKE} hdrs beforeinstall cd ${.CURDIR}/lib/libscsi && ${MAKE} beforeinstall cd ${.CURDIR}/lib/libutil && ${MAKE} beforeinstall cd ${.CURDIR}/lib/libvgl && ${MAKE} beforeinstall cd ${.CURDIR}/lib/libz && ${MAKE} beforeinstall cd ${.CURDIR}/usr.bin/f2c && ${MAKE} beforeinstall cd ${.CURDIR}/usr.bin/lex && ${MAKE} beforeinstall # # lib-tools - build tools to compile and install the libraries. # lib-tools: @echo "--------------------------------------------------------------" @echo " Link to things we haven't fixed yet..." @echo "--------------------------------------------------------------" @-rm -f ${WORLDTMP}/usr/bin/lorder ln -s /usr/bin/lorder ${WORLDTMP}/usr/bin/lorder @echo @echo "--------------------------------------------------------------" @echo " Build tools to compile and install the libraries...." @echo "--------------------------------------------------------------" .for d in \ gnu/usr.bin/gperf \ gnu/usr.bin/bison \ gnu/usr.bin/binutils \ usr.bin/tsort \ gnu/usr.bin/cc \ lib/csu/${MACHINE_ARCH} \ usr.bin/compile_et \ usr.bin/lex/lib \ usr.bin/join \ usr.bin/mk_cmds \ usr.bin/uudecode \ gnu/usr.bin/bc \ gnu/usr.bin/groff cd ${.CURDIR}/$d && ${MAKE} obj && \ ${MAKE} ${MK_FLAGS} -DBOOTSTRAP depend && \ ${MAKE} ${MK_FLAGS} -DBOOTSTRAP all && \ ${MAKE} ${MK_FLAGS} -B install ${CLEANDIR} ${OBJDIR} .endfor # # libraries - build and install the libraries # libraries: @echo "-----------------------" @echo "Making ${.CURDIR}/lib/csu/${MACHINE_ARCH}" @cd ${.CURDIR}/lib/csu/${MACHINE_ARCH} && ${MAKE} depend && \ ${MAKE} ${MK_FLAGS} all && \ ${MAKE} ${MK_FLAGS} -B install ${CLEANDIR} ${OBJDIR} @echo "-----------------------" @echo "Making ${.CURDIR}/lib/libc" @cd ${.CURDIR}/lib/libc && ${MAKE} depend && \ ${MAKE} ${MK_FLAGS} all && \ ${MAKE} ${MK_FLAGS} -B install ${CLEANDIR} ${OBJDIR} @echo "-----------------------" @echo "Making ${.CURDIR}/lib/libcompat" @cd ${.CURDIR}/lib/libcompat && ${MAKE} depend && \ ${MAKE} ${MK_FLAGS} all && \ ${MAKE} ${MK_FLAGS} -B install ${CLEANDIR} ${OBJDIR} @echo "-----------------------" @echo "Making ${.CURDIR}/lib/libutil" @cd ${.CURDIR}/lib/libutil && ${MAKE} depend && \ ${MAKE} ${MK_FLAGS} all && \ ${MAKE} ${MK_FLAGS} -B install ${CLEANDIR} ${OBJDIR} @echo "-----------------------" @echo "Making ${.CURDIR}/lib/libmytinfo" @cd ${.CURDIR}/lib/libmytinfo && ${MAKE} depend && \ ${MAKE} ${MK_FLAGS} all && \ ${MAKE} ${MK_FLAGS} -B install ${CLEANDIR} ${OBJDIR} @echo "-----------------------" @echo "Making ${.CURDIR}/lib/libncurses" @cd ${.CURDIR}/lib/libncurses && ${MAKE} depend && \ ${MAKE} ${MK_FLAGS} all && \ ${MAKE} ${MK_FLAGS} -B install ${CLEANDIR} ${OBJDIR} @echo "-----------------------" @echo "Making ${.CURDIR}/lib/libtermcap" @cd ${.CURDIR}/lib/libtermcap && ${MAKE} depend && \ ${MAKE} ${MK_FLAGS} all && \ ${MAKE} ${MK_FLAGS} -B install ${CLEANDIR} ${OBJDIR} @echo "-----------------------" @echo "Making ${.CURDIR}/gnu/lib" @cd ${.CURDIR}/gnu/lib && ${MAKE} ${CLEANDIR} ${OBJDIR} depend && \ ${MAKE} ${MK_FLAGS} all && \ ${MAKE} ${MK_FLAGS} -B install ${CLEANDIR} ${OBJDIR} .if exists(secure) && !defined(NOCRYPT) && !defined(NOSECURE) @echo "-----------------------" @echo "Making ${.CURDIR}/secure/lib" @cd ${.CURDIR}/secure/lib && ${MAKE} ${OBJDIR} depend && \ ${MAKE} ${MK_FLAGS} all && \ ${MAKE} ${MK_FLAGS} -B install ${CLEANDIR} ${OBJDIR} .endif @echo "-----------------------" @echo "Making ${.CURDIR}/lib" @cd ${.CURDIR}/lib && ${MAKE} depend && \ ${MAKE} ${MK_FLAGS} all && \ ${MAKE} ${MK_FLAGS} -B install ${CLEANDIR} ${OBJDIR} @echo "-----------------------" @echo "Making ${.CURDIR}/usr.bin/lex/lib" @cd ${.CURDIR}/usr.bin/lex/lib && ${MAKE} depend && \ ${MAKE} ${MK_FLAGS} all && \ ${MAKE} ${MK_FLAGS} -B install ${CLEANDIR} ${OBJDIR} .if exists(kerberosIV) && !defined(NOCRYPT) && defined(MAKE_KERBEROS4) @echo "-----------------------" @echo "Making ${.CURDIR}/kerberosIV/lib" @cd ${.CURDIR}/kerberosIV/lib && ${MAKE} depend && \ ${MAKE} ${MK_FLAGS} all && \ ${MAKE} ${MK_FLAGS} -B install ${CLEANDIR} ${OBJDIR} .endif # # build-tools - build and install any other tools needed to complete the # compile and install. # build-tools: .for d in \ usr.bin/make \ usr.bin/xinstall \ usr.bin/lex \ gnu/usr.bin/gperf \ gnu/usr.bin/bison \ gnu/usr.bin/binutils \ usr.bin/tsort \ gnu/usr.bin/cc \ usr.bin/env \ usr.bin/compile_et \ usr.bin/lex/lib \ usr.bin/mk_cmds \ usr.bin/uudecode \ bin/sh \ bin/cat \ bin/chmod \ bin/cp \ bin/date \ bin/dd \ bin/echo \ bin/expr \ bin/hostname \ bin/ln \ bin/ls \ bin/mkdir \ bin/mv \ bin/rm \ bin/test \ share/info \ usr.bin/basename \ usr.bin/cap_mkdb \ usr.bin/chflags \ usr.bin/cmp \ usr.bin/col \ usr.bin/expand \ usr.bin/file2c \ usr.bin/find \ usr.bin/gencat \ usr.bin/m4 \ usr.bin/mkdep \ usr.bin/paste \ usr.bin/printf \ usr.bin/sed \ usr.bin/soelim \ usr.bin/touch \ usr.bin/tr \ usr.bin/true \ usr.bin/uname \ usr.bin/uuencode \ usr.bin/vgrind \ usr.bin/vi \ usr.bin/wc \ usr.bin/yacc \ usr.sbin/chown \ usr.sbin/mtree \ usr.sbin/zic \ gnu/usr.bin/awk \ gnu/usr.bin/grep \ gnu/usr.bin/gzip \ gnu/usr.bin/sort \ gnu/usr.bin/texinfo \ gnu/usr.bin/perl/perl @echo "---------------------------" @echo "Making ${.CURDIR}/$d" @cd ${.CURDIR}/$d && ${MAKE} ${CLEANDIR} ${OBJDIR} && \ ${MAKE} depend && \ ${MAKE} ${MK_FLAGS} all && \ ${MAKE} ${MK_FLAGS} -B install ${CLEANDIR} ${OBJDIR} .endfor .for __target in clean cleandir obj depend .for entry in ${SUBDIR} ${entry}.${__target}__D: .PHONY if test -d ${.CURDIR}/${entry}.${MACHINE_ARCH}; then \ ${ECHODIR} "===> ${DIRPRFX}${entry}.${MACHINE_ARCH}"; \ edir=${entry}.${MACHINE_ARCH}; \ cd ${.CURDIR}/$${edir}; \ else \ ${ECHODIR} "===> ${DIRPRFX}${entry}"; \ edir=${entry}; \ cd ${.CURDIR}/$${edir}; \ fi; \ ${MAKE} ${__target} DIRPRFX=${DIRPRFX}$${edir}/ .endfor par-${__target}: ${SUBDIR:S/$/.${__target}__D/} .endfor