mirror of
https://github.com/CloverHackyColor/CloverBootloader.git
synced 2024-12-25 16:37:42 +01:00
c87858c5f0
Signed-off-by: SergeySlice <sergey.slice@gmail.com>
203 lines
7.7 KiB
Bash
Executable File
203 lines
7.7 KiB
Bash
Executable File
#!/bin/bash
|
||
#
|
||
# Reset default charset for GNUsed problems...
|
||
export LC_ALL=C
|
||
|
||
# ====== GLOBAL VARIABLES ======
|
||
declare -r DRIVERS_LEGACY="BIOS" # same in buildpkg.sh/ebuild.sh
|
||
declare -r DRIVERS_UEFI="UEFI" # same in buildpkg.sh/ebuild.sh
|
||
declare -r DRIVERS_OFF="off" # same in buildpkg.sh/ebuild.sh
|
||
|
||
# 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
|
||
# exit 1
|
||
fi
|
||
|
||
set -u
|
||
|
||
# Go to the script directory to create the package
|
||
cd "$(dirname $0)"
|
||
|
||
plistbuddy='/usr/libexec/PlistBuddy'
|
||
SRCROOT="$PWD"
|
||
SYMROOT=${SRCROOT}/sym
|
||
CLOVERROOT=${SRCROOT}/CloverV2
|
||
PKG_BUILD_DIR=${SYMROOT}/package
|
||
IMGROOT=${SYMROOT}/CloverCD
|
||
IMGSKELROOT=${SRCROOT}/imgskel
|
||
CDBOOT=${IMGROOT}/usr/standalone/i386/cdboot
|
||
EFIROOT=${SRCROOT}/CloverV2/EFI
|
||
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 sym/CloverCD
|
||
rm -rf sym/CloverISO
|
||
|
||
# Create a new sym directory
|
||
[[ ! -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
|
||
declare -r SYSNAME="$(uname)"
|
||
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 ======================="
|
||
echo "[RM] ${IMGROOT}"
|
||
rm -rf ${IMGROOT}
|
||
echo "[MKDIR] ${IMGROOT}/usr/standalone/i386"
|
||
mkdir -p ${IMGROOT}/usr/standalone/i386
|
||
mkdir -p ${IMGROOT}/usr/standalone/i386/x64
|
||
echo "[MKDIR] ${IMGROOT}/EFI/BOOT"
|
||
mkdir -p ${IMGROOT}/EFI/BOOT
|
||
echo "[MKDIR] ${IMGROOT}/EFI/CLOVER/themes/"
|
||
mkdir -p ${IMGROOT}/EFI/CLOVER/themes/
|
||
echo "[MKDIR] ${IMGROOT}/usr/bin"
|
||
mkdir -p ${IMGROOT}/usr/bin
|
||
echo "[MKDIR] ${IMGROOT}/usr/local/bin"
|
||
mkdir -p "${IMGROOT}"/usr/local/bin
|
||
cp -p "${SYMROOT}"/utils/* "${IMGROOT}"/usr/local/bin
|
||
echo "[MKDIR] ${IMGROOT}/Library/Application Support/Clover"
|
||
mkdir -p "${IMGROOT}/Library/Application Support/Clover"
|
||
cp -p "${SRCROOT}"/CloverUpdater/CloverUpdaterUtility "${IMGROOT}/Library/Application Support/Clover/"
|
||
cp -pr "${SRCROOT}"/CloverUpdater/build/CloverUpdater.app "${IMGROOT}/Library/Application Support/Clover/"
|
||
echo "[MKDIR] ${IMGROOT}/Library/PreferencePanes"
|
||
mkdir -p "${IMGROOT}/Library/PreferencePanes"
|
||
cp -pr "${SRCROOT}"/CloverPrefpane/Build/Clover.prefPane "${IMGROOT}/Library/PreferencePanes/"
|
||
echo "[CP] cdboot"
|
||
cp -f ${SYMROOT}/i386/cdboot ${CDBOOT}
|
||
echo "[CP] $THEME"
|
||
if [[ -d "${CLOVERROOT}/themespkg/$THEME" ]]; then
|
||
cp -r -f ${CLOVERROOT}/themespkg/$THEME ${IMGROOT}/EFI/CLOVER/themes/
|
||
fi
|
||
|
||
|
||
echo "[CP] BOOTX64"
|
||
cp -f ${CLOVERROOT}/EFI/BOOT/BOOTX64.efi ${IMGROOT}/EFI/BOOT/
|
||
echo "[CP] CLOVERX64"
|
||
cp -f ${CLOVERROOT}/EFI/CLOVER/CLOVERX64.efi ${IMGROOT}/EFI/CLOVER/
|
||
|
||
# echo "CP font"
|
||
# cp -r -f ${CLOVERROOT}/EFI/BOOT/font ${IMGROOT}/EFI/BOOT/
|
||
# echo "CP config.plist"
|
||
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
|
||
echo "[CP] drivers/$DRIVERS_LEGACY"
|
||
mkdir -p ${IMGROOT}/EFI/CLOVER/drivers
|
||
cp -r -f ${CLOVERROOT}/EFI/CLOVER/drivers/$DRIVERS_LEGACY ${IMGROOT}/EFI/CLOVER/drivers/
|
||
echo "[CP] drivers/$DRIVERS_UEFI"
|
||
cp -r -f ${CLOVERROOT}/EFI/CLOVER/drivers/$DRIVERS_UEFI ${IMGROOT}/EFI/CLOVER/drivers/
|
||
echo "[CP] kexts and OEM"
|
||
cp -r -f ${CLOVERROOT}/ThirdParty/* ${IMGROOT}/EFI/CLOVER/
|
||
echo "[CP] tools"
|
||
cp -r -f ${CLOVERROOT}/EFI/CLOVER/tools ${IMGROOT}/EFI/CLOVER/
|
||
echo "[CP] doc"
|
||
cp -r -f ${CLOVERROOT}/EFI/CLOVER/doc ${IMGROOT}/EFI/CLOVER/
|
||
echo "[CP] drivers-off"
|
||
|
||
# Regroup off drivers
|
||
isoOffPath=${IMGROOT}/EFI/CLOVER/drivers/$DRIVERS_OFF
|
||
mkdir -p ${isoOffPath}
|
||
find ${CLOVERROOT}/EFI/CLOVER/drivers -type f -name '*.efi' -exec cp -R {} "${isoOffPath}"/ \;
|
||
|
||
# Mandatory UEFI
|
||
cp -f ${CLOVERROOT}/EFI/CLOVER/drivers/$DRIVERS_UEFI/DataHubDxe.efi \
|
||
${IMGROOT}/EFI/CLOVER/drivers/$DRIVERS_UEFI/
|
||
cp -f ${CLOVERROOT}/EFI/CLOVER/drivers/$DRIVERS_UEFI/FSInject.efi \
|
||
${IMGROOT}/EFI/CLOVER/drivers/$DRIVERS_UEFI/
|
||
|
||
# File System 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/
|
||
|
||
# Memory fix UEFI
|
||
cp -f ${CLOVERROOT}/EFI/CLOVER/drivers/$DRIVERS_OFF/$DRIVERS_UEFI/MemoryFix/OpenRuntime.efi \
|
||
${IMGROOT}/EFI/CLOVER/drivers/$DRIVERS_UEFI/
|
||
|
||
# HID 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/
|
||
|
||
# File System BIOS
|
||
cp -f ${CLOVERROOT}/EFI/CLOVER/drivers/$DRIVERS_OFF/$DRIVERS_UEFI/FileSystem/ApfsDriverLoader.efi \
|
||
${IMGROOT}/EFI/CLOVER/drivers/$DRIVERS_LEGACY/
|
||
|
||
echo "[CP] boot"
|
||
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
|
||
# #ifdef CONFIG_FDISK440
|
||
# cp -f ${CLOVERROOT}/BootSectors/fdisk440 ${IMGROOT}/usr/bin
|
||
# #endif
|
||
rm -rf ${IMGROOT}/.s*
|
||
rm -rf ${IMGROOT}/*/.s*
|
||
rm -rf ${IMGROOT}/*/*/.s*
|
||
rm -rf ${IMGROOT}/*/*/*/.s*
|
||
rm -rf ${IMGROOT}/*/*/*/*/.s*
|
||
echo "[HDIUTIL] ${ISOIMAGE}"
|
||
mkdir -p ${SYMROOT}/CloverISO-${REVISION}
|
||
|
||
if [[ "$SYSNAME" == Linux ]]; then
|
||
genisoimage -J -hfs -hfs-volid ${CDLABEL} -D -b usr/standalone/i386/cdboot -no-emul-boot -quiet -o "${ISOIMAGE}" ${IMGROOT}
|
||
else
|
||
hdiutil makehybrid -iso -joliet -hfs -hfs-volume-name ${CDLABEL} \
|
||
-eltorito-boot ${CDBOOT} -no-emul-boot -ov -o "${ISOIMAGE}" \
|
||
${IMGROOT} -quiet
|
||
fi
|
||
mv -f ${ISOIMAGE} ${SYMROOT}/CloverISO-${REVISION}/
|
||
echo "[TAR] CloverISO-${REVISION}"
|
||
tar -cv -f ${SYMROOT}/CloverISO-${REVISION}.tar -C ${SYMROOT}/CloverISO-${REVISION} .
|
||
echo "[LZMA] CloverISO-${REVISION}"
|
||
|
||
if [[ "$SYSNAME" == Linux ]]; then
|
||
xz -f -S .lzma ${SYMROOT}/CloverISO-${REVISION}.tar
|
||
else
|
||
"$BASETOOLS_DIR"/LzmaCompress -e -o ${SYMROOT}/CloverISO-${REVISION}.tar.lzma ${SYMROOT}/CloverISO-${REVISION}.tar
|
||
fi
|
||
rm -rf ${SYMROOT}/CloverISO-${REVISION}.tar
|
||
|
||
# Open the final folder.
|
||
if [[ "${1:-}" == "" ]]; then
|
||
ls -la sym
|
||
[[ "$SYSNAME" != Linux ]] && open sym
|
||
fi
|
||
|
||
exit 0
|