mirror of
https://github.com/Metabolix/HackBGRT.git
synced 2026-04-11 04:31:27 -07:00
Fix ARM (32-bit) build
Use -O, because -O2 causes Undefined OpCode in QEMU / UEFI Shell. Remove -mno-red-zone which triggers -Wunused-command-line-argument. Set architecture in PE file manually: EFI uses IMAGE_FILE_MACHINE_ARMTHUMB_MIXED = 0x01C2, while the default is IMAGE_FILE_MACHINE_ARMNT = 0x01C4.
This commit is contained in:
22
Makefile
22
Makefile
@@ -1,8 +1,10 @@
|
|||||||
CC = clang
|
CC = clang
|
||||||
CFLAGS = -target $(CLANG_TARGET) -ffreestanding -fshort-wchar -mno-red-zone
|
CFLAGS = -target $(CLANG_TARGET) -ffreestanding -fshort-wchar
|
||||||
CFLAGS += -std=c17 -O2 -Wshadow -Wall -Wunused -Werror-implicit-function-declaration
|
CFLAGS += -std=c17 -Wshadow -Wall -Wunused -Werror-implicit-function-declaration
|
||||||
CFLAGS += -I$(GNUEFI_INC) -I$(GNUEFI_INC)/$(GNUEFI_ARCH) -I$(GNUEFI_INC)/protocol
|
CFLAGS += -I$(GNUEFI_INC) -I$(GNUEFI_INC)/$(GNUEFI_ARCH) -I$(GNUEFI_INC)/protocol
|
||||||
|
CFLAGS += $(ARCH_CFLAGS)
|
||||||
LDFLAGS = -target $(CLANG_TARGET) -nostdlib -Wl,-entry:efi_main -Wl,-subsystem:efi_application -fuse-ld=lld
|
LDFLAGS = -target $(CLANG_TARGET) -nostdlib -Wl,-entry:efi_main -Wl,-subsystem:efi_application -fuse-ld=lld
|
||||||
|
ARCH_CFLAGS = -O2 -mno-red-zone
|
||||||
|
|
||||||
GNUEFI_INC = gnu-efi/inc
|
GNUEFI_INC = gnu-efi/inc
|
||||||
|
|
||||||
@@ -58,27 +60,25 @@ efi-signed/bootia32.efi: pki
|
|||||||
|
|
||||||
efi/bootx64.efi: CLANG_TARGET = x86_64-pc-windows-msvc
|
efi/bootx64.efi: CLANG_TARGET = x86_64-pc-windows-msvc
|
||||||
efi/bootx64.efi: GNUEFI_ARCH = x86_64
|
efi/bootx64.efi: GNUEFI_ARCH = x86_64
|
||||||
efi/bootx64.efi: $(FILES_C)
|
|
||||||
@mkdir -p efi
|
|
||||||
$(CC) $(CFLAGS) $(LDFLAGS) $^ -o $@
|
|
||||||
|
|
||||||
efi/bootia32.efi: CLANG_TARGET = i386-pc-windows-msvc
|
efi/bootia32.efi: CLANG_TARGET = i386-pc-windows-msvc
|
||||||
efi/bootia32.efi: GNUEFI_ARCH = ia32
|
efi/bootia32.efi: GNUEFI_ARCH = ia32
|
||||||
efi/bootia32.efi: $(FILES_C)
|
|
||||||
@mkdir -p build
|
|
||||||
$(CC) $(CFLAGS) $(LDFLAGS) $^ -o $@
|
|
||||||
|
|
||||||
efi/bootaa64.efi: CLANG_TARGET = aarch64-pc-windows-msvc
|
efi/bootaa64.efi: CLANG_TARGET = aarch64-pc-windows-msvc
|
||||||
efi/bootaa64.efi: GNUEFI_ARCH = aa64
|
efi/bootaa64.efi: GNUEFI_ARCH = aa64
|
||||||
efi/bootaa64.efi: $(FILES_C)
|
|
||||||
@mkdir -p build
|
efi/boot%.efi: $(FILES_C)
|
||||||
|
@mkdir -p efi
|
||||||
$(CC) $(CFLAGS) $(LDFLAGS) $^ -o $@
|
$(CC) $(CFLAGS) $(LDFLAGS) $^ -o $@
|
||||||
|
|
||||||
efi/bootarm.efi: CLANG_TARGET = armv6-pc-windows-msvc
|
efi/bootarm.efi: CLANG_TARGET = armv6-pc-windows-msvc
|
||||||
efi/bootarm.efi: GNUEFI_ARCH = arm
|
efi/bootarm.efi: GNUEFI_ARCH = arm
|
||||||
|
efi/bootarm.efi: ARCH_CFLAGS = -O # skip -O2 and -mno-red-zone
|
||||||
efi/bootarm.efi: $(FILES_C)
|
efi/bootarm.efi: $(FILES_C)
|
||||||
@mkdir -p build
|
@mkdir -p efi
|
||||||
$(CC) $(CFLAGS) $(LDFLAGS) $^ -o $@
|
$(CC) $(CFLAGS) $(LDFLAGS) $^ -o $@
|
||||||
|
@echo "Fix $@ architecture code (IMAGE_FILE_MACHINE_ARMTHUMB_MIXED = 0x01C2)"
|
||||||
|
echo -en "\xc2\x01" | dd of=$@ bs=1 seek=124 count=2 conv=notrunc status=none
|
||||||
|
|
||||||
clean:
|
clean:
|
||||||
rm -rf setup.exe efi efi-signed
|
rm -rf setup.exe efi efi-signed
|
||||||
|
|||||||
Reference in New Issue
Block a user