Makefile.xxboot revision 1.1.2.2 1 # $NetBSD: Makefile.xxboot,v 1.1.2.2 2012/04/17 00:07:03 yamt Exp $
2
3 NOMAN= # defined
4
5 .include <bsd.own.mk>
6
7 BOOT= $(DEV)boot_$(FS)
8 VERSIONFILE= ${.CURDIR}/../version
9 VERSION!= ${TOOL_AWK} -F: '$$1 ~ /^[0-9.]*$$/ { it = $$1; } \
10 END { print it }' ${VERSIONFILE}
11 NEWVERSWHAT= "${BOOT}"
12
13 # text and bss addresses in hex
14 TEXT= 0f0000 # Primary (me)
15 TEXTDATASIZE= 2000 # 8KB for UFS at maximum
16 # 30KB (=(16-1)*2048) for ISO9660 at max.
17 BOOT_TEXT= 006000 # Secondary (/boot)
18
19 PROG= $(BOOT)
20 BINDIR= /usr/mdec
21 STRIPFLAG=
22 BINMODE= 444
23
24 S= ${.CURDIR}/../../../../..
25 M= $S/arch/x68k
26 .PATH: ${.CURDIR}/..
27 SRCS= boot.S bootmain.c conf.c consio1.c $(DEVDRV).c
28
29 SRCS+= vers.c
30 CLEANFILES+= vers.c
31 vers.c: ${VERSIONFILE}
32 ${_MKTARGET_CREATE}
33 ${HOST_SH} ${S}/conf/newvers_stand.sh ${.ALLSRC} ${MACHINE} ${NEWVERSWHAT}
34
35 CFLAGS= -Os -fomit-frame-pointer
36 #CFLAGS+= -Wall
37 CPPFLAGS+= -D_STANDALONE
38 CPPFLAGS+= -DTEXTADDR="0x$(TEXT)" -DBOOT_TEXTADDR="0x$(BOOT_TEXT)"
39 CPPFLAGS+= -DTDSIZE="0x$(TEXTDATASIZE)"
40 CPPFLAGS+= -DPROG=\"$(PROG)\" -DBOOT_VERS=\"$(VERSION)\"
41 CPPFLAGS+= -DBOOT_STAGE1 $(BOOTCPPFLAGS)
42 CPPFLAGS+= -nostdinc -I${.OBJDIR} -I${S}
43 CPPFLAGS+= -I$M/stand/libiocs -I$M/stand/libsa -I$M/stand/common
44 AFLAGS= ${CFLAGS:M-[ID]*}
45 .if ${OBJECT_FMT} == "ELF"
46 LINKFLAGS= -n -Bstatic -T ${.CURDIR}/../xxboot.ldscript -M
47 LINKFLAGS+= -noinhibit-exec # XXX
48 .else
49 LINKFLAGS= -n -Bstatic -Ttext ${TEXT} -M
50 OBJCOPY?= objcopy
51 .endif
52 LIBIOCS!= cd $M/stand/libiocs && ${PRINTOBJDIR}
53 LIBSA!= cd $M/stand/libsa && ${PRINTOBJDIR}
54 LDLIBS= -L${LIBSA}/lib/sa -lsa -L ${LIBSA}/lib/kern -lkern
55 LDLIBS+= -L${LIBIOCS} -liocs
56
57 .PATH: $S/lib/libsa
58 CPPFLAGS+= -DLIBSA_SINGLE_FILESYSTEM=$(FS)
59 CPPFLAGS+= -DLIBSA_SINGLE_DEVICE=$(DEV)
60 CPPFLAGS+= -DLIBSA_NO_TWIDDLE -DLIBSA_NO_FD_CHECKING -DLIBSA_NO_RAW_ACCESS -DLIBSA_NO_FS_WRITE
61 SRCS+= open.c close.c read.c lseek.c loadfile.c loadfile_aout.c alloc.c
62 SRCS+= $(FS).c
63
64 .PATH: $M/stand/common
65 SRCS+= exec_image.S
66
67 .include "${.CURDIR}/../../Makefile.booters"
68
69 CLEANFILES+= ${PROG}.x $(PROG).map ${PROG}
70
71
72 ${PROG}: $(OBJS)
73 ${_MKTARGET_LINK}
74 $(LD) $(LINKFLAGS) -o ${PROG} $(OBJS) $(LDLIBS) > $(PROG).map
75 @grep first_kbyte $(PROG).map
76 .if ${OBJECT_FMT} == "ELF"
77 @if [ `(echo ibase=16; \
78 ${TOOL_SED} -n \
79 's/^.*0x\([0-9a-f]*\).* first_kbyte$$/\1-$(TEXT)-400/p' \
80 $(PROG).map | \
81 tr a-f A-F) | bc` -gt 0 ]; \
82 then echo '$(BOOT): first_kbyte exceeds the first killobyte'; \
83 rm $(PROG) ; exit 1; \
84 fi
85 @if [ `(echo ibase=16; \
86 ${TOOL_SED} -n \
87 's/^.*0x\([0-9a-f]*\).* _edata *= *\.$$/\1-$(TEXT)-$(TEXTDATASIZE)/p' \
88 $(PROG).map | \
89 tr a-f A-F) | bc` -gt 0 ]; \
90 then echo '$(BOOT): text+data is too large'; \
91 rm $(PROG) ; exit 1; \
92 fi
93 .else
94 mv $(PROG) $(PROG).x
95 $(OBJCOPY) -I a.out-m68k-netbsd -O binary $(PROG).x $(PROG)
96 @rm -f $(PROG).x
97 @if [ `(echo ibase=16; \
98 ${TOOL_SED} -n \
99 's/ first_kbyte:.*0x\(.*\),.*$$/\1-$(TEXT)-400/p' \
100 $(PROG).map | \
101 tr a-f A-F) | bc` -gt 0 ]; \
102 then echo '$(BOOT): first_kbyte exceeds the first killobyte'; \
103 rm $(PROG) ; exit 1; \
104 fi
105 @if [ `(echo ibase=16; \
106 ${TOOL_SED} -n \
107 's/ _edata:.*0x\(.*\),.*$$/\1-$(TEXT)-$(TEXTDATASIZE)/p' \
108 $(PROG).map | \
109 tr a-f A-F) | bc` -gt 0 ]; \
110 then echo '$(BOOT): text+data is too large'; \
111 rm $(PROG) ; exit 1; \
112 fi
113 .endif
114 ${TOUCHPROG}
115
116 .include <bsd.prog.mk>
117