On Tue, Sep 13, 2016 at 3:58 PM, Anders Roxell <[email protected]> wrote:
> On 8 September 2016 at 16:24, Petri Savolainen > <[email protected]> wrote: > > Building ABI compatible or shared library are two different > > targets. A shared library may be used also without ABI > > compatibility. A new --enable-abi-compat configuration option > > is introduced. By default libraries are not built in ABI compat > > mode to enable function inlining. There is a noticeable > > performance difference when e.g. odp_atomic_xxx calls > > are not inlined. > > > > Signed-off-by: Petri Savolainen <[email protected]> > > --- > > configure.ac | 20 ++++++++----- > > platform/linux-generic/.gitignore | 1 - > > platform/linux-generic/include/odp/api/atomic.h | 2 +- > > platform/linux-generic/include/odp/api/byteorder.h | 2 +- > > .../linux-generic/include/odp/api/plat/inlines.h | 16 +++++++++++ > > .../include/odp/api/plat/inlines.h.in | 33 > ---------------------- > > platform/linux-generic/include/odp/api/std_clib.h | 2 +- > > platform/linux-generic/include/odp/api/sync.h | 2 +- > > platform/linux-generic/m4/configure.m4 | 3 +- > > platform/linux-generic/odp_atomic.c | 2 +- > > platform/linux-generic/odp_byteorder.c | 2 +- > > platform/linux-generic/odp_std_clib.c | 2 +- > > platform/linux-generic/odp_sync.c | 2 +- > > 13 files changed, 38 insertions(+), 51 deletions(-) > > delete mode 100644 platform/linux-generic/.gitignore > > create mode 100644 platform/linux-generic/ > include/odp/api/plat/inlines.h > > delete mode 100644 platform/linux-generic/include/odp/api/plat/inlines. > h.in > > > > diff --git a/configure.ac b/configure.ac > > index 982aff7..583542f 100644 > > --- a/configure.ac > > +++ b/configure.ac > > @@ -176,13 +176,6 @@ AM_CONDITIONAL([test_example], [test x$test_example > = xyes ]) > > AM_CONDITIONAL([HAVE_DOXYGEN], [test "x${DOXYGEN}" = "xdoxygen"]) > > AM_CONDITIONAL([user_guide], [test "x${user_guides}" = "xyes" ]) > > AM_CONDITIONAL([HAVE_MSCGEN], [test "x${MSCGEN}" = "xmscgen"]) > > -if test x$enable_shared != xyes; > > -then > > - _ODP_INLINES="_ODP_INLINES" > > -else > > - _ODP_INLINES="_ODP_NO_INLINES" > > -fi > > -AC_SUBST(_ODP_INLINES) > > > > ############################################################ > ############## > > # Setup doxygen documentation > > @@ -225,6 +218,19 @@ AC_ARG_ENABLE([debug], > > ODP_CFLAGS="$ODP_CFLAGS -DODP_DEBUG=$ODP_DEBUG" > > > > ############################################################ > ############## > > +# Enable/disable ABI compatible build > > +########################################################### > ############### > > +ODP_ABI_COMPAT=0 > > +AC_ARG_ENABLE([abi-compat], > > + [ --enable-abi-compat build in ABI specification compatible > mode], > > + [if test "x$enableval" = "xyes"; then > > + ODP_ABI_COMPAT=1 > > + else > > + ODP_ABI_COMPAT=0 > > if we disable ABI compat mode I think we should set the SO-version to > 0:0:0, to make > it clear that we don't try to be ABI compatible. > ABI compatibility has not yet been a part of any ODP tagged release. What we'd be adding is the ability to build a library that supports ABI compatibility mode. How does that affect the versioning number scheme? > > Cheers, > Anders > > > + fi]) > > +ODP_CFLAGS="$ODP_CFLAGS -DODP_ABI_COMPAT=$ODP_ABI_COMPAT" > > + > > +########################################################### > ############### > > # Default warning setup > > ############################################################ > ############## > > ODP_CFLAGS="$ODP_CFLAGS -W -Wall -Werror -Wstrict-prototypes > -Wmissing-prototypes" > > diff --git a/platform/linux-generic/.gitignore > b/platform/linux-generic/.gitignore > > deleted file mode 100644 > > index ec6ca37..0000000 > > --- a/platform/linux-generic/.gitignore > > +++ /dev/null > > @@ -1 +0,0 @@ > > -include/odp/api/plat/inlines.h > > diff --git a/platform/linux-generic/include/odp/api/atomic.h > b/platform/linux-generic/include/odp/api/atomic.h > > index c18e68b..66cfef7 100644 > > --- a/platform/linux-generic/include/odp/api/atomic.h > > +++ b/platform/linux-generic/include/odp/api/atomic.h > > @@ -25,7 +25,7 @@ extern "C" { > > */ > > > > #include <odp/api/plat/inlines.h> > > -#ifdef _ODP_INLINES > > +#if ODP_ABI_COMPAT == 0 > > #include <odp/api/plat/atomic_inlines.h> > > #endif > > > > diff --git a/platform/linux-generic/include/odp/api/byteorder.h > b/platform/linux-generic/include/odp/api/byteorder.h > > index 84d1173..37f5636 100644 > > --- a/platform/linux-generic/include/odp/api/byteorder.h > > +++ b/platform/linux-generic/include/odp/api/byteorder.h > > @@ -26,7 +26,7 @@ extern "C" { > > */ > > > > #include <odp/api/plat/inlines.h> > > -#ifdef _ODP_INLINES > > +#if ODP_ABI_COMPAT == 0 > > #include <odp/api/plat/byteorder_inlines.h> > > #endif > > > > diff --git a/platform/linux-generic/include/odp/api/plat/inlines.h > b/platform/linux-generic/include/odp/api/plat/inlines.h > > new file mode 100644 > > index 0000000..e042bd7 > > --- /dev/null > > +++ b/platform/linux-generic/include/odp/api/plat/inlines.h > > @@ -0,0 +1,16 @@ > > +/* Copyright (c) 2016, Linaro Limited > > + * All rights reserved. > > + * > > + * SPDX-License-Identifier: BSD-3-Clause > > + */ > > + > > +/** > > + * @file > > + * > > + * Macro for static inline functions > > + */ > > +#if ODP_ABI_COMPAT == 0 > > +#define _STATIC static inline > > +#else > > +#define _STATIC > > +#endif > > diff --git a/platform/linux-generic/include/odp/api/plat/inlines.h.in > b/platform/linux-generic/include/odp/api/plat/inlines.h.in > > deleted file mode 100644 > > index 5d8c0dc..0000000 > > --- a/platform/linux-generic/include/odp/api/plat/inlines.h.in > > +++ /dev/null > > @@ -1,33 +0,0 @@ > > -/* Copyright (c) 2016, Linaro Limited > > - * All rights reserved. > > - * > > - * SPDX-License-Identifier: BSD-3-Clause > > - */ > > - > > -/** > > - * @file > > - * > > - * ODP platform inline functions > > - */ > > - > > -#ifndef ODP_PLAT_INLINES_H_ > > -#define ODP_PLAT_INLINES_H_ > > - > > -#ifdef __cplusplus > > -extern "C" { > > -#endif > > - > > -#define @_ODP_INLINES@ > > - > > -#ifdef _ODP_INLINES > > -#define _STATIC static inline > > -#else > > -#define _STATIC > > -#endif > > - > > -#ifdef __cplusplus > > -} > > -#endif > > - > > - > > -#endif /* ODP_PLAT_INLINES_H_ */ > > diff --git a/platform/linux-generic/include/odp/api/std_clib.h > b/platform/linux-generic/include/odp/api/std_clib.h > > index c498f68..7fcd6f3 100644 > > --- a/platform/linux-generic/include/odp/api/std_clib.h > > +++ b/platform/linux-generic/include/odp/api/std_clib.h > > @@ -15,7 +15,7 @@ extern "C" { > > #include <string.h> > > > > #include <odp/api/plat/inlines.h> > > -#ifdef _ODP_INLINES > > +#if ODP_ABI_COMPAT == 0 > > #include <odp/api/plat/std_clib_inlines.h> > > #endif > > > > diff --git a/platform/linux-generic/include/odp/api/sync.h > b/platform/linux-generic/include/odp/api/sync.h > > index d2becb9..1423a69 100644 > > --- a/platform/linux-generic/include/odp/api/sync.h > > +++ b/platform/linux-generic/include/odp/api/sync.h > > @@ -22,7 +22,7 @@ extern "C" { > > */ > > > > #include <odp/api/plat/inlines.h> > > -#ifdef _ODP_INLINES > > +#if ODP_ABI_COMPAT == 0 > > #include <odp/api/plat/sync_inlines.h> > > #endif > > > > diff --git a/platform/linux-generic/m4/configure.m4 > b/platform/linux-generic/m4/configure.m4 > > index 6fb05c0..1b1b883 100644 > > --- a/platform/linux-generic/m4/configure.m4 > > +++ b/platform/linux-generic/m4/configure.m4 > > @@ -36,5 +36,4 @@ m4_include([platform/linux-generic/m4/odp_dpdk.m4]) > > m4_include([platform/linux-generic/m4/odp_ipc.m4]) > > m4_include([platform/linux-generic/m4/odp_schedule.m4]) > > > > -AC_CONFIG_FILES([platform/linux-generic/Makefile > > - platform/linux-generic/include/odp/api/plat/inlines.h]) > > +AC_CONFIG_FILES([platform/linux-generic/Makefile]) > > diff --git a/platform/linux-generic/odp_atomic.c > b/platform/linux-generic/odp_atomic.c > > index e9a3ed0..0e40cda 100644 > > --- a/platform/linux-generic/odp_atomic.c > > +++ b/platform/linux-generic/odp_atomic.c > > @@ -5,7 +5,7 @@ > > */ > > > > #include <odp/api/atomic.h> > > -#ifndef _ODP_INLINES > > +#if ODP_ABI_COMPAT == 1 > > #include <odp/api/plat/atomic_inlines.h> > > #endif > > > > diff --git a/platform/linux-generic/odp_byteorder.c > b/platform/linux-generic/odp_byteorder.c > > index fc87291..a344c53 100644 > > --- a/platform/linux-generic/odp_byteorder.c > > +++ b/platform/linux-generic/odp_byteorder.c > > @@ -5,6 +5,6 @@ > > */ > > > > #include <odp/api/byteorder.h> > > -#ifndef _ODP_INLINES > > +#if ODP_ABI_COMPAT == 1 > > #include <odp/api/plat/byteorder_inlines.h> > > #endif > > diff --git a/platform/linux-generic/odp_std_clib.c > b/platform/linux-generic/odp_std_clib.c > > index 611ba12..24df249 100644 > > --- a/platform/linux-generic/odp_std_clib.c > > +++ b/platform/linux-generic/odp_std_clib.c > > @@ -5,6 +5,6 @@ > > */ > > > > #include <odp/api/std_clib.h> > > -#ifndef _ODP_INLINES > > +#if ODP_ABI_COMPAT == 1 > > #include <odp/api/plat/std_clib_inlines.h> > > #endif > > diff --git a/platform/linux-generic/odp_sync.c > b/platform/linux-generic/odp_sync.c > > index f31c389..b7eb503 100644 > > --- a/platform/linux-generic/odp_sync.c > > +++ b/platform/linux-generic/odp_sync.c > > @@ -5,6 +5,6 @@ > > */ > > > > #include <odp/api/sync.h> > > -#ifndef _ODP_INLINES > > +#if ODP_ABI_COMPAT == 1 > > #include <odp/api/plat/sync_inlines.h> > > #endif > > -- > > 2.8.1 > > >
