build: pass the XNU architecture and iOS version to kernel builds

This commit is contained in:
bluseliu50 committed 2026-10-26 12:54:22 +08:00
1 parent 86c4f67378
commit 4453bb371a
3 files changed
+20 -6

No files matched your search

+5 -2
View File
@@ -2,6 +2,9 @@
set -euo pipefail
ROOT=$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)
cd "$ROOT"
# The kernel slice and deployment target follow the selected architecture and OS profiles.
ARCH=${UNIXNU_XNU_ARCH:-arm64}
IOS_VERSION=${UNIXNU_IOS_VERSION:-17.0}
if [ ! -d .cache/libdispatch-work/.git ]; then
git clone --shared refer/libdispatch .cache/libdispatch-work
fi
@@ -28,7 +31,7 @@ if [ "$(uname -s)" = Linux ]; then
FAKEROOT=$ROOT/.cache/fakeroot
WORK=.cache/libdispatch-work
mkdir -p build/firehose/obj "$FAKEROOT/usr/local/lib/kernel" "$FAKEROOT/usr/local/include/kernel/os"
xcrun --sdk iphoneos clang -target arm64-apple-ios17.0 -std=gnu11 -Os -g \
xcrun --sdk iphoneos clang -target "$ARCH-apple-ios$IOS_VERSION" -std=gnu11 -Os -g \
-mkernel -nostdinc -Wno-packed \
-DKERNEL=1 -DDISPATCH_USE_DTRACE=0 -DOS_ATOMIC_CONFIG_MEMORY_ORDER_DEPENDENCY=1 \
-DOS_ATOMIC_CONFIG_STARVATION_FREE_ONLY=0 \
@@ -45,7 +48,7 @@ if [ "$(uname -s)" = Linux ]; then
else
xcodebuild install -project .cache/libdispatch-work/libdispatch.xcodeproj \
-target libfirehose_kernel -configuration Release -sdk iphoneos -jobs "${JOBS:-4}" \
ARCHS=arm64 VALID_ARCHS=arm64 ONLY_ACTIVE_ARCH=NO IPHONEOS_DEPLOYMENT_TARGET=17.0 \
ARCHS="$ARCH" VALID_ARCHS="$ARCH" ONLY_ACTIVE_ARCH=NO IPHONEOS_DEPLOYMENT_TARGET="$IOS_VERSION" \
CODE_SIGNING_ALLOWED=NO GCC_TREAT_WARNINGS_AS_ERRORS=NO \
OBJROOT="$ROOT/build/firehose/obj" SYMROOT="$ROOT/build/firehose/sym" \
DSTROOT="$ROOT/.cache/fakeroot" FAKEROOT_DIR="$ROOT/.cache/fakeroot"
+12 -4
View File
@@ -12,6 +12,9 @@ XNU_VERSION=${UNIXNU_XNU_VERSION:-10063.141.1}
LIBPLATFORM_TAG=${UNIXNU_LIBPLATFORM_TAG:-libplatform-316.100.10}
LIBDISPATCH_TAG=${UNIXNU_LIBDISPATCH_TAG:-libdispatch-1477.100.9}
AVAILABILITY_TAG=${UNIXNU_AVAILABILITYVERSIONS_TAG:-AvailabilityVersions-141.1}
# The architecture and OS profiles select the kernel slice and the deployment target.
XNU_ARCH_STRING=${UNIXNU_XNU_ARCH:-arm64}
IOS_VERSION=${UNIXNU_IOS_VERSION:-17.0}
if [ ! -d refer/xnu/.git ]; then
git clone --depth 1 --branch "$XNU_TAG" https://github.com/apple-oss-distributions/xnu.git refer/xnu
fi
@@ -504,7 +507,12 @@ if { [ "$OWNER_CACHE_CARRIER" = 1 ] && [ "$OWNER_CACHE_STARTUP" != 1 ]; } ||
echo 'Owner carrier policy requires authenticated owner startup; wrong UUID is an isolated negative control' >&2
exit 1
fi
EXTRA_MAKE_ARGS+=("vm_unix.o_CFLAGS_ADD=-DXNU_OWNER_CACHE_CARRIER=$OWNER_CACHE_CARRIER -DXNU_OWNER_CACHE_CARRIER_WRONG_UUID=$OWNER_CACHE_CARRIER_WRONG_UUID")
# A command-line per-file flag replaces the source's own; keep its semantic types.
VM_UNIX_TYPES=
if grep -q FORCE_UNSAFE_TYPES .cache/xnu-work/bsd/conf/Makefile.template; then
VM_UNIX_TYPES=-DVM_UNSAFE_TYPES
fi
EXTRA_MAKE_ARGS+=("vm_unix.o_CFLAGS_ADD=$VM_UNIX_TYPES -DXNU_OWNER_CACHE_CARRIER=$OWNER_CACHE_CARRIER -DXNU_OWNER_CACHE_CARRIER_WRONG_UUID=$OWNER_CACHE_CARRIER_WRONG_UUID")
OWNER_CARRIER_STAMP=$ROOT/build/xnu/ios-obj/DEVELOPMENT_ARM64_BCM2837/.owner-cache-carrier-mode
if [ "$(cat "$OWNER_CARRIER_STAMP" 2>/dev/null || echo 0:0)" != "$OWNER_CACHE_CARRIER:$OWNER_CACHE_CARRIER_WRONG_UUID" ]; then
rm -f "$ROOT/build/xnu/ios-obj/DEVELOPMENT_ARM64_BCM2837/bsd/DEVELOPMENT/vm_unix.o"
@@ -796,10 +804,10 @@ PY
EXTRA_CFLAGS="$EXTRA_CFLAGS -DXNU_BOOT_PROGRESS=$BOOT_PROGRESS"
make -C .cache/xnu-work "${XNU_BUILD_TARGET:-build}" SDKROOT="${XNU_SDKROOT:-iphoneos}" ARCH_CONFIGS=ARM64 \
MACHINE_CONFIGS=BCM2837 KERNEL_CONFIGS=DEVELOPMENT \
ARCH_STRING_FOR_CURRENT_MACHINE_CONFIG=arm64 LARGE_MEMORY_DEFINE=-UARM_LARGE_MEMORY \
ARCH_STRING_FOR_CURRENT_MACHINE_CONFIG="$XNU_ARCH_STRING" LARGE_MEMORY_DEFINE=-UARM_LARGE_MEMORY \
ARM64_LINK_ADDR=0xfffffff007004000 ARM64_PLKSEG_ADDR=0xfffffff004004000 \
DEPLOYMENT_TARGET_FLAGS="-miphoneos-version-min=17.0 -DXNU_TARGET_OS_IOS" \
DEPLOYMENT_LINKER_FLAGS="-Wl,-ios_version_min,17.0" \
DEPLOYMENT_TARGET_FLAGS="-miphoneos-version-min=$IOS_VERSION -DXNU_TARGET_OS_IOS" \
DEPLOYMENT_LINKER_FLAGS="-Wl,-ios_version_min,$IOS_VERSION" \
RC_DARWIN_KERNEL_VERSION="$XNU_DARWIN" RC_ProjectSourceVersion="$XNU_VERSION" \
BUILD_LTO=0 BOUND_CHECKS=0 BUILD_WERROR="${XNU_BUILD_WERROR:-0}" MAKEJOBS=-j"${JOBS:-4}" \
CFLAGS_EXTRA="$EXTRA_CFLAGS" "${EXTRA_MAKE_ARGS[@]}" ${XNU_HOST_MAKE_ARGS[@]+"${XNU_HOST_MAKE_ARGS[@]}"} \
+3
View File
@@ -44,6 +44,9 @@ def version_env(modules, ctx=None):
env[variable] = profile[key]
if profile.get('xnu_version'):
env['UNIXNU_XNU_TAG'] = 'xnu-' + profile['xnu_version']
if profile.get('ios_version'):
env['UNIXNU_IOS_VERSION'] = profile['ios_version']
env['UNIXNU_XNU_ARCH'] = ctx.board.get('arch', {}).get('name', 'arm64')
return env