[2/3] eal: import and export data variables for MSVC
Checks
Commit Message
MSVC requires that data variables be explicitly declared as either
imported or exported. Provide macros that allow dpdk to correctly
declare data variables as exported for itself and imported for
applications.
Use new per-library macro to declare variables exported or imported for
per-lcore data variables.
Signed-off-by: Tyler Retzlaff <roretzla@linux.microsoft.com>
---
lib/eal/include/meson.build | 1 +
lib/eal/include/rte_common.h | 8 ++++++++
lib/eal/include/rte_eal.h | 2 ++
lib/eal/include/rte_eal_export.h | 23 +++++++++++++++++++++++
lib/eal/include/rte_errno.h | 2 ++
lib/eal/version.map | 6 +++---
lib/meson.build | 2 ++
7 files changed, 41 insertions(+), 3 deletions(-)
create mode 100644 lib/eal/include/rte_eal_export.h
@@ -16,6 +16,7 @@ headers += files(
'rte_dev.h',
'rte_devargs.h',
'rte_eal.h',
+ 'rte_eal_export.h',
'rte_eal_memconfig.h',
'rte_eal_trace.h',
'rte_errno.h',
@@ -26,6 +26,14 @@
/* OS specific include */
#include <rte_os.h>
+#ifdef RTE_TOOLCHAIN_MSVC
+#define __rte_declare_import __declspec(dllimport)
+#define __rte_declare_export __declspec(dllexport)
+#else
+#define __rte_declare_import
+#define __rte_declare_export
+#endif
+
#ifndef RTE_TOOLCHAIN_MSVC
#ifndef typeof
#define typeof __typeof__
@@ -16,6 +16,7 @@
#include <rte_config.h>
#include <rte_compat.h>
+#include <rte_eal_export.h>
#include <rte_per_lcore.h>
#include <rte_uuid.h>
@@ -426,6 +427,7 @@ typedef int (*rte_mp_async_reply_t)(const struct rte_mp_msg *request,
*/
int rte_sys_gettid(void);
+__rte_eal_export
RTE_DECLARE_PER_LCORE(int, _thread_id);
/**
new file mode 100644
@@ -0,0 +1,23 @@
+/* SPDX-License-Identifier: BSD-3-Clause
+ * Copyright(c) 2024 Microsoft Corporation
+ */
+
+#ifndef _RTE_EAL_EXPORT_H_
+#define _RTE_EAL_EXPORT_H_
+
+/**
+ * @file
+ *
+ * Import / Export macros for eal data variables.
+ */
+
+#include <rte_common.h>
+
+#ifndef __rte_eal_export
+#define __rte_eal_export __rte_declare_import
+#else
+#undef __rte_eal_export
+#define __rte_eal_export __rte_declare_export
+#endif
+
+#endif
@@ -15,8 +15,10 @@
extern "C" {
#endif
+#include <rte_eal_export.h>
#include <rte_per_lcore.h>
+__rte_eal_export
RTE_DECLARE_PER_LCORE(int, _rte_errno); /**< Per core error number. */
/**
@@ -4,9 +4,9 @@ DPDK_24 {
__rte_panic;
eal_parse_sysfs_value; # WINDOWS_NO_EXPORT
eal_timer_source; # WINDOWS_NO_EXPORT
- per_lcore__lcore_id;
- per_lcore__rte_errno;
- per_lcore__thread_id;
+ per_lcore__lcore_id; # MSVC_NO_EXPORT
+ per_lcore__rte_errno; # MSVC_NO_EXPORT
+ per_lcore__thread_id; # MSVC_NO_EXPORT
rte_bus_dump;
rte_bus_find;
rte_bus_find_by_device;
@@ -235,6 +235,8 @@ foreach l:libraries
cflags += '-Wthread-safety'
endif
+ cflags += '-D__rte_@0@_export'.format(name)
+
# first build static lib
static_lib = static_library(libname,
sources,