Eal common timer doesn't compile under Windows.

Compilation log:
error LNK2019:
unresolved external symbol nanosleep referenced in function
rte_delay_us_sleep
error LNK2019:
unresolved external symbol get_tsc_freq referenced in function set_tsc_freq
error LNK2019:
unresolved external symbol sleep referenced in function set_tsc_freq

The reason was that some functions called POSIX functions.
The solution was to move POSIX dependent functions from common to Unix.

Signed-off-by: Fady Bader <f...@mellanox.com>
---
 lib/librte_eal/common/eal_common_timer.c | 22 ----------------------
 lib/librte_eal/freebsd/Makefile          |  1 +
 lib/librte_eal/linux/Makefile            |  1 +
 lib/librte_eal/unix/eal_unix_timer.c     | 29 +++++++++++++++++++++++++++++
 lib/librte_eal/unix/meson.build          |  1 +
 5 files changed, 32 insertions(+), 22 deletions(-)
 create mode 100644 lib/librte_eal/unix/eal_unix_timer.c

diff --git a/lib/librte_eal/common/eal_common_timer.c 
b/lib/librte_eal/common/eal_common_timer.c
index fa9ee1b224..71e0bd035a 100644
--- a/lib/librte_eal/common/eal_common_timer.c
+++ b/lib/librte_eal/common/eal_common_timer.c
@@ -35,28 +35,6 @@ rte_delay_us_block(unsigned int us)
                rte_pause();
 }
 
-void
-rte_delay_us_sleep(unsigned int us)
-{
-       struct timespec wait[2];
-       int ind = 0;
-
-       wait[0].tv_sec = 0;
-       if (us >= US_PER_S) {
-               wait[0].tv_sec = us / US_PER_S;
-               us -= wait[0].tv_sec * US_PER_S;
-       }
-       wait[0].tv_nsec = 1000 * us;
-
-       while (nanosleep(&wait[ind], &wait[1 - ind]) && errno == EINTR) {
-               /*
-                * Sleep was interrupted. Flip the index, so the 'remainder'
-                * will become the 'request' for a next call.
-                */
-               ind = 1 - ind;
-       }
-}
-
 uint64_t
 rte_get_tsc_hz(void)
 {
diff --git a/lib/librte_eal/freebsd/Makefile b/lib/librte_eal/freebsd/Makefile
index 2374ba0b7d..d18c00eeae 100644
--- a/lib/librte_eal/freebsd/Makefile
+++ b/lib/librte_eal/freebsd/Makefile
@@ -78,6 +78,7 @@ SRCS-$(CONFIG_RTE_EXEC_ENV_FREEBSD) += rte_reciprocal.c
 # from unix dir
 SRCS-$(CONFIG_RTE_EXEC_ENV_FREEBSD) += eal_file.c
 SRCS-$(CONFIG_RTE_EXEC_ENV_FREEBSD) += eal_unix_memory.c
+SRCS-$(CONFIG_RTE_EXEC_ENV_FREEBSD) += eal_unix_timer.c
 
 # from arch dir
 SRCS-$(CONFIG_RTE_EXEC_ENV_FREEBSD) += rte_cpuflags.c
diff --git a/lib/librte_eal/linux/Makefile b/lib/librte_eal/linux/Makefile
index 07ce643bae..5d97073ed2 100644
--- a/lib/librte_eal/linux/Makefile
+++ b/lib/librte_eal/linux/Makefile
@@ -86,6 +86,7 @@ SRCS-$(CONFIG_RTE_EXEC_ENV_LINUX) += rte_reciprocal.c
 # from unix dir
 SRCS-$(CONFIG_RTE_EXEC_ENV_LINUX) += eal_file.c
 SRCS-$(CONFIG_RTE_EXEC_ENV_LINUX) += eal_unix_memory.c
+SRCS-$(CONFIG_RTE_EXEC_ENV_LINUX) += eal_unix_timer.c
 
 # from arch dir
 SRCS-$(CONFIG_RTE_EXEC_ENV_LINUX) += rte_cpuflags.c
diff --git a/lib/librte_eal/unix/eal_unix_timer.c 
b/lib/librte_eal/unix/eal_unix_timer.c
new file mode 100644
index 0000000000..cc50159104
--- /dev/null
+++ b/lib/librte_eal/unix/eal_unix_timer.c
@@ -0,0 +1,29 @@
+/* SPDX-License-Identifier: BSD-3-Clause
+ * Copyright 2020 Mellanox Technologies, Ltd
+ */
+
+#include <time.h>
+
+#include <rte_cycles.h>
+
+void
+rte_delay_us_sleep(unsigned int us)
+{
+       struct timespec wait[2];
+       int ind = 0;
+
+       wait[0].tv_sec = 0;
+       if (us >= US_PER_S) {
+               wait[0].tv_sec = us / US_PER_S;
+               us -= wait[0].tv_sec * US_PER_S;
+       }
+       wait[0].tv_nsec = 1000 * us;
+
+       while (nanosleep(&wait[ind], &wait[1 - ind]) && errno == EINTR) {
+               /*
+                * Sleep was interrupted. Flip the index, so the 'remainder'
+                * will become the 'request' for a next call.
+                */
+               ind = 1 - ind;
+       }
+}
diff --git a/lib/librte_eal/unix/meson.build b/lib/librte_eal/unix/meson.build
index e733910a1a..d3af6b6fe2 100644
--- a/lib/librte_eal/unix/meson.build
+++ b/lib/librte_eal/unix/meson.build
@@ -4,4 +4,5 @@
 sources += files(
        'eal_file.c',
        'eal_unix_memory.c',
+       'eal_unix_timer.c',
 )
-- 
2.16.1.windows.4

Reply via email to