/****** library defines ********/
-/* compat defines */
-#define RTE_BUILD_SHARED_LIB
-
/* EAL defines */
#define RTE_MAX_HEAPS 32
#define RTE_MAX_MEMSEG_LISTS 128
built. For missing dependencies this should be of the form
``'missing dependency, "libname"'``.
+use_function_versioning
+ **Default Value = false**.
+ Specifies if the library in question has ABI versioned functions. If it
+ has, this value should be set to ensure that the C files are compiled
+ twice with suitable parameters for each of shared or static library
+ builds.
+
version
**Default Value = 1**.
Specifies the ABI version of the library, and is used as the major
endif
headers = files('rte_distributor.h')
deps += ['mbuf']
+use_function_versioning = true
# for clang 32-bit compiles we need libatomic for 64-bit atomic ops
if cc.get_id() == 'clang' and dpdk_conf.get('RTE_ARCH_64') == false
#define _RTE_FUNCTION_VERSIONING_H_
#include <rte_common.h>
+#ifndef RTE_USE_FUNCTION_VERSIONING
+#error Use of function versioning disabled, is "use_function_versioning=true" in meson.build?
+#endif
+
#ifdef RTE_BUILD_SHARED_LIB
/*
# without worrying about which architecture we actually need
headers += files('rte_lpm_altivec.h', 'rte_lpm_neon.h', 'rte_lpm_sse.h')
deps += ['hash']
+use_function_versioning = true
sources = files('rte_timer.c')
headers = files('rte_timer.h')
allow_experimental_apis = true
+use_function_versioning = true
name = l
version = 1
allow_experimental_apis = false
+ use_function_versioning = false
sources = []
headers = []
includes = []
if allow_experimental_apis
cflags += '-DALLOW_EXPERIMENTAL_API'
endif
+ if use_function_versioning
+ cflags += '-DRTE_USE_FUNCTION_VERSIONING'
+ endif
if get_option('per_library_versions')
lib_version = '@0@.1'.format(version)
include_directories: includes,
dependencies: static_deps)
- # then use pre-build objects to build shared lib
- sources = []
- objs += static_lib.extract_all_objects(recursive: false)
+ if not use_function_versioning
+ # use pre-build objects to build shared lib
+ sources = []
+ objs += static_lib.extract_all_objects(recursive: false)
+ else
+ # for compat we need to rebuild with
+ # RTE_BUILD_SHARED_LIB defined
+ cflags += '-DRTE_BUILD_SHARED_LIB'
+ endif
version_map = '@0@/@1@/rte_@2@_version.map'.format(
meson.current_source_dir(), dir_name, name)
implib = dir_name + '.dll.a'
CFLAGS += -I$(RTE_OUTPUT)/include
LDFLAGS += -L$(RTE_OUTPUT)/lib
+# add in flag for supporting function versioning. The define is used in meson
+# builds to ensure that the user has properly flagged the unit in question as
+# using function versioning so it can be built twice - once for static lib and
+# then a second time for the shared lib. Since make only builds one library
+# type at a time, such precautions aren't necessary, so we can globally define
+# the flag
+CFLAGS += -DRTE_USE_FUNCTION_VERSIONING
+
# always include rte_config.h: the one in $(RTE_OUTPUT)/include is
# the configuration of SDK when $(BUILDING_RTE_SDK) is true, or the
# configuration of the application if $(BUILDING_RTE_SDK) is not