1 Star 0 Fork 27

szmoto / OpenCore_NO_ACPI

forked from btwise / OpenCore_NO_ACPI 
加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
build_oc_cn.tool 10.68 KB
一键复制 编辑 原始数据 按行查看 历史
btwise 提交于 2023-07-18 11:10 . update
#!/bin/bash
abort() {
echo "ERROR: $1!"
exit 1
}
buildutil() {
UTILS=(
"AppleEfiSignTool"
"ACPIe"
"EfiResTool"
"ext4read"
"LogoutHook"
"acdtinfo"
"disklabel"
"icnspack"
"macserial"
"ocpasswordgen"
"ocvalidate"
"TestBmf"
"TestCpuFrequency"
"TestDiskImage"
"TestHelloWorld"
"TestImg4"
"TestKextInject"
"TestMacho"
"TestMp3"
"TestExt4Dxe"
"TestFatDxe"
"TestNtfsDxe"
"TestPeCoff"
"TestProcessKernel"
"TestRsaPreprocess"
"TestSmbios"
)
if [ "$HAS_OPENSSL_BUILD" = "1" ]; then
UTILS+=("RsaTool")
fi
local cores
cores=$(getconf _NPROCESSORS_ONLN)
pushd "${selfdir}/Utilities" || exit 1
for util in "${UTILS[@]}"; do
cd "$util" || exit 1
echo "构建 ${util}..."
make clean || exit 1
make -j "$cores" &>/dev/null || exit 1
#
# FIXME: Do not build RsaTool for Win32 without OpenSSL.
#
if [ "$util" = "RsaTool" ] && [ "$HAS_OPENSSL_W32BUILD" != "1" ]; then
continue
fi
if [ "$(which i686-w64-mingw32-gcc)" != "" ]; then
echo "为windows构建 ${util}..."
UDK_ARCH=Ia32 CC=i686-w64-mingw32-gcc STRIP=i686-w64-mingw32-strip DIST=Windows make clean || exit 1
UDK_ARCH=Ia32 CC=i686-w64-mingw32-gcc STRIP=i686-w64-mingw32-strip DIST=Windows make -j "$cores" || exit 1
fi
if [ "$(which x86_64-linux-musl-gcc)" != "" ]; then
echo "Building ${util} for Linux..."
STATIC=1 SUFFIX=.linux UDK_ARCH=X64 CC=x86_64-linux-musl-gcc STRIP=x86_64-linux-musl-strip DIST=Linux make clean || exit 1
STATIC=1 SUFFIX=.linux UDK_ARCH=X64 CC=x86_64-linux-musl-gcc STRIP=x86_64-linux-musl-strip DIST=Linux make -j "$cores" || exit 1
fi
cd - || exit 1
done
popd || exit
}
get_inf_version() {
VER="VERSION_STRING"
if [ ! -f "${1}" ]; then
echo "缺少 .inf 文件 ${1}" > /dev/stderr
exit 1
fi
ver_line=$(grep -E "${VER} *=" "${1}")
if [ "${ver_line}" = "" ] ; then
echo "在 ${1} 里缺少 ${VER}" > /dev/stderr
exit 1
fi
read -ra ver_array <<<"${ver_line}"
if [ "${ver_array[0]}" != "${VER}" ] ||
[ "${ver_array[1]}" != "=" ] ||
[ "${ver_array[2]}" = "" ] ; then
echo "${1}${VER}行格式错误" > /dev/stderr
exit 1
fi
echo "${ver_array[2]}"
}
package() {
if [ ! -d "$1" ]; then
echo "丢失包目录$1"
exit 1
fi
local ver
ver=$(grep OPEN_CORE_VERSION ./Include/Acidanthera/Library/OcMainLib.h | sed 's/.*"\(.*\)".*/\1/' | grep -E '^[0-9.]+$')
if [ "$ver" = "" ]; then
echo "无效版本 $ver"
ver="UNKNOWN"
fi
selfdir=$(pwd)
pushd "$1" || exit 1
rm -rf tmp || exit 1
dirs=(
"tmp/Docs/AcpiSamples"
"tmp/Utilities"
)
for dir in "${dirs[@]}"; do
mkdir -p "${dir}" || exit 1
done
efidirs=(
"EFI/BOOT"
"EFI/OC/ACPI"
"EFI/OC/Drivers"
"EFI/OC/Kexts"
"EFI/OC/Tools"
"EFI/OC/Resources/Audio"
"EFI/OC/Resources/Font"
"EFI/OC/Resources/Image"
"EFI/OC/Resources/Label"
)
# Switch to parent architecture directory (i.e. Build/X64 -> Build).
local dstdir
dstdir="$(pwd)/tmp"
pushd .. || exit 1
for arch in "${ARCHS[@]}"; do
for dir in "${efidirs[@]}"; do
mkdir -p "${dstdir}/${arch}/${dir}" || exit 1
done
# copy OpenCore main program.
cp "${arch}/OpenCore.efi" "${dstdir}/${arch}/EFI/OC" || exit 1
printf "%s" "OpenCore" > "${dstdir}/${arch}/EFI/OC/.contentFlavour" || exit 1
printf "%s" "Disabled" > "${dstdir}/${arch}/EFI/OC/.contentVisibility" || exit 1
local suffix="${arch}"
if [ "${suffix}" = "X64" ]; then
suffix="x64"
fi
cp "${arch}/Bootstrap.efi" "${dstdir}/${arch}/EFI/BOOT/BOOT${suffix}.efi" || exit 1
printf "%s" "OpenCore" > "${dstdir}/${arch}/EFI/BOOT/.contentFlavour" || exit 1
printf "%s" "Disabled" > "${dstdir}/${arch}/EFI/BOOT/.contentVisibility" || exit 1
efiTools=(
"BootKicker.efi"
"ChipTune.efi"
"CleanNvram.efi"
"CsrUtil.efi"
"FontTester.efi"
"GopStop.efi"
"KeyTester.efi"
"ListPartitions.efi"
"MmapDump.efi"
"ResetSystem.efi"
"RtcRw.efi"
"TpmInfo.efi"
"OpenControl.efi"
"ControlMsrE2.efi"
)
for efiTool in "${efiTools[@]}"; do
cp "${arch}/${efiTool}" "${dstdir}/${arch}/EFI/OC/Tools"/ || exit 1
done
# Special case: OpenShell.efi
cp "${arch}/Shell.efi" "${dstdir}/${arch}/EFI/OC/Tools/OpenShell.efi" || exit 1
cp -r "${selfdir}/Resources/" "${dstdir}/${arch}/EFI/OC/Resources"/ || exit 1
efiDrivers=(
"ArpDxe.efi"
"AudioDxe.efi"
"BiosVideo.efi"
"CrScreenshotDxe.efi"
"Dhcp4Dxe.efi"
"DnsDxe.efi"
"DpcDxe.efi"
"Ext4Dxe.efi"
"HiiDatabase.efi"
"HttpBootDxe.efi"
"HttpDxe.efi"
"HttpUtilitiesDxe.efi"
"Ip4Dxe.efi"
"MnpDxe.efi"
"NvmExpressDxe.efi"
"OpenCanopy.efi"
"OpenHfsPlus.efi"
"OpenLinuxBoot.efi"
"OpenNtfsDxe.efi"
"OpenPartitionDxe.efi"
"OpenRuntime.efi"
"OpenUsbKbDxe.efi"
"OpenVariableRuntimeDxe.efi"
"Ps2KeyboardDxe.efi"
"Ps2MouseDxe.efi"
"ResetNvramEntry.efi"
"SnpDxe.efi"
"TcpDxe.efi"
"ToggleSipEntry.efi"
"Udp4Dxe.efi"
"UsbMouseDxe.efi"
"XhciDxe.efi"
)
for efiDriver in "${efiDrivers[@]}"; do
cp "${arch}/${efiDriver}" "${dstdir}/${arch}/EFI/OC/Drivers"/ || exit 1
done
done
docs=(
"Configuration.pdf"
"Differences/Differences.pdf"
"Sample.plist"
"SampleCustom.plist"
)
for doc in "${docs[@]}"; do
cp "${selfdir}/Docs/${doc}" "${dstdir}/Docs"/ || exit 1
done
cp "${selfdir}/Changelog.md" "${dstdir}/Docs"/ || exit 1
cp -r "${selfdir}/Docs/AcpiSamples/"* "${dstdir}/Docs/AcpiSamples"/ || exit 1
mkdir -p "${dstdir}/Docs/AcpiSamples/Binaries" || exit 1
cd "${dstdir}/Docs/AcpiSamples/Source" || exit 1
for i in *.dsl ; do
echo "编译dsl为aml文件......"
iasl -va "$i" >/dev/null || exit 1
done
mv ./*.aml "${dstdir}/Docs/AcpiSamples/Binaries" || exit 1
cd - || exit 1
utilScpts=(
"LegacyBoot"
"CreateVault"
"FindSerialPort"
"macrecovery"
"kpdescribe"
"ShimToCert"
)
for utilScpt in "${utilScpts[@]}"; do
cp -r "${selfdir}/Utilities/${utilScpt}" "${dstdir}/Utilities"/ || exit 1
done
buildutil || exit 1
# Copy LogoutHook.
mkdir -p "${dstdir}/Utilities/LogoutHook" || exit 1
logoutFiles=(
"Launchd.command"
"Launchd.command.plist"
"README.md"
"nvramdump"
)
for file in "${logoutFiles[@]}"; do
cp "${selfdir}/Utilities/LogoutHook/${file}" "${dstdir}/Utilities/LogoutHook"/ || exit 1
done
# Copy OpenDuetPkg booter.
for arch in "${ARCHS[@]}"; do
local tgt
local booter
tgt="$(basename "$(pwd)")"
booter="$(pwd)/../../OpenDuetPkg/${tgt}/${arch}/boot"
if [ -f "${booter}" ]; then
echo "从 ${booter} 拷贝OpenDuetPkg启动文件..."
cp "${booter}" "${dstdir}/Utilities/LegacyBoot/boot${arch}" || exit 1
else
echo "在${booter}找不到OpenDuetPkg!"
fi
done
# Copy EFI-era Mac GOP firmware driver.
eg_ver=$(get_inf_version "${selfdir}/Staging/EnableGop/EnableGop.inf") || exit 1
egdirect_ver=$(get_inf_version "${selfdir}/Staging/EnableGop/EnableGopDirect.inf") || exit 1
if [ "${eg_ver}" != "${egdirect_ver}" ] ; then
echo "不匹配的EnableGop版本 (${eg_ver}${egdirect_ver})!"
exit 1
fi
mkdir -p "${dstdir}/Utilities/EnableGop/Pre-release" || exit 1
ENABLE_GOP_GUID="3FBA58B1-F8C0-41BC-ACD8-253043A3A17F"
ffsNames=(
"EnableGop"
"EnableGopDirect"
)
for ffsName in "${ffsNames[@]}"; do
cp "FV/Ffs/${ENABLE_GOP_GUID}${ffsName}/${ENABLE_GOP_GUID}.ffs" "${dstdir}/Utilities/EnableGop/Pre-release/${ffsName}_${eg_ver}.ffs" || exit 1
done
gopDrivers=(
"EnableGop"
"EnableGopDirect"
)
for file in "${gopDrivers[@]}"; do
cp "X64/${file}.efi" "${dstdir}/Utilities/EnableGop/Pre-release/${file}_${eg_ver}.efi" || exit 1
done
helpFiles=(
"README.md"
"UEFITool_Inserted_Screenshot.png"
"vBiosInsert.sh"
)
for file in "${helpFiles[@]}"; do
cp "${selfdir}/Staging/EnableGop/${file}" "${dstdir}/Utilities/EnableGop"/ || exit 1
done
cp "${selfdir}/Staging/EnableGop/Release/"* "${dstdir}/Utilities/EnableGop"/ || exit 1
# Provide EDK-II BaseTools.
mkdir "${dstdir}/Utilities/BaseTools" || exit 1
if [ "$(unamer)" = "Windows" ]; then
cp "${selfdir}/UDK/BaseTools/Bin/Win32/EfiRom.exe" "${dstdir}/Utilities/BaseTools" || exit 1
cp "${selfdir}/UDK/BaseTools/Bin/Win32/GenFfs.exe" "${dstdir}/Utilities/BaseTools" || exit 1
else
cp "${selfdir}/UDK/BaseTools/Source/C/bin/EfiRom" "${dstdir}/Utilities/BaseTools" || exit 1
cp "${selfdir}/UDK/BaseTools/Source/C/bin/GenFfs" "${dstdir}/Utilities/BaseTools" || exit 1
fi
utils=(
"ACPIe"
"acdtinfo"
"macserial"
"ocpasswordgen"
"ocvalidate"
"disklabel"
"icnspack"
)
for util in "${utils[@]}"; do
dest="${dstdir}/Utilities/${util}"
mkdir -p "${dest}" || exit 1
bin="${selfdir}/Utilities/${util}/${util}"
cp "${bin}" "${dest}" || exit 1
if [ -f "${bin}.exe" ]; then
cp "${bin}.exe" "${dest}" || exit 1
fi
if [ -f "${bin}.linux" ]; then
cp "${bin}.linux" "${dest}" || exit 1
fi
done
# additional docs for macserial.
cp "${selfdir}/Utilities/macserial/FORMAT.md" "${dstdir}/Utilities/macserial"/ || exit 1
cp "${selfdir}/Utilities/macserial/README.md" "${dstdir}/Utilities/macserial"/ || exit 1
# additional docs for ocvalidate.
cp "${selfdir}/Utilities/ocvalidate/README.md" "${dstdir}/Utilities/ocvalidate"/ || exit 1
pushd "${dstdir}" || exit 1
zip -qr -FS ../"OpenCore-Mod-${ver}-${2}.zip" ./* || exit 1
popd || exit 1
rm -rf "${dstdir}" || exit 1
popd || exit 1
popd || exit 1
}
cd "$(dirname "$0")" || exit 1
if [ "$ARCHS" = "" ]; then
ARCHS=(X64)
export ARCHS
fi
SELFPKG=OpenCorePkg
NO_ARCHIVES=0
DISCARD_PACKAGES=OpenCorePkg
export SELFPKG
export NO_ARCHIVES
export DISCARD_PACKAGES
src=$(curl -Lfs https://gitee.com/btwise/ocbuild/raw/master/efibuild.sh) && eval "$src" || exit 1
cd Utilities/ocvalidate || exit 1
ocv_tool=""
if [ -x ./ocvalidate ]; then
ocv_tool=./ocvalidate
elif [ -x ./ocvalidate.exe ]; then
ocv_tool=./ocvalidate.exe
fi
if [ -x "$ocv_tool" ]; then
"$ocv_tool" ../../Docs/Sample.plist || abort "Sample.plist错误"
"$ocv_tool" ../../Docs/SampleCustom.plist || abort "SampleCustom.plist错误"
fi
cd ../..
cd Library/OcConfigurationLib || exit 1
echo "编译成功!"
echo "----------------------------------------------------------------"
echo "运行检查架构脚本......"
python3 ./CheckSchema.py OcConfigurationLib.c >/dev/null || abort "OccConfigurationLib.c错误"
echo "架构检查完成!"
echo "编译成功!" && open $BUILDDIR/Binaries
1
https://gitee.com/szmoto/OpenCore_NO_ACPI.git
git@gitee.com:szmoto/OpenCore_NO_ACPI.git
szmoto
OpenCore_NO_ACPI
OpenCore_NO_ACPI
master

搜索帮助