From fe7c49fa519db0ec70832ca6910f3d803a568406 Mon Sep 17 00:00:00 2001 From: Oli Larkin Date: Thu, 7 Nov 2024 23:48:48 +0100 Subject: [PATCH] SKIA: Add iOS simulator build --- Dependencies/IGraphics/build-skia-ios.sh | 81 +++++++++++++++++------- Scripts/ci/build_deps.yml | 10 +++ common-ios.xcconfig | 5 +- 3 files changed, 73 insertions(+), 23 deletions(-) diff --git a/Dependencies/IGraphics/build-skia-ios.sh b/Dependencies/IGraphics/build-skia-ios.sh index 8dace92b96..58ec1d176c 100755 --- a/Dependencies/IGraphics/build-skia-ios.sh +++ b/Dependencies/IGraphics/build-skia-ios.sh @@ -11,8 +11,14 @@ DEPOT_TOOLS_PATH="$BASE_DIR/tmp/depot_tools" SKIA_SRC_DIR="$BASE_DIR/src/skia" TMP_DIR="$BASE_DIR/tmp/skia" IOS_LIB_DIR="$BASE_DIR/ios/lib" +IOS_SIM_LIB_DIR="$BASE_DIR/ios_sim/lib" +MIN_IOS_VERSION="14" -ERROR_MSG="Error: Please provide either 'arm64' or 'x86_64' as a single argument." +ERROR_MSG="Usage: $0 [-simulator] +Options: + -simulator Build for iOS simulator +Arguments: + Architecture: arm64 or x86_64" LIBS=( "libskia.a" @@ -41,8 +47,17 @@ sync_deps() { generate_build_files() { local arch=$1 local cpu_type=$2 + local is_simulator=$3 local output_dir="$TMP_DIR/$arch" + local simulator_arg="" + local min_version_flag="-miphoneos-version-min=$MIN_IOS_VERSION" + + if [ "$is_simulator" = true ]; then + simulator_arg="ios_use_simulator = true" + min_version_flag="-mios-simulator-version-min=$MIN_IOS_VERSION" + fi + ./bin/gn gen "$output_dir" --args=" is_official_build = true skia_use_system_libjpeg_turbo = false @@ -68,9 +83,10 @@ generate_build_files() { cxx = \"clang++\" target_os = \"ios\" target_cpu = \"$cpu_type\" - extra_cflags = [\"-miphoneos-version-min=13\", \"-I../../../src/skia/third_party/externals/expat/lib\"] + extra_cflags = [\"$min_version_flag\", \"-I../../../src/skia/third_party/externals/expat/lib\"] extra_cflags_c = [\"-Wno-error\"] extra_asmflags = [\"-fembed-bitcode\"] + $simulator_arg " } @@ -88,8 +104,15 @@ build_skia() { move_libs() { local arch=$1 + local is_simulator=$2 local src_dir="$TMP_DIR/$arch" - local dest_dir="$IOS_LIB_DIR/$arch" + local dest_dir + + if [ "$is_simulator" = true ]; then + dest_dir="$IOS_SIM_LIB_DIR/$arch" + else + dest_dir="$IOS_LIB_DIR/$arch" + fi mkdir -p "$dest_dir" @@ -104,33 +127,47 @@ move_libs() { } main() { - if [ "$#" -ne 1 ]; then + local is_simulator=false + + # Parse command line options + while [[ $# -gt 0 ]]; do + case "$1" in + -simulator) + is_simulator=true + shift + ;; + arm64|x86_64) + ARCH="$1" + case "$1" in + "x86_64") CPU_TYPE="x64" ;; + "arm64") CPU_TYPE="arm64" ;; + esac + shift + ;; + *) + echo "$ERROR_MSG" + exit 1 + ;; + esac + done + + # Verify we got an architecture + if [ -z "$ARCH" ]; then echo "$ERROR_MSG" exit 1 fi - case "$1" in - "x86_64") - ARCH="x86_64" - CPU_TYPE="x64" - ;; - "arm64") - ARCH="arm64" - CPU_TYPE="arm64" - ;; - *) - echo "$ERROR_MSG" - exit 1 - ;; - esac - setup_depot_tools sync_deps - generate_build_files "$ARCH" "$CPU_TYPE" + generate_build_files "$ARCH" "$CPU_TYPE" "$is_simulator" build_skia "$ARCH" - move_libs "$ARCH" + move_libs "$ARCH" "$is_simulator" - echo "Build completed successfully for $ARCH" + if [ "$is_simulator" = true ]; then + echo "Build completed successfully for $ARCH (iOS Simulator)" + else + echo "Build completed successfully for $ARCH (iOS Device)" + fi } main "$@" diff --git a/Scripts/ci/build_deps.yml b/Scripts/ci/build_deps.yml index 6f709e6ddb..3f9f2a2cf7 100644 --- a/Scripts/ci/build_deps.yml +++ b/Scripts/ci/build_deps.yml @@ -179,6 +179,16 @@ jobs: ./build-skia-ios.sh arm64 displayName: Build Skia (arm64) + - bash: | + cd ./Dependencies/IGraphics + ./build-skia-ios.sh x86_64 -simulator + displayName: Build Skia (x86_64 simulator) + + - bash: | + cd ./Dependencies/IGraphics + ./build-skia-ios.sh arm64 -simulator + displayName: Build Skia (arm64 simulator) + - bash: | cd ./Dependencies/Build ./../IGraphics/package-deps-src.sh diff --git a/common-ios.xcconfig b/common-ios.xcconfig index 0bfd1275f9..f6c0cc7a12 100644 --- a/common-ios.xcconfig +++ b/common-ios.xcconfig @@ -55,7 +55,10 @@ JSON_INC_PATH = $(DEPS_PATH)/Extras/nlohmann // this build setting is included at the xcode project level, since we need all these include paths IPLUG_INC_PATHS = $(PROJECT_ROOT) $(WDL_PATH) $(IPLUG_PATH) $(EXTRAS_INC_PATHS) $(AUv3_PATH) $(JSON_INC_PATH) -BUILT_LIBS_PATH = $(DEPS_PATH)/Build/ios +BUILT_LIBS_PATH_iphoneos = $(DEPS_PATH)/Build/ios +BUILT_LIBS_PATH_iphonesimulator = $(DEPS_PATH)/Build/ios_sim +BUILT_LIBS_PATH = $(BUILT_LIBS_PATH_$(PLATFORM_NAME)) + BUILT_LIBS_INC_PATH = $(BUILT_LIBS_PATH)/include BUILT_LIBS_LIB_PATH = $(BUILT_LIBS_PATH)/lib/$CURRENT_ARCH