]> glassweightruler.freedombox.rocks Git - Ventoy.git/blob - wimboot/wimboot-2.7.3/src/Makefile
1.1.07 release
[Ventoy.git] / wimboot / wimboot-2.7.3 / src / Makefile
1 VERSION := v2.7.3
2
3 OBJECTS := prefix.o startup.o callback.o main.o vsprintf.o string.o peloader.o
4 OBJECTS += int13.o vdisk.o cpio.o stdio.o lznt1.o xca.o die.o efi.o efimain.o
5 OBJECTS += efiguid.o efifile.o efipath.o efiboot.o efiblock.o cmdline.o
6 OBJECTS += wimpatch.o huffman.o lzx.o wim.o wimfile.o pause.o sha1.o cookie.o
7 OBJECTS += paging.o memmap.o
8
9 OBJECTS_i386 := $(patsubst %.o,%.i386.o,$(OBJECTS))
10 OBJECTS_x86_64 := $(patsubst %.o,%.x86_64.o,$(OBJECTS))
11 OBJECTS_i386_x86_64 := $(patsubst %.o,%.i386.x86_64.o,$(OBJECTS))
12
13 HEADERS := $(wildcard *.h)
14
15 HOST_CC := $(CC)
16 AS := $(AS)
17 ECHO := echo
18 OBJCOPY := objcopy
19 AR := ar
20 RANLIB := ranlib
21 CP := cp
22 RM := rm
23 GCAB := gcab
24 PESIGN := pesign
25 DIFF := diff
26 CUT := cut
27 BINUTILS_DIR := /usr
28 BFD_DIR := $(BINUTILS_DIR)
29 ZLIB_DIR := /usr
30
31 HOST_CFLAGS += -Wall -W -Werror
32
33 CFLAGS += -Os -ffreestanding -Wall -W -Werror -nostdinc -I. -fshort-wchar
34 CFLAGS += -DVERSION="\"$(VERSION)\""
35
36 CFLAGS_i386 += -m32 -march=i386 -malign-double -fno-pic
37 CFLAGS_x86_64 += -m64 -mno-red-zone -fpie
38
39 # Enable stack protection if available
40 #
41 SPG_TEST = $(CC) -fstack-protector-strong -mstack-protector-guard=global \
42 -x c -c /dev/null -o /dev/null >/dev/null 2>&1
43 SPG_FLAGS := $(shell $(SPG_TEST) && $(ECHO) '-fstack-protector-strong ' \
44 '-mstack-protector-guard=global')
45 CFLAGS += $(SPG_FLAGS)
46
47 # Inhibit unwanted debugging information
48 CFI_TEST = $(CC) -fno-dwarf2-cfi-asm -fno-exceptions -fno-unwind-tables \
49 -fno-asynchronous-unwind-tables -x c -c /dev/null \
50 -o /dev/null >/dev/null 2>&1
51 CFI_FLAGS := $(shell $(CFI_TEST) && \
52 $(ECHO) '-fno-dwarf2-cfi-asm -fno-exceptions ' \
53 '-fno-unwind-tables -fno-asynchronous-unwind-tables')
54 WORKAROUND_CFLAGS += $(CFI_FLAGS)
55
56 # Add -maccumulate-outgoing-args if required by this version of gcc
57 MS_ABI_TEST_CODE := extern void __attribute__ (( ms_abi )) ms_abi(); \
58 void sysv_abi ( void ) { ms_abi(); }
59 MS_ABI_TEST = $(ECHO) '$(MS_ABI_TEST_CODE)' | \
60 $(CC) -m64 -mno-accumulate-outgoing-args -x c -c - -o /dev/null \
61 >/dev/null 2>&1
62 MS_ABI_FLAGS := $(shell $(MS_ABI_TEST) || $(ECHO) '-maccumulate-outgoing-args')
63 WORKAROUND_CFLAGS += $(MS_ABI_FLAGS)
64
65 # Inhibit warnings from taking address of packed struct members
66 WNAPM_TEST = $(CC) -Wno-address-of-packed-member -x c -c /dev/null \
67 -o /dev/null >/dev/null 2>&1
68 WNAPM_FLAGS := $(shell $(WNAPM_TEST) && \
69 $(ECHO) '-Wno-address-of-packed-member')
70 WORKAROUND_CFLAGS += $(WNAPM_FLAGS)
71
72 # Inhibit LTO
73 LTO_TEST = $(CC) -fno-lto -x c -c /dev/null -o /dev/null >/dev/null 2>&1
74 LTO_FLAGS := $(shell $(LTO_TEST) && $(ECHO) '-fno-lto')
75 WORKAROUND_CFLAGS += $(LTO_FLAGS)
76
77 CFLAGS += $(WORKAROUND_CFLAGS)
78 CFLAGS += $(EXTRA_CFLAGS)
79
80 ifneq ($(DEBUG),)
81 CFLAGS += -DDEBUG=$(DEBUG)
82 endif
83
84 CFLAGS += -include compiler.h
85
86 ###############################################################################
87 #
88 # Final targets
89
90 all : wimboot wimboot.i386 wimboot.x86_64 wimboot.cab
91
92 wimboot : wimboot.x86_64 Makefile
93 $(CP) $< $@
94 $(CP) $@ ../$@
95
96 wimboot.%.elf : prefix.%.o lib.%.a script.lds Makefile
97 $(LD) -m elf_$* -T script.lds -o $@ -q -Map wimboot.$*.map \
98 prefix.$*.o lib.$*.a
99
100 wimboot.%.unsigned : wimboot.%.elf efireloc Makefile
101 $(OBJCOPY) -Obinary $< $@
102 ./efireloc $< $@
103
104 wimboot.%.unsigned.hash : wimboot.%.unsigned Makefile
105 $(PESIGN) -h -i $< | $(CUT) -d" " -f2- > $@
106
107 wimboot.%.efi : wimboot.%.unsigned Makefile
108 $(CP) $< $@
109
110 wimboot.%.efi.hash : wimboot.%.efi Makefile
111 $(PESIGN) -h -i $< | $(CUT) -d" " -f2- > $@
112
113 wimboot.% : wimboot.%.efi wimboot.%.efi.hash wimboot.%.unsigned.hash Makefile
114 $(DIFF) wimboot.$*.efi.hash wimboot.$*.unsigned.hash
115 $(CP) $< $@
116
117 wimboot.cab : wimboot.i386.efi wimboot.x86_64.efi Makefile
118 $(GCAB) -n -c $@ wimboot.i386.efi wimboot.x86_64.efi
119
120 ###############################################################################
121 #
122 # i386 objects
123
124 %.i386.s : %.S $(HEADERS) Makefile
125 $(CC) $(CFLAGS) $(CFLAGS_i386) -DASSEMBLY -Ui386 -E $< -o $@
126
127 %.i386.s : %.c $(HEADERS) Makefile
128 $(CC) $(CFLAGS) $(CFLAGS_i386) -S $< -o $@
129
130 %.i386.o : %.i386.s i386.i Makefile
131 $(AS) --32 i386.i $< -o $@
132
133 lib.i386.a : $(OBJECTS_i386) Makefile
134 $(RM) -f $@
135 $(AR) r $@ $(OBJECTS_i386)
136 $(RANLIB) $@
137
138 ###############################################################################
139 #
140 # i386 objects to be linked into an x86_64 binary
141
142 %.i386.x86_64.raw.o : %.i386.s i386.i Makefile
143 $(AS) --64 i386.i $< -o $@
144
145 %.i386.x86_64.o : %.i386.x86_64.raw.o Makefile
146 $(OBJCOPY) --prefix-symbols=__i386_ $< $@
147
148 ###############################################################################
149 #
150 # x86_64 objects
151
152 %.x86_64.s : %.S $(HEADERS) Makefile
153 $(CC) $(CFLAGS) $(CFLAGS_x86_64) -DASSEMBLY -Ui386 -E $< -o $@
154
155 %.x86_64.s : %.c $(HEADERS) Makefile
156 $(CC) $(CFLAGS) $(CFLAGS_x86_64) -S $< -o $@
157
158 %.x86_64.o : %.x86_64.s x86_64.i Makefile
159 $(AS) --64 x86_64.i $< -o $@
160
161 lib.x86_64.a : $(OBJECTS_x86_64) $(OBJECTS_i386_x86_64) Makefile
162 $(RM) -f $@
163 $(AR) r $@ $(OBJECTS_x86_64) $(OBJECTS_i386_x86_64)
164 $(RANLIB) $@
165
166 ###############################################################################
167 #
168 # EFI relocator
169
170 EFIRELOC_CFLAGS := -I$(BINUTILS_DIR)/include -I$(BFD_DIR)/include \
171 -I$(ZLIB_DIR)/include -idirafter .
172 EFIRELOC_LDFLAGS := -L$(BINUTILS_DIR)/lib -L$(BFD_DIR)/lib -L$(ZLIB_DIR)/lib \
173 -lbfd -ldl -liberty -lz -Wl,--no-warn-search-mismatch
174
175 efireloc : efireloc.c Makefile
176 $(CC) $(HOST_CFLAGS) $(EFIRELOC_CFLAGS) $< $(EFIRELOC_LDFLAGS) -o $@
177
178 ###############################################################################
179 #
180 # Cleanup
181
182 clean :
183 $(RM) -f *.s *.o *.a *.elf *.map
184 $(RM) -f efireloc
185 $(RM) -f wimboot wimboot.i386 wimboot.x86_64 ../wimboot
186 $(RM) -f wimboot.i386.unsigned wimboot.x86_64.unsigned
187 $(RM) -f wimboot.i386.efi wimboot.x86_64.efi wimboot.cab