Enforce unified tunings across all target boards of AGL 99/9299/4
authorJan-Simon Möller <jsmoeller@linuxfoundation.org>
Wed, 26 Apr 2017 12:13:08 +0000 (14:13 +0200)
committerJan-Simon Moeller <jsmoeller@linuxfoundation.org>
Sat, 6 May 2017 13:49:42 +0000 (13:49 +0000)
DEFAULTTUNE is a setting that should be defined in the DISTRO.
So we do it here. Goal is to have just 3-4 SDKs in the end.

We use these levels:
- ARM 32bit high:   armv7vethf-neon-vfpv4  (=default for ARM 32bit)
- ARM 32bit medium: armv7athf-neon         (enabled via DISTRO_FEATURE_append = " agl-medium-arm-compiler")
- AARCH64:          aarch64                (=aarch64, no other tunings)
- x86-64:           corei7-64              (=corei7-64 also for qemux86-64)

v2: Fix qemu user-mode emulation on x86-64 and adapt qemux86-64 tune flags.

See: https://goo.gl/DMaBJ9

Bug-AGL: SPEC-491

Change-Id: Iababbe38a531d546c03f695847651f2d83301b9a
Signed-off-by: Jan-Simon Möller <jsmoeller@linuxfoundation.org>
Reviewed-on: https://gerrit.automotivelinux.org/gerrit/9299
Reviewed-by: Martin Kelly <mkelly@xevo.com>
ci-image-build: Jenkins Job builder account <agl-jobbuilder@automotivelinux.org>
Reviewed-by: Stéphane Desneux <stephane.desneux@iot.bzh>
Tested-by: Jenkins Job builder account <agl-jobbuilder@automotivelinux.org>
ci-image-boot-test: Jenkins Job builder account <agl-jobbuilder@automotivelinux.org>

meta-agl-distro/conf/distro/include/aarch64-tune.inc [new file with mode: 0644]
meta-agl-distro/conf/distro/include/arm-default-tune.inc [deleted file]
meta-agl-distro/conf/distro/include/arm-tune.inc [new file with mode: 0644]
meta-agl-distro/conf/distro/include/x86_64-tune.inc [new file with mode: 0644]
meta-agl-distro/conf/distro/poky-agl.conf
templates/base/bblayers.conf.sample

