From: Luca Boccassi <bluca@debian.org> To: dev@dpdk.org Cc: bruce.richardson@intel.com, Luca Boccassi <bluca@debian.org>, stable@dpdk.org Subject: [dpdk-dev] [PATCH 2/2] build: use dependency() instead of find_library() Date: Thu, 3 Jan 2019 18:57:25 +0100 Message-ID: <20190103175725.5836-2-bluca@debian.org> (raw) In-Reply-To: <20190103175725.5836-1-bluca@debian.org> Whenever possible (if the library ships a pkg-config file) use meson's dependency() function to look for it, as it will automatically add it to the Requires.private list if needed, to allow for static builds to succeed for reverse dependencies of DPDK. Otherwise the recursive dependencies are not parsed, and users doing static builds have to resolve them manually by themselves. When using this API avoid additional checks that are superfluos and take extra time, and avoid adding the linker flag manually which causes it to be duplicated. An internal checker has been added to Meson 0.42 to detect libpcap, which ships a custom tool rather than a pkg-config file, so bump the minimum Meson version from 0.41 to 0.42. For libbsd, which is checked in a top level file and used to be added to the global linker flags array, add it to the ext_deps array of all top level meson files (app, test, lib, examples, drivers). The most correct change would be to let each individual library/driver/app depend on it individually if they use symbols from it, but it would diverge from the legacy Makefile's behaviour and make life a bit more difficult for contributors. Fixes: a25a650be5f0 ("build: add infrastructure for meson and ninja builds") Cc: stable@dpdk.org Signed-off-by: Luca Boccassi <bluca@debian.org> --- Bruce, dependency() by default tries pkg-config first, then cmake, then the internal project-specific finders (like pcap). If you think it's worth it I can add fallbacks in case a system, for whatever reason, does not install a pc file despite the upstream project providing one. It would add more clutter and more verbosity, but it would not cause other issues. app/meson.build | 2 +- config/meson.build | 10 +++++----- drivers/crypto/ccp/meson.build | 1 - drivers/crypto/openssl/meson.build | 1 - drivers/crypto/qat/meson.build | 1 - drivers/meson.build | 4 ++-- drivers/net/bnx2x/meson.build | 2 +- drivers/net/mlx4/meson.build | 6 +++--- drivers/net/mlx5/meson.build | 6 +++--- drivers/net/pcap/meson.build | 5 ++--- examples/meson.build | 2 +- lib/librte_bpf/meson.build | 4 ++-- lib/librte_telemetry/meson.build | 2 +- lib/meson.build | 2 +- meson.build | 2 +- test/test/meson.build | 1 + 16 files changed, 24 insertions(+), 27 deletions(-) diff --git a/app/meson.build b/app/meson.build index 47a2a8615..e31386f1a 100644 --- a/app/meson.build +++ b/app/meson.build @@ -29,7 +29,7 @@ foreach app:apps # use "deps" for internal DPDK dependencies, and "ext_deps" for # external package/library requirements - ext_deps = [] + ext_deps = [libbsd] deps = dpdk_app_link_libraries subdir(name) diff --git a/config/meson.build b/config/meson.build index db32499b3..e1af468ee 100644 --- a/config/meson.build +++ b/config/meson.build @@ -74,11 +74,11 @@ if numa_dep.found() and cc.has_header('numaif.h') endif # check for strlcpy -if host_machine.system() == 'linux' and cc.find_library('bsd', - required: false).found() and cc.has_header('bsd/string.h') - dpdk_conf.set('RTE_USE_LIBBSD', 1) - add_project_link_arguments('-lbsd', language: 'c') - dpdk_extra_ldflags += '-lbsd' +if host_machine.system() == 'linux' + libbsd = dependency('libbsd', required: false) + if libbsd.found() + dpdk_conf.set('RTE_USE_LIBBSD', 1) + endif endif # add -include rte_config to cflags diff --git a/drivers/crypto/ccp/meson.build b/drivers/crypto/ccp/meson.build index e43b00591..915c4c854 100644 --- a/drivers/crypto/ccp/meson.build +++ b/drivers/crypto/ccp/meson.build @@ -18,4 +18,3 @@ sources = files('rte_ccp_pmd.c', 'ccp_pmd_ops.c') ext_deps += dep -pkgconfig_extra_libs += '-lcrypto' diff --git a/drivers/crypto/openssl/meson.build b/drivers/crypto/openssl/meson.build index c2a0dd8ba..80e5e8835 100644 --- a/drivers/crypto/openssl/meson.build +++ b/drivers/crypto/openssl/meson.build @@ -8,4 +8,3 @@ endif deps += 'bus_vdev' sources = files('rte_openssl_pmd.c', 'rte_openssl_pmd_ops.c') ext_deps += dep -pkgconfig_extra_libs += '-lcrypto' diff --git a/drivers/crypto/qat/meson.build b/drivers/crypto/qat/meson.build index 9cc98d2c2..21f969735 100644 --- a/drivers/crypto/qat/meson.build +++ b/drivers/crypto/qat/meson.build @@ -13,6 +13,5 @@ if dep.found() 'qat_sym.c', 'qat_sym_session.c') qat_ext_deps += dep - pkgconfig_extra_libs += '-lcrypto' qat_cflags += '-DBUILD_QAT_SYM' endif diff --git a/drivers/meson.build b/drivers/meson.build index c3c66bbc0..f442f9719 100644 --- a/drivers/meson.build +++ b/drivers/meson.build @@ -46,11 +46,11 @@ foreach class:driver_classes # set up internal deps. Drivers can append/override as necessary deps = std_deps # ext_deps: Stores external library dependency got - # using dependency() or cc.find_library(). For most cases, we + # using dependency(). For most cases, we # probably also need to specify the "-l" flags in # pkgconfig_extra_libs variable too, so that it can be reflected # in the pkgconfig output for static builds - ext_deps = [] + ext_deps = [libbsd] pkgconfig_extra_libs = [] # pull in driver directory which should assign to each of the above diff --git a/drivers/net/bnx2x/meson.build b/drivers/net/bnx2x/meson.build index e3c688869..dd189ffc4 100644 --- a/drivers/net/bnx2x/meson.build +++ b/drivers/net/bnx2x/meson.build @@ -1,7 +1,7 @@ # SPDX-License-Identifier: BSD-3-Clause # Copyright(c) 2018 Intel Corporation -dep = cc.find_library('z', required: false) +dep = dependency('zlib', required: false) build = dep.found() ext_deps += dep cflags += '-DZLIB_CONST' diff --git a/drivers/net/mlx4/meson.build b/drivers/net/mlx4/meson.build index 7de571e2a..4ba4e93b6 100644 --- a/drivers/net/mlx4/meson.build +++ b/drivers/net/mlx4/meson.build @@ -14,9 +14,9 @@ if pmd_dlopen ] endif libs = [ - cc.find_library('mnl', required:false), - cc.find_library('mlx4', required:false), - cc.find_library('ibverbs', required:false), + dependency('libmnl', required:false), + dependency('libmlx4', required:false), + dependency('libibverbs', required:false), ] build = true foreach lib:libs diff --git a/drivers/net/mlx5/meson.build b/drivers/net/mlx5/meson.build index 28938db0f..7ff3660fa 100644 --- a/drivers/net/mlx5/meson.build +++ b/drivers/net/mlx5/meson.build @@ -14,9 +14,9 @@ if pmd_dlopen ] endif libs = [ - cc.find_library('mnl', required:false), - cc.find_library('mlx5', required:false), - cc.find_library('ibverbs', required:false), + dependency('libmnl', required:false), + dependency('libmlx5', required:false), + dependency('libibverbs', required:false), ] build = true foreach lib:libs diff --git a/drivers/net/pcap/meson.build b/drivers/net/pcap/meson.build index 0c4e0201a..89c9d7a74 100644 --- a/drivers/net/pcap/meson.build +++ b/drivers/net/pcap/meson.build @@ -1,12 +1,11 @@ # SPDX-License-Identifier: BSD-3-Clause # Copyright(c) 2017 Intel Corporation -pcap_dep = cc.find_library('pcap', required: false) -if pcap_dep.found() and cc.has_header('pcap.h', dependencies: pcap_dep) +pcap_dep = dependency('pcap', required: false) +if pcap_dep.found() build = true else build = false endif sources = files('rte_eth_pcap.c') ext_deps += pcap_dep -pkgconfig_extra_libs += '-lpcap' diff --git a/examples/meson.build b/examples/meson.build index af81c762e..881e2da33 100644 --- a/examples/meson.build +++ b/examples/meson.build @@ -33,7 +33,7 @@ foreach example: examples allow_experimental_apis = false cflags = default_cflags - ext_deps = [execinfo] + ext_deps = [execinfo libbsd] includes = [include_directories(example)] deps = ['eal', 'mempool', 'net', 'mbuf', 'ethdev', 'cmdline'] subdir(example) diff --git a/lib/librte_bpf/meson.build b/lib/librte_bpf/meson.build index bc0cd78f9..c3b1f698e 100644 --- a/lib/librte_bpf/meson.build +++ b/lib/librte_bpf/meson.build @@ -18,8 +18,8 @@ install_headers = files('bpf_def.h', deps += ['mbuf', 'net', 'ethdev'] -dep = cc.find_library('elf', required: false) -if dep.found() == true and cc.has_header('libelf.h', dependencies: dep) +dep = dependency('libelf', required: false) +if dep.found() sources += files('bpf_load_elf.c') ext_deps += dep endif diff --git a/lib/librte_telemetry/meson.build b/lib/librte_telemetry/meson.build index 9492f544e..cafb26f08 100644 --- a/lib/librte_telemetry/meson.build +++ b/lib/librte_telemetry/meson.build @@ -6,7 +6,7 @@ headers = files('rte_telemetry.h', 'rte_telemetry_internal.h', 'rte_telemetry_pa deps += ['metrics', 'ethdev'] cflags += '-DALLOW_EXPERIMENTAL_API' -jansson = cc.find_library('jansson', required: false) +jansson = dependency('jansson', required: false) if jansson.found() ext_deps += jansson dpdk_app_link_libraries += ['telemetry'] diff --git a/lib/meson.build b/lib/meson.build index a2dd52e17..b2a18f488 100644 --- a/lib/meson.build +++ b/lib/meson.build @@ -51,7 +51,7 @@ foreach l:libraries # use "deps" for internal DPDK dependencies, and "ext_deps" for # external package/library requirements - ext_deps = [] + ext_deps = [libbsd] deps = [] # eal is standard dependency once built if dpdk_conf.has('RTE_LIBRTE_EAL') diff --git a/meson.build b/meson.build index 617e88589..f87dc235f 100644 --- a/meson.build +++ b/meson.build @@ -5,7 +5,7 @@ project('DPDK', 'C', version: '19.02.0-rc1', license: 'BSD', default_options: ['buildtype=release', 'default_library=static'], - meson_version: '>= 0.41' + meson_version: '>= 0.42' ) # set up some global vars for compiler, platform, configuration, etc. diff --git a/test/test/meson.build b/test/test/meson.build index 5a4816fed..886c29fb4 100644 --- a/test/test/meson.build +++ b/test/test/meson.build @@ -279,6 +279,7 @@ foreach d:test_deps test_dep_objs += get_variable(def_lib + '_rte_' + d) endforeach test_dep_objs += cc.find_library('execinfo', required: false) +test_dep_objs += libbsd link_libs = [] if get_option('default_library') == 'static' -- 2.19.2
next prev parent reply other threads:[~2019-01-03 17:57 UTC|newest] Thread overview: 88+ messages / expand[flat|nested] mbox.gz Atom feed top 2019-01-03 17:57 [dpdk-dev] [PATCH 1/2] build: use static deps of libs for pkg-config libs.private Luca Boccassi 2019-01-03 17:57 ` Luca Boccassi [this message] 2019-01-07 14:28 ` [dpdk-dev] [PATCH 2/2] build: use dependency() instead of find_library() Bruce Richardson 2019-01-07 16:39 ` [dpdk-dev] [dpdk-stable] " Luca Boccassi 2019-01-07 16:55 ` Bruce Richardson 2019-01-07 17:03 ` [dpdk-dev] [dpdk-techboard] " Thomas Monjalon 2019-01-07 17:45 ` [dpdk-dev] [dpdk-stable] [dpdk-techboard] " Thomas Monjalon 2019-01-07 21:09 ` Luca Boccassi 2019-01-07 22:03 ` Luca Boccassi 2019-01-11 11:10 ` [dpdk-dev] [dpdk-stable] " Luca Boccassi 2019-01-11 11:52 ` Bruce Richardson 2019-01-11 12:39 ` Luca Boccassi 2019-01-11 14:24 ` Bruce Richardson 2019-01-11 14:56 ` Luca Boccassi 2019-01-11 15:49 ` Bruce Richardson 2019-01-11 16:27 ` Luca Boccassi 2019-01-11 12:38 ` [dpdk-dev] [PATCH v2 1/3] build: use static deps of libs for pkg-config libs.private Luca Boccassi 2019-01-11 12:38 ` [dpdk-dev] [PATCH v2 2/3] build: use dependency() instead of find_library() Luca Boccassi 2019-01-11 12:38 ` [dpdk-dev] [PATCH v2 3/3] build: bump minimum Meson to 0.47.1 and use dependency() for libbsd Luca Boccassi 2019-01-11 14:27 ` Bruce Richardson 2019-01-11 14:30 ` Bruce Richardson 2019-01-11 15:04 ` Luca Boccassi 2019-01-11 15:50 ` Bruce Richardson 2019-01-11 16:14 ` Luca Boccassi 2019-01-11 16:26 ` [dpdk-dev] [PATCH v3 1/4] build: bump minimum Meson version to 0.47.1 Luca Boccassi 2019-01-11 16:26 ` [dpdk-dev] [PATCH v3 2/4] build: use dependency() instead of find_library() Luca Boccassi 2019-01-11 17:21 ` Bruce Richardson 2019-01-11 18:16 ` Luca Boccassi 2019-01-11 21:49 ` Bruce Richardson 2019-01-11 16:26 ` [dpdk-dev] [PATCH v3 3/4] build: reorder libraries and build eal before cmdline Luca Boccassi 2019-01-11 17:22 ` Bruce Richardson 2019-01-11 16:26 ` [dpdk-dev] [PATCH v3 4/4] build: use dependency() for libbsd instead of manual append to ldflags Luca Boccassi 2019-01-11 17:24 ` Bruce Richardson 2019-01-11 17:17 ` [dpdk-dev] [PATCH v3 1/4] build: bump minimum Meson version to 0.47.1 Bruce Richardson 2019-01-11 18:22 ` [dpdk-dev] [PATCH v4 " Luca Boccassi 2019-01-11 18:22 ` [dpdk-dev] [PATCH v4 2/4] build: use dependency() instead of find_library() Luca Boccassi 2019-01-11 18:22 ` [dpdk-dev] [PATCH v4 3/4] build: reorder libraries and build eal before cmdline Luca Boccassi 2019-01-11 18:22 ` [dpdk-dev] [PATCH v4 4/4] build: use dependency() for libbsd instead of manual append to ldflags Luca Boccassi 2019-01-22 13:10 ` [dpdk-dev] [PATCH v5 1/4] build: bump minimum Meson version to 0.47.1 Luca Boccassi 2019-01-22 13:10 ` [dpdk-dev] [PATCH v5 2/4] build: use dependency() instead of find_library() Luca Boccassi 2019-01-22 13:46 ` Bruce Richardson 2019-01-22 14:09 ` Luca Boccassi 2019-01-22 14:24 ` Bruce Richardson 2019-01-22 14:25 ` Bruce Richardson 2019-01-22 13:10 ` [dpdk-dev] [PATCH v5 3/4] build: reorder libraries and build eal before cmdline Luca Boccassi 2019-01-22 13:10 ` [dpdk-dev] [PATCH v5 4/4] build: use dependency() for libbsd instead of manual append to ldflags Luca Boccassi 2019-01-22 13:42 ` [dpdk-dev] [PATCH v5 1/4] build: bump minimum Meson version to 0.47.1 Bruce Richardson 2019-02-06 17:08 ` [dpdk-dev] [PATCH v6 1/5] " Luca Boccassi 2019-02-06 17:08 ` [dpdk-dev] [PATCH v6 2/5] build: use dependency() instead of find_library() Luca Boccassi 2019-02-12 11:15 ` Thomas Monjalon 2019-02-12 11:31 ` Bruce Richardson 2019-02-12 11:36 ` Thomas Monjalon 2019-02-12 11:43 ` Bruce Richardson 2019-02-12 14:47 ` Thomas Monjalon 2019-02-12 15:03 ` Bruce Richardson 2019-02-12 16:21 ` Thomas Monjalon 2019-02-13 10:49 ` Luca Boccassi 2019-02-13 11:10 ` Thomas Monjalon 2019-02-13 13:45 ` Luca Boccassi 2019-02-13 11:48 ` Luca Boccassi 2019-02-06 17:08 ` [dpdk-dev] [PATCH v6 3/5] build: reorder libraries and build eal before cmdline Luca Boccassi 2019-02-06 17:08 ` [dpdk-dev] [PATCH v6 4/5] build: use dependency() for libbsd instead of manual append to ldflags Luca Boccassi 2019-02-06 17:08 ` [dpdk-dev] [PATCH v6 5/5] build: use integers for numerical options Luca Boccassi 2019-02-08 14:44 ` Bruce Richardson 2019-02-13 11:54 ` [dpdk-dev] [PATCH v7 1/5] build: bump minimum Meson version to 0.47.1 Luca Boccassi 2019-02-13 11:54 ` [dpdk-dev] [PATCH v7 2/5] build: use dependency() instead of find_library() Luca Boccassi 2019-02-13 15:35 ` Bruce Richardson 2019-02-13 11:54 ` [dpdk-dev] [PATCH v7 3/5] build: reorder libraries and build eal before cmdline Luca Boccassi 2019-02-13 11:54 ` [dpdk-dev] [PATCH v7 4/5] build: use dependency() for libbsd instead of manual append to ldflags Luca Boccassi 2019-02-13 11:54 ` [dpdk-dev] [PATCH v7 5/5] build: use integers for numerical options Luca Boccassi 2019-02-26 17:46 ` [dpdk-dev] [PATCH v8 1/6] build: bump minimum Meson version to 0.47.1 luca.boccassi 2019-02-26 17:46 ` [dpdk-dev] [PATCH v8 2/6] build: use dependency() instead of find_library() luca.boccassi 2019-02-26 17:46 ` [dpdk-dev] [PATCH v8 3/6] build: reorder libraries and build eal before cmdline luca.boccassi 2019-02-26 17:46 ` [dpdk-dev] [PATCH v8 4/6] build: use dependency() for libbsd instead of manual append to ldflags luca.boccassi 2019-02-26 17:46 ` [dpdk-dev] [PATCH v8 5/6] build: use integers for numerical options luca.boccassi 2019-02-26 17:46 ` [dpdk-dev] [PATCH v8 6/6] build: use dependency for pcap and fallback to find_library luca.boccassi 2019-02-26 17:49 ` Luca Boccassi 2019-02-27 8:33 ` Thomas Monjalon 2019-02-27 9:47 ` Bruce Richardson 2019-02-27 10:50 ` Luca Boccassi 2019-02-27 10:56 ` Thomas Monjalon 2019-02-27 12:03 ` Luca Boccassi 2019-02-27 13:53 ` Bruce Richardson 2019-02-28 17:40 ` Bruce Richardson 2019-03-01 13:13 ` Thomas Monjalon 2019-03-01 15:13 ` Luca Boccassi 2019-03-01 13:22 ` Thomas Monjalon 2019-02-27 11:29 ` [dpdk-dev] [PATCH v8 1/6] build: bump minimum Meson version to 0.47.1 Thomas Monjalon
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=20190103175725.5836-2-bluca@debian.org \ --to=bluca@debian.org \ --cc=bruce.richardson@intel.com \ --cc=dev@dpdk.org \ --cc=stable@dpdk.org \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: link
DPDK patches and discussions This inbox may be cloned and mirrored by anyone: git clone --mirror https://inbox.dpdk.org/dev/0 dev/git/0.git # If you have public-inbox 1.1+ installed, you may # initialize and index your mirror using the following commands: public-inbox-init -V2 dev dev/ https://inbox.dpdk.org/dev \ dev@dpdk.org public-inbox-index dev Example config snippet for mirrors. Newsgroup available over NNTP: nntp://inbox.dpdk.org/inbox.dpdk.dev AGPL code for this site: git clone https://public-inbox.org/public-inbox.git