Makefile.booters revision 1.5
1# $NetBSD: Makefile.booters,v 1.5 2014/01/16 01:15:33 christos Exp $
2
3.include <bsd.own.mk>
4
5# $S must correspond to the top of the 'sys' tree
6S=	${.CURDIR}/../../../..
7
8BINMODE?=	444
9
10# XXX SHOULD NOT NEED TO DEFINE THESE!
11LIBCRT0=
12LIBCRTI=
13LIBC=
14LIBCRTBEGIN=
15LIBCRTEND=
16
17.PATH:		${.CURDIR}/../common
18AFLAGS+=	-D_LOCORE -D_KERNEL -mno-abicalls
19# -I${.CURDIR}/../.. done by Makefile.inc
20CPPFLAGS+=	-nostdinc -D_STANDALONE -DNO_ABICALLS -D_NO_PROM_DEFINES \
21		-I${.OBJDIR} -I${S}
22# compiler flags for smallest code size
23CFLAGS=		-ffreestanding -Os -mmemcpy -mno-abicalls -G 128
24LDBUG=		-T $S/arch/mips/conf/stand.ldscript
25
26NETBSD_VERS!=	${HOST_SH} ${.CURDIR}/../../../../conf/osrelease.sh
27CPPFLAGS+=	-DNETBSD_VERS='"${NETBSD_VERS}"'
28
29PRIMARY_LOAD_ADDRESS?=	0x80000000
30SECONDARY_LOAD_ADDRESS?=0x80000000
31
32NOMAN=		# defined
33
34.if defined(PRIMARY_PROG)
35PROG=		${PRIMARY_PROG}
36SRCS =		start.S bootxx.c
37SRCS+=		devopen.c conf.c ace.c printf.c putchar.c
38
39LOAD_ADDRESS=	${PRIMARY_LOAD_ADDRESS}
40# Pick a number, any number...
41PRIMARY_MAX_TOTAL!=	expr 16 \* 1024
42
43CPPFLAGS+=	-DPRIMARY_BOOTBLOCK \
44		-DPRIMARY_LOAD_ADDRESS="${PRIMARY_LOAD_ADDRESS}" \
45		-DNO_GETCHAR \
46		-DLIBSA_NO_FS_SYMLINK -DLIBSA_NO_FS_WRITE \
47		-DLIBSA_NO_FS_CLOSE \
48		-DLIBSA_NO_DEV_CLOSE \
49		-DLIBSA_SINGLE_DEVICE=ace \
50		-D"aceioctl(x,y,z)=EINVAL" -D"aceclose(f)=0" \
51		-DLIBSA_NO_TWIDDLE \
52		-DLIBSA_NO_FD_CHECKING \
53		-DLIBSA_NO_RAW_ACCESS \
54		-DLIBSA_NO_DISKLABEL_MSGS \
55		-DALLOC_FIRST_FIT \
56		-DLIBSA_USE_MEMCPY -DLIBSA_USE_MEMSET
57
58CHECKSIZE_CMD?=	SIZE=${SIZE} ${HOST_SH} ${.CURDIR}/../common/checksize.sh
59
60.elif defined(SECONDARY_PROG)
61PROG=		${SECONDARY_PROG}
62LOAD_ADDRESS=	${SECONDARY_LOAD_ADDRESS}
63CPPFLAGS+=	-DSECONDARY_BOOTBLOCK -DHEAP_VARIABLE
64SRCS+=	vers.c
65CLEANFILES+= vers.c
66.else
67# XXX ?
68.endif
69
70### find out what to use for libkern
71KERN_AS=	library
72.include "${S}/lib/libkern/Makefile.inc"
73LIBKERN=	${KERNLIB}
74
75### find out what to use for libz
76.if defined(PRIMARY_PROG)
77LIBZ=
78.else
79Z_AS=		library
80.include "${S}/lib/libz/Makefile.inc"
81LIBZ=		${ZLIB}
82.endif
83
84### find out what to use for libsa
85SA_AS=		library
86.if defined(PRIMARY_PROG)
87SAMISCMAKEFLAGS+=SA_INCLUDE_NET=no
88.endif
89.if defined(SECONDARY_PROG)
90SAMISCMAKEFLAGS+=SA_USE_LOADFILE=yes SA_USE_CREAD=yes
91SAMISCMAKEFLAGS+=SA_INCLUDE_NET=yes
92.endif
93.include "${S}/lib/libsa/Makefile.inc"
94LIBSA=		${SALIB}
95
96LIBS=		${LIBSA} ${LIBZ} ${LIBSA} ${LIBKERN}
97
98.include <bsd.own.mk>
99
100vers.c: ${.CURDIR}/version
101	${HOST_SH} ${S}/conf/newvers_stand.sh ${${MKREPRO} == "yes" :?:-D} \
102	    -N ${.CURDIR}/version "emips"
103
104${PROG}: ${OBJS} ${LIBS}
105	${_MKTARGET_LINK}
106	${LD} -Map ${PROG}.map -N -x -Ttext ${LOAD_ADDRESS} \
107	    ${LDBUG} -e start -o ${PROG}.elf ${OBJS} ${LIBS}
108	@${SIZE} ${PROG}.elf
109.if defined(CHECKSIZE_CMD)
110	@${CHECKSIZE_CMD} ${PROG}.elf ${PRIMARY_MAX_LOAD} ${PRIMARY_MAX_TOTAL} || \
111	    (rm -f ${PROG}.elf ; false)
112.endif
113	@${OBJCOPY} --output-target=binary ${PROG}.elf ${PROG}.bin
114	dd if=${PROG}.bin of=${PROG} bs=512 conv=sync
115
116.include <bsd.prog.mk>
117.include <bsd.klinks.mk>
118
119CLEANFILES+=	${PROG}.map
120
121cleandir distclean: cleanlibdir
122
123cleanlibdir:
124	-rm -rf lib
125