From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-wm1-f66.google.com (mail-wm1-f66.google.com [209.85.128.66]) by mx.groups.io with SMTP id smtpd.web10.9332.1598699691790320001 for ; Sat, 29 Aug 2020 04:14:52 -0700 Authentication-Results: mx.groups.io; dkim=pass header.i=@nuviainc-com.20150623.gappssmtp.com header.s=20150623 header.b=dpeqYzq/; spf=pass (domain: nuviainc.com, ip: 209.85.128.66, mailfrom: leif@nuviainc.com) Received: by mail-wm1-f66.google.com with SMTP id v4so641824wmj.5 for ; Sat, 29 Aug 2020 04:14:51 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nuviainc-com.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id:mime-version :content-transfer-encoding; bh=6+/HU9bYj2wUwJUPQUBejUMcL1lFQA1v9TRlCRxiJaI=; b=dpeqYzq/ZRyeiHeCj8n/5rljpyosb5Qtyh0ZvkfYMqgOg+aFZdRS+DldYXeUkenl26 /dgkaLALQSbyMl1e8iNCMSOmwsOKqk7SDAxWvSISXu95fwo9Ik2fBNVKHFKMb1lU7pbZ Ul/FIqO93E7eVEcMt+fqt4c1uiLiz4Vw8+NPk0Lr4B9lrvk9pzP+HqHUBKTUwjh2bods mLS++68cWWMdmyu5qzRlc5OnIaC7lJ8LM6DHWzkWci1bViWs0dL+I9nfv2A8fDzP4I72 NX/6+8wKWGmTbu3CEJ8tWcs+RfSDzH3UOxg1sYrGN7pByH5P5dYXoSRXxeIbuNy/MGd8 N2gg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:mime-version :content-transfer-encoding; bh=6+/HU9bYj2wUwJUPQUBejUMcL1lFQA1v9TRlCRxiJaI=; b=Tvk7yR+9sdlbO7agzuKr9w8f8qmp9DxOXu6sOsxvjmlkVekXqbCN774+AooIg164Ss nClm/SaQrrJqZLCwWBXYRbmhDSXWzz+iM7Ds3ksyaG5nismKg/Kw5Tlsx/3SeiP+7s1e rmCPGy5AU1YjayYcwVlPrkozzof1zEt3vB5OYKpmVlhTwhu9dW12tPSbKA6MLbZba+cc bs5zsyaTobNtAlDiac6UfnwWq274y7zAVCRU2XbsDkNlnCQ7xDPlJTSjWk8TxrFlQ1xs ndRUR/a/hoo/oflQtRXAnx4gcuh56kwHUht9vwlHRKWri8rUiWj2BM6On6v0NV25DenJ 9glw== X-Gm-Message-State: AOAM533xHGkF9X2yjOUYFrbYoYQSL8Bk3fmMvOyAhB5OP6EnVZTCuQgj /y3iCbwyPUI/XxYX1Sx2urhFKFGX6t35Xnw1dXB9mdnIzJqGaaSp2NI0I+w7qgy6Bi58ORlzknj r7Ml6xCu8t/sJ9hGS59LQ8raeF+rr71Zt6yixU2Suo2KHIyFvJHY/BYRmSfG9LZqthYTZ X-Google-Smtp-Source: ABdhPJxo1+BGOq5JUi3neuwxIBdysSVaZe3YG9Co/8cXGybigCJbvHO4vdXo+1CiWGfaCjEGnXWbaQ== X-Received: by 2002:a1c:28c1:: with SMTP id o184mr2958576wmo.91.1598699689915; Sat, 29 Aug 2020 04:14:49 -0700 (PDT) Return-Path: Received: from vanye.hemma.eciton.net (cpc92302-cmbg19-2-0-cust304.5-4.cable.virginm.net. [82.1.209.49]) by smtp.gmail.com with ESMTPSA id k8sm3160791wrl.42.2020.08.29.04.14.45 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 29 Aug 2020 04:14:49 -0700 (PDT) From: "Leif Lindholm" To: devel@edk2.groups.io Cc: Bob Feng , Liming Gao , Yuwei Chen , Daniel Schaefer , Abner Chang Subject: [PATCH 1/1] BaseTools: enable riscv64 native builds Date: Sat, 29 Aug 2020 12:14:44 +0100 Message-Id: <20200829111444.28202-1-leif@nuviainc.com> X-Mailer: git-send-email 2.20.1 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Add the makefile plumbing and ProcessorBind.h (based on the AArch64 one) to enable building BaseTools natively on RiscV64. 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 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=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/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=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 -- 2.20.1