From ffa51b3bde2da8e2719e3be1ecce63d1f9913e36 Mon Sep 17 00:00:00 2001 From: Nikita Date: Tue, 22 Sep 2020 18:38:24 +0800 Subject: BaseTools: Add RISCV64 binding - Add RISCV64 ProcessorBind.h - Add RISCV64 to Makefiles Signed-off-by: Nikita Ermakov Ack-by: Liming Gao Acked-by: Abner Chang --- BaseTools/Source/C/GNUmakefile | 3 + BaseTools/Source/C/Include/RiscV64/ProcessorBind.h | 85 ++++++++++++++++++++++ BaseTools/Source/C/Makefiles/header.makefile | 6 ++ 3 files changed, 94 insertions(+) create mode 100644 BaseTools/Source/C/Include/RiscV64/ProcessorBind.h (limited to 'BaseTools') diff --git a/BaseTools/Source/C/GNUmakefile b/BaseTools/Source/C/GNUmakefile index df4eb64ea9..464f432774 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=ARM endif + ifneq (,$(findstring riscv64,$(uname_m))) + HOST_ARCH=RISCV64 + 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/Include/RiscV64/ProcessorBind.h b/BaseTools/Source/C/Include/RiscV64/ProcessorBind.h new file mode 100644 index 0000000000..1612d6ea7f --- /dev/null +++ b/BaseTools/Source/C/Include/RiscV64/ProcessorBind.h @@ -0,0 +1,85 @@ +/** @file + Processor or Compiler specific defines and types for RISC-V. + + 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 RISC-V +// +#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 + +#endif diff --git a/BaseTools/Source/C/Makefiles/header.makefile b/BaseTools/Source/C/Makefiles/header.makefile index 1c105ee7d4..0df728f327 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=ARM endif + ifneq (,$(findstring riscv64,$(uname_m))) + HOST_ARCH=RISCV64 + 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 = -I $(MAKEROOT)/Include/Arm/ else ifeq ($(HOST_ARCH), AARCH64) ARCH_INCLUDE = -I $(MAKEROOT)/Include/AArch64/ +else ifeq ($(HOST_ARCH), RISCV64) +ARCH_INCLUDE = -I $(MAKEROOT)/Include/RiscV64/ + else $(error Bad HOST_ARCH) endif -- cgit v1.2.3