RISC-V: Add to build system
This patch adds support for RISC-V to the grub build system. With this patch, I can successfully build grub on RISC-V as a UEFI application. Signed-off-by: Alexander Graf <agraf@suse.de> Reviewed-by: Alistair Francis <alistair.francis@wdc.com> Reviewed-by: Bin Meng <bmeng.cn@gmail.com> Tested-by: Bin Meng <bmeng.cn@gmail.com> Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com>
This commit is contained in:
parent
1edef90cf9
commit
09d8eedbba
22 changed files with 201 additions and 21 deletions
|
@ -729,6 +729,8 @@ static struct
|
|||
[GRUB_INSTALL_PLATFORM_ARM64_EFI] = { "arm64", "efi" },
|
||||
[GRUB_INSTALL_PLATFORM_ARM_UBOOT] = { "arm", "uboot" },
|
||||
[GRUB_INSTALL_PLATFORM_ARM_COREBOOT] = { "arm", "coreboot" },
|
||||
[GRUB_INSTALL_PLATFORM_RISCV32_EFI] = { "riscv32", "efi" },
|
||||
[GRUB_INSTALL_PLATFORM_RISCV64_EFI] = { "riscv64", "efi" },
|
||||
};
|
||||
|
||||
char *
|
||||
|
|
|
@ -477,6 +477,8 @@ have_bootdev (enum grub_install_plat pl)
|
|||
case GRUB_INSTALL_PLATFORM_IA64_EFI:
|
||||
case GRUB_INSTALL_PLATFORM_ARM_EFI:
|
||||
case GRUB_INSTALL_PLATFORM_ARM64_EFI:
|
||||
case GRUB_INSTALL_PLATFORM_RISCV32_EFI:
|
||||
case GRUB_INSTALL_PLATFORM_RISCV64_EFI:
|
||||
case GRUB_INSTALL_PLATFORM_I386_IEEE1275:
|
||||
case GRUB_INSTALL_PLATFORM_SPARC64_IEEE1275:
|
||||
case GRUB_INSTALL_PLATFORM_POWERPC_IEEE1275:
|
||||
|
@ -900,6 +902,8 @@ main (int argc, char *argv[])
|
|||
case GRUB_INSTALL_PLATFORM_X86_64_EFI:
|
||||
case GRUB_INSTALL_PLATFORM_ARM_EFI:
|
||||
case GRUB_INSTALL_PLATFORM_ARM64_EFI:
|
||||
case GRUB_INSTALL_PLATFORM_RISCV32_EFI:
|
||||
case GRUB_INSTALL_PLATFORM_RISCV64_EFI:
|
||||
case GRUB_INSTALL_PLATFORM_IA64_EFI:
|
||||
case GRUB_INSTALL_PLATFORM_I386_IEEE1275:
|
||||
case GRUB_INSTALL_PLATFORM_SPARC64_IEEE1275:
|
||||
|
@ -945,6 +949,8 @@ main (int argc, char *argv[])
|
|||
case GRUB_INSTALL_PLATFORM_X86_64_EFI:
|
||||
case GRUB_INSTALL_PLATFORM_ARM_EFI:
|
||||
case GRUB_INSTALL_PLATFORM_ARM64_EFI:
|
||||
case GRUB_INSTALL_PLATFORM_RISCV32_EFI:
|
||||
case GRUB_INSTALL_PLATFORM_RISCV64_EFI:
|
||||
case GRUB_INSTALL_PLATFORM_IA64_EFI:
|
||||
case GRUB_INSTALL_PLATFORM_I386_IEEE1275:
|
||||
case GRUB_INSTALL_PLATFORM_ARM_UBOOT:
|
||||
|
@ -998,6 +1004,8 @@ main (int argc, char *argv[])
|
|||
case GRUB_INSTALL_PLATFORM_X86_64_EFI:
|
||||
case GRUB_INSTALL_PLATFORM_ARM_EFI:
|
||||
case GRUB_INSTALL_PLATFORM_ARM64_EFI:
|
||||
case GRUB_INSTALL_PLATFORM_RISCV32_EFI:
|
||||
case GRUB_INSTALL_PLATFORM_RISCV64_EFI:
|
||||
case GRUB_INSTALL_PLATFORM_IA64_EFI:
|
||||
is_efi = 1;
|
||||
break;
|
||||
|
@ -1111,6 +1119,12 @@ main (int argc, char *argv[])
|
|||
case GRUB_INSTALL_PLATFORM_ARM64_EFI:
|
||||
efi_file = "BOOTAA64.EFI";
|
||||
break;
|
||||
case GRUB_INSTALL_PLATFORM_RISCV32_EFI:
|
||||
efi_file = "BOOTRISCV32.EFI";
|
||||
break;
|
||||
case GRUB_INSTALL_PLATFORM_RISCV64_EFI:
|
||||
efi_file = "BOOTRISCV64.EFI";
|
||||
break;
|
||||
default:
|
||||
grub_util_error ("%s", _("You've found a bug"));
|
||||
break;
|
||||
|
@ -1138,6 +1152,12 @@ main (int argc, char *argv[])
|
|||
case GRUB_INSTALL_PLATFORM_ARM64_EFI:
|
||||
efi_file = "grubaa64.efi";
|
||||
break;
|
||||
case GRUB_INSTALL_PLATFORM_RISCV32_EFI:
|
||||
efi_file = "grubriscv32.efi";
|
||||
break;
|
||||
case GRUB_INSTALL_PLATFORM_RISCV64_EFI:
|
||||
efi_file = "grubriscv64.efi";
|
||||
break;
|
||||
default:
|
||||
efi_file = "grub.efi";
|
||||
break;
|
||||
|
@ -1440,6 +1460,8 @@ main (int argc, char *argv[])
|
|||
case GRUB_INSTALL_PLATFORM_X86_64_EFI:
|
||||
case GRUB_INSTALL_PLATFORM_ARM_EFI:
|
||||
case GRUB_INSTALL_PLATFORM_ARM64_EFI:
|
||||
case GRUB_INSTALL_PLATFORM_RISCV32_EFI:
|
||||
case GRUB_INSTALL_PLATFORM_RISCV64_EFI:
|
||||
case GRUB_INSTALL_PLATFORM_IA64_EFI:
|
||||
g = grub_util_guess_efi_drive (*curdev);
|
||||
break;
|
||||
|
@ -1533,6 +1555,8 @@ main (int argc, char *argv[])
|
|||
case GRUB_INSTALL_PLATFORM_X86_64_EFI:
|
||||
case GRUB_INSTALL_PLATFORM_ARM_EFI:
|
||||
case GRUB_INSTALL_PLATFORM_ARM64_EFI:
|
||||
case GRUB_INSTALL_PLATFORM_RISCV32_EFI:
|
||||
case GRUB_INSTALL_PLATFORM_RISCV64_EFI:
|
||||
case GRUB_INSTALL_PLATFORM_IA64_EFI:
|
||||
core_name = "core.efi";
|
||||
snprintf (mkimage_target, sizeof (mkimage_target),
|
||||
|
@ -1636,6 +1660,8 @@ main (int argc, char *argv[])
|
|||
break;
|
||||
case GRUB_INSTALL_PLATFORM_ARM_EFI:
|
||||
case GRUB_INSTALL_PLATFORM_ARM64_EFI:
|
||||
case GRUB_INSTALL_PLATFORM_RISCV32_EFI:
|
||||
case GRUB_INSTALL_PLATFORM_RISCV64_EFI:
|
||||
case GRUB_INSTALL_PLATFORM_IA64_EFI:
|
||||
case GRUB_INSTALL_PLATFORM_MIPSEL_QEMU_MIPS:
|
||||
case GRUB_INSTALL_PLATFORM_MIPS_QEMU_MIPS:
|
||||
|
@ -1871,6 +1897,8 @@ main (int argc, char *argv[])
|
|||
/* FALLTHROUGH */
|
||||
case GRUB_INSTALL_PLATFORM_ARM_EFI:
|
||||
case GRUB_INSTALL_PLATFORM_ARM64_EFI:
|
||||
case GRUB_INSTALL_PLATFORM_RISCV32_EFI:
|
||||
case GRUB_INSTALL_PLATFORM_RISCV64_EFI:
|
||||
case GRUB_INSTALL_PLATFORM_IA64_EFI:
|
||||
{
|
||||
char *dst = grub_util_path_concat (2, efidir, efi_file);
|
||||
|
|
|
@ -107,7 +107,9 @@ static const struct
|
|||
[GRUB_INSTALL_PLATFORM_X86_64_EFI] = { "x86_64-efi", "efinet", ".efi" },
|
||||
[GRUB_INSTALL_PLATFORM_IA64_EFI] = { "ia64-efi", "efinet", ".efi" },
|
||||
[GRUB_INSTALL_PLATFORM_ARM_EFI] = { "arm-efi", "efinet", ".efi" },
|
||||
[GRUB_INSTALL_PLATFORM_ARM64_EFI] = { "arm64-efi", "efinet", ".efi" }
|
||||
[GRUB_INSTALL_PLATFORM_ARM64_EFI] = { "arm64-efi", "efinet", ".efi" },
|
||||
[GRUB_INSTALL_PLATFORM_RISCV32_EFI] = { "riscv32-efi", "efinet", ".efi" },
|
||||
[GRUB_INSTALL_PLATFORM_RISCV64_EFI] = { "riscv64-efi", "efinet", ".efi" },
|
||||
};
|
||||
|
||||
static void
|
||||
|
|
|
@ -538,6 +538,8 @@ main (int argc, char *argv[])
|
|||
|| source_dirs[GRUB_INSTALL_PLATFORM_IA64_EFI]
|
||||
|| source_dirs[GRUB_INSTALL_PLATFORM_ARM_EFI]
|
||||
|| source_dirs[GRUB_INSTALL_PLATFORM_ARM64_EFI]
|
||||
|| source_dirs[GRUB_INSTALL_PLATFORM_RISCV32_EFI]
|
||||
|| source_dirs[GRUB_INSTALL_PLATFORM_RISCV64_EFI]
|
||||
|| source_dirs[GRUB_INSTALL_PLATFORM_X86_64_EFI])
|
||||
system_area = SYS_AREA_COMMON;
|
||||
else if (source_dirs[GRUB_INSTALL_PLATFORM_SPARC64_IEEE1275])
|
||||
|
@ -735,7 +737,9 @@ main (int argc, char *argv[])
|
|||
|| source_dirs[GRUB_INSTALL_PLATFORM_X86_64_EFI]
|
||||
|| source_dirs[GRUB_INSTALL_PLATFORM_IA64_EFI]
|
||||
|| source_dirs[GRUB_INSTALL_PLATFORM_ARM_EFI]
|
||||
|| source_dirs[GRUB_INSTALL_PLATFORM_ARM64_EFI])
|
||||
|| source_dirs[GRUB_INSTALL_PLATFORM_ARM64_EFI]
|
||||
|| source_dirs[GRUB_INSTALL_PLATFORM_RISCV32_EFI]
|
||||
|| source_dirs[GRUB_INSTALL_PLATFORM_RISCV64_EFI])
|
||||
{
|
||||
char *efidir = grub_util_make_temporary_dir ();
|
||||
char *efidir_efi = grub_util_path_concat (2, efidir, "efi");
|
||||
|
@ -770,6 +774,16 @@ main (int argc, char *argv[])
|
|||
imgname);
|
||||
free (imgname);
|
||||
|
||||
imgname = grub_util_path_concat (2, efidir_efi_boot, "bootriscv32.efi");
|
||||
make_image_fwdisk_abs (GRUB_INSTALL_PLATFORM_RISCV32_EFI, "riscv32-efi",
|
||||
imgname);
|
||||
free (imgname);
|
||||
|
||||
imgname = grub_util_path_concat (2, efidir_efi_boot, "bootriscv64.efi");
|
||||
make_image_fwdisk_abs (GRUB_INSTALL_PLATFORM_RISCV64_EFI, "riscv64-efi",
|
||||
imgname);
|
||||
free (imgname);
|
||||
|
||||
if (source_dirs[GRUB_INSTALL_PLATFORM_I386_EFI])
|
||||
{
|
||||
imgname = grub_util_path_concat (2, efidir_efi_boot, "boot.efi");
|
||||
|
|
|
@ -622,6 +622,38 @@ static const struct grub_install_image_target_desc image_targets[] =
|
|||
.pe_target = GRUB_PE32_MACHINE_ARM64,
|
||||
.elf_target = EM_AARCH64,
|
||||
},
|
||||
{
|
||||
.dirname = "riscv32-efi",
|
||||
.names = { "riscv32-efi", NULL },
|
||||
.voidp_sizeof = 4,
|
||||
.bigendian = 0,
|
||||
.id = IMAGE_EFI,
|
||||
.flags = PLATFORM_FLAGS_NONE,
|
||||
.total_module_size = TARGET_NO_FIELD,
|
||||
.decompressor_compressed_size = TARGET_NO_FIELD,
|
||||
.decompressor_uncompressed_size = TARGET_NO_FIELD,
|
||||
.decompressor_uncompressed_addr = TARGET_NO_FIELD,
|
||||
.section_align = GRUB_PE32_SECTION_ALIGNMENT,
|
||||
.vaddr_offset = EFI32_HEADER_SIZE,
|
||||
.pe_target = GRUB_PE32_MACHINE_RISCV32,
|
||||
.elf_target = EM_RISCV,
|
||||
},
|
||||
{
|
||||
.dirname = "riscv64-efi",
|
||||
.names = { "riscv64-efi", NULL },
|
||||
.voidp_sizeof = 8,
|
||||
.bigendian = 0,
|
||||
.id = IMAGE_EFI,
|
||||
.flags = PLATFORM_FLAGS_NONE,
|
||||
.total_module_size = TARGET_NO_FIELD,
|
||||
.decompressor_compressed_size = TARGET_NO_FIELD,
|
||||
.decompressor_uncompressed_size = TARGET_NO_FIELD,
|
||||
.decompressor_uncompressed_addr = TARGET_NO_FIELD,
|
||||
.section_align = GRUB_PE32_SECTION_ALIGNMENT,
|
||||
.vaddr_offset = EFI64_HEADER_SIZE,
|
||||
.pe_target = GRUB_PE32_MACHINE_RISCV64,
|
||||
.elf_target = EM_RISCV,
|
||||
},
|
||||
};
|
||||
|
||||
#include <grub/lib/LzmaEnc.h>
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue