aboutsummaryrefslogtreecommitdiffstats
path: root/recipes-wam/chromium
diff options
context:
space:
mode:
authorLorenzo Tilve <ltilve@igalia.com>2020-12-22 12:13:14 +0100
committerJan-Simon Moeller <jsmoeller@linuxfoundation.org>2021-01-08 11:56:40 +0000
commit3ec6b8b20636befeb458c2118fc45b6aef66530f (patch)
treeef180b54aef9b9380a0f884863f9dd40d90e8aa7 /recipes-wam/chromium
parent8bd9af16b19faf19c5ec86043fc734ef27688bd8 (diff)
web-runtime: Update from chromium68 to chromium79
This patch contains all the squashed changes needed to bump WAM and Chromium to M79, including all the ported changes from both upstream Chromium, webOSE and and the former chromium 68 version. It includes the needed changes on the recipes, and bumps the versions to the new commits/branches of the Chromium and Wam repositories. The split of the ongoing changes merged is available here: https://github.com/Igalia/meta-agl-html5-dev/commits/chromium79 Bug-AGL: SPEC-3576 Change-Id: Ia0de6f11001189789d4ffbf01ed81929c57bc7c5 Signed-off-by: Lorenzo Tilve <ltilve@igalia.com>
Diffstat (limited to 'recipes-wam/chromium')
-rw-r--r--recipes-wam/chromium/chromium-browser-service.bb19
-rw-r--r--recipes-wam/chromium/chromium.inc (renamed from recipes-wam/chromium/chromium68_git.bb)114
-rw-r--r--recipes-wam/chromium/chromium68/v8-qemu-wrapper.patch40
-rw-r--r--recipes-wam/chromium/chromium79/0001-GCC-fix-includes-for-gcc-10.patch101
-rw-r--r--recipes-wam/chromium/chromium79_git.bb60
-rw-r--r--recipes-wam/chromium/gn-utils.inc151
6 files changed, 198 insertions, 287 deletions
diff --git a/recipes-wam/chromium/chromium-browser-service.bb b/recipes-wam/chromium/chromium-browser-service.bb
deleted file mode 100644
index 90242d792..000000000
--- a/recipes-wam/chromium/chromium-browser-service.bb
+++ /dev/null
@@ -1,19 +0,0 @@
-SUMMARY = "Chromium browser widget"
-DESCRIPTION = "Wgt packaging for running chromium installed browser"
-HOMEPAGE = "https://webosose.org"
-SECTION = "apps"
-LICENSE = "Apache-2.0"
-LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/Apache-2.0;md5=89aea4e17d99a7cacdbeed46a0096b10"
-
-SRC_URI = "git://gerrit.automotivelinux.org/gerrit/apps/chromium;protocol=https;branch=${AGL_BRANCH}"
-SRCREV = "${AGL_APP_REVISION}"
-
-PV = "1.0+git${SRCPV}"
-S = "${WORKDIR}/git"
-
-#build-time dependencies
-DEPENDS += "af-binder af-main-native chromium68"
-
-inherit cmake aglwgt
-
-RDEPENDS_${PN} += "chromium68-browser"
diff --git a/recipes-wam/chromium/chromium68_git.bb b/recipes-wam/chromium/chromium.inc
index 4f545c145..823016039 100644
--- a/recipes-wam/chromium/chromium68_git.bb
+++ b/recipes-wam/chromium/chromium.inc
@@ -18,12 +18,6 @@ DEPENDS = "virtual/gettext wayland wayland-native pixman freetype glib-2.0 fontc
PROVIDES = "${BROWSER_APPLICATION}"
-SRC_URI = "\
- git://github.com/igalia/${BPN};branch=WIP@39.agl.compositor;protocol=https;rev=${SRCREV_chromium68};name=chromium68 \
- git://github.com/webosose/v8;destsuffix=git/src/v8;rev=${SRCREV_v8};name=v8 \
- file://v8-qemu-wrapper.patch \
-"
-SRCREV_chromium68 = "61e96d1ee5dfc2461697457d287bf922d8a03d9a"
SRCREV_v8 = "1e3af71f1ff3735e8a5b639c48dfca63a7b8a647"
# we don't include SRCPV in PV, so we have to manually include SRCREVs in do_fetch vardeps
@@ -43,18 +37,13 @@ BROWSER_APP_BUILD_TARGET = "chrome"
BROWSER_APPLICATION = "chromium68-browser"
BROWSER_APPLICATION_DIR = "/opt/chromium68"
-TARGET = "${WEBRUNTIME_BUILD_TARGET} ${BROWSER_APP_BUILD_TARGET}"
+TARGET = "${WEBRUNTIME_BUILD_TARGET}"
# Skip do_install_append of webos_system_bus. It is not compatible with this component.
WEBOS_SYSTEM_BUS_FILES_LOCATION = "${S}/files/sysbus"
PACKAGECONFIG ?= "jumbo use-upstream-wayland"
-# Options to enable debug-webcore build.
-# Add the following line to local.conf (or local.dev.inc) to enable them:
-# PACKAGECONFIG_append_pn-chromium68 = " debug-webcore"
-# Other debug options are controlled by sections later in this file
-PACKAGECONFIG[debug-webcore] = "remove_webcore_debug_symbols=false,remove_webcore_debug_symbols=true"
# Set a default value for jumbo file merge of 8. This should be good for build
# servers and workstations with a big number of cores. In case build is
@@ -86,16 +75,16 @@ GN_ARGS = "\
treat_warnings_as_errors=false\
is_agl=true\
use_cbe=true\
- is_chrome_cbe=true\
+ is_chrome_cbe=false\
use_cups=false\
use_custom_libcxx=false\
use_kerberos=false\
use_neva_media=false\
use_ozone=true\
use_xkbcommon=true\
+ use_wayland_gbm=false\
use_pmlog=false\
use_system_debugger_abort=true\
- use_webos_gpu_info_collector=false\
${PACKAGECONFIG_CONFARGS}\
"
@@ -140,21 +129,6 @@ GN_ARGS += "symbol_level=0"
# let Yocto handle everything.
GN_ARGS += "use_sysroot=false"
-# Toolchains we will use for the build. We need to point to the toolchain file
-# we've created, set the right target architecture and make sure we are not
-# using Chromium's toolchain (bundled clang, bundled binutils etc).
-GN_ARGS += "\
- custom_toolchain=\"//build/toolchain/yocto:yocto_target\" \
- gold_path=\"\" \
- host_toolchain=\"//build/toolchain/yocto:yocto_native\" \
- is_clang=${@is_default_cc_clang(d)} \
- clang_base_path=\"${@clang_install_path(d)}\" \
- clang_use_chrome_plugins=false \
- linux_use_bundled_binutils=false \
- target_cpu=\"${@gn_target_arch_name(d)}\" \
- v8_snapshot_toolchain=\"//build/toolchain/yocto:yocto_target\" \
-"
-
# ARM builds need special additional flags (see ${S}/build/config/arm.gni).
# If we do not pass |arm_arch| and friends to GN, it will deduce a value that
# will then conflict with TUNE_CCARGS and CC.
@@ -200,43 +174,6 @@ GN_ARGS_append_armv6 += 'arm_use_neon=false'
# https://github.com/gperftools/gperftools/issues/693
GN_ARGS_append_libc-musl = ' use_allocator_shim=false'
-# V8's JIT infrastructure requires binaries such as mksnapshot and
-# mkpeephole to be run in the host during the build. However, these
-# binaries must have the same bit-width as the target (e.g. a x86_64
-# host targeting ARMv6 needs to produce a 32-bit binary). Instead of
-# depending on a third Yocto toolchain, we just build those binaries
-# for the target and run them on the host with QEMU.
-python do_create_v8_qemu_wrapper () {
- """Creates a small wrapper that invokes QEMU to run some target V8 binaries
- on the host."""
- qemu_libdirs = [d.expand('${STAGING_DIR_HOST}${libdir}'),
- d.expand('${STAGING_DIR_HOST}${base_libdir}')]
- qemu_cmd = qemu_wrapper_cmdline(d, d.getVar('STAGING_DIR_HOST', True),
- qemu_libdirs)
- wrapper_path = d.expand('${B}/v8-qemu-wrapper.sh')
- with open(wrapper_path, 'w') as wrapper_file:
- wrapper_file.write("""#!/bin/sh
-
-# This file has been generated automatically.
-# It invokes QEMU to run binaries built for the target in the host during the
-# build process.
-
-%s "$@"
-""" % qemu_cmd)
- os.chmod(wrapper_path, 0o755)
-}
-do_create_v8_qemu_wrapper[dirs] = "${B}"
-addtask create_v8_qemu_wrapper after do_patch before do_configure
-
-python do_write_toolchain_file () {
- """Writes a BUILD.gn file for Yocto detailing its toolchains."""
- toolchain_dir = d.expand("${S}/src/build/toolchain/yocto")
- bb.utils.mkdirhier(toolchain_dir)
- toolchain_file = os.path.join(toolchain_dir, "BUILD.gn")
- write_toolchain_file(d, toolchain_file)
-}
-addtask write_toolchain_file after do_patch before do_configure
-
# More options to speed up the build
GN_ARGS += "\
enable_nacl=false\
@@ -248,12 +185,6 @@ GN_ARGS += "\
use_pulseaudio=false\
"
-# Respect ld-is-gold in DISTRO_FEATURES when enabling gold
-# Similar patch applied in meta-browser
-# http://patchwork.openembedded.org/patch/77755/
-EXTRA_OEGN_GOLD = "${@bb.utils.contains('DISTRO_FEATURES', 'ld-is-gold', 'use_gold=true', 'use_gold=false', d)}"
-GN_ARGS += "${EXTRA_OEGN_GOLD}"
-
# Doesn't build for armv[45]*
COMPATIBLE_MACHINE = "(-)"
COMPATIBLE_MACHINE_aarch64 = "(.*)"
@@ -279,7 +210,7 @@ do_compile() {
fi
export PATH="${S}/depot_tools:$PATH"
- ${S}/depot_tools/ninja -v -C ${OUT_DIR}/${BUILD_TYPE} ${TARGET}
+ ${S}/depot_tools/ninja ${PARALLEL_MAKE} -v -C ${OUT_DIR}/${BUILD_TYPE} ${TARGET}
}
do_configure() {
@@ -331,35 +262,38 @@ install_chromium_browser() {
}
install_webruntime() {
+
+ # # Generate install webos webview files
+ # ${S}/depot_tools/ninja ${PARALLEL_MAKE} -C ${OUT_DIR}/${BUILD_TYPE} webos/install/weboswebruntime
+
+ # # Move installation files to D directory
+ # mv ${OUT_DIR}/${BUILD_TYPE}/image/* ${D}
+ # # Rename include and locale directories
+ # mv ${D}${includedir}/webruntime ${D}${includedir}/${BPN}
+ # mv ${D}${CBE_DATA_PATH}/neva_locales ${D}${CBE_DATA_LOCALES_PATH}
+
+ # # move this to separate mksnapshot-cross recipe once we figure out how to build just cross mksnapshot from chromium repository
+ # install -d ${D}${bindir_cross}
+ # gzip -c ${OUT_DIR}/${BUILD_TYPE}/${MKSNAPSHOT_PATH}mksnapshot > ${D}${bindir_cross}/${HOST_SYS}-mksnapshot.gz
+
install -d ${D}${libdir}
install -d ${D}${includedir}/${BPN}
install -d ${D}${CBE_DATA_PATH}
install -d ${D}${CBE_DATA_LOCALES_PATH}
# Install webos webview files
- if [ -e "${SRC_DIR}/webos/install" ]; then
- cd ${SRC_DIR}
- xargs --arg-file=${SRC_DIR}/webos/install/weboswebruntime/staging_inc.list cp --parents --target-directory=${D}${includedir}/${BPN}
-
- cd ${OUT_DIR}/${BUILD_TYPE}
-
- cp libcbe.so ${D}${libdir}/
- if [ "${WEBOS_LTTNG_ENABLED}" = "1" ]; then
- # use bindir if building non-cbe
- cp libchromium_lttng_provider.so ${D}${libdir}/
- fi
- xargs --arg-file=${SRC_DIR}/webos/install/weboswebruntime/binary.list cp --parents --target-directory=${D}${CBE_DATA_PATH}
- cat ${SRC_DIR}/webos/install/weboswebruntime/data_locales.list | xargs -I{} install -m 755 -p {} ${D}${CBE_DATA_LOCALES_PATH}
- fi
+ ${S}/depot_tools/ninja ${PARALLEL_MAKE} -C ${OUT_DIR}/${BUILD_TYPE} webos/install/weboswebruntime
+ chown root:root -R ${D}${libdir}
+ chown root:root -R ${D}${includedir}
# move this to separate mksnapshot-cross recipe once we figure out how to build just cross mksnapshot from chromium repository
- install -d ${D}${bindir_cross}
- gzip -c ${OUT_DIR}/${BUILD_TYPE}/${MKSNAPSHOT_PATH}mksnapshot > ${D}${bindir_cross}/${HOST_SYS}-mksnapshot.gz
+ install -d ${D}${base_bindir}
+ gzip -c ${OUT_DIR}/${BUILD_TYPE}/${MKSNAPSHOT_PATH}mksnapshot > ${D}${base_bindir}/${HOST_SYS}-mksnapshot.gz
+
}
do_install() {
install_webruntime
- install_chromium_browser
}
WEBOS_SYSTEM_BUS_DIRS_LEGACY_BROWSER_APPLICATION = " \
diff --git a/recipes-wam/chromium/chromium68/v8-qemu-wrapper.patch b/recipes-wam/chromium/chromium68/v8-qemu-wrapper.patch
deleted file mode 100644
index 485766b02..000000000
--- a/recipes-wam/chromium/chromium68/v8-qemu-wrapper.patch
+++ /dev/null
@@ -1,40 +0,0 @@
-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 <raphael.kubo.da.costa@intel.com>
-Signed-off-by: Maksim Sisov <msisov@igalia.com>
-
-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),
diff --git a/recipes-wam/chromium/chromium79/0001-GCC-fix-includes-for-gcc-10.patch b/recipes-wam/chromium/chromium79/0001-GCC-fix-includes-for-gcc-10.patch
new file mode 100644
index 000000000..c3f8abdf4
--- /dev/null
+++ b/recipes-wam/chromium/chromium79/0001-GCC-fix-includes-for-gcc-10.patch
@@ -0,0 +1,101 @@
+From 07c48d101166930daa13bbcab6bf5c6be89a8bd8 Mon Sep 17 00:00:00 2001
+From: Stephan Hartmann <stha09@googlemail.com>
+Date: Tue, 7 Apr 2020 10:02:27 +0000
+Subject: [PATCH] GCC: fix includes for gcc-10
+
+From
+https://gitweb.gentoo.org/repo/gentoo.git/plain/www-client/chromium/files/chromium-81-gcc-10.patch
+---
+ src/base/trace_event/trace_event_memory_overhead.h | 1 +
+ src/chrome/browser/search/background/ntp_backgrounds.h | 1 +
+ src/media/cdm/supported_cdm_versions.h | 1 +
+ src/third_party/angle/include/platform/Platform.h | 1 +
+ src/third_party/perfetto/include/perfetto/base/task_runner.h | 1 +
+ src/third_party/webrtc/call/rtx_receive_stream.h | 1 +
+ .../webrtc/modules/audio_processing/aec3/clockdrift_detector.h | 1 +
+ 7 files changed, 7 insertions(+)
+
+diff --git a/src/base/trace_event/trace_event_memory_overhead.h b/src/base/trace_event/trace_event_memory_overhead.h
+index 69468d464..3f5b786aa 100644
+--- a/src/base/trace_event/trace_event_memory_overhead.h
++++ b/src/base/trace_event/trace_event_memory_overhead.h
+@@ -9,6 +9,7 @@
+ #include <stdint.h>
+
+ #include <unordered_map>
++#include <string>
+
+ #include "base/base_export.h"
+ #include "base/macros.h"
+diff --git a/src/chrome/browser/search/background/ntp_backgrounds.h b/src/chrome/browser/search/background/ntp_backgrounds.h
+index 7afc0a230..ea5818e0d 100644
+--- a/src/chrome/browser/search/background/ntp_backgrounds.h
++++ b/src/chrome/browser/search/background/ntp_backgrounds.h
+@@ -6,6 +6,7 @@
+ #define CHROME_BROWSER_SEARCH_BACKGROUND_NTP_BACKGROUNDS_H_
+
+ #include <array>
++#include <cstddef>
+
+ class GURL;
+
+diff --git a/src/media/cdm/supported_cdm_versions.h b/src/media/cdm/supported_cdm_versions.h
+index 2b54e197b..f34a2a265 100644
+--- a/src/media/cdm/supported_cdm_versions.h
++++ b/src/media/cdm/supported_cdm_versions.h
+@@ -6,6 +6,7 @@
+ #define MEDIA_CDM_SUPPORTED_CDM_VERSIONS_H_
+
+ #include <array>
++#include <cstddef>
+
+ #include "media/base/media_export.h"
+ #include "media/cdm/api/content_decryption_module.h"
+diff --git a/src/third_party/angle/include/platform/Platform.h b/src/third_party/angle/include/platform/Platform.h
+index cea607055..829ada6d0 100644
+--- a/src/third_party/angle/include/platform/Platform.h
++++ b/src/third_party/angle/include/platform/Platform.h
+@@ -11,6 +11,7 @@
+
+ #include <stdint.h>
+ #include <array>
++#include <cstddef>
+
+ #define EGL_PLATFORM_ANGLE_PLATFORM_METHODS_ANGLEX 0x3482
+
+diff --git a/src/third_party/perfetto/include/perfetto/base/task_runner.h b/src/third_party/perfetto/include/perfetto/base/task_runner.h
+index cf6040123..02658e713 100644
+--- a/src/third_party/perfetto/include/perfetto/base/task_runner.h
++++ b/src/third_party/perfetto/include/perfetto/base/task_runner.h
+@@ -18,6 +18,7 @@
+ #define INCLUDE_PERFETTO_BASE_TASK_RUNNER_H_
+
+ #include <functional>
++#include <cstdint>
+
+ #include "perfetto/base/export.h"
+
+diff --git a/src/third_party/webrtc/call/rtx_receive_stream.h b/src/third_party/webrtc/call/rtx_receive_stream.h
+index 8ffa4400a..113a8168b 100644
+--- a/src/third_party/webrtc/call/rtx_receive_stream.h
++++ b/src/third_party/webrtc/call/rtx_receive_stream.h
+@@ -12,6 +12,7 @@
+ #define CALL_RTX_RECEIVE_STREAM_H_
+
+ #include <map>
++#include <cstdint>
+
+ #include "call/rtp_packet_sink_interface.h"
+
+diff --git a/src/third_party/webrtc/modules/audio_processing/aec3/clockdrift_detector.h b/src/third_party/webrtc/modules/audio_processing/aec3/clockdrift_detector.h
+index 22528c948..69e624e8b 100644
+--- a/src/third_party/webrtc/modules/audio_processing/aec3/clockdrift_detector.h
++++ b/src/third_party/webrtc/modules/audio_processing/aec3/clockdrift_detector.h
+@@ -12,6 +12,7 @@
+ #define MODULES_AUDIO_PROCESSING_AEC3_CLOCKDRIFT_DETECTOR_H_
+
+ #include <array>
++#include <cstddef>
+
+ namespace webrtc {
+
diff --git a/recipes-wam/chromium/chromium79_git.bb b/recipes-wam/chromium/chromium79_git.bb
new file mode 100644
index 000000000..37ebb41b3
--- /dev/null
+++ b/recipes-wam/chromium/chromium79_git.bb
@@ -0,0 +1,60 @@
+require chromium.inc
+
+SRC_URI = "\
+ git://github.com/igalia/${PN};branch=@45.agl.jellyfish;protocol=https;rev=${SRCREV_chromium79};name=chromium79 \
+ git://github.com/webosose/chromium-v8;branch=@chromium79;destsuffix=git/src/v8;rev=${SRCREV_v8};name=v8 \
+ file://0001-GCC-fix-includes-for-gcc-10.patch \
+"
+
+# Needed by catapult
+DEPENDS += "python-six-native python-beautifulsoup4-native python-lxml-native python-html5lib-native python-webencodings-native"
+
+SRCREV_chromium79 = "c568380f34a275ed5430f3927b1bdee0e14220e0"
+SRCREV_v8 = "e876fd0e28bd3bda5815394874183b7e6079d440"
+
+BROWSER_APPLICATION = "chromium79-browser"
+BROWSER_APPLICATION_DIR = "/opt/chromium79"
+MKSNAPSHOT_PATH = "v8_snapshot/"
+
+GN_ARGS += "use_gtk=false"
+
+# Disable closure_compile
+# Else we need HOSTTOOLS += "java"
+GN_ARGS += "closure_compile=false"
+
+# When using meta-clang, one can switch to using the lld linker
+# by using the ld-is-lld distro feature otherwise use gold linker
+GN_ARGS += "${@bb.utils.contains('DISTRO_FEATURES', 'ld-is-lld', 'use_lld=true use_gold=false', 'use_lld=false use_gold=true', d)}"
+
+# Toolchains we will use for the build. We need to point to the toolchain file
+# we've created, set the right target architecture and make sure we are not
+# using Chromium's toolchain (bundled clang, bundled binutils etc).
+GN_ARGS += "\
+ host_toolchain=\"//build/toolchain/cros:host\" \
+ cros_host_is_clang=false \
+ use_custom_libcxx_for_host=false \
+ cros_host_ar=\"${BUILD_AR}\" \
+ cros_host_cc=\"${BUILD_CC}\" \
+ cros_host_cxx=\"${BUILD_CXX}\" \
+ cros_host_extra_ldflags=\"${BUILD_LDFLAGS}\" \
+ custom_toolchain=\"//build/toolchain/cros:target\" \
+ is_clang=false \
+ use_custom_libcxx=false \
+ target_cpu=\"${@gn_arch_name('${TUNE_ARCH}')}\" \
+ cros_target_ar=\"${AR}\" \
+ cros_target_cc=\"${CC}\" \
+ cros_target_cxx=\"${CXX}\" \
+ cros_target_extra_ldflags=\"${LDFLAGS}\" \
+ v8_snapshot_toolchain=\"//build/toolchain/cros:v8_snapshot\" \
+ cros_v8_snapshot_is_clang=false \
+ cros_v8_snapshot_ar=\"${BUILD_AR}\" \
+ cros_v8_snapshot_cc=\"${BUILD_CC}\" \
+ cros_v8_snapshot_cxx=\"${BUILD_CXX}\" \
+ linux_use_bundled_binutils=false \
+ gold_path=\"\" \
+ v8_enable_embedded_builtins=false \
+ use_v8_context_snapshot=false \
+"
+
+D = "${OUT_DIR}/${BUILD_TYPE}/image"
+
diff --git a/recipes-wam/chromium/gn-utils.inc b/recipes-wam/chromium/gn-utils.inc
index 0fd55a638..156b56d2d 100644
--- a/recipes-wam/chromium/gn-utils.inc
+++ b/recipes-wam/chromium/gn-utils.inc
@@ -16,142 +16,17 @@
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
# THE SOFTWARE.
-# GN host architecture helpers.
-#
-# BUILD_ARCH's value corresponds to what uname returns as the machine name.
-# The mapping in gn_host_arch_name() tries to match several possible values
-# returned by the Linux kernel in uname(2) into the corresponding values GN
-# understands.
-def gn_host_arch_name(d):
- """Returns a GN architecture name corresponding to the build host's machine
- architecture."""
- import re
- arch_translations = {
- r'aarch64.*': 'arm64',
- r'arm.*': 'arm',
- r'i[3456]86$': 'x86',
- r'x86_64$': 'x64',
- }
- build_arch = d.getVar("BUILD_ARCH")
- for arch_regexp, gn_arch_name in arch_translations.items():
- if re.match(arch_regexp, build_arch):
- return gn_arch_name
- bb.fatal('Unsuported BUILD_ARCH value: "%s"' % build_arch)
-
-# GN target architecture helpers.
-#
-# Determining the target architecture is more difficult, as there are many
-# different values we can use on the Yocto side (e.g. TUNE_ARCH, TARGET_ARCH,
-# MACHINEOVERRIDES etc). What we do is define the mapping with regular,
-# non-Python variables with overrides that are generic enough (i.e. "x86"
-# instead of "i586") and then use gn_target_arch_name() to return the right
-# value with some validation.
-GN_TARGET_ARCH_NAME_aarch64 = "arm64"
-GN_TARGET_ARCH_NAME_arm = "arm"
-GN_TARGET_ARCH_NAME_x86 = "x86"
-GN_TARGET_ARCH_NAME_x86-64 = "x64"
-
-BUILD_CC_toolchain-clang = "clang"
-BUILD_CXX_toolchain-clang = "clang++"
-BUILD_LD_toolchain-clang = "clang"
-
-# knob for clang, when using meta-clang to provide clang and case where
-# clang happens to be default compiler for OE we should let it use clang
-def is_default_cc_clang(d):
- """Return true if clang is default cross compiler."""
- toolchain = d.getVar("TOOLCHAIN")
- overrides = d.getVar("OVERRIDES")
- if toolchain == "clang" and "toolchain-clang" in overrides.split(":"):
- return "true"
- return "false"
-
-def clang_install_path(d):
- """Return clang compiler install path."""
- return d.getVar("STAGING_BINDIR_NATIVE")
-
-def gn_target_arch_name(d):
- """Returns a GN architecture name corresponding to the target machine's
- architecture."""
- name = d.getVar("GN_TARGET_ARCH_NAME")
- if name is None:
- bb.fatal('Unsupported target architecture. A valid override for the '
- 'GN_TARGET_ARCH_NAME variable could not be found.')
- return name
-
-def write_toolchain_file(d, file_path):
- """Creates a complete GN toolchain file in |file_path|."""
- import string
- gcc_toolchain_tmpl = string.Template(
- 'gcc_toolchain("${toolchain_name}") {\n'
- ' cc = "${cc}"\n'
- ' cxx = "${cxx}"\n'
- ' ar = "${ar}"\n'
- ' ld = cxx # GN expects a compiler, not a linker.\n'
- ' nm = "${nm}"\n'
- ' readelf = "${readelf}"\n'
- ' extra_cflags = "${extra_cflags}"\n'
- ' extra_cppflags = "${extra_cppflags}"\n'
- ' extra_cxxflags = "${extra_cxxflags}"\n'
- ' extra_ldflags = "${extra_ldflags}"\n'
- ' toolchain_args = {\n'
- ' current_cpu = "${current_cpu}"\n'
- ' current_os = "linux"\n'
- ' is_clang = false\n'
- ' }\n'
- '}\n'
- )
- clang_toolchain_tmpl = string.Template(
- 'clang_toolchain("clang_${toolchain_name}") {\n'
- ' extra_cflags = "${extra_cflags}"\n'
- ' extra_cppflags = "${extra_cppflags}"\n'
- ' extra_cxxflags = "${extra_cxxflags}"\n'
- ' extra_ldflags = "${extra_ldflags}"\n'
- ' toolchain_args = {\n'
- ' current_cpu = "${current_cpu}"\n'
- ' current_os = "linux"\n'
- ' is_clang = true\n'
- ' use_gold = true\n'
- ' }\n'
- '}\n'
- )
-
- native_toolchain = {
- 'toolchain_name': 'yocto_native',
- 'current_cpu': gn_host_arch_name(d),
- 'cc': d.expand('${BUILD_CC}'),
- 'cxx': d.expand('${BUILD_CXX}'),
- 'ar': d.expand('${BUILD_AR}'),
- 'nm': d.expand('${BUILD_NM}'),
- 'readelf': d.expand('${BUILD_PREFIX}readelf'),
- 'extra_cflags': d.expand('${BUILD_CFLAGS}'),
- 'extra_cppflags': d.expand('${BUILD_CPPFLAGS}'),
- 'extra_cxxflags': d.expand('${BUILD_CXXFLAGS}'),
- 'extra_ldflags': d.expand('${BUILD_LDFLAGS}'),
- }
- target_toolchain = {
- 'toolchain_name': 'yocto_target',
- 'current_cpu': gn_target_arch_name(d),
- 'cc': d.expand('${CC}'),
- 'cxx': d.expand('${CXX}'),
- 'ar': d.expand('${AR}'),
- 'nm': d.expand('${NM}'),
- 'readelf': d.expand('${TARGET_PREFIX}readelf'),
- 'extra_cflags': d.expand('${TARGET_CFLAGS}'),
- 'extra_cppflags': d.expand('${TARGET_CPPFLAGS}'),
- 'extra_cxxflags': d.expand('${TARGET_CXXFLAGS}'),
- 'extra_ldflags': d.expand('${TARGET_LDFLAGS}'),
- 'strip': '',
+def gn_arch_name(yocto_arch):
+ """Translates between Yocto's architecture values and the corresponding
+ ones used by GN."""
+ translation_table = {
+ 'aarch64': 'arm64',
+ 'arm': 'arm',
+ 'i586': 'x86',
+ 'i686': 'x86',
+ 'x86_64': 'x64',
}
-
- with open(file_path, 'w') as toolchain_file:
- toolchain_file.write(
- '# This file has been generated automatically.\n'
- '\n'
- 'import("//build/config/sysroot.gni")\n'
- 'import("//build/toolchain/gcc_toolchain.gni")\n'
- '\n'
- )
- toolchain_file.write(gcc_toolchain_tmpl.substitute(native_toolchain))
- toolchain_file.write(gcc_toolchain_tmpl.substitute(target_toolchain))
- toolchain_file.write(clang_toolchain_tmpl.substitute(native_toolchain))
- toolchain_file.write(clang_toolchain_tmpl.substitute(target_toolchain))
+ try:
+ return translation_table[yocto_arch]
+ except KeyError:
+ bb.fatal('"%s" is not a supported architecture.' % yocto_arch)