build: pass the XNU architecture and iOS version to kernel builds
This commit is contained in:
1 parent
86c4f67378
commit
4453bb371a
3 files changed
+20
-6
No files matched your search
@@ -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,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[@]}"} \
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
|
||||
Reference in new issue
Block a user