From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-wm1-f68.google.com (mail-wm1-f68.google.com [209.85.128.68]) by dpdk.org (Postfix) with ESMTP id 075B21B3B9; Thu, 3 Jan 2019 18:57:35 +0100 (CET) Received: by mail-wm1-f68.google.com with SMTP id a62so29999997wmh.4; Thu, 03 Jan 2019 09:57:35 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=aVTuV5A0YmlAbbXYBGAgOEuCCsGjLwU0hPEpT8AFnKg=; b=I8rg91VDYZl2pMhubRfenhU6G3JCT3F9tREozyhJZ964BGn8mEk2emWSIXzQq2qg0d 4CHlfFnLeXaZYV7h2caViJm1Nl+p43MUwqNmDVg/DDq43uQVScEEcy36LwnO9yTYDejc YLtu22uYp37/0S5i8g4UrpkLA2sod0iiHnvUmHfNXRbQ2CplcuKTRZH1ZS+4oku32X8v 4PePBRP0/1q6GWyuGKO9nsOmavvGht3sLyCp4oTc6DLCDENfEuJ97W6LfKzDOV27dfVB q4TOwH+8tW+D4VKn96pZV745VGtQhPj3IX6XFix2HaJy6ZhQ9YnEjWQm1ioZ/Rg66ffi c+xQ== X-Gm-Message-State: AA+aEWaWsErrSH5Q/zUeX9h5QWo0n35TKIsipIcKJULAN2ZscRopXUzT AWUUEAEFPTxvz/xYA/0CbnKb5ltH1oQ= X-Google-Smtp-Source: ALg8bN7g1k8+ScG5IjsM4Vtq+DuiiXTwiAUFXGj9yXdrwlryB7NbEVNpRc3Qg9l/mpGjVg4JKYPvow== X-Received: by 2002:a1c:650b:: with SMTP id z11mr39275600wmb.23.1546538255125; Thu, 03 Jan 2019 09:57:35 -0800 (PST) Received: from localhost ([80.120.231.178]) by smtp.gmail.com with ESMTPSA id m4sm50227221wmi.3.2019.01.03.09.57.33 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Thu, 03 Jan 2019 09:57:34 -0800 (PST) From: Luca Boccassi To: dev@dpdk.org Cc: bruce.richardson@intel.com, Luca Boccassi , stable@dpdk.org Date: Thu, 3 Jan 2019 18:57:25 +0100 Message-Id: <20190103175725.5836-2-bluca@debian.org> X-Mailer: git-send-email 2.19.2 In-Reply-To: <20190103175725.5836-1-bluca@debian.org> References: <20190103175725.5836-1-bluca@debian.org> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Subject: [dpdk-dev] [PATCH 2/2] build: use dependency() instead of find_library() X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 03 Jan 2019 17:57:36 -0000 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 --- 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