Skip to content
Prev Previous commit
Next Next commit
Create makeiso7z
  • Loading branch information
YBronst committed Sep 22, 2025
commit 111ce18771990d4c3f258dac36c68883f1f9e663
155 changes: 155 additions & 0 deletions CloverPackage/makeiso7z
Original file line number Diff line number Diff line change
@@ -0,0 +1,155 @@
#!/bin/bash
#
# Reset default charset for GNUsed problems...
export LC_ALL=C

declare -r SYSNAME="$(uname)"

# === Ensure 7z is available on macOS ===
if [[ "$SYSNAME" == Darwin ]]; then
if ! command -v 7z &>/dev/null; then
TMPDIR="/private/tmp/7ztemp"
mkdir -p "$TMPDIR"
cd "$TMPDIR" || exit 1
echo "[7Z] Downloading 7zz..."
curl -LO https://www.7-zip.org/a/7z2501-mac.tar.xz
tar -xf 7z2501-mac.tar.xz
xattr -d com.apple.quarantine 7zz 2>/dev/null || true
cp 7zz /usr/local/bin/7z
chmod +x /usr/local/bin/7z
cd - >/dev/null || exit 1
rm -rf "$TMPDIR"
echo "[7Z] Installed to /usr/local/bin/7z"
fi
fi

# ====== GLOBAL VARIABLES ======
declare -r DRIVERS_LEGACY="BIOS"
declare -r DRIVERS_UEFI="UEFI"
declare -r DRIVERS_OFF="off"

# Check that the caller is make
caller=$(ps -p $PPID -o comm=)
if [[ "$caller" != "make" ]]; then
echo "Error: don't call the '$0' script directly !" >&2
echo "Use the 'make iso' command instead" >&2
fi

set -u

# Go to the script directory
cd "$(dirname $0)"

plistbuddy='/usr/libexec/PlistBuddy'
SRCROOT="$PWD"
SYMROOT=${SRCROOT}/sym
CLOVERROOT=${SRCROOT}/CloverV2
IMGROOT=${SYMROOT}/CloverCD
CDBOOT=${IMGROOT}/usr/standalone/i386/cdboot
BASETOOLS_DIR=${SRCROOT}/../BaseTools/Source/C/bin

REVISION=$(git describe --tags $(git rev-list --tags --max-count=1))
PRODUCT=Clover-${REVISION}
CDLABEL=${PRODUCT}-X64
ISOIMAGE=${SYMROOT}/${CDLABEL}.iso
THEME=embedded

rm -rf ${SYMROOT}/CloverCD
rm -rf ${SYMROOT}/CloverISO

[[ ! -d sym ]] && mkdir sym

echo "====================== Creating cdboot ====================="
mkdir -p ${SYMROOT}/i386
cp -f ${CLOVERROOT}/BootSectors/cdboot ${SYMROOT}/i386/
dd if=${CLOVERROOT}/Bootloaders/x64/boot6 of=${SYMROOT}/i386/cdboot conv=sync bs=2k seek=1 &> /dev/null

echo "Update cdboot with boot file size info"
if [[ "$SYSNAME" == Linux ]]; then
declare -r STAT_PARAM='-c%s'
else
declare -r STAT_PARAM='-f%z'
fi
stat "$STAT_PARAM" ${CLOVERROOT}/Bootloaders/x64/boot6 \
| perl -ane "print pack('V',@F[0]);" \
| dd of=${SYMROOT}/i386/cdboot bs=1 count=4 seek=2044 conv=notrunc &> /dev/null

echo "======================= Creating ISO/7z ======================="
rm -rf ${IMGROOT}
mkdir -p ${IMGROOT}/usr/standalone/i386/x64
mkdir -p ${IMGROOT}/EFI/BOOT
mkdir -p ${IMGROOT}/EFI/CLOVER/themes/
mkdir -p ${IMGROOT}/usr/bin
mkdir -p "${IMGROOT}/usr/local/bin"

