config BR2_TARGET_GRUB2_ARCH_SUPPORTS
	bool
	default y if BR2_i386
	default y if BR2_x86_64
	default y if BR2_arm
	default y if BR2_aarch64
	default y if BR2_RISCV_64
	depends on BR2_USE_MMU

config BR2_TARGET_GRUB2
	bool "grub2"
	depends on BR2_TARGET_GRUB2_ARCH_SUPPORTS
	depends on BR2_USE_WCHAR
	select BR2_TARGET_GRUB2_I386_PC if \
		!BR2_TARGET_GRUB2_HAS_PTF && \
		(BR2_i386 || BR2_x86_64)
	select BR2_TARGET_GRUB2_ARM_UBOOT if \
		!BR2_TARGET_GRUB2_HAS_PTF && \
		BR2_arm
	select BR2_TARGET_GRUB2_ARM64_EFI if BR2_aarch64
	help
	  GNU GRUB is a Multiboot boot loader. It was derived from
	  GRUB, the GRand Unified Bootloader, which was originally
	  designed and implemented by Erich Stefan Boleyn. GRUB 2 has
	  replaced what was formerly known as GRUB (i.e. version
	  0.9x), which has, in turn, become GRUB Legacy.

	  Amongst others, GRUB2 offers EFI support, which GRUB Legacy
	  doesn't provide.

	  The file boot/grub2/grub.cfg is used by default as the Grub
	  configuration file. It can be overridden using a rootfs
	  overlay or post-build script.

	  For additional notes on using Grub 2 with Buildroot, see
	  boot/grub2/readme.txt

	  http://www.gnu.org/software/grub/

if BR2_TARGET_GRUB2

config BR2_TARGET_GRUB2_HAS_LEGACY_BOOT
	bool

config BR2_TARGET_GRUB2_HAS_EFI_BOOT
	bool

config BR2_TARGET_GRUB2_HAS_PTF
	bool

config BR2_TARGET_GRUB2_I386_PC
	bool "i386-pc"
	depends on BR2_i386 || BR2_x86_64
	select BR2_TARGET_GRUB2_HAS_LEGACY_BOOT
	help
	  Select this option if the platform you're targetting is a
	  x86 or x86-64 legacy BIOS based platform.

config BR2_TARGET_GRUB2_I386_EFI
	bool "i386-efi"
	depends on BR2_i386 || BR2_x86_64
	select BR2_TARGET_GRUB2_HAS_PTF
	select BR2_TARGET_GRUB2_HAS_EFI_BOOT
	help
	  Select this option if the platform you're targetting has a
	  32 bits EFI BIOS. Note that some x86-64 platforms use a 32
	  bits EFI BIOS, and this option should be used in this case.

config BR2_TARGET_GRUB2_X86_64_EFI
	bool "x86-64-efi"
	depends on BR2_x86_64
	select BR2_TARGET_GRUB2_HAS_PTF
	select BR2_TARGET_GRUB2_HAS_EFI_BOOT
	help
	  Select this option if the platform you're targetting has a
	  64 bits EFI BIOS.

config BR2_TARGET_GRUB2_ARM_UBOOT
	bool "arm-uboot"
	depends on BR2_arm
	select BR2_TARGET_GRUB2_HAS_LEGACY_BOOT
	help
	  Select this option if the platform you're targetting is an
	  ARM u-boot platform, and you want to boot Grub 2 as an u-boot
	  compatible image.

config BR2_TARGET_GRUB2_ARM_EFI
	bool "arm-efi"
	depends on BR2_arm
	select BR2_TARGET_GRUB2_HAS_PTF
	select BR2_TARGET_GRUB2_HAS_EFI_BOOT
	help
	  Select this option if the platform you're targetting is an
	  ARM platform and you want to boot Grub 2 as an EFI
	  application.

config BR2_TARGET_GRUB2_ARM64_EFI
	bool "arm64-efi"
	depends on BR2_aarch64
	select BR2_TARGET_GRUB2_HAS_EFI_BOOT
	help
	  Select this option if the platform you're targetting is an
	  Aarch64 platform and you want to boot Grub 2 as an EFI
	  application.

config BR2_TARGET_GRUB2_RISCV64_EFI
	bool "riscv64-efi"
	depends on BR2_RISCV_64
	select BR2_TARGET_GRUB2_HAS_EFI_BOOT
	help
	  Select this option if the platform you're targetting is a
	  64bit RISC-V platform and you want to boot Grub 2 as an EFI
	  application.

if BR2_TARGET_GRUB2_HAS_LEGACY_BOOT

comment "Options for the x86 legacy BIOS or ARM U-Boot support"

config BR2_TARGET_GRUB2_BOOT_PARTITION
	string "boot partition"
	default "hd0,msdos1"
	help
	  Specify the partition where the /boot/grub/grub.cfg file is
	  located. Use 'hd0,msdos1' for the first partition of the
	  first disk if using a legacy partition table, or 'hd0,gpt1'
	  if using GPT partition table.

config BR2_TARGET_GRUB2_BUILTIN_MODULES_PC
	string "builtin modules"
	default BR2_TARGET_GRUB2_BUILTIN_MODULES if BR2_TARGET_GRUB2_BUILTIN_MODULES != "" # legacy
	default "boot linux ext2 fat squash4 part_msdos part_gpt normal biosdisk" if BR2_TARGET_GRUB2_I386_PC
	default "linux ext2 fat part_msdos normal" if BR2_TARGET_GRUB2_ARM_UBOOT

config BR2_TARGET_GRUB2_BUILTIN_CONFIG_PC
	string "builtin config"
	default BR2_TARGET_GRUB2_BUILTIN_CONFIG if BR2_TARGET_GRUB2_BUILTIN_CONFIG != "" # legacy
	help
	  Path to a Grub 2 configuration file that will be embedded
	  into the Grub image itself. This allows to set the root
	  device and other configuration parameters, but however menu
	  entries cannot be described in this embedded configuration.

endif # BR2_TARGET_GRUB2_HAS_LEGACY_BOOT

if BR2_TARGET_GRUB2_HAS_EFI_BOOT

comment "Options for the EFI BIOS or ARM EFI support"

config BR2_TARGET_GRUB2_BUILTIN_MODULES_EFI
	string "builtin modules"
	default BR2_TARGET_GRUB2_BUILTIN_MODULES if BR2_TARGET_GRUB2_BUILTIN_MODULES != "" # legacy
	default "boot linux ext2 fat squash4 part_msdos part_gpt normal efi_gop"

config BR2_TARGET_GRUB2_BUILTIN_CONFIG_EFI
	string "builtin config"
	default BR2_TARGET_GRUB2_BUILTIN_CONFIG if BR2_TARGET_GRUB2_BUILTIN_CONFIG != "" # legacy
	help
	  Path to a Grub 2 configuration file that will be embedded
	  into the Grub image itself. This allows to set the root
	  device and other configuration parameters, but however menu
	  entries cannot be described in this embedded configuration.

endif # BR2_TARGET_GRUB2_HAS_EFI_BOOT

config BR2_TARGET_GRUB2_INSTALL_TOOLS
	bool "install tools"
	help
	  Install support tools to interact with GNU GRUB Multiboot
	  boot loader.

	  This will also install the Grub 2 loadable modules to the
	  target.

endif # BR2_TARGET_GRUB2

comment "grub2 needs a toolchain w/ wchar"
	depends on BR2_TARGET_GRUB2_ARCH_SUPPORTS
	depends on !BR2_USE_WCHAR
