mirror of
https://github.com/CloverHackyColor/CloverBootloader.git
synced 2024-11-25 11:55:28 +01:00
e97864a4ad
Try to build artifacts
978 lines
28 KiB
Bash
Executable File
978 lines
28 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
# created by vector sigma on July 15 2019
|
|
# modified by LAbyOne on My 2021
|
|
# github version
|
|
|
|
# Linux users should be able to use this wrapper, although the following are needed:
|
|
# (Ubuntu alike)
|
|
# sudo apt-get install build-essential uuid-dev iasl git gcc-9 nasm python3-distutils
|
|
|
|
# $1 argument override MYTOOLCHAIN variable, in case you want GCC53 for example
|
|
# ====== COLORS ======
|
|
COL_BLACK="\x1b[40;01m"
|
|
COL_RED="\x1b[31;01m"
|
|
COL_GREEN="\x1b[32;01m"
|
|
COL_YELLOW="\x1b[33;01m"
|
|
COL_MAGENTA="\x1b[35;01m"
|
|
COL_CYAN="\x1b[36;01m"
|
|
COL_WHITE="\x1b[37;01m"
|
|
COL_BLUE="\x1b[34;01m"
|
|
COL_RESET="\x1b[39;49;00m"
|
|
# ====== Main Window SetUp ======
|
|
if [[ "$2" != ci ]]; then
|
|
osascript <<EOF
|
|
tell application "System Events" to tell application "Finder"
|
|
tell process "Terminal"
|
|
set frontmost to true
|
|
end tell
|
|
end tell
|
|
|
|
tell application "Terminal"
|
|
activate
|
|
set bounds of window 1 to {0, 23, 615, 420}
|
|
# set current settings of window 1 to settings set "Pro"
|
|
# set font name of window 1 to "Monaco"
|
|
# set font size of window 1 to "11"
|
|
# set normal text color of window 1 to {3341, 35186, 50092}
|
|
# set position of first window to {650, 420}
|
|
end tell
|
|
EOF
|
|
fi
|
|
# ====== Clover workspace SetUp ======
|
|
cd "$(dirname $([ -L $0 ] && readlink $0 || echo $0))"
|
|
declare -r CLOVERROOT="$PWD"
|
|
declare -r SYSNAME="$(uname)"
|
|
MYTOOLCHAIN=${1:-GCC131}
|
|
revision=$(git describe --tags $(git rev-list --tags --max-count=1))
|
|
lsha1="not a git repo"
|
|
pyversion=$(echo $COL_CYAN"Current Python version: "$COL_WHITE$($(which python3) --version))
|
|
pynone=$(echo -e "$COL_RED Python3 seems missing on this machine, it is required to build Clover ")
|
|
export DIR_OUT=${DIR_OUT:-"$CLOVERROOT"/toolchain/tools/output}
|
|
export DIR_SCT=${DIR_SCT:-${CLOVERROOT}/toolchain/tools/Scripts}
|
|
if [[ ! -d ${DIR_SCT} ]] || [[ ! -d ${DIR_OUT} ]]; then
|
|
mkdir -p ${DIR_SCT} ${DIR_OUT}
|
|
fi
|
|
if [[ -d .git ]]; then
|
|
lsha1=$(git rev-parse --short HEAD)
|
|
fi
|
|
|
|
# Functions
|
|
pathmunge() {
|
|
if [[ ! $PATH =~ (^|:)$1(:|$) ]]; then
|
|
if [[ "${2:-}" = "after" ]]; then
|
|
export PATH=$PATH:$1
|
|
else
|
|
export PATH=$1:$PATH
|
|
fi
|
|
fi
|
|
}
|
|
|
|
checkXCODE() {
|
|
echo "[CHECK XCODE]"
|
|
if [[ ! -x /usr/bin/xcodebuild ]]; then
|
|
echo "ERROR: Install Xcode Tools from Apple before using this script."
|
|
exit 1
|
|
fi
|
|
|
|
if [[ ! -d "$(xcode-select --print-path)" ]]; then
|
|
echo "ERROR: Xcode Command Line Tools not selected:"
|
|
echo " open Xcode.app and go in Preferences->Locations,"
|
|
echo " and select the Command Line Tools"
|
|
exit 1
|
|
fi
|
|
}
|
|
|
|
checkGETTEXT() {
|
|
exportPaths
|
|
local locations=($(which msgmerge))
|
|
if [ "${#locations[@]}" -eq 0 ]; then
|
|
export GETTEXT_PREFIX="${TOOLCHAIN_DIR}"
|
|
"${CLOVERROOT}"/buildgettext.sh
|
|
else
|
|
# export gettex prefix to ensure buildpkg.sh will use it
|
|
# without the need to install it again
|
|
export GETTEXT_PREFIX="$(dirname "${locations[0]}")"
|
|
fi
|
|
}
|
|
|
|
exportPaths() {
|
|
if [[ "$SYSNAME" == Linux ]]; then
|
|
TOOLCHAIN_DIR=${TOOLCHAIN_DIR:-/usr}
|
|
elif [[ "$SYSNAME" == Darwin ]]; then
|
|
pathmunge "$(xcode-select --print-path)"/usr/bin
|
|
if [[ -d ~/src/opt/local ]]; then
|
|
TOOLCHAIN_DIR=~/src/opt/local
|
|
else
|
|
TOOLCHAIN_DIR=${TOOLCHAIN_DIR:-"$CLOVERROOT"/toolchain}
|
|
fi
|
|
fi
|
|
|
|
pathmunge "$TOOLCHAIN_DIR"/bin
|
|
export TOOLCHAIN_DIR=$TOOLCHAIN_DIR
|
|
export DIR_MAIN=${DIR_MAIN:-"$CLOVERROOT"/toolchain}
|
|
export DIR_TOOLS=${DIR_TOOLS:-$DIR_MAIN/tools}
|
|
export DIR_DOWNLOADS=${DIR_DOWNLOADS:-$DIR_TOOLS/download}
|
|
export DIR_LOGS=${DIR_LOGS:-$DIR_TOOLS/logs}
|
|
export PREFIX=${TOOLCHAIN_DIR}
|
|
}
|
|
|
|
checkTools() {
|
|
# export any env vars before building anything
|
|
if [[ "$SYSNAME" == Darwin ]]; then
|
|
checkXCODE
|
|
exportPaths
|
|
local GCC131_BIN="$PREFIX/cross/bin/x86_64-clover-linux-gnu-gcc"
|
|
if [[ $MYTOOLCHAIN == GCC* ]] && [[ ! -x "${GCC131_BIN}" ]]; then
|
|
if [[ $MYTOOLCHAIN == GCC131 ]]; then
|
|
cd "${CLOVERROOT}"
|
|
./build_gcc14.sh
|
|
else
|
|
MYTOOLCHAIN=XCODE8
|
|
fi
|
|
fi
|
|
else
|
|
exportPaths
|
|
fi
|
|
}
|
|
|
|
# Clone OR Update OpenCorePkg
|
|
function clone_OpenCorePkg() {
|
|
cd "${CLOVERROOT}"
|
|
if [ ! -d OpenCorePkg/AppleModels ]; then
|
|
echo "Cloning OpenCorePkg...."
|
|
git clone https://github.com/CloverHackyColor/OpenCorePkg.git > /dev/null
|
|
cd "${OpenCorePkg}"
|
|
git submodule update --init
|
|
else
|
|
echo "Updating OpenCorePkg...."
|
|
cd "${OpenCorePkg}"
|
|
git pull > /dev/null
|
|
fi
|
|
}
|
|
|
|
updateClover() {
|
|
echo "[UPDATE CLOVER]"
|
|
cd "${CLOVERROOT}"
|
|
clone_OpenCorePkg
|
|
if [[ -d .git ]]; then
|
|
git fetch --all --recurse-submodules
|
|
git pull --recurse-submodules origin master
|
|
else
|
|
echo "Error: this is not a git repository, can't update!"
|
|
fi
|
|
}
|
|
|
|
updateResetClover() {
|
|
echo "[UPDATE RESET CLOVER]"
|
|
cd "${CLOVERROOT}"
|
|
if [[ -d .git ]]; then
|
|
git fetch --all --recurse-submodules
|
|
git submodule foreach --recursive git clean -d -f -f
|
|
git clean -d -f -f
|
|
git submodule foreach --recursive git reset --hard origin/master
|
|
git reset --hard origin/master
|
|
git pull --recurse-submodules origin master
|
|
else
|
|
echo "Error: this is not a git repository, can't update!"
|
|
fi
|
|
}
|
|
|
|
buildCloverHFSPlus() {
|
|
if [[ -f "${CLOVERROOT}"/FileSystems/HFSPlus/X64/HFSPlus.efi ]]; then
|
|
echo "building Clover with HFSPlus"
|
|
buildClover HFSPlus
|
|
else
|
|
echo "${CLOVERROOT}/FileSystems/HFSPlus/X64/HFSPlus.efi: no such file!"
|
|
sleep 3
|
|
menu
|
|
fi
|
|
}
|
|
|
|
makeRelease() {
|
|
checkTools
|
|
|
|
# to force recreation of the Conf folder. You can still use a custom CONF_PATH if you don't want recreation.
|
|
rm -rf "$CLOVERROOT"/Conf
|
|
mkdir "$CLOVERROOT"/Conf
|
|
|
|
cd "${CLOVERROOT}"
|
|
if [[ -z "$WORKSPACE" ]]; then
|
|
export EDK_TOOLS_PATH="${PWD}"/BaseTools
|
|
set +u
|
|
source ./edksetup.sh BaseTools
|
|
set -u
|
|
cd "$CLOVERROOT"
|
|
WORKSPACE="${PWD}"
|
|
fi
|
|
|
|
echo "[BUILD CLOVER RELEASE]"
|
|
./ebuild.sh -fr -mc --no-usb -D NO_GRUB_DRIVERS_EMBEDDED -t $MYTOOLCHAIN
|
|
./ebuild.sh -fr -D NO_GRUB_DRIVERS_EMBEDDED -D LESS_DEBUG -t $MYTOOLCHAIN
|
|
# Run a post build script if exist (${DIR_TOOLS}/CloverScripts/postbuild.sh)
|
|
if [[ -x "${DIR_TOOLS}"/CloverScripts/postbuild.sh ]]; then
|
|
chmod +x "${DIR_TOOLS}"/CloverScripts/postbuild.sh
|
|
echo "Running Clover postbuild script"
|
|
"${DIR_TOOLS}"/CloverScripts/postbuild.sh "${CLOVERROOT}" $MYTOOLCHAIN
|
|
fi
|
|
}
|
|
|
|
makeReleaseXC() {
|
|
checkTools
|
|
|
|
# to force recreation of the Conf folder. You can still use a custom CONF_PATH if you don't want recreation.
|
|
rm -rf "$CLOVERROOT"/Conf
|
|
mkdir "$CLOVERROOT"/Conf
|
|
|
|
cd "${CLOVERROOT}"
|
|
if [[ -z "$WORKSPACE" ]]; then
|
|
export EDK_TOOLS_PATH="${PWD}"/BaseTools
|
|
set +u
|
|
source ./edksetup.sh BaseTools
|
|
set -u
|
|
cd "$CLOVERROOT"
|
|
WORKSPACE="${PWD}"
|
|
fi
|
|
|
|
echo "[BUILD CLOVER RELEASE WITH XCODE]"
|
|
local xrel="$(defaults read /Applications/Xcode.app/Contents/version.plist CFBundleShortVersionString)"
|
|
if [[ "$xrel" < "14.*" ]]; then
|
|
./ebuild.sh -fr -mc --no-usb -D NO_GRUB_DRIVERS_EMBEDDED -D -t XCODE8
|
|
./ebuild.sh -fr -D NO_GRUB_DRIVERS_EMBEDDED -D -t XCODE8
|
|
elif [[ "$xrel" == "14.*" ]]; then
|
|
./ebuild.sh -fr -mc --no-usb -D NO_GRUB_DRIVERS_EMBEDDED -D -t XCODE14
|
|
./ebuild.sh -fr -D NO_GRUB_DRIVERS_EMBEDDED -D -t XCODE14
|
|
elif [[ "$xrel" == "15.*" ]]; then
|
|
./ebuild.sh -fr -mc --no-usb -D NO_GRUB_DRIVERS_EMBEDDED -D -t XCODE15
|
|
./ebuild.sh -fr -D NO_GRUB_DRIVERS_EMBEDDED -D -t XCODE15
|
|
fi
|
|
# Run a post build script if exist (${DIR_TOOLS}/CloverScripts/postbuild.sh)
|
|
if [[ -x "${DIR_TOOLS}"/CloverScripts/postbuild.sh ]]; then
|
|
chmod +x "${DIR_TOOLS}"/CloverScripts/postbuild.sh
|
|
echo "Running Clover postbuild script"
|
|
"${DIR_TOOLS}"/CloverScripts/postbuild.sh "${CLOVERROOT}" $MYTOOLCHAIN
|
|
fi
|
|
}
|
|
|
|
|
|
buildCCPV() {
|
|
cd "${CLOVERROOT}"/Xcode/CloverConfigPlistValidator
|
|
make
|
|
}
|
|
|
|
BLC() {
|
|
if [[ ! -d "${CLOVERROOT}"/CloverPackage/BootLoaderChooser ]]; then
|
|
mkdir -p "${CLOVERROOT}"/CloverPackage/BootLoaderChooser
|
|
fi
|
|
curl -sLq https://github.com/jief666/BootloaderChooser/releases/download/1.4/BootX64.efi > "${CLOVERROOT}"/CloverPackage/BootLoaderChooser/BootX64.efi
|
|
chmod 775 "${CLOVERROOT}"/CloverPackage/BootLoaderChooser/BootX64.efi
|
|
}
|
|
|
|
buildClover() {
|
|
checkTools
|
|
|
|
# to force recreation of the Conf folder. You can still use a custom CONF_PATH if you don't want recreation.
|
|
rm -rf "$CLOVERROOT"/Conf
|
|
mkdir "$CLOVERROOT"/Conf
|
|
|
|
cd "${CLOVERROOT}"
|
|
if [[ -z "$WORKSPACE" ]]; then
|
|
export EDK_TOOLS_PATH="${PWD}"/BaseTools
|
|
set +u
|
|
source ./edksetup.sh BaseTools
|
|
set -u
|
|
cd "$CLOVERROOT"
|
|
WORKSPACE="${PWD}"
|
|
fi
|
|
|
|
echo "[BUILD CLOVER]"
|
|
# Run a custom build script if exist (${DIR_TOOLS}/Scripts/build.sh)
|
|
# This allow the user to run ebuild.sh with own parameters
|
|
if [[ -x "${DIR_TOOLS}"/Scripts/build.sh ]]; then
|
|
echo "Running custom build script"
|
|
"${DIR_TOOLS}"/Scripts/build.sh "${CLOVERROOT}" $MYTOOLCHAIN
|
|
else
|
|
local parameter=${1:-none}
|
|
if [[ "${parameter}" == HFSPlus ]]; then
|
|
#./ebuild.sh -fr -mc --no-usb -D NO_GRUB_DRIVERS_EMBEDDED -D USE_APPLE_HFSPLUS_DRIVER -t $MYTOOLCHAIN
|
|
./ebuild.sh -fr -D NO_GRUB_DRIVERS_EMBEDDED -D USE_APPLE_HFSPLUS_DRIVER -t $MYTOOLCHAIN
|
|
else
|
|
#./ebuild.sh -fr -mc --no-usb -D NO_GRUB_DRIVERS_EMBEDDED -t $MYTOOLCHAIN
|
|
./ebuild.sh -fr -D NO_GRUB_DRIVERS_EMBEDDED -D LESS_DEBUG -t $MYTOOLCHAIN
|
|
fi
|
|
fi
|
|
# Run a post build script if exist (${DIR_TOOLS}/CloverScripts/postbuild.sh)
|
|
if [[ -x "${DIR_TOOLS}"/CloverScripts/postbuild.sh ]]; then
|
|
chmod +x "${DIR_TOOLS}"/CloverScripts/postbuild.sh
|
|
echo "Running Clover postbuild script"
|
|
"${DIR_TOOLS}"/CloverScripts/postbuild.sh "${CLOVERROOT}" $MYTOOLCHAIN
|
|
fi
|
|
# Run a custom post build script if exist (${DIR_TOOLS}/Scripts/postbuild.sh)
|
|
if [[ -x "${DIR_TOOLS}"/Scripts/postbuild.sh ]]; then
|
|
echo "Running postbuild script"
|
|
"${DIR_TOOLS}"/Scripts/postbuild.sh "${CLOVERROOT}" $MYTOOLCHAIN
|
|
fi
|
|
}
|
|
|
|
buildCloverXC() {
|
|
checkTools
|
|
|
|
# to force recreation of the Conf folder. You can still use a custom CONF_PATH if you don't want recreation.
|
|
rm -rf "$CLOVERROOT"/Conf
|
|
mkdir "$CLOVERROOT"/Conf
|
|
|
|
cd "${CLOVERROOT}"
|
|
if [[ -z "$WORKSPACE" ]]; then
|
|
export EDK_TOOLS_PATH="${PWD}"/BaseTools
|
|
set +u
|
|
source ./edksetup.sh BaseTools
|
|
set -u
|
|
cd "$CLOVERROOT"
|
|
WORKSPACE="${PWD}"
|
|
fi
|
|
|
|
echo "[BUILD CLOVER WITH XCODE]"
|
|
# Run a custom build script if exist (${DIR_TOOLS}/Scripts/build.sh)
|
|
# This allow the user to run ebuild.sh with own parameters
|
|
if [[ -x "${DIR_TOOLS}"/Scripts/build.sh ]]; then
|
|
echo "Running custom build script"
|
|
"${DIR_TOOLS}"/Scripts/build.sh "${CLOVERROOT}" $MYTOOLCHAIN
|
|
else
|
|
local xrel="$(defaults read /Applications/Xcode.app/Contents/version.plist CFBundleShortVersionString)"
|
|
if [[ "$xrel" < "14.*" ]]; then
|
|
./ebuild.sh -fr -D NO_GRUB_DRIVERS_EMBEDDED -D USE_APPLE_HFSPLUS_DRIVER -t XCODE8
|
|
elif [[ "$xrel" == "14.*" ]]; then
|
|
./ebuild.sh -fr -D NO_GRUB_DRIVERS_EMBEDDED -D USE_APPLE_HFSPLUS_DRIVER -t XCODE14
|
|
elif [[ "$xrel" == "15.*" ]]; then
|
|
./ebuild.sh -fr -D NO_GRUB_DRIVERS_EMBEDDED -D USE_APPLE_HFSPLUS_DRIVER -t XCODE15
|
|
fi
|
|
fi
|
|
# Run a post build script if exist (${DIR_TOOLS}/CloverScripts/postbuild.sh)
|
|
if [[ -x "${DIR_TOOLS}"/CloverScripts/postbuild.sh ]]; then
|
|
chmod +x "${DIR_TOOLS}"/CloverScripts/postbuild.sh
|
|
echo "Running Clover postbuild script"
|
|
"${DIR_TOOLS}"/CloverScripts/postbuild.sh "${CLOVERROOT}" $MYTOOLCHAIN
|
|
fi
|
|
# Run a custom post build script if exist (${DIR_TOOLS}/Scripts/postbuild.sh)
|
|
if [[ -x "${DIR_TOOLS}"/Scripts/postbuild.sh ]]; then
|
|
echo "Running postbuild script"
|
|
"${DIR_TOOLS}"/Scripts/postbuild.sh "${CLOVERROOT}" $MYTOOLCHAIN
|
|
fi
|
|
}
|
|
|
|
buildtestsix() {
|
|
checkTools
|
|
|
|
# to force recreation of the Conf folder. You can still use a custom CONF_PATH if you don't want recreation.
|
|
rm -rf "$CLOVERROOT"/Conf
|
|
mkdir "$CLOVERROOT"/Conf
|
|
|
|
cd "${CLOVERROOT}"
|
|
echo "[BUILD CLOVERDB]"
|
|
./hebuild.sh -t $MYTOOLCHAIN
|
|
}
|
|
|
|
buildtestsev() {
|
|
checkTools
|
|
|
|
# to force recreation of the Conf folder. You can still use a custom CONF_PATH if you don't want recreation.
|
|
rm -rf "$CLOVERROOT"/Conf
|
|
mkdir "$CLOVERROOT"/Conf
|
|
|
|
cd "${CLOVERROOT}"
|
|
echo "[BUILD CLOVERDB]"
|
|
./hebuild.sh -mc --no-usb -D NO_GRUB_DRIVERS_EMBEDDED -t $MYTOOLCHAIN
|
|
}
|
|
|
|
|
|
buildCloverTest() {
|
|
checkTools
|
|
|
|
cd "${CLOVERROOT}"
|
|
|
|
if [[ -z "$WORKSPACE" ]]; then
|
|
export EDK_TOOLS_PATH="${PWD}"/BaseTools
|
|
set +u
|
|
source ./edksetup.sh BaseTools
|
|
set -u
|
|
cd "$CLOVERROOT"
|
|
WORKSPACE="${PWD}"
|
|
fi
|
|
|
|
echo "[BUILD CLOVER TEST]"
|
|
./ebuild.sh -nb -t $MYTOOLCHAIN
|
|
}
|
|
|
|
buildPkg() {
|
|
if [[ "$SYSNAME" == Darwin ]]; then
|
|
cd "${CLOVERROOT}"/CloverPackage
|
|
echo "[BUILD PKG]"
|
|
checkXCODE
|
|
checkGETTEXT
|
|
make pkg
|
|
else
|
|
echo && echo "can't build pkg on a non Darwin OS!"
|
|
fi
|
|
}
|
|
|
|
buildApp() {
|
|
local withClover=${1-"none"}
|
|
if [[ "$SYSNAME" == Darwin ]]; then
|
|
if [[ -f "${CLOVERROOT}"/CloverPackage/CloverV2/EFI/CLOVER/CLOVERX64.efi ]]; then
|
|
rm -f "${CLOVERROOT}"/CloverPackage/sym/.withV2
|
|
mkdir -p "${CLOVERROOT}"/CloverPackage/sym
|
|
if [[ $withClover == withV2 ]]; then
|
|
touch "${CLOVERROOT}"/CloverPackage/sym/.withV2
|
|
fi
|
|
cd "${CLOVERROOT}"/CloverApp
|
|
echo "[BUILD APP]"
|
|
checkXCODE
|
|
make
|
|
else
|
|
echo && echo "please, build Clover first!"
|
|
sleep 3
|
|
fi
|
|
else
|
|
echo && echo "Clover.app can only be built in macOS!"
|
|
fi
|
|
}
|
|
|
|
buildIso() {
|
|
cd "${CLOVERROOT}"/CloverPackage
|
|
echo "[BUILD ISO]"
|
|
make iso
|
|
}
|
|
|
|
makeV2() {
|
|
#clear
|
|
export V2=${V2:-${CLOVERROOT}/CloverPackage/CloverV2}
|
|
if [[ -f $V2/EFI/CLOVER/CLOVERX64.efi ]]; then
|
|
cd "${CLOVERROOT}"/CloverPackage
|
|
echo "" && echo -e $COL_CYAN"[BUILD CloverV2]"
|
|
make zip
|
|
else
|
|
echo "" && echo -e $COL_RED"please, Compile Clover first!!"
|
|
Sleep 3
|
|
fi
|
|
}
|
|
|
|
|
|
checkStatus() {
|
|
if [[ -d .git ]]; then
|
|
git fetch --recurse-submodules origin
|
|
git log -n 1 > "${DIR_OUT}"/status_${revision}-$(date +%Y%m%d-%H.%M.%S).txt
|
|
git status >> "${DIR_OUT}"/status_${revision}-$(date +%Y%m%d-%H.%M.%S).txt
|
|
git submodule foreach --recursive "git log -n 1 && git status" >> "${DIR_OUT}"/status_${revision}-$(date +%Y%m%d-%H.%M.%S).txt && open "${DIR_OUT}"/status_${revision}-*.txt
|
|
else
|
|
echo "Error: this is not a git repository, can't get info!"
|
|
fi
|
|
}
|
|
|
|
showdiff() {
|
|
if [[ -d .git ]]; then
|
|
git fetch --recurse-submodules origin
|
|
git diff > "${DIR_OUT}"/diff_${revision}-$(date +%Y%m%d-%H.%M.%S).txt && open "${DIR_OUT}"/diff_${revision}-*.txt
|
|
else
|
|
echo "Error: this is not a git repository, can't get info!"
|
|
fi
|
|
}
|
|
|
|
cleanBaseTools() {
|
|
cd "${CLOVERROOT}"/BaseTools
|
|
make clean
|
|
}
|
|
|
|
## Utilities
|
|
buildCPV() {
|
|
revision=r$(git describe --tags $(git rev-list --tags --max-count=1))
|
|
if [[ -d "${CLOVERROOT}"/CloverPackage/CloverConfigPlistValidator ]]; then
|
|
rm -Rf "${CLOVERROOT}"/CloverPackage/CloverConfigPlistValidator
|
|
fi
|
|
mkdir -p "${CLOVERROOT}"/CloverPackage/CloverConfigPlistValidator
|
|
cd "${CLOVERROOT}"/Xcode/CloverConfigPlistValidator
|
|
checkXCODE
|
|
xcodebuild -project ./CloverConfigPlistValidator.xcodeproj -quiet CONFIGURATION_BUILD_DIR="${CLOVERROOT}"/CloverPackage/CloverConfigPlistValidator
|
|
mv -f "${CLOVERROOT}"/CloverPackage/CloverConfigPlistValidator/CloverConfigPlistValidator "${CLOVERROOT}"/CloverPackage/CloverConfigPlistValidator/CloverConfigPlistValidator_${revision}
|
|
rm -r "${CLOVERROOT}"/CloverPackage/CloverConfigPlistValidator/*.dSYM
|
|
open "${CLOVERROOT}"/CloverPackage/CloverConfigPlistValidator
|
|
}
|
|
|
|
PlistEDPlus() {
|
|
if [[ ! -d $HOME/Desktop/ClovUtils ]]; then
|
|
mkdir -p $HOME/Desktop/ClovUtils
|
|
fi
|
|
cd $HOME/Desktop/ClovUtils && curl -qsSLk https://github.com/ic005k/PlistEDPlus/releases/download/1.2.35/PlistEDPlus_Mac.dmg > PlistEDPlus_Mac.dmg
|
|
hdiutil attach -quiet -noverify -nobrowse PlistEDPlus_Mac.dmg && cp -Rf /Volumes/bin\:release\:PlistEDPlus/PlistEDPlus.app $HOME/Desktop/ClovUtils
|
|
hdiutil detach -force /Volumes/bin\:release\:PlistEDPlus
|
|
rm -r $HOME/Desktop/ClovUtils/PlistEDPlus_Mac.dmg && open $HOME/Desktop/ClovUtils
|
|
}
|
|
|
|
Hackintool() {
|
|
if [[ ! -d $HOME/Desktop/ClovUtils ]]; then
|
|
mkdir -p $HOME/Desktop/ClovUtils
|
|
fi
|
|
cd $HOME/Desktop/ClovUtils && curl -sLq https://github.com/headkaze/Hackintool/releases/download/3.8.4/Hackintool.zip -o Hackintool.zip
|
|
unzip -q Hackintool.zip && rm -r Hackintool.zip && open $HOME/Desktop/ClovUtils
|
|
}
|
|
|
|
BitmaskDecode() {
|
|
if [[ ! -d $HOME/Desktop/ClovUtils ]]; then
|
|
mkdir -p $HOME/Desktop/ClovUtils
|
|
fi
|
|
cd $HOME/Desktop/ClovUtils && git clone -q https://github.com/corpnewt/BitmaskDecode && open $HOME/Desktop/ClovUtils
|
|
}
|
|
|
|
MaciASL() {
|
|
if [[ ! -d $HOME/Desktop/ClovUtils ]]; then
|
|
mkdir -p $HOME/Desktop/ClovUtils
|
|
fi
|
|
cd $HOME/Desktop/ClovUtils && curl -sLq https://github.com/acidanthera/MaciASL/releases/download/1.6.2/MaciASL-1.6.2-RELEASE.dmg > MaciASL-1.6.2-RELEASE.dmg
|
|
hdiutil attach -quiet -noverify -nobrowse MaciASL-1.6.2-RELEASE.dmg && cp -Rf /Volumes/MaciASL/MaciASL.app $HOME/Desktop/ClovUtils
|
|
hdiutil detach -force /Volumes/MaciASL
|
|
rm -r $HOME/Desktop/ClovUtils/MaciASL-1.6.2-RELEASE.dmg && open $HOME/Desktop/ClovUtils
|
|
}
|
|
|
|
dmidecode() {
|
|
if [[ ! -d $HOME/Desktop/ClovUtils ]]; then
|
|
mkdir -p $HOME/Desktop/ClovUtils/dmidecode
|
|
fi
|
|
cd $HOME/Desktop/ClovUtils && git clone -q https://github.com/acidanthera/dmidecode dmi-decode && xcodebuild -project ./dmi-decode/dmidecode.xcodeproj -quiet
|
|
cp -r dmi-decode/dmidecode $HOME/Desktop/ClovUtils/dmidecode && rm -Rf $HOME/Desktop/ClovUtils/dmi-decode && open $HOME/Desktop/ClovUtils
|
|
}
|
|
|
|
Get-IOReg-Devices() {
|
|
if [[ ! -d $HOME/Desktop/ClovUtils ]]; then
|
|
mkdir -p $HOME/Desktop/ClovUtils
|
|
fi
|
|
cd $HOME/Desktop/ClovUtils && git clone -q https://github.com/LAbyOne/Get-IOReg-Devices
|
|
mv -f Get-IOReg-Devices/Get\ IOReg\ Devices $HOME/Desktop/ClovUtils/Get\ IOReg-Devices && chmod a+x $HOME/Desktop/ClovUtils/Get\ IOReg-Devices/*.command
|
|
rm -rf Get-IOReg-Devices && open $HOME/Desktop/ClovUtils
|
|
}
|
|
|
|
NDBrightness () {
|
|
if [[ ! -d $HOME/Desktop/ClovUtils ]]; then
|
|
mkdir -p $HOME/Desktop/ClovUtils
|
|
fi
|
|
cd $HOME/Desktop/ClovUtils && git clone -q https://github.com/KAMIKAZEUA/NativeDisplayBrightness NDBrightness
|
|
xcodebuild -project ./NDBrightness/NativeDisplayBrightness.xcodeproj -quiet -configuration Release clean build ARCHS=x86_64 ONLY_ACTIVE_ARCH=YES CONFIGURATION_BUILD_DIR=$HOME/Desktop/ClovUtils
|
|
rm -Rf $HOME/Desktop/ClovUtils/NDBrightness && rm -r $HOME/Desktop/ClovUtils/*.dSYM && open $HOME/Desktop/ClovUtils
|
|
}
|
|
|
|
SSDTTime() {
|
|
if [[ ! -d $HOME/Desktop/ClovUtils ]]; then
|
|
mkdir -p $HOME/Desktop/ClovUtils
|
|
fi
|
|
cd $HOME/Desktop/ClovUtils && git clone -q https://github.com/corpnewt/SSDTTime && open $HOME/Desktop/ClovUtils
|
|
}
|
|
|
|
USBMap() {
|
|
if [[ ! -d $HOME/Desktop/ClovUtils ]]; then
|
|
mkdir -p $HOME/Desktop/ClovUtils
|
|
fi
|
|
cd $HOME/Desktop/ClovUtils && git clone -q https://github.com/corpnewt/USBMap
|
|
open $HOME/Desktop/ClovUtils
|
|
}
|
|
|
|
Xiasl() {
|
|
if [[ ! -d $HOME/Desktop/ClovUtils ]]; then
|
|
mkdir -p $HOME/Desktop/ClovUtils
|
|
fi
|
|
cd $HOME/Desktop/ClovUtils && curl -sLq https://github.com/ic005k/Xiasl/releases/download/1.1.66/Xiasl_Mac.dmg > Xiasl_Mac.dmg
|
|
hdiutil attach -quiet -noverify -nobrowse Xiasl_Mac.dmg && cp -Rf /Volumes/bin\:release\:Xiasl/Xiasl.app $HOME/Desktop/ClovUtils
|
|
hdiutil detach -force /Volumes/bin\:release\:Xiasl
|
|
rm -r $HOME/Desktop/ClovUtils/Xiasl_Mac.dmg && open $HOME/Desktop/ClovUtils
|
|
}
|
|
|
|
CsrDecode() {
|
|
if [[ ! -d $HOME/Desktop/ClovUtils ]]; then
|
|
mkdir -p $HOME/Desktop/ClovUtils/CsrDecode
|
|
fi
|
|
cd $HOME/Desktop/ClovUtils && git clone -q https://github.com/corpnewt/CsrDecode && open $HOME/Desktop/ClovUtils
|
|
}
|
|
|
|
gibMacOS() {
|
|
if [[ ! -d $HOME/Desktop/ClovUtils ]]; then
|
|
mkdir -p $HOME/Desktop/ClovUtils
|
|
fi
|
|
cd $HOME/Desktop/ClovUtils && git clone -q https://github.com/corpnewt/gibMacOS && open $HOME/Desktop/ClovUtils
|
|
}
|
|
|
|
mountR/W() {
|
|
if [[ ! -d $HOME/Desktop/ClovUtils ]]; then
|
|
mkdir -p $HOME/Desktop/ClovUtils
|
|
fi
|
|
cd $HOME/Desktop/ClovUtils && curl -sLq https://github.com/jacklukem/BigSurmountsrw/releases/download/1.0/BigSurmountsrw2.app.zip -o BigSurmountsrw2.app.zip && open $HOME/Desktop/ClovUtils
|
|
unzip -q $HOME/Desktop/ClovUtils/BigSurmountsrw2.app.zip && rm -r $HOME/Desktop/ClovUtils/BigSurmountsrw2.app.zip $HOME/Desktop/ClovUtils/__MACOSX
|
|
}
|
|
|
|
|
|
testing() {
|
|
#clear
|
|
echo
|
|
echo -e $COL_GREEN" ---------------------------------------------------------------------------------"
|
|
echo -e " 🍀 Clover r${revision}$COL_WHITE (SHA: $lsha1)"
|
|
echo -e $COL_CYAN" Test Builds"
|
|
echo -e $COL_GREEN" ---------------------------------------------------------------------------------"$COL_RESET
|
|
echo -e "\n\n\n\n\n\n\n\n\n\n\n"
|
|
|
|
PS3='
|
|
Please enter your choice: '
|
|
options=( 'test Clover with boot6'
|
|
'test Clover with boot7'
|
|
'test build (no autogen, no boot files)'
|
|
'back to Cloverbuilds'
|
|
'Exit')
|
|
select opt in "${options[@]}"
|
|
do
|
|
case $opt in
|
|
"test Clover with boot6")
|
|
buildtestsix
|
|
break
|
|
;;
|
|
"test Clover with boot7")
|
|
buildtestsev
|
|
break
|
|
;;
|
|
"test build (no autogen, no boot files)")
|
|
buildCloverTest
|
|
break
|
|
;;
|
|
"back to Cloverbuilds")
|
|
menu
|
|
break
|
|
;;
|
|
"Exit")
|
|
exit
|
|
break
|
|
;;
|
|
*)
|
|
echo "invalid option $REPLY"
|
|
break
|
|
;;
|
|
esac
|
|
done
|
|
testing
|
|
}
|
|
|
|
Utilities() {
|
|
echo
|
|
echo -e $COL_GREEN" ---------------------------------------------------------------------------------"
|
|
echo -e " 🍀 Clover r${revision}$COL_WHITE (SHA: $lsha1)"
|
|
echo -e $COL_CYAN" External Utilities "
|
|
echo -e $COL_WHITE" All Files will be put on Desktop/ClovUtils"
|
|
echo -e $COL_GREEN" ---------------------------------------------------------------------------------"$COL_RESET
|
|
echo -e "\n\n\n\n\n\n\n"
|
|
|
|
PS3='
|
|
Please enter your choice: '
|
|
options=( 'Get CloverConfigPlistValidator '
|
|
'Get PlistEDPlus '
|
|
'Get Hackintool '
|
|
'Get BitmaskDecode '
|
|
'Get MaciASL '
|
|
'Get dmidecode '
|
|
'Get IOReg-Devices '
|
|
'Get NativeDisplayBrightness '
|
|
'Get SSDTTime'
|
|
'Get USBMap'
|
|
'Get Xiasl'
|
|
'Get CsrDecode'
|
|
'Get gibMacOS'
|
|
'Get mountR/W'
|
|
'back to Cloverbuilds'
|
|
'Exit')
|
|
select opt in "${options[@]}"
|
|
do
|
|
case $opt in
|
|
"Get CloverConfigPlistValidator ")
|
|
buildCPV
|
|
break
|
|
;;
|
|
"Get PlistEDPlus ")
|
|
PlistEDPlus
|
|
break
|
|
;;
|
|
"Get Hackintool ")
|
|
Hackintool
|
|
break
|
|
;;
|
|
"Get BitmaskDecode ")
|
|
BitmaskDecode
|
|
break
|
|
;;
|
|
"Get MaciASL ")
|
|
MaciASL
|
|
break
|
|
;;
|
|
"Get dmidecode ")
|
|
dmidecode
|
|
break
|
|
;;
|
|
"Get IOReg-Devices ")
|
|
Get-IOReg-Devices
|
|
break
|
|
;;
|
|
"Get NativeDisplayBrightness ")
|
|
NDBrightness
|
|
break
|
|
;;
|
|
"Get SSDTTime")
|
|
SSDTTime
|
|
break
|
|
;;
|
|
"Get USBMap")
|
|
USBMap
|
|
break
|
|
;;
|
|
"Get Xiasl")
|
|
Xiasl
|
|
break
|
|
;;
|
|
"Get CsrDecode")
|
|
CsrDecode
|
|
break
|
|
;;
|
|
"Get gibMacOS")
|
|
gibMacOS
|
|
break
|
|
;;
|
|
"Get mountR/W")
|
|
mountR/W
|
|
break
|
|
;;
|
|
"back to Cloverbuilds")
|
|
menu
|
|
break
|
|
;;
|
|
"Exit")
|
|
exit
|
|
break
|
|
;;
|
|
*)
|
|
echo "invalid option $REPLY"
|
|
break
|
|
;;
|
|
esac
|
|
done
|
|
Utilities
|
|
}
|
|
|
|
Extra() {
|
|
#clear
|
|
echo
|
|
echo -e $COL_GREEN" ---------------------------------------------------------------------------------"
|
|
if [[ ! -x "$(which python3)" ]]; then
|
|
echo -e " ${pynone}"
|
|
fi
|
|
echo -e "$COL_GREEN 🍀 Clover r${revision}$COL_WHITE (SHA: $lsha1)"
|
|
echo -e "$COL_WHITE Default TOOLCHAIN:$COL_CYAN $MYTOOLCHAIN$COL_WHITE "
|
|
echo -e "${COL_WHITE} Switch to${COL_CYAN} XCODE${COL_WHITE} can be done on${COL_CYAN} Cloverbuilds"
|
|
if [[ -x "$(which python3)" ]]; then
|
|
echo -e $COL_GREEN" ---------------------- ${pyversion}$COL_GREEN -------------------- "$COL_RESET
|
|
echo -e "\n\n\n\n\n\n\n\n\n\n"
|
|
else
|
|
echo -e $COL_GREEN" ---------------------------------------------------------------------------------"$COL_RESET
|
|
echo -e "\n\n\n\n\n\n\n\n\n"
|
|
fi
|
|
PS3='
|
|
Please enter your choice: '
|
|
options=( 'Cloverbuilds '
|
|
'test Clover '
|
|
'check status '
|
|
'show diff '
|
|
'open CloverV2 directory'
|
|
'update Clover (reset changes)'
|
|
'clean BaseTools'
|
|
'Utilities'
|
|
'Exit')
|
|
|
|
select opt in "${options[@]}"
|
|
do
|
|
case $opt in
|
|
"Cloverbuilds ")
|
|
menu
|
|
break
|
|
;;
|
|
"test Clover ")
|
|
testing
|
|
break
|
|
;;
|
|
"check status ")
|
|
checkStatus
|
|
break
|
|
;;
|
|
"show diff ")
|
|
showdiff
|
|
break
|
|
;;
|
|
"open CloverV2 directory")
|
|
if [[ -d "${CLOVERROOT}"/CloverPackage/CloverV2/EFI/CLOVER ]]; then
|
|
open "${CLOVERROOT}"/CloverPackage/CloverV2/EFI/CLOVER
|
|
else
|
|
echo && echo "Directory not found. Compile Clover first!!"
|
|
sleep 2
|
|
fi
|
|
break
|
|
;;
|
|
"update Clover (reset changes)")
|
|
read -p "Are you sure? (type y to confirm or any other to negate) " -n 1 -r
|
|
echo
|
|
if [[ $REPLY =~ ^[Yy]$ ]]; then
|
|
updateResetClover
|
|
fi
|
|
break
|
|
;;
|
|
"clean BaseTools")
|
|
read -p "Are you sure? (type y to confirm or any other to negate) " -n 1 -r
|
|
echo
|
|
if [[ $REPLY =~ ^[Yy]$ ]]; then
|
|
cleanBaseTools
|
|
fi
|
|
break
|
|
;;
|
|
"Utilities")
|
|
Utilities
|
|
break
|
|
;;
|
|
"Exit")
|
|
exit 0
|
|
;;
|
|
*)
|
|
echo "invalid option $REPLY"
|
|
break
|
|
;;
|
|
esac
|
|
done
|
|
Extra
|
|
}
|
|
|
|
menu() {
|
|
#clear
|
|
echo
|
|
echo -e $COL_GREEN" ---------------------------------------------------------------------------------"
|
|
if [[ ! -x "$(which python3)" ]]; then
|
|
echo -e " ${pynone}"
|
|
fi
|
|
echo -e "$COL_GREEN 🍀 Clover r${revision}$COL_WHITE (SHA: $lsha1)"
|
|
echo -e "$COL_WHITE Default TOOLCHAIN:$COL_CYAN $MYTOOLCHAIN$COL_WHITE "
|
|
echo -e "${COL_WHITE} Switch to${COL_CYAN} XCODE${COL_WHITE} select:${COL_CYAN} build (with XCode)"
|
|
echo -e "${COL_WHITE} Depending on your${COL_CYAN} XCODE version${COL_WHITE} the Toolset will be${COL_CYAN} automatically chosen"
|
|
# echo -e "${COL_WHITE} Toolset${COL_CYAN} is automatically chosen${COL_WHITE} depending on the${COL_CYAN} XCODE installed version"
|
|
if [[ -x "$(which python3)" ]]; then
|
|
echo -e $COL_GREEN" ---------------------- ${pyversion}$COL_GREEN -------------------- "$COL_RESET
|
|
echo -e "\n\n\n\n\n\n\n"
|
|
else
|
|
echo -e $COL_GREEN" ---------------------------------------------------------------------------------"$COL_RESET
|
|
echo -e "\n\n\n\n\n\n\n"
|
|
fi
|
|
PS3='
|
|
Please enter your choice: '
|
|
options=( 'build Clover (Default Toolchain) '
|
|
'build all (Default Toolchain) '
|
|
'make Release (Default Toolchain) '
|
|
# 'build Clover with HFSPlus '
|
|
'update Clover '
|
|
'make pkg '
|
|
'make iso '
|
|
'make Clover_V2'
|
|
'build Clover (with XCode)'
|
|
'build all (with XCode)'
|
|
'make Release (with XCode)'
|
|
'build Clover with HFSPlus'
|
|
'Extra Options'
|
|
'Exit')
|
|
|
|
select opt in "${options[@]}"
|
|
do
|
|
case $opt in
|
|
"build Clover (Default Toolchain) ")
|
|
buildClover
|
|
break
|
|
;;
|
|
"build all (Default Toolchain) ")
|
|
buildClover
|
|
BLC
|
|
buildPkg
|
|
buildIso
|
|
makeV2
|
|
break
|
|
;;
|
|
"make Release (Default Toolchain) ")
|
|
makeRelease
|
|
BLC
|
|
buildPkg
|
|
buildIso
|
|
makeV2
|
|
break
|
|
;;
|
|
"update Clover ")
|
|
updateClover
|
|
break
|
|
;;
|
|
"make pkg ")
|
|
BLC
|
|
buildPkg
|
|
break
|
|
;;
|
|
"make iso ")
|
|
buildIso
|
|
break
|
|
;;
|
|
"make Clover_V2")
|
|
makeV2
|
|
break
|
|
;;
|
|
"build Clover (with XCode)")
|
|
buildCloverXC
|
|
break
|
|
;;
|
|
"build all (with XCode)")
|
|
buildCloverXC
|
|
BLC
|
|
buildPkg
|
|
buildIso
|
|
makeV2
|
|
break
|
|
;;
|
|
"make Release (with XCode)")
|
|
makeReleaseXC
|
|
BLC
|
|
buildPkg
|
|
buildIso
|
|
makeV2
|
|
break
|
|
;;
|
|
"build Clover with HFSPlus ")
|
|
buildCloverHFSPlus
|
|
break
|
|
;;
|
|
"Extra Options")
|
|
Extra
|
|
break
|
|
;;
|
|
"Exit")
|
|
exit 0
|
|
;;
|
|
*)
|
|
echo "invalid option $REPLY"
|
|
break
|
|
;;
|
|
esac
|
|
done
|
|
menu
|
|
}
|
|
|
|
# Main
|
|
clone_OpenCorePkg
|
|
set -e
|
|
if [[ "$2" == ci ]]; then
|
|
makeRelease
|
|
# buildCCPV
|
|
BLC
|
|
buildPkg
|
|
buildIso
|
|
makeV2
|
|
else
|
|
menu
|
|
fi
|