Hi Andre,

> On Mar 19, 2018, at 5:32 PM, Andre McCurdy <armccu...@gmail.com> wrote:
> 
> On Mon, Mar 19, 2018 at 9:49 AM, Steve Pavao <ste...@korgrd.com> wrote:
>> What’s the recommended way to be able to propogate target-specific 
>> compile-time CPU tune information to affect the build of a source file in my 
>> own custom layer?
>> 
>> For example, if I’m building for an arm6-based target, I’d like to be able 
>> to have the __ARM_ARCH_6__ symbol be available when the Yocto system builds 
>> my custom layer.  The BSP for such a target obviously defines this symbol 
>> when building its files for such a target.  Is there an easy way to 
>> propagate this information to my own custom layer, to affect my own sources? 
>>  Maybe my recipe needs to include certain conf files from other layers such 
>> as meta or the BSP layer?
> 
> This kind of macro is typically defined internally by gcc, depending
> on the -mcpu etc options passed on the gcc command line, ie options
> which are included in the ${CC} definition setup by OE.
> 
> Therefore all you normally need to do is ensure that the Makefiles etc
> for the components in your custom layer all correctly respect OE's
> definition of ${CC}.
> 
> A typical bug in handcrafted Makefiles is to force CC to (e.g. CC =
> "$(CROSS_COMPILE)gcc") and lose the original value passed via the
> environment.
> 
>> Currently, I notice that architecture-level symbols are available to my 
>> custom layer at compile time, such as __aarch64_ and __arm__, but not CPU 
>> tune information, such as __ARM_ARCH_6__.
> 
> The exact set of macros defined by gcc will vary depending on exactly
> which ARMv6 CPU you are targeting (and to some extent, which version
> of gcc you are using). If you have code which needs to be enabled for
> any ARMv6 target then you may have to test multiple macros. For
> example see the way in which openssl defines __ARM_ARCH__
> 
>  https://github.com/openssl/openssl/blob/master/crypto/arm_arch.h 
> <https://github.com/openssl/openssl/blob/master/crypto/arm_arch.h>

Thank you very much for your insight, Andre !

I think I may have discovered a specific situation which is causing the problem 
to occur for me.  It seems it occurs because I am trying to build a kernel 
module under the recipes-kernel directory in my custom layer.   A colleague 
pointed out to me that meta/classes/module.bbclass explicitly unsets CFLAGS and 
a bunch of other macros in this situation.

Maybe I need to put in some custom shell syntax in my recipe, to export 
__ARM_ARCH_6__ or to directly define the compiler macro when needed, based on 
the value of the TARGET variable.  I wonder if there is a better recommended 
solution than this, though.

BTW, my kernel module contains conditionally-compiled code for initializing the 
ARM PMU correctly for each CPU case.

- Steve



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

Reply via email to