Skip to content
Permalink
Branch: master
Find file Copy path
Find file Copy path
3 contributors

Users who have contributed to this file

@PMheart @vit9696 @cattyhouse
executable file 199 lines (173 sloc) 5.83 KB
#!/bin/bash
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 "${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
You can’t perform that action at this time.