From aedc701bfe9d42fbb48513892e3cb650d98736e7 Mon Sep 17 00:00:00 2001 From: Paolo Bonzini Date: Nov 08 2013 13:31:42 +0000 Subject: make it compile on ARM --- diff --git a/basetools-arm.patch b/basetools-arm.patch new file mode 100644 index 0000000..832b13b --- /dev/null +++ b/basetools-arm.patch @@ -0,0 +1,203 @@ +diff --git a/BaseTools/Source/C/GNUmakefile b/BaseTools/Source/C/GNUmakefile +index e0dde3e..bee0059 100644 +--- a/BaseTools/Source/C/GNUmakefile ++++ b/BaseTools/Source/C/GNUmakefile +@@ -22,6 +22,9 @@ ifndef ARCH + ifeq ($(uname_m),x86_64) + ARCH=X64 + endif ++ ifeq ($(patsubst arm%,ARM,$(uname_m)),ARM) ++ ARCH=ARM ++ endif + ifeq ($(patsubst i%86,IA32,$(uname_m)),IA32) + ARCH=IA32 + endif +diff --git a/BaseTools/Source/C/Include/Arm/ProcessorBind.h b/BaseTools/Source/C/Include/Arm/ProcessorBind.h +new file mode 100644 +index 0000000..bea7e82 +--- /dev/null ++++ b/BaseTools/Source/C/Include/Arm/ProcessorBind.h +@@ -0,0 +1,168 @@ ++/** @file ++ Processor or Compiler specific defines and types for x64. ++ ++ Copyright (c) 2006 - 2008, Intel Corporation. All rights reserved.
++ ++ This program and the accompanying materials are licensed and made available ++ under the terms and conditions of the BSD License which accompanies this ++ distribution. The full text of the license may be found at: ++ http://opensource.org/licenses/bsd-license.php ++ ++ THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, ++ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. ++ ++ File Name: ProcessorBind.h ++ ++**/ ++ ++#ifndef __PROCESSOR_BIND_H__ ++#define __PROCESSOR_BIND_H__ ++ ++// ++// Define the processor type so other code can make processor based choices ++// ++#define MDE_CPU_ARM ++ ++// ++// Make sure we are useing the correct packing rules per EFI specification ++// ++#ifndef __GNUC__ ++#pragma pack() ++#endif ++ ++#if _MSC_EXTENSIONS ++ ++// ++// Disable warning that make it impossible to compile at /W4 ++// This only works for Microsoft* tools ++// ++ ++// ++// Disabling bitfield type checking warnings. ++// ++#pragma warning ( disable : 4214 ) ++ ++// ++// Disabling the unreferenced formal parameter warnings. ++// ++#pragma warning ( disable : 4100 ) ++ ++// ++// Disable slightly different base types warning as CHAR8 * can not be set ++// to a constant string. ++// ++#pragma warning ( disable : 4057 ) ++ ++// ++// ASSERT(FALSE) or while (TRUE) are legal constructs so suppress this warning ++// ++#pragma warning ( disable : 4127 ) ++ ++ ++#endif ++ ++ ++#if !defined(__GNUC__) && (__STDC_VERSION__ < 199901L) ++ // ++ // No ANSI C 2000 stdint.h integer width declarations, so define equivalents ++ // ++ ++ #if _MSC_EXTENSIONS ++ ++ // ++ // use Microsoft* C complier dependent interger width types ++ // ++ typedef unsigned __int64 UINT64; ++ typedef __int64 INT64; ++ typedef unsigned __int32 UINT32; ++ typedef __int32 INT32; ++ typedef unsigned short UINT16; ++ typedef unsigned short CHAR16; ++ typedef short INT16; ++ typedef unsigned char BOOLEAN; ++ typedef unsigned char UINT8; ++ typedef char CHAR8; ++ typedef char INT8; ++ #else ++ ++ // ++ // Assume standard IA-32 alignment. ++ // BugBug: Need to check portability of long long ++ // ++ typedef unsigned long long UINT64; ++ typedef long long INT64; ++ typedef unsigned int UINT32; ++ typedef int INT32; ++ typedef unsigned short UINT16; ++ typedef unsigned short CHAR16; ++ typedef short INT16; ++ typedef unsigned char BOOLEAN; ++ typedef unsigned char UINT8; ++ typedef char CHAR8; ++ typedef char INT8; ++ #endif ++ ++ #define UINT8_MAX 0xff ++ ++#else ++ // ++ // Use ANSI C 2000 stdint.h integer width declarations ++ // ++ #include "stdint.h" ++ typedef uint8_t BOOLEAN; ++ typedef int8_t INT8; ++ typedef uint8_t UINT8; ++ typedef int16_t INT16; ++ typedef uint16_t UINT16; ++ typedef int32_t INT32; ++ typedef uint32_t UINT32; ++ typedef int64_t INT64; ++ typedef uint64_t UINT64; ++ typedef char CHAR8; ++ typedef uint16_t CHAR16; ++ ++#endif ++ ++typedef UINT32 UINTN; ++typedef INT32 INTN; ++ ++ ++// ++// Processor specific defines ++// ++#define MAX_BIT 0x80000000 ++#define MAX_2_BITS 0xC0000000 ++ ++// ++// Maximum legal IA-32 address ++// ++#define MAX_ADDRESS 0xFFFFFFFF ++ ++// ++// Modifier to ensure that all protocol member functions and EFI intrinsics ++// use the correct C calling convention. All protocol member functions and ++// EFI intrinsics are required to modify their member functions with EFIAPI. ++// ++#if _MSC_EXTENSIONS ++ // ++ // Microsoft* compiler requires _EFIAPI useage, __cdecl is Microsoft* specific C. ++ // ++ #define EFIAPI ++#endif ++ ++#if __GNUC__ ++ #define EFIAPI ++#endif ++ ++// ++// The Microsoft* C compiler can removed references to unreferenced data items ++// if the /OPT:REF linker option is used. We defined a macro as this is a ++// a non standard extension ++// ++#if _MSC_EXTENSIONS ++ #define GLOBAL_REMOVE_IF_UNREFERENCED __declspec(selectany) ++#else ++ #define GLOBAL_REMOVE_IF_UNREFERENCED ++#endif ++ ++#endif +diff --git a/BaseTools/Source/C/Makefiles/header.makefile b/BaseTools/Source/C/Makefiles/header.makefile +index 9aa83c0..c67e86d 100644 +--- a/BaseTools/Source/C/Makefiles/header.makefile ++++ b/BaseTools/Source/C/Makefiles/header.makefile +@@ -30,6 +30,10 @@ ifeq ($(ARCH), IA32) + ARCH_INCLUDE = -I $(MAKEROOT)/Include/Ia32/ + endif + ++ifeq ($(ARCH), ARM) ++ARCH_INCLUDE = -I $(MAKEROOT)/Include/Arm/ ++endif ++ + ifeq ($(ARCH), X64) + ARCH_INCLUDE = -I $(MAKEROOT)/Include/X64/ + endif diff --git a/edk2.spec b/edk2.spec index c99cc34..d390985 100644 --- a/edk2.spec +++ b/edk2.spec @@ -17,6 +17,7 @@ Summary: EFI Development Kit II # rm -rf edk2-r${SVNREV}/FatBinPkg # tar -cv edk2-r${SVNREV} | xz -6 > edk2-r${SVNREV}.tar.xz Source0: edk2-r%{SVNREV}.tar.xz +Patch1: basetools-arm.patch License: BSD Group: Applications/Emulators @@ -24,7 +25,7 @@ URL: http://sourceforge.net/apps/mediawiki/tianocore/index.php?title=EDK2 # We need to build tools everywhere, but how is still an open question # https://bugzilla.redhat.com/show_bug.cgi?id=992180 -ExclusiveArch: %{ix86} x86_64 +ExclusiveArch: %{ix86} x86_64 %{arm} BuildRequires: python2-devel BuildRequires: libuuid-devel @@ -65,6 +66,7 @@ build EFI executables and ROMs using the GNU tools. %prep %setup -q -n %{name}-r%{SVNREV} +%patch1 -p1 %build source ./edksetup.sh