[PATCH v5 1/8] build: introduce optional internal dependencies
Anatoly Burakov
anatoly.burakov at intel.com
Wed Nov 27 15:56:49 CET 2024
Allow specifying internal dependencies as either mandatory or optional.
Specifying a dependency as optional will mean that the component being
built will not be skipped if said dependency is not being built. At build
time, the build system will resolve any optional dependencies and add
them to the list of dependencies to be built. Any source files requiring
said optional depepdencies will still have to be added explicitly to the
build by the respective component (e.g. adding BPF-related files when BPF
support is being built).
Signed-off-by: Bruce Richardson <bruce.richardson at intel.com>
Signed-off-by: Anatoly Burakov <anatoly.burakov at intel.com>
---
Notes:
v4 -> v5:
- Automatically handle optional dependencies based on Bruce's
earlier patch [1]
[1] https://patches.dpdk.org/project/dpdk/patch/20231220142152.492556-4-bruce.richardson@intel.com/
app/meson.build | 14 ++++++-
app/proc-info/meson.build | 4 +-
app/test-bbdev/meson.build | 18 +++------
app/test-crypto-perf/meson.build | 4 +-
app/test-pmd/meson.build | 56 +++++++++------------------
app/test/meson.build | 12 +++---
drivers/meson.build | 13 ++++++-
examples/ethtool/meson.build | 4 +-
examples/l2fwd-crypto/meson.build | 4 +-
examples/l3fwd/meson.build | 4 +-
examples/meson.build | 13 ++++++-
examples/vm_power_manager/meson.build | 16 +++-----
lib/meson.build | 13 ++++++-
13 files changed, 89 insertions(+), 86 deletions(-)
diff --git a/app/meson.build b/app/meson.build
index e2db888ae1..61202495bd 100644
--- a/app/meson.build
+++ b/app/meson.build
@@ -66,6 +66,7 @@ foreach app:apps
# external package/library requirements
ext_deps = []
deps = []
+ optional_deps = []
if not enable_apps.contains(app)
build = false
@@ -83,10 +84,19 @@ foreach app:apps
endif
endif
+ # resolve any optional internal dependencies
+ def_lib = get_option('default_library')
+ foreach d: optional_deps
+ # if optional dependency is defined, add it to the deps list
+ if is_variable(def_lib + '_rte_' + d)
+ deps += [d]
+ endif
+ endforeach
+
if build
dep_objs = []
foreach d:deps
- var_name = get_option('default_library') + '_rte_' + d
+ var_name = def_lib + '_rte_' + d
if not is_variable(var_name)
build = false
reason = 'missing internal dependency, "@0@"'.format(d)
@@ -111,7 +121,7 @@ foreach app:apps
dpdk_apps_enabled += app
link_libs = []
- if get_option('default_library') == 'static'
+ if def_lib == 'static'
link_libs = dpdk_static_libraries + dpdk_drivers
endif
diff --git a/app/proc-info/meson.build b/app/proc-info/meson.build
index 4f83f29a64..5fefb0857e 100644
--- a/app/proc-info/meson.build
+++ b/app/proc-info/meson.build
@@ -9,6 +9,4 @@ endif
sources = files('main.c')
deps += ['ethdev', 'security', 'eventdev']
-if dpdk_conf.has('RTE_LIB_METRICS')
- deps += 'metrics'
-endif
+optional_deps += 'metrics'
diff --git a/app/test-bbdev/meson.build b/app/test-bbdev/meson.build
index 926e0a5271..bd38694eaf 100644
--- a/app/test-bbdev/meson.build
+++ b/app/test-bbdev/meson.build
@@ -14,15 +14,9 @@ sources = files(
'test_bbdev_vector.c',
)
deps += ['bbdev', 'bus_vdev']
-if dpdk_conf.has('RTE_BASEBAND_FPGA_LTE_FEC')
- deps += ['baseband_fpga_lte_fec']
-endif
-if dpdk_conf.has('RTE_BASEBAND_FPGA_5GNR_FEC')
- deps += ['baseband_fpga_5gnr_fec']
-endif
-if dpdk_conf.has('RTE_BASEBAND_ACC')
- deps += ['baseband_acc']
-endif
-if dpdk_conf.has('RTE_BASEBAND_LA12XX')
- deps += ['baseband_la12xx']
-endif
+optional_deps += [
+ 'baseband_fpga_lte_fec',
+ 'baseband_fpga_5gnr_fec',
+ 'baseband_acc',
+ 'baseband_la12xx'
+]
diff --git a/app/test-crypto-perf/meson.build b/app/test-crypto-perf/meson.build
index 7b02b518f0..1ac0ac1099 100644
--- a/app/test-crypto-perf/meson.build
+++ b/app/test-crypto-perf/meson.build
@@ -20,6 +20,4 @@ sources = files(
'main.c',
)
deps += ['cryptodev', 'net', 'security']
-if dpdk_conf.has('RTE_CRYPTO_SCHEDULER')
- deps += 'crypto_scheduler'
-endif
+optional_deps += 'crypto_scheduler'
diff --git a/app/test-pmd/meson.build b/app/test-pmd/meson.build
index f1c36529b4..bbb0c83fa5 100644
--- a/app/test-pmd/meson.build
+++ b/app/test-pmd/meson.build
@@ -34,47 +34,29 @@ sources = files(
if dpdk_conf.has('RTE_HAS_JANSSON')
ext_deps += jansson_dep
endif
-
-deps += ['ethdev', 'cmdline']
-if dpdk_conf.has('RTE_CRYPTO_SCHEDULER')
- deps += 'crypto_scheduler'
-endif
-if dpdk_conf.has('RTE_LIB_BITRATESTATS')
- deps += 'bitratestats'
-endif
if dpdk_conf.has('RTE_LIB_BPF')
sources += files('bpf_cmd.c')
- deps += 'bpf'
-endif
-if dpdk_conf.has('RTE_LIB_GRO')
- deps += 'gro'
-endif
-if dpdk_conf.has('RTE_LIB_GSO')
- deps += 'gso'
-endif
-if dpdk_conf.has('RTE_LIB_LATENCYSTATS')
- deps += 'latencystats'
-endif
-if dpdk_conf.has('RTE_LIB_METRICS')
- deps += 'metrics'
-endif
-if dpdk_conf.has('RTE_LIB_PDUMP')
- deps += 'pdump'
-endif
-if dpdk_conf.has('RTE_NET_BNXT')
- deps += 'net_bnxt'
-endif
-if dpdk_conf.has('RTE_NET_I40E')
- deps += 'net_i40e'
-endif
-if dpdk_conf.has('RTE_NET_IXGBE')
- deps += 'net_ixgbe'
-endif
-if dpdk_conf.has('RTE_NET_DPAA')
- deps += ['bus_dpaa', 'mempool_dpaa', 'net_dpaa']
endif
+deps += ['ethdev', 'cmdline']
+optional_deps += [
+ 'crypto_scheduler',
+ 'bitratestats',
+ 'bpf',
+ 'gro',
+ 'gso',
+ 'latencystats',
+ 'metrics',
+ 'pdump',
+ 'net_bnxt',
+ 'net_i40e',
+ 'net_ixgbe',
+ 'bus_dpaa',
+ 'mempool_dpaa',
+ 'net_dpaa'
+]
+
# Driver-specific commands are located in driver directories.
includes = include_directories('.')
sources += testpmd_drivers_sources
-deps += testpmd_drivers_deps
+optional_deps += testpmd_drivers_deps
diff --git a/app/test/meson.build b/app/test/meson.build
index d5cb6a7f7a..36c2016a49 100644
--- a/app/test/meson.build
+++ b/app/test/meson.build
@@ -7,7 +7,7 @@ sources += files('commands.c', 'test.c')
# optional dependencies: some files may use these - and so we should link them in -
# but do not explicitly require them so they are not listed in the per-file lists below
-optional_deps = ['crypto_scheduler', 'lpm']
+opt_deps = ['crypto_scheduler', 'lpm']
# some other utility C files, providing functions used by various tests
# so we need to include these deps in the dependency list for the files using those fns.
@@ -219,8 +219,8 @@ foreach f, f_deps : source_file_deps
break
else
# technically we might not need this dep, but adding it is harmless
- if d not in deps
- deps += d
+ if d not in optional_deps and d not in deps
+ optional_deps += d
endif
endif
endforeach
@@ -241,9 +241,9 @@ foreach f, f_deps : source_file_deps
endif
endforeach
# add the optional dependencies
-foreach d:optional_deps
- if is_variable(def_lib + '_rte_' + d) and d not in deps
- deps += d
+foreach d:opt_deps
+ if d not in optional_deps and d not in deps
+ optional_deps += d
endif
endforeach
diff --git a/drivers/meson.build b/drivers/meson.build
index 495e21b54a..63b0bc1e37 100644
--- a/drivers/meson.build
+++ b/drivers/meson.build
@@ -132,6 +132,7 @@ foreach subpath:subdirs
includes = [include_directories(drv_path)]
# set up internal deps. Drivers can append/override as necessary
deps = std_deps
+ optional_deps = []
# ext_deps: Stores external library dependency got
# using dependency() (preferred) or find_library().
# For the find_library() case (but not with dependency()) we also
@@ -173,11 +174,21 @@ foreach subpath:subdirs
# get dependency objs from strings
shared_deps = ext_deps
static_deps = ext_deps
+
+ # resolve any optional internal dependencies
+ def_lib = get_option('default_library')
+ foreach d: optional_deps
+ # if optional dependency is defined, add it to the deps list
+ if is_variable(def_lib + '_rte_' + d)
+ deps += [d]
+ endif
+ endforeach
+
foreach d:deps
if not build
break
endif
- if not is_variable('shared_rte_' + d)
+ if not is_variable(def_lib + '_rte_' + d)
build = false
reason = 'missing internal dependency, "@0@"'.format(d)
if dpdk_libs_deprecated.contains(d)
diff --git a/examples/ethtool/meson.build b/examples/ethtool/meson.build
index d7f63d48af..bb2a7fbb89 100644
--- a/examples/ethtool/meson.build
+++ b/examples/ethtool/meson.build
@@ -19,8 +19,6 @@ sources = files(
includes = include_directories('lib', 'ethtool-app')
deps += 'bus_pci'
-if dpdk_conf.has('RTE_NET_IXGBE')
- deps += 'net_ixgbe'
-endif
+optional_deps += 'net_ixgbe'
allow_experimental_apis = true
diff --git a/examples/l2fwd-crypto/meson.build b/examples/l2fwd-crypto/meson.build
index bb44c88882..3081573f05 100644
--- a/examples/l2fwd-crypto/meson.build
+++ b/examples/l2fwd-crypto/meson.build
@@ -7,9 +7,7 @@
# DPDK instance, use 'make'
deps += 'cryptodev'
-if dpdk_conf.has('RTE_CRYPTO_SCHEDULER')
- deps += 'crypto_scheduler'
-endif
+optional_deps += 'crypto_scheduler'
allow_experimental_apis = true
sources = files(
'main.c',
diff --git a/examples/l3fwd/meson.build b/examples/l3fwd/meson.build
index c25de77bba..9a5f487429 100644
--- a/examples/l3fwd/meson.build
+++ b/examples/l3fwd/meson.build
@@ -18,6 +18,4 @@ sources = files(
'l3fwd_lpm.c',
'main.c',
)
-if dpdk_conf.has('RTE_LIB_EVENTDEV')
- deps += 'eventdev'
-endif
+optional_deps += 'eventdev'
diff --git a/examples/meson.build b/examples/meson.build
index 8e8968a1fa..14b8aadf68 100644
--- a/examples/meson.build
+++ b/examples/meson.build
@@ -98,12 +98,23 @@ foreach example: examples
ext_deps = []
includes = [include_directories(example, 'common')]
deps = ['eal', 'mempool', 'net', 'mbuf', 'ethdev', 'cmdline']
+ optional_deps = []
subdir(example)
if build
dep_objs = ext_deps
+
+ # resolve any optional internal dependencies
+ def_lib = get_option('default_library')
+ foreach d: optional_deps
+ # if optional dependency is defined, add it to the deps list
+ if is_variable(def_lib + '_rte_' + d)
+ deps += [d]
+ endif
+ endforeach
+
foreach d:deps
- var_name = get_option('default_library') + '_rte_' + d
+ var_name = def_lib + '_rte_' + d
if not is_variable(var_name)
build = false
message('Missing dependency "@0@" for example "@1@"'.format(d, name))
diff --git a/examples/vm_power_manager/meson.build b/examples/vm_power_manager/meson.build
index dcf23198eb..ba39b2cfab 100644
--- a/examples/vm_power_manager/meson.build
+++ b/examples/vm_power_manager/meson.build
@@ -8,17 +8,11 @@
deps += ['power', 'power_kvm_vm']
-if dpdk_conf.has('RTE_NET_BNXT')
- deps += ['net_bnxt']
-endif
-
-if dpdk_conf.has('RTE_NET_I40E')
- deps += ['net_i40e']
-endif
-
-if dpdk_conf.has('RTE_NET_IXGBE')
- deps += ['net_ixgbe']
-endif
+optional_deps += [
+ 'net_bnxt',
+ 'net_i40e',
+ 'net_ixgbe'
+]
allow_experimental_apis = true
sources = files(
diff --git a/lib/meson.build b/lib/meson.build
index ce92cb5537..76bf849852 100644
--- a/lib/meson.build
+++ b/lib/meson.build
@@ -134,6 +134,7 @@ foreach l:libraries
# external package/library requirements
ext_deps = []
deps = []
+ optional_deps = []
# eal is standard dependency once built
if dpdk_conf.has('RTE_LIB_EAL')
deps += ['eal']
@@ -171,11 +172,21 @@ foreach l:libraries
shared_deps = ext_deps
static_deps = ext_deps
+
+ # resolve any optional internal dependencies
+ def_lib = get_option('default_library')
+ foreach d: optional_deps
+ # if optional dependency is defined, add it to the deps list
+ if is_variable(def_lib + '_rte_' + d)
+ deps += [d]
+ endif
+ endforeach
+
foreach d:deps
if not build
break
endif
- if not is_variable('shared_rte_' + d)
+ if not is_variable(def_lib + '_rte_' + d)
build = false
reason = 'missing internal dependency, "@0@"'.format(d)
if dpdk_libs_deprecated.contains(d)
--
2.43.5
More information about the dev
mailing list