Anders, Have you tried to move pragmas out of the spec file?
I think this (plat header file) is the correct place for the pragmas since those are part of the build system and build systems are implementation specific. ODP API _spec_ does not dictate any build system or compiler, and thus should not contain anything extra for any single build system. A valid implementation could implement everything even in a single file (odp/include/odp_api.h). -Petri From: lng-odp [mailto:lng-odp-boun...@lists.linaro.org] On Behalf Of EXT Savolainen, Petri (Nokia - FI/Espoo) Sent: Friday, April 15, 2016 2:02 PM To: EXT Mike Holmes <mike.hol...@linaro.org>; Maxim Uvarov <maxim.uva...@linaro.org> Cc: lng-odp <lng-odp@lists.linaro.org> Subject: Re: [lng-odp] [API-NEXT PATCHv4] api: make only the API visible Agree, that it gets ugly (for interface specification readability), if GCC pragmas are added into spec header files. Wouldn’t it work the same way if the pragmas are defined where the spec file is included. Namely e.g. here for the barrier: #ifndef ODP_PLAT_BARRIER_H_ #define ODP_PLAT_BARRIER_H_ #ifdef __cplusplus extern "C" { #endif #include <odp/api/std_types.h> #include <odp/api/atomic.h> #include <odp/api/plat/shared_memory_types.h> #include <odp/api/plat/barrier_types.h> if __GNUC__ >= 4 #pragma GCC visibility push(default) #endif #include <odp/api/spec/barrier.h> if __GNUC__ >= 4 #pragma GCC visibility pop #endif #ifdef __cplusplus } #endif #endif -Petri From: lng-odp [mailto:lng-odp-boun...@lists.linaro.org] On Behalf Of EXT Mike Holmes Sent: Friday, April 15, 2016 1:44 PM To: Maxim Uvarov <maxim.uva...@linaro.org<mailto:maxim.uva...@linaro.org>> Cc: lng-odp <lng-odp@lists.linaro.org<mailto:lng-odp@lists.linaro.org>> Subject: Re: [lng-odp] [API-NEXT PATCHv4] api: make only the API visible Maxim it needs to be in the spec, it is the spec that defines the ABI, if you dont do this then everyone implementing will have to manually mark hundreds of other apis as internal rather than we just export the correct list. At least that is my understanding at least. On 15 April 2016 at 06:38, Maxim Uvarov <maxim.uva...@linaro.org<mailto:maxim.uva...@linaro.org>> wrote: Petri, please review this patch. For me it's not clear why it touches include/odp/api/spec files at all. Maxim. On 04/13/16 22:06, Bill Fischofer wrote: Ok, thanks. With that: Reviewed-by: Bill Fischofer <bill.fischo...@linaro.org<mailto:bill.fischo...@linaro.org> <mailto:bill.fischo...@linaro.org<mailto:bill.fischo...@linaro.org>>> On Wed, Apr 13, 2016 at 2:04 PM, Ricardo Salveti <ricardo.salv...@linaro.org<mailto:ricardo.salv...@linaro.org> <mailto:ricardo.salv...@linaro.org<mailto:ricardo.salv...@linaro.org>>> wrote: On Wed, Apr 13, 2016 at 3:51 PM, Bill Fischofer <bill.fischo...@linaro.org<mailto:bill.fischo...@linaro.org> <mailto:bill.fischo...@linaro.org<mailto:bill.fischo...@linaro.org>>> wrote: > On Wed, Apr 13, 2016 at 1:47 PM, Ricardo Salveti > <ricardo.salv...@linaro.org<mailto:ricardo.salv...@linaro.org> <mailto:ricardo.salv...@linaro.org<mailto:ricardo.salv...@linaro.org>>> wrote: >> >> On Wed, Apr 13, 2016 at 2:47 PM, Bill Fischofer >> <bill.fischo...@linaro.org<mailto:bill.fischo...@linaro.org> <mailto:bill.fischo...@linaro.org<mailto:bill.fischo...@linaro.org>>> wrote: >> > >> > On Wed, Apr 13, 2016 at 12:30 PM, Anders Roxell >> > <anders.rox...@linaro.org<mailto:anders.rox...@linaro.org> <mailto:anders.rox...@linaro.org<mailto:anders.rox...@linaro.org>>> >> > wrote: >> >> >> >> Internal functions should not be part of symbols that are visible >> >> outside the library. Using -fvisibility=hidden hides all internal >> >> functions from the public ABI. >> >> >> >> Suggested-by: Ricardo Salveti <ricardo.salv...@linaro.org<mailto:ricardo.salv...@linaro.org> <mailto:ricardo.salv...@linaro.org<mailto:ricardo.salv...@linaro.org>>> >> >> Signed-off-by: Anders Roxell <anders.rox...@linaro.org<mailto:anders.rox...@linaro.org> <mailto:anders.rox...@linaro.org<mailto:anders.rox...@linaro.org>>> >> >> --- >> >> include/odp/api/spec/align.h | 8 ++++++++ >> >> include/odp/api/spec/atomic.h | 8 ++++++++ >> >> include/odp/api/spec/barrier.h | 8 ++++++++ >> >> include/odp/api/spec/buffer.h | 8 ++++++++ >> >> include/odp/api/spec/byteorder.h | 8 ++++++++ >> >> include/odp/api/spec/classification.h | 8 ++++++++ >> >> include/odp/api/spec/compiler.h | 8 ++++++++ >> >> include/odp/api/spec/config.h | 8 ++++++++ >> >> include/odp/api/spec/cpu.h | 8 ++++++++ >> >> include/odp/api/spec/cpumask.h | 8 ++++++++ >> >> include/odp/api/spec/crypto.h | 8 ++++++++ >> >> include/odp/api/spec/debug.h | 8 ++++++++ >> >> include/odp/api/spec/errno.h | 8 ++++++++ >> >> include/odp/api/spec/event.h | 8 ++++++++ >> >> include/odp/api/spec/hash.h | 8 ++++++++ >> >> include/odp/api/spec/hints.h | 8 ++++++++ >> >> include/odp/api/spec/init.h | 8 ++++++++ >> >> include/odp/api/spec/packet.h | 8 ++++++++ >> >> include/odp/api/spec/packet_flags.h | 8 ++++++++ >> >> include/odp/api/spec/packet_io.h | 8 ++++++++ >> >> include/odp/api/spec/packet_io_stats.h | 8 ++++++++ >> >> include/odp/api/spec/pool.h | 8 ++++++++ >> >> include/odp/api/spec/queue.h | 8 ++++++++ >> >> include/odp/api/spec/random.h | 8 ++++++++ >> >> include/odp/api/spec/rwlock.h | 8 ++++++++ >> >> include/odp/api/spec/rwlock_recursive.h | 8 ++++++++ >> >> include/odp/api/spec/schedule.h | 8 ++++++++ >> >> include/odp/api/spec/schedule_types.h | 8 ++++++++ >> >> include/odp/api/spec/shared_memory.h | 8 ++++++++ >> >> include/odp/api/spec/spinlock.h | 8 ++++++++ >> >> include/odp/api/spec/spinlock_recursive.h | 8 ++++++++ >> >> include/odp/api/spec/std_clib.h | 8 ++++++++ >> >> include/odp/api/spec/std_types.h | 8 ++++++++ >> >> include/odp/api/spec/sync.h | 8 ++++++++ >> >> include/odp/api/spec/system_info.h | 8 ++++++++ >> >> include/odp/api/spec/thread.h | 8 ++++++++ >> >> include/odp/api/spec/thrmask.h | 8 ++++++++ >> >> include/odp/api/spec/ticketlock.h | 8 ++++++++ >> >> include/odp/api/spec/time.h | 8 ++++++++ >> >> include/odp/api/spec/timer.h | 8 ++++++++ >> >> include/odp/api/spec/traffic_mngr.h | 8 ++++++++ >> >> include/odp/api/spec/version.h | 8 ++++++++ >> >> platform/Makefile.inc | 1 + >> >> platform/linux-generic/m4/configure.m4 | 12 ++++++++++++ >> >> 44 files changed, 349 insertions(+) >> >> >> >> diff --git a/include/odp/api/spec/align.h >> >> b/include/odp/api/spec/align.h >> >> index 677ff12..027b080 100644 >> >> --- a/include/odp/api/spec/align.h >> >> +++ b/include/odp/api/spec/align.h >> >> @@ -18,6 +18,10 @@ >> >> extern "C" { >> >> #endif >> >> >> >> +#if __GNUC__ >= 4 >> >> +#pragma GCC visibility push(default) >> >> +#endif >> > >> > >> > Do these need to be guarded? Do we care about GCC < 4 at this point? >> > How >> > does this affect clang? >> >> It's usually good to protect that with the supported GCC version, but >> then the question is if the ODP project itself would be fine to drop >> support for GCC < 4. >> >> And for clang, it doesn't affect since it also works fine with it. > > > So clang exports symbol __GNUC__ with a value of at least 4? Yes, https://github.com/llvm-mirror/clang/blob/master/lib/Frontend/InitPreprocessor.cpp#L494 Added quite a while ago. Cheers, -- Ricardo Salveti _______________________________________________ lng-odp mailing list lng-odp@lists.linaro.org<mailto:lng-odp@lists.linaro.org> https://lists.linaro.org/mailman/listinfo/lng-odp _______________________________________________ lng-odp mailing list lng-odp@lists.linaro.org<mailto:lng-odp@lists.linaro.org> https://lists.linaro.org/mailman/listinfo/lng-odp -- Mike Holmes Technical Manager - Linaro Networking Group Linaro.org<http://www.linaro.org/> │ Open source software for ARM SoCs "Work should be fun and collaborative, the rest follows"
_______________________________________________ lng-odp mailing list lng-odp@lists.linaro.org https://lists.linaro.org/mailman/listinfo/lng-odp