Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
88 changes: 82 additions & 6 deletions .github/workflows/main.yml
Original file line number Diff line number Diff line change
Expand Up @@ -11,35 +11,111 @@ jobs:
runs-on: macos-latest
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
fetch-tags: true

- name: Manage Version
run: |
git fetch --prune --unshallow --tags
git fetch --prune --tags
echo "CUR_TAG=$(git tag -l | tail -1)" >> $GITHUB_ENV
echo "GIT_SHA=$(git rev-parse --short HEAD)" >> $GITHUB_ENV

- name: Install Dependencies
run: brew install p7zip
- name: Reinstall Dependencies
run: brew reinstall p7zip
env:
HOMEBREW_NO_INSTALL_CLEANUP: 1
HOMEBREW_NO_AUTO_UPDATE: 1

- name: Check Xcode version
run: |
XCODE_VER=$(xcodebuild -version | grep Xcode | awk '{print $2}' | tr -d '[:space:]')
echo "Detected Xcode version: $XCODE_VER"
if [[ -z "$XCODE_VER" ]]; then
echo "❌ Failed to detect Xcode version!"
exit 1
fi

MAJOR_VER=${XCODE_VER%%.*}
if [[ "$MAJOR_VER" -eq 26 ]]; then
CHECK_VER=16
else
CHECK_VER=$MAJOR_VER
fi

if [[ "$CHECK_VER" -lt 16 ]]; then
echo "❌ Xcode 16+ required!"
exit 1
fi

echo "✅ Using Xcode version $XCODE_VER (check $CHECK_VER)"

- name: Setup Python 3.13
uses: actions/setup-python@v5
with:
python-version: '3.13'

- name: Verify Python framework symlink
run: |
FRAMEWORK_PATH="/Library/Frameworks/Python.framework/Versions/3.13/bin/python3.13"
if [ ! -x "$FRAMEWORK_PATH" ]; then
echo "❌ Expected Python 3.13 at $FRAMEWORK_PATH not found!"
exit 1
fi
echo "✅ Python 3.13 found at $FRAMEWORK_PATH"

- name: Prepare Python env
run: |
python3.13 --version
pip3 install --upgrade pip
pip3 install setuptools
pip3 install --upgrade setuptools

- name: Download CloverGnuBuildTools
run: |
mkdir -p toolchain/tools/download
cd toolchain/tools/download
curl -L -o CloverBuildTools.zip https://github.com/YBronst/CloverBuildUtilities/releases/download/V.1.0/CloverBuildTools.zip
unzip CloverBuildTools.zip
cp -r CloverBuildTools/* .
rm -rf CloverBuildTools CloverBuildTools.zip

- name: Build Clover Pack
run: |
chmod +x ./buildme
./buildme "" ci

- name: Prepare Release Packs
run: |
# Zip Clover EFI
(cd "CloverPackage/CloverV2/EFI/CLOVER/" && zip -q "CLOVERX64.efi.zip" "CLOVERX64.efi" || exit 1)
(cd "CloverPackage/sym/CloverISO-${{ env.CUR_TAG }}" && 7z a Clover-${{ env.CUR_TAG }}-X64.iso.7z *.iso || exit 1)
releaseItems=(CloverPackage/sym/CloverISO*/*.7z CloverPackage/sym/CloverV2*.zip CloverPackage/CloverV2/EFI/CLOVER/CLOVERX64.efi.zip CloverPackage/sym/Clover_r*.pkg)
for releaseItem in "${releaseItems[@]}"; do cp -Rf "${releaseItem}" ./ || exit 1; done

# 7-Zip ISO
(cd "CloverPackage/sym/CloverISO-${{ env.CUR_TAG }}" && 7zz a "Clover-${{ env.CUR_TAG }}-X64.iso.7z" *.iso || exit 1)

