aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--BUILD.gn124
-rw-r--r--gn/codesign_ios.py (renamed from gn/package_ios.py)28
-rw-r--r--gn/gen_plist_ios.py29
-rw-r--r--gn/toolchain/BUILD.gn12
-rw-r--r--infra/bots/ios_bin.isolate2
-rw-r--r--infra/bots/recipe_modules/flavor/examples/full.expected/Test-iOS-Clang-iPadPro-GPU-GT7800-arm64-Debug-All.json32
-rw-r--r--infra/bots/recipe_modules/flavor/ios_flavor.py11
-rw-r--r--infra/bots/recipes/compile.expected/Build-Mac-Clang-arm64-Debug-iOS.json36
-rw-r--r--infra/bots/recipes/compile.expected/Build-Mac-Clang-x64-Release-iOS.json36
-rw-r--r--site/user/build.md12
10 files changed, 154 insertions, 168 deletions
diff --git a/BUILD.gn b/BUILD.gn
index 439f0a80a2..f37f4c6552 100644
--- a/BUILD.gn
+++ b/BUILD.gn
@@ -959,37 +959,117 @@ if (skia_enable_tools) {
}
template("test_app") {
- if (defined(invoker.is_shared_library) && invoker.is_shared_library) {
- shared_library("lib" + target_name) {
- forward_variables_from(invoker, "*", [ "is_shared_library" ])
- configs += [ ":skia_private" ]
- testonly = true
+ if (is_ios) {
+ app_name = target_name
+ gen_path = target_gen_dir
+
+ action("${app_name}_generate_info_plist") {
+ script = "//gn/gen_plist_ios.py"
+ outputs = [
+ "$gen_path/${app_name}_Info.plist",
+ ]
+ args = [ rebase_path("$gen_path/$app_name", root_build_dir) ]
}
- } else {
- _executable = target_name
- executable(_executable) {
- forward_variables_from(invoker, "*", [ "is_shared_library" ])
+
+ bundle_data("${app_name}_bundle_info_plist") {
+ public_deps = [
+ ":${app_name}_generate_info_plist",
+ ]
+ sources = [
+ "$gen_path/${app_name}_Info.plist",
+ ]
+ outputs = [
+ "{{bundle_root_dir}}/Info.plist",
+ ]
+ }
+
+ executable("${app_name}_generate_executable") {
+ forward_variables_from(invoker,
+ "*",
+ [
+ "output_name",
+ "visibility",
+ "is_shared_library",
+ ])
configs += [ ":skia_private" ]
testonly = true
+ output_name = rebase_path("$gen_path/$app_name", root_build_dir)
}
- }
- if (is_android && skia_android_serial != "" && defined(_executable)) {
- action("push_" + target_name) {
- script = "gn/push_to_android.py"
- deps = [
- ":" + _executable,
+
+ bundle_data("${app_name}_bundle_executable") {
+ public_deps = [
+ ":${app_name}_generate_executable",
]
- _stamp = "$target_gen_dir/$_executable.pushed_$skia_android_serial"
- outputs = [
- _stamp,
+ sources = [
+ "$gen_path/$app_name",
]
- args = [
- rebase_path("$root_build_dir/$_executable"),
- skia_android_serial,
- rebase_path(_stamp),
+ outputs = [
+ "{{bundle_executable_dir}}/$app_name",
]
testonly = true
}
+
+ create_bundle("$app_name") {
+ product_type = "com.apple.product-type.application"
+ testonly = true
+
+ bundle_root_dir = "${root_build_dir}/${target_name}.app"
+ bundle_resources_dir = bundle_root_dir
+ bundle_executable_dir = bundle_root_dir
+ bundle_plugins_dir = bundle_root_dir + "/Plugins"
+
+ deps = [
+ ":${app_name}_bundle_executable",
+ ":${app_name}_bundle_info_plist",
+ ]
+
+ # should only code sign when running on a device, not the simulator
+ if (target_cpu != "x64") {
+ code_signing_script = "//gn/codesign_ios.py"
+ code_signing_sources = [ "$target_gen_dir/$app_name" ]
+ code_signing_outputs = [
+ "$bundle_root_dir/_CodeSignature/CodeResources",
+ "$bundle_root_dir/embedded.mobileprovision",
+ ]
+ code_signing_args =
+ [ rebase_path("$bundle_root_dir", root_build_dir) ]
+ }
+ }
+ } else {
+ # !is_ios
+
+ if (defined(invoker.is_shared_library) && invoker.is_shared_library) {
+ shared_library("lib" + target_name) {
+ forward_variables_from(invoker, "*", [ "is_shared_library" ])
+ configs += [ ":skia_private" ]
+ testonly = true
+ }
+ } else {
+ _executable = target_name
+ executable(_executable) {
+ forward_variables_from(invoker, "*", [ "is_shared_library" ])
+ configs += [ ":skia_private" ]
+ testonly = true
+ }
+ }
+ if (is_android && skia_android_serial != "" && defined(_executable)) {
+ action("push_" + target_name) {
+ script = "gn/push_to_android.py"
+ deps = [
+ ":" + _executable,
+ ]
+ _stamp = "$target_gen_dir/$_executable.pushed_$skia_android_serial"
+ outputs = [
+ _stamp,
+ ]
+ args = [
+ rebase_path("$root_build_dir/$_executable"),
+ skia_android_serial,
+ rebase_path(_stamp),
+ ]
+ testonly = true
+ }
+ }
}
}
diff --git a/gn/package_ios.py b/gn/codesign_ios.py
index eb07fc703b..66a97d39ee 100644
--- a/gn/package_ios.py
+++ b/gn/codesign_ios.py
@@ -14,8 +14,9 @@ import sys
import tempfile
# Arguments to the script:
-# app path to binary to package, e.g. out/Debug/dm
-app, = sys.argv[1:]
+# pkg path to application directory, e.g. out/Debug/dm.app
+# executable and plist should already be in this directory
+pkg, = sys.argv[1:]
# Find the Google signing identity.
identity = None
@@ -34,35 +35,18 @@ for p in glob.glob(os.path.join(os.environ['HOME'], 'Library', 'MobileDevice',
mobileprovision = p
assert mobileprovision
-out, app = os.path.split(app)
-
-pkg = os.path.join(out, app + '.app')
-if not os.path.exists(pkg):
- os.mkdir(pkg)
-
-# The binary and .mobileprovision just get copied into the package.
-shutil.copy(os.path.join(out, app), pkg)
+# The .mobileprovision just gets copied into the package.
shutil.copy(mobileprovision,
os.path.join(pkg, 'embedded.mobileprovision'))
-# Write a minimal Info.plist to name the package and point at the binary.
-with open(os.path.join(pkg, 'Info.plist'), 'w') as f:
- f.write('''
-<plist version="1.0">
- <dict>
- <key>CFBundleExecutable</key> <string>{app}</string>
- <key>CFBundleIdentifier</key> <string>com.google.{app}</string>
- <key>CFBundlePackageType</key> <string>APPL</string>
- </dict>
-</plist>
-'''.format(app=app))
-
# Extract the appliciation identitifer prefix from the .mobileprovision.
m = re.search(r'''<key>ApplicationIdentifierPrefix</key>
\t<array>
\t<string>(.*)</string>''', open(mobileprovision).read(), re.MULTILINE)
prefix = m.group(1)
+app, _ = os.path.splitext(os.path.basename(pkg))
+
# Write a minimal entitlements file, then codesign.
with tempfile.NamedTemporaryFile() as f:
f.write('''
diff --git a/gn/gen_plist_ios.py b/gn/gen_plist_ios.py
new file mode 100644
index 0000000000..e4041be388
--- /dev/null
+++ b/gn/gen_plist_ios.py
@@ -0,0 +1,29 @@
+#!/usr/bin/env python2.7
+#
+# Copyright 2017 Google Inc.
+#
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+import os
+import sys
+
+# Arguments to the script:
+# app path to binary to package, e.g. out/Debug/gen/dm
+app, = sys.argv[1:]
+
+out, app = os.path.split(app)
+
+# Write a minimal Info.plist to name the package and point at the binary.
+with open(os.path.join(out, app + '_Info.plist'), 'w') as f:
+ f.write('''
+<plist version="1.0">
+ <dict>
+ <key>CFBundleVersion</key> <string>0.1.0</string>
+ <key>CFBundleShortVersionString</key> <string>0.1.0</string>
+ <key>CFBundleExecutable</key> <string>{app}</string>
+ <key>CFBundleIdentifier</key> <string>com.google.{app}</string>
+ <key>CFBundlePackageType</key> <string>APPL</string>
+ </dict>
+</plist>
+'''.format(app=app))
diff --git a/gn/toolchain/BUILD.gn b/gn/toolchain/BUILD.gn
index 13c8397032..59d83e43d7 100644
--- a/gn/toolchain/BUILD.gn
+++ b/gn/toolchain/BUILD.gn
@@ -283,6 +283,18 @@ template("gcc_like_toolchain") {
description = "copy {{source}} {{output}}"
}
+ tool("copy_bundle_data") {
+ cp_py = rebase_path("../cp.py")
+ command = "$python $cp_py {{source}} {{output}}"
+ description = "copy_bundle_data {{source}} {{output}}"
+ }
+
+ # We don't currently have any xcasset files so make this a NOP
+ tool("compile_xcassets") {
+ command = "true"
+ description = "compile_xcassets {{output}}"
+ }
+
toolchain_args = {
current_cpu = invoker.cpu
current_os = invoker.os
diff --git a/infra/bots/ios_bin.isolate b/infra/bots/ios_bin.isolate
index 1994eb6e4a..1f81c64359 100644
--- a/infra/bots/ios_bin.isolate
+++ b/infra/bots/ios_bin.isolate
@@ -4,7 +4,6 @@
'variables': {
'files': [
'../../platform_tools/ios/bin/',
- '../../gn/package_ios.py',
],
},
}],
@@ -12,7 +11,6 @@
'variables': {
'files': [
'../../platform_tools/ios/bin/',
- '../../gn/package_ios.py',
],
},
}],
diff --git a/infra/bots/recipe_modules/flavor/examples/full.expected/Test-iOS-Clang-iPadPro-GPU-GT7800-arm64-Debug-All.json b/infra/bots/recipe_modules/flavor/examples/full.expected/Test-iOS-Clang-iPadPro-GPU-GT7800-arm64-Debug-All.json
index d5cb9776fa..f30c8c2da8 100644
--- a/infra/bots/recipe_modules/flavor/examples/full.expected/Test-iOS-Clang-iPadPro-GPU-GT7800-arm64-Debug-All.json
+++ b/infra/bots/recipe_modules/flavor/examples/full.expected/Test-iOS-Clang-iPadPro-GPU-GT7800-arm64-Debug-All.json
@@ -50,38 +50,6 @@
},
{
"cmd": [
- "python",
- "-u",
- "[START_DIR]/skia/gn/package_ios.py",
- "[START_DIR]/out/Debug/dm"
- ],
- "env": {
- "BUILDTYPE": "Debug",
- "CHROME_HEADLESS": "1",
- "PATH": "<PATH>:RECIPE_PACKAGE_REPO[depot_tools]",
- "SKIA_OUT": "[START_DIR]/out"
- },
- "infra_step": true,
- "name": "package dm"
- },
- {
- "cmd": [
- "python",
- "-u",
- "[START_DIR]/skia/gn/package_ios.py",
- "[START_DIR]/out/Debug/nanobench"
- ],
- "env": {
- "BUILDTYPE": "Debug",
- "CHROME_HEADLESS": "1",
- "PATH": "<PATH>:RECIPE_PACKAGE_REPO[depot_tools]",
- "SKIA_OUT": "[START_DIR]/out"
- },
- "infra_step": true,
- "name": "package nanobench"
- },
- {
- "cmd": [
"[START_DIR]/skia/platform_tools/ios/bin/ios_push_file",
"file.txt",
"file.txt"
diff --git a/infra/bots/recipe_modules/flavor/ios_flavor.py b/infra/bots/recipe_modules/flavor/ios_flavor.py
index cc6143ac41..4cb91a53ef 100644
--- a/infra/bots/recipe_modules/flavor/ios_flavor.py
+++ b/infra/bots/recipe_modules/flavor/ios_flavor.py
@@ -33,17 +33,6 @@ class iOSFlavorUtils(gn_flavor.GNFlavorUtils):
svg_dir='svgs',
tmp_dir='tmp')
- def compile(self, unused_target, **kwargs):
- """ Build Skia with GN and sign the iOS apps"""
- # Use the generic compile sets.
- super(iOSFlavorUtils, self).compile(unused_target, **kwargs)
-
- # Sign the apps.
- for app in ['dm', 'nanobench']:
- self._py('package ' + app,
- self.m.vars.skia_dir.join('gn', 'package_ios.py'),
- args=[self.out_dir.join(app)], infra_step=True)
-
def step(self, name, cmd, env=None, **kwargs):
bundle_id = 'com.google.%s' % cmd[0]
self.m.run(self.m.step, name,
diff --git a/infra/bots/recipes/compile.expected/Build-Mac-Clang-arm64-Debug-iOS.json b/infra/bots/recipes/compile.expected/Build-Mac-Clang-arm64-Debug-iOS.json
index 26ca4ac9f8..2c548142cd 100644
--- a/infra/bots/recipes/compile.expected/Build-Mac-Clang-arm64-Debug-iOS.json
+++ b/infra/bots/recipes/compile.expected/Build-Mac-Clang-arm64-Debug-iOS.json
@@ -150,42 +150,6 @@
"cmd": [
"python",
"-u",
- "[CUSTOM_/_B_WORK]/skia/gn/package_ios.py",
- "[CUSTOM_/_B_WORK]/skia/out/Build-Mac-Clang-arm64-Debug-iOS/Debug/dm"
- ],
- "env": {
- "BUILDTYPE": "Debug",
- "CC": "/usr/bin/clang",
- "CHROME_HEADLESS": "1",
- "CXX": "/usr/bin/clang++",
- "PATH": "<PATH>:RECIPE_PACKAGE_REPO[depot_tools]",
- "SKIA_OUT": "[CUSTOM_/_B_WORK]/skia/out/Build-Mac-Clang-arm64-Debug-iOS"
- },
- "infra_step": true,
- "name": "package dm"
- },
- {
- "cmd": [
- "python",
- "-u",
- "[CUSTOM_/_B_WORK]/skia/gn/package_ios.py",
- "[CUSTOM_/_B_WORK]/skia/out/Build-Mac-Clang-arm64-Debug-iOS/Debug/nanobench"
- ],
- "env": {
- "BUILDTYPE": "Debug",
- "CC": "/usr/bin/clang",
- "CHROME_HEADLESS": "1",
- "CXX": "/usr/bin/clang++",
- "PATH": "<PATH>:RECIPE_PACKAGE_REPO[depot_tools]",
- "SKIA_OUT": "[CUSTOM_/_B_WORK]/skia/out/Build-Mac-Clang-arm64-Debug-iOS"
- },
- "infra_step": true,
- "name": "package nanobench"
- },
- {
- "cmd": [
- "python",
- "-u",
"import errno\nimport glob\nimport os\nimport shutil\nimport sys\n\nsrc = sys.argv[1]\ndst = sys.argv[2]\nbuild_products_whitelist = ['dm', 'dm.exe', 'dm.app', 'nanobench.app', 'get_images_from_skps', 'get_images_from_skps.exe', 'nanobench', 'nanobench.exe', 'skpbench', '*.so', '*.dll', '*.dylib', 'skia_launcher', 'lib/*.so', 'vulkan-1.dll']\n\ntry:\n os.makedirs(dst)\nexcept OSError as e:\n if e.errno != errno.EEXIST:\n raise\n\nfor pattern in build_products_whitelist:\n path = os.path.join(src, pattern)\n for f in glob.glob(path):\n dst_path = os.path.join(dst, os.path.relpath(f, src))\n if not os.path.isdir(os.path.dirname(dst_path)):\n os.makedirs(os.path.dirname(dst_path))\n print 'Copying build product %s to %s' % (f, dst_path)\n shutil.move(f, dst_path)\n",
"[CUSTOM_/_B_WORK]/skia/out/Build-Mac-Clang-arm64-Debug-iOS/Debug",
"[CUSTOM_[SWARM_OUT_DIR]]/out/Debug"
diff --git a/infra/bots/recipes/compile.expected/Build-Mac-Clang-x64-Release-iOS.json b/infra/bots/recipes/compile.expected/Build-Mac-Clang-x64-Release-iOS.json
index e3adce1c29..29daf28874 100644
--- a/infra/bots/recipes/compile.expected/Build-Mac-Clang-x64-Release-iOS.json
+++ b/infra/bots/recipes/compile.expected/Build-Mac-Clang-x64-Release-iOS.json
@@ -150,42 +150,6 @@
"cmd": [
"python",
"-u",
- "[CUSTOM_/_B_WORK]/skia/gn/package_ios.py",
- "[CUSTOM_/_B_WORK]/skia/out/Build-Mac-Clang-x64-Release-iOS/Release/dm"
- ],
- "env": {
- "BUILDTYPE": "Release",
- "CC": "/usr/bin/clang",
- "CHROME_HEADLESS": "1",
- "CXX": "/usr/bin/clang++",
- "PATH": "<PATH>:RECIPE_PACKAGE_REPO[depot_tools]",
- "SKIA_OUT": "[CUSTOM_/_B_WORK]/skia/out/Build-Mac-Clang-x64-Release-iOS"
- },
- "infra_step": true,
- "name": "package dm"
- },
- {
- "cmd": [
- "python",
- "-u",
- "[CUSTOM_/_B_WORK]/skia/gn/package_ios.py",
- "[CUSTOM_/_B_WORK]/skia/out/Build-Mac-Clang-x64-Release-iOS/Release/nanobench"
- ],
- "env": {
- "BUILDTYPE": "Release",
- "CC": "/usr/bin/clang",
- "CHROME_HEADLESS": "1",
- "CXX": "/usr/bin/clang++",
- "PATH": "<PATH>:RECIPE_PACKAGE_REPO[depot_tools]",
- "SKIA_OUT": "[CUSTOM_/_B_WORK]/skia/out/Build-Mac-Clang-x64-Release-iOS"
- },
- "infra_step": true,
- "name": "package nanobench"
- },
- {
- "cmd": [
- "python",
- "-u",
"import errno\nimport glob\nimport os\nimport shutil\nimport sys\n\nsrc = sys.argv[1]\ndst = sys.argv[2]\nbuild_products_whitelist = ['dm', 'dm.exe', 'dm.app', 'nanobench.app', 'get_images_from_skps', 'get_images_from_skps.exe', 'nanobench', 'nanobench.exe', 'skpbench', '*.so', '*.dll', '*.dylib', 'skia_launcher', 'lib/*.so', 'vulkan-1.dll']\n\ntry:\n os.makedirs(dst)\nexcept OSError as e:\n if e.errno != errno.EEXIST:\n raise\n\nfor pattern in build_products_whitelist:\n path = os.path.join(src, pattern)\n for f in glob.glob(path):\n dst_path = os.path.join(dst, os.path.relpath(f, src))\n if not os.path.isdir(os.path.dirname(dst_path)):\n os.makedirs(os.path.dirname(dst_path))\n print 'Copying build product %s to %s' % (f, dst_path)\n shutil.move(f, dst_path)\n",
"[CUSTOM_/_B_WORK]/skia/out/Build-Mac-Clang-x64-Release-iOS/Release",
"[CUSTOM_[SWARM_OUT_DIR]]/out/Release"
diff --git a/site/user/build.md b/site/user/build.md
index 2715c2867a..a9114c53b7 100644
--- a/site/user/build.md
+++ b/site/user/build.md
@@ -207,17 +207,15 @@ This defaults to `target_cpu="arm64"`. Choosing `x64` targets the iOS simulator
bin/gn gen out/ios32 --args='target_os="ios" target_cpu="arm"'
bin/gn gen out/iossim --args='target_os="ios" target_cpu="x64"'
-Googlers who want to sign and run iOS test binaries can do so by running something like
+This will also package (and for devices, sign) iOS test binaries. For the moment a
+Google provisioning profile is needed to sign.
- python gn/package_ios.py out/Debug/dm
- python gn/package_ios.py out/Release/nanobench
-
-These commands will create and sign `dm.app` or `nanobench.app` packages you
-can push to iOS devices registered for Google development. `ios-deploy` makes
-installing and running these packages easy:
+For signed packages `ios-deploy` makes installing and running them on a device easy:
ios-deploy -b out/Debug/dm.app -d --args "--match foo"
+Alternatively you can generate an Xcode project by passing `--ide=xcode` to `bin/gn gen`.
+
If you find yourself missing a Google signing identity or provisioning profile,
you'll want to have a read through go/appledev.