Makefile.arm revision 260096
1268899Sbapt# Makefile.arm -- with config changes.
2234949Sbapt# Copyright 1990 W. Jolitz
3234949Sbapt#	from: @(#)Makefile.i386	7.1 5/10/91
4234949Sbapt# $FreeBSD: stable/10/sys/conf/Makefile.arm 260096 2013-12-30 20:15:46Z dim $
5234949Sbapt#
6234949Sbapt# Makefile for FreeBSD
7234949Sbapt#
8234949Sbapt# This makefile is constructed from a machine description:
9234949Sbapt#	config machineid
10234949Sbapt# Most changes should be made in the machine description
11234949Sbapt#	/sys/arm/conf/``machineid''
12234949Sbapt# after which you should do
13234949Sbapt#	 config machineid
14234949Sbapt# Generic makefile changes should be made in
15234949Sbapt#	/sys/conf/Makefile.arm
16234949Sbapt# after which config should be rerun for all machines.
17234949Sbapt#
18234949Sbapt
19234949Sbapt# Which version of config(8) is required.
20234949Sbapt%VERSREQ=	600004
21234949Sbapt
22234949SbaptSTD8X16FONT?=	iso
23234949Sbapt
24234949Sbapt.if !defined(S)
25234949Sbapt.if exists(./@/.)
26234949SbaptS=	./@
27234949Sbapt.else
28234949SbaptS=	../../..
29234949Sbapt.endif
30234949Sbapt.endif
31268899Sbapt.include "$S/conf/kern.pre.mk"
32234949Sbapt
33234949SbaptINCLUDES+= -I$S/contrib/libfdt
34234949Sbapt
35234949SbaptSYSTEM_LD:= ${SYSTEM_LD:$S/conf/ldscript.$M=ldscript.$M}
36234949SbaptSYSTEM_DEP:= ${SYSTEM_DEP:$S/conf/ldscript.$M=ldscript.$M}
37234949Sbapt
38234949Sbapt.if !defined(DEBUG) && !defined(PROFLEVEL)
39234949SbaptSTRIP_FLAGS = -S
40234949Sbapt.endif
41234949Sbapt
42234949SbaptCFLAGS.gcc += -mno-thumb-interwork
43268899Sbapt
44268899Sbapt.if empty(DDB_ENABLED)
45234949Sbapt.if defined(WITHOUT_ARM_EABI)
46234949SbaptCFLAGS.gcc += -mno-apcs-frame
47234949Sbapt.endif
48234949Sbapt.elif !defined(WITHOUT_ARM_EABI)
49268899SbaptCFLAGS += -funwind-tables
50234949Sbapt# clang requires us to tell it to emit assembly with unwind information
51234949SbaptCFLAGS.clang += -mllvm -arm-enable-ehabi
52268899Sbapt.endif
53234949Sbapt
54234949SbaptSYSTEM_LD_ = ${LD} -Bdynamic -T ldscript.$M.noheader ${LDFLAGS} \
55234949Sbapt	  -warn-common -export-dynamic -dynamic-linker /red/herring -o \
56234949Sbapt	   ${FULLKERNEL}.noheader -X ${SYSTEM_OBJS} vers.o
57234949SbaptSYSTEM_LD_TAIL +=;sed s/" + SIZEOF_HEADERS"// ldscript.$M\
58234949Sbapt		>ldscript.$M.noheader; \
59234949Sbapt		${SYSTEM_LD_}; \
60234949Sbapt		${OBJCOPY} -S -O binary ${FULLKERNEL}.noheader \
61234949Sbapt		${KERNEL_KO}.bin; \
62234949Sbapt		rm ${FULLKERNEL}.noheader
63234949Sbapt
64234949Sbapt.if defined(MFS_IMAGE)
65268899SbaptSYSTEM_LD_TAIL += ;sh ${S}/tools/embed_mfs.sh ${KERNEL_KO}.bin ${MFS_IMAGE};
66268899Sbapt.endif
67234949Sbapt
68234949SbaptFILES_CPU_FUNC =	$S/$M/$M/cpufunc_asm_arm7tdmi.S \
69234949Sbapt	$S/$M/$M/cpufunc_asm_arm8.S $S/$M/$M/cpufunc_asm_arm9.S \
70234949Sbapt	$S/$M/$M/cpufunc_asm_sa1.S $S/$M/$M/cpufunc_asm_arm10.S \
71234949Sbapt	$S/$M/$M/cpufunc_asm_xscale.S $S/$M/$M/cpufunc_asm.S \
72234949Sbapt	$S/$M/$M/cpufunc_asm_xscale_c3.S $S/$M/$M/cpufunc_asm_armv5_ec.S \
73234949Sbapt	$S/$M/$M/cpufunc_asm_fa526.S $S/$M/$M/cpufunc_asm_sheeva.S \
74234949Sbapt	$S/$M/$M/cpufunc_asm_pj4b.S $S/$M/$M/cpufunc_asm_armv7.S
75234949Sbapt
76234949SbaptKERNEL_EXTRA=trampoline
77234949SbaptKERNEL_EXTRA_INSTALL=kernel.gz.tramp
78234949Sbapttrampoline: ${KERNEL_KO}.tramp
79268899Sbapt${KERNEL_KO}.tramp: ${KERNEL_KO} $S/$M/$M/inckern.S $S/$M/$M/elf_trampoline.c
80234949Sbapt	echo "#define KERNNAME \"${KERNEL_KO}.tmp\"" >opt_kernname.h 
81234949Sbapt	sed s/${KERNVIRTADDR}/${KERNPHYSADDR}/ ldscript.$M > ldscript.$M.tramp
82234949Sbapt	sed s/" + SIZEOF_HEADERS"// ldscript.$M.tramp > \
83234949Sbapt	    ldscript.$M.tramp.noheader
84234949Sbapt	echo "#include <machine/asm.h>" >tmphack.S
85234949Sbapt	echo "ENTRY(_start)" >>tmphack.S
86268899Sbapt	echo "bl _startC" >>tmphack.S
87268899Sbapt	${OBJCOPY} --strip-symbol '$$d' --strip-symbol '$$a' \
88234949Sbapt	    -g --strip-symbol '$$t' ${FULLKERNEL} ${KERNEL_KO}.tmp
89234949Sbapt	eval $$(stat -s ${KERNEL_KO}.tmp) && \
90234949Sbapt	    echo "#define KERNSIZE $$st_size" >>opt_kernname.h
91234949Sbapt	${CC} -O -nostdlib -I. -I$S -Xlinker -T -Xlinker ldscript.$M.tramp \
92234949Sbapt	    tmphack.S $S/$M/$M/elf_trampoline.c $S/$M/$M/inckern.S \
93234949Sbapt	    ${FILES_CPU_FUNC} -o ${KERNEL_KO}.tramp
94234949Sbapt	${CC} -O -nostdlib -I. -I$S -Xlinker -T -Xlinker \
95234949Sbapt	    ldscript.$M.tramp.noheader \
96234949Sbapt	    tmphack.S $S/$M/$M/elf_trampoline.c $S/$M/$M/inckern.S \
97234949Sbapt	    ${FILES_CPU_FUNC} -o ${KERNEL_KO}.tramp.noheader 
98234949Sbapt	${OBJCOPY} -S -O binary ${KERNEL_KO}.tramp.noheader \
99234949Sbapt	    ${KERNEL_KO}.tramp.bin 
100234949Sbapt	${OBJCOPY} ${STRIP_FLAGS} ${KERNEL_KO}.tmp 
101234949Sbapt	echo "#define KERNNAME \"${KERNEL_KO}.tmp.gz\"" >opt_kernname.h 
102234949Sbapt	eval $$(stat -s ${KERNEL_KO}.tmp) && \
103234949Sbapt	    echo "#define KERNSIZE $$st_size" >>opt_kernname.h
104234949Sbapt	gzip -f9 ${KERNEL_KO}.tmp
105234949Sbapt	eval $$(stat -s ${KERNEL_KO}.tmp.gz) && \
106234949Sbapt	    echo "#define KERNCOMPSIZE $$st_size" >>opt_kernname.h
107234949Sbapt	${CC} -O2 -ffreestanding -DKZIP -I. -I$S -c $S/kern/inflate.c -o \
108234949Sbapt	    inflate-tramp.o
109234949Sbapt	${CC} -O -nostdlib -I. -I$S -Xlinker -T -Xlinker ldscript.$M.tramp \
110234949Sbapt	    -DKZIP tmphack.S $S/$M/$M/elf_trampoline.c inflate-tramp.o \
111234949Sbapt	    $S/$M/$M/inckern.S ${FILES_CPU_FUNC} -o ${KERNEL_KO}.gz.tramp
112234949Sbapt	${CC} -O -nostdlib -I. -I$S -Xlinker -T -Xlinker \
113234949Sbapt	    ldscript.$M.tramp.noheader \
114234949Sbapt	    -DKZIP tmphack.S $S/$M/$M/elf_trampoline.c inflate-tramp.o \
115234949Sbapt	    $S/$M/$M/inckern.S ${FILES_CPU_FUNC} -o ${KERNEL_KO}.tramp.noheader
116234949Sbapt	${OBJCOPY} -S -O binary ${KERNEL_KO}.tramp.noheader \
117234949Sbapt	    ${KERNEL_KO}.gz.tramp.bin
118234949Sbapt	rm ${KERNEL_KO}.tmp.gz ${KERNEL_KO}.tramp.noheader opt_kernname.h \
119234949Sbapt	    inflate-tramp.o tmphack.S
120234949Sbapt
121234949SbaptMKMODULESENV+=	MACHINE=${MACHINE}
122234949Sbapt
123234949Sbapt%BEFORE_DEPEND
124234949Sbapt
125234949Sbapt%OBJS
126234949Sbapt
127234949Sbapt%FILES.c
128234949Sbapt
129234949Sbapt%FILES.s
130234949Sbapt
131234949Sbapt%FILES.m
132234949Sbapt
133234949Sbapt%CLEAN
134234949Sbapt
135234949SbaptCLEAN+=	ldscript.$M ${KERNEL_KO}.bin ldscript.$M.noheader
136268899Sbapt
137234949SbaptCLEAN+= ${KERNEL_KO}.tramp ${KERNEL_KO}.tramp.bin ldscript.$M.tramp \
138234949Sbapt	ldscript.$M.tramp.noheader ${KERNEL_KO}.gz.tramp \
139234949Sbapt	${KERNEL_KO}.gz.tramp.bin
140234949Sbapt
141234949Sbaptldscript.$M: $S/conf/ldscript.$M
142234949Sbapt	cat $S/conf/ldscript.$M|sed s/KERNPHYSADDR/${KERNPHYSADDR}/g| \
143234949Sbapt	  sed s/KERNVIRTADDR/${KERNVIRTADDR}/g > ldscript.$M
144234949Sbapt%RULES
145234949Sbapt	
146234949Sbapt.include "$S/conf/kern.post.mk"
147234949Sbapt