Makefile.i386 revision 13259
1238384Sjkim# Copyright 1990 W. Jolitz
2238384Sjkim#	from: @(#)Makefile.i386	7.1 5/10/91
3238384Sjkim#	$Id: Makefile.i386,v 1.72 1995/12/26 13:57:55 bde Exp $
4238384Sjkim#
5238384Sjkim# Makefile for FreeBSD
6238384Sjkim#
7238384Sjkim# This makefile is constructed from a machine description:
8238384Sjkim#	config machineid
9238384Sjkim# Most changes should be made in the machine description
10238384Sjkim#	/sys/i386/conf/``machineid''
11238384Sjkim# after which you should do
12238384Sjkim#	 config machineid
13238384Sjkim# Generic makefile changes should be made in
14238384Sjkim#	/sys/i386/conf/Makefile.i386
15238384Sjkim# after which config should be rerun for all machines.
16238384Sjkim#
17238384SjkimCC?=	cc
18238384SjkimCPP?=	cpp
19238384SjkimLD?=	/usr/bin/ld
20238384Sjkim
21238384Sjkim.if exists(./@/.)
22238384SjkimS=	./@
23238384Sjkim.else
24238384SjkimS=	../..
25238384Sjkim.endif
26238384SjkimI386=	${S}/i386
27238384Sjkim
28238384SjkimCWARNFLAGS?=	-W -Wreturn-type -Wcomment -Wredundant-decls -Wimplicit \
29238384Sjkim		-Wnested-externs -Wstrict-prototypes -Wmissing-prototypes \
30238384Sjkim		-Winline
31238384Sjkim#
32238384Sjkim# The following flags are next up for working on:
33238384Sjkim#	-Wall
34238384Sjkim#
35238384Sjkim# When working on removing warnings from code, the `-Werror' flag should be
36238384Sjkim# of material assistance.
37238384Sjkim#
38238384SjkimCOPTFLAGS?=-O
39238384Sjkim# Not ready for -I- yet.  #include "foo.h" where foo.h is in the srcdir fails.
40238384SjkimINCLUDES= -nostdinc -I. -I$S -I$S/sys
41238384Sjkim# This hack is to allow kernel compiles to succeed on machines w/out srcdist
42238384Sjkim.if exists($S/../include)
43238384SjkimINCLUDES+= -I$S/../include
44238384Sjkim.else
45238384SjkimINCLUDES+= -I/usr/include
46238384Sjkim.endif
47238384SjkimCOPTS=	${INCLUDES} ${IDENT} -DKERNEL
48238384SjkimASFLAGS=
49238384SjkimCFLAGS=	${COPTFLAGS} ${CWARNFLAGS} ${DEBUG} ${COPTS}
50238384SjkimLOAD_ADDRESS?=	F0100000
51238384Sjkim
52238384SjkimNORMAL_C= ${CC} -c ${CFLAGS} ${PROF} $<
53238384SjkimNORMAL_C_C= ${CC} -c ${CFLAGS} ${PROF} ${PARAM} $<
54238384Sjkim# XXX errors leak out of all the pipes.  Should use cc *.S.
55238384Sjkim# XXX LOCORE means "don't declare C stuff" not "for locore.s".
56238384SjkimNORMAL_S= ${CPP} -DLOCORE ${COPTS} $< | ${AS} ${ASFLAGS} -o $*.o
57238384SjkimDRIVER_C= ${CC} -c ${CFLAGS} ${PROF} $<
58238384SjkimDRIVER_C_C= ${CC} -c ${CFLAGS} ${PROF} ${PARAM} $<
59238384SjkimDRIVER_S= ${CPP} -DLOCORE ${COPTS} $< | ${AS} ${ASFLAGS} -o $*.o
60238384SjkimPROFILE_C= ${CC} -c ${CFLAGS} ${PARAM} $<
61238384Sjkim
62238384SjkimSYSTEM_CFILES= ioconf.c param.c vnode_if.c
63238384SjkimSYSTEM_SFILES= ${I386}/i386/locore.s
64238384SjkimSYSTEM_OBJS= locore.o vnode_if.o ${OBJS} ioconf.o param.o
65238384SjkimSYSTEM_DEP= Makefile symbols.exclude symbols.sort ${SYSTEM_OBJS}
66238384SjkimSYSTEM_LD_HEAD= @echo loading $@; rm -f $@
67238384SjkimSYSTEM_LD= @${LD} -Bstatic -Z -T ${LOAD_ADDRESS} -o $@ -X ${SYSTEM_OBJS} vers.o
68238384Sjkim.if ${CFLAGS:M-g} == ""
69238384SjkimSYMORDER_EXCLUDE=-x symbols.exclude
70238384Sjkim.endif
71238384SjkimSYSTEM_LD_TAIL= @echo rearranging symbols; \
72238384Sjkim	symorder -m ${SYMORDER_EXCLUDE} symbols.sort $@; \
73238384Sjkim	size $@; chmod 755 $@
74238384Sjkim
75238384Sjkim%BEFORE_DEPEND
76238384Sjkim
77238384Sjkim%OBJS
78238384Sjkim
79238384Sjkim%CFILES
80238384Sjkim
81238384Sjkim%SFILES
82238384Sjkim
83238384Sjkim%LOAD
84238384Sjkim
85238384Sjkim%CLEAN
86238384Sjkim
87238384Sjkimclean:
88238384Sjkim	rm -f *.o *.s eddep errs genassym kernel linterrs \
89238384Sjkim	      makelinks param.c symbols.exclude symbols.sort tags \
90238384Sjkim	      vers.c vnode_if.c vnode_if.h ${CLEAN}
91238384Sjkim
92238384Sjkim#lint: /tmp param.c
93238384Sjkim#	@lint -hbxn -DGENERIC -Dvolatile= ${COPTS} ${PARAM} \
94238384Sjkim#	  ${I386}/i386/Locore.c ${CFILES} ioconf.c param.c | \
95238384Sjkim#	    grep -v 'struct/union .* never defined' | \
96238384Sjkim#	    grep -v 'possible pointer alignment problem'
97238384Sjkim
98238384Sjkimsymbols.exclude: Makefile
99238384Sjkim	echo "gcc2_compiled." >symbols.exclude
100238384Sjkim	echo "___gnu_compiled_c" >>symbols.exclude
101238384Sjkim
102238384Sjkimsymbols.sort: ${I386}/i386/symbols.raw
103238384Sjkim	grep -v '^#' ${I386}/i386/symbols.raw \
104238384Sjkim	    | sed 's/^	//' | sort -u > symbols.sort
105238384Sjkim
106238384Sjkimlocore.o: ${I386}/i386/locore.s assym.s
107238384Sjkim	${NORMAL_S}
108238384Sjkim
109238384Sjkim# everything potentially depends on the Makefile since everything potentially
110238384Sjkim# depends on the options.  Some things are more dependent on the Makefile for
111238384Sjkim# historical reasons.
112238384Sjkimmachdep.o: Makefile
113238384Sjkim
114238384Sjkim# the following is necessary because autoconf.o depends on #if GENERIC
115238384Sjkimautoconf.o: Makefile
116238384Sjkim
117238384Sjkim# XXX - may no longer be needed
118238384Sjkimlocore.o: Makefile
119238384Sjkim
120238384Sjkim# depends on KDB (cons.o also depends on GENERIC)
121238384Sjkimtrap.o cons.o: Makefile
122238384Sjkim
123238384Sjkim# this rule stops ./assym.s in .depend from causing problems
124238384Sjkim./assym.s: assym.s
125238384Sjkim
126238384Sjkimassym.s: genassym
127238384Sjkim	./genassym >assym.s
128238384Sjkim
129238384Sjkim# Some of the defines that genassym outputs may well depend on the
130238384Sjkim# value of kernel options.
131238384Sjkimgenassym.o: ${I386}/i386/genassym.c Makefile
132238384Sjkim	${CC} -c ${CFLAGS} ${PARAM} -UKERNEL ${I386}/i386/genassym.c
133238384Sjkim
134238384Sjkimgenassym: genassym.o
135238384Sjkim	${CC} -static ${CFLAGS} ${PARAM} genassym.o -o $@
136238384Sjkim
137238384Sjkim# XXX this assumes that the options for NORMAL_C* and DRIVER_C* are identical.
138238384Sjkimdepend: assym.s param.c vnode_if.h ${BEFORE_DEPEND}
139238384Sjkim	mkdep ${COPTS} ${CFILES} ${SYSTEM_CFILES}
140238384Sjkim	mkdep -a ${COPTS} ${PARAM} -UKERNEL ${I386}/i386/genassym.c
141238384Sjkim	MKDEP_CPP=${CPP} ; export MKDEP_CPP ; \
142238384Sjkim	mkdep -a -DLOCORE ${COPTS} ${SFILES} ${SYSTEM_SFILES}
143238384Sjkim
144238384Sjkimlinks:
145238384Sjkim	egrep '#if' ${CFILES:Nswapkernel.c} | sed -f $S/conf/defines | \
146238384Sjkim	  sed -e 's/:.*//' -e 's/\.c/.o/' | sort -u > dontlink
147238384Sjkim	echo ${CFILES:Nswapkernel.c} | tr -s ' ' '\12' | sed 's/\.c/.o/' | \
148238384Sjkim	  sort -u | comm -23 - dontlink | \
149238384Sjkim	  sed 's,../.*/\(.*.o\),rm -f \1;ln -s ../GENERIC/\1 \1,' > makelinks
150238384Sjkim	sh makelinks && rm -f dontlink
151238384Sjkim
152238384Sjkimtags:
153238384Sjkim	@echo "see $S/kern/Makefile for tags"
154238384Sjkim
155238384Sjkiminstall:
156238384Sjkim	chflags noschg /kernel
157238384Sjkim	mv /kernel /kernel.old
158238384Sjkim	sysctl -w kern.bootfile=/kernel.old
159238384Sjkim	install -c -m 555 -o root -g wheel -fschg kernel /
160238384Sjkim
161238384Sjkimioconf.o: ioconf.c $S/sys/param.h machine/pte.h $S/sys/buf.h \
162238384Sjkim    ${I386}/isa/isa_device.h ${I386}/isa/isa.h ${I386}/isa/icu.h
163238384Sjkim	${CC} -c ${CFLAGS} ioconf.c
164238384Sjkim
165238384Sjkimparam.c: $S/conf/param.c
166238384Sjkim	-rm -f param.c
167238384Sjkim	cp $S/conf/param.c .
168238384Sjkim
169238384Sjkimparam.o: param.c Makefile
170238384Sjkim	${CC} -c ${CFLAGS} ${PARAM} param.c
171238384Sjkim
172238384Sjkimvers.o: ${SYSTEM_DEP} ${SYSTEM_SWAP_DEP}
173238384Sjkim	sh $S/conf/newvers.sh ${KERN_IDENT} ${IDENT}
174238384Sjkim	${CC} ${CFLAGS} -c vers.c
175238384Sjkim
176238384Sjkimvnode_if.c: $S/kern/vnode_if.sh $S/kern/vnode_if.src
177238384Sjkim	sh $S/kern/vnode_if.sh $S/kern/vnode_if.src
178238384Sjkimvnode_if.h: $S/kern/vnode_if.sh $S/kern/vnode_if.src
179238384Sjkim	sh $S/kern/vnode_if.sh $S/kern/vnode_if.src
180238384Sjkim
181238384Sjkim%RULES
182238384Sjkim
183238384Sjkim# DO NOT DELETE THIS LINE -- make depend uses it
184238384Sjkim