Message ID | 20210225182250.1149592-5-thomas@monjalon.net (mailing list archive) |
---|---|
State | Superseded |
Headers | show |
Series | Alpine/musl build support | expand |
Context | Check | Description |
---|---|---|
ci/checkpatch | success | coding style OK |
On Thu, Feb 25, 2021 at 07:22:37PM +0100, Thomas Monjalon wrote: > There was an intent to define _GNU_SOURCE globally, > but it was not set in pkg-config for external applications. > Is this something that we really want to do, to force all external apps to use _GNU_SOURCE when compiling? Do some of our header files rely on definitions only available with _GNU_SOURCE? If so, we should probably look to remove that dependency rather than mandating the define.
26/02/2021 10:08, Bruce Richardson: > On Thu, Feb 25, 2021 at 07:22:37PM +0100, Thomas Monjalon wrote: > > There was an intent to define _GNU_SOURCE globally, > > but it was not set in pkg-config for external applications. > > > Is this something that we really want to do, to force all external apps to > use _GNU_SOURCE when compiling? Do some of our header files rely on > definitions only available with _GNU_SOURCE? If so, we should probably look > to remove that dependency rather than mandating the define. From patch 5: In musl libc, cpu_set_t is defined only if _GNU_SOURCE is defined. If we avoid mandating _GNU_SOURCE, we must #ifdef functions relying on rte_cpuset_t in the headers: - rte_lcore_cpuset - rte_thread_set_affinity - rte_thread_get_affinity - rte_telemetry_init (internal) Or a different trick in linux/include/rte_os.h could be: typedef void rte_cpuset_t; so it allows including files, but not using above functions of course.
On Fri, Feb 26, 2021 at 10:40:32AM +0100, Thomas Monjalon wrote: > 26/02/2021 10:08, Bruce Richardson: > > On Thu, Feb 25, 2021 at 07:22:37PM +0100, Thomas Monjalon wrote: > > > There was an intent to define _GNU_SOURCE globally, > > > but it was not set in pkg-config for external applications. > > > > > Is this something that we really want to do, to force all external apps to > > use _GNU_SOURCE when compiling? Do some of our header files rely on > > definitions only available with _GNU_SOURCE? If so, we should probably look > > to remove that dependency rather than mandating the define. > > From patch 5: > In musl libc, cpu_set_t is defined only if _GNU_SOURCE is defined. > > If we avoid mandating _GNU_SOURCE, > we must #ifdef functions relying on rte_cpuset_t in the headers: > - rte_lcore_cpuset > - rte_thread_set_affinity > - rte_thread_get_affinity > - rte_telemetry_init (internal) > Or a different trick in linux/include/rte_os.h could be: > typedef void rte_cpuset_t; > so it allows including files, but not using above functions of course. > Can we just define _GNU_SOURCE in the header file with rte_cpuset_t?
26/02/2021 10:46, Bruce Richardson: > On Fri, Feb 26, 2021 at 10:40:32AM +0100, Thomas Monjalon wrote: > > 26/02/2021 10:08, Bruce Richardson: > > > On Thu, Feb 25, 2021 at 07:22:37PM +0100, Thomas Monjalon wrote: > > > > There was an intent to define _GNU_SOURCE globally, > > > > but it was not set in pkg-config for external applications. > > > > > > > Is this something that we really want to do, to force all external apps to > > > use _GNU_SOURCE when compiling? Do some of our header files rely on > > > definitions only available with _GNU_SOURCE? If so, we should probably look > > > to remove that dependency rather than mandating the define. > > > > From patch 5: > > In musl libc, cpu_set_t is defined only if _GNU_SOURCE is defined. > > > > If we avoid mandating _GNU_SOURCE, > > we must #ifdef functions relying on rte_cpuset_t in the headers: > > - rte_lcore_cpuset > > - rte_thread_set_affinity > > - rte_thread_get_affinity > > - rte_telemetry_init (internal) > > Or a different trick in linux/include/rte_os.h could be: > > typedef void rte_cpuset_t; > > so it allows including files, but not using above functions of course. > > > Can we just define _GNU_SOURCE in the header file with rte_cpuset_t? That would be the simplest solution yes :) I don't really like defining such flag in a header file because it impacts all code coming after the include. It would mean all includes done after DPDK ones behave differently. I vote for the trick: #ifdef _GNU_SOURCE typedef cpu_set_t rte_cpuset_t; #else typedef void rte_cpuset_t; #endif Opinions?
26/02/2021 11:04, Thomas Monjalon: > 26/02/2021 10:46, Bruce Richardson: > > On Fri, Feb 26, 2021 at 10:40:32AM +0100, Thomas Monjalon wrote: > > > 26/02/2021 10:08, Bruce Richardson: > > > > On Thu, Feb 25, 2021 at 07:22:37PM +0100, Thomas Monjalon wrote: > > > > > There was an intent to define _GNU_SOURCE globally, > > > > > but it was not set in pkg-config for external applications. > > > > > > > > > Is this something that we really want to do, to force all external apps to > > > > use _GNU_SOURCE when compiling? Do some of our header files rely on > > > > definitions only available with _GNU_SOURCE? If so, we should probably look > > > > to remove that dependency rather than mandating the define. > > > > > > From patch 5: > > > In musl libc, cpu_set_t is defined only if _GNU_SOURCE is defined. > > > > > > If we avoid mandating _GNU_SOURCE, > > > we must #ifdef functions relying on rte_cpuset_t in the headers: > > > - rte_lcore_cpuset > > > - rte_thread_set_affinity > > > - rte_thread_get_affinity > > > - rte_telemetry_init (internal) > > > Or a different trick in linux/include/rte_os.h could be: > > > typedef void rte_cpuset_t; > > > so it allows including files, but not using above functions of course. > > > > > Can we just define _GNU_SOURCE in the header file with rte_cpuset_t? > > That would be the simplest solution yes :) > I don't really like defining such flag in a header file because > it impacts all code coming after the include. > It would mean all includes done after DPDK ones behave differently. > > I vote for the trick: > #ifdef _GNU_SOURCE > typedef cpu_set_t rte_cpuset_t; > #else > typedef void rte_cpuset_t; > #endif > > Opinions? I changed my mind, I think it is saner to not export functions which use rte_cpuset_t, if the type is not defined. The type definition is detected thanks to CPU_SETSIZE and a new definition is used inside DPDK: RTE_HAS_CPUSET. I think it is more elegant and easier to debug. I am sending a v6.
diff --git a/app/test/meson.build b/app/test/meson.build index 099895fc87..76eaaea457 100644 --- a/app/test/meson.build +++ b/app/test/meson.build @@ -398,8 +398,6 @@ if cc.has_argument('-Wno-format-truncation') cflags += '-Wno-format-truncation' endif -# specify -D_GNU_SOURCE unconditionally -cflags += '-D_GNU_SOURCE' # Strict-aliasing rules are violated by uint8_t[] to context size casts. cflags += '-fno-strict-aliasing' diff --git a/buildtools/pkg-config/meson.build b/buildtools/pkg-config/meson.build index 39a8fd1c8e..d3f3edaa2f 100644 --- a/buildtools/pkg-config/meson.build +++ b/buildtools/pkg-config/meson.build @@ -3,6 +3,7 @@ pkg = import('pkgconfig') pkg_extra_cflags = ['-include', 'rte_config.h'] + machine_args +pkg_extra_cflags += '-D_GNU_SOURCE' if is_freebsd pkg_extra_cflags += ['-D__BSD_VISIBLE'] endif diff --git a/drivers/bus/fslmc/qbman/include/compat.h b/drivers/bus/fslmc/qbman/include/compat.h index 1ddd69e127..a4471a80af 100644 --- a/drivers/bus/fslmc/qbman/include/compat.h +++ b/drivers/bus/fslmc/qbman/include/compat.h @@ -8,9 +8,6 @@ #ifndef HEADER_COMPAT_H #define HEADER_COMPAT_H -#ifndef _GNU_SOURCE -#define _GNU_SOURCE -#endif #include <stdio.h> #include <stdint.h> #include <stdlib.h> diff --git a/drivers/common/dpaax/compat.h b/drivers/common/dpaax/compat.h index 1a5f36e99e..c69e76ab96 100644 --- a/drivers/common/dpaax/compat.h +++ b/drivers/common/dpaax/compat.h @@ -10,10 +10,6 @@ #define __COMPAT_H #include <sched.h> - -#ifndef _GNU_SOURCE -#define _GNU_SOURCE -#endif #include <stdint.h> #include <stdlib.h> #include <stddef.h> diff --git a/drivers/common/dpaax/meson.build b/drivers/common/dpaax/meson.build index 4535482701..b7f177a62e 100644 --- a/drivers/common/dpaax/meson.build +++ b/drivers/common/dpaax/meson.build @@ -10,7 +10,6 @@ sources = files('dpaax_iova_table.c', 'dpaa_of.c', 'caamflib.c') includes += include_directories('caamflib') -cflags += ['-D_GNU_SOURCE'] if cc.has_argument('-Wno-cast-qual') cflags += '-Wno-cast-qual' endif diff --git a/drivers/net/memif/rte_eth_memif.h b/drivers/net/memif/rte_eth_memif.h index 24321d3a39..2038bda742 100644 --- a/drivers/net/memif/rte_eth_memif.h +++ b/drivers/net/memif/rte_eth_memif.h @@ -5,10 +5,6 @@ #ifndef _RTE_ETH_MEMIF_H_ #define _RTE_ETH_MEMIF_H_ -#ifndef _GNU_SOURCE -#define _GNU_SOURCE -#endif /* GNU_SOURCE */ - #include <sys/queue.h> #include <ethdev_driver.h> diff --git a/drivers/net/mlx5/linux/mlx5_socket.c b/drivers/net/mlx5/linux/mlx5_socket.c index 1938453980..b1f41bc102 100644 --- a/drivers/net/mlx5/linux/mlx5_socket.c +++ b/drivers/net/mlx5/linux/mlx5_socket.c @@ -2,10 +2,6 @@ * Copyright 2019 Mellanox Technologies, Ltd */ -#ifndef _GNU_SOURCE -#define _GNU_SOURCE -#endif - #include <sys/types.h> #include <sys/socket.h> #include <sys/un.h> diff --git a/examples/ip_pipeline/Makefile b/examples/ip_pipeline/Makefile index 96f492a5ea..7933ad7519 100644 --- a/examples/ip_pipeline/Makefile +++ b/examples/ip_pipeline/Makefile @@ -47,7 +47,7 @@ $(error "Cannot generate statically-linked binaries with this version of pkg-con endif endif -CFLAGS += -I. -DALLOW_EXPERIMENTAL_API -D_GNU_SOURCE +CFLAGS += -I. -DALLOW_EXPERIMENTAL_API OBJS := $(patsubst %.c,build/%.o,$(SRCS-y)) diff --git a/examples/performance-thread/l3fwd-thread/main.c b/examples/performance-thread/l3fwd-thread/main.c index 4d82fb82ef..10bd33d767 100644 --- a/examples/performance-thread/l3fwd-thread/main.c +++ b/examples/performance-thread/l3fwd-thread/main.c @@ -2,10 +2,6 @@ * Copyright(c) 2010-2016 Intel Corporation */ -#ifndef _GNU_SOURCE -#define _GNU_SOURCE -#endif - #include <stdio.h> #include <stdlib.h> #include <stdint.h> diff --git a/examples/performance-thread/pthread_shim/Makefile b/examples/performance-thread/pthread_shim/Makefile index 5aa401dc49..a1f4557cd4 100644 --- a/examples/performance-thread/pthread_shim/Makefile +++ b/examples/performance-thread/pthread_shim/Makefile @@ -18,7 +18,6 @@ endif endif CFLAGS += -DALLOW_EXPERIMENTAL_API -CFLAGS += -D_GNU_SOURCE LDFLAGS += "-Wl,--copy-dt-needed-entries" # Build using pkg-config variables if possible diff --git a/examples/pipeline/Makefile b/examples/pipeline/Makefile index fcba51fd4d..92caf4aeb2 100644 --- a/examples/pipeline/Makefile +++ b/examples/pipeline/Makefile @@ -38,7 +38,7 @@ $(error "Cannot generate statically-linked binaries with this version of pkg-con endif endif -CFLAGS += -I. -DALLOW_EXPERIMENTAL_API -D_GNU_SOURCE +CFLAGS += -I. -DALLOW_EXPERIMENTAL_API OBJS := $(patsubst %.c,build/%.o,$(SRCS-y)) diff --git a/examples/vhost_blk/vhost_blk.c b/examples/vhost_blk/vhost_blk.c index 7ea60863da..e9361267a6 100644 --- a/examples/vhost_blk/vhost_blk.c +++ b/examples/vhost_blk/vhost_blk.c @@ -2,12 +2,8 @@ * Copyright(c) 2010-2019 Intel Corporation */ -#ifndef _GNU_SOURCE -#define _GNU_SOURCE -#endif #include <pthread.h> #include <sched.h> - #include <stdint.h> #include <unistd.h> #include <stdbool.h>
There was an intent to define _GNU_SOURCE globally, but it was not set in pkg-config for external applications. The internal definition in config/meson.build is kept, and one is added in buildtools/pkg-config/meson.build for external apps. All other specific definitions of _GNU_SOURCE are removed. Fixes: 5d7b673d5fd6 ("mk: build with _GNU_SOURCE defined by default") Fixes: 28188cee2aa0 ("build: enable BSD features visibility for FreeBSD") Cc: stable@dpdk.org Signed-off-by: Thomas Monjalon <thomas@monjalon.net> --- app/test/meson.build | 2 -- buildtools/pkg-config/meson.build | 1 + drivers/bus/fslmc/qbman/include/compat.h | 3 --- drivers/common/dpaax/compat.h | 4 ---- drivers/common/dpaax/meson.build | 1 - drivers/net/memif/rte_eth_memif.h | 4 ---- drivers/net/mlx5/linux/mlx5_socket.c | 4 ---- examples/ip_pipeline/Makefile | 2 +- examples/performance-thread/l3fwd-thread/main.c | 4 ---- examples/performance-thread/pthread_shim/Makefile | 1 - examples/pipeline/Makefile | 2 +- examples/vhost_blk/vhost_blk.c | 4 ---- 12 files changed, 3 insertions(+), 29 deletions(-)