mirror of
https://github.com/godotengine/build-containers.git
synced 2026-01-05 22:10:22 +03:00
Apple: add visionOS and tvOS build support; unify build container
Remove `ios` image, superseded by `appleembedded`.
This commit is contained in:
committed by
Rémi Verschelde
parent
d41c1ccf02
commit
af9461918e
151
extract_xcode_sdks.sh
Normal file
151
extract_xcode_sdks.sh
Normal file
@@ -0,0 +1,151 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
set -euo pipefail
|
||||
|
||||
# Configurable variables (can be set via env)
|
||||
XCODE_APP_PATH="${XCODE_APP_PATH:-/root/xcode/Xcode.app}"
|
||||
XCODE_XIP_PATH="${XCODE_XIP_PATH:-/root/files/Xcode_${XCODE_SDKV}.xip}"
|
||||
EXTRACT_FROM_XIP="${EXTRACT_FROM_XIP:-1}"
|
||||
|
||||
OUT_DIR="${OUT_DIR:-/root/files}"
|
||||
|
||||
# SDK versions (should be set via env or Dockerfile)
|
||||
OSX_SDKV="${OSX_SDKV:-}"
|
||||
IOS_SDKV="${IOS_SDKV:-}"
|
||||
TVOS_SDKV="${TVOS_SDKV:-}"
|
||||
VISIONOS_SDKV="${VISIONOS_SDKV:-}"
|
||||
|
||||
# Which SDKs to extract (set to 1 to enable)
|
||||
# Note: These defaults are overridden below based on execution context
|
||||
|
||||
# Optionally extract Xcode.app from .xip if needed
|
||||
if [[ "$EXTRACT_FROM_XIP" == "1" ]]; then
|
||||
mkdir -p /root/xcode
|
||||
cd /root/xcode
|
||||
xar -xf "$XCODE_XIP_PATH"
|
||||
/root/pbzx/pbzx -n Content | cpio -i
|
||||
XCODE_APP_PATH="/root/xcode/Xcode.app"
|
||||
fi
|
||||
|
||||
if [[ "${EXTRACT_FROM_XIP:-1}" == "1" ]]; then
|
||||
EXTRACT_MACOS="${EXTRACT_MACOS:-1}"
|
||||
EXTRACT_IOS="${EXTRACT_IOS:-1}"
|
||||
EXTRACT_IOS_SIM="${EXTRACT_IOS_SIM:-1}"
|
||||
EXTRACT_TVOS="${EXTRACT_TVOS:-1}"
|
||||
EXTRACT_TVOS_SIM="${EXTRACT_TVOS_SIM:-1}"
|
||||
EXTRACT_VISIONOS="${EXTRACT_VISIONOS:-1}"
|
||||
EXTRACT_VISIONOS_SIM="${EXTRACT_VISIONOS_SIM:-1}"
|
||||
else
|
||||
# When called manually, require explicit SDK selection
|
||||
EXTRACT_MACOS="${EXTRACT_MACOS:-0}"
|
||||
EXTRACT_IOS="${EXTRACT_IOS:-0}"
|
||||
EXTRACT_IOS_SIM="${EXTRACT_IOS_SIM:-0}"
|
||||
EXTRACT_TVOS="${EXTRACT_TVOS:-0}"
|
||||
EXTRACT_TVOS_SIM="${EXTRACT_TVOS_SIM:-0}"
|
||||
EXTRACT_VISIONOS="${EXTRACT_VISIONOS:-0}"
|
||||
EXTRACT_VISIONOS_SIM="${EXTRACT_VISIONOS_SIM:-0}"
|
||||
fi
|
||||
|
||||
extract_and_pack() {
|
||||
local sdk_dir="$1"
|
||||
local sdk_name="$2"
|
||||
local versioned_name="$3"
|
||||
local tar_name="$4"
|
||||
|
||||
if [[ -d "$sdk_dir/$sdk_name" ]]; then
|
||||
|
||||
# Use tar to copy and preserve everything, then repackage
|
||||
echo "=== Copying SDK using tar to preserve special files ==="
|
||||
cd "$sdk_dir"
|
||||
tar -cf - "$sdk_name" | (cd "/tmp" && tar -xf -)
|
||||
|
||||
# Rename to versioned name
|
||||
mv "/tmp/$sdk_name" "/tmp/$versioned_name"
|
||||
|
||||
# Verify SDKSettings.json exists and has content
|
||||
if [[ -f "/tmp/$versioned_name/SDKSettings.json" ]]; then
|
||||
echo "=== SDKSettings.json found, size: $(wc -c < "/tmp/$versioned_name/SDKSettings.json") bytes ==="
|
||||
echo "=== MD5 check ==="
|
||||
echo "Source file MD5: $(md5sum "$sdk_dir/$sdk_name/SDKSettings.json" | cut -d' ' -f1)"
|
||||
echo "Copied file MD5: $(md5sum "/tmp/$versioned_name/SDKSettings.json" | cut -d' ' -f1)"
|
||||
else
|
||||
echo "⚠️ Warning: SDKSettings.json not found in extracted SDK"
|
||||
fi
|
||||
|
||||
# Create tar with versioned directory name
|
||||
tar -cJf "$OUT_DIR/$tar_name" -C "/tmp" "$versioned_name"
|
||||
|
||||
# Clean up temporary directory
|
||||
rm -rf "/tmp/$versioned_name"
|
||||
|
||||
echo "✓ Packed $tar_name"
|
||||
else
|
||||
echo "✗ SDK not found: $sdk_dir/$sdk_name"
|
||||
exit 1
|
||||
fi
|
||||
}
|
||||
|
||||
# macOS SDK
|
||||
if [[ "$EXTRACT_MACOS" == "1" ]]; then
|
||||
extract_and_pack \
|
||||
"$XCODE_APP_PATH/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs" \
|
||||
"MacOSX.sdk" \
|
||||
"MacOSX${OSX_SDKV}.sdk" \
|
||||
"MacOSX${OSX_SDKV}.sdk.tar.xz"
|
||||
fi
|
||||
|
||||
# iOS SDK
|
||||
if [[ "$EXTRACT_IOS" == "1" ]]; then
|
||||
extract_and_pack \
|
||||
"$XCODE_APP_PATH/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs" \
|
||||
"iPhoneOS.sdk" \
|
||||
"iPhoneOS${IOS_SDKV}.sdk" \
|
||||
"iPhoneOS${IOS_SDKV}.sdk.tar.xz"
|
||||
fi
|
||||
|
||||
# iOS Simulator SDK
|
||||
if [[ "$EXTRACT_IOS_SIM" == "1" ]]; then
|
||||
extract_and_pack \
|
||||
"$XCODE_APP_PATH/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs" \
|
||||
"iPhoneSimulator.sdk" \
|
||||
"iPhoneSimulator${IOS_SDKV}.sdk" \
|
||||
"iPhoneSimulator${IOS_SDKV}.sdk.tar.xz"
|
||||
fi
|
||||
|
||||
# tvOS SDK
|
||||
if [[ "$EXTRACT_TVOS" == "1" ]]; then
|
||||
extract_and_pack \
|
||||
"$XCODE_APP_PATH/Contents/Developer/Platforms/AppleTVOS.platform/Developer/SDKs" \
|
||||
"AppleTVOS.sdk" \
|
||||
"AppleTVOS${TVOS_SDKV}.sdk" \
|
||||
"AppleTVOS${TVOS_SDKV}.sdk.tar.xz"
|
||||
fi
|
||||
|
||||
# tvOS Simulator SDK
|
||||
if [[ "$EXTRACT_TVOS_SIM" == "1" ]]; then
|
||||
extract_and_pack \
|
||||
"$XCODE_APP_PATH/Contents/Developer/Platforms/AppleTVSimulator.platform/Developer/SDKs" \
|
||||
"AppleTVSimulator.sdk" \
|
||||
"AppleTVSimulator${TVOS_SDKV}.sdk" \
|
||||
"AppleTVSimulator${TVOS_SDKV}.sdk.tar.xz"
|
||||
fi
|
||||
|
||||
# visionOS SDK
|
||||
if [[ "$EXTRACT_VISIONOS" == "1" ]]; then
|
||||
extract_and_pack \
|
||||
"$XCODE_APP_PATH/Contents/Developer/Platforms/XROS.platform/Developer/SDKs" \
|
||||
"XROS.sdk" \
|
||||
"XROS${VISIONOS_SDKV}.sdk" \
|
||||
"XROS${VISIONOS_SDKV}.sdk.tar.xz"
|
||||
fi
|
||||
|
||||
# visionOS Simulator SDK
|
||||
if [[ "$EXTRACT_VISIONOS_SIM" == "1" ]]; then
|
||||
extract_and_pack \
|
||||
"$XCODE_APP_PATH/Contents/Developer/Platforms/XRSimulator.platform/Developer/SDKs" \
|
||||
"XRSimulator.sdk" \
|
||||
"XRSimulator${VISIONOS_SDKV}.sdk" \
|
||||
"XRSimulator${VISIONOS_SDKV}.sdk.tar.xz"
|
||||
fi
|
||||
|
||||
echo "Done extracting selected SDKs."
|
||||
Reference in New Issue
Block a user