# $Id$ # # 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. Don't expect the build to complete. It will fail # where the porting effort is up to. This will be somewhere in the # build of the bootstrap libraries that are needed for the second # set of bootstrap tools. The build will deliberately skip the # build of libc because that involves considerable porting effort. # The build will also create symbolic links to several of the GNU # tools that are currently being ported/imported to FreeBSD. # # 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 OBJDIR = obj .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 .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 LMAKEENV= PATH=${TMPPATH} ${COMPILER_ENV} CC='cc -nostdinc' \ MKDEP_CPP='cc -E -nostdinc' XMAKEENV= PATH=${STRICTTMPPATH} ${COMPILER_ENV} \ CC='cc -nostdinc' MKDEP_CPP='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 " ABORT NOW IF UNSURE!" @sleep 10 @echo " OK, here we go......" @echo "--------------------------------------------------------------" @echo " Cleaning up the temporary build tree" @echo "--------------------------------------------------------------" mkdir -p ${WORLDTMP} 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 depend && \ ${IBMAKE} -I${.CURDIR}/share/mk ${MK_FLAGS} all && \ ${IBMAKE} -I${.CURDIR}/share/mk ${MK_FLAGS} install && \ ${IBMAKE} -I${.CURDIR}/share/mk ${MK_FLAGS} clean cleandepend @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 depend && \ ${IBMAKE} -I${.CURDIR}/share/mk ${MK_FLAGS} all && \ ${IBMAKE} -I${.CURDIR}/share/mk ${MK_FLAGS} install && \ ${IBMAKE} -I${.CURDIR}/share/mk ${MK_FLAGS} clean cleandepend @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 dependencies" @echo "--------------------------------------------------------------" cd ${.CURDIR} && ${XMAKE} par-depend @echo @echo "--------------------------------------------------------------" @echo " Building everything.." @echo "--------------------------------------------------------------" cd ${.CURDIR} && ${XMAKE} all # # ------------------------------------------------------------------------ # # 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} depend && \ ${MAKE} ${MK_FLAGS} all && \ ${MAKE} ${MK_FLAGS} -B install ${CLEANDIR} ${OBJDIR} cd ${.CURDIR}/usr.bin/xinstall && ${MAKE} depend && \ ${MAKE} ${MK_FLAGS} all && \ ${MAKE} ${MK_FLAGS} -B install ${CLEANDIR} ${OBJDIR} cd ${.CURDIR}/usr.bin/lex && ${MAKE} bootstrap && ${MAKE} 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} -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) 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 .if exists(${.CURDIR}/lib/csu/${MACHINE}) cd ${.CURDIR}/lib/csu/${MACHINE} && ${MAKE} beforeinstall .endif 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} 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. # # XXX gperf is required for cc # XXX a new ld and tsort is required for cc # gnu/usr.bin/ld # gnu/usr.bin/as # gnu/usr.bin/cc lib-tools: cd ${.CURDIR}/lib/csu/alpha && ${MAKE} depend && \ ${MAKE} ${MK_FLAGS} all && \ ${MAKE} ${MK_FLAGS} -B install ${CLEANDIR} ${OBJDIR} @-rm -f ${WORLDTMP}/usr/bin/ld @-rm -f ${WORLDTMP}/usr/bin/as @-rm -f ${WORLDTMP}/usr/bin/g++ @-rm -f ${WORLDTMP}/usr/bin/nm @-rm -f ${WORLDTMP}/usr/bin/ranlib ln -s /usr/local/bin/ld ${WORLDTMP}/usr/bin/ld ln -s /usr/local/bin/as ${WORLDTMP}/usr/bin/as ln -s /usr/local/bin/g++ ${WORLDTMP}/usr/bin/g++ ln -s /usr/local/bin/nm ${WORLDTMP}/usr/bin/nm ln -s /usr/local/bin/ranlib ${WORLDTMP}/usr/bin/ranlib .for d in \ gnu/usr.bin/gperf \ usr.bin/tsort \ gnu/usr.bin/bison \ gnu/usr.bin/cc \ usr.bin/ar \ usr.bin/compile_et \ usr.bin/lex/lib \ usr.bin/mk_cmds \ usr.bin/uudecode cd ${.CURDIR}/$d && ${MAKE} depend && \ ${MAKE} ${MK_FLAGS} all && \ ${MAKE} ${MK_FLAGS} -B install ${CLEANDIR} ${OBJDIR} .endfor # # libraries - build and install the libraries # libraries: .if exists(lib/csu/${MACHINE}) cd ${.CURDIR}/lib/csu/${MACHINE} && ${MAKE} depend && \ ${MAKE} ${MK_FLAGS} all && \ ${MAKE} ${MK_FLAGS} -B install ${CLEANDIR} ${OBJDIR} .endif cd ${.CURDIR}/lib/libc && ${MAKE} depend && \ ${MAKE} ${MK_FLAGS} all && \ ${MAKE} ${MK_FLAGS} -B install ${CLEANDIR} ${OBJDIR} .if exists(lib/libcompat) cd ${.CURDIR}/lib/libcompat && ${MAKE} depend && \ ${MAKE} ${MK_FLAGS} all && \ ${MAKE} ${MK_FLAGS} -B install ${CLEANDIR} ${OBJDIR} .endif .if exists(lib/libmytinfo) cd ${.CURDIR}/lib/libmytinfo && ${MAKE} depend && \ ${MAKE} ${MK_FLAGS} all && \ ${MAKE} ${MK_FLAGS} -B install ${CLEANDIR} ${OBJDIR} .endif .if exists(lib/libncurses) cd ${.CURDIR}/lib/libncurses && ${MAKE} depend && \ ${MAKE} ${MK_FLAGS} all && \ ${MAKE} ${MK_FLAGS} -B install ${CLEANDIR} ${OBJDIR} .endif .if exists(lib/libtermcap) cd ${.CURDIR}/lib/libtermcap && ${MAKE} depend && \ ${MAKE} ${MK_FLAGS} all && \ ${MAKE} ${MK_FLAGS} -B install ${CLEANDIR} ${OBJDIR} .endif .if exists(gnu) cd ${.CURDIR}/gnu/lib && ${MAKE} depend && \ ${MAKE} ${MK_FLAGS} all && \ ${MAKE} ${MK_FLAGS} -B install ${CLEANDIR} ${OBJDIR} .endif .if exists(secure) && !defined(NOCRYPT) && !defined(NOSECURE) cd ${.CURDIR}/secure/lib && ${MAKE} depend && \ ${MAKE} ${MK_FLAGS} all && \ ${MAKE} ${MK_FLAGS} -B install ${CLEANDIR} ${OBJDIR} .endif .if exists(lib) cd ${.CURDIR}/lib && ${MAKE} depend && \ ${MAKE} ${MK_FLAGS} all && \ ${MAKE} ${MK_FLAGS} -B install ${CLEANDIR} ${OBJDIR} .endif .if exists(usr.bin/lex/lib) cd ${.CURDIR}/usr.bin/lex/lib && ${MAKE} depend && \ ${MAKE} ${MK_FLAGS} all && \ ${MAKE} ${MK_FLAGS} -B install ${CLEANDIR} ${OBJDIR} .endif .if exists(kerberosIV) && !defined(NOCRYPT) && defined(MAKE_KERBEROS4) cd ${.CURDIR}/kerberosIV/lib && ${MAKE} depend && \ ${MAKE} ${MK_FLAGS} all && \ ${MAKE} ${MK_FLAGS} -B install ${CLEANDIR} ${OBJDIR} .endif .if exists(usr.sbin/pcvt/keycap) cd ${.CURDIR}/usr.sbin/pcvt/keycap && ${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. # ifdef stale # bc and cpp are required to build groff. Otherwise, the order here is # mostly historical, i.e., bogus. # chmod is used to build gcc's tmpmultilib[2] at obscure times. # endif stale # XXX uname is a bug - the target should not depend on the host. # build-tools: .for d in \ 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/sh \ bin/test \ gnu/usr.bin/awk \ gnu/usr.bin/bc \ gnu/usr.bin/grep \ gnu/usr.bin/groff \ gnu/usr.bin/gzip \ gnu/usr.bin/man/makewhatis \ gnu/usr.bin/sort \ gnu/usr.bin/texinfo \ share/info \ usr.bin/basename \ usr.bin/cap_mkdb \ usr.bin/chflags \ usr.bin/cmp \ usr.bin/col \ usr.bin/cpp \ usr.bin/expand \ usr.bin/file2c \ usr.bin/find \ usr.bin/gencat \ usr.bin/lorder \ usr.bin/m4 \ usr.bin/mkdep \ usr.bin/paste \ usr.bin/sed \ usr.bin/size \ usr.bin/soelim \ usr.bin/strip \ usr.bin/symorder \ 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 cd ${.CURDIR}/$d && ${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}; then \ ${ECHODIR} "===> ${DIRPRFX}${entry}.${MACHINE}"; \ edir=${entry}.${MACHINE}; \ 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