Makefile.sparc64 revision 85198
198944Sobrien# Makefile.sparc64 -- with config changes. 298944Sobrien# Copyright 1990 W. Jolitz 3130803Smarcel# from: @(#)Makefile.i386 7.1 5/10/91 498944Sobrien# $FreeBSD: head/sys/conf/Makefile.sparc64 85198 2001-10-19 22:19:06Z mp $ 598944Sobrien# 698944Sobrien# Makefile for FreeBSD 798944Sobrien# 898944Sobrien# This makefile is constructed from a machine description: 998944Sobrien# config machineid 1098944Sobrien# Most changes should be made in the machine description 1198944Sobrien# /sys/sparc64/conf/``machineid'' 1298944Sobrien# after which you should do 1398944Sobrien# config machineid 1498944Sobrien# Generic makefile changes should be made in 1598944Sobrien# /sys/sparc64/conf/Makefile.sparc64 1698944Sobrien# after which config should be rerun for all machines. 1798944Sobrien# 1898944Sobrien 1998944SobrienMACHINE_ARCH= sparc64 2098944Sobrien 2198944SobrienAR= sparc64-ar 2298944SobrienCC= sparc64-unknown-elf-gcc -D__sparc64__ 2398944SobrienLD= sparc64-ld 2498944SobrienNM= sparc64-nm 2598944SobrienOBJCOPY= sparc64-objcopy 2698944SobrienOBJDUMP= sparc64-objdump 2798944SobrienRANLIB= sparc64-ranlib 2898944SobrienSIZE= sparc64-size 2998944Sobrien 3098944SobrienCWARNFLAGS= -Wall -Wredundant-decls -Wnested-externs -Wstrict-prototypes \ 3198944Sobrien -Wmissing-prototypes -Wpointer-arith -Winline -Wcast-qual \ 3298944Sobrien -ansi 3398944Sobrien 3498944Sobrien# Which version of config(8) is required. 3598944Sobrien%VERSREQ= 500008 3698944Sobrien 3798944Sobrien# Can be overridden by makeoptions or /etc/make.conf 3898944SobrienKERNEL_KO?= kernel 3998944SobrienKERNEL?= kernel 4098944SobrienKODIR?= /boot/${KERNEL} 4198944SobrienSTD8X16FONT?= iso 42130803Smarcel 43130803Smarcel.if !defined(S) 4498944Sobrien.if exists(./@/.) 4598944SobrienS= ./@ 4698944Sobrien.else 4798944SobrienS= ../../.. 4898944Sobrien.endif 4998944Sobrien.endif 5098944SobrienM= ${MACHINE_ARCH} 5198944Sobrien 5298944SobrienNM?= nm 5398944SobrienOBJCOPY?= objcopy 5498944SobrienSIZE?= size 5598944Sobrien 5698944SobrienCOPTFLAGS?=-O -pipe 5798944Sobrien.if !defined(NO_CPU_COPTFLAGS) 5898944SobrienCOPTFLAGS+= ${_CPUCFLAGS} 5998944Sobrien.endif 6098944SobrienINCLUDES= -nostdinc -I- ${INCLMAGIC} -I. -I$S -I$S/dev 6198944Sobrien# This hack is to allow kernel compiles to succeed on machines w/out srcdist 6298944Sobrien.if exists($S/../include) 6398944SobrienINCLUDES+= -I$S/../include 6498944Sobrien.else 6598944SobrienINCLUDES+= -I/usr/include 6698944Sobrien.endif 6798944Sobrien 6898944SobrienCOPTS= ${INCLUDES} ${IDENT} -D_KERNEL -include opt_global.h 6998944SobrienCFLAGS= ${COPTFLAGS} ${CWARNFLAGS} ${DEBUG} ${COPTS} -mcmodel=medlow 7098944Sobrien 71130803Smarcel# XXX LOCORE means "don't declare C stuff" not "for locore.s". 72130803SmarcelASM_CFLAGS= -x assembler-with-cpp -DLOCORE ${CFLAGS} 73130803Smarcel 74130803Smarcel# Select the correct set of tools. Can't set OBJFORMAT here because it 75130803Smarcel# doesn't get exported into the environment, and if it were exported 7698944Sobrien# then it might break building of utilities. 77130803SmarcelFMT= 78130803SmarcelCFLAGS+= ${FMT} 7998944Sobrien 80130803SmarcelDEFINED_PROF= ${PROF} 8198944Sobrien.if defined(PROF) 8298944SobrienCFLAGS+= -malign-functions=4 8398944Sobrien.if ${PROFLEVEL} >= 2 8498944SobrienIDENT+= -DGPROF4 -DGUPROF 8598944SobrienPROF+= -mprofiler-epilogue 8698944Sobrien.endif 8798944Sobrien.endif 8898944Sobrien 8998944Sobrien# Put configuration-specific C flags last (except for ${PROF}) so that they 9098944Sobrien# can override the others. 9198944SobrienCFLAGS+= ${CONF_CFLAGS} 9298944Sobrien 9398944SobrienNORMAL_C= ${CC} -c ${CFLAGS} ${PROF} ${.IMPSRC} 9498944SobrienNORMAL_C_C= ${CC} -c ${CFLAGS} ${PROF} ${.IMPSRC} 9598944SobrienNORMAL_S= ${CC} -c ${ASM_CFLAGS} ${.IMPSRC} 9698944SobrienPROFILE_C= ${CC} -c ${CFLAGS} ${.IMPSRC} 9798944Sobrien 9898944SobrienNORMAL_M= perl5 $S/kern/makeobjops.pl -c $<; \ 9998944Sobrien ${CC} -c ${CFLAGS} ${PROF} ${.PREFIX}.c 10098944Sobrien 10198944SobrienGEN_CFILES= $S/$M/$M/genassym.c 10298944SobrienSYSTEM_CFILES= vnode_if.c hints.c env.c config.c 10398944SobrienSYSTEM_SFILES= $S/$M/$M/locore.s $S/$M/$M/exception.s 10498944SobrienSYSTEM_DEP= Makefile ${SYSTEM_OBJS} 10598944SobrienSYSTEM_OBJS= locore.o exception.o vnode_if.o ${OBJS} hints.o env.o config.o hack.So 10698944SobrienSYSTEM_LD= @${LD} ${FMT} -Bdynamic -T $S/conf/ldscript.$M \ 10798944Sobrien -export-dynamic -dynamic-linker /red/herring \ 10898944Sobrien -o ${.TARGET} -X ${SYSTEM_OBJS} vers.o 10998944SobrienSYSTEM_LD_TAIL= @${OBJCOPY} --strip-symbol gcc2_compiled. ${.TARGET} ; \ 11098944Sobrien ${SIZE} ${FMT} ${.TARGET} ; chmod 755 ${.TARGET} 11198944SobrienSYSTEM_DEP+= $S/conf/ldscript.$M 11298944Sobrien 113130803Smarcel%BEFORE_DEPEND 114130803Smarcel 115130803Smarcel%OBJS 11698944Sobrien 11798944Sobrien%FILES.c 11898944Sobrien 11998944Sobrien%FILES.s 12098944Sobrien 12198944Sobrien%FILES.m 12298944Sobrien 12398944Sobrien%CLEAN 124130803Smarcel 125130803Smarcel.PHONY: all modules 126130803Smarcel 12798944Sobrienall: ${KERNEL_KO} 12898944Sobrien 12998944Sobriendepend: kernel-depend 13098944Sobrienclean: kernel-clean 13198944Sobriencleandepend: kernel-cleandepend 13298944Sobrienclobber: kernel-clobber 13398944Sobrientags: kernel-tags 13498944Sobrieninstall: kernel-install 13598944Sobrieninstall.debug: kernel-install.debug 13698944Sobrienreinstall: kernel-reinstall 13798944Sobrienreinstall.debug: kernel-reinstall.debug 13898944Sobrien 13998944Sobrien.if !defined(DEBUG) 14098944SobrienFULLKERNEL= ${KERNEL_KO} 14198944Sobrien.else 14298944SobrienFULLKERNEL= ${KERNEL_KO}.debug 14398944Sobrien${KERNEL_KO}: ${FULLKERNEL} 14498944Sobrien ${OBJCOPY} --strip-debug ${FULLKERNEL} ${KERNEL_KO} 14598944Sobrien.endif 146130803Smarcel 147130803Smarcel${FULLKERNEL}: ${SYSTEM_DEP} vers.o 148130803Smarcel @rm -f ${.TARGET} 14998944Sobrien @echo linking ${.TARGET} 15098944Sobrien ${SYSTEM_LD} 15198944Sobrien ${SYSTEM_LD_TAIL} 15298944Sobrien 15398944Sobrien.if !exists(.depend) 15498944Sobrien${SYSTEM_OBJS}: vnode_if.h ${BEFORE_DEPEND:M*.h} ${MFILES:T:S/.m$/.h/} 15598944Sobrien.endif 15698944Sobrien 15798944Sobrien.for mfile in ${MFILES} 15898944Sobrien${mfile:T:S/.m$/.h/}: ${mfile} 15998944Sobrien perl5 $S/kern/makeobjops.pl -h ${mfile} 16098944Sobrien.endfor 16198944Sobrien 16298944Sobrienkernel-clean: 16398944Sobrien rm -f *.o *.so *.So *.ko *.s eddep errs \ 16498944Sobrien ${FULLKERNEL} ${KERNEL_KO} linterrs makelinks \ 16598944Sobrien setdef[01].c setdefs.h tags \ 16698944Sobrien vers.c vnode_if.c vnode_if.h \ 16798944Sobrien ${MFILES:T:S/.m$/.c/} ${MFILES:T:S/.m$/.h/} \ 16898944Sobrien ${CLEAN} 16998944Sobrien 17098944Sobrienkernel-clobber: 17198944Sobrien find . -type f ! -name version -delete 17298944Sobrien 17398944Sobrien#lint: /tmp 17498944Sobrien# @lint -hbxn -DGENERIC -Dvolatile= ${COPTS} \ 17598944Sobrien# $S/$M/$M/Locore.c ${CFILES} | \ 17698944Sobrien# grep -v 'struct/union .* never defined' | \ 17798944Sobrien# grep -v 'possible pointer alignment problem' 17898944Sobrien 17998944Sobrienlocore.o: $S/$M/$M/locore.s assym.s 18098944Sobrien ${NORMAL_S} 18198944Sobrien 18298944Sobrienexception.o: $S/$M/$M/exception.s assym.s 183130803Smarcel ${NORMAL_S} 184130803Smarcel 18598944Sobrien# This is a hack. BFD "optimizes" away dynamic mode if there are no 18698944Sobrien# dynamic references. We could probably do a '-Bforcedynamic' mode like 187130803Smarcel# in the a.out ld. For now, this works. 18898944Sobrienhack.So: Makefile 18998944Sobrien touch hack.c 19098944Sobrien ${CC} ${FMT} -Wl,-shared -nostdlib hack.c -o hack.So 19198944Sobrien rm -f hack.c 19298944Sobrien 19398944Sobrien# this rule stops ./assym.s in .depend from causing problems 19498944Sobrien./assym.s: assym.s 19598944Sobrien 19698944Sobrienassym.s: $S/kern/genassym.sh genassym.o 19798944Sobrien NM=${NM} OBJFORMAT=elf sh $S/kern/genassym.sh genassym.o > ${.TARGET} 19898944Sobrien 19998944Sobriengenassym.o: $S/$M/$M/genassym.c 20098944Sobrien ${CC} -c ${CFLAGS} -elf $S/$M/$M/genassym.c 20198944Sobrien 20298944Sobrien${SYSTEM_OBJS} genassym.o vers.o: opt_global.h 20398944Sobrien 20498944Sobrienkernel-depend: 20598944Sobrien rm -f .olddep 20698944Sobrien if [ -f .depend ]; then mv .depend .olddep; fi 20798944Sobrien ${MAKE} _kernel-depend 20898944Sobrien 20998944Sobrien_kernel-depend: assym.s vnode_if.h ${BEFORE_DEPEND} \ 21098944Sobrien ${CFILES} ${SYSTEM_CFILES} ${GEN_CFILES} ${SFILES} \ 21198944Sobrien ${SYSTEM_SFILES} ${MFILES:T:S/.m$/.h/} 21298944Sobrien if [ -f .olddep ]; then mv .olddep .depend; fi 21398944Sobrien rm -f .newdep 21498944Sobrien env MKDEP_CPP="${CC} -E" \ 21598944Sobrien mkdep -a -f .newdep ${CFLAGS} ${CFILES} ${SYSTEM_CFILES} ${GEN_CFILES} 21698944Sobrien env MKDEP_CPP="${CC} -E" \ 21798944Sobrien mkdep -a -f .newdep ${ASM_CFLAGS} ${SFILES} ${SYSTEM_SFILES} 21898944Sobrien rm -f .depend 21998944Sobrien mv .newdep .depend 22098944Sobrien 22198944Sobrienkernel-cleandepend: 22298944Sobrien rm -f .depend 22398944Sobrien 22498944Sobrienlinks: 22598944Sobrien egrep '#if' ${CFILES} | sed -f $S/conf/defines | \ 22698944Sobrien sed -e 's/:.*//' -e 's/\.c/.o/' | sort -u > dontlink 22798944Sobrien echo ${CFILES} | tr -s ' ' '\12' | sed 's/\.c/.o/' | \ 22898944Sobrien sort -u | comm -23 - dontlink | \ 22998944Sobrien sed 's,../.*/\(.*.o\),rm -f \1;ln -s ../GENERIC/\1 \1,' > makelinks 23098944Sobrien sh makelinks; rm -f dontlink 23198944Sobrien 23298944Sobrienkernel-tags: 23398944Sobrien @[ -f .depend ] || { echo "you must make depend first"; exit 1; } 23498944Sobrien sh $S/conf/systags.sh 23598944Sobrien rm -f tags1 23698944Sobrien sed -e 's, ../, ,' tags > tags1 23798944Sobrien 23898944Sobrienkernel-install kernel-install.debug: 23998944Sobrien.if exists(${DESTDIR}/boot) 24098944Sobrien @if [ ! -f ${DESTDIR}/boot/device.hints ] ; then \ 24198944Sobrien echo "You must set up a ${DESTDIR}/boot/device.hints file first." ; \ 24298944Sobrien exit 1 ; \ 24398944Sobrien fi 24498944Sobrien @if [ x"`grep device.hints ${DESTDIR}/boot/defaults/loader.conf ${DESTDIR}/boot/loader.conf`" = "x" ]; then \ 24598944Sobrien echo "You must activate /boot/device.hints in loader.conf." ; \ 24698944Sobrien exit 1 ; \ 24798944Sobrien fi 24898944Sobrien.endif 24998944Sobrien @if [ ! -f ${KERNEL_KO}${.TARGET:S/kernel-install//} ] ; then \ 25098944Sobrien echo "You must build a kernel first." ; \ 25198944Sobrien exit 1 ; \ 25298944Sobrien fi 25398944Sobrien.if exists(${DESTDIR}${KODIR}) 25498944Sobrien.if exists(${DESTDIR}${KODIR}.old) 25598944Sobrien @-chflags -R noschg ${DESTDIR}${KODIR}.old 25698944Sobrien -rm -rf ${DESTDIR}${KODIR}.old 25798944Sobrien.endif 25898944Sobrien mv ${DESTDIR}${KODIR} ${DESTDIR}${KODIR}.old 25998944Sobrien [ "`sysctl -n kern.bootfile`" != "${DESTDIR}${KODIR}/kernel" ] || \ 26098944Sobrien sysctl kern.bootfile=${DESTDIR}${KODIR}.old/kernel 26198944Sobrien.endif 26298944Sobrien mkdir -p ${DESTDIR}${KODIR} 26398944Sobrien install -c -m 555 -o root -g wheel \ 26498944Sobrien ${KERNEL_KO}${.TARGET:S/kernel-install//} ${DESTDIR}${KODIR} 26598944Sobrien 26698944Sobrienkernel-reinstall kernel-reinstall.debug: 26798944Sobrien @-chflags -R noschg ${DESTDIR}${KODIR} 26898944Sobrien install -c -m 555 -o root -g wheel \ 26998944Sobrien ${KERNEL_KO}${.TARGET:S/kernel-reinstall//} ${DESTDIR}${KODIR} 27098944Sobrien 27198944Sobrien.if !defined(MODULES_WITH_WORLD) && !defined(NO_MODULES) && exists($S/modules) 27298944Sobrienall: modules 27398944Sobriendepend: modules-depend 27498944Sobrienclean: modules-clean 27598944Sobriencleandepend: modules-cleandepend 27698944Sobriencleandir: modules-cleandir 27798944Sobrienclobber: modules-clobber 27898944Sobrientags: modules-tags 27998944Sobrieninstall: modules-install 28098944Sobrieninstall.debug: modules-install.debug 28198944Sobrienreinstall: modules-reinstall 28298944Sobrienreinstall.debug: modules-reinstall.debug 28398944Sobrien.endif 28498944Sobrien 28598944SobrienMKMODULESENV= MAKEOBJDIRPREFIX=${.OBJDIR}/modules KMODDIR=${KODIR} 28698944Sobrien.if defined(MODULES_OVERRIDE) 28798944SobrienMKMODULESENV+= MODULES_OVERRIDE="${MODULES_OVERRIDE}" 28898944Sobrien.endif 28998944Sobrien 29098944Sobrienmodules: 29198944Sobrien @mkdir -p ${.OBJDIR}/modules 29298944Sobrien cd $S/modules ; env ${MKMODULESENV} ${MAKE} obj ; \ 29398944Sobrien env ${MKMODULESENV} ${MAKE} all 29498944Sobrien 29598944Sobrienmodules-depend: 29698944Sobrien @mkdir -p ${.OBJDIR}/modules 29798944Sobrien cd $S/modules ; env ${MKMODULESENV} ${MAKE} obj ; \ 29898944Sobrien env ${MKMODULESENV} ${MAKE} depend 29998944Sobrien 30098944Sobrienmodules-clean: 30198944Sobrien cd $S/modules ; env ${MKMODULESENV} ${MAKE} clean 30298944Sobrien 30398944Sobrienmodules-cleandepend: 30498944Sobrien cd $S/modules ; env ${MKMODULESENV} ${MAKE} cleandepend 30598944Sobrien 30698944Sobrienmodules-clobber: modules-clean 30798944Sobrien rm -rf ${MKMODULESENV} 30898944Sobrien 30998944Sobrienmodules-cleandir: 31098944Sobrien cd $S/modules ; env ${MKMODULESENV} ${MAKE} cleandir 31198944Sobrien 31298944Sobrienmodules-tags: 31398944Sobrien cd $S/modules ; env ${MKMODULESENV} ${MAKE} tags 31498944Sobrien 31598944Sobrienmodules-install modules-install.debug: 31698944Sobrien cd $S/modules ; env ${MKMODULESENV} ${MAKE} install 31798944Sobrien 31898944Sobrienmodules-reinstall modules-reinstall.debug: 31998944Sobrien cd $S/modules ; env ${MKMODULESENV} ${MAKE} install 32098944Sobrien 32198944Sobrienconfig.o: 32298944Sobrien ${NORMAL_C} 32398944Sobrien 32498944Sobrienvers.c: $S/conf/newvers.sh $S/sys/param.h ${SYSTEM_DEP} 32598944Sobrien sh $S/conf/newvers.sh ${KERN_IDENT} ${IDENT} 32698944Sobrien 32798944Sobrien# XXX strictly, everything depends on Makefile because changes to ${PROF} 32898944Sobrien# only appear there, but we don't handle that. 32998944Sobrienvers.o: 33098944Sobrien ${NORMAL_C} 33198944Sobrien 33298944Sobrienhints.o: hints.c 33398944Sobrien ${NORMAL_C} 33498944Sobrien 33598944Sobrienenv.o: env.c 33698944Sobrien ${NORMAL_C} 33798944Sobrien 33898944Sobrienvnode_if.c: $S/kern/vnode_if.pl $S/kern/vnode_if.src 33998944Sobrien perl5 $S/kern/vnode_if.pl -c $S/kern/vnode_if.src 34098944Sobrien 34198944Sobrienvnode_if.h: $S/kern/vnode_if.pl $S/kern/vnode_if.src 34298944Sobrien perl5 $S/kern/vnode_if.pl -h $S/kern/vnode_if.src 34398944Sobrien 34498944Sobrienvnode_if.o: 34598944Sobrien ${NORMAL_C} 34698944Sobrien 34798944Sobrien# Commented out for now pending a better solution. 34898944Sobrien# How do we pick up compiler version specific flags?? 34998944Sobrien#.if exists($S/../share/mk) 35098944Sobrien#.include "$S/../share/mk/bsd.kern.mk" 35198944Sobrien#.else 35298944Sobrien.include <bsd.kern.mk> 35398944Sobrien#.endif 35498944Sobrien 35598944Sobrien%RULES 35698944Sobrien