From e6cc8d4e0977b4a3dda28c70caea3515f9d07edd Mon Sep 17 00:00:00 2001 From: Jacobo Aragunde Pérez Date: Mon, 17 Jun 2019 13:12:00 +0200 Subject: chromium68: custom toolchain, target v8 snapshot MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Modify the chromium68 recipe to make it more like the one available in meta-browser: https://github.com/OSSystems/meta-browser Instead of passing Yocto's build flags to the cros (=ChromeOS) toolchain, generate a toolchain definition file specifically for this build. For the generation of the V8 memory snapshot, build the required files for the target architecture, then use qemu-native to run them. Upstream chromium addresses this problem by downloading a specific native toolchain for every target platform, which we cannot do in this context. The toolchain changes trigger an issue with ARMv7 builds; backported one patch to address that specific issue. This changes also triggered a problem with 32 bit targets, the generated binaries were too big. Forced the DEBUG_ARGS to use -g1 (or -g0 otherwise). Bug-AGL: SPEC-2514 Change-Id: Ib18431b628415c58a3c29595bfff10057e355a4b Signed-off-by: Jacobo Aragunde Pérez --- ...skcms-with-mfp16-format-ieee-on-GCC-ARM-b.patch | 60 ++++++++++++++++++++++ .../chromium/chromium68/v8-qemu-wrapper.patch | 40 +++++++++++++++ 2 files changed, 100 insertions(+) create mode 100644 meta-html5-framework/recipes-wam/chromium/chromium68/0001-skia-Build-skcms-with-mfp16-format-ieee-on-GCC-ARM-b.patch create mode 100644 meta-html5-framework/recipes-wam/chromium/chromium68/v8-qemu-wrapper.patch (limited to 'meta-html5-framework/recipes-wam/chromium/chromium68') diff --git a/meta-html5-framework/recipes-wam/chromium/chromium68/0001-skia-Build-skcms-with-mfp16-format-ieee-on-GCC-ARM-b.patch b/meta-html5-framework/recipes-wam/chromium/chromium68/0001-skia-Build-skcms-with-mfp16-format-ieee-on-GCC-ARM-b.patch new file mode 100644 index 00000000..22f50266 --- /dev/null +++ b/meta-html5-framework/recipes-wam/chromium/chromium68/0001-skia-Build-skcms-with-mfp16-format-ieee-on-GCC-ARM-b.patch @@ -0,0 +1,60 @@ +From a01fb357a1ce755834779c905a14c3376e1a6239 Mon Sep 17 00:00:00 2001 +From: Raphael Kubo da Costa +Date: Tue, 17 Jul 2018 11:56:52 +0000 +Subject: [PATCH] skia: Build skcms with -mfp16-format=ieee on GCC ARM builds + +skcms' Transform_inl.h assumes support for 16-bit floating point in the +__ARM_FP macro means the __fp16 (and corresponding SIMD data type) is +present. + +While this is currently true for LLVM, which always sets the equivalent of +GCC's -mfp16-format=ieee internally on ARM builds, GCC explicitly needs that +option to be specified in order to enable support for __fp16. Doing so +allows GCC ARM builds to proceed without the following error: + + ../../third_party/skia/third_party/skcms/src/Transform_inl.h: In function 'F_from_Half_': + ../../third_party/skia/third_party/skcms/src/Transform_inl.h:101:72: error: 'float16x4_t' undeclared (first use in this function); did you mean 'float32x4_t'? + SI ATTR F NS(F_from_Half_(U16 half)) { return vcvt_f32_f16((float16x4_t)half); } + ^~~~~~~~~~~ + float32x4_t + ../../third_party/skia/third_party/skcms/src/Transform_inl.h:101:72: note: each undeclared identifier is reported only once for each function it appears in + ../../third_party/skia/third_party/skcms/src/Transform_inl.h:101:84: error: expected ')' before 'half' + SI ATTR F NS(F_from_Half_(U16 half)) { return vcvt_f32_f16((float16x4_t)half); } + ^~~~ + ) + ../../third_party/skia/third_party/skcms/src/Transform_inl.h: In function 'Half_from_F_': + ../../third_party/skia/third_party/skcms/src/Transform_inl.h:102:5: error: can't convert a value of type 'int' to vector type '__vector(4) short unsigned int' which has different size + SI ATTR U16 NS(Half_from_F_(F f)) { return (U16)vcvt_f16_f32( f); } + ^~ + +Bug: 819294 +Change-Id: Ib7417fb9bdc6bd93553084053ba69f9d3409b112 +Reviewed-on: https://chromium-review.googlesource.com/1138251 +Reviewed-by: Florin Malita +Commit-Queue: Raphael Kubo da Costa (CET) +Cr-Commit-Position: refs/heads/master@{#575608} +--- + src/skia/BUILD.gn | 7 +++++++ + 1 file changed, 7 insertions(+) + +diff --git a/src/skia/BUILD.gn b/src/skia/BUILD.gn +index 294b9ac16..6efada326 100644 +--- a/src/skia/BUILD.gn ++++ b/src/skia/BUILD.gn +@@ -242,6 +242,13 @@ source_set("skcms") { + ] + } + ++ # LLVM automatically sets the equivalent of GCC's -mfp16-format=ieee on ARM ++ # builds by default, while GCC itself does not. We need it to enable support ++ # for half-precision floating point data types used by SKCMS on ARM. ++ if (is_linux && !is_clang && current_cpu == "arm") { ++ cflags += [ "-mfp16-format=ieee" ] ++ } ++ + public = [ + "//third_party/skia/third_party/skcms/skcms.h", + ] +-- +2.11.0 + diff --git a/meta-html5-framework/recipes-wam/chromium/chromium68/v8-qemu-wrapper.patch b/meta-html5-framework/recipes-wam/chromium/chromium68/v8-qemu-wrapper.patch new file mode 100644 index 00000000..485766b0 --- /dev/null +++ b/meta-html5-framework/recipes-wam/chromium/chromium68/v8-qemu-wrapper.patch @@ -0,0 +1,40 @@ +Upstream-Status: Inappropriate [embedder specific] + +The patch below makes the V8 binaries run during the build be invoked through +QEMU, as they are built for the target. + +Signed-off-by: Raphael Kubo da Costa +Signed-off-by: Maksim Sisov + +Index: git/src/tools/v8_context_snapshot/BUILD.gn +=================================================================== +--- git.orig/src/tools/v8_context_snapshot/BUILD.gn ++++ git/src/tools/v8_context_snapshot/BUILD.gn +@@ -62,6 +62,7 @@ if (use_v8_context_snapshot) { + output_path = rebase_path(output_file, root_build_dir) + + args = [ ++ "./v8-qemu-wrapper.sh", + "./" + rebase_path( + get_label_info( + ":v8_context_snapshot_generator($v8_snapshot_toolchain)", +Index: git/src/v8/BUILD.gn +=================================================================== +--- git.orig/src/v8/BUILD.gn ++++ git/src/v8/BUILD.gn +@@ -900,6 +900,7 @@ action("run_torque") { + } + + args = [ ++ "./v8-qemu-wrapper.sh", + "./" + rebase_path(get_label_info(":torque($v8_torque_toolchain)", + "root_out_dir") + "/torque", + root_build_dir), +@@ -977,6 +978,7 @@ template("run_mksnapshot") { + data = [] + + args = [ ++ "./v8-qemu-wrapper.sh", + "./" + rebase_path(get_label_info(":mksnapshot($v8_snapshot_toolchain)", + "root_out_dir") + "/mksnapshot", + root_build_dir), -- cgit 1.2.3-korg