From 4f3edb6da405ffff957d6f194bc7db7bdd9f1463 Mon Sep 17 00:00:00 2001 From: Mark Hatle Date: Mon, 24 Feb 2020 12:14:48 -0800 Subject: xlnx-compatible-os.bbclass: Class to allow recipes to list OS compatibility Following the example of base.bbclass in OE-Core, a new COMPATIBLE_OS variable is defined. Similar to COMPATIBLE_MACHINE, it is a regex that can be used to declare TARGET_OS string compatibility on a per-recipe basis. Either the distro configuration or the recipes themselves will need to inherit this class. By default the class assumes we're building a Linux based system, and thus any recipe who has not declared compatibility is compatible with Linux. The default compatible field was copied from bitbake.conf to ensure there are no surprised. Additionally, enable the usage of this class throughout meta-xilinx-standalone layer. Signed-off-by: Mark Hatle --- meta-xilinx-standalone/classes/esw.bbclass | 5 ++++- .../classes/xlnx-compatible-os.bbclass | 16 ++++++++++++++++ meta-xilinx-standalone/conf/distro/xilinx-standalone.inc | 8 ++++++++ .../recipes-bsp/device-tree/device-tree.bbappend | 2 ++ .../recipes-bsp/hdf/external-hdf.bbappend | 1 + .../recipes-core/meta/meta-toolchain.bbappend | 2 ++ .../recipes-core/newlib/libgloss_3.1.0.bbappend | 3 +++ .../recipes-core/newlib/newlib_3.1.0.bbappend | 2 ++ .../packagegroup-newlib-standalone-sdk-target.bb | 2 ++ .../recipes-devtools/gcc/gcc-runtime_%.bbappend | 2 ++ .../recipes-devtools/gcc/gcc-source_9.%.bbappend | 2 ++ .../recipes-devtools/gcc/libgcc_%.bbappend | 2 ++ .../recipes-devtools/qemu/qemuwrapper-cross_1.0.bbappend | 1 + .../recipes-kernel/linux/linux-dummy.bbappend | 1 + 14 files changed, 48 insertions(+), 1 deletion(-) create mode 100644 meta-xilinx-standalone/classes/xlnx-compatible-os.bbclass create mode 100644 meta-xilinx-standalone/recipes-bsp/hdf/external-hdf.bbappend create mode 100644 meta-xilinx-standalone/recipes-devtools/qemu/qemuwrapper-cross_1.0.bbappend create mode 100644 meta-xilinx-standalone/recipes-kernel/linux/linux-dummy.bbappend diff --git a/meta-xilinx-standalone/classes/esw.bbclass b/meta-xilinx-standalone/classes/esw.bbclass index 65817825..4a815eb6 100644 --- a/meta-xilinx-standalone/classes/esw.bbclass +++ b/meta-xilinx-standalone/classes/esw.bbclass @@ -1,4 +1,4 @@ -inherit pkgconfig cmake yocto-cmake-translation +inherit pkgconfig cmake LICENSE = "Proprietary" LICFILENAME = "license.txt" @@ -37,6 +37,9 @@ COMPATIBLE_MACHINE_cortexr5-zynqmp = "cortexr5-zynqmp" COMPATIBLE_HOST_cortexa72-versal = "aarch64.*-elf" COMPATIBLE_MACHINE_cortexa72-versal = "cortexa72-versal" +COMPATIBLE_OS = "elf" +COMPATIBLE_OS_arm = "eabi" + DTBFILE_microblaze-pmu ?= "${RECIPE_SYSROOT}/boot/devicetree/system-top.dtb" DTBFILE_microblaze-plm ?= "${RECIPE_SYSROOT}/boot/devicetree/system-top.dtb" DTBFILE_cortexa53-zynqmp ?= "${RECIPE_SYSROOT}/boot/devicetree/system-top.dtb" diff --git a/meta-xilinx-standalone/classes/xlnx-compatible-os.bbclass b/meta-xilinx-standalone/classes/xlnx-compatible-os.bbclass new file mode 100644 index 00000000..4b06ddd8 --- /dev/null +++ b/meta-xilinx-standalone/classes/xlnx-compatible-os.bbclass @@ -0,0 +1,16 @@ +# We assume everything is Linux compatible, deviations to this +# must define their own compatible OS +COMPATIBLE_OS ?= "linux${LIBCEXTENSION}${ABIEXTENSION}" + +python() { + # Only do this check for target recipes + if d.getVar('CLASSOVERRIDE') != "class-target": + return + + need_os = d.getVar('COMPATIBLE_OS') + if need_os: + import re + target_os = d.getVar('TARGET_OS') + if not re.match(need_os, target_os): + raise bb.parse.SkipRecipe("incompatible with os %s (not in COMPATIBLE_OS '%s')" % (target_os, need_os)) +} diff --git a/meta-xilinx-standalone/conf/distro/xilinx-standalone.inc b/meta-xilinx-standalone/conf/distro/xilinx-standalone.inc index 4202bf6f..1be2b647 100644 --- a/meta-xilinx-standalone/conf/distro/xilinx-standalone.inc +++ b/meta-xilinx-standalone/conf/distro/xilinx-standalone.inc @@ -23,3 +23,11 @@ INHERIT += "buildhistory" # Cortex R5 requires an additional cflag to be passed for compatibility with the embeddedsw TUNE_CCARGS .= "${@bb.utils.contains('TUNE_FEATURES', 'cortexr5', ' -DARMR5', '', d)}" + +INHERIT += "xlnx-compatible-os" + +# Clear defaults +DISTRO_FEATURES_BACKFILL_xilinx-standalone = "" +VIRTUAL-RUNTIME_init_manager_xilinx-standalone = "" + +PREFERRED_PROVIDER_virtual/kernel = "linux-dummy" diff --git a/meta-xilinx-standalone/recipes-bsp/device-tree/device-tree.bbappend b/meta-xilinx-standalone/recipes-bsp/device-tree/device-tree.bbappend index 69b1ff5f..970f97fc 100644 --- a/meta-xilinx-standalone/recipes-bsp/device-tree/device-tree.bbappend +++ b/meta-xilinx-standalone/recipes-bsp/device-tree/device-tree.bbappend @@ -4,6 +4,8 @@ COMPATIBLE_MACHINE_microblaze-pmu = ".*" COMPATIBLE_MACHINE_microblaze-plm = ".*" COMPATIBLE_MACHINE_cortexa72-versal = ".*" +COMPATIBLE_OS_xilinx-standalone = "${TARGET_OS}" + REPO_cortexa53-zynqmp = "git://gitenterprise.xilinx.com/decoupling/device-tree-xlnx;protocol=https" REPO_cortexr5-zynqmp = "git://gitenterprise.xilinx.com/decoupling/device-tree-xlnx;protocol=https" REPO_microblaze-pmu = "git://gitenterprise.xilinx.com/decoupling/device-tree-xlnx;protocol=https" diff --git a/meta-xilinx-standalone/recipes-bsp/hdf/external-hdf.bbappend b/meta-xilinx-standalone/recipes-bsp/hdf/external-hdf.bbappend new file mode 100644 index 00000000..0efa796c --- /dev/null +++ b/meta-xilinx-standalone/recipes-bsp/hdf/external-hdf.bbappend @@ -0,0 +1 @@ +COMPATIBLE_OS_xilinx-standalone = "${TARGET_OS}" diff --git a/meta-xilinx-standalone/recipes-core/meta/meta-toolchain.bbappend b/meta-xilinx-standalone/recipes-core/meta/meta-toolchain.bbappend index 0b4812d0..cd8638ef 100644 --- a/meta-xilinx-standalone/recipes-core/meta/meta-toolchain.bbappend +++ b/meta-xilinx-standalone/recipes-core/meta/meta-toolchain.bbappend @@ -1 +1,3 @@ +COMPATIBLE_OS_xilinx-standalone = "${TARGET_OS}" + TOOLCHAIN_TARGET_TASK_xilinx-standalone = "${@multilib_pkg_extend(d, 'packagegroup-newlib-standalone-sdk-target')}" diff --git a/meta-xilinx-standalone/recipes-core/newlib/libgloss_3.1.0.bbappend b/meta-xilinx-standalone/recipes-core/newlib/libgloss_3.1.0.bbappend index c5dda818..aaf4b77f 100644 --- a/meta-xilinx-standalone/recipes-core/newlib/libgloss_3.1.0.bbappend +++ b/meta-xilinx-standalone/recipes-core/newlib/libgloss_3.1.0.bbappend @@ -1,3 +1,6 @@ +COMPATIBLE_OS_xilinx-standalone = "elf" +COMPATIBLE_OS_arm_xilinx-standalone = "eabi" + # When building multiple, we need to depend on the multilib newlib DEPENDS_append_xilinx-standalone = " ${MLPREFIX}newlib" diff --git a/meta-xilinx-standalone/recipes-core/newlib/newlib_3.1.0.bbappend b/meta-xilinx-standalone/recipes-core/newlib/newlib_3.1.0.bbappend index d57f97b1..4e2533d0 100644 --- a/meta-xilinx-standalone/recipes-core/newlib/newlib_3.1.0.bbappend +++ b/meta-xilinx-standalone/recipes-core/newlib/newlib_3.1.0.bbappend @@ -1,3 +1,5 @@ +COMPATIBLE_OS_xilinx-standalone = "elf" +COMPATIBLE_OS_arm_xilinx-standalone = "eabi" EXTRA_OECONF_append_xilinx-standalone = " \ --enable-newlib-io-c99-formats \ diff --git a/meta-xilinx-standalone/recipes-core/packagegroups/packagegroup-newlib-standalone-sdk-target.bb b/meta-xilinx-standalone/recipes-core/packagegroups/packagegroup-newlib-standalone-sdk-target.bb index d943938b..6f06f61a 100644 --- a/meta-xilinx-standalone/recipes-core/packagegroups/packagegroup-newlib-standalone-sdk-target.bb +++ b/meta-xilinx-standalone/recipes-core/packagegroups/packagegroup-newlib-standalone-sdk-target.bb @@ -1,3 +1,5 @@ +COMPATIBLE_OS_xilinx-standalone = "${TARGET_OS}" + SUMMARY = "Target packages for the standalone SDK" PACKAGE_ARCH = "${TUNE_PKGARCH}" diff --git a/meta-xilinx-standalone/recipes-devtools/gcc/gcc-runtime_%.bbappend b/meta-xilinx-standalone/recipes-devtools/gcc/gcc-runtime_%.bbappend index 0d25e066..d4220640 100644 --- a/meta-xilinx-standalone/recipes-devtools/gcc/gcc-runtime_%.bbappend +++ b/meta-xilinx-standalone/recipes-devtools/gcc/gcc-runtime_%.bbappend @@ -1,3 +1,5 @@ +COMPATIBLE_OS_xilinx-standalone = "${TARGET_OS}" + # Copy of gcc-xilinx-standalone.inc, but with _class-target added LINKER_HASH_STYLE_xilinx-standalone_class-target = "" SYMVERS_CONF_xilinx-standalone_class-target = "" diff --git a/meta-xilinx-standalone/recipes-devtools/gcc/gcc-source_9.%.bbappend b/meta-xilinx-standalone/recipes-devtools/gcc/gcc-source_9.%.bbappend index 24abdc11..284c6a88 100644 --- a/meta-xilinx-standalone/recipes-devtools/gcc/gcc-source_9.%.bbappend +++ b/meta-xilinx-standalone/recipes-devtools/gcc/gcc-source_9.%.bbappend @@ -1,3 +1,5 @@ +COMPATIBLE_OS_xilinx-standalone = "${TARGET_OS}" + # Add MicroBlaze Patches (only when using MicroBlaze) FILESEXTRAPATHS_append_microblaze_xilinx-standalone := "${THISDIR}/gcc-9:" SRC_URI_append_microblaze_xilinx-standalone = " \ diff --git a/meta-xilinx-standalone/recipes-devtools/gcc/libgcc_%.bbappend b/meta-xilinx-standalone/recipes-devtools/gcc/libgcc_%.bbappend index e6801c2f..a2062f6f 100644 --- a/meta-xilinx-standalone/recipes-devtools/gcc/libgcc_%.bbappend +++ b/meta-xilinx-standalone/recipes-devtools/gcc/libgcc_%.bbappend @@ -1,3 +1,5 @@ +COMPATIBLE_OS_xilinx-standalone = "${TARGET_OS}" + python do_multilib_install_xilinx-standalone_class-target () { pass } diff --git a/meta-xilinx-standalone/recipes-devtools/qemu/qemuwrapper-cross_1.0.bbappend b/meta-xilinx-standalone/recipes-devtools/qemu/qemuwrapper-cross_1.0.bbappend new file mode 100644 index 00000000..0efa796c --- /dev/null +++ b/meta-xilinx-standalone/recipes-devtools/qemu/qemuwrapper-cross_1.0.bbappend @@ -0,0 +1 @@ +COMPATIBLE_OS_xilinx-standalone = "${TARGET_OS}" diff --git a/meta-xilinx-standalone/recipes-kernel/linux/linux-dummy.bbappend b/meta-xilinx-standalone/recipes-kernel/linux/linux-dummy.bbappend new file mode 100644 index 00000000..0efa796c --- /dev/null +++ b/meta-xilinx-standalone/recipes-kernel/linux/linux-dummy.bbappend @@ -0,0 +1 @@ +COMPATIBLE_OS_xilinx-standalone = "${TARGET_OS}" -- cgit v1.2.3-54-g00ecf