build: fix native_mksnapshot build (#15770)

* build: fix native_mksnapshot build

When we changed our electron_mksnapshot_zip target to include the v8_context_snapshot_generator, this dependency made the `run_mksnapshot` target run which was trying to run an arm/arm64 binary on x64 hardware.

Don't use custom build args for native_mksnapshot as they are not needed

* Added comment on why snapshot_blob.bin is skipped on arm/arm64
This commit is contained in:
John Kleinschmidt 2018-11-21 15:19:19 -05:00 committed by GitHub
parent 9e8b26cc4e
commit bb7c63c052
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
5 changed files with 50 additions and 6 deletions

View file

@ -370,7 +370,7 @@ step-maybe-native-mksnapshot-gn-gen: &step-maybe-native-mksnapshot-gn-gen
command: | command: |
if [ "$BUILD_NATIVE_MKSNAPSHOT" == "1" ]; then if [ "$BUILD_NATIVE_MKSNAPSHOT" == "1" ]; then
cd src cd src
gn gen out/native_mksnapshot --args='import("//electron/build/args/native_mksnapshot.gn") cc_wrapper="'"$SCCACHE_PATH"'" v8_snapshot_toolchain="'"$MKSNAPSHOT_TOOLCHAIN"'"'" $GN_EXTRA_ARGS" gn gen out/native_mksnapshot --args='import("'$GN_CONFIG'") cc_wrapper="'"$SCCACHE_PATH"'" v8_snapshot_toolchain="'"$MKSNAPSHOT_TOOLCHAIN"'"'" $GN_EXTRA_ARGS"
else else
echo 'Skipping native mksnapshot GN gen for non arm build' echo 'Skipping native mksnapshot GN gen for non arm build'
fi fi
@ -919,6 +919,7 @@ jobs:
executor: linux-medium executor: linux-medium
environment: environment:
<<: *env-arm <<: *env-arm
<<: *env-release-build
<<: *env-enable-sccache <<: *env-enable-sccache
<<: *env-send-slack-notifications <<: *env-send-slack-notifications
<<: *steps-native-mksnapshot-build <<: *steps-native-mksnapshot-build
@ -978,6 +979,7 @@ jobs:
executor: linux-medium executor: linux-medium
environment: environment:
<<: *env-arm64 <<: *env-arm64
<<: *env-release-build
<<: *env-enable-sccache <<: *env-enable-sccache
<<: *env-send-slack-notifications <<: *env-send-slack-notifications
<<: *steps-native-mksnapshot-build <<: *steps-native-mksnapshot-build

View file

@ -1,2 +0,0 @@
import("release.gn")
v8_enable_i18n_support = false

View file

@ -19,10 +19,17 @@ PATHS_TO_SKIP = [
'pyproto', 'pyproto',
] ]
def skip_path(dep): def skip_path(dep, dist_zip, target_cpu):
# Skip specific paths and extensions as well as the following special case:
# snapshot_blob.bin is a dependency of mksnapshot.zip because
# v8_context_generator needs it, but this file does not get generated for arm
# and arm 64 binaries of mksnapshot since they are built on x64 hardware.
# Consumers of arm and arm64 mksnapshot can generate snapshot_blob.bin
# themselves by running mksnapshot.
should_skip = ( should_skip = (
any(dep.startswith(path) for path in PATHS_TO_SKIP) or any(dep.startswith(path) for path in PATHS_TO_SKIP) or
any(dep.endswith(ext) for ext in EXTENSIONS_TO_SKIP)) any(dep.endswith(ext) for ext in EXTENSIONS_TO_SKIP) or
('arm' in target_cpu and dist_zip == 'mksnapshot.zip' and dep == 'snapshot_blob.bin'))
if should_skip: if should_skip:
print("Skipping {}".format(dep)) print("Skipping {}".format(dep))
return should_skip return should_skip
@ -47,7 +54,7 @@ def main(argv):
else: else:
with zipfile.ZipFile(dist_zip, 'w', zipfile.ZIP_DEFLATED) as z: with zipfile.ZipFile(dist_zip, 'w', zipfile.ZIP_DEFLATED) as z:
for dep in dist_files: for dep in dist_files:
if skip_path(dep): if skip_path(dep, dist_zip, target_cpu):
continue continue
if os.path.isdir(dep): if os.path.isdir(dep):
for root, dirs, files in os.walk(dep): for root, dirs, files in os.walk(dep):

View file

@ -18,3 +18,4 @@ dcheck.patch
disable-warning-win.patch disable-warning-win.patch
expose_mksnapshot.patch expose_mksnapshot.patch
build-torque-with-x64-toolchain-on-arm.patch build-torque-with-x64-toolchain-on-arm.patch
do_not_run_arm_arm64_mksnapshot_binaries.patch

View file

@ -0,0 +1,36 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: John Kleinschmidt <jkleinsc@github.com>
Date: Mon, 19 Nov 2018 18:33:56 -0500
Subject: Do not run arm/arm64 mksnapshot binaries
For arm and arm64 target_arches, Chromium builds mksnapshot as an x64 binary and
as part of that build mksnapshot is executed to produce snapshot_blob.bin.
Chromium does not build native arm and arm64 binaries of mksnapshot, but
Electron does, so this patch makes sure that the build doesn't try to run
the mksnapshot binary if it was built for arm or arm64.
diff --git a/BUILD.gn b/BUILD.gn
index b1194e4b828e66d8d09fac57481efe313031f3ac..c256945650c24324c28a2e17fb299a1d0c2dcd19 100644
--- a/BUILD.gn
+++ b/BUILD.gn
@@ -1247,9 +1247,19 @@ if (v8_use_snapshot && v8_use_external_startup_data) {
]
public_deps = [
":natives_blob",
- ":run_mksnapshot_default",
]
+ if (v8_snapshot_toolchain == "//build/toolchain/linux:clang_arm" ||
+ v8_snapshot_toolchain == "//build/toolchain/linux:clang_arm64") {
+ public_deps += [
+ ":mksnapshot($v8_snapshot_toolchain)",
+ ]
+ } else {
+ public_deps += [
+ ":run_mksnapshot_default",
+ ]
+ }
+
if (v8_use_multi_snapshots) {
public_deps += [ ":run_mksnapshot_trusted" ]
}