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 <petri.savolai...@nokia.com> --- v2: * ABI compat enabled by default * print static/shared/abi_compat selection in config results * added missing header file include guards configure.ac | 26 ++++++++++++----- 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 | 30 ++++++++++++++++++++ .../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, 58 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..e05d4dd 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,22 @@ AC_ARG_ENABLE([debug], ODP_CFLAGS="$ODP_CFLAGS -DODP_DEBUG=$ODP_DEBUG" ########################################################################## +# Enable/disable ABI compatible build +########################################################################## +ODP_ABI_COMPAT=1 +abi_compat=yes +AC_ARG_ENABLE([abi-compat], + [ --enable-abi-compat build all targets in ABI compatible mode (default=yes)], + [if test "x$enableval" = "xyes"; then + ODP_ABI_COMPAT=1 + abi_compat=yes + else + ODP_ABI_COMPAT=0 + abi_compat=no + 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" @@ -307,6 +316,9 @@ AC_MSG_RESULT([ am_ldflags: ${AM_LDFLAGS} libs: ${LIBS} defs: ${DEFS} + static libraries: ${enable_static} + shared libraries: ${enable_shared} + ABI compatible: ${abi_compat} cunit: ${cunit_support} test_vald: ${test_vald} test_perf: ${test_perf} 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..297a199 --- /dev/null +++ b/platform/linux-generic/include/odp/api/plat/inlines.h @@ -0,0 +1,30 @@ +/* Copyright (c) 2016, Linaro Limited + * All rights reserved. + * + * SPDX-License-Identifier: BSD-3-Clause + */ + +/** + * @file + * + * Macro for static inline functions + */ + +#ifndef ODP_PLAT_INLINES_H_ +#define ODP_PLAT_INLINES_H_ + +#ifdef __cplusplus +extern "C" { +#endif + +#if ODP_ABI_COMPAT == 0 +#define _STATIC static inline +#else +#define _STATIC +#endif + +#ifdef __cplusplus +} +#endif + +#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