Makefile.i386 revision 60001
155682Smarkm# Makefile.i386 -- with config changes. 255682Smarkm# Copyright 1990 W. Jolitz 355682Smarkm# from: @(#)Makefile.i386 7.1 5/10/91 455682Smarkm# $FreeBSD: head/sys/conf/Makefile.i386 60001 2000-05-04 21:12:28Z obrien $ 555682Smarkm# 655682Smarkm# Makefile for FreeBSD 755682Smarkm# 855682Smarkm# This makefile is constructed from a machine description: 955682Smarkm# config machineid 1055682Smarkm# Most changes should be made in the machine description 1155682Smarkm# /sys/i386/conf/``machineid'' 1255682Smarkm# after which you should do 1355682Smarkm# config machineid 1455682Smarkm# Generic makefile changes should be made in 1555682Smarkm# /sys/i386/conf/Makefile.i386 1655682Smarkm# after which config should be rerun for all machines. 1755682Smarkm# 1855682Smarkm 1955682Smarkm# Which version of config(8) is required. 2055682Smarkm%VERSREQ= 400018 2155682Smarkm 2255682Smarkm# Can be overridden by makeoptions or /etc/make.conf 2355682SmarkmKERNEL?= kernel 2455682SmarkmSTD8X16FONT?= iso 2555682Smarkm 2655682Smarkm.if !defined(S) 2755682Smarkm.if exists(./@/.) 2855682SmarkmS= ./@ 2955682Smarkm.else 3055682SmarkmS= ../.. 3155682Smarkm.endif 3255682Smarkm.endif 3355682SmarkmM= ${MACHINE_ARCH} 3455682Smarkm 3555682SmarkmSIZE?= size 3655682Smarkm 3755682SmarkmCOPTFLAGS?=-O 3855682SmarkmINCLUDES= -nostdinc -I- -I. -I$S 3990926Snectar# This hack is to allow kernel compiles to succeed on machines w/out srcdist 4055682Smarkm.if exists($S/../include) 4155682SmarkmINCLUDES+= -I$S/../include 4255682Smarkm.else 4355682SmarkmINCLUDES+= -I/usr/include 4455682Smarkm.endif 4555682SmarkmCOPTS= ${INCLUDES} ${IDENT} -D_KERNEL -include opt_global.h 4655682SmarkmCFLAGS= ${COPTFLAGS} ${CWARNFLAGS} ${DEBUG} ${COPTS} 4755682Smarkm 4855682Smarkm# XXX LOCORE means "don't declare C stuff" not "for locore.s". 4955682SmarkmASM_CFLAGS= -x assembler-with-cpp -DLOCORE ${CFLAGS} 5055682Smarkm 5155682Smarkm# Select the correct set of tools. Can't set OBJFORMAT here because it 5255682Smarkm# doesn't get exported into the environment, and if it were exported 5355682Smarkm# then it might break building of utilities. 5455682SmarkmFMT= -elf 5555682SmarkmCFLAGS+= ${FMT} 5655682Smarkm 5755682SmarkmDEFINED_PROF= ${PROF} 5855682Smarkm.if defined(PROF) 5955682SmarkmCFLAGS+= -malign-functions=4 6055682Smarkm.if ${PROFLEVEL} >= 2 6155682SmarkmIDENT+= -DGPROF4 -DGUPROF 6255682SmarkmPROF+= -mprofiler-epilogue 6355682Smarkm.endif 6455682Smarkm.endif 6555682Smarkm 6655682Smarkm# Put configuration-specific C flags last (except for ${PROF}) so that they 6755682Smarkm# can override the others. 6855682SmarkmCFLAGS+= ${CONF_CFLAGS} 6955682Smarkm 7055682SmarkmNORMAL_C= ${CC} -c ${CFLAGS} ${PROF} ${.IMPSRC} 7155682SmarkmNORMAL_C_C= ${CC} -c ${CFLAGS} ${PROF} ${.IMPSRC} 7255682SmarkmNORMAL_S= ${CC} -c ${ASM_CFLAGS} ${.IMPSRC} 7355682SmarkmPROFILE_C= ${CC} -c ${CFLAGS} ${.IMPSRC} 7455682Smarkm 7555682SmarkmNORMAL_M= perl5 $S/kern/makeobjops.pl -c $<; \ 7655682Smarkm ${CC} -c ${CFLAGS} ${PROF} ${.PREFIX}.c 7755682Smarkm 7855682SmarkmGEN_CFILES= $S/$M/$M/genassym.c 7955682Smarkm# setdef0.c and setdef1.c are intentionally 8055682Smarkm# omitted from SYSTEM_CFILES. They include setdefs.h, a header which 8155682Smarkm# is generated from all of ${OBJS}. We don't want to have to compile 8255682Smarkm# everything just to do a make depend. 8355682SmarkmSYSTEM_CFILES= ioconf.c param.c vnode_if.c config.c 8478527SassarSYSTEM_SFILES= $S/$M/$M/locore.s 8555682SmarkmSYSTEM_DEP= Makefile ${SYSTEM_OBJS} 8655682SmarkmSYSTEM_OBJS= locore.o setdef0.o vnode_if.o ${OBJS} ioconf.o param.o config.o \ 8755682Smarkm setdef1.o hack.So 8855682SmarkmSYSTEM_LD= @${LD} ${FMT} -Bdynamic -T $S/conf/ldscript.$M \ 8955682Smarkm -export-dynamic -dynamic-linker /red/herring \ 9055682Smarkm -o ${.TARGET} -X ${SYSTEM_OBJS} vers.o 9155682SmarkmSYSTEM_LD_TAIL= @${SIZE} ${FMT} ${.TARGET} ; chmod 755 ${.TARGET} 9255682SmarkmSYSTEM_DEP+= $S/conf/ldscript.$M 9355682Smarkm 9455682Smarkm%BEFORE_DEPEND 9555682Smarkm 9655682Smarkm%OBJS 9755682Smarkm 9855682Smarkm%CFILES 9955682Smarkm 10055682Smarkm%SFILES 10155682Smarkm 10255682Smarkm%MFILES 10355682Smarkm 10455682Smarkm%CLEAN 10578527Sassar 10678527Sassarall: ${KERNEL} 10778527Sassar 10878527Sassar.if !defined(DEBUG) 10978527SassarFULLKERNEL= ${KERNEL} 11078527Sassar.else 11178527SassarFULLKERNEL= ${KERNEL}.debug 11278527Sassar${KERNEL}: ${FULLKERNEL} 11378527Sassar objcopy --strip-debug ${FULLKERNEL} ${KERNEL} 11478527Sassar.endif 11578527Sassar 11678527Sassar${FULLKERNEL}: ${SYSTEM_DEP} vers.o 11778527Sassar @rm -f ${.TARGET} 11878527Sassar @echo linking ${.TARGET} 11978527Sassar ${SYSTEM_LD} 12078527Sassar ${SYSTEM_LD_TAIL} 12155682Smarkm.if !defined(NO_MODULES) && exists(${.CURDIR}/../../modules) 12255682Smarkm @mkdir -p ${.CURDIR}/modules 12355682Smarkm cd ${.CURDIR}/../../modules && env MAKEOBJDIRPREFIX=${.CURDIR}/modules ${MAKE} obj 12455682Smarkm cd ${.CURDIR}/../../modules && env MAKEOBJDIRPREFIX=${.CURDIR}/modules ${MAKE} all 12555682Smarkm.endif 12655682Smarkm 12755682Smarkm.if !exists(.depend) 12855682Smarkm${SYSTEM_OBJS}: vnode_if.h ${BEFORE_DEPEND:M*.h} ${MFILES:T:S/.m$/.h/} 12955682Smarkm.endif 13055682Smarkm 13155682Smarkm.for mfile in ${MFILES} 13255682Smarkm${mfile:T:S/.m$/.h/}: ${mfile} 13355682Smarkm perl5 $S/kern/makeobjops.pl -h ${mfile} 13455682Smarkm.endfor 13555682Smarkm 13655682Smarkmclean: 13755682Smarkm rm -f *.o *.so *.So *.ko *.s eddep errs genassym \ 13855682Smarkm ${FULLKERNEL} ${KERNEL} linterrs makelinks param.c \ 13955682Smarkm setdef[01].c setdefs.h tags \ 14055682Smarkm vers.c vnode_if.c vnode_if.h \ 14155682Smarkm ${MFILES:T:S/.m$/.c/} ${MFILES:T:S/.m$/.h/} \ 14255682Smarkm ${CLEAN} 14355682Smarkm.if !defined(NO_MODULES) && exists(${.CURDIR}/../../modules) 14455682Smarkm cd ${.CURDIR}/../../modules && env MAKEOBJDIRPREFIX=${.CURDIR}/modules ${MAKE} clean 14590926Snectar.endif 14655682Smarkm 14755682Smarkm#lint: /tmp param.c 14855682Smarkm# @lint -hbxn -DGENERIC -Dvolatile= ${COPTS} \ 14955682Smarkm# $S/$M/$M/Locore.c ${CFILES} ioconf.c param.c | \ 15055682Smarkm# grep -v 'struct/union .* never defined' | \ 15155682Smarkm# grep -v 'possible pointer alignment problem' 15255682Smarkm 15355682Smarkmlocore.o: $S/$M/$M/locore.s assym.s 15455682Smarkm ${NORMAL_S} 15555682Smarkm 15655682Smarkm# This is a hack. BFD "optimizes" away dynamic mode if there are no 15755682Smarkm# dynamic references. We could probably do a '-Bforcedynamic' mode like 15855682Smarkm# in the a.out ld. For now, this works. 15955682Smarkmhack.So: Makefile 16055682Smarkm touch hack.c 16155682Smarkm ${CC} ${FMT} -shared -nostdlib hack.c -o hack.So 16255682Smarkm rm -f hack.c 16355682Smarkm 16455682Smarkm.ORDER: setdefs.h setdef0.c setdef1.c 16555682Smarkm 16655682Smarkmsetdef0.o: setdef0.c setdefs.h 16755682Smarkm ${NORMAL_C} 16855682Smarkm 16955682Smarkmsetdef1.o: setdef1.c setdefs.h 17055682Smarkm ${NORMAL_C} 17155682Smarkm 17255682Smarkmsetdef0.c setdef1.c setdefs.h: ${OBJS} param.o 17355682Smarkm @gensetdefs ${OBJS} param.o 17455682Smarkm 17555682Smarkm# this rule stops ./assym.s in .depend from causing problems 17655682Smarkm./assym.s: assym.s 17755682Smarkm 17855682Smarkmassym.s: genassym.o 17955682Smarkm genassym genassym.o >assym.s 18055682Smarkm 18155682Smarkmgenassym.o: $S/$M/$M/genassym.c 18255682Smarkm ${CC} -c ${CFLAGS} $S/$M/$M/genassym.c 18355682Smarkm 18455682Smarkm${SYSTEM_OBJS} genassym.o vers.o: opt_global.h 18555682Smarkm 18655682Smarkmdepend: assym.s param.c vnode_if.h ${BEFORE_DEPEND} \ 18755682Smarkm ${CFILES} ${SYSTEM_CFILES} ${GEN_CFILES} ${SFILES} \ 18855682Smarkm ${SYSTEM_SFILES} ${MFILES:T:S/.m$/.h/} 18955682Smarkm rm -f .newdep 19055682Smarkm mkdep -a -f .newdep ${CFLAGS} ${CFILES} ${SYSTEM_CFILES} ${GEN_CFILES} 19155682Smarkm env MKDEP_CPP="${CC} -E" \ 19255682Smarkm mkdep -a -f .newdep ${ASM_CFLAGS} ${SFILES} ${SYSTEM_SFILES} 19355682Smarkm rm -f .depend 19455682Smarkm mv -f .newdep .depend 19555682Smarkm.if !defined(NO_MODULES) && exists(${.CURDIR}/../../modules) 19655682Smarkm @mkdir -p ${.CURDIR}/modules 19755682Smarkm cd ${.CURDIR}/../../modules && env MAKEOBJDIRPREFIX=${.CURDIR}/modules ${MAKE} obj 19855682Smarkm cd ${.CURDIR}/../../modules && env MAKEOBJDIRPREFIX=${.CURDIR}/modules ${MAKE} depend 19955682Smarkm.endif 20055682Smarkm 20155682Smarkmcleandepend: 20255682Smarkm rm -f .depend 20355682Smarkm.if !defined(NO_MODULES) && exists(${.CURDIR}/../../modules) 20455682Smarkm cd ${.CURDIR}/../../modules && env MAKEOBJDIRPREFIX=${.CURDIR}/modules ${MAKE} cleandepend 20555682Smarkm.endif 20655682Smarkm 20755682Smarkmlinks: 20855682Smarkm egrep '#if' ${CFILES} | sed -f $S/conf/defines | \ 20955682Smarkm sed -e 's/:.*//' -e 's/\.c/.o/' | sort -u > dontlink 21055682Smarkm echo ${CFILES} | tr -s ' ' '\12' | sed 's/\.c/.o/' | \ 21155682Smarkm sort -u | comm -23 - dontlink | \ 21255682Smarkm sed 's,../.*/\(.*.o\),rm -f \1;ln -s ../GENERIC/\1 \1,' > makelinks 21355682Smarkm sh makelinks && rm -f dontlink 21455682Smarkm 21555682Smarkmtags: 21655682Smarkm @[ -f .depend ] || { echo "you must make depend first"; exit 1; } 21755682Smarkm sh $S/conf/systags.sh 21855682Smarkm rm -f tags1 21955682Smarkm sed -e 's, ../, ,' tags > tags1 22055682Smarkm 22155682Smarkminstall install.debug: 22255682Smarkm @if [ ! -f ${KERNEL}${.TARGET:S/install//} ] ; then \ 22355682Smarkm echo "You must build a kernel first." ; \ 22455682Smarkm exit 1 ; \ 22555682Smarkm fi 22655682Smarkm.if exists(${DESTDIR}/${KERNEL}) 22755682Smarkm -chflags noschg ${DESTDIR}/${KERNEL} 22855682Smarkm mv ${DESTDIR}/${KERNEL} ${DESTDIR}/${KERNEL}.old 22955682Smarkm.endif 23055682Smarkm install -c -m 555 -o root -g wheel -fschg \ 23155682Smarkm ${KERNEL}${.TARGET:S/install//} ${DESTDIR}/${KERNEL} 23255682Smarkm.if !defined(NO_MODULES) && exists(${.CURDIR}/../../modules) 23355682Smarkm cd ${.CURDIR}/../../modules && env MAKEOBJDIRPREFIX=${.CURDIR}/modules ${MAKE} install 23455682Smarkm.endif 23555682Smarkm 23655682Smarkmreinstall reinstall.debug: 23755682Smarkm install -c -m 555 -o root -g wheel -fschg \ 23855682Smarkm ${KERNEL}${.TARGET:S/reinstall//} ${DESTDIR}/${KERNEL} 23955682Smarkm.if !defined(NO_MODULES) && exists(${.CURDIR}/../../modules) 24055682Smarkm cd ${.CURDIR}/../../modules && env MAKEOBJDIRPREFIX=${.CURDIR}/modules ${MAKE} install 24155682Smarkm.endif 24255682Smarkm 24355682Smarkmconfig.o: 24455682Smarkm ${NORMAL_C} 24555682Smarkm 24655682Smarkmioconf.o: 24755682Smarkm ${NORMAL_C} 24855682Smarkm 24955682Smarkmparam.c: $S/conf/param.c 25055682Smarkm -rm -f param.c 25155682Smarkm cp $S/conf/param.c . 25255682Smarkm 25355682Smarkmparam.o: 25455682Smarkm ${NORMAL_C} 25555682Smarkm 25655682Smarkmvers.c: $S/conf/newvers.sh $S/sys/param.h ${SYSTEM_DEP} 25755682Smarkm sh $S/conf/newvers.sh ${KERN_IDENT} ${IDENT} 25855682Smarkm 25955682Smarkm# XXX strictly, everything depends on Makefile because changes to ${PROF} 26055682Smarkm# only appear there, but we don't handle that. 26155682Smarkmvers.o: 26255682Smarkm ${NORMAL_C} 26355682Smarkm 26455682Smarkmvnode_if.c: $S/kern/vnode_if.pl $S/kern/vnode_if.src 26555682Smarkm perl5 $S/kern/vnode_if.pl -c $S/kern/vnode_if.src 26655682Smarkm 26755682Smarkmvnode_if.h: $S/kern/vnode_if.pl $S/kern/vnode_if.src 26855682Smarkm perl5 $S/kern/vnode_if.pl -h $S/kern/vnode_if.src 26955682Smarkm 27055682Smarkmvnode_if.o: 27155682Smarkm ${NORMAL_C} 27255682Smarkm 27355682Smarkm# Commented out for now pending a better solution. 27455682Smarkm# How do we pick up compiler version specific flags?? 27555682Smarkm#.if exists($S/../share/mk) 27655682Smarkm#.include "$S/../share/mk/bsd.kern.mk" 27755682Smarkm#.else 27855682Smarkm.include <bsd.kern.mk> 27955682Smarkm#.endif 28055682Smarkm 28155682Smarkm%RULES 28255682Smarkm 28355682Smarkm# DO NOT DELETE THIS LINE -- make depend uses it 28455682Smarkm