1*f52e3ddeSPatrick Williamsrequire grub2.inc 2*f52e3ddeSPatrick Williams 3*f52e3ddeSPatrick Williamsrequire conf/image-uefi.conf 4*f52e3ddeSPatrick Williams 5*f52e3ddeSPatrick WilliamsGRUBPLATFORM = "efi" 6*f52e3ddeSPatrick Williams 7*f52e3ddeSPatrick WilliamsDEPENDS:append = " grub-native" 8*f52e3ddeSPatrick WilliamsRDEPENDS:${PN} = "grub-common virtual-grub-bootconf" 9*f52e3ddeSPatrick Williams 10*f52e3ddeSPatrick WilliamsSRC_URI += " \ 11*f52e3ddeSPatrick Williams file://cfg \ 12*f52e3ddeSPatrick Williams " 13*f52e3ddeSPatrick Williams 14*f52e3ddeSPatrick WilliamsS = "${WORKDIR}/grub-${PV}" 15*f52e3ddeSPatrick Williams 16*f52e3ddeSPatrick Williams# Determine the target arch for the grub modules 17*f52e3ddeSPatrick Williamspython __anonymous () { 18*f52e3ddeSPatrick Williams import re 19*f52e3ddeSPatrick Williams target = d.getVar('TARGET_ARCH') 20*f52e3ddeSPatrick Williams prefix = "" if d.getVar('EFI_PROVIDER') == "grub-efi" else "grub-efi-" 21*f52e3ddeSPatrick Williams if target == "x86_64": 22*f52e3ddeSPatrick Williams grubtarget = 'x86_64' 23*f52e3ddeSPatrick Williams elif re.match('i.86', target): 24*f52e3ddeSPatrick Williams grubtarget = 'i386' 25*f52e3ddeSPatrick Williams elif re.match('aarch64', target): 26*f52e3ddeSPatrick Williams grubtarget = 'arm64' 27*f52e3ddeSPatrick Williams elif re.match('arm', target): 28*f52e3ddeSPatrick Williams grubtarget = 'arm' 29*f52e3ddeSPatrick Williams elif re.match('riscv64', target): 30*f52e3ddeSPatrick Williams grubtarget = 'riscv64' 31*f52e3ddeSPatrick Williams elif re.match('riscv32', target): 32*f52e3ddeSPatrick Williams grubtarget = 'riscv32' 33*f52e3ddeSPatrick Williams else: 34*f52e3ddeSPatrick Williams raise bb.parse.SkipRecipe("grub-efi is incompatible with target %s" % target) 35*f52e3ddeSPatrick Williams grubimage = prefix + d.getVar("EFI_BOOT_IMAGE") 36*f52e3ddeSPatrick Williams d.setVar("GRUB_TARGET", grubtarget) 37*f52e3ddeSPatrick Williams d.setVar("GRUB_IMAGE", grubimage) 38*f52e3ddeSPatrick Williams prefix = "grub-efi-" if prefix == "" else "" 39*f52e3ddeSPatrick Williams d.setVar("GRUB_IMAGE_PREFIX", prefix) 40*f52e3ddeSPatrick Williams} 41*f52e3ddeSPatrick Williams 42*f52e3ddeSPatrick Williamsinherit deploy 43*f52e3ddeSPatrick Williams 44*f52e3ddeSPatrick WilliamsCACHED_CONFIGUREVARS += "ac_cv_path_HELP2MAN=" 45*f52e3ddeSPatrick WilliamsEXTRA_OECONF += "--enable-efiemu=no" 46*f52e3ddeSPatrick Williams 47*f52e3ddeSPatrick Williamsdo_mkimage() { 48*f52e3ddeSPatrick Williams cd ${B} 49*f52e3ddeSPatrick Williams 50*f52e3ddeSPatrick Williams GRUB_MKIMAGE_MODULES="${GRUB_BUILDIN}" 51*f52e3ddeSPatrick Williams 52*f52e3ddeSPatrick Williams # If 'all' is included in GRUB_BUILDIN we will include all available grub2 modules 53*f52e3ddeSPatrick Williams if [ "${@ bb.utils.contains('GRUB_BUILDIN', 'all', 'True', 'False', d)}" = "True" ]; then 54*f52e3ddeSPatrick Williams bbdebug 1 "Including all available modules" 55*f52e3ddeSPatrick Williams # Get the list of all .mod files in grub-core build directory 56*f52e3ddeSPatrick Williams GRUB_MKIMAGE_MODULES=$(find ${B}/grub-core/ -type f -name "*.mod" -exec basename {} .mod \;) 57*f52e3ddeSPatrick Williams fi 58*f52e3ddeSPatrick Williams 59*f52e3ddeSPatrick Williams # Search for the grub.cfg on the local boot media by using the 60*f52e3ddeSPatrick Williams # built in cfg file provided via this recipe 61*f52e3ddeSPatrick Williams grub-mkimage -v -c ../cfg -p ${EFIDIR} -d ./grub-core/ \ 62*f52e3ddeSPatrick Williams -O ${GRUB_TARGET}-efi -o ./${GRUB_IMAGE_PREFIX}${GRUB_IMAGE} \ 63*f52e3ddeSPatrick Williams ${GRUB_MKIMAGE_MODULES} 64*f52e3ddeSPatrick Williams} 65*f52e3ddeSPatrick Williams 66*f52e3ddeSPatrick Williamsaddtask mkimage before do_install after do_compile 67*f52e3ddeSPatrick Williams 68*f52e3ddeSPatrick Williamsdo_install() { 69*f52e3ddeSPatrick Williams oe_runmake 'DESTDIR=${D}' -C grub-core install 70*f52e3ddeSPatrick Williams 71*f52e3ddeSPatrick Williams # Remove build host references... 72*f52e3ddeSPatrick Williams find "${D}" -name modinfo.sh -type f -exec \ 73*f52e3ddeSPatrick Williams sed -i \ 74*f52e3ddeSPatrick Williams -e 's,--sysroot=${STAGING_DIR_TARGET},,g' \ 75*f52e3ddeSPatrick Williams -e 's|${DEBUG_PREFIX_MAP}||g' \ 76*f52e3ddeSPatrick Williams -e 's:${RECIPE_SYSROOT_NATIVE}::g' \ 77*f52e3ddeSPatrick Williams {} + 78*f52e3ddeSPatrick Williams 79*f52e3ddeSPatrick Williams install -d ${D}${EFI_FILES_PATH} 80*f52e3ddeSPatrick Williams install -m 644 ${B}/${GRUB_IMAGE_PREFIX}${GRUB_IMAGE} ${D}${EFI_FILES_PATH}/${GRUB_IMAGE} 81*f52e3ddeSPatrick Williams} 82*f52e3ddeSPatrick Williams 83*f52e3ddeSPatrick Williams# To include all available modules, add 'all' to GRUB_BUILDIN 84*f52e3ddeSPatrick WilliamsGRUB_BUILDIN ?= "boot linux ext2 fat serial part_msdos part_gpt normal \ 85*f52e3ddeSPatrick Williams efi_gop iso9660 configfile search loadenv test" 86*f52e3ddeSPatrick Williams 87*f52e3ddeSPatrick Williams# 'xen_boot' is a module valid only for aarch64 88*f52e3ddeSPatrick WilliamsGRUB_BUILDIN:append:aarch64 = "${@bb.utils.contains('DISTRO_FEATURES', 'xen', ' xen_boot', '', d)}" 89*f52e3ddeSPatrick Williams 90*f52e3ddeSPatrick Williamsdo_deploy() { 91*f52e3ddeSPatrick Williams install -m 644 ${B}/${GRUB_IMAGE_PREFIX}${GRUB_IMAGE} ${DEPLOYDIR} 92*f52e3ddeSPatrick Williams} 93*f52e3ddeSPatrick Williams 94*f52e3ddeSPatrick Williamsaddtask deploy after do_install before do_build 95*f52e3ddeSPatrick Williams 96*f52e3ddeSPatrick WilliamsFILES:${PN} = "${libdir}/grub/${GRUB_TARGET}-efi \ 97*f52e3ddeSPatrick Williams ${datadir}/grub \ 98*f52e3ddeSPatrick Williams ${EFI_FILES_PATH}/${GRUB_IMAGE} \ 99*f52e3ddeSPatrick Williams " 100*f52e3ddeSPatrick Williams 101*f52e3ddeSPatrick Williams# 64-bit binaries are expected for the bootloader with an x32 userland 102*f52e3ddeSPatrick WilliamsINSANE_SKIP:${PN}:append:linux-gnux32 = " arch" 103*f52e3ddeSPatrick WilliamsINSANE_SKIP:${PN}-dbg:append:linux-gnux32 = " arch" 104*f52e3ddeSPatrick WilliamsINSANE_SKIP:${PN}:append:linux-muslx32 = " arch" 105*f52e3ddeSPatrick WilliamsINSANE_SKIP:${PN}-dbg:append:linux-muslx32 = " arch" 106