Re: [PATCH] m32r: set CHECKFLAGS properly

Al Viro
2005-09-27T07:10:29Z

On Tue, Sep 27, 2005 at 03:13:01PM +0900, Hirokazu Takata wrote:
> Please don't specify __BIG_ENDIAN__. ;-)
> We have supported both big- and little-endian for the m32r kernel.
> I hope it will be kept unconditional.
>
> Now, the endianness is to be determined by a (cross)compiler:
> - For the big-endian, a compiler (m32r-linux-gcc or m32r-linux-gnu-gcc)
> provides a predefined macro __BIG_ENDIAN__.
> - For little-endian, a compiler (m32rle-linux-gcc or m32rle-linux-gnu-gcc)
> provides a predefined macro __LITTLE_ENDIAN__.
>
> Here is a modified patch.
>
> Thank you.

You do realize that this way sparse will get neither? It does not
pick predefined symbols from gcc; thus the -D<your_arch>, etc.

One solution would be to really run cross-gcc on something like

#define HAVE(x) -D##x=x
#ifdef __LITTLE_ENDIAN__
HAVE(__LITTLE_ENDIAN__)
#endif
#ifdef __BIG_ENDIAN__
HAVE(__BIG_ENDIAN__)
#endif

with grep -- -D on the output and have it added to CHECKFLAGS. The only
problem being, for a generic solution we want to make sure that this
sucker is run _after_ we have decided on gcc arguments.

Note that it's potentially more than just m32r - e.g. s390 wants
__s390x__ added only for case of 64bit target. Similar for powerpc
if these get merged, etc.

Sam, any help in that area? Ideally we want to have something equivalent
to
PREDEFINED_WE_MIGHT_WANT = __m32r__ __LITTLE_ENDIAN__ __BIG_ENDIAN__
and CHECKFLAGS done from that - basically, the subset of cross-gcc
predefined symbols reproduced for sparse. Ideally with -m64 added
if we have sizeof(long) == 8 on target, to take care of all that
crap in one go.

Suggestions?