cp -p "${SYMROOT}"/utils/* "${IMGROOT}"/usr/local/bin
cp -f ${SYMROOT}/i386/cdboot ${CDBOOT}

if [[ -d "${CLOVERROOT}/themespkg/$THEME" ]]; then
cp -r -f ${CLOVERROOT}/themespkg/$THEME ${IMGROOT}/EFI/CLOVER/themes/
fi

cp -f ${CLOVERROOT}/EFI/BOOT/BOOTX64.efi ${IMGROOT}/EFI/BOOT/
cp -f ${CLOVERROOT}/EFI/CLOVER/CLOVERX64.efi ${IMGROOT}/EFI/CLOVER/
cp -f ${CLOVERROOT}/EFI/CLOVER/config-sample.plist ${IMGROOT}/EFI/CLOVER/config.plist
$plistbuddy -c "Delete :GUI:Theme" "${IMGROOT}/EFI/CLOVER/config.plist" &>/dev/null
$plistbuddy -c "Add :GUI:Theme string $THEME" "${IMGROOT}/EFI/CLOVER/config.plist" &>/dev/null

mkdir -p ${IMGROOT}/EFI/CLOVER/drivers
cp -r -f ${CLOVERROOT}/EFI/CLOVER/drivers/$DRIVERS_LEGACY ${IMGROOT}/EFI/CLOVER/drivers/
cp -r -f ${CLOVERROOT}/EFI/CLOVER/drivers/$DRIVERS_UEFI ${IMGROOT}/EFI/CLOVER/drivers/
cp -r -f ${CLOVERROOT}/ThirdParty/* ${IMGROOT}/EFI/CLOVER/
cp -r -f ${CLOVERROOT}/EFI/CLOVER/tools ${IMGROOT}/EFI/CLOVER/

isoOffPath=${IMGROOT}/EFI/CLOVER/drivers/$DRIVERS_OFF
mkdir -p ${isoOffPath}
find ${CLOVERROOT}/EFI/CLOVER/drivers -type f -name '*.efi' -exec cp -R {} "${isoOffPath}"/ \;

# File System BIOS/UEFI
cp -f ${CLOVERROOT}/EFI/CLOVER/drivers/$DRIVERS_OFF/$DRIVERS_UEFI/FileSystem/ApfsDriverLoader.efi ${IMGROOT}/EFI/CLOVER/drivers/$DRIVERS_UEFI/
cp -f ${CLOVERROOT}/EFI/CLOVER/drivers/$DRIVERS_OFF/$DRIVERS_UEFI/FileSystem/VBoxHfs.efi ${IMGROOT}/EFI/CLOVER/drivers/$DRIVERS_UEFI/
cp -f ${CLOVERROOT}/EFI/CLOVER/drivers/$DRIVERS_OFF/$DRIVERS_UEFI/FileSystem/Fat.efi ${IMGROOT}/EFI/CLOVER/drivers/$DRIVERS_UEFI/
cp -f ${CLOVERROOT}/EFI/CLOVER/drivers/$DRIVERS_OFF/$DRIVERS_UEFI/FileSystem/Ext4Dxe.efi ${IMGROOT}/EFI/CLOVER/drivers/$DRIVERS_UEFI/

cp -f ${CLOVERROOT}/EFI/CLOVER/drivers/$DRIVERS_OFF/$DRIVERS_UEFI/MemoryFix/OpenRuntime.efi ${IMGROOT}/EFI/CLOVER/drivers/$DRIVERS_UEFI/

cp -f ${CLOVERROOT}/EFI/CLOVER/drivers/$DRIVERS_OFF/$DRIVERS_UEFI/HID/AptioInputFix.efi ${IMGROOT}/EFI/CLOVER/drivers/$DRIVERS_UEFI/
cp -f ${CLOVERROOT}/EFI/CLOVER/drivers/$DRIVERS_OFF/$DRIVERS_UEFI/HID/UsbMouseDxe.efi ${IMGROOT}/EFI/CLOVER/drivers/$DRIVERS_LEGACY/
cp -f ${CLOVERROOT}/EFI/CLOVER/drivers/$DRIVERS_OFF/$DRIVERS_UEFI/HID/Ps2MouseDxe.efi ${IMGROOT}/EFI/CLOVER/drivers/$DRIVERS_LEGACY/

cp -f ${CLOVERROOT}/Bootloaders/x64/boot? ${IMGROOT}/usr/standalone/i386/x64/
cp -f ${CLOVERROOT}/BootSectors/boot0af ${IMGROOT}/usr/standalone/i386
cp -f ${CLOVERROOT}/BootSectors/boot0ss ${IMGROOT}/usr/standalone/i386
cp -f ${CLOVERROOT}/BootSectors/boot0md ${IMGROOT}/usr/standalone/i386
cp -f ${CLOVERROOT}/BootSectors/boot1h ${IMGROOT}/usr/standalone/i386
cp -f ${CLOVERROOT}/BootSectors/boot1h2 ${IMGROOT}/usr/standalone/i386
cp -f ${CLOVERROOT}/BootSectors/boot1f32 ${IMGROOT}/usr/standalone/i386
cp -f ${CLOVERROOT}/BootSectors/boot1f32alt ${IMGROOT}/usr/standalone/i386
cp -f ${CLOVERROOT}/BootSectors/boot1x ${IMGROOT}/usr/standalone/i386
cp -f ${CLOVERROOT}/BootSectors/boot1xalt ${IMGROOT}/usr/standalone/i386

rm -rf ${IMGROOT}/.s* ${IMGROOT}/*/.s* ${IMGROOT}/*/*/.s* ${IMGROOT}/*/*/*/.s* ${IMGROOT}/*/*/*/*/.s*
find "${IMGROOT}" -name '.DS_Store' -exec rm -R -f {} \; 2>/dev/null

mkdir -p ${SYMROOT}/CloverISO-${REVISION}
echo "[HDIUTIL] ${ISOIMAGE}"
hdiutil makehybrid -iso -joliet -hfs -hfs-volume-name ${CDLABEL} \
-eltorito-boot ${CDBOOT} -no-emul-boot -ov -o "${ISOIMAGE}" ${IMGROOT} -quiet

mv -f ${ISOIMAGE} ${SYMROOT}/CloverISO-${REVISION}/

# ====== 7z упаковка с отдельной папкой ======
TMPDIR="${SYMROOT}/CloverISO-${REVISION}-tmp"
mkdir -p "${TMPDIR}/${CDLABEL}"
cp "${SYMROOT}/CloverISO-${REVISION}/${CDLABEL}.iso" "${TMPDIR}/${CDLABEL}/"

echo "[7Z] Packing ${CDLABEL}.7z"
7z a -t7z "${SYMROOT}/CloverISO-${REVISION}.7z" "${TMPDIR}/${CDLABEL}" -mx=9

rm -rf "${TMPDIR}"

# Open the final folder
if [[ "${1:-}" == "" ]]; then
ls -la sym
[[ "$SYSNAME" != Linux ]] && open sym
fi