On 23 October 2014 10:44, Yvan Roux yvan.roux@linaro.org wrote:
Hi,
after the recent lkml thread on blacklisting some GCC versions (see below) and the issue in identifying accurately our releases, I propose to add some Linaro specific macros in our branches (i.e this patch will not go upstream) to be able to check the Linaro version at preprocessor time. It will not solve the kernel issue with 4.8.N but hopefully help if such issues happen again the the futur.
http://thread.gmane.org/gmane.linux.ports.arm.omap/119412
What GCC has for the moment is 3 macros __GNUC__, __GNUC_MINOR__ and __GNUC_PATCHLEVEL__ that are filled by parsing version number contained in BASE-VER file, for instance on our 4.9 branch:
__GNUC__ = 4 __GNUC_MINOR__ = 9 __GNUC_PATCHLEVEL__ = 2
In our branches, the Linaro version number is in the LINARO-VERSION file and has this format:
At release point : 4.9-2014.10 Head of our branch: 4.9-2014.10-1~dev
I want your (the team and users) point of view on the macros we need to create from it. Here is the options I see:
A - Be fully Linaro consistent:
__LINARO_MAJOR__ = 4 __LINARO_MINOR__ = 9 __LINARO_YEAR__ = 2014 __LINARO_MONTH__ = 10 __LINARO_SPIN__ = 0 or N __LINARO_STATE = 0 for release or 1 for dev
B - Only give information that are not in the __GNUC* macros:
__LINARO_YEAR__ = 2014 __LINARO_MONTH__ = 10 __LINARO_SPIN__ = 0 or N __LINARO_STATE = 0 for release or 1 for dev
C - Be more concise:
__LINARO_VERSION__ = 201410 __LINARO_SPIN__ = 0 or N __LINARO_STATE = 0 for release or 1 for dev
D - Even more:
__LINARO_VERSION__ = 201410N (with N the spin number) __LINARO_STATE = 0 for release or 1 for dev
E - Hardcore conciseness:
__LINARO__ = 201410NM (N = SPIN M = state)
F - One of the previous ones without STATE information.
G - One of the previous ones without SPIN information.
Do you think it is something we need ?
Do we already have that kind of macros in some products (binutils, gdb, glibc, ...) ?
What option do you prefer ?
My own feeling is that C+F is sufficient as STATE information is useless for releases and I don't think dev builds checking have to be used in another project. But SPIN information can be useful has we're doing respin because an outstanding issue/improvement has to be fixed/added to the current release, thus it is the kind of thing you want to check if the version of the compiler you are using contains.
Personally I think I would go D+F, but with two digits for the spin:
__LINARO_VERSION__ = 201410NN (with NN the spin number)
I guess that could be misread as a date though. :-/
So maybe C+F is better. I agree that the dev/release state should not matter as dev versions do not really exist outside of our own machines.