1# Makefile.mips
2# $FreeBSD$
3#
4# Makefile for FreeBSD
5#
6# This makefile is constructed from a machine description:
7#	config machineid
8# Most changes should be made in the machine description
9#	/sys/mips/conf/``machineid''
10# after which you should do
11#	 config machineid
12# Generic makefile changes should be made in
13#	/sys/conf/Makefile.mips
14# after which config should be rerun for all machines.
15#
16
17# Which version of config(8) is required.
18%VERSREQ=	600004
19
20STD8X16FONT?=	iso
21
22.if !defined(S)
23.if exists(./@/.)
24S=	./@
25.else
26S=	../../..
27.endif
28.endif
29.include "$S/conf/kern.pre.mk"
30
31INCLUDES+= -I$S/contrib/libfdt
32
33LDSCRIPT_NAME?=ldscript.$M
34SYSTEM_LD:= ${SYSTEM_LD:$S/conf/${LDSCRIPT_NAME}=${LDSCRIPT_NAME}}
35SYSTEM_DEP:= ${SYSTEM_DEP:$S/conf/${LDSCRIPT_NAME}=${LDSCRIPT_NAME}}
36
37KERNLOADADDR?=0x80001000
38# This obscure value is defined by CFE for WR160N
39# To be changed later
40TRAMPLOADADDR?=0x807963c0
41
42MKMODULESENV+=	MACHINE=${MACHINE} MACHINE_ARCH=${MACHINE_ARCH}
43
44# We default to the MIPS32 ISA, if none specified in the
45# kernel configuration file.
46ARCH_FLAGS?=-march=mips32
47EXTRA_FLAGS=-fno-pic -mno-abicalls -G0 -DKERNLOADADDR=${KERNLOADADDR}
48
49HACK_EXTRA_FLAGS=-shared
50
51# We add the -fno-pic flag to kernels because otherwise performance
52# is extremely poor, as well as -mno-abicalls to force no ABI usage.
53CFLAGS+=${EXTRA_FLAGS} $(ARCH_FLAGS)
54HACK_EXTRA_FLAGS+=${EXTRA_FLAGS} $(ARCH_FLAGS)
55TRAMP_ARCH_FLAGS?=$(ARCH_FLAGS)
56TRAMP_EXTRA_FLAGS=${EXTRA_FLAGS} ${TRAMP_ARCH_FLAGS}
57.if ${MACHINE_ARCH:Mmips64*} != ""
58TRAMP_ELFSIZE=64
59.else
60TRAMP_ELFSIZE=32
61.endif
62
63# XXX hardcoded kernel entry point
64ASM_CFLAGS+=${CFLAGS} -D_LOCORE -DLOCORE
65
66.if !defined(WITHOUT_KERNEL_TRAMPOLINE)
67KERNEL_EXTRA=trampoline
68trampoline: ${KERNEL_KO}.tramp.bin
69${KERNEL_KO}.tramp.bin: ${KERNEL_KO} $S/$M/$M/elf_trampoline.c \
70	$S/$M/$M/inckern.S 
71	${OBJCOPY} --strip-symbol '$$d' --strip-symbol '$$a' \
72		-g --strip-symbol '$$t' ${FULLKERNEL} ${KERNEL_KO}.tmp
73	sed -e s/${KERNLOADADDR}/${TRAMPLOADADDR}/ -e s/" + SIZEOF_HEADERS"// \
74		 ${LDSCRIPT_NAME} > ${LDSCRIPT_NAME}.tramp.noheader
75	${CC} -O -nostdlib -I. -I$S ${TRAMP_EXTRA_FLAGS} ${TRAMP_LDFLAGS} -Xlinker \
76		-T -Xlinker ${LDSCRIPT_NAME}.tramp.noheader \
77		-DKERNNAME="\"${KERNEL_KO}.tmp\"" -DELFSIZE=${TRAMP_ELFSIZE} \
78		$S/$M/$M/elf_trampoline.c $S/$M/$M/inckern.S \
79		-o ${KERNEL_KO}.tramp.elf
80	${OBJCOPY} -S -O binary ${KERNEL_KO}.tramp.elf \
81		${KERNEL_KO}.tramp.bin
82.endif
83
84%BEFORE_DEPEND
85
86%OBJS
87
88%FILES.c
89
90%FILES.s
91
92%FILES.m
93
94%CLEAN
95
96CLEAN+=	${LDSCRIPT_NAME} ${LDSCRIPT_NAME}.tramp.noheader \
97	${KERNEL_KO}.tramp.elf ${KERNEL_KO}.tramp.bin
98
99${LDSCRIPT_NAME}: $S/conf/${LDSCRIPT_NAME}
100	sed s/KERNLOADADDR/${KERNLOADADDR}/g $S/conf/${LDSCRIPT_NAME} \
101		> ${LDSCRIPT_NAME}
102%RULES
103
104.include "$S/conf/kern.post.mk"
105