143b74d61SJordan K. Hubbard# Makefile.i386 -- with config changes. 25b81b6b3SRodney W. Grimes# Copyright 1990 W. Jolitz 32d717e4aSRodney W. Grimes# from: @(#)Makefile.i386 7.1 5/10/91 4c3aac50fSPeter Wemm# $FreeBSD$ 52d717e4aSRodney W. Grimes# 62d717e4aSRodney W. Grimes# Makefile for FreeBSD 75b81b6b3SRodney W. Grimes# 85b81b6b3SRodney W. Grimes# This makefile is constructed from a machine description: 95b81b6b3SRodney W. Grimes# config machineid 105b81b6b3SRodney W. Grimes# Most changes should be made in the machine description 115b81b6b3SRodney W. Grimes# /sys/i386/conf/``machineid'' 125b81b6b3SRodney W. Grimes# after which you should do 135b81b6b3SRodney W. Grimes# config machineid 145b81b6b3SRodney W. Grimes# Generic makefile changes should be made in 155b81b6b3SRodney W. Grimes# /sys/i386/conf/Makefile.i386 165b81b6b3SRodney W. Grimes# after which config should be rerun for all machines. 175b81b6b3SRodney W. Grimes# 189081eec1SJohn Polstra 1948b29459SPeter Wemm# Which version of config(8) is required. 2037558b01SPeter Wemm%VERSREQ= 400016 2148b29459SPeter Wemm 22a127a704SPeter Wemm# Can be overridden by makeoptions or /etc/make.conf 23a127a704SPeter WemmKERNEL?= kernel 24c30fe42cSPeter WemmKERNFORMAT?= elf 2538d8a113SPoul-Henning KampSTD8X16FONT?= iso 2638d8a113SPoul-Henning Kamp 277621bfffSMarcel Moolenaar.if !defined(S) 28f540b106SGarrett Wollman.if exists(./@/.) 29f540b106SGarrett WollmanS= ./@ 30f540b106SGarrett Wollman.else 315b81b6b3SRodney W. GrimesS= ../.. 32f540b106SGarrett Wollman.endif 337621bfffSMarcel Moolenaar.endif 34f540b106SGarrett WollmanI386= ${S}/i386 355b81b6b3SRodney W. Grimes 369565e721SPeter WemmSIZE?= size 379565e721SPeter Wemm 38150f9c68SDavid GreenmanCOPTFLAGS?=-O 39e2e0d560SBruce EvansINCLUDES= -nostdinc -I- -I. -I$S 40070e3ec1SNate Williams# This hack is to allow kernel compiles to succeed on machines w/out srcdist 41070e3ec1SNate Williams.if exists($S/../include) 42070e3ec1SNate WilliamsINCLUDES+= -I$S/../include 43070e3ec1SNate Williams.else 44070e3ec1SNate WilliamsINCLUDES+= -I/usr/include 45070e3ec1SNate Williams.endif 46db42d908SPeter WemmCOPTS= ${INCLUDES} ${IDENT} -DKERNEL -include opt_global.h 4782cd038dSYoshinobu Inoue# KAME mandatory flags 4882cd038dSYoshinobu InoueCOPTS+= -D_KERNEL 4970176e63SGarrett WollmanCFLAGS= ${COPTFLAGS} ${CWARNFLAGS} ${DEBUG} ${COPTS} 50c155091cSJohn Birrell 515b036e2bSBruce Evans# XXX LOCORE means "don't declare C stuff" not "for locore.s". 525b036e2bSBruce EvansASM_CFLAGS= -x assembler-with-cpp -DLOCORE ${CFLAGS} 535b036e2bSBruce Evans 545b036e2bSBruce Evans# Use the default object format for genassym, etc. 55320138daSPeter WemmGEN_CFLAGS= ${COPTFLAGS} ${CWARNFLAGS} ${DEBUG} ${COPTS} -UKERNEL 56ac80870eSJordan K. Hubbard 57c155091cSJohn Birrell# Select the correct set of tools. Can't set OBJFORMAT here because it 585b036e2bSBruce Evans# doesn't get exported into the environment, and if it were exported 595b036e2bSBruce Evans# then it might break building of genassym, etc. 60c155091cSJohn Birrell.if ${KERNFORMAT} == "elf" 619565e721SPeter WemmFMT= -elf 62c155091cSJohn Birrell.else 639565e721SPeter WemmFMT= -aout 64c155091cSJohn Birrell.endif 659565e721SPeter WemmCFLAGS+= ${FMT} 66c155091cSJohn Birrell 678681b974SDavid GreenmanLOAD_ADDRESS?= C0100000 681013a13dSBruce EvansDEFINED_PROF= ${PROF} 69c08d58eaSBruce Evans.if defined(PROF) 701013a13dSBruce EvansCFLAGS+= -malign-functions=4 71c08d58eaSBruce Evans.if ${PROFLEVEL} >= 2 72c08d58eaSBruce EvansIDENT+= -DGPROF4 -DGUPROF 73c08d58eaSBruce EvansPROF+= -mprofiler-epilogue 74c08d58eaSBruce Evans.endif 75c08d58eaSBruce Evans.endif 765b81b6b3SRodney W. Grimes 77503e6666SBruce Evans# Put configuration-specific C flags last (except for ${PROF}) so that they 78503e6666SBruce Evans# can override the others. 79503e6666SBruce EvansCFLAGS+= ${CONF_CFLAGS} 80503e6666SBruce Evans 815b81b6b3SRodney W. GrimesNORMAL_C= ${CC} -c ${CFLAGS} ${PROF} $< 82784c3c34SBruce EvansNORMAL_C_C= ${CC} -c ${CFLAGS} ${PROF} $< 835b036e2bSBruce EvansNORMAL_S= ${CC} -c ${ASM_CFLAGS} $< 84784c3c34SBruce EvansPROFILE_C= ${CC} -c ${CFLAGS} $< 850611064bSBruce Evans 86f7dd86c1SPeter WemmGEN_CFILES= ${I386}/i386/genassym.c 87f7dd86c1SPeter Wemm# setdef0.c and setdef1.c are intentionally 885b036e2bSBruce Evans# omitted from SYSTEM_CFILES. They include setdefs.h, a header which 8961b00529SJohn Polstra# is generated from all of ${OBJS}. We don't want to have to compile 9061b00529SJohn Polstra# everything just to do a make depend. 9161b00529SJohn PolstraSYSTEM_CFILES= ioconf.c param.c vnode_if.c config.c 920611064bSBruce EvansSYSTEM_SFILES= ${I386}/i386/locore.s 939565e721SPeter WemmSYSTEM_DEP= Makefile ${SYSTEM_OBJS} 944e8691dcSPeter Wemm 953187d896SPeter Wemm.if ${KERNFORMAT} == aout || ${KERNFORMAT} == aoutkld 9661b00529SJohn PolstraSYSTEM_OBJS= locore.o vnode_if.o ${OBJS} ioconf.o param.o config.o 979565e721SPeter WemmSYSTEM_LD= @${LD} ${FMT} -Bforcedynamic -Z -T ${LOAD_ADDRESS} -o ${.TARGET} -X ${SYSTEM_OBJS} vers.o 989565e721SPeter WemmSYSTEM_LD_TAIL= @${SIZE} ${FMT} ${.TARGET} ; chmod 755 ${.TARGET} 99cea6c86cSDoug Rabson.endif 1004e8691dcSPeter Wemm 101c155091cSJohn Birrell.if ${KERNFORMAT} == elf 1023d89c2cdSMike SmithSYSTEM_OBJS= locore.o setdef0.o vnode_if.o ${OBJS} ioconf.o param.o config.o \ 103f92bdbd0SJohn Polstra setdef1.o hack.So 1049565e721SPeter WemmSYSTEM_LD= @${LD} ${FMT} -Bdynamic -T $S/i386/conf/kernel.script \ 1056b7a14ceSPeter Wemm -export-dynamic -dynamic-linker /red/herring \ 1063f6c4fc3SWarner Losh -o ${.TARGET} -X ${SYSTEM_OBJS} vers.o 1079565e721SPeter WemmSYSTEM_LD_TAIL= @${SIZE} ${FMT} ${.TARGET} ; chmod 755 ${.TARGET} 1086b7a14ceSPeter WemmSYSTEM_DEP+= $S/i386/conf/kernel.script 1099081eec1SJohn Polstra.endif 1105b81b6b3SRodney W. Grimes 11158e4304eSJustin T. Gibbs%BEFORE_DEPEND 11258e4304eSJustin T. Gibbs 1135b81b6b3SRodney W. Grimes%OBJS 1145b81b6b3SRodney W. Grimes 1155b81b6b3SRodney W. Grimes%CFILES 1165b81b6b3SRodney W. Grimes 117c91d636eSDavid Greenman%SFILES 118c91d636eSDavid Greenman 1198afa373cSNicolas Souchu%MFILES 1208afa373cSNicolas Souchu 1210bf316f5SJustin T. Gibbs%CLEAN 1220bf316f5SJustin T. Gibbs 12337558b01SPeter Wemmall: ${KERNEL} 12437558b01SPeter Wemm 125a127a704SPeter Wemm.if !defined(DEBUG) 126a127a704SPeter WemmFULLKERNEL= ${KERNEL} 127a127a704SPeter Wemm.else 128a127a704SPeter WemmFULLKERNEL= ${KERNEL}.debug 129a127a704SPeter Wemm${KERNEL}: ${FULLKERNEL} 130a127a704SPeter Wemm.if ${KERNFORMAT} == "elf" 131a127a704SPeter Wemm objcopy --strip-debug ${FULLKERNEL} ${KERNEL} 132a127a704SPeter Wemm.else 133a127a704SPeter Wemm cp ${FULLKERNEL} ${KERNEL} 13422ddeb4bSBruce Evans strip -aout -d ${KERNEL} 135a127a704SPeter Wemm.endif 136a127a704SPeter Wemm.endif 137a127a704SPeter Wemm 13822ddeb4bSBruce Evans${FULLKERNEL}: ${SYSTEM_DEP} vers.o 13937558b01SPeter Wemm @rm -f ${.TARGET} 14037558b01SPeter Wemm @echo linking ${.TARGET} 14137558b01SPeter Wemm ${SYSTEM_LD} 14237558b01SPeter Wemm ${SYSTEM_LD_TAIL} 14337558b01SPeter Wemm 144f7c9e34bSWarner Losh.if !exists(.depend) 145bb4b3fa5SDmitrij Tejblum${SYSTEM_OBJS}: vnode_if.h ${BEFORE_DEPEND:M*.h} 146f7c9e34bSWarner Losh.endif 147f7c9e34bSWarner Losh 1485b81b6b3SRodney W. Grimesclean: 149f92bdbd0SJohn Polstra rm -f *.o *.so *.So *.ko *.s eddep errs genassym gensetdefs \ 1502005b07aSGreg Lehey ${KERNEL} ${FULLKERNEL} linterrs makelinks param.c \ 1512005b07aSGreg Lehey setdef[01].c setdefs.h symbols.exclude symbols.sort tags \ 152a872b9bdSBruce Evans vers.c vnode_if.c vnode_if.h ${CLEAN} 1535b81b6b3SRodney W. Grimes 15402425318SGarrett Wollman#lint: /tmp param.c 155784c3c34SBruce Evans# @lint -hbxn -DGENERIC -Dvolatile= ${COPTS} \ 15602425318SGarrett Wollman# ${I386}/i386/Locore.c ${CFILES} ioconf.c param.c | \ 15702425318SGarrett Wollman# grep -v 'struct/union .* never defined' | \ 15802425318SGarrett Wollman# grep -v 'possible pointer alignment problem' 1595b81b6b3SRodney W. Grimes 16086a8648eSBruce Evanslocore.o: ${I386}/i386/locore.s assym.s 1610611064bSBruce Evans ${NORMAL_S} 1625b81b6b3SRodney W. Grimes 1636b7a14ceSPeter Wemm.if ${KERNFORMAT} == elf 1646b7a14ceSPeter Wemm# This is a hack. BFD "optimizes" away dynamic mode if there are no 1656b7a14ceSPeter Wemm# dynamic references. We could probably do a '-Bforcedynamic' mode like 1666b7a14ceSPeter Wemm# in the a.out ld. For now, this works. 167f92bdbd0SJohn Polstrahack.So: Makefile 1686b7a14ceSPeter Wemm touch hack.c 1699565e721SPeter Wemm ${CC} ${FMT} -shared -nostdlib hack.c -o hack.So 1706b7a14ceSPeter Wemm rm -f hack.c 1716b7a14ceSPeter Wemm.endif 1726b7a14ceSPeter Wemm 17343482c40SPeter Wemm.ORDER: setdefs.h setdef0.c setdef1.c 17443482c40SPeter Wemm 175f7dd86c1SPeter Wemmsetdef0.o: setdef0.c setdefs.h 1769081eec1SJohn Polstra ${NORMAL_C} 1779081eec1SJohn Polstra 178f7dd86c1SPeter Wemmsetdef1.o: setdef1.c setdefs.h 1799081eec1SJohn Polstra ${NORMAL_C} 1809081eec1SJohn Polstra 181f7dd86c1SPeter Wemmsetdef0.c setdef1.c setdefs.h: ${OBJS} 182dcddc353SPeter Wemm @gensetdefs ${OBJS} 18361b00529SJohn Polstra 1840611064bSBruce Evans# this rule stops ./assym.s in .depend from causing problems 1850611064bSBruce Evans./assym.s: assym.s 1860611064bSBruce Evans 18785c856e7SNate Williamsassym.s: genassym 18840974c74SBruce Evans ./genassym >assym.s 1895b81b6b3SRodney W. Grimes 190a872b9bdSBruce Evansgenassym.o: ${I386}/i386/genassym.c 1915b036e2bSBruce Evans ${CC} -c ${GEN_CFLAGS} ${I386}/i386/genassym.c 19240974c74SBruce Evans 19340974c74SBruce Evansgenassym: genassym.o 194ac80870eSJordan K. Hubbard ${CC} ${GEN_CFLAGS} genassym.o -o ${.TARGET} 1955b81b6b3SRodney W. Grimes 196f7dd86c1SPeter Wemm${SYSTEM_OBJS} genassym.o vers.o: opt_global.h 197d061973cSPeter Wemm 1986f77b2deSPeter Wemmdepend: assym.s param.c vnode_if.h ${BEFORE_DEPEND} \ 1996f77b2deSPeter Wemm ${CFILES} ${SYSTEM_CFILES} ${GEN_CFILES} ${SFILES} ${SYSTEM_SFILES} 2006386a7e0SPeter Wemm rm -f .newdep 2015b036e2bSBruce Evans mkdep -a -f .newdep ${CFLAGS} ${CFILES} ${SYSTEM_CFILES} 2025b036e2bSBruce Evans mkdep -a -f .newdep ${GEN_CFLAGS} ${GEN_CFILES} 2035b036e2bSBruce Evans env MKDEP_CPP="${CC} -E" \ 2045b036e2bSBruce Evans mkdep -a -f .newdep ${ASM_CFLAGS} ${SFILES} ${SYSTEM_SFILES} 2056386a7e0SPeter Wemm rm -f .depend 2069fb93307SWolfram Schneider mv -f .newdep .depend 2075b81b6b3SRodney W. Grimes 208c6b60f62SEivind Eklundcleandepend: 209c6b60f62SEivind Eklund rm -f .depend 210c6b60f62SEivind Eklund 2115b81b6b3SRodney W. Grimeslinks: 21237558b01SPeter Wemm egrep '#if' ${CFILES} | sed -f $S/conf/defines | \ 2135b81b6b3SRodney W. Grimes sed -e 's/:.*//' -e 's/\.c/.o/' | sort -u > dontlink 21437558b01SPeter Wemm echo ${CFILES} | tr -s ' ' '\12' | sed 's/\.c/.o/' | \ 2155b81b6b3SRodney W. Grimes sort -u | comm -23 - dontlink | \ 2165b81b6b3SRodney W. Grimes sed 's,../.*/\(.*.o\),rm -f \1;ln -s ../GENERIC/\1 \1,' > makelinks 2175b81b6b3SRodney W. Grimes sh makelinks && rm -f dontlink 2185b81b6b3SRodney W. Grimes 2195b81b6b3SRodney W. Grimestags: 22093740fb9SJordan K. Hubbard @[ -f .depend ] || { echo "you must make depend first"; exit 1; } 22193740fb9SJordan K. Hubbard sh $S/conf/systags.sh 22293740fb9SJordan K. Hubbard rm -f tags1 22393740fb9SJordan K. Hubbard sed -e 's, ../, ,' tags > tags1 2245b81b6b3SRodney W. Grimes 2254e8691dcSPeter Wemminstall install.debug: 2264e8691dcSPeter Wemm @if [ ! -f ${KERNEL}${.TARGET:S/install//} ] ; then \ 2277c74d268SNick Hibma echo "You must build a kernel first." ; \ 228c30fe42cSPeter Wemm exit 1 ; \ 229c30fe42cSPeter Wemm fi 2302005b07aSGreg Lehey.if exists(${DESTDIR}/${KERNEL}) 2312005b07aSGreg Lehey -chflags noschg ${DESTDIR}/${KERNEL} 2322005b07aSGreg Lehey mv ${DESTDIR}/${KERNEL} ${DESTDIR}/${KERNEL}.old 233c6b60f62SEivind Eklund.endif 2348cd077a7SBruce Evans PATH=$${PATH}:/sbin:/usr/sbin; \ 2352005b07aSGreg Lehey if [ `sysctl -n kern.bootfile` = ${DESTDIR}/${KERNEL} ] ; then \ 2362005b07aSGreg Lehey sysctl -w kern.bootfile=${DESTDIR}/${KERNEL}.old ; \ 237a127a704SPeter Wemm if [ -f /var/db/kvm_${KERNEL}.db ] ; then \ 238a127a704SPeter Wemm mv -f /var/db/kvm_${KERNEL}.db /var/db/kvm_${KERNEL}.old.db ; \ 23903486e0aSGuido van Rooij fi \ 2403b3f55c7SPoul-Henning Kamp fi 2414e8691dcSPeter Wemm install -c -m 555 -o root -g wheel -fschg \ 2424e8691dcSPeter Wemm ${KERNEL}${.TARGET:S/install//} ${DESTDIR}/${KERNEL} 2436bf5b247SGarrett Wollman 2446d04a6cbSPeter Wemmreinstall reinstall.debug: 2456d04a6cbSPeter Wemm install -c -m 555 -o root -g wheel -fschg \ 2466d04a6cbSPeter Wemm ${KERNEL}${.TARGET:S/reinstall//} ${DESTDIR}/${KERNEL} 2476d04a6cbSPeter Wemm 248a872b9bdSBruce Evansconfig.o: 249a872b9bdSBruce Evans ${NORMAL_C} 250a872b9bdSBruce Evans 251a872b9bdSBruce Evansioconf.o: 252a872b9bdSBruce Evans ${NORMAL_C} 2535b81b6b3SRodney W. Grimes 2542d717e4aSRodney W. Grimesparam.c: $S/conf/param.c 2555b81b6b3SRodney W. Grimes -rm -f param.c 2565b81b6b3SRodney W. Grimes cp $S/conf/param.c . 2575b81b6b3SRodney W. Grimes 258a872b9bdSBruce Evansparam.o: 259a872b9bdSBruce Evans ${NORMAL_C} 2605b81b6b3SRodney W. Grimes 261a872b9bdSBruce Evansvers.c: $S/conf/newvers.sh $S/sys/param.h ${SYSTEM_DEP} 2625b81b6b3SRodney W. Grimes sh $S/conf/newvers.sh ${KERN_IDENT} ${IDENT} 2635b81b6b3SRodney W. Grimes 264a872b9bdSBruce Evans# XXX strictly, everything depends on Makefile because changes to ${PROF} 265a872b9bdSBruce Evans# only appear there, but we don't handle that. 266a872b9bdSBruce Evansvers.o: 267a872b9bdSBruce Evans ${NORMAL_C} 2681fcddf2eSEivind Eklund 269574b36f9SPeter Wemmvnode_if.c: $S/kern/vnode_if.pl $S/kern/vnode_if.src 270574b36f9SPeter Wemm perl5 $S/kern/vnode_if.pl -c $S/kern/vnode_if.src 2716f77b2deSPeter Wemm 272574b36f9SPeter Wemmvnode_if.h: $S/kern/vnode_if.pl $S/kern/vnode_if.src 273574b36f9SPeter Wemm perl5 $S/kern/vnode_if.pl -h $S/kern/vnode_if.src 274a872b9bdSBruce Evans 275a872b9bdSBruce Evansvnode_if.o: 276a872b9bdSBruce Evans ${NORMAL_C} 27726f9a767SRodney W. Grimes 2784add5931SPeter Wemm# Commented out for now pending a better solution. 2794add5931SPeter Wemm# How do we pick up compiler version specific flags?? 2804add5931SPeter Wemm#.if exists($S/../share/mk) 2814add5931SPeter Wemm#.include "$S/../share/mk/bsd.kern.mk" 2824add5931SPeter Wemm#.else 2839e72552fSBruce Evans.include <bsd.kern.mk> 2844add5931SPeter Wemm#.endif 2859e72552fSBruce Evans 2865b81b6b3SRodney W. Grimes%RULES 2875b81b6b3SRodney W. Grimes 2885b81b6b3SRodney W. Grimes# DO NOT DELETE THIS LINE -- make depend uses it 289