]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - sys/boot/efi/boot1/Makefile
MFV r309587:
[FreeBSD/FreeBSD.git] / sys / boot / efi / boot1 / Makefile
1 # $FreeBSD$
2
3 MAN=
4
5 .include <src.opts.mk>
6
7 MK_SSP=         no
8
9 PROG=           boot1.sym
10 INTERNALPROG=
11 WARNS?=         6
12
13 .if ${MK_ZFS} != "no"
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
24 .endif
25
26 # architecture-specific loader code
27 SRCS=   boot1.c self_reloc.c start.S ufs_module.c
28 .if ${MK_ZFS} != "no"
29 SRCS+=          zfs_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
34 .endif
35
36 CFLAGS+=        -I.
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
42 .ifdef(EFI_DEBUG)
43 CFLAGS+=        -DEFI_DEBUG
44 .endif
45
46 .if ${MK_ZFS} != "no"
47 CFLAGS+=        -I${.CURDIR}/../../zfs/
48 CFLAGS+=        -I${.CURDIR}/../../../cddl/boot/zfs/
49 CFLAGS+=        -I${.CURDIR}/../../../crypto/skein
50 CFLAGS+=        -DEFI_ZFS_BOOT
51 .endif
52
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
58
59 FILES=  boot1.efi boot1.efifat
60 FILESMODE_boot1.efi=    ${BINMODE}
61
62 LDSCRIPT=       ${.CURDIR}/../loader/arch/${MACHINE}/ldscript.${MACHINE}
63 LDFLAGS+=       -Wl,-T${LDSCRIPT} -Wl,-Bsymbolic -shared
64
65 .if ${MACHINE_CPUARCH} == "aarch64"
66 CFLAGS+=        -msoft-float -mgeneral-regs-only
67 .endif
68 .if ${MACHINE_CPUARCH} == "amd64" || ${MACHINE_CPUARCH} == "i386"
69 CFLAGS+=        -fPIC
70 LDFLAGS+=       -Wl,-znocombreloc
71 .endif
72
73 #
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.
77 #
78 DPADD+=         ${LIBSTAND}
79 LDADD+=         -lstand
80
81 DPADD+=         ${LDSCRIPT}
82
83 NM?=            nm
84 OBJCOPY?=       objcopy
85
86 .if ${MACHINE_CPUARCH} == "amd64"
87 EFI_TARGET=     efi-app-x86_64
88 .elif ${MACHINE_CPUARCH} == "i386"
89 EFI_TARGET=     efi-app-ia32
90 .else
91 EFI_TARGET=     binary
92 .endif
93
94 # Arbitrarily set the PE/COFF header timestamps to 1 Jan 2016 00:00:00
95 # for build reproducibility.
96 SOURCE_DATE_EPOCH?=1451606400
97 boot1.efi: ${PROG}
98         if ${NM} ${.ALLSRC} | grep ' U '; then \
99                 echo "Undefined symbols in ${.ALLSRC}"; \
100                 exit 1; \
101         fi
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}
107
108 boot1.o: ${.CURDIR}/../../common/ufsread.c
109
110 # The following inserts our objects into a template FAT file system
111 # created by generate-fat.sh
112
113 .include "${.CURDIR}/Makefile.fat"
114 BOOT1_MAXSIZE?= 131072
115
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 ;\
121             exit 1; \
122         fi
123         echo ${.OBJDIR}
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
128
129 CLEANFILES= boot1.efi boot1.efifat
130
131 .include <bsd.prog.mk>
132
133 beforedepend ${OBJS}: machine
134
135 CLEANFILES+=   machine
136
137 machine: .NOMETA
138         ln -sf ${.CURDIR}/../../../${MACHINE}/include machine
139
140 .if ${MACHINE_CPUARCH} == "amd64" || ${MACHINE_CPUARCH} == "i386"
141 beforedepend ${OBJS}: x86
142 CLEANFILES+=   x86
143
144 x86: .NOMETA
145         ln -sf ${.CURDIR}/../../../x86/include x86
146 .endif