]> git.ipfire.org Git - thirdparty/ipxe.git/commitdiff
[efi] Disable static assertions in EFI headers on non-EFI platforms
authorMichael Brown <mcb30@ipxe.org>
Wed, 7 Jun 2023 11:18:38 +0000 (12:18 +0100)
committerMichael Brown <mcb30@ipxe.org>
Wed, 7 Jun 2023 11:24:03 +0000 (12:24 +0100)
The EDK2 headers may be included even in builds for non-EFI platforms.
Commits such as 9de6c45 ("[arm] Use -fno-short-enums for all 32-bit
ARM builds") have so far ensured that the compile-time checks within
the EDK2 headers will pass even when building for a non-EFI platform.

As a more general solution, temporarily disable static assertions
while including UefiBaseType.h if building on a non-EFI platform.
This avoids the need to modify the ABI on other platforms.

Signed-off-by: Michael Brown <mcb30@ipxe.org>
src/include/ipxe/efi/efi.h

index e0e2db60843de9b1d4c1f50cb67aee5a06c926fd..29117fa356e5206aa2386de0a2ee22c6c300db8f 100644 (file)
@@ -43,10 +43,19 @@ FILE_LICENCE ( GPL2_OR_LATER );
  * checking somewhat useless.  Work around this bizarre sabotage
  * attempt by redefining EFI_HANDLE as a pointer to an anonymous
  * structure.
+ *
+ * EFI headers perform some ABI validation checks via _Static_assert()
+ * that may fail when EFI headers are included on a non-EFI platform.
+ * Temporarily disable static assertions to allow these headers to be
+ * included.
  */
 #define EFI_HANDLE STUPID_EFI_HANDLE
+#ifndef PLATFORM_efi
+#define _Static_assert(expr, msg)
+#endif
 #include <ipxe/efi/Uefi/UefiBaseType.h>
 #undef EFI_HANDLE
+#undef _Static_assert
 typedef struct {} *EFI_HANDLE;
 
 /* Include the top-level EFI header files */