diff --git a/Makefile.alpha b/Makefile.alpha new file mode 100644 index 000000000000..1ed2e108fcde --- /dev/null +++ b/Makefile.alpha @@ -0,0 +1,477 @@ +# $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 +