From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail.byosoft.com.cn (mail.byosoft.com.cn [58.240.74.243]) by mx.groups.io with SMTP id smtpd.web10.31935.1599441064103263225 for ; Sun, 06 Sep 2020 18:11:04 -0700 Authentication-Results: mx.groups.io; dkim=missing; spf=none, err=permanent DNS error (domain: byosoft.com.cn, ip: 58.240.74.243, mailfrom: gaoliming@byosoft.com.cn) Received: from DESKTOPS6D0PVI ([58.246.60.130]) (envelope-sender ) by 192.168.6.13 with ESMTP for ; Mon, 07 Sep 2020 09:11:00 +0800 X-WM-Sender: gaoliming@byosoft.com.cn X-WM-AuthFlag: YES X-WM-AuthUser: gaoliming@byosoft.com.cn From: "gaoliming" To: "'Leif Lindholm'" , Cc: "'Bob Feng'" , "'Yuwei Chen'" , "'Daniel Schaefer'" , "'Abner Chang'" References: <20200829111444.28202-1-leif@nuviainc.com> In-Reply-To: <20200829111444.28202-1-leif@nuviainc.com> Subject: =?UTF-8?B?5Zue5aSNOiBbUEFUQ0ggMS8xXSBCYXNlVG9vbHM6IGVuYWJsZSByaXNjdjY0IG5hdGl2ZSBidWlsZHM=?= Date: Mon, 7 Sep 2020 09:10:59 +0800 Message-ID: <000f01d684b3$bf758210$3e608630$@byosoft.com.cn> MIME-Version: 1.0 X-Mailer: Microsoft Outlook 16.0 Thread-Index: AQE69sKcIEJ8QuokdfndAMlZWVvxSqqTecnw Content-Type: text/plain; charset="gb2312" Content-Transfer-Encoding: quoted-printable Content-Language: zh-cn Ack-by: Liming Gao I would like Abner to review and test this patch.=20 Thanks Liming > -----=D3=CA=BC=FE=D4=AD=BC=FE----- > =B7=A2=BC=FE=C8=CB: Leif Lindholm > =B7=A2=CB=CD=CA=B1=BC=E4: 2020=C4=EA8=D4=C229=C8=D5 19:15 > =CA=D5=BC=FE=C8=CB: devel@edk2.groups.io > =B3=AD=CB=CD: Bob Feng ; Liming Gao > ; Yuwei Chen ; Daniel > Schaefer ; Abner Chang > =D6=F7=CC=E2: [PATCH 1/1] BaseTools: enable riscv64 native builds >=20 > Add the makefile plumbing and ProcessorBind.h (based on the > AArch64 one) to enable building BaseTools natively on RiscV64. >=20 > Cc: Bob Feng > Cc: Liming Gao > Cc: Yuwei Chen > Cc: Daniel Schaefer > Cc: Abner Chang > Signed-off-by: Leif Lindholm > --- > .../Source/C/Include/RiscV64/ProcessorBind.h | 102 > ++++++++++++++++++ > BaseTools/Source/C/GNUmakefile | 3 + > BaseTools/Source/C/Makefiles/header.makefile | 6 ++ > 3 files changed, 111 insertions(+) > create mode 100644 BaseTools/Source/C/Include/RiscV64/ProcessorBind.h >=20 > diff --git a/BaseTools/Source/C/Include/RiscV64/ProcessorBind.h > b/BaseTools/Source/C/Include/RiscV64/ProcessorBind.h > new file mode 100644 > index 000000000000..bd4b756e0970 > --- /dev/null > +++ b/BaseTools/Source/C/Include/RiscV64/ProcessorBind.h > @@ -0,0 +1,102 @@ > +/** @file > + Processor or Compiler specific defines and types for RiscV64. > + > + Copyright (c) 2006 - 2018, Intel Corporation. All rights = reserved.
> + Portions copyright (c) 2008 - 2009, Apple Inc. All rights = reserved.
> + Portions copyright (c) 2013, ARM Ltd. All rights reserved.
> + Portions copyright (c) 2020, NUVIA inc. All rights reserved.
> + > + SPDX-License-Identifier: BSD-2-Clause-Patent > + > +**/ > + > +#ifndef PROCESSOR_BIND_H__ > +#define PROCESSOR_BIND_H__ > + > +/// > +/// Define the processor type so other code can make processor based > choices > +/// > +#define MDE_CPU_RISCV64 > + > +// > +// Make sure we are using the correct packing rules per EFI = specification > +// > +#ifndef __GNUC__ > +#pragma pack() > +#endif > + > +// > +// Use ANSI C 2000 stdint.h integer width declarations > +// > +#include > +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; > + > +/// > +/// Unsigned value of native width. (4 bytes on supported 32-bit processor > instructions, > +/// 8 bytes on supported 64-bit processor instructions) > +/// > +typedef UINT64 UINTN; > + > +/// > +/// Signed value of native width. (4 bytes on supported 32-bit = processor > instructions, > +/// 8 bytes on supported 64-bit processor instructions) > +/// > +typedef INT64 INTN; > + > +// > +// Processor specific defines > +// > + > +/// > +/// A value of native width with the highest bit set. > +/// > +#define MAX_BIT 0x8000000000000000 > + > +/// > +/// A value of native width with the two highest bits set. > +/// > +#define MAX_2_BITS 0xC000000000000000 > + > +/// > +/// The stack alignment required for RISCV64 > +/// > +#define CPU_STACK_ALIGNMENT 16 > + > +// > +// 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. > +// > +#define EFIAPI > + > +#if defined(__GNUC__) > + /// > + /// For GNU assembly code, .global or .globl can declare global symbols. > + /// Define this macro to unify the usage. > + /// > + #define ASM_GLOBAL .globl > +#endif > + > +/** > + Return the pointer to the first instruction of a function given a function > pointer. > + On ARM CPU architectures, these two pointer values are the same, > + so the implementation of this macro is very simple. > + > + @param FunctionPointer A pointer to a function. > + > + @return The pointer to the first instruction of a function given a function > pointer. > + > +**/ > +#define FUNCTION_ENTRY_POINT(FunctionPointer) (VOID > *)(UINTN)(FunctionPointer) > + > +#endif > diff --git a/BaseTools/Source/C/GNUmakefile > b/BaseTools/Source/C/GNUmakefile > index df4eb64ea95e..464f43277455 100644 > --- a/BaseTools/Source/C/GNUmakefile > +++ b/BaseTools/Source/C/GNUmakefile > @@ -26,6 +26,9 @@ ifndef HOST_ARCH > else ifneq (,$(findstring arm,$(uname_m))) > HOST_ARCH=3DARM > endif > + ifneq (,$(findstring riscv64,$(uname_m))) > + HOST_ARCH=3DRISCV64 > + endif > ifndef HOST_ARCH > $(info Could not detected HOST_ARCH from uname results) > $(error HOST_ARCH is not defined!) > diff --git a/BaseTools/Source/C/Makefiles/header.makefile > b/BaseTools/Source/C/Makefiles/header.makefile > index 1c105ee7d434..0df728f32772 100644 > --- a/BaseTools/Source/C/Makefiles/header.makefile > +++ b/BaseTools/Source/C/Makefiles/header.makefile > @@ -28,6 +28,9 @@ ifndef HOST_ARCH > else ifneq (,$(findstring arm,$(uname_m))) > HOST_ARCH=3DARM > endif > + ifneq (,$(findstring riscv64,$(uname_m))) > + HOST_ARCH=3DRISCV64 > + endif > ifndef HOST_ARCH > $(info Could not detected HOST_ARCH from uname results) > $(error HOST_ARCH is not defined!) > @@ -64,6 +67,9 @@ ARCH_INCLUDE =3D -I $(MAKEROOT)/Include/Arm/ > else ifeq ($(HOST_ARCH), AARCH64) > ARCH_INCLUDE =3D -I $(MAKEROOT)/Include/AArch64/ >=20 > +else ifeq ($(HOST_ARCH), RISCV64) > +ARCH_INCLUDE =3D -I $(MAKEROOT)/Include/RiscV64/ > + > else > $(error Bad HOST_ARCH) > endif > -- > 2.20.1