kumquat-buildroot/package/mender-grubenv/mender-grubenv.mk
Yann E. MORIN 3f7e96a01a package/mender-grubenv: fix install for legacy BIOS or ARM U-Boot
Some last-minute changes were made when applying commits 7a68960b68
(boot/grub2/Config.in: add symbols to represent legacy and EFI boot) and
4d5b209384 (package/mender-grubenv: fix grub module checks), and the
renaming of the BR2_TARGET_GRUB_LEGACY was not fully propagated.

This caused the path to the boot files to always be interpreted as being
the EFI one, and never the legacy one. In practice, that was not causing
any build failure, because the path was passed at build-time to
mender-grubenv, that would use it as the location where to install its
files, and finally as the location where our image-isntall commands
would look for them.

Still this is incorrect because it would not match where grub2 would
eventually end up lookig for its files at runtime...

To avoid further issue, drop the conditional block dedicated to setting
the path to the boot files, drop the intermediate variable, and move
setting the environment variable down into the existing conditional
block.

We do drop the intermediate variable, because there is no longer any
genericity needed: the installation commands are already duplicated for
the two cases anyway.

Reported-by: Peter Korsgaard <peter@korsgaard.com>
Signed-off-by: Yann E. MORIN <yann.morin.1998@free.fr>
Cc: Adam Duskett <aduskett@gmail.com>
Cc: Köry Maincent <kory.maincent@bootlin.com>
Signed-off-by: Peter Korsgaard <peter@korsgaard.com>
2021-12-05 12:26:34 +01:00

87 lines
2.8 KiB
Makefile

################################################################################
#
# mender-grubenv
#
################################################################################
MENDER_GRUBENV_VERSION = 1a7db967495bbe8be53b7a69dcb42822f39d9a74
MENDER_GRUBENV_SITE = $(call github,mendersoftware,grub-mender-grubenv,$(MENDER_GRUBENV_VERSION))
MENDER_GRUBENV_LICENSE = Apache-2.0
MENDER_GRUBENV_LICENSE_FILES = LICENSE
# Grub2 must be built first so this package can overwrite the config files
# provided by grub.
MENDER_GRUBENV_DEPENDENCIES = grub2
MENDER_GRUBENV_INSTALL_IMAGES = YES
MENDER_GRUBENV_MAKE_ENV = \
$(TARGET_CONFIGURE_OPTS) \
$(TARGET_MAKE_ENV)
MENDER_GRUBENV_DEFINES = \
$(or $(call qstrip,$(BR2_PACKAGE_MENDER_GRUBENV_DEFINES)),\
$(@D)/mender_grubenv_defines.example)
# These grub modules must be built in for the grub scripts to work properly.
# Without them, the system will not boot.
MENDER_GRUBENV_MANDATORY_MODULES = loadenv hashsum echo halt gcry_sha256 test regexp
ifeq ($(BR2_TARGET_GRUB2_HAS_LEGACY_BOOT),y)
MENDER_GRUBENV_MODULES_MISSING_PC = \
$(filter-out $(call qstrip,$(BR2_TARGET_GRUB2_BUILTIN_MODULES_PC)),\
$(MENDER_GRUBENV_MANDATORY_MODULES))
MENDER_GRUBENV_MAKE_ENV += ENV_DIR=/boot/grub
define MENDER_GRUBENV_INSTALL_I386_CFG
mkdir -p $(BINARIES_DIR)/boot-part/grub
cp -dpfr $(TARGET_DIR)/boot/grub/grub.cfg \
$(TARGET_DIR)/boot/grub/mender_grubenv* \
$(BINARIES_DIR)/boot-part/grub
endef
endif # BR2_TARGET_GRUB2_HAS_LEGACY_BOOT
ifeq ($(BR2_TARGET_GRUB2_HAS_EFI_BOOT),y)
MENDER_GRUBENV_MODULES_MISSING_EFI = \
$(filter-out $(call qstrip,$(BR2_TARGET_GRUB2_BUILTIN_MODULES_EFI)),\
$(MENDER_GRUBENV_MANDATORY_MODULES))
MENDER_GRUBENV_MAKE_ENV += ENV_DIR=/boot/EFI/BOOT
define MENDER_GRUBENV_INSTALL_EFI_CFG
mkdir -p $(BINARIES_DIR)/efi-part/EFI/BOOT
cp -dpfr $(TARGET_DIR)/boot/EFI/BOOT/grub.cfg \
$(TARGET_DIR)/boot/EFI/BOOT/mender_grubenv* \
$(BINARIES_DIR)/efi-part/EFI/BOOT
endef
endif # BR2_TARGET_GRUB2_HAS_EFI_BOOT
ifeq ($(BR2_PACKAGE_MENDER_GRUBENV)$(BR_BUILDING),yy)
ifneq ($(MENDER_GRUBENV_MODULES_MISSING_EFI),)
$(error The following missing grub2 efi modules must be enabled for mender-grubenv \
to work: $(MENDER_GRUBENV_MODULES_MISSING_EFI))
endif
ifneq ($(MENDER_GRUBENV_MODULES_MISSING_PC),)
$(error The following missing grub2 pc modules must be enabled for mender-grubenv \
to work: $(MENDER_GRUBENV_MODULES_MISSING_PC))
endif
endif
define MENDER_GRUBENV_CONFIGURE_CMDS
$(INSTALL) -m 0644 $(MENDER_GRUBENV_DEFINES) $(@D)/mender_grubenv_defines
endef
define MENDER_GRUBENV_BUILD_CMDS
$(MENDER_GRUBENV_MAKE_ENV) $(MAKE) -C $(@D)
endef
define MENDER_GRUBENV_INSTALL_TARGET_CMDS
$(MENDER_GRUBENV_MAKE_ENV) $(MAKE) DESTDIR=$(TARGET_DIR) -C $(@D) install
endef
define MENDER_GRUBENV_INSTALL_IMAGES_CMDS
$(MENDER_GRUBENV_INSTALL_I386_CFG)
$(MENDER_GRUBENV_INSTALL_EFI_CFG)
endef
$(eval $(generic-package))