mirror of
https://github.com/acidanthera/OpenCorePkg.git
synced 2025-12-08 19:25:01 +00:00
204 lines
5.9 KiB
Bash
Executable File
204 lines
5.9 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
unset WORKSPACE
|
|
unset PACKAGES_PATH
|
|
|
|
BUILDDIR=$(dirname "$0")
|
|
pushd "$BUILDDIR" >/dev/null
|
|
BUILDDIR=$(pwd)
|
|
popd >/dev/null
|
|
|
|
cd "$BUILDDIR"
|
|
|
|
prompt() {
|
|
echo "$1"
|
|
if [ "$FORCE_INSTALL" != "1" ]; then
|
|
read -p "Enter [Y]es to continue: " v
|
|
if [ "$v" != "Y" ] && [ "$v" != "y" ]; then
|
|
exit 1
|
|
fi
|
|
fi
|
|
}
|
|
|
|
updaterepo() {
|
|
if [ ! -d "$2" ]; then
|
|
git clone "$1" -b "$3" --depth=1 "$2" || exit 1
|
|
fi
|
|
pushd "$2" >/dev/null
|
|
git pull
|
|
if [ "$2" != "UDK" ]; then
|
|
sym=$(find . -not -type d -exec file "{}" ";" | grep CRLF)
|
|
if [ "${sym}" != "" ]; then
|
|
echo "Repository $1 named $2 contains CRLF line endings"
|
|
exit 1
|
|
fi
|
|
fi
|
|
popd >/dev/null
|
|
}
|
|
|
|
package() {
|
|
if [ ! -d "$1" ]; then
|
|
echo "Missing package directory"
|
|
exit 1
|
|
fi
|
|
|
|
local ver=$(cat Include/OpenCore.h | grep OPEN_CORE_VERSION | sed 's/.*"\(.*\)".*/\1/' | grep -E '^[0-9.]+$')
|
|
if [ "$ver" = "" ]; then
|
|
echo "Invalid version $ver"
|
|
fi
|
|
|
|
selfdir=$(pwd)
|
|
pushd "$1" || exit 1
|
|
rm -rf tmp || exit 1
|
|
mkdir -p tmp/EFI || exit 1
|
|
mkdir -p tmp/EFI/OC || exit 1
|
|
mkdir -p tmp/EFI/OC/ACPI || exit 1
|
|
mkdir -p tmp/EFI/OC/Drivers || exit 1
|
|
mkdir -p tmp/EFI/OC/Kexts || exit 1
|
|
mkdir -p tmp/EFI/OC/Tools || exit 1
|
|
mkdir -p tmp/EFI/BOOT || exit 1
|
|
mkdir -p tmp/Docs/AcpiSamples || exit 1
|
|
mkdir -p tmp/Utilities || exit 1
|
|
cp OpenCore.efi tmp/EFI/OC/ || exit 1
|
|
cp BOOTx64.efi tmp/EFI/BOOT/ || exit 1
|
|
cp FwRuntimeServices.efi tmp/EFI/OC/Drivers/ || exit 1
|
|
cp "${selfdir}/Docs/Configuration.pdf" tmp/Docs/ || exit 1
|
|
cp "${selfdir}/Docs/Differences/Differences.pdf" tmp/Docs/ || exit 1
|
|
cp "${selfdir}/Docs/Sample.plist" tmp/Docs/ || exit 1
|
|
cp "${selfdir}/Docs/SampleFull.plist" tmp/Docs/ || exit 1
|
|
cp "${selfdir}/Changelog.md" tmp/Docs/ || exit 1
|
|
cp -r "${selfdir}/Docs/AcpiSamples/" tmp/Docs/AcpiSamples/ || exit 1
|
|
cp -r "${selfdir}/UDK/OcSupportPkg/Utilities/BootInstall" tmp/Utilities/ || exit 1
|
|
cp -r "${selfdir}/UDK/OcSupportPkg/Utilities/CreateVault" tmp/Utilities/ || exit 1
|
|
cp -r "${selfdir}/UDK/OcSupportPkg/Utilities/LogoutHook" tmp/Utilities/ || exit 1
|
|
pushd tmp || exit 1
|
|
zip -qry -FS ../"OpenCore-${ver}-${2}.zip" * || exit 1
|
|
popd || exit 1
|
|
rm -rf tmp || exit 1
|
|
popd || exit 1
|
|
}
|
|
|
|
if [ "$BUILDDIR" != "$(printf "%s\n" $BUILDDIR)" ]; then
|
|
echo "EDK2 build system may still fail to support directories with spaces!"
|
|
exit 1
|
|
fi
|
|
|
|
if [ "$(which clang)" = "" ] || [ "$(which git)" = "" ] || [ "$(clang -v 2>&1 | grep "no developer")" != "" ] || [ "$(git -v 2>&1 | grep "no developer")" != "" ]; then
|
|
echo "Missing Xcode tools, please install them!"
|
|
exit 1
|
|
fi
|
|
|
|
if [ "$(nasm -v)" = "" ] || [ "$(nasm -v | grep Apple)" != "" ]; then
|
|
echo "Missing or incompatible nasm!"
|
|
echo "Download the latest nasm from http://www.nasm.us/pub/nasm/releasebuilds/"
|
|
prompt "Install last tested version automatically?"
|
|
pushd /tmp >/dev/null
|
|
rm -rf nasm-mac64.zip
|
|
curl -OL "https://github.com/acidanthera/ocbuild/raw/master/external/nasm-mac64.zip" || exit 1
|
|
nasmzip=$(cat nasm-mac64.zip)
|
|
rm -rf nasm-*
|
|
curl -OL "https://github.com/acidanthera/ocbuild/raw/master/external/${nasmzip}" || exit 1
|
|
unzip -q "${nasmzip}" nasm*/nasm nasm*/ndisasm || exit 1
|
|
sudo mkdir -p /usr/local/bin || exit 1
|
|
sudo mv nasm*/nasm /usr/local/bin/ || exit 1
|
|
sudo mv nasm*/ndisasm /usr/local/bin/ || exit 1
|
|
rm -rf "${nasmzip}" nasm-*
|
|
popd >/dev/null
|
|
fi
|
|
|
|
if [ "$(which mtoc.NEW)" == "" ] || [ "$(which mtoc)" == "" ]; then
|
|
echo "Missing mtoc or mtoc.NEW!"
|
|
echo "To build mtoc follow: https://github.com/tianocore/tianocore.github.io/wiki/Xcode#mac-os-x-xcode"
|
|
prompt "Install prebuilt mtoc and mtoc.NEW automatically?"
|
|
pushd /tmp >/dev/null
|
|
rm -f mtoc mtoc-mac64.zip
|
|
curl -OL "https://github.com/acidanthera/ocbuild/raw/master/external/mtoc-mac64.zip" || exit 1
|
|
unzip -q mtoc-mac64.zip mtoc || exit 1
|
|
sudo mkdir -p /usr/local/bin || exit 1
|
|
sudo cp mtoc /usr/local/bin/mtoc || exit 1
|
|
sudo mv mtoc /usr/local/bin/mtoc.NEW || exit 1
|
|
popd >/dev/null
|
|
fi
|
|
|
|
if [ ! -d "Binaries" ]; then
|
|
mkdir Binaries || exit 1
|
|
cd Binaries || exit 1
|
|
ln -s ../UDK/Build/OpenCorePkg/RELEASE_XCODE5/X64 RELEASE || exit 1
|
|
ln -s ../UDK/Build/OpenCorePkg/DEBUG_XCODE5/X64 DEBUG || exit 1
|
|
ln -s ../UDK/Build/OpenCorePkg/NOOPT_XCODE5/X64 NOOPT || exit 1
|
|
cd .. || exit 1
|
|
fi
|
|
|
|
while true; do
|
|
if [ "$1" == "--skip-tests" ]; then
|
|
SKIP_TESTS=1
|
|
shift
|
|
elif [ "$1" == "--skip-build" ]; then
|
|
SKIP_BUILD=1
|
|
shift
|
|
elif [ "$1" == "--skip-package" ]; then
|
|
SKIP_PACKAGE=1
|
|
shift
|
|
else
|
|
break
|
|
fi
|
|
done
|
|
|
|
if [ "$1" != "" ]; then
|
|
MODE="$1"
|
|
shift
|
|
fi
|
|
|
|
if [ ! -f UDK/UDK.ready ]; then
|
|
rm -rf UDK
|
|
|
|
sym=$(find . -not -type d -exec file "{}" ";" | grep CRLF)
|
|
if [ "${sym}" != "" ]; then
|
|
echo "Repository CRLF line endings"
|
|
exit 1
|
|
fi
|
|
fi
|
|
|
|
updaterepo "https://github.com/acidanthera/audk" UDK master || exit 1
|
|
cd UDK
|
|
updaterepo "https://github.com/acidanthera/EfiPkg" EfiPkg master || exit 1
|
|
updaterepo "https://github.com/acidanthera/OcSupportPkg" OcSupportPkg master || exit 1
|
|
updaterepo "https://github.com/acidanthera/MacInfoPkg" MacInfoPkg master || exit 1
|
|
|
|
if [ ! -d OpenCorePkg ]; then
|
|
ln -s .. OpenCorePkg || exit 1
|
|
fi
|
|
|
|
source edksetup.sh || exit 1
|
|
|
|
if [ "$SKIP_TESTS" != "1" ]; then
|
|
make -C BaseTools || exit 1
|
|
touch UDK.ready
|
|
fi
|
|
|
|
if [ "$SKIP_BUILD" != "1" ]; then
|
|
if [ "$MODE" = "" ] || [ "$MODE" = "DEBUG" ]; then
|
|
build -a X64 -b DEBUG -t XCODE5 -p OpenCorePkg/OpenCorePkg.dsc || exit 1
|
|
fi
|
|
|
|
if [ "$MODE" = "" ] || [ "$MODE" = "DEBUG" ]; then
|
|
build -a X64 -b NOOPT -t XCODE5 -p OpenCorePkg/OpenCorePkg.dsc || exit 1
|
|
fi
|
|
|
|
if [ "$MODE" = "" ] || [ "$MODE" = "RELEASE" ]; then
|
|
build -a X64 -b RELEASE -t XCODE5 -p OpenCorePkg/OpenCorePkg.dsc || exit 1
|
|
fi
|
|
fi
|
|
|
|
cd .. || exit 1
|
|
|
|
if [ "$SKIP_PACKAGE" != "1" ]; then
|
|
if [ "$PACKAGE" = "" ] || [ "$PACKAGE" = "DEBUG" ]; then
|
|
package "Binaries/DEBUG" "DEBUG" || exit 1
|
|
fi
|
|
|
|
if [ "$PACKAGE" = "" ] || [ "$PACKAGE" = "RELEASE" ]; then
|
|
package "Binaries/RELEASE" "RELEASE" || exit 1
|
|
fi
|
|
fi
|