# 7-Zip utils
(cd "CloverPackage/sym/" && 7zz a utils.7z utils/* || exit 1)

# Collecting all files for publication
releaseItems=(
CloverPackage/sym/CloverISO*/*.7z
CloverPackage/sym/utils.7z
CloverPackage/sym/CloverV2*.zip
CloverPackage/CloverV2/EFI/CLOVER/CLOVERX64.efi.zip
CloverPackage/sym/Clover_r*.pkg
)
for releaseItem in "${releaseItems[@]}"; do
cp -Rf "${releaseItem}" ./ || exit 1
done

- name: Upload to Artifacts
uses: actions/upload-artifact@v4
with:
name: Clover-GCC-15.1.0-${{ env.GIT_SHA }}
path: |
*.7z
utils.7z
CloverV2*.zip
CLOVERX64.efi.zip
Clover_r*.pkg

1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -63,3 +63,4 @@ RELEASE_*/

#work in progress
*_wip
CloverPackage/mpkg.log
12 changes: 6 additions & 6 deletions BaseTools/Conf/tools_def.template
Original file line number Diff line number Diff line change
Expand Up @@ -2117,7 +2117,7 @@ DEFINE GCC131_AARCH64_DLINK2_FLAGS = DEF(GCC49_AARCH64_DLINK2_FLAGS) -Wno-er
DEFINE GCC131_ARM_ASLDLINK_FLAGS = DEF(GCC49_ARM_ASLDLINK_FLAGS)
DEFINE GCC131_AARCH64_ASLDLINK_FLAGS = DEF(GCC49_AARCH64_ASLDLINK_FLAGS)

DEFINE GCC151_X64_CC_FLAGS = DEF(GCC49_X64_CC_FLAGS) -fno-unwind-tables -Wno-incompatible-ms-struct -Wno-misleading-indentation -mms-bitfields -fno-ms-extensions -ffreestanding -fno-exceptions
DEFINE GCC151_X64_CC_FLAGS = DEF(GCC49_X64_CC_FLAGS) -fno-unwind-tables -Wno-incompatible-ms-struct -Wno-misleading-indentation -mms-bitfields -fno-ms-extensions -ffreestanding -fno-exceptions -Wno-error=unused-but-set-variable -Wno-error=comment -Wno-error=deprecated-non-prototype
DEFINE GCC151_IA32_X64_DLINK_COMMON = -nostdlib -Wl,--no-warn-rwx-segments,--gc-sections,-n,-q,--gc-sections,-z,common-page-size=0x40,--defsym=PECOFF_HEADER_SIZE=0x240,--script=$(EDK_TOOLS_PATH)/Scripts/GccBase.lds
DEFINE GCC151_IA32_X64_ASLDLINK_FLAGS = DEF(GCC151_IA32_X64_DLINK_COMMON),--entry,ReferenceAcpiTable,-u,ReferenceAcpiTable
DEFINE GCC151_IA32_X64_DLINK_FLAGS = DEF(GCC151_IA32_X64_DLINK_COMMON),--entry,$(IMAGE_ENTRY_POINT),-u,$(IMAGE_ENTRY_POINT),-Map,$(DEST_DIR_DEBUG)/$(BASE_NAME).map
Expand Down Expand Up @@ -2631,15 +2631,15 @@ RELEASE_GCC131_AARCH64_DLINK_XIPFLAGS = -z common-page-size=0x20
*_GCC151_X64_ASLCC_FLAGS = DEF(GCC_ASLCC_FLAGS) -m64
*_GCC151_X64_ASLDLINK_FLAGS = DEF(GCC48_IA32_X64_ASLDLINK_FLAGS),-m,elf_x86_64
*_GCC151_X64_ASM_FLAGS = DEF(GCC151_ASM_FLAGS) -m64
*_GCC151_X64_DLINK_FLAGS = DEF(GCC151_X64_DLINK_FLAGS) DEF(GCC151_X64_CC_FLAGS) ENV(GCC151_X64_EXTRA_CC_FLAGS)
*_GCC151_X64_DLINK_FLAGS = DEF(GCC151_X64_DLINK_FLAGS) DEF(GCC151_X64_CC_FLAGS) ENV(GCC151_X64_EXTRA_CC_FLAGS) -Wno-error=unused-but-set-variable -Wno-error=comment -Wno-error=deprecated-non-prototype
*_GCC151_X64_RC_FLAGS = DEF(GCC_X64_RC_FLAGS)
*_GCC151_X64_OBJCOPY_FLAGS =
*_GCC151_X64_NASM_FLAGS = -f elf64

