On 3/26/13 1:12 AM, Sipke Vriend wrote:
Hi all,

With help from Khem's email we have been able to perform 'some' sanity
checking against the microblaze architecture.

The TUNECONFLICTS assist us in ensuring conflicting features are flagged during
the bitbake sanity check, however because Microblaze's features are
independently configurable, we would like to do some additional 'sanity
checking'.

Using a hierarchical method of features, like in arm, is not really viable for
Microblaze, so if there are alternate existing ways we would like to use them
rather than creating localised bb classes to do this for us.

1. Is there a way similar to TUNECONFLICTS for "paired" features, i.e. if one
    feature exists another must also?
    (Certain microblaze versions must have a set of features if a particular
    feature is enabled).

The values in the conflicts can be adjusted programatically. It may be what you need in this case. Use inline python such as:

TUNECONFLICTS[foo] = "${@bb.utils.contains("TUNE_FEATURES", "some_feature", "conflict_if_set", "conflict_if_not_set", d)}"

2. Is there a way to define that certain features must exist, other than
    defining multiple machines   (e.g. in endian case we would like to ensure 
one
    of them is picked)?

You can add a bit of python code that can again use the contains item. The code may need to be in a custom class though to execute.

python() {
    if <your arch selected>:
        if <no endian selected>:
            bb.fatal("You must select an endian")
}

3. Additionally (or instead of 1 and 2) is there a way we can introduce/append a
    'sanity check' into the bitbake layer model - i.e. inform bitbake to
    run 'our complex sanity' check?

See above.. it will require a custom class.. you can make your tunes/arch file include the class using INHERIT += "your_class.bbclass".

As a continuation from my last email, the following is a list of possible 
Microblaze
architecture features, which can be supplied in the machine and/or local.conf
file. Lack of  a hardware feature means the soft version is used.

big-endian/little-endian
vXXX where XXX is a microblaze version (like v830)
barrel-shift
multiply-high multiply-low
pattern-compare
reorder
divide-hard
fpu-hard fpu-hard-extended

Additionally we plan to modify the package name slightly, e.g.
microblazeel-v840-bs-ml-div-fe-cmp-re
microblazeel-v830-bs-mh
microblazeel-v830

I think it's a good idea to have some standard tunes with functionality that is reasonable for a testable demo environment. If the developers want to tailor it further, they should be able to either by manually selecting the features or creating a custom tune file.

This was the intent when the original tune system was introduced. There was no way we would know every possible combination, so making a way the developer could specify it was the best answer we could come up with. The TUNE_FEATURES adds the ability for the compiler and other packages to dynamically switch based on whatever the developer has configured. It can be used for blacklisting code, changing optimizations, etc.

--Mark

Regards
Sipke

On Mar 20, 2013, at 4:44 PM, Khem Raj <mailto:raj.k...@gmail.com> wrote:


On Mar 19, 2013, at 9:08 PM, Sipke Vriend <sipke.vri...@xilinx.com> wrote:


Hi all,

We are seeking some feedback regarding common practices for defining 
TUNE_PKGARCH within Yocto.


usually its dictated by architecture, ABI and other processor features. the 
current tune files have good ways to express the relationships
you would translate the below table into set of TUNE_FEATURES and define 
PACKAGE_EXTRA_ARCHS if you need to express compatibility between different tunes

Look at arm tunes they are the best examples of complexity


We need to define a unique TUNE_PKGARCH for the possible configuration of 
Microblaze architecture.
Our proposal is short unique string for each HW feature which is enabled in 
Microblaze.

For 'extensive hardware usage' architecture, this would result in something 
like:
mbebv730-bs-mh-div-fb-cmp
mbebv840-bs-mh-div-fb-cmp-re
mbelv840-bs-ml-div-fe-cmp-re
and for architecture with no 'hardware usage':
mbebv730
mbebv840
mbelv840

The table below details the unique strings and their relation to compiler and 
hardware flags, and a couple of versions of Microblaze architecture.
(If this table does not show cleanly switch to fixed width font)
-------------------
String Compiler Flag        Hardware Flag         CPU versions
       -mcpu=vX.YY.Z                              v7.30.a v8.40.a

mbel   -mlittle-endian      C_ENDIANNESS (LITTLE) -       o
mbeb   -mbig-endian         C_ENDIANNESS (BIG)    x       o

bs     -mxl-barrel-shift    C_USE_BARREL          o       o

ml     -mnoxl-soft-mul      C_USE_HW_MUL (MUL32)  o       o
mh     -mxl-multiply-high   C_USE_HW_MUL (MUL64)  o       o

div    -mnoxl-soft-div      C_USE_DIV             o       o

fb     -mhard-float         C_USE_FPU (BASIC)     o       o
fe     -mxl-float-convert   C_USE_FPU (EXTENDED)  o       o
fe     -mxl-float-sqrt      C_USE_FPU (EXTENDED)  o       o

cmp   -mxl-pattern-compare  C_USE_PCMP_INSTR      o       o

re    -mxl-reorder          C_USE_REORDER_INSTR   -       o

Where '-' means unavailable 'x' is only option and 'o' is optional.
-------------------



you can express this with TUNECONFLICTS and TUNEVALID

and may be create heirarchy of tune files which builds upon common tunings.


Note the table rows have hardware feature 'groupings', which means only one of 
the strings should be present within the TUNE_PKGARCH. For example the Floating 
Point Unit hardware feature can be defined by either fb (for basic mode) or fe 
(for extended mode).

Regards
Sipke




_______________________________________________
yocto mailing list
yocto@yoctoproject.org
https://lists.yoctoproject.org/listinfo/yocto




_______________________________________________
yocto mailing list
yocto@yoctoproject.org
https://lists.yoctoproject.org/listinfo/yocto


_______________________________________________
yocto mailing list
yocto@yoctoproject.org
https://lists.yoctoproject.org/listinfo/yocto

Reply via email to