From 32d706a9ff8d053d31cad7f996defccd92a634b4 Mon Sep 17 00:00:00 2001 From: Michael Brown Date: Mon, 10 Mar 2025 12:23:02 +0000 Subject: [PATCH] [build] Use -fshort-wchar when building EFI host utilities The EFI host utilities (such as elf2efi64, efirom, etc) include the EDK2 headers, which include static assertions to ensure that they are built with -fshort-wchar enabled. When building the host utilities, we currently bypass these assertions by defining MDE_CPU_EBC. The EBC compiler apparently does not support static assertions, and defining MDE_CPU_EBC therefore causes EDK2's Base.h to define STATIC_ASSERT() as a no-op. Newer versions of the EDK2 headers omit the check for MDE_CPU_EBC (and will presumably therefore fail to build with the EBC compiler). This causes our host utility builds to fail since the static assertion now detects that we are building with the host's default ABI (i.e. without enabling -fshort-wchar). Fix by enabling -fshort-wchar when building EFI host utilities. This produces binaries that are technically incompatible with the host ABI. However, since our host utilities never handle any wide-character strings, this nominal ABI incompatiblity has no effect. Signed-off-by: Michael Brown --- src/Makefile.housekeeping | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/Makefile.housekeeping b/src/Makefile.housekeeping index 1926920fc..d99a6fe6a 100644 --- a/src/Makefile.housekeeping +++ b/src/Makefile.housekeeping @@ -484,6 +484,7 @@ CFLAGS += $(WORKAROUND_CFLAGS) $(EXTRA_CFLAGS) ASFLAGS += $(WORKAROUND_ASFLAGS) $(EXTRA_ASFLAGS) LDFLAGS += $(WORKAROUND_LDFLAGS) $(EXTRA_LDFLAGS) HOST_CFLAGS += -O2 -g +HOST_EFI_CFLAGS += -fshort-wchar # Inhibit -Werror if NO_WERROR is specified on make command line # @@ -1449,22 +1450,22 @@ CLEANUP += $(ZBIN) $(ELF2EFI32) : util/elf2efi.c $(MAKEDEPS) $(QM)$(ECHO) " [HOSTCC] $@" - $(Q)$(HOST_CC) $(HOST_CFLAGS) -idirafter include -DEFI_TARGET32 $< -o $@ + $(Q)$(HOST_CC) $(HOST_CFLAGS) $(HOST_EFI_CFLAGS) -idirafter include -DEFI_TARGET32 $< -o $@ CLEANUP += $(ELF2EFI32) $(ELF2EFI64) : util/elf2efi.c $(MAKEDEPS) $(QM)$(ECHO) " [HOSTCC] $@" - $(Q)$(HOST_CC) $(HOST_CFLAGS) -idirafter include -DEFI_TARGET64 $< -o $@ + $(Q)$(HOST_CC) $(HOST_CFLAGS) $(HOST_EFI_CFLAGS) -idirafter include -DEFI_TARGET64 $< -o $@ CLEANUP += $(ELF2EFI64) $(EFIROM) : util/efirom.c util/eficompress.c $(MAKEDEPS) $(QM)$(ECHO) " [HOSTCC] $@" - $(Q)$(HOST_CC) $(HOST_CFLAGS) -idirafter include -o $@ $< + $(Q)$(HOST_CC) $(HOST_CFLAGS) $(HOST_EFI_CFLAGS) -idirafter include -o $@ $< CLEANUP += $(EFIROM) $(EFIFATBIN) : util/efifatbin.c $(MAKEDEPS) $(QM)$(ECHO) " [HOSTCC] $@" - $(Q)$(HOST_CC) $(HOST_CFLAGS) -idirafter include -o $@ $< + $(Q)$(HOST_CC) $(HOST_CFLAGS) $(HOST_EFI_CFLAGS) -idirafter include -o $@ $< CLEANUP += $(EFIFATBIN) ###############################################################################