numam-dpdk/app/meson.build
Marcin Smoczynski 28188cee2a build: enable BSD features visibility for FreeBSD
When a component uses either XOPEN_SOURCE or POSIX_C_SOURCE macro
explicitly in its build recipe, it restricts visibility of a non POSIX
features subset, such as IANA protocol numbers (IPPROTO_* macros).
Non standard features are enabled by default for DPDK both for Linux
thanks to _GNU_SOURCE and for FreeBSD thanks to __BSD_VISIBLE. However
using XOPEN_SOURCE or POSIX_(C_)SOURCE in a component causes
__BSD_VISIBLE to be defined to 0 for FreeBSD, causing different feature
sets visibility for Linux and FreeBSD. It restricts from using IPPROTO
macros in public headers, such as rte_ip.h, despite the fact they are
already widely used in sources.

Add __BSD_VISIBLE macro specified unconditionally for FreeBSD targets
which enforces feature sets visibility unification between Linux and
FreeBSD.

Add single -D_GNU_SOURCE to config/meson.build as a project argument
instead of adding separate directive for each project subtree.

This patch solves the problem of build breaks for [1] on FreeBSD [2]
following the discussion [3].

[1] https://mails.dpdk.org/archives/dev/2019-May/131885.html
[2] http://mails.dpdk.org/archives/test-report/2019-May/082263.html
[3] https://mails.dpdk.org/archives/dev/2019-May/132110.html

Signed-off-by: Marcin Smoczynski <marcinx.smoczynski@intel.com>
Acked-by: Konstantin Ananyev <konstantin.ananyev@intel.com>
2019-06-26 16:50:33 +02:00

72 lines
1.4 KiB
Meson

# SPDX-License-Identifier: BSD-3-Clause
# Copyright(c) 2017-2019 Intel Corporation
if is_windows
subdir_done()
endif
apps = [
'pdump',
'proc-info',
'test-acl',
'test-bbdev',
'test-cmdline',
'test-compress-perf',
'test-crypto-perf',
'test-eventdev',
'test-pipeline',
'test-pmd']
# for BSD only
lib_execinfo = cc.find_library('execinfo', required: false)
default_cflags = machine_args
foreach app:apps
build = true
name = app
allow_experimental_apis = false
sources = []
includes = []
cflags = default_cflags
objs = [] # other object files to link against, used e.g. for
# instruction-set optimized versions of code
# use "deps" for internal DPDK dependencies, and "ext_deps" for
# external package/library requirements
ext_deps = []
deps = dpdk_app_link_libraries
subdir(name)
if build
dep_objs = []
foreach d:deps
dep_objs += get_variable(get_option('default_library')
+ '_rte_' + d)
endforeach
dep_objs += lib_execinfo
link_libs = []
if get_option('default_library') == 'static'
link_libs = dpdk_static_libraries + dpdk_drivers
endif
if allow_experimental_apis
cflags += '-DALLOW_EXPERIMENTAL_API'
endif
executable('dpdk-' + name,
sources,
c_args: cflags,
link_whole: link_libs,
dependencies: dep_objs,
install_rpath: join_paths(get_option('prefix'),
driver_install_path),
install: true)
endif
endforeach
# special case the autotests
subdir('test')