* - mcb30
*/
-#if __i386__
+#ifdef EFI_HOSTONLY
+
+/*
+ * We cannot rely on the EDK2 ProcessorBind.h headers when compiling a
+ * binary for execution on the build host itself, since the host's CPU
+ * architecture may not even be supported by EDK2.
+ */
+
+/* Define the basic integer types in terms of the host's <stdint.h> */
+#include <stdint.h>
+typedef int8_t INT8;
+typedef int16_t INT16;
+typedef int32_t INT32;
+typedef int64_t INT64;
+typedef uint8_t UINT8;
+typedef long INTN;
+typedef uint16_t UINT16;
+typedef uint32_t UINT32;
+typedef uint64_t UINT64;
+typedef unsigned long UINTN;
+typedef int8_t CHAR8;
+typedef int16_t CHAR16;
+typedef uint8_t BOOLEAN;
+
+/* Define EFIAPI as whatever API the host uses by default */
+#define EFIAPI
+
+/* Define an architecture-neutral MDE_CPU macro to prevent build errors */
+#define MDE_CPU_EBC
+
+#else /* EFI_HOSTONLY */
+
+#ifdef __i386__
#include <ipxe/efi/Ia32/ProcessorBind.h>
#endif
-#if __x86_64__
+#ifdef __x86_64__
#include <ipxe/efi/X64/ProcessorBind.h>
#endif
-#if __arm__
+#ifdef __arm__
#include <ipxe/efi/Arm/ProcessorBind.h>
#endif
-#if __aarch64__
+#ifdef __aarch64__
#include <ipxe/efi/AArch64/ProcessorBind.h>
#endif
+#endif /* EFI_HOSTONLY */
+
#endif /* _IPXE_EFI_PROCESSOR_BIND_H */