diff --git a/meta-agl-distro/conf/distro/include/aarch64-tune.inc b/meta-agl-distro/conf/distro/include/aarch64-tune.inc
new file mode 100644 (file)
index 0000000..a2a308f
--- /dev/null
@@ -0,0 +1,13 @@
+# DEFAULTTUNE overrides for AGL on aarch64
+
+# We should not need the tuning include below as the BSP should include the right set already.
+# A double inclusion would produce a warning. This include line is just for reference
+# include conf/machine/include/arm/arch-armv8.inc
+
+DEFAULTTUNE = "aarch64"
+# not yet ready
+#QB_SYSTEM_NAME ?= "qemu-system-aarch"
+#QB_DEFAULT_KERNEL ?= "zImage"
+#QB_DEFAULT_FSTYPE ?= "ext4"
+#QB_MACHINE ?= "-machine foo"
+#QB_CPU ?= "-cpu bar"
diff --git a/meta-agl-distro/conf/distro/include/arm-default-tune.inc b/meta-agl-distro/conf/distro/include/arm-default-tune.inc
deleted file mode 100644 (file)
index 5a6f44f..0000000
+++ /dev/null
@@ -1,18 +0,0 @@
-def arm_tune_handler(d):
-    features = d.getVar('TUNE_FEATURES', True).split()
-    if 'armv7a' in features or 'armv7ve' in features:
-        tune = 'armv7athf'
-        if 'bigendian' in features:
-            tune += 'b'
-        if 'vfpv3' in features:
-            tune += '-vfpv3'
-        if 'vfpv3d16' in features:
-            tune += '-vfpv3d16'
-        if 'neon' in features:
-            tune += '-neon'
-        if 'vfpv4' in features:
-            tune += '-vfpv4'
-    else:
-        tune = d.getVar('DEFAULTTUNE', True)
-    return tune
-DEFAULTTUNE_agl := "${@arm_tune_handler(d)}"
diff --git a/meta-agl-distro/conf/distro/include/arm-tune.inc b/meta-agl-distro/conf/distro/include/arm-tune.inc
new file mode 100644 (file)
index 0000000..5aebd53
--- /dev/null
@@ -0,0 +1,14 @@
+# DEFAULTTUNE overrides for AGL on ARM 32bit
+
+# We should not need the tuning include below as the BSP should include the right set already.
+# A double inclusion would produce a warning. This include line is just for reference
+#   include conf/machine/include/arm/arch-armv7ve.inc
+# medium profile boards need to
+#   include conf/machine/include/arch/arm-armv7-a.inc
+
+DEFAULTTUNE = "${@bb.utils.contains('DISTRO_FEATURES', 'agl-medium-arm-compiler', 'armv7athf-neon', 'armv7vethf-neon-vfpv4', d)}"
+QB_SYSTEM_NAME ?= "qemu-system-arm"
+QB_DEFAULT_KERNEL ?= "zImage"
+QB_DEFAULT_FSTYPE ?= "ext4"
+QB_MACHINE ?= "${@bb.utils.contains('DISTRO_FEATURES', 'agl-medium-arm-compiler', '-machine vexpress-a9', '-machine vexpress-a15', d)}"
+QB_CPU ?= "${@bb.utils.contains('DISTRO_FEATURES', 'agl-medium-arm-compiler', '-cpu cortex-a9', '-cpu cortex-a15', d)}"
diff --git a/meta-agl-distro/conf/distro/include/x86_64-tune.inc b/meta-agl-distro/conf/distro/include/x86_64-tune.inc
new file mode 100644 (file)
index 0000000..f1ce979
--- /dev/null
@@ -0,0 +1,54 @@
+# DEFAULTTUNE overrides for AGL on x86-64
+
+# We should not need the tuning include below as the BSP should include the right set already.
+# A double inclusion would produce a warning. This include line is just for reference
+#include conf/machine/include/tune-corei7.inc
+DEFAULTTUNE = "corei7-64"
+
+# shortened copy of tune-corei7.inc due to bug in inclusion for tune-core2.inc
+# TUNE_ARCH is using .= x86-64 , if done twice, you get x86-64x86-64 as TUNE_ARCH :/
+# we should have at least the core2 tunings by default (=qemux86-64)
+
+# Extra tune features
+TUNEVALID[corei7] = "Enable corei7 specific processor optimizations"
+TUNE_CCARGS = "${@bb.utils.contains('TUNE_FEATURES', 'corei7', ' -march=corei7 -mtune=corei7 -mfpmath=sse -msse4.2', '', d)}"
+
+# Extra tune selections
+AVAILTUNES += "corei7-32"
+TUNE_FEATURES_tune-corei7-32 = "${TUNE_FEATURES_tune-x86} corei7"
+BASE_LIB_tune-corei7-32 = "lib"
+TUNE_PKGARCH_tune-corei7-32 = "corei7-32"
+PACKAGE_EXTRA_ARCHS_tune-corei7-32 = "${PACKAGE_EXTRA_ARCHS_tune-core2-32} corei7-32"
+QEMU_EXTRAOPTIONS_corei7-32 = " -cpu Nehalem,check=false"
+QB_CPU_corei7-32 = "-cpu Nehalem,check=false"
+QB_MACHINE_corei7-32 = "-machine q35"
+
+AVAILTUNES += "corei7-64"
+TUNE_FEATURES_tune-corei7-64 = "${TUNE_FEATURES_tune-x86-64} corei7"
+BASE_LIB_tune-corei7-64 = "lib64"
+TUNE_PKGARCH_tune-corei7-64 = "corei7-64"
+PACKAGE_EXTRA_ARCHS_tune-corei7-64 = "${PACKAGE_EXTRA_ARCHS_tune-core2-64} corei7-64"
+QEMU_EXTRAOPTIONS_corei7-64 = " -cpu Nehalem,check=false"
+QB_CPU_corei7-64 = " -cpu Nehalem,check=false"
+QB_MACHINE_corei7-64 = "-machine q35"
+
+AVAILTUNES += "corei7-64-x32"
+TUNE_FEATURES_tune-corei7-64-x32 = "${TUNE_FEATURES_tune-x86-64-x32} corei7"
+BASE_LIB_tune-corei7-64-x32 = "libx32"
+TUNE_PKGARCH_tune-corei7-64-x32 = "corei7-64-x32"
+PACKAGE_EXTRA_ARCHS_tune-corei7-64-x32 = "${PACKAGE_EXTRA_ARCHS_tune-core2-64-x32} corei7-64-x32"
+QEMU_EXTRAOPTIONS_corei7-64-x32 = " -cpu Nehalem,check=false"
+QB_CPU_corei7-64-x32 = "-cpu Nehalem,check=false"
+QB_MACHINE_corei7-64-x32 = "-machine q35"
+
+TUNE_ARCH = "${@bb.utils.contains('TUNE_FEATURES', 'm64', '${X86ARCH64}', '' ,d)}"
+
+# Bump qemux86-64 up to corei7
+AVAILTUNES += "qemux86-64"
+TUNE_FEATURES_tune-qemux86-64 = "${TUNE_FEATURES_tune-x86-64} corei7"
+BASE_LIB_tune-qemux86-64 = "lib64"
+TUNE_PKGARCH_tune-qemux86-64 = "corei7-64"
+PACKAGE_EXTRA_ARCHS_tune-qemux86-64 = "${PACKAGE_EXTRA_ARCHS_tune-core2-64} corei7-64"
+QEMU_EXTRAOPTIONS_qemux86-64 = " -cpu Nehalem,check=false"
+QB_CPU_qemux86-64 = " -cpu Nehalem,check=false"
+QB_MACHINE_qemux86-64 = "-machine q35"
index fae35c6..93e89af 100644 (file)
@@ -88,8 +88,20 @@ SECURITY_CFLAGS_pn-qtwebengine = "${SECURITY_NO_PIE_CFLAGS}"
 #default: USER_CLASSES ?= "buildstats image-mklibs image-prelink"
 USER_CLASSES = "buildstats image-mklibs"
 
-# weak 'default value' assignment for a DEFAULTTUNE
-DEFAULTTUNE_arm ??= "armv7athf-neon"
+# AGL uses 4 optimization levels
+# 2 for ARM 32bit 
+#   - a high and a medium setting for the CCARGS
+#   - the high setting is default (needs >= cortex-a15)
+#   - the medium setting is enabled with: DISTRO_FEATURES_append = " agl-medium-arm-compiler "
+# 1 for ARM 64bit / AARCH64
+# 1 for x86-64
+require conf/distro/include/${TARGET_ARCH}-tune.inc
+
+# Generic qemu and qemuboot (runqemu) enhancements
+# check qemuboot.bbclass
+# - use 1G RAM by default
+QB_MEM ?= "-m 1024"
 
 # temporary fix for meta-updater (to be removed 2017-05-01)
 IMAGE_INSTALL_remove = "rvi-sota-client"
+
index 12f750c..478523b 100644 (file)
@@ -15,9 +15,10 @@ METADIR  := "${@os.path.abspath('##OEROOT##/..')}"
 YOCTO_LAYERS = " \
   ${METADIR}/poky/meta \
   ${METADIR}/poky/meta-poky \
-  ${METADIR}/poky/meta-yocto-bsp \
   "
-
+#  this is added for the boards where necessary, not globally
+#  ${METADIR}/poky/meta-yocto-bsp \
+#
 # These are the AGL CORE Layers that make up the basis
 # - they create a minimal bootable filesystem
 #   with some automotive tools/libraries