14 # Disable warnings that are currently incompatible with the zfs boot code
15 CWARNFLAGS.zfs_module.c += -Wno-array-bounds
16 CWARNFLAGS.zfs_module.c += -Wno-cast-align
17 CWARNFLAGS.zfs_module.c += -Wno-cast-qual
18 CWARNFLAGS.zfs_module.c += -Wno-missing-prototypes
19 CWARNFLAGS.zfs_module.c += -Wno-sign-compare
20 CWARNFLAGS.zfs_module.c += -Wno-unused-parameter
21 CWARNFLAGS.zfs_module.c += -Wno-unused-function
22 CWARNFLAGS.skein.c += -Wno-cast-align
23 CWARNFLAGS.skein.c += -Wno-missing-variable-declarations
26 # architecture-specific loader code
27 SRCS= boot1.c self_reloc.c start.S ufs_module.c
30 SRCS+= skein.c skein_block.c
31 # Do not unroll skein loops, reduce code size
32 CFLAGS+= -DSKEIN_LOOP=111
33 .PATH: ${.CURDIR}/../../../crypto/skein
37 CFLAGS+= -I${.CURDIR}/../include
38 CFLAGS+= -I${.CURDIR}/../include/${MACHINE}
39 CFLAGS+= -I${.CURDIR}/../../../contrib/dev/acpica/include
40 CFLAGS+= -I${.CURDIR}/../../..
41 CFLAGS+= -DEFI_UFS_BOOT
47 CFLAGS+= -I${.CURDIR}/../../zfs/
48 CFLAGS+= -I${.CURDIR}/../../../cddl/boot/zfs/
49 CFLAGS+= -I${.CURDIR}/../../../crypto/skein
50 CFLAGS+= -DEFI_ZFS_BOOT
53 # Always add MI sources and REGULAR efi loader bits
54 .PATH: ${.CURDIR}/../loader/arch/${MACHINE}
55 .PATH: ${.CURDIR}/../loader
56 .PATH: ${.CURDIR}/../../common
57 CFLAGS+= -I${.CURDIR}/../../common
59 FILES= boot1.efi boot1.efifat
60 FILESMODE_boot1.efi= ${BINMODE}
62 LDSCRIPT= ${.CURDIR}/../loader/arch/${MACHINE}/ldscript.${MACHINE}
63 LDFLAGS+= -Wl,-T${LDSCRIPT} -Wl,-Bsymbolic -shared
65 .if ${MACHINE_CPUARCH} == "aarch64"
66 CFLAGS+= -msoft-float -mgeneral-regs-only
68 .if ${MACHINE_CPUARCH} == "amd64" || ${MACHINE_CPUARCH} == "i386"
70 LDFLAGS+= -Wl,-znocombreloc
74 # Add libstand for the runtime functions used by the compiler - for example
75 # __aeabi_* (arm) or __divdi3 (i386).
76 # as well as required string and memory functions for all platforms.
86 .if ${MACHINE_CPUARCH} == "amd64"
87 EFI_TARGET= efi-app-x86_64
88 .elif ${MACHINE_CPUARCH} == "i386"
89 EFI_TARGET= efi-app-ia32
94 # Arbitrarily set the PE/COFF header timestamps to 1 Jan 2016 00:00:00
95 # for build reproducibility.
96 SOURCE_DATE_EPOCH?=1451606400
98 if ${NM} ${.ALLSRC} | grep ' U '; then \
99 echo "Undefined symbols in ${.ALLSRC}"; \
102 SOURCE_DATE_EPOCH=${SOURCE_DATE_EPOCH} \
103 ${OBJCOPY} -j .peheader -j .text -j .sdata -j .data \
104 -j .dynamic -j .dynsym -j .rel.dyn \
105 -j .rela.dyn -j .reloc -j .eh_frame \
106 --output-target=${EFI_TARGET} ${.ALLSRC} ${.TARGET}
108 boot1.o: ${.CURDIR}/../../common/ufsread.c
110 # The following inserts our objects into a template FAT file system
111 # created by generate-fat.sh
113 .include "${.CURDIR}/Makefile.fat"
114 BOOT1_MAXSIZE?= 131072
116 boot1.efifat: boot1.efi
117 @set -- `ls -l boot1.efi`; \
118 x=$$(($$5-${BOOT1_MAXSIZE})); \
119 if [ $$x -ge 0 ]; then \
120 echo "boot1 $$x bytes too large; regenerate FAT templates?" >&2 ;\
124 uudecode ${.CURDIR}/fat-${MACHINE}.tmpl.bz2.uu
125 mv fat-${MACHINE}.tmpl.bz2 ${.TARGET}.bz2
126 bzip2 -f -d ${.TARGET}.bz2
127 ${DD} if=boot1.efi of=${.TARGET} seek=${BOOT1_OFFSET} conv=notrunc
129 CLEANFILES= boot1.efi boot1.efifat
131 .include <bsd.prog.mk>
133 beforedepend ${OBJS}: machine
138 ln -sf ${.CURDIR}/../../../${MACHINE}/include machine
140 .if ${MACHINE_CPUARCH} == "amd64" || ${MACHINE_CPUARCH} == "i386"
141 beforedepend ${OBJS}: x86
145 ln -sf ${.CURDIR}/../../../x86/include x86