DEBUG_GCC151_X64_CC_FLAGS = DEF(GCC151_X64_CC_FLAGS) -g3 -O0
RELEASE_GCC151_X64_CC_FLAGS = DEF(GCC151_X64_CC_FLAGS) -Os -Werror
DEBUG_GCC151_X64_CXX_FLAGS = DEF(GCC151_X64_CC_FLAGS) -g3 -O0
RELEASE_GCC151_X64_CXX_FLAGS = DEF(GCC151_X64_CC_FLAGS) -Os -Werror
DEBUG_GCC151_X64_CC_FLAGS = DEF(GCC151_X64_CC_FLAGS) -g3 -O0 -Wno-error=unused-but-set-variable -Wno-error=comment -Wno-error=deprecated-non-prototype
RELEASE_GCC151_X64_CC_FLAGS = DEF(GCC151_X64_CC_FLAGS) -Os -Werror -Wno-error=unused-but-set-variable -Wno-error=comment -Wno-error=deprecated-non-prototype
DEBUG_GCC151_X64_CXX_FLAGS = DEF(GCC151_X64_CC_FLAGS) -g3 -O0 -Wno-error=unused-but-set-variable -Wno-error=comment -Wno-error=deprecated-non-prototype
RELEASE_GCC151_X64_CXX_FLAGS = DEF(GCC151_X64_CC_FLAGS) -Os -Werror -Wno-error=unused-but-set-variable -Wno-error=comment -Wno-error=deprecated-non-prototype

#
#
Expand Down
3 changes: 1 addition & 2 deletions CloverPackage/makeV2
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
cd "$(dirname $([ -L $0 ] && readlink $0 || echo $0))"
ROOT="$PWD"
SYMROOT="${ROOT}"/sym
REVISION=$(git describe --tags $(git rev-list --tags --max-count=1))
REVISION=$(git describe --tags $(git rev-list --tags --max-count=1))

# zip CloverV2, excluding all .empty and all .DS_Store
zip -qr CloverV2-${REVISION}.zip CloverV2 -x "*/.DS_Store" "*/.empty"
Expand All @@ -14,4 +14,3 @@ mv CloverV2-${REVISION}.zip $SYMROOT
open sym

#exit 0

2 changes: 1 addition & 1 deletion CloverPackage/makeiso
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ 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))
REVISION=$(git describe --tags $(git rev-list --tags --max-count=1))
PRODUCT=Clover-${REVISION}
CDLABEL=${PRODUCT}-X64
ISOIMAGE=${SYMROOT}/${CDLABEL}.iso
Expand Down
148 changes: 148 additions & 0 deletions CloverPackage/makeiso7z
Original file line number Diff line number Diff line change
@@ -0,0 +1,148 @@
#!/bin/bash
#
# Reset default charset for GNUsed problems...
export LC_ALL=C

declare -r SYSNAME="$(uname)"

# === Ensure 7-Zip is available on macOS ===
if [[ "$SYSNAME" == Darwin ]]; then
if ! command -v 7zz &>/dev/null; then
TMPDIR="/private/tmp/7ztemp"
mkdir -p "$TMPDIR"
cd "$TMPDIR" || exit 1
echo "[7Zip] 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
sudo cp 7zz /usr/local/bin/7zz
chmod +x /usr/local/bin/7zz
cd - >/dev/null || exit 1
rm -rf "$TMPDIR"
echo "[7zz] Installed to /usr/local/bin/7zz"
fi
fi

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

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/7-Zip ======================="
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}/

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

echo "[7-Zip] Packing ${CDLABEL}.7z"
7zz 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
Loading
Loading