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