Commit 14c289be authored by Ian Vollick's avatar Ian Vollick Committed by Commit Bot

Reland: Update build rules to support ARCore

In this change, I've moved the code in chrome_public_apk_tmpl from the
monochrome to he chrome template and ensured that apk_merger will pass.

> Define enable_arcore and add some build rules to use it.
>
> Bug: 833511
> Change-Id: I716123c2a282d7d123883df81ebbc00a0a883be8
> Reviewed-on: https://chromium-review.googlesource.com/1033580
> Commit-Queue: Ian Vollick <vollick@chromium.org>
> Reviewed-by: John Budorick <jbudorick@chromium.org>
> Reviewed-by: Eric Stevenson <estevenson@chromium.org>
> Reviewed-by: Yaron Friedman <yfriedman@chromium.org>
> Reviewed-by: Michael Thiessen <mthiesse@chromium.org>
> Reviewed-by: David Dorwin <ddorwin@chromium.org>
> Cr-Commit-Position: refs/heads/master@{#555174}

Cq-Include-Trybots: luci.chromium.try:android_optional_gpu_tests_rel;luci.chromium.try:linux_optional_gpu_tests_rel;luci.chromium.try:mac_optional_gpu_tests_rel;luci.chromium.try:win_optional_gpu_tests_rel;master.tryserver.chromium.linux:linux_vr
Change-Id: I155d420f3b6606642cdfea43db48840f2c21a0cb
Reviewed-on: https://chromium-review.googlesource.com/1040905Reviewed-by: default avatarTao Bai <michaelbai@chromium.org>
Reviewed-by: default avatarScott Violet <sky@chromium.org>
Reviewed-by: default avatarWill Harris <wfh@chromium.org>
Reviewed-by: default avatarBill Orr <billorr@chromium.org>
Reviewed-by: default avatarEric Stevenson <estevenson@chromium.org>
Reviewed-by: default avatarRichard Coles <torne@chromium.org>
Reviewed-by: default avatarYaron Friedman <yfriedman@chromium.org>
Commit-Queue: Ian Vollick <vollick@chromium.org>
Cr-Commit-Position: refs/heads/master@{#556200}
parent 93beb23d
...@@ -117,6 +117,11 @@ def CheckFilesExpected(actual_files, expected_files, component_build): ...@@ -117,6 +117,11 @@ def CheckFilesExpected(actual_files, expected_files, component_build):
duplicate_file_set = set( duplicate_file_set = set(
f for f, n in actual_file_names.iteritems() if n > 1) f for f, n in actual_file_names.iteritems() if n > 1)
# TODO(crbug.com/839191): Remove this once we're plumbing the lib correctly.
missing_file_set = set(
f for f in missing_file_set if not os.path.basename(f) ==
'libarcore_sdk_c_minimal.so')
errors = [] errors = []
if unexpected_file_set: if unexpected_file_set:
errors.append( errors.append(
...@@ -172,6 +177,16 @@ def MergeApk(args, tmp_apk, tmp_dir_32, tmp_dir_64): ...@@ -172,6 +177,16 @@ def MergeApk(args, tmp_apk, tmp_dir_32, tmp_dir_64):
if args.has_unwind_cfi: if args.has_unwind_cfi:
expected_files['unwind_cfi_32'] = False expected_files['unwind_cfi_32'] = False
# TODO(crbug.com/839191): we should pass this in via script arguments.
if not args.loadable_module_32:
args.loadable_module_32.append('libarcore_sdk_c_minimal.so')
for f in args.loadable_module_32:
expected_files[f] = not args.uncompress_shared_libraries
for f in args.loadable_module_64:
expected_files[f] = not args.uncompress_shared_libraries
# need to unpack APKs to compare their contents # need to unpack APKs to compare their contents
UnpackApk(args.apk_64bit, tmp_dir_64) UnpackApk(args.apk_64bit, tmp_dir_64)
UnpackApk(args.apk_32bit, tmp_dir_32) UnpackApk(args.apk_32bit, tmp_dir_32)
...@@ -195,8 +210,15 @@ def MergeApk(args, tmp_apk, tmp_dir_32, tmp_dir_64): ...@@ -195,8 +210,15 @@ def MergeApk(args, tmp_apk, tmp_dir_32, tmp_dir_64):
CheckFilesExpected(diff_files, expected_files, args.component_build) CheckFilesExpected(diff_files, expected_files, args.component_build)
with zipfile.ZipFile(tmp_apk, 'w') as out_zip: with zipfile.ZipFile(tmp_apk, 'w') as out_zip:
build_utils.MergeZips(out_zip, [args.apk_64bit], exclude_patterns = ['META-INF/*']
exclude_patterns=['META-INF/*'])
# If there are libraries for which we don't want the 32 bit versions, we
# should remove them here.
if args.loadable_module_32:
exclude_patterns.extend(['*' + f for f in args.loadable_module_32 if
f not in args.loadable_module_64])
build_utils.MergeZips(out_zip, [args.apk_64bit], exclude_patterns)
AddDiffFiles(diff_files, tmp_dir_32, out_zip, expected_files, AddDiffFiles(diff_files, tmp_dir_32, out_zip, expected_files,
args.component_build, args.uncompress_shared_libraries) args.component_build, args.uncompress_shared_libraries)
...@@ -224,6 +246,12 @@ def main(): ...@@ -224,6 +246,12 @@ def main():
parser.add_argument('--ignore-classes-dex', action='store_true') parser.add_argument('--ignore-classes-dex', action='store_true')
parser.add_argument('--has-unwind-cfi', action='store_true', parser.add_argument('--has-unwind-cfi', action='store_true',
help='Specifies if the 32-bit apk has unwind_cfi file') help='Specifies if the 32-bit apk has unwind_cfi file')
parser.add_argument('--loadable_module_32', action='append', default=[],
help='Use for each 32-bit library added via '
'loadable_modules')
parser.add_argument('--loadable_module_64', action='append', default=[],
help='Use for each 64-bit library added via '
'loadable_modules')
args = parser.parse_args() args = parser.parse_args()
if (args.zipalign_path is not None and if (args.zipalign_path is not None and
......
...@@ -27,8 +27,11 @@ def main(): ...@@ -27,8 +27,11 @@ def main():
parser.add_argument('apk', help='APK file path.') parser.add_argument('apk', help='APK file path.')
args = parser.parse_args() args = parser.parse_args()
#TODO(crbug.com/838414): add support for files included via loadable_modules.
ignored_libs = ['libarcore_sdk_c_minimal.so']
si_count = resource_sizes.AnalyzeStaticInitializers( si_count = resource_sizes.AnalyzeStaticInitializers(
args.apk, args.tool_prefix, False, '.') args.apk, args.tool_prefix, False, '.', ignored_libs)
if si_count != args.expected_count: if si_count != args.expected_count:
print 'Expected {} static initializers, but found {}.'.format( print 'Expected {} static initializers, but found {}.'.format(
args.expected_count, si_count) args.expected_count, si_count)
...@@ -40,7 +43,7 @@ def main(): ...@@ -40,7 +43,7 @@ def main():
print 'Dumping static initializers via dump-static-initializers.py:' print 'Dumping static initializers via dump-static-initializers.py:'
sys.stdout.flush() sys.stdout.flush()
resource_sizes.AnalyzeStaticInitializers( resource_sizes.AnalyzeStaticInitializers(
args.apk, args.tool_prefix, True, '.') args.apk, args.tool_prefix, True, '.', ignored_libs)
print print
print 'If the above list is not useful, consider listing them with:' print 'If the above list is not useful, consider listing them with:'
print ' //tools/binary_size/diagnose_bloat.py' print ' //tools/binary_size/diagnose_bloat.py'
......
...@@ -562,12 +562,14 @@ def _AnnotatePakResources(out_dir): ...@@ -562,12 +562,14 @@ def _AnnotatePakResources(out_dir):
# This method also used by //build/android/gyp/assert_static_initializers.py # This method also used by //build/android/gyp/assert_static_initializers.py
def AnalyzeStaticInitializers(apk_filename, tool_prefix, dump_sis, out_dir): def AnalyzeStaticInitializers(apk_filename, tool_prefix, dump_sis, out_dir,
ignored_libs):
# Static initializer counting mostly copies logic in # Static initializer counting mostly copies logic in
# infra/scripts/legacy/scripts/slave/chromium/sizes.py. # infra/scripts/legacy/scripts/slave/chromium/sizes.py.
with zipfile.ZipFile(apk_filename) as z: with zipfile.ZipFile(apk_filename) as z:
so_files = [f for f in z.infolist() so_files = [f for f in z.infolist()
if f.filename.endswith('.so') and f.file_size > 0] if f.filename.endswith('.so') and f.file_size > 0
and os.path.basename(f.filename) not in ignored_libs]
# Skip checking static initializers for 32 bit .so files when 64 bit .so files # Skip checking static initializers for 32 bit .so files when 64 bit .so files
# are present since the 32 bit versions will be checked by bots that only # are present since the 32 bit versions will be checked by bots that only
# build the 32 bit version. This avoids the complexity of finding 32 bit .so # build the 32 bit version. This avoids the complexity of finding 32 bit .so
...@@ -703,6 +705,9 @@ def main(): ...@@ -703,6 +705,9 @@ def main():
dest='dump_sis', dest='dump_sis',
help='Run dump-static-initializers.py to get the list' help='Run dump-static-initializers.py to get the list'
'of static initializers (slow).') 'of static initializers (slow).')
argparser.add_argument('--loadable_module',
action='append',
help='Use for libraries added via loadable_modules')
argparser.add_argument('--estimate-patch-size', argparser.add_argument('--estimate-patch-size',
action='store_true', action='store_true',
help='Include patch size estimates. Useful for perf ' help='Include patch size estimates. Useful for perf '
...@@ -730,8 +735,10 @@ def main(): ...@@ -730,8 +735,10 @@ def main():
PrintApkAnalysis(args.apk, tool_prefix, out_dir, chartjson=chartjson) PrintApkAnalysis(args.apk, tool_prefix, out_dir, chartjson=chartjson)
_PrintDexAnalysis(args.apk, chartjson=chartjson) _PrintDexAnalysis(args.apk, chartjson=chartjson)
ignored_libs = args.loadable_module if args.loadable_module else []
si_count = AnalyzeStaticInitializers( si_count = AnalyzeStaticInitializers(
args.apk, tool_prefix, args.dump_sis, out_dir) args.apk, tool_prefix, args.dump_sis, out_dir, ignored_libs)
perf_tests_results_helper.ReportPerfResult( perf_tests_results_helper.ReportPerfResult(
chartjson, 'StaticInitializersCount', 'count', si_count, 'count') chartjson, 'StaticInitializersCount', 'count', si_count, 'count')
......
...@@ -8,6 +8,7 @@ import("//build/config/locales.gni") ...@@ -8,6 +8,7 @@ import("//build/config/locales.gni")
import("//build/config/android/extract_unwind_tables.gni") import("//build/config/android/extract_unwind_tables.gni")
import("//build/config/compiler/compiler.gni") import("//build/config/compiler/compiler.gni")
import("//chrome/common/features.gni") import("//chrome/common/features.gni")
import("//device/vr/buildflags/buildflags.gni")
import("//third_party/leakcanary/config.gni") import("//third_party/leakcanary/config.gni")
import("channel.gni") import("channel.gni")
...@@ -193,5 +194,15 @@ template("monochrome_public_apk_tmpl") { ...@@ -193,5 +194,15 @@ template("monochrome_public_apk_tmpl") {
proguard_configs += [ "//android_webview/apk/java/proguard.flags" ] proguard_configs += [ "//android_webview/apk/java/proguard.flags" ]
png_to_webp = true png_to_webp = true
} }
if (enable_arcore) {
deps += [
"//third_party/arcore-android-sdk:libarcore_library",
"//third_party/arcore-android-sdk:libdynamite_client_java",
]
# We store this as a separate .so in the APK and only load as needed.
loadable_modules = [ "${root_out_dir}/libarcore_sdk_c_minimal.so" ]
}
} }
} }
...@@ -5,6 +5,7 @@ ...@@ -5,6 +5,7 @@
import("//build/config/chrome_build.gni") import("//build/config/chrome_build.gni")
import("//build/config/chromecast_build.gni") import("//build/config/chromecast_build.gni")
import("//build/config/gclient_args.gni") import("//build/config/gclient_args.gni")
import("//chrome/android/channel.gni")
declare_args() { declare_args() {
# TODO(733935): Enable for other Android architectures too. Currently we only # TODO(733935): Enable for other Android architectures too. Currently we only
...@@ -29,4 +30,11 @@ declare_args() { ...@@ -29,4 +30,11 @@ declare_args() {
# Whether to include VR extras like test APKs in non-VR-specific targets # Whether to include VR extras like test APKs in non-VR-specific targets
include_vr_data = false include_vr_data = false
# TODO(crbug.com/837999): We currently only support arm and arm64 and we are
# limiting to canary and dev until binary size issues are resolved.
enable_arcore = is_android && !is_chromecast &&
(current_cpu == "arm" || current_cpu == "arm64") &&
(android_channel == "default" || android_channel == "dev" ||
android_channel == "canary")
} }
...@@ -18,11 +18,11 @@ source_set("libarcore_sdk") { ...@@ -18,11 +18,11 @@ source_set("libarcore_sdk") {
} }
copy("libarcore_library") { copy("libarcore_library") {
if (target_cpu == "arm") { if (current_cpu == "arm") {
sources = [ sources = [
"libraries/android_arm/libarcore_sdk_c_minimal.so", "libraries/android_arm/libarcore_sdk_c_minimal.so",
] ]
} else if (target_cpu == "arm64") { } else if (current_cpu == "arm64") {
sources = [ sources = [
"libraries/android_arm64/libarcore_sdk_c_minimal.so", "libraries/android_arm64/libarcore_sdk_c_minimal.so",
] ]
......
...@@ -16,5 +16,10 @@ To address binary size concerns, we are using a minimal shim produced for ...@@ -16,5 +16,10 @@ To address binary size concerns, we are using a minimal shim produced for
Chromium that is not publicly distributed elsewhere. We have also stripped the Chromium that is not publicly distributed elsewhere. We have also stripped the
.so's to minimize their size. .so's to minimize their size.
Also, added BUILD.gn for compilation in chrome.
The LICENSE file is taken from The LICENSE file is taken from
* https://github.com/google-ar/arcore-unity-sdk/blob/master/LICENSE * https://github.com/google-ar/arcore-unity-sdk/blob/master/LICENSE
Changes:
2018-05-04 - Updated BUILD.gn to work properly for arm64.
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment