Makefile.bootprogs revision 1.5
11.5Schristos# $NetBSD: Makefile.bootprogs,v 1.5 2021/03/15 18:13:54 christos Exp $
21.3Schristos
31.3SchristosNOSSP=yes
41.3SchristosNOPIE=yes
51.1Smrg
61.1Smrg.include <bsd.own.mk>
71.1Smrg.include <bsd.klinks.mk>
81.1Smrg
91.2SmrgS=	${.CURDIR}/../../../../..
101.2SmrgCOMMON=	${.CURDIR}/../common
111.1Smrg
121.2Smrg.PATH:	${COMMON}
131.1Smrg
141.4Schristos.if ${MACHINE_ARCH:M*64*}
151.4Schristos.	if ${MACHINE_ARCH:M*eb}
161.4SchristosLDABI=	-melf32btsmipn32
171.4Schristos.	else
181.4SchristosLDABI=	-melf32ltsmipn32
191.4Schristos.	endif
201.5SchristosCPUFLAGS+=	-mabi=n32
211.4Schristos.endif
221.4Schristos
231.1SmrgSTRIPFLAG=
241.1SmrgBINMODE= 444
251.1Smrg
261.1Smrg# XXX SHOULD NOT NEED TO DEFINE THESE!
271.1SmrgLIBCRT0=
281.1SmrgLIBCRTI=
291.1SmrgLIBC=
301.1SmrgLIBCRTBEGIN=
311.1SmrgLIBCRTEND=
321.1Smrg
331.1SmrgSTRIP?=	strip
341.1Smrg
351.2SmrgCHECKSIZE_CMD=	SIZE=${SIZE} ${HOST_SH} ${COMMON}/checksize.sh
361.1Smrg
371.5SchristosAFLAGS+=	-DASSEMBLER -D_LOCORE -mno-abicalls -mips64 -msoft-float
381.1Smrg# -I${.CURDIR}/../.. done by Makefile.inc
391.1SmrgCPPFLAGS+=	-nostdinc -I${.OBJDIR} -D_STANDALONE -I${S}
401.1SmrgCFLAGS=		-Os -g -ffreestanding -mno-abicalls -msoft-float -G 0
411.1SmrgCFLAGS+=	-mips64
421.1SmrgCFLAGS+=	-Werror ${CWARNFLAGS}
431.1Smrg
441.2SmrgNETBSD_VERS!=${HOST_SH} ${S}/conf/osrelease.sh
451.1SmrgCPPFLAGS+= -DNETBSD_VERS='"${NETBSD_VERS}"'
461.1Smrg
471.1SmrgCWARNFLAGS+=	-Wno-main 
481.1SmrgCWARNFLAGS+=	-Wall -Wmissing-prototypes -Wstrict-prototypes -Wpointer-arith
491.1SmrgCWARNFLAGS+=	-Wno-pointer-sign
501.1Smrg
511.1SmrgVERSIONFLAGS+=-n
521.1Smrg.include "${S}/conf/newvers_stand.mk"
531.1Smrg
541.1Smrg# 
551.1Smrg# Refer to CFE documentation for a description of these regions.
561.1Smrg# 
571.1Smrg
581.1SmrgREGION1_START=		0x20000000		# "Region 1 start"
591.1SmrgREGION1_SIZE!=		expr 256 \* 1024	# 256k
601.1Smrg
611.2SmrgLDSCRIPT=		${COMMON}/boot.ldscript
621.1Smrg
631.1Smrg# our memory lauout:
641.1Smrg
651.1Smrg#	'unified' boot loaders (e.g. netboot) can consume all of region
661.1Smrg#	1 for their text+data, or text+data+bss.
671.1Smrg
681.1SmrgUNIFIED_LOAD_ADDRESS=	${REGION1_START}
691.1SmrgUNIFIED_MAX_LOAD!=	expr ${REGION1_SIZE}
701.1SmrgUNIFIED_MAX_TOTAL!=	expr ${REGION1_SIZE}
711.1Smrg
721.1Smrg#UNIFIED_HEAP_START=	right after secondary bss
731.1SmrgUNIFIED_HEAP_LIMIT=	(${REGION1_START} + ${REGION1_SIZE})
741.1Smrg
751.1Smrg#	two-stage boot loaders must share region 1.  The first stage
761.1Smrg#	loads into the lowest portion, and uses the higest portion
771.1Smrg#	for its heap.  The second stage loads in between the primary image
781.1Smrg#	and the heap, and can reuse the memory after it (i.e. the primary's
791.1Smrg#	heap) for its own heap.
801.1Smrg
811.1SmrgPRIMARY_LOAD_ADDRESS=	${REGION1_START}
821.1Smrg#PRIMARY_MAX_LOAD=	booter dependent, no more than ${PRIMARY_MAX_TOTAL}
831.1SmrgPRIMARY_MAX_TOTAL!=	expr 16 \* 1024
841.1Smrg
851.1Smrg# XXX SECONDARY_LOAD_ADDRESS should be
861.1Smrg# XXX (${PRIMARY_LOAD_ADDRESS} + ${PRIMARY_MAX_TOTAL}) bt there's no easy
871.1Smrg# XXX way to do that calculation and 'ld' wants a single number.
881.1SmrgSECONDARY_LOAD_ADDRESS=	0x20004000	# XXX
891.1SmrgSECONDARY_MAX_LOAD!=	expr 112 \* 1024
901.1SmrgSECONDARY_MAX_TOTAL!=	expr ${REGION1_SIZE} - ${PRIMARY_MAX_TOTAL}
911.1Smrg
921.1SmrgPRIMARY_HEAP_START=	(${SECONDARY_LOAD_ADDRESS} + ${SECONDARY_MAX_LOAD})
931.1SmrgPRIMARY_HEAP_LIMIT=	(${REGION1_START} + ${REGION1_SIZE})
941.1Smrg
951.1Smrg#SECONDARY_HEAP_START=	right after secondary bss
961.1SmrgSECONDARY_HEAP_LIMIT=	(${REGION1_START} + ${REGION1_SIZE})
971.1Smrg
981.1Smrg#	standalone programs are like kernels.  They load at
991.1Smrg#	0xfffffc0000300000 and can use the rest of memory.
1001.1Smrg
1011.1SmrgSTANDPROG_LOAD_ADDRESS=	0xfffffc0000300000
1021.1Smrg
1031.1Smrg
1041.1SmrgFILE_FORMAT_CPPFLAGS=	-DBOOT_ELF
1051.1Smrg
1061.1SmrgUNIFIED_CPPFLAGS=	-DUNIFIED_BOOTBLOCK \
1071.1Smrg			-DHEAP_LIMIT="${UNIFIED_HEAP_LIMIT}" \
1081.1Smrg			${FILE_FORMAT_CPPFLAGS}
1091.1Smrg
1101.1SmrgPRIMARY_CPPFLAGS=	-DPRIMARY_BOOTBLOCK \
1111.1Smrg			-DSECONDARY_LOAD_ADDRESS="${SECONDARY_LOAD_ADDRESS}" \
1121.1Smrg			-DSECONDARY_MAX_LOAD="${SECONDARY_MAX_LOAD}" \
1131.1Smrg			-DHEAP_LIMIT="${PRIMARY_HEAP_LIMIT}" \
1141.1Smrg			-DHEAP_START="${PRIMARY_HEAP_START}"
1151.1Smrg
1161.1SmrgSECONDARY_CPPFLAGS=	-DSECONDARY_BOOTBLOCK \
1171.1Smrg			-DHEAP_LIMIT="${SECONDARY_HEAP_LIMIT}" \
1181.1Smrg			${FILE_FORMAT_CPPFLAGS}
1191.1Smrg
1201.1SmrgSTANDPROG_CPPFLAGS=	-DSTANDALONE_PROGRAM
1211.1Smrg
1221.1Smrg.include <bsd.prog.mk>
1231.1Smrg
1241.1Smrg### find out what to use for libkern
1251.1SmrgKERN_AS=	library
1261.1Smrg.include "${S}/lib/libkern/Makefile.inc"
1271.1SmrgLIBKERN=	${KERNLIB}
1281.1Smrg
1291.1Smrg### find out what to use for libz
1301.1SmrgZ_AS=		library
1311.1Smrg.include "${S}/lib/libz/Makefile.inc"
1321.1SmrgLIBZ=		${ZLIB}
1331.1Smrg
1341.1Smrg### find out what to use for libsa
1351.1SmrgSA_AS=		library
1361.1SmrgSAMISCMAKEFLAGS+="SA_USE_LOADFILE=yes"
1371.1Smrg.include "${S}/lib/libsa/Makefile.inc"
1381.1SmrgLIBSA=		${SALIB}
1391.1Smrg
1401.1Smrg/usr/lib/crt0.o:
1411.1Smrg	true
1421.1Smrg
1431.1Smrg/usr/lib/crtbegin.o:
1441.1Smrg	true
1451.1Smrg
1461.1Smrg/usr/lib/crtend.o:
1471.1Smrg	true
1481.1Smrg
1491.1Smrgcleandir: .WAIT cleandirlocal
1501.1Smrgcleandirlocal:
1511.1Smrg	-rm -rf lib
152