Improve core EAL musl compatibility
Subsystems (4)
cover Improve core EAL musl compatibility
This patchset fixes numerous issues with musl compatibility in the core EAL libraries. It does not fix anything beyond core EAL (so, PCI driver is still broken, so are a few other drivers), but it's a good start.
Tested on container with Alpine Linux. Alpine dependencies:
build-base bsd-compat-headers libexecinfo-dev linux-headers numactl-dev
For numactl-dev, testing repository needs to be enabled:
echo "http://dl-cdn.alpinelinux.org/alpine/edge/testing" >> /etc/apk/repositories
If successful (using a very broad definition of "success"), the build should fail somewhere in PCI bus driver in UIO.
Anatoly Burakov (7):
linuxapp: build with _GNU_SOURCE defined by default pci/vfio: improve musl compatibility
fbarray: improve musl compatibility eal/hugepage_info: improve musl compatibility
mem: improve musl compatibility
string_fns: improve musl compatibility
eal: improve musl compatibility
app/meson.build | 9 ++++++++- drivers/bus/pci/linux/Makefile | 2 -- drivers/bus/pci/linux/pci_vfio.c | 8 ++++---- drivers/meson.build | 6 ++++++ drivers/net/softnic/conn.c | 1 - examples/meson.build | 6 ++++++ lib/librte_eal/common/eal_common_fbarray.c | 1 + lib/librte_eal/common/eal_common_memory.c | 1 + lib/librte_eal/common/include/rte_string_fns.h | 1 + lib/librte_eal/linuxapp/eal/Makefile | 16 ---------------- lib/librte_eal/linuxapp/eal/eal.c | 5 +++-- lib/librte_eal/linuxapp/eal/eal_hugepage_info.c | 1 + lib/librte_eal/linuxapp/eal/eal_memory.c | 1 + lib/librte_eal/linuxapp/eal/eal_thread.c | 5 +++-- lib/meson.build | 6 ++++++ mk/exec-env/linuxapp/rte.vars.mk | 2 ++ test/test/meson.build | 5 +++++ 17 files changed, 48 insertions(+), 28 deletions(-)
Signature · 1 line
2.17.1
PATCH 1/7 linuxapp: build with _GNU_SOURCE defined by default
We use _GNU_SOURCE all over the place, but often times we miss defining it, resulting in broken builds on musl. Rather than fixing every library's and driver's and application's makefile, fix it by simply defining _GNU_SOURCE by default for all Linuxapp builds.
--- app/meson.build | 9 ++++++++- drivers/bus/pci/linux/Makefile | 2 -- drivers/meson.build | 6 ++++++ drivers/net/softnic/conn.c | 1 - examples/meson.build | 6 ++++++ lib/librte_eal/linuxapp/eal/Makefile | 16 ---------------- lib/meson.build | 6 ++++++ mk/exec-env/linuxapp/rte.vars.mk | 2 ++ test/test/meson.build | 5 +++++ 9 files changed, 33 insertions(+), 20 deletions(-)
app/meson.build +8 -1
@@ -11,13 +11,20 @@ apps = ['pdump', # for BSD only lib_execinfo = cc.find_library('execinfo', required: false) +default_cflags = machine_args + +# on Linux, specify -D_GNU_SOURCE unconditionally +if host_machine.system() == 'linux' + default_cflags += '-D_GNU_SOURCE' +endif + foreach app:apps build = true name = app allow_experimental_apis = false sources = [] includes = [] - cflags = machine_args + cflags = default_cflags objs = [] # other object files to link against, used e.g. for # instruction-set optimized versions of code
drivers/bus/pci/linux/Makefile +0 -2
@@ -4,5 +4,3 @@ SRCS += pci.c SRCS += pci_uio.c SRCS += pci_vfio.c - -CFLAGS += -D_GNU_SOURCE
drivers/meson.build +6 -0
@@ -15,6 +15,12 @@ default_cflags = machine_args if cc.has_argument('-Wno-format-truncation') default_cflags += '-Wno-format-truncation' endif + +# on Linux, specify -D_GNU_SOURCE unconditionally +if host_machine.system() == 'linux' + default_cflags += '-D_GNU_SOURCE' +endif + foreach class:driver_classes drivers = [] std_deps = []
drivers/net/softnic/conn.c +0 -1
@@ -8,7 +8,6 @@#include <unistd.h> #include <sys/types.h> -#define __USE_GNU#include <sys/socket.h> #include <sys/epoll.h>
examples/meson.build +6 -0
@@ -22,6 +22,12 @@ default_cflags = machine_args if cc.has_argument('-Wno-format-truncation') default_cflags += '-Wno-format-truncation' endif + +# on Linux, specify -D_GNU_SOURCE unconditionally +if host_machine.system() == 'linux' + default_cflags += '-D_GNU_SOURCE' +endif + foreach example: examples name = example build = true
lib/librte_eal/linuxapp/eal/Makefile +0 -16
@@ -85,22 +85,6 @@ SRCS-y += rte_cycles.c CFLAGS_eal_common_cpuflags.o := $(CPUFLAGS_LIST) -CFLAGS_eal.o := -D_GNU_SOURCE -CFLAGS_eal_interrupts.o := -D_GNU_SOURCE -CFLAGS_eal_vfio_mp_sync.o := -D_GNU_SOURCE -CFLAGS_eal_timer.o := -D_GNU_SOURCE -CFLAGS_eal_lcore.o := -D_GNU_SOURCE -CFLAGS_eal_memalloc.o := -D_GNU_SOURCE -CFLAGS_eal_thread.o := -D_GNU_SOURCE -CFLAGS_eal_log.o := -D_GNU_SOURCE -CFLAGS_eal_common_log.o := -D_GNU_SOURCE -CFLAGS_eal_hugepage_info.o := -D_GNU_SOURCE -CFLAGS_eal_common_whitelist.o := -D_GNU_SOURCE -CFLAGS_eal_common_options.o := -D_GNU_SOURCE -CFLAGS_eal_common_thread.o := -D_GNU_SOURCE -CFLAGS_eal_common_lcore.o := -D_GNU_SOURCE -CFLAGS_rte_cycles.o := -D_GNU_SOURCE - # workaround for a gcc bug with noreturn attribute # http://gcc.gnu.org/bugzilla/show_bug.cgi?id=12603 ifeq ($(CONFIG_RTE_TOOLCHAIN_GCC),y)
lib/meson.build +6 -0
@@ -30,6 +30,12 @@ default_cflags = machine_args if cc.has_argument('-Wno-format-truncation') default_cflags += '-Wno-format-truncation' endif + +# on Linux, specify -D_GNU_SOURCE unconditionally +if host_machine.system() == 'linux' + default_cflags += '-D_GNU_SOURCE' +endif + foreach l:libraries build = true name = l
mk/exec-env/linuxapp/rte.vars.mk +2 -0
@@ -17,6 +17,8 @@ else EXECENV_CFLAGS = -pthread endif +EXECENV_CFLAGS += -D_GNU_SOURCE + EXECENV_LDLIBS = EXECENV_ASFLAGS =
test/test/meson.build +5 -0
@@ -242,6 +242,11 @@ if cc.has_argument('-Wno-format-truncation') cflags += '-Wno-format-truncation' endif +# on Linux, specify -D_GNU_SOURCE unconditionally +if host_machine.system() == 'linux' + default_cflags += '-D_GNU_SOURCE' +endif + test_dep_objs = [] compress_test_dep = dependency('zlib', required: false) if compress_test_dep.found()
Signature · 1 line
2.17.1
PATCH 2/7 pci/vfio: improve musl compatibility
In reply to Anatoly BurakovMusl already has PAGE_SIZE defined, and our define clashed with it. Rename our define to SYS_PAGE_SIZE.
Bugzilla ID: 36
--- drivers/bus/pci/linux/pci_vfio.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-)
drivers/bus/pci/linux/pci_vfio.c +4 -4
@@ -35,8 +35,8 @@#ifdef VFIO_PRESENT -#define PAGE_SIZE (sysconf(_SC_PAGESIZE)) -#define PAGE_MASK (~(PAGE_SIZE - 1)) +#define SYS_PAGE_SIZE (sysconf(_SC_PAGESIZE)) +#define SYS_PAGE_MASK (~(SYS_PAGE_SIZE - 1))static struct rte_tailq_elem rte_vfio_tailq = { .name = "VFIO_RESOURCE_LIST",
@@ -344,8 +344,8 @@ pci_vfio_mmap_bar(int vfio_dev_fd, struct mapped_pci_resource *vfio_res,*/ uint32_t table_start = msix_table->offset;uint32_t table_end = table_start + msix_table->size; - table_end = (table_end + ~PAGE_MASK ) &PAGE_MASK ; - table_start &=PAGE_MASK ; + table_end = (table_end + ~SYS_PAGE_MASK ) &SYS_PAGE_MASK ; + table_start &=SYS_PAGE_MASK ;if (table_start ==0 && table_end >= bar->size) {/* Cannot map this BAR */
Signature · 1 line
2.17.1
Re: [PATCH 2/7] pci/vfio: improve musl compatibility
Quoted 7 lines · Anatoly Burakov
Musl already has
PAGE_SIZEdefined, and our define clashed with it. Rename our define toSYS_PAGE_SIZE.Bugzilla ID: 36
Signed-off-by Anatoly Burakov <[email protected]>---
Would it not be easier to just do?
#ifndef PAGE_SIZE
#define PAGE_SIZE ...
#endif
Quoted 31 lines
drivers/bus/pci/linux/pci_vfio.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-)drivers/bus/pci/linux/pci_vfio.c +4
-4@@ -35,8 +35,8 @@#ifdef VFIO_PRESENT -#define PAGE_SIZE (sysconf(_SC_PAGESIZE)) -#define PAGE_MASK (~(PAGE_SIZE - 1)) +#define SYS_PAGE_SIZE (sysconf(_SC_PAGESIZE)) +#define SYS_PAGE_MASK (~(SYS_PAGE_SIZE - 1))static struct rte_tailq_elem rte_vfio_tailq = { .name = "VFIO_RESOURCE_LIST",@@ -344,8 +344,8 @@ pci_vfio_mmap_bar(int vfio_dev_fd, struct mapped_pci_resource *vfio_res,*/ uint32_t table_start = msix_table->offset;uint32_t table_end = table_start + msix_table->size; - table_end = (table_end + ~PAGE_MASK ) &PAGE_MASK ; - table_start &=PAGE_MASK ; + table_end = (table_end + ~SYS_PAGE_MASK ) &SYS_PAGE_MASK ; + table_start &=SYS_PAGE_MASK ;if (table_start ==0 && table_end >= bar->size) {/* Cannot map this BAR */ Signature · 1 line
2.17.1
Re: [PATCH 2/7] pci/vfio: improve musl compatibility
Quoted 6 lines · Bruce Richardson
Quoted 5 lines · Anatoly Burakov
Musl already has
PAGE_SIZEdefined, and our define clashed with it. Rename our define toSYS_PAGE_SIZE.Bugzilla ID: 36
Quoted 8 lines
Quoted 2 lines
Signed-off-by Anatoly Burakov <[email protected]>---
Would it not be easier to just do?
#ifndef
PAGE_SIZE
#definePAGE_SIZE...
#endif
Sure, that can work.
Signature · 2 lines
Thanks, Anatoly
PATCH 3/7 fbarray: improve musl compatibility
In reply to Anatoly BurakovWhen built against musl, fcntl.h doesn't silently get included. Fix by including it explicitly.
Bugzilla ID: 34
--- lib/librte_eal/common/eal_common_fbarray.c | 1 + 1 file changed, 1 insertion(+)
lib/librte_eal/common/eal_common_fbarray.c +1 -0
@@ -2,6 +2,7 @@* Copyright(c) 2017-2018 Intel Corporation */ +#include <fcntl.h> #include <inttypes.h> #include <limits.h> #include <sys/mman.h>
Signature · 1 line
2.17.1
PATCH 4/7 eal/hugepage_info: improve musl compatibility
In reply to Anatoly BurakovWhen built against musl, fcntl.h doesn't silently get included. Fix by including it explicitly.
Bugzilla ID: 33
--- lib/librte_eal/linuxapp/eal/eal_hugepage_info.c | 1 + 1 file changed, 1 insertion(+)
lib/librte_eal/linuxapp/eal/eal_hugepage_info.c +1 -0
@@ -6,6 +6,7 @@#include <sys/types.h> #include <sys/file.h> #include <dirent.h> +#include <fcntl.h> #include <stdint.h> #include <stdlib.h> #include <stdio.h>
Signature · 1 line
2.17.1
PATCH 5/7 mem: improve musl compatibility
In reply to Anatoly BurakovWhen built against musl, fcntl.h doesn't silently get included. Fix by including it explicitly.
Bugzilla ID: 31
--- lib/librte_eal/common/eal_common_memory.c | 1 + lib/librte_eal/linuxapp/eal/eal_memory.c | 1 + 2 files changed, 2 insertions(+)
lib/librte_eal/common/eal_common_memory.c +1 -0
@@ -2,6 +2,7 @@* Copyright(c) 2010-2014 Intel Corporation */ +#include <fcntl.h> #include <errno.h> #include <stdio.h> #include <stdint.h>
lib/librte_eal/linuxapp/eal/eal_memory.c +1 -0
@@ -5,6 +5,7 @@#define _FILE_OFFSET_BITS 64#include <errno.h> +#include <fcntl.h> #include <stdarg.h> #include <stdbool.h> #include <stdlib.h>
Signature · 1 line
2.17.1
PATCH 6/7 string_fns: improve musl compatibility
In reply to Anatoly BurakovMusl wraps various string functions such as strlcpy in order to harden them. However, the fortify wrappers are included without including the actual string functions being wrapped, which throws missing definition compile errors. Fix by including string.h in string functions header.
--- lib/librte_eal/common/include/rte_string_fns.h | 1 + 1 file changed, 1 insertion(+)
lib/librte_eal/common/include/rte_string_fns.h +1 -0
@@ -16,6 +16,7 @@ extern "C" {#endif #include <stdio.h> +#include <string.h> /** * Takes string "string" parameter and splits it at character "delim"
Signature · 1 line
2.17.1
PATCH 7/7 eal: improve musl compatibility
In reply to Anatoly BurakovMusl complains about pthread id being of wrong size. Fix it by casting to 64-bit and printing 64-bit hex unconditionally.
--- lib/librte_eal/linuxapp/eal/eal.c | 5 +++-- lib/librte_eal/linuxapp/eal/eal_thread.c | 5 +++-- 2 files changed, 6 insertions(+), 4 deletions(-)
lib/librte_eal/linuxapp/eal/eal.c +3 -2
@@ -3,6 +3,7 @@* Copyright(c) 2012-2014 6WIND S.A. */ +#include <inttypes.h> #include <stdio.h> #include <stdlib.h> #include <stdint.h>
@@ -979,8 +980,8 @@ rte_eal_init(int argc, char **argv) ret =eal_thread_dump_affinity (cpuset,sizeof (cpuset)); -RTE_LOG (DEBUG ,EAL ,"Master lcore %u is ready (tid=%x;cpuset=[%s%s])\n" , - rte_config.master_lcore, (int )thread_id, cpuset, +RTE_LOG (DEBUG ,EAL ,"Master lcore %u is ready (tid=%" PRIx64" ;cpuset=[%s%s])\n" , + rte_config.master_lcore, (uint64_t )thread_id, cpuset, ret ==0 ?"" :"..." );RTE_LCORE_FOREACH_SLAVE (i) {
lib/librte_eal/linuxapp/eal/eal_thread.c +3 -2
@@ -3,6 +3,7 @@*/ #include <errno.h> +#include <inttypes.h> #include <stdio.h> #include <stdlib.h> #include <stdint.h>
@@ -121,8 +122,8 @@ eal_thread_loop(__attribute__((unused)) void *arg) ret =eal_thread_dump_affinity (cpuset,sizeof (cpuset)); -RTE_LOG (DEBUG ,EAL ,"lcore %u is ready (tid=%x;cpuset=[%s%s])\n" , - lcore_id, (int )thread_id, cpuset, ret ==0 ?"" :"..." ); +RTE_LOG (DEBUG ,EAL ,"lcore %u is ready (tid=%" PRIx64";cpuset=[%s%s])\n" , + lcore_id, (uint64_t )thread_id, cpuset, ret ==0 ?"" :"..." );/* read on our pipe to get commands */ while (1 ) {
Signature · 1 line
2.17.1
Re: [PATCH 7/7] eal: improve musl compatibility
Quoted 5 lines · Anatoly Burakov
Musl complains about pthread id being of wrong size. Fix it by casting to 64-bit and printing 64-bit hex unconditionally.
Signed-off-by Anatoly Burakov <[email protected]>---
Given that on linux pthread_t is a pointer type, will this not give other warnings of casting from pointer to integer of a different type when compiling 32-bit? For safety I suggest casting to long or uintptr_t instead, to ensure we always get an int of the right size.
/Bruce
Re: [PATCH 7/7] eal: improve musl compatibility
Quoted 8 lines · Bruce Richardson
Quoted 5 lines · Anatoly Burakov
Musl complains about pthread id being of wrong size. Fix it by casting to 64-bit and printing 64-bit hex unconditionally.
Signed-off-by Anatoly Burakov <[email protected]>---
Given that on linux
pthread_tis a pointer type, will this not give other warnings of casting from pointer to integer of a different type when
s/type/size/
Quoted 4 lines
compiling 32-bit? For safety I suggest casting to long or
uintptr_tinstead, to ensure we always get an int of the right size./Bruce
Re: [PATCH 7/7] eal: improve musl compatibility
In reply to Bruce RichardsonQuoted 4 lines · Bruce Richardson
Quoted 3 lines · Anatoly Burakov
Musl complains about pthread id being of wrong size. Fix it by casting to 64-bit and printing 64-bit hex unconditionally.
Quoted 9 lines
Quoted 2 lines
Signed-off-by Anatoly Burakov <[email protected]>---
Given that on linux
pthread_tis a pointer type, will this not give other warnings of casting from pointer to integer of a different type when compiling 32-bit? For safety I suggest casting to long oruintptr_tinstead, to ensure we always get an int of the right size./Bruce
Sure, will fix.
Signature · 2 lines
Thanks, Anatoly
Re: [PATCH 7/7] eal: improve musl compatibility
Quoted 12 lines · Anatoly
Quoted 11 lines · Bruce Richardson
Quoted 5 lines · Anatoly Burakov
Musl complains about pthread id being of wrong size. Fix it by casting to 64-bit and printing 64-bit hex unconditionally.
Signed-off-by Anatoly Burakov <[email protected]>---
Given that on linux
pthread_tis a pointer type, will this not give other warnings of casting from pointer to integer of a different type when compiling 32-bit? For safety I suggest casting to long oruintptr_tinstead, to ensure we always get an int of the right size.
Quoted 8 lines
Quoted 2 lines
/Bruce
Sure, will fix.
Signature · 2 lines
Thanks, Anatoly
Maybe use gettid() to get thread id which is actually way more useful than the pointer value. Of course, glibc doesn't want to provide a syscall wrapper for this.
Re: [PATCH 7/7] eal: improve musl compatibility
Quoted 20 lines · Stephen Hemminger
Quoted 17 lines · Anatoly
Quoted 4 lines · Bruce Richardson
Quoted 3 lines · Anatoly Burakov
Musl complains about pthread id being of wrong size. Fix it by casting to 64-bit and printing 64-bit hex unconditionally.
Quoted 9 lines
Quoted 2 lines
Signed-off-by Anatoly Burakov <[email protected]>---
Given that on linux
pthread_tis a pointer type, will this not give other warnings of casting from pointer to integer of a different type when compiling 32-bit? For safety I suggest casting to long oruintptr_tinstead, to ensure we always get an int of the right size./Bruce
Sure, will fix.
Quoted 9 lines
Quoted 3 lines
Signature · 2 lines
Thanks, AnatolyMaybe use
gettid()to get thread id which is actually way more useful than the pointer value. Of course, glibc doesn't want to provide a syscall wrapper for this.
We have rte_gettid() call.
Signature · 2 lines
Thanks, Anatoly
Re: [PATCH 7/7] eal: improve musl compatibility
In reply to Anatoly BurakovQuoted 4 lines · On Wed, 29 Aug 2018 12:56:21 +0100 Anatoly Burakov <[email protected]>…
Musl complains about pthread id being of wrong size. Fix it by casting to 64-bit and printing 64-bit hex unconditionally.
Signed-off-by Anatoly Burakov <[email protected]>
What is pthread_t on musl? On Linux it is unsigned long.
v2 cover Improve core EAL musl compatibility
In reply to Anatoly BurakovThis patchset fixes numerous issues with musl compatibility in the core EAL libraries. It does not fix anything beyond core EAL (so, PCI driver is still broken, so are a few other drivers), but it's a good start.
Tested on container with Alpine Linux. Alpine dependencies:
build-base bsd-compat-headers libexecinfo-dev linux-headers numactl-dev
For numactl-dev, testing repository needs to be enabled:
echo "http://dl-cdn.alpinelinux.org/alpine/edge/testing" >> /etc/apk/repositories
If successful (using a very broad definition of "success"), the build should fail somewhere in PCI bus driver in UIO.
v2 -> v1:
- Fixed patch 2 to use existing define if available
- Fixed patch 7 to use proper format specifier and cast pthread ID to unsigned pointer type
Anatoly Burakov (7):
linuxapp: build with _GNU_SOURCE defined by default pci/vfio: improve musl compatibility
fbarray: improve musl compatibility eal/hugepage_info: improve musl compatibility
mem: improve musl compatibility
string_fns: improve musl compatibility
eal: improve musl compatibility
app/meson.build | 9 ++++++++- drivers/bus/pci/linux/Makefile | 2 -- drivers/bus/pci/linux/pci_vfio.c | 2 ++ drivers/meson.build | 6 ++++++ drivers/net/softnic/conn.c | 1 - examples/meson.build | 6 ++++++ lib/librte_eal/common/eal_common_fbarray.c | 1 + lib/librte_eal/common/eal_common_memory.c | 1 + lib/librte_eal/common/include/rte_string_fns.h | 1 + lib/librte_eal/linuxapp/eal/Makefile | 16 ---------------- lib/librte_eal/linuxapp/eal/eal.c | 4 ++-- lib/librte_eal/linuxapp/eal/eal_hugepage_info.c | 1 + lib/librte_eal/linuxapp/eal/eal_memory.c | 1 + lib/librte_eal/linuxapp/eal/eal_thread.c | 4 ++-- lib/meson.build | 6 ++++++ mk/exec-env/linuxapp/rte.vars.mk | 2 ++ test/test/meson.build | 5 +++++ 17 files changed, 44 insertions(+), 24 deletions(-)
Signature · 1 line
2.17.1
PATCH v2 1/7 linuxapp: build with _GNU_SOURCE defined by default
We use _GNU_SOURCE all over the place, but often times we miss defining it, resulting in broken builds on musl. Rather than fixing every library's and driver's and application's makefile, fix it by simply defining _GNU_SOURCE by default for all Linuxapp builds.
--- app/meson.build | 9 ++++++++- drivers/bus/pci/linux/Makefile | 2 -- drivers/meson.build | 6 ++++++ drivers/net/softnic/conn.c | 1 - examples/meson.build | 6 ++++++ lib/librte_eal/linuxapp/eal/Makefile | 16 ---------------- lib/meson.build | 6 ++++++ mk/exec-env/linuxapp/rte.vars.mk | 2 ++ test/test/meson.build | 5 +++++ 9 files changed, 33 insertions(+), 20 deletions(-)
app/meson.build +8 -1
@@ -11,13 +11,20 @@ apps = ['pdump', # for BSD only lib_execinfo = cc.find_library('execinfo', required: false) +default_cflags = machine_args + +# on Linux, specify -D_GNU_SOURCE unconditionally +if host_machine.system() == 'linux' + default_cflags += '-D_GNU_SOURCE' +endif + foreach app:apps build = true name = app allow_experimental_apis = false sources = [] includes = [] - cflags = machine_args + cflags = default_cflags objs = [] # other object files to link against, used e.g. for # instruction-set optimized versions of code
drivers/bus/pci/linux/Makefile +0 -2
@@ -4,5 +4,3 @@ SRCS += pci.c SRCS += pci_uio.c SRCS += pci_vfio.c - -CFLAGS += -D_GNU_SOURCE
drivers/meson.build +6 -0
@@ -16,6 +16,12 @@ default_cflags = machine_args if cc.has_argument('-Wno-format-truncation') default_cflags += '-Wno-format-truncation' endif + +# on Linux, specify -D_GNU_SOURCE unconditionally +if host_machine.system() == 'linux' + default_cflags += '-D_GNU_SOURCE' +endif + foreach class:driver_classes drivers = [] std_deps = []
drivers/net/softnic/conn.c +0 -1
@@ -8,7 +8,6 @@#include <unistd.h> #include <sys/types.h> -#define __USE_GNU#include <sys/socket.h> #include <sys/epoll.h>
examples/meson.build +6 -0
@@ -22,6 +22,12 @@ default_cflags = machine_args if cc.has_argument('-Wno-format-truncation') default_cflags += '-Wno-format-truncation' endif + +# on Linux, specify -D_GNU_SOURCE unconditionally +if host_machine.system() == 'linux' + default_cflags += '-D_GNU_SOURCE' +endif + foreach example: examples name = example build = true
lib/librte_eal/linuxapp/eal/Makefile +0 -16
@@ -85,22 +85,6 @@ SRCS-y += rte_cycles.c CFLAGS_eal_common_cpuflags.o := $(CPUFLAGS_LIST) -CFLAGS_eal.o := -D_GNU_SOURCE -CFLAGS_eal_interrupts.o := -D_GNU_SOURCE -CFLAGS_eal_vfio_mp_sync.o := -D_GNU_SOURCE -CFLAGS_eal_timer.o := -D_GNU_SOURCE -CFLAGS_eal_lcore.o := -D_GNU_SOURCE -CFLAGS_eal_memalloc.o := -D_GNU_SOURCE -CFLAGS_eal_thread.o := -D_GNU_SOURCE -CFLAGS_eal_log.o := -D_GNU_SOURCE -CFLAGS_eal_common_log.o := -D_GNU_SOURCE -CFLAGS_eal_hugepage_info.o := -D_GNU_SOURCE -CFLAGS_eal_common_whitelist.o := -D_GNU_SOURCE -CFLAGS_eal_common_options.o := -D_GNU_SOURCE -CFLAGS_eal_common_thread.o := -D_GNU_SOURCE -CFLAGS_eal_common_lcore.o := -D_GNU_SOURCE -CFLAGS_rte_cycles.o := -D_GNU_SOURCE - # workaround for a gcc bug with noreturn attribute # http://gcc.gnu.org/bugzilla/show_bug.cgi?id=12603 ifeq ($(CONFIG_RTE_TOOLCHAIN_GCC),y)
lib/meson.build +6 -0
@@ -32,6 +32,12 @@ if cc.has_argument('-Wno-format-truncation') endif enabled_libs = [] # used to print summary at the end + +# on Linux, specify -D_GNU_SOURCE unconditionally +if host_machine.system() == 'linux' + default_cflags += '-D_GNU_SOURCE' +endif + foreach l:libraries build = true name = l
mk/exec-env/linuxapp/rte.vars.mk +2 -0
@@ -17,6 +17,8 @@ else EXECENV_CFLAGS = -pthread endif +EXECENV_CFLAGS += -D_GNU_SOURCE + EXECENV_LDLIBS = EXECENV_ASFLAGS =
test/test/meson.build +5 -0
@@ -242,6 +242,11 @@ if cc.has_argument('-Wno-format-truncation') cflags += '-Wno-format-truncation' endif +# on Linux, specify -D_GNU_SOURCE unconditionally +if host_machine.system() == 'linux' + default_cflags += '-D_GNU_SOURCE' +endif + test_dep_objs = [] compress_test_dep = dependency('zlib', required: false) if compress_test_dep.found()
Signature · 1 line
2.17.1
PATCH v2 2/7 pci/vfio: improve musl compatibility
In reply to Anatoly BurakovMusl already has PAGE_SIZE defined, and our define clashed with it. Rename our define to SYS_PAGE_SIZE.
Bugzilla ID: 36
--- drivers/bus/pci/linux/pci_vfio.c | 2 ++ 1 file changed, 2 insertions(+)
drivers/bus/pci/linux/pci_vfio.c +2 -0
@@ -35,7 +35,9 @@#ifdef VFIO_PRESENT +#ifndef PAGE_SIZE #define PAGE_SIZE (sysconf(_SC_PAGESIZE)) +#endif #define PAGE_MASK (~(PAGE_SIZE - 1)) static struct rte_tailq_elem rte_vfio_tailq = {
Signature · 1 line
2.17.1
PATCH v2 3/7 fbarray: improve musl compatibility
In reply to Anatoly BurakovWhen built against musl, fcntl.h doesn't silently get included. Fix by including it explicitly.
Bugzilla ID: 34
--- lib/librte_eal/common/eal_common_fbarray.c | 1 + 1 file changed, 1 insertion(+)
lib/librte_eal/common/eal_common_fbarray.c +1 -0
@@ -2,6 +2,7 @@* Copyright(c) 2017-2018 Intel Corporation */ +#include <fcntl.h> #include <inttypes.h> #include <limits.h> #include <sys/mman.h>
Signature · 1 line
2.17.1
PATCH v2 4/7 eal/hugepage_info: improve musl compatibility
In reply to Anatoly BurakovWhen built against musl, fcntl.h doesn't silently get included. Fix by including it explicitly.
Bugzilla ID: 33
--- lib/librte_eal/linuxapp/eal/eal_hugepage_info.c | 1 + 1 file changed, 1 insertion(+)
lib/librte_eal/linuxapp/eal/eal_hugepage_info.c +1 -0
@@ -6,6 +6,7 @@#include <sys/types.h> #include <sys/file.h> #include <dirent.h> +#include <fcntl.h> #include <stdint.h> #include <stdlib.h> #include <stdio.h>
Signature · 1 line
2.17.1
PATCH v2 5/7 mem: improve musl compatibility
In reply to Anatoly BurakovWhen built against musl, fcntl.h doesn't silently get included. Fix by including it explicitly.
Bugzilla ID: 31
--- lib/librte_eal/common/eal_common_memory.c | 1 + lib/librte_eal/linuxapp/eal/eal_memory.c | 1 + 2 files changed, 2 insertions(+)
lib/librte_eal/common/eal_common_memory.c +1 -0
@@ -2,6 +2,7 @@* Copyright(c) 2010-2014 Intel Corporation */ +#include <fcntl.h> #include <errno.h> #include <stdio.h> #include <stdint.h>
lib/librte_eal/linuxapp/eal/eal_memory.c +1 -0
@@ -5,6 +5,7 @@#define _FILE_OFFSET_BITS 64#include <errno.h> +#include <fcntl.h> #include <stdarg.h> #include <stdbool.h> #include <stdlib.h>
Signature · 1 line
2.17.1
PATCH v2 6/7 string_fns: improve musl compatibility
In reply to Anatoly BurakovMusl wraps various string functions such as strlcpy in order to harden them. However, the fortify wrappers are included without including the actual string functions being wrapped, which throws missing definition compile errors. Fix by including string.h in string functions header.
--- lib/librte_eal/common/include/rte_string_fns.h | 1 + 1 file changed, 1 insertion(+)
lib/librte_eal/common/include/rte_string_fns.h +1 -0
@@ -16,6 +16,7 @@ extern "C" {#endif #include <stdio.h> +#include <string.h> /** * Takes string "string" parameter and splits it at character "delim"
Signature · 1 line
2.17.1
PATCH v2 7/7 eal: improve musl compatibility
In reply to Anatoly BurakovMusl complains about pthread id being of wrong size, because on musl, pthread_t is a struct pointer, not an unsinged int. Fix the printing code by casting pthread id to unsigned pointer type and adjusting the format specifier to be of appropriate size.
--- lib/librte_eal/linuxapp/eal/eal.c | 4 ++-- lib/librte_eal/linuxapp/eal/eal_thread.c | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-)
lib/librte_eal/linuxapp/eal/eal.c +2 -2
@@ -979,8 +979,8 @@ rte_eal_init(int argc, char **argv) ret =eal_thread_dump_affinity (cpuset,sizeof (cpuset)); -RTE_LOG (DEBUG ,EAL ,"Master lcore %u is ready (tid=%x;cpuset=[%s%s])\n" , - rte_config.master_lcore, (int )thread_id, cpuset, +RTE_LOG (DEBUG ,EAL ,"Master lcore %u is ready (tid=%zx;cpuset=[%s%s])\n" , + rte_config.master_lcore, (uintptr_t )thread_id, cpuset, ret ==0 ?"" :"..." );RTE_LCORE_FOREACH_SLAVE (i) {
lib/librte_eal/linuxapp/eal/eal_thread.c +2 -2
@@ -121,8 +121,8 @@ eal_thread_loop(__attribute__((unused)) void *arg) ret =eal_thread_dump_affinity (cpuset,sizeof (cpuset)); -RTE_LOG (DEBUG ,EAL ,"lcore %u is ready (tid=%x;cpuset=[%s%s])\n" , - lcore_id, (int )thread_id, cpuset, ret ==0 ?"" :"..." ); +RTE_LOG (DEBUG ,EAL ,"lcore %u is ready (tid=%zx;cpuset=[%s%s])\n" , + lcore_id, (uintptr_t )thread_id, cpuset, ret ==0 ?"" :"..." );/* read on our pipe to get commands */ while (1 ) {
Signature · 1 line
2.17.1
v3 cover Improve core EAL musl compatibility
In reply to Anatoly BurakovThis patchset fixes numerous issues with musl compatibility in the core EAL libraries. It does not fix anything beyond core EAL (so, PCI driver is still broken, so are a few other drivers), but it's a good start.
Tested on container with Alpine Linux. Alpine dependencies:
build-base bsd-compat-headers libexecinfo-dev linux-headers numactl-dev
For numactl-dev, testing repository needs to be enabled:
echo "http://dl-cdn.alpinelinux.org/alpine/edge/testing" >> /etc/apk/repositories
If successful (using a very broad definition of "success"), the build should fail somewhere in PCI bus driver in UIO.
v3 -> v2:
- Made _GNU_SOURCE unconditional for all DPDK targets
- Fixed usage of __USE_GNU and _GNU_SOURCE accross DPDK
v2 -> v1:
- Fixed patch 2 to use existing define if available
- Fixed patch 7 to use proper format specifier and cast pthread ID to unsigned pointer type
Anatoly Burakov (7):
mk: build with _GNU_SOURCE defined by default
pci/vfio: improve musl compatibility
fbarray: improve musl compatibility
eal/hugepage_info: improve musl compatibility
mem: improve musl compatibility
string_fns: improve musl compatibility
eal: improve musl compatibility
app/meson.build | 7 +++++- app/test-pmd/Makefile | 2 -- buildtools/pmdinfogen/pmdinfogen.c | 1 - drivers/bus/dpaa/Makefile | 1 - drivers/bus/dpaa/meson.build | 1 - drivers/bus/fslmc/meson.build | 1 - drivers/bus/pci/linux/Makefile | 2 -- drivers/bus/pci/linux/pci_vfio.c | 2 ++ drivers/bus/pci/meson.build | 1 - drivers/crypto/dpaa2_sec/Makefile | 1 - drivers/crypto/dpaa_sec/Makefile | 1 - drivers/mempool/dpaa/Makefile | 1 - drivers/meson.build | 4 ++++ drivers/net/mlx5/mlx5_ethdev.c | 2 -- drivers/net/mlx5/mlx5_socket.c | 2 -- drivers/net/softnic/conn.c | 1 - examples/cmdline/Makefile | 1 - examples/ethtool/ethtool-app/Makefile | 2 +- examples/ip_pipeline/conn.c | 1 - examples/l2fwd-cat/Makefile | 2 -- examples/l2fwd-cat/meson.build | 1 - examples/load_balancer/Makefile | 1 - examples/meson.build | 4 ++++ .../performance-thread/l3fwd-thread/main.c | 2 -- .../performance-thread/pthread_shim/main.c | 1 - .../pthread_shim/pthread_shim.c | 1 - examples/qos_sched/Makefile | 2 -- examples/tep_termination/Makefile | 1 - examples/vhost/Makefile | 1 - examples/vhost_crypto/Makefile | 1 - examples/vhost_crypto/meson.build | 2 +- examples/vhost_scsi/Makefile | 4 ++-- examples/vhost_scsi/meson.build | 2 +- lib/librte_cmdline/Makefile | 1 - lib/librte_cmdline/cmdline.c | 24 ------------------- lib/librte_eal/bsdapp/eal/Makefile | 5 ---- lib/librte_eal/common/eal_common_fbarray.c | 1 + lib/librte_eal/common/eal_common_memory.c | 1 + .../common/include/rte_string_fns.h | 1 + lib/librte_eal/linuxapp/eal/Makefile | 16 ------------- lib/librte_eal/linuxapp/eal/eal.c | 4 ++-- .../linuxapp/eal/eal_hugepage_info.c | 1 + lib/librte_eal/linuxapp/eal/eal_memory.c | 1 + lib/librte_eal/linuxapp/eal/eal_thread.c | 4 ++-- lib/librte_eal/meson.build | 1 - lib/librte_pdump/Makefile | 1 - lib/librte_sched/Makefile | 2 -- lib/meson.build | 4 ++++ mk/target/generic/rte.vars.mk | 3 +++ test/test/Makefile | 2 -- test/test/meson.build | 3 +++ 51 files changed, 40 insertions(+), 94 deletions(-)
Signature · 1 line
2.17.1
PATCH v3 1/7 mk: build with _GNU_SOURCE defined by default
We use _GNU_SOURCE all over the place, but often times we miss defining it, resulting in broken builds on musl. Rather than fixing every library's and driver's and application's makefile, fix it by simply defining _GNU_SOURCE by default for all builds.
Remove all usages of _GNU_SOURCE in source files and makefiles, and also fixup a couple of instances of using __USE_GNU instead of _GNU_SOURCE.
--- app/meson.build | 7 +++++- app/test-pmd/Makefile | 2 -- buildtools/pmdinfogen/pmdinfogen.c | 1 - drivers/bus/dpaa/Makefile | 1 - drivers/bus/dpaa/meson.build | 1 - drivers/bus/fslmc/meson.build | 1 - drivers/bus/pci/linux/Makefile | 2 -- drivers/bus/pci/meson.build | 1 - drivers/crypto/dpaa2_sec/Makefile | 1 - drivers/crypto/dpaa_sec/Makefile | 1 - drivers/mempool/dpaa/Makefile | 1 - drivers/meson.build | 4 ++++ drivers/net/mlx5/mlx5_ethdev.c | 2 -- drivers/net/mlx5/mlx5_socket.c | 2 -- drivers/net/softnic/conn.c | 1 - examples/cmdline/Makefile | 1 - examples/ethtool/ethtool-app/Makefile | 2 +- examples/ip_pipeline/conn.c | 1 - examples/l2fwd-cat/Makefile | 2 -- examples/l2fwd-cat/meson.build | 1 - examples/load_balancer/Makefile | 1 - examples/meson.build | 4 ++++ .../performance-thread/l3fwd-thread/main.c | 2 -- .../performance-thread/pthread_shim/main.c | 1 - .../pthread_shim/pthread_shim.c | 1 - examples/qos_sched/Makefile | 2 -- examples/tep_termination/Makefile | 1 - examples/vhost/Makefile | 1 - examples/vhost_crypto/Makefile | 1 - examples/vhost_crypto/meson.build | 2 +- examples/vhost_scsi/Makefile | 4 ++-- examples/vhost_scsi/meson.build | 2 +- lib/librte_cmdline/Makefile | 1 - lib/librte_cmdline/cmdline.c | 24 ------------------- lib/librte_eal/bsdapp/eal/Makefile | 5 ---- lib/librte_eal/linuxapp/eal/Makefile | 16 ------------- lib/librte_eal/meson.build | 1 - lib/librte_pdump/Makefile | 1 - lib/librte_sched/Makefile | 2 -- lib/meson.build | 4 ++++ mk/target/generic/rte.vars.mk | 3 +++ test/test/Makefile | 2 -- test/test/meson.build | 3 +++ 43 files changed, 29 insertions(+), 90 deletions(-)
app/meson.build +6 -1
@@ -11,13 +11,18 @@ apps = ['pdump', # for BSD only lib_execinfo = cc.find_library('execinfo', required: false) +default_cflags = machine_args + +# specify -D_GNU_SOURCE unconditionally +default_cflags += '-D_GNU_SOURCE' + foreach app:apps build = true name = app allow_experimental_apis = false sources = [] includes = [] - cflags = machine_args + cflags = default_cflags objs = [] # other object files to link against, used e.g. for # instruction-set optimized versions of code
app/test-pmd/Makefile +0 -2
@@ -70,8 +70,6 @@ endif endif -CFLAGS_cmdline.o := -D_GNU_SOURCE - include $(RTE_SDK)/mk/rte.app.mk endif
buildtools/pmdinfogen/pmdinfogen.c +0 -1
@@ -8,7 +8,6 @@* */ -#define _GNU_SOURCE#include <stdio.h> #include <ctype.h> #include <string.h>
drivers/bus/dpaa/Makefile +0 -1
@@ -14,7 +14,6 @@ CFLAGS := -I$(SRCDIR) $(CFLAGS) CFLAGS += -O3 $(WERROR_FLAGS) CFLAGS += -Wno-pointer-arith CFLAGS += -Wno-cast-qual -CFLAGS += -D _GNU_SOURCE CFLAGS += -I$(RTE_BUS_DPAA)/ CFLAGS += -I$(RTE_BUS_DPAA)/include CFLAGS += -I$(RTE_BUS_DPAA)/base/qbman
drivers/bus/dpaa/meson.build +0 -1
@@ -26,4 +26,3 @@ if cc.has_argument('-Wno-cast-qual') endif includes += include_directories('include', 'base/qbman') -cflags += ['-D_GNU_SOURCE']
drivers/bus/fslmc/meson.build +0 -1
@@ -24,4 +24,3 @@ sources = files('fslmc_bus.c', allow_experimental_apis = true includes += include_directories('mc', 'qbman/include', 'portal') -cflags += ['-D_GNU_SOURCE']
drivers/bus/pci/linux/Makefile +0 -2
@@ -4,5 +4,3 @@ SRCS += pci.c SRCS += pci_uio.c SRCS += pci_vfio.c - -CFLAGS += -D_GNU_SOURCE
drivers/bus/pci/meson.build +0 -1
@@ -11,7 +11,6 @@ if host_machine.system() == 'linux' 'linux/pci_uio.c', 'linux/pci_vfio.c') includes += include_directories('linux') - cflags += ['-D_GNU_SOURCE'] else sources += files('bsd/pci.c') includes += include_directories('bsd')
drivers/crypto/dpaa2_sec/Makefile +0 -1
@@ -20,7 +20,6 @@ LIB = librte_pmd_dpaa2_sec.a CFLAGS += -DALLOW_EXPERIMENTAL_API CFLAGS += -O3 CFLAGS += $(WERROR_FLAGS) -CFLAGS += -D _GNU_SOURCE ifeq ($(CONFIG_RTE_TOOLCHAIN_GCC),y) ifeq ($(shell test $(GCC_VERSION) -gt 70 && echo 1), 1)
drivers/crypto/dpaa_sec/Makefile +0 -1
@@ -11,7 +11,6 @@ LIB = librte_pmd_dpaa_sec.a # build flags CFLAGS += -DALLOW_EXPERIMENTAL_API -CFLAGS += -D _GNU_SOURCE CFLAGS += -O3 CFLAGS += $(WERROR_FLAGS)
drivers/mempool/dpaa/Makefile +0 -1
@@ -10,7 +10,6 @@ LIB = librte_mempool_dpaa.a CFLAGS := -I$(SRCDIR) $(CFLAGS) CFLAGS += -O3 $(WERROR_FLAGS) -CFLAGS += -D _GNU_SOURCE CFLAGS += -I$(RTE_SDK)/drivers/bus/dpaa CFLAGS += -I$(RTE_SDK)/drivers/bus/dpaa/include/ CFLAGS += -I$(RTE_SDK)/drivers/mempool/dpaa
drivers/meson.build +4 -0
@@ -16,6 +16,10 @@ default_cflags = machine_args if cc.has_argument('-Wno-format-truncation') default_cflags += '-Wno-format-truncation' endif + +# specify -D_GNU_SOURCE unconditionally +default_cflags += '-D_GNU_SOURCE' + foreach class:driver_classes drivers = [] std_deps = []
drivers/net/mlx5/mlx5_ethdev.c +0 -2
@@ -3,8 +3,6 @@* Copyright 2015 Mellanox Technologies, Ltd */ -#define _GNU_SOURCE -#include <stddef.h> #include <assert.h> #include <inttypes.h>
drivers/net/mlx5/mlx5_socket.c +0 -2
@@ -3,8 +3,6 @@* Copyright 2016 Mellanox Technologies, Ltd */ -#define _GNU_SOURCE -#include <sys/types.h> #include <sys/socket.h> #include <sys/un.h>
drivers/net/softnic/conn.c +0 -1
@@ -8,7 +8,6 @@#include <unistd.h> #include <sys/types.h> -#define __USE_GNU#include <sys/socket.h> #include <sys/epoll.h>
examples/cmdline/Makefile +0 -1
@@ -56,7 +56,6 @@ SRCS-y := main.c commands.c parse_obj_list.c CFLAGS += -O3 CFLAGS += $(WERROR_FLAGS) -CFLAGS_parse_obj_list.o := -D_GNU_SOURCE include $(RTE_SDK)/mk/rte.extapp.mk
examples/ethtool/ethtool-app/Makefile +1 -1
@@ -16,7 +16,7 @@ APP = ethtool # all source are stored in SRCS-y SRCS-y := main.c ethapp.c -CFLAGS += -O3 -D_GNU_SOURCE -pthread -I$(SRCDIR)/../lib +CFLAGS += -O3 -pthread -I$(SRCDIR)/../lib CFLAGS += $(WERROR_FLAGS) LDLIBS += -L$(subst ethtool-app,lib,$(RTE_OUTPUT))/lib
examples/ip_pipeline/conn.c +0 -1
@@ -8,7 +8,6 @@#include <unistd.h> #include <sys/types.h> -#define __USE_GNU#include <sys/socket.h> #include <sys/epoll.h>
examples/l2fwd-cat/Makefile +0 -2
@@ -23,7 +23,6 @@ CFLAGS += -O3 $(shell pkg-config --cflags libdpdk) LDFLAGS_SHARED = $(shell pkg-config --libs libdpdk) LDFLAGS_STATIC = -Wl,-Bstatic $(shell pkg-config --static --libs libdpdk) -CFLAGS += -D_GNU_SOURCE LDFLAGS += -lpqos build/$(APP)-shared: $(SRCS-y) Makefile $(PC_FILE) | build
@@ -66,7 +65,6 @@ endif EXTRA_CFLAGS += -O3 -g -Wfatal-errors CFLAGS += -I$(PQOS_INSTALL_PATH)/../include -CFLAGS_cat.o := -D_GNU_SOURCE LDLIBS += -L$(PQOS_INSTALL_PATH) LDLIBS += -lpqos
examples/l2fwd-cat/meson.build +0 -1
@@ -9,7 +9,6 @@ pqos = cc.find_library('pqos', required: false) build = pqos.found() ext_deps += pqos -cflags += '-D_GNU_SOURCE' cflags += '-I/usr/local/include' # assume pqos lib installed in /usr/local sources = files( 'cat.c', 'l2fwd-cat.c'
examples/load_balancer/Makefile +0 -1
@@ -50,7 +50,6 @@ include $(RTE_SDK)/mk/rte.vars.mk CFLAGS += -O3 -g CFLAGS += $(WERROR_FLAGS) -CFLAGS_config.o := -D_GNU_SOURCE # workaround for a gcc bug with noreturn attribute # http://gcc.gnu.org/bugzilla/show_bug.cgi?id=12603
examples/meson.build +4 -0
@@ -22,6 +22,10 @@ default_cflags = machine_args if cc.has_argument('-Wno-format-truncation') default_cflags += '-Wno-format-truncation' endif + +# specify -D_GNU_SOURCE unconditionally +default_cflags += '-D_GNU_SOURCE' + foreach example: examples name = example build = true
examples/performance-thread/l3fwd-thread/main.c +0 -2
@@ -2,8 +2,6 @@* Copyright(c) 2010-2016 Intel Corporation */ -#define _GNU_SOURCE -#include <stdio.h> #include <stdlib.h> #include <stdint.h>
examples/performance-thread/pthread_shim/main.c +0 -1
@@ -2,7 +2,6 @@* Copyright(c) 2015 Intel Corporation */ -#define _GNU_SOURCE#include <stdio.h> #include <stdlib.h> #include <stdint.h>
examples/performance-thread/pthread_shim/pthread_shim.c +0 -1
@@ -6,7 +6,6 @@#include <stdlib.h> #include <sys/types.h> #include <errno.h> -#define __USE_GNU#include <sched.h> #include <dlfcn.h>
examples/qos_sched/Makefile +0 -2
@@ -57,8 +57,6 @@ else CFLAGS += -O3 CFLAGS += $(WERROR_FLAGS) -CFLAGS_args.o := -D_GNU_SOURCE -CFLAGS_cfg_file.o := -D_GNU_SOURCE include $(RTE_SDK)/mk/rte.extapp.mk
examples/tep_termination/Makefile +0 -1
@@ -60,7 +60,6 @@ endif CFLAGS += -DALLOW_EXPERIMENTAL_API CFLAGS += -O3 CFLAGS += $(WERROR_FLAGS) -CFLAGS += -D_GNU_SOURCE include $(RTE_SDK)/mk/rte.extapp.mk endif
examples/vhost/Makefile +0 -1
@@ -61,7 +61,6 @@ else CFLAGS += -DALLOW_EXPERIMENTAL_API CFLAGS += -O2 -D_FILE_OFFSET_BITS=64 CFLAGS += $(WERROR_FLAGS) -CFLAGS += -D_GNU_SOURCE include $(RTE_SDK)/mk/rte.extapp.mk
examples/vhost_crypto/Makefile +0 -1
@@ -25,7 +25,6 @@ SRCS-y := main.c CFLAGS += -DALLOW_EXPERIMENTAL_API CFLAGS += -O2 -D_FILE_OFFSET_BITS=64 CFLAGS += $(WERROR_FLAGS) -CFLAGS += -D_GNU_SOURCE include $(RTE_SDK)/mk/rte.extapp.mk
examples/vhost_crypto/meson.build +1 -1
@@ -8,7 +8,7 @@ allow_experimental_apis = true deps += ['vhost', 'cryptodev'] -cflags += ['-D_GNU_SOURCE','-D_FILE_OFFSET_BITS=64'] +cflags += ['-D_FILE_OFFSET_BITS=64'] sources = files( 'main.c' )
examples/vhost_scsi/Makefile +2 -2
@@ -18,7 +18,7 @@ shared: build/$(APP)-shared static: build/$(APP)-static ln -sf $(APP)-static build/$(APP) -CFLAGS += -D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 +CFLAGS += -D_FILE_OFFSET_BITS=64 LDFLAGS += -pthread PC_FILE := $(shell pkg-config --path libdpdk)
@@ -57,7 +57,7 @@ please change the definition of the RTE_TARGET environment variable) all: else -CFLAGS += -D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 +CFLAGS += -D_FILE_OFFSET_BITS=64 CFLAGS += -O2 CFLAGS += $(WERROR_FLAGS)
examples/vhost_scsi/meson.build +1 -1
@@ -10,7 +10,7 @@ if host_machine.system() != 'linux' build = false endif deps += 'vhost' -cflags += ['-D_GNU_SOURCE','-D_FILE_OFFSET_BITS=64'] +cflags += ['-D_FILE_OFFSET_BITS=64'] sources = files( 'scsi.c', 'vhost_scsi.c' )
lib/librte_cmdline/Makefile +0 -1
@@ -25,7 +25,6 @@ SRCS-$(CONFIG_RTE_LIBRTE_CMDLINE) += cmdline_vt100.c SRCS-$(CONFIG_RTE_LIBRTE_CMDLINE) += cmdline_socket.c SRCS-$(CONFIG_RTE_LIBRTE_CMDLINE) += cmdline_parse_portlist.c -CFLAGS += -D_GNU_SOURCE LDLIBS += -lrte_eal # install includes
lib/librte_cmdline/cmdline.c +0 -24
@@ -126,35 +126,11 @@ cmdline_printf(const struct cmdline *cl, const char *fmt, ...)if (!cl || !fmt)return ; -#ifdef _GNU_SOURCEif (cl->s_out <0 )return ;va_start (ap, fmt);vdprintf (cl->s_out, fmt, ap);va_end (ap); -#else -int ret; -char *buf; - -if (cl->s_out <0 ) -return ; - - buf =malloc (BUFSIZ ); -if (buf ==NULL ) -return ; -va_start (ap, fmt); - ret =vsnprintf (buf,BUFSIZ , fmt, ap); -va_end (ap); -if (ret <0 ) { -free (buf); -return ; - } -if (ret >=BUFSIZ ) - ret =BUFSIZ -1 ; - ret =write (cl->s_out, buf, ret); - (void )ret; -free (buf); -#endif }int
lib/librte_eal/bsdapp/eal/Makefile +0 -5
@@ -77,11 +77,6 @@ SRCS-y += rte_cycles.c CFLAGS_eal_common_cpuflags.o := $(CPUFLAGS_LIST) -CFLAGS_eal.o := -D_GNU_SOURCE -#CFLAGS_eal_thread.o := -D_GNU_SOURCE -CFLAGS_eal_log.o := -D_GNU_SOURCE -CFLAGS_eal_common_log.o := -D_GNU_SOURCE - # workaround for a gcc bug with noreturn attribute # http://gcc.gnu.org/bugzilla/show_bug.cgi?id=12603 ifeq ($(CONFIG_RTE_TOOLCHAIN_GCC),y)
lib/librte_eal/linuxapp/eal/Makefile +0 -16
@@ -85,22 +85,6 @@ SRCS-y += rte_cycles.c CFLAGS_eal_common_cpuflags.o := $(CPUFLAGS_LIST) -CFLAGS_eal.o := -D_GNU_SOURCE -CFLAGS_eal_interrupts.o := -D_GNU_SOURCE -CFLAGS_eal_vfio_mp_sync.o := -D_GNU_SOURCE -CFLAGS_eal_timer.o := -D_GNU_SOURCE -CFLAGS_eal_lcore.o := -D_GNU_SOURCE -CFLAGS_eal_memalloc.o := -D_GNU_SOURCE -CFLAGS_eal_thread.o := -D_GNU_SOURCE -CFLAGS_eal_log.o := -D_GNU_SOURCE -CFLAGS_eal_common_log.o := -D_GNU_SOURCE -CFLAGS_eal_hugepage_info.o := -D_GNU_SOURCE -CFLAGS_eal_common_whitelist.o := -D_GNU_SOURCE -CFLAGS_eal_common_options.o := -D_GNU_SOURCE -CFLAGS_eal_common_thread.o := -D_GNU_SOURCE -CFLAGS_eal_common_lcore.o := -D_GNU_SOURCE -CFLAGS_rte_cycles.o := -D_GNU_SOURCE - # workaround for a gcc bug with noreturn attribute # http://gcc.gnu.org/bugzilla/show_bug.cgi?id=12603 ifeq ($(CONFIG_RTE_TOOLCHAIN_GCC),y)
lib/librte_eal/meson.build +0 -1
@@ -25,7 +25,6 @@ version = 8 # the version of the EAL API allow_experimental_apis = true deps += 'compat' deps += 'kvargs' -cflags += '-D_GNU_SOURCE' sources = common_sources + env_sources objs = common_objs + env_objs headers = common_headers + env_headers
lib/librte_pdump/Makefile +0 -1
@@ -8,7 +8,6 @@ LIB = librte_pdump.a CFLAGS += -DALLOW_EXPERIMENTAL_API CFLAGS += $(WERROR_FLAGS) -I$(SRCDIR) -O3 -CFLAGS += -D_GNU_SOURCE LDLIBS += -lrte_eal -lrte_mempool -lrte_mbuf -lrte_ethdev EXPORT_MAP := rte_pdump_version.map
lib/librte_sched/Makefile +0 -2
@@ -11,8 +11,6 @@ LIB = librte_sched.a CFLAGS += -O3 CFLAGS += $(WERROR_FLAGS) -CFLAGS_rte_red.o := -D_GNU_SOURCE - LDLIBS += -lm LDLIBS += -lrt LDLIBS += -lrte_eal -lrte_mempool -lrte_mbuf -lrte_net
lib/meson.build +4 -0
@@ -32,6 +32,10 @@ if cc.has_argument('-Wno-format-truncation') endif enabled_libs = [] # used to print summary at the end + +# -D_GNU_SOURCE unconditionally +default_cflags += '-D_GNU_SOURCE' + foreach l:libraries build = true name = l
mk/target/generic/rte.vars.mk +3 -0
@@ -108,6 +108,9 @@ CFLAGS += -include $(RTE_SDK_BIN)/include/rte_config.h LDFLAGS += -L$(RTE_SDK_BIN)/lib endif +# always define _GNU_SOURCE +CFLAGS += -D_GNU_SOURCE + export CFLAGS export LDFLAGS
test/test/Makefile +0 -2
@@ -209,8 +209,6 @@ CFLAGS += -DALLOW_EXPERIMENTAL_API CFLAGS += -O3 CFLAGS += $(WERROR_FLAGS) -CFLAGS += -D_GNU_SOURCE - LDLIBS += -lm ifeq ($(CONFIG_RTE_COMPRESSDEV_TEST),y) ifeq ($(CONFIG_RTE_LIBRTE_COMPRESSDEV),y)
test/test/meson.build +3 -0
@@ -251,6 +251,9 @@ if cc.has_argument('-Wno-format-truncation') cflags += '-Wno-format-truncation' endif +# specify -D_GNU_SOURCE unconditionally +default_cflags += '-D_GNU_SOURCE' + test_dep_objs = [] compress_test_dep = dependency('zlib', required: false) if compress_test_dep.found()
Signature · 1 line
2.17.1
PATCH v3 2/7 pci/vfio: improve musl compatibility
In reply to Anatoly BurakovMusl already has PAGE_SIZE defined, and our define clashed with it. Rename our define to SYS_PAGE_SIZE.
Bugzilla ID: 36
--- drivers/bus/pci/linux/pci_vfio.c | 2 ++ 1 file changed, 2 insertions(+)
drivers/bus/pci/linux/pci_vfio.c +2 -0
@@ -35,7 +35,9 @@#ifdef VFIO_PRESENT +#ifndef PAGE_SIZE #define PAGE_SIZE (sysconf(_SC_PAGESIZE)) +#endif #define PAGE_MASK (~(PAGE_SIZE - 1)) static struct rte_tailq_elem rte_vfio_tailq = {
Signature · 1 line
2.17.1
PATCH v3 3/7 fbarray: improve musl compatibility
In reply to Anatoly BurakovWhen built against musl, fcntl.h doesn't silently get included. Fix by including it explicitly.
Bugzilla ID: 34
--- lib/librte_eal/common/eal_common_fbarray.c | 1 + 1 file changed, 1 insertion(+)
lib/librte_eal/common/eal_common_fbarray.c +1 -0
@@ -2,6 +2,7 @@* Copyright(c) 2017-2018 Intel Corporation */ +#include <fcntl.h> #include <inttypes.h> #include <limits.h> #include <sys/mman.h>
Signature · 1 line
2.17.1
PATCH v3 4/7 eal/hugepage_info: improve musl compatibility
In reply to Anatoly BurakovWhen built against musl, fcntl.h doesn't silently get included. Fix by including it explicitly.
Bugzilla ID: 33
--- lib/librte_eal/linuxapp/eal/eal_hugepage_info.c | 1 + 1 file changed, 1 insertion(+)
lib/librte_eal/linuxapp/eal/eal_hugepage_info.c +1 -0
@@ -6,6 +6,7 @@#include <sys/types.h> #include <sys/file.h> #include <dirent.h> +#include <fcntl.h> #include <stdint.h> #include <stdlib.h> #include <stdio.h>
Signature · 1 line
2.17.1
PATCH v3 5/7 mem: improve musl compatibility
In reply to Anatoly BurakovWhen built against musl, fcntl.h doesn't silently get included. Fix by including it explicitly.
Bugzilla ID: 31
--- lib/librte_eal/common/eal_common_memory.c | 1 + lib/librte_eal/linuxapp/eal/eal_memory.c | 1 + 2 files changed, 2 insertions(+)
lib/librte_eal/common/eal_common_memory.c +1 -0
@@ -2,6 +2,7 @@* Copyright(c) 2010-2014 Intel Corporation */ +#include <fcntl.h> #include <errno.h> #include <stdio.h> #include <stdint.h>
lib/librte_eal/linuxapp/eal/eal_memory.c +1 -0
@@ -5,6 +5,7 @@#define _FILE_OFFSET_BITS 64#include <errno.h> +#include <fcntl.h> #include <stdarg.h> #include <stdbool.h> #include <stdlib.h>
Signature · 1 line
2.17.1
PATCH v3 6/7 string_fns: improve musl compatibility
In reply to Anatoly BurakovMusl wraps various string functions such as strlcpy in order to harden them. However, the fortify wrappers are included without including the actual string functions being wrapped, which throws missing definition compile errors. Fix by including string.h in string functions header.
--- lib/librte_eal/common/include/rte_string_fns.h | 1 + 1 file changed, 1 insertion(+)
lib/librte_eal/common/include/rte_string_fns.h +1 -0
@@ -16,6 +16,7 @@ extern "C" {#endif #include <stdio.h> +#include <string.h> /** * Takes string "string" parameter and splits it at character "delim"
Signature · 1 line
2.17.1
PATCH v3 7/7 eal: improve musl compatibility
In reply to Anatoly BurakovMusl complains about pthread id being of wrong size, because on musl, pthread_t is a struct pointer, not an unsinged int. Fix the printing code by casting pthread id to unsigned pointer type and adjusting the format specifier to be of appropriate size.
--- lib/librte_eal/linuxapp/eal/eal.c | 4 ++-- lib/librte_eal/linuxapp/eal/eal_thread.c | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-)
lib/librte_eal/linuxapp/eal/eal.c +2 -2
@@ -979,8 +979,8 @@ rte_eal_init(int argc, char **argv) ret =eal_thread_dump_affinity (cpuset,sizeof (cpuset)); -RTE_LOG (DEBUG ,EAL ,"Master lcore %u is ready (tid=%x;cpuset=[%s%s])\n" , - rte_config.master_lcore, (int )thread_id, cpuset, +RTE_LOG (DEBUG ,EAL ,"Master lcore %u is ready (tid=%zx;cpuset=[%s%s])\n" , + rte_config.master_lcore, (uintptr_t )thread_id, cpuset, ret ==0 ?"" :"..." );RTE_LCORE_FOREACH_SLAVE (i) {
lib/librte_eal/linuxapp/eal/eal_thread.c +2 -2
@@ -121,8 +121,8 @@ eal_thread_loop(__attribute__((unused)) void *arg) ret =eal_thread_dump_affinity (cpuset,sizeof (cpuset)); -RTE_LOG (DEBUG ,EAL ,"lcore %u is ready (tid=%x;cpuset=[%s%s])\n" , - lcore_id, (int )thread_id, cpuset, ret ==0 ?"" :"..." ); +RTE_LOG (DEBUG ,EAL ,"lcore %u is ready (tid=%zx;cpuset=[%s%s])\n" , + lcore_id, (uintptr_t )thread_id, cpuset, ret ==0 ?"" :"..." );/* read on our pipe to get commands */ while (1 ) {
Signature · 1 line
2.17.1
Thomas Monjalon
Applied04/10/2018 12:20, Anatoly Burakov:
Quoted 25 lines
This patchset fixes numerous issues with musl compatibility in the core EAL libraries. It does not fix anything beyond core EAL (so, PCI driver is still broken, so are a few other drivers), but it's a good start.
Tested on container with Alpine Linux. Alpine dependencies:
build-base bsd-compat-headers libexecinfo-dev linux-headers numactl-dev
For numactl-dev, testing repository needs to be enabled:
echo "http://dl-cdn.alpinelinux.org/alpine/edge/testing" >>
/etc/apk/repositoriesIf successful (using a very broad definition of "success"), the build should fail somewhere in PCI bus driver in UIO.
v3 -> v2:
- Made_GNU_SOURCEunconditional for all DPDK targets
- Fixed usage of__USE_GNUand_GNU_SOURCEaccross DPDKv2 -> v1:
- Fixed patch 2 to use existing define if available
- Fixed patch 7 to use proper format specifier and cast pthread ID to unsigned pointer type
Quoted 8 lines
Anatoly Burakov (7):
mk: build with_GNU_SOURCEdefined by default
pci/vfio: improve musl compatibility
fbarray: improve musl compatibility
eal/hugepage_info: improve musl compatibility
mem: improve musl compatibility
string_fns: improve musl compatibility
eal: improve musl compatibility
Applied, thanks
Hope the _GNU_SOURCE source won't bring too much compilation surprises.
Quoted 7 lines · Anatoly Burakov
This patchset fixes numerous issues with musl compatibility in the core EAL libraries. It does not fix anything beyond core EAL (so, PCI driver is still broken, so are a few other drivers), but it's a good start.
Tested on container with Alpine Linux. Alpine dependencies:
Quoted 9 lines
build-base bsd-compat-headers libexecinfo-dev linux-headers numactl-dev
For numactl-dev, testing repository needs to be enabled:
echo "http://dl-cdn.alpinelinux.org/alpine/edge/testing" >>
/etc/apk/repositoriesIf successful (using a very broad definition of "success"), the build should fail somewhere in PCI bus driver in UIO.
Disabling the kernel drivers, I get a build of EAL and the other libraries to compile as static libraries. However, shared library builds - and therefore meson builds fail due to missing backtrace function when linking. There is still work to do here, but this does fix a number of build errors on alpine.
28/09/2018 17:25, Bruce Richardson:
Quoted 18 lines · Anatoly Burakov
Quoted 7 lines
This patchset fixes numerous issues with musl compatibility in the core EAL libraries. It does not fix anything beyond core EAL (so, PCI driver is still broken, so are a few other drivers), but it's a good start.
Tested on container with Alpine Linux. Alpine dependencies:
Quoted 9 lines
build-base bsd-compat-headers libexecinfo-dev linux-headers numactl-dev
For numactl-dev, testing repository needs to be enabled:
echo "http://dl-cdn.alpinelinux.org/alpine/edge/testing" >>
/etc/apk/repositoriesIf successful (using a very broad definition of "success"), the build should fail somewhere in PCI bus driver in UIO.
Quoted 7 lines
Disabling the kernel drivers, I get a build of EAL and the other libraries to compile as static libraries. However, shared library builds - and therefore meson builds fail due to missing backtrace function when linking. There is still work to do here, but this does fix a number of build errors on alpine.
Acked-by Bruce Richardson <[email protected]>
I see this error with meson GCC-8.2 static:
examples/ip_pipeline/conn.c:11: error: "__USE_GNU" redefined
Quoted 25 lines · Thomas Monjalon
28/09/2018 17:25, Bruce Richardson:
Quoted 24 lines · Anatoly Burakov
Quoted 7 lines
This patchset fixes numerous issues with musl compatibility in the core EAL libraries. It does not fix anything beyond core EAL (so, PCI driver is still broken, so are a few other drivers), but it's a good start.
Tested on container with Alpine Linux. Alpine dependencies:
Quoted 9 lines
build-base bsd-compat-headers libexecinfo-dev linux-headers numactl-dev
For numactl-dev, testing repository needs to be enabled:
echo "http://dl-cdn.alpinelinux.org/alpine/edge/testing" >>
/etc/apk/repositoriesIf successful (using a very broad definition of "success"), the build should fail somewhere in PCI bus driver in UIO.
Disabling the kernel drivers, I get a build of EAL and the other libraries to compile as static libraries. However, shared library builds - and therefore meson builds fail due to missing backtrace function when linking. There is still work to do here, but this does fix a number of build errors on alpine.
Quoted 5 lines
Quoted 1 line
Acked-by Bruce Richardson <[email protected]>I see this error with meson GCC-8.2 static:
examples/ip_pipeline/conn.c:11: error: "__USE_GNU" redefined
Why are we defining these? __USE_GNU is defined by <features.h> and isn't supposed to be defined/undefined by the user in the first place.
Signature · 2 lines
Thanks, Anatoly