From e8aff1ac9e064f41b8eac2fef05ae1db494ee41b Mon Sep 17 00:00:00 2001 From: Jan-Simon Möller Date: Wed, 26 Apr 2017 14:13:08 +0200 Subject: Enforce unified tunings across all target boards of AGL MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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 Reviewed-on: https://gerrit.automotivelinux.org/gerrit/9299 Reviewed-by: Martin Kelly ci-image-build: Jenkins Job builder account Reviewed-by: Stéphane Desneux Tested-by: Jenkins Job builder account ci-image-boot-test: Jenkins Job builder account --- .../conf/distro/include/aarch64-tune.inc | 13 ++++++ .../conf/distro/include/arm-default-tune.inc | 18 -------- meta-agl-distro/conf/distro/include/arm-tune.inc | 14 ++++++ .../conf/distro/include/x86_64-tune.inc | 54 ++++++++++++++++++++++ meta-agl-distro/conf/distro/poky-agl.conf | 16 ++++++- templates/base/bblayers.conf.sample | 5 +- 6 files changed, 98 insertions(+), 22 deletions(-) create mode 100644 meta-agl-distro/conf/distro/include/aarch64-tune.inc delete mode 100644 meta-agl-distro/conf/distro/include/arm-default-tune.inc create mode 100644 meta-agl-distro/conf/distro/include/arm-tune.inc create mode 100644 meta-agl-distro/conf/distro/include/x86_64-tune.inc 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 index 000000000..a2a308fe0 --- /dev/null +++ b/meta-agl-distro/conf/distro/include/aarch64-tune.inc @@ -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 index 5a6f44fe5..000000000 --- a/meta-agl-distro/conf/distro/include/arm-default-tune.inc +++ /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 index 000000000..5aebd53be --- /dev/null +++ b/meta-agl-distro/conf/distro/include/arm-tune.inc @@ -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 index 000000000..f1ce97938 --- /dev/null +++ b/meta-agl-distro/conf/distro/include/x86_64-tune.inc @@ -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" diff --git a/meta-agl-distro/conf/distro/poky-agl.conf b/meta-agl-distro/conf/distro/poky-agl.conf index fae35c631..93e89afd9 100644 --- a/meta-agl-distro/conf/distro/poky-agl.conf +++ b/meta-agl-distro/conf/distro/poky-agl.conf @@ -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" + diff --git a/templates/base/bblayers.conf.sample b/templates/base/bblayers.conf.sample index 12f750c70..478523b0d 100644 --- a/templates/base/bblayers.conf.sample +++ b/templates/base/bblayers.conf.sample @@ -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 -- cgit 1.2.3-korg