$(BIN)/efidrv.cab : $(BIN)/alldrv.efis # $(ALL_drv.efi) is not yet defined
$(QM)$(ECHO) " [CAB] $@"
$(Q)$(LCAB) -n -q $(ALL_drv.efi) $@
+
+$(BIN)/%.usb : $(BIN)/%.efi
+ $(QM)$(ECHO) " [GENEFIDSK] $@"
+ $(Q)bash util/genefidsk -o $@ -b $(EFI_BOOT_FILE) $<
--- /dev/null
+#!/bin/sh
+#
+# Generate an EFI bootable disk image
+
+set -e
+
+function help() {
+ echo "Usage: ${0} [OPTIONS] <ipxe.efi>"
+ echo
+ echo "where OPTIONS are:"
+ echo " -h Show this help"
+ echo " -b Specify boot file name (e.g. bootx64.efi)"
+ echo " -o FILE Save disk image to file"
+}
+
+BOOT=bootx64.efi
+
+while getopts "hb:o:" opt; do
+ case ${opt} in
+ h)
+ help
+ exit 0
+ ;;
+ b)
+ BOOT="${OPTARG}"
+ ;;
+ o)
+ OUT="${OPTARG}"
+ ;;
+ esac
+done
+
+shift $((OPTIND - 1))
+IN=$1
+
+if [ -z "${IN}" ]; then
+ echo "${0}: no input file given" >&2
+ help
+ exit 1
+fi
+
+if [ -z "${OUT}" ]; then
+ echo "${0}: no output file given" >&2
+ help
+ exit 1
+fi
+
+# Create sparse output file
+rm -f ${OUT}
+truncate -s 1440K ${OUT}
+
+# Format disk
+mformat -i ${OUT} -f 1440 ::
+
+# Create directory structure
+mmd -i ${OUT} ::efi
+mmd -i ${OUT} ::efi/boot
+
+# Copy bootable image
+mcopy -i ${OUT} ${IN} ::efi/boot/${BOOT}