[v3,1/8] build: split dependencies into mandatory and optional

Message ID 69a7b78dd7cb91892620b129ac5cf3a7f7e09e2b.1725462264.git.anatoly.burakov@intel.com (mailing list archive)
State New
Delegated to: Thomas Monjalon
Headers
Series record and rework component dependencies |

Checks

Context Check Description
ci/checkpatch success coding style OK

Commit Message

Burakov, Anatoly Sept. 4, 2024, 3:08 p.m. UTC
Allow specifying dependencies as either mandatory or optional. This does
not change anything about the build, but it is useful for tooling to know
if a dependency is required or not.

Signed-off-by: Anatoly Burakov <anatoly.burakov@intel.com>
---
 app/meson.build                       |  3 ++-
 app/proc-info/meson.build             |  2 +-
 app/test-bbdev/meson.build            |  8 ++++----
 app/test-crypto-perf/meson.build      |  2 +-
 app/test-pmd/meson.build              | 26 +++++++++++++-------------
 app/test/meson.build                  | 12 ++++++------
 drivers/meson.build                   |  3 ++-
 examples/ethtool/meson.build          |  2 +-
 examples/l2fwd-crypto/meson.build     |  2 +-
 examples/l3fwd/meson.build            |  2 +-
 examples/meson.build                  |  3 ++-
 examples/vm_power_manager/meson.build |  6 +++---
 lib/meson.build                       |  3 ++-
 13 files changed, 39 insertions(+), 35 deletions(-)
  

Comments

Bruce Richardson Sept. 6, 2024, 2:51 p.m. UTC | #1
On Wed, Sep 04, 2024 at 04:08:29PM +0100, Anatoly Burakov wrote:
> Allow specifying dependencies as either mandatory or optional. This does
> not change anything about the build, but it is useful for tooling to know
> if a dependency is required or not.
>

Ideally we probably want to merge the support in this patch with the idea
expressed in [1]

/Bruce

[1] https://patches.dpdk.org/project/dpdk/patch/20231220142152.492556-4-bruce.richardson@intel.com/

> Signed-off-by: Anatoly Burakov <anatoly.burakov@intel.com>
> ---
>  app/meson.build                       |  3 ++-
>  app/proc-info/meson.build             |  2 +-
>  app/test-bbdev/meson.build            |  8 ++++----
>  app/test-crypto-perf/meson.build      |  2 +-
>  app/test-pmd/meson.build              | 26 +++++++++++++-------------
>  app/test/meson.build                  | 12 ++++++------
>  drivers/meson.build                   |  3 ++-
>  examples/ethtool/meson.build          |  2 +-
>  examples/l2fwd-crypto/meson.build     |  2 +-
>  examples/l3fwd/meson.build            |  2 +-
>  examples/meson.build                  |  3 ++-
>  examples/vm_power_manager/meson.build |  6 +++---
>  lib/meson.build                       |  3 ++-
>  13 files changed, 39 insertions(+), 35 deletions(-)
> 
> diff --git a/app/meson.build b/app/meson.build
> index 5b2c80c7a1..1c61cd862c 100644
> --- a/app/meson.build
> +++ b/app/meson.build
> @@ -65,6 +65,7 @@ foreach app:apps
>      # external package/library requirements
>      ext_deps = []
>      deps = []
> +    optional_deps = []
>  
>      if not enable_apps.contains(app)
>          build = false
> @@ -84,7 +85,7 @@ foreach app:apps
>  
>      if build
>          dep_objs = []
> -        foreach d:deps
> +        foreach d:deps + optional_deps
>              var_name = get_option('default_library') + '_rte_' + d
>              if not is_variable(var_name)
>                  build = false
> diff --git a/app/proc-info/meson.build b/app/proc-info/meson.build
> index 4f83f29a64..156592119b 100644
> --- a/app/proc-info/meson.build
> +++ b/app/proc-info/meson.build
> @@ -10,5 +10,5 @@ endif
>  sources = files('main.c')
>  deps += ['ethdev', 'security', 'eventdev']
>  if dpdk_conf.has('RTE_LIB_METRICS')
> -    deps += 'metrics'
> +    optional_deps += 'metrics'
>  endif
> diff --git a/app/test-bbdev/meson.build b/app/test-bbdev/meson.build
> index 926e0a5271..c26e46a987 100644
> --- a/app/test-bbdev/meson.build
> +++ b/app/test-bbdev/meson.build
> @@ -15,14 +15,14 @@ sources = files(
>  )
>  deps += ['bbdev', 'bus_vdev']
>  if dpdk_conf.has('RTE_BASEBAND_FPGA_LTE_FEC')
> -    deps += ['baseband_fpga_lte_fec']
> +    optional_deps += ['baseband_fpga_lte_fec']
>  endif
>  if dpdk_conf.has('RTE_BASEBAND_FPGA_5GNR_FEC')
> -    deps += ['baseband_fpga_5gnr_fec']
> +    optional_deps += ['baseband_fpga_5gnr_fec']
>  endif
>  if dpdk_conf.has('RTE_BASEBAND_ACC')
> -    deps += ['baseband_acc']
> +    optional_deps += ['baseband_acc']
>  endif
>  if dpdk_conf.has('RTE_BASEBAND_LA12XX')
> -    deps += ['baseband_la12xx']
> +    optional_deps += ['baseband_la12xx']
>  endif
> diff --git a/app/test-crypto-perf/meson.build b/app/test-crypto-perf/meson.build
> index 7b02b518f0..05c71e0a0c 100644
> --- a/app/test-crypto-perf/meson.build
> +++ b/app/test-crypto-perf/meson.build
> @@ -21,5 +21,5 @@ sources = files(
>  )
>  deps += ['cryptodev', 'net', 'security']
>  if dpdk_conf.has('RTE_CRYPTO_SCHEDULER')
> -    deps += 'crypto_scheduler'
> +    optional_deps += 'crypto_scheduler'
>  endif
> diff --git a/app/test-pmd/meson.build b/app/test-pmd/meson.build
> index 719f875be0..5559829e09 100644
> --- a/app/test-pmd/meson.build
> +++ b/app/test-pmd/meson.build
> @@ -36,44 +36,44 @@ endif
>  
>  deps += ['ethdev', 'cmdline']
>  if dpdk_conf.has('RTE_CRYPTO_SCHEDULER')
> -    deps += 'crypto_scheduler'
> +    optional_deps += 'crypto_scheduler'
>  endif
>  if dpdk_conf.has('RTE_LIB_BITRATESTATS')
> -    deps += 'bitratestats'
> +    optional_deps += 'bitratestats'
>  endif
>  if dpdk_conf.has('RTE_LIB_BPF')
>      sources += files('bpf_cmd.c')
> -    deps += 'bpf'
> +    optional_deps += 'bpf'
>  endif
>  if dpdk_conf.has('RTE_LIB_GRO')
> -    deps += 'gro'
> +    optional_deps += 'gro'
>  endif
>  if dpdk_conf.has('RTE_LIB_GSO')
> -    deps += 'gso'
> +    optional_deps += 'gso'
>  endif
>  if dpdk_conf.has('RTE_LIB_LATENCYSTATS')
> -    deps += 'latencystats'
> +    optional_deps += 'latencystats'
>  endif
>  if dpdk_conf.has('RTE_LIB_METRICS')
> -    deps += 'metrics'
> +    optional_deps += 'metrics'
>  endif
>  if dpdk_conf.has('RTE_LIB_PDUMP')
> -    deps += 'pdump'
> +    optional_deps += 'pdump'
>  endif
>  if dpdk_conf.has('RTE_NET_BNXT')
> -    deps += 'net_bnxt'
> +    optional_deps += 'net_bnxt'
>  endif
>  if dpdk_conf.has('RTE_NET_I40E')
> -    deps += 'net_i40e'
> +    optional_deps += 'net_i40e'
>  endif
>  if dpdk_conf.has('RTE_NET_IXGBE')
> -    deps += 'net_ixgbe'
> +    optional_deps += 'net_ixgbe'
>  endif
>  if dpdk_conf.has('RTE_NET_DPAA')
> -    deps += ['bus_dpaa', 'mempool_dpaa', 'net_dpaa']
> +    optional_deps += ['bus_dpaa', 'mempool_dpaa', 'net_dpaa']
>  endif
>  
>  # 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 e29258e6ec..bb0a38b3a5 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.
> @@ -217,8 +217,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
> +                optional_deps += d
>              endif
>          endif
>      endforeach
> @@ -239,9 +239,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 is_variable(def_lib + '_rte_' + d) and d not in optional_deps
> +        optional_deps += d
>      endif
>  endforeach
>  
> diff --git a/drivers/meson.build b/drivers/meson.build
> index 66931d4241..b9a18a5986 100644
> --- a/drivers/meson.build
> +++ b/drivers/meson.build
> @@ -128,6 +128,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
> @@ -169,7 +170,7 @@ foreach subpath:subdirs
>              # get dependency objs from strings
>              shared_deps = ext_deps
>              static_deps = ext_deps
> -            foreach d:deps
> +            foreach d:deps + optional_deps
>                  if not build
>                      break
>                  endif
> diff --git a/examples/ethtool/meson.build b/examples/ethtool/meson.build
> index d7f63d48af..e8638a8607 100644
> --- a/examples/ethtool/meson.build
> +++ b/examples/ethtool/meson.build
> @@ -20,7 +20,7 @@ includes = include_directories('lib', 'ethtool-app')
>  
>  deps += 'bus_pci'
>  if dpdk_conf.has('RTE_NET_IXGBE')
> -    deps += 'net_ixgbe'
> +    optional_deps += 'net_ixgbe'
>  endif
>  
>  allow_experimental_apis = true
> diff --git a/examples/l2fwd-crypto/meson.build b/examples/l2fwd-crypto/meson.build
> index bb44c88882..f16ebadc74 100644
> --- a/examples/l2fwd-crypto/meson.build
> +++ b/examples/l2fwd-crypto/meson.build
> @@ -8,7 +8,7 @@
>  
>  deps += 'cryptodev'
>  if dpdk_conf.has('RTE_CRYPTO_SCHEDULER')
> -    deps += 'crypto_scheduler'
> +    optional_deps += 'crypto_scheduler'
>  endif
>  allow_experimental_apis = true
>  sources = files(
> diff --git a/examples/l3fwd/meson.build b/examples/l3fwd/meson.build
> index c25de77bba..5938452607 100644
> --- a/examples/l3fwd/meson.build
> +++ b/examples/l3fwd/meson.build
> @@ -19,5 +19,5 @@ sources = files(
>          'main.c',
>  )
>  if dpdk_conf.has('RTE_LIB_EVENTDEV')
> -    deps += 'eventdev'
> +    optional_deps += 'eventdev'
>  endif
> diff --git a/examples/meson.build b/examples/meson.build
> index 8e8968a1fa..82151d09b4 100644
> --- a/examples/meson.build
> +++ b/examples/meson.build
> @@ -98,11 +98,12 @@ 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
> -        foreach d:deps
> +        foreach d:deps + optional_deps
>              var_name = get_option('default_library') + '_rte_' + d
>              if not is_variable(var_name)
>                  build = false
> diff --git a/examples/vm_power_manager/meson.build b/examples/vm_power_manager/meson.build
> index b866d8fd54..25e5bcb71b 100644
> --- a/examples/vm_power_manager/meson.build
> +++ b/examples/vm_power_manager/meson.build
> @@ -9,15 +9,15 @@
>  deps += ['power']
>  
>  if dpdk_conf.has('RTE_NET_BNXT')
> -    deps += ['net_bnxt']
> +    optional_deps += ['net_bnxt']
>  endif
>  
>  if dpdk_conf.has('RTE_NET_I40E')
> -    deps += ['net_i40e']
> +    optional_deps += ['net_i40e']
>  endif
>  
>  if dpdk_conf.has('RTE_NET_IXGBE')
> -    deps += ['net_ixgbe']
> +    optional_deps += ['net_ixgbe']
>  endif
>  
>  allow_experimental_apis = true
> diff --git a/lib/meson.build b/lib/meson.build
> index 162287753f..7916deadd9 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,7 +172,7 @@ foreach l:libraries
>  
>      shared_deps = ext_deps
>      static_deps = ext_deps
> -    foreach d:deps
> +    foreach d:deps + optional_deps
>          if not build
>              break
>          endif
> -- 
> 2.43.5
>
  
Burakov, Anatoly Sept. 9, 2024, 8:41 a.m. UTC | #2
On 9/6/2024 4:51 PM, Bruce Richardson wrote:
> On Wed, Sep 04, 2024 at 04:08:29PM +0100, Anatoly Burakov wrote:
>> Allow specifying dependencies as either mandatory or optional. This does
>> not change anything about the build, but it is useful for tooling to know
>> if a dependency is required or not.
>>
> 
> Ideally we probably want to merge the support in this patch with the idea
> expressed in [1]
> 
> /Bruce
> 
> [1] https://patches.dpdk.org/project/dpdk/patch/20231220142152.492556-4-bruce.richardson@intel.com/

Hi Bruce,

Please correct me if I'm wrong, but doesn't it essentially do the same 
thing? You're adding a new loop over optional deps, while I'm simply 
extending existing loop to iterate over deps + optional deps, which 
would achieve the same thing?

What does that patch do that this patch doesn't?
  
Bruce Richardson Sept. 9, 2024, 9:01 a.m. UTC | #3
On Mon, Sep 09, 2024 at 10:41:25AM +0200, Burakov, Anatoly wrote:
> On 9/6/2024 4:51 PM, Bruce Richardson wrote:
> > On Wed, Sep 04, 2024 at 04:08:29PM +0100, Anatoly Burakov wrote:
> > > Allow specifying dependencies as either mandatory or optional. This does
> > > not change anything about the build, but it is useful for tooling to know
> > > if a dependency is required or not.
> > > 
> > 
> > Ideally we probably want to merge the support in this patch with the idea
> > expressed in [1]
> > 
> > /Bruce
> > 
> > [1] https://patches.dpdk.org/project/dpdk/patch/20231220142152.492556-4-bruce.richardson@intel.com/
> 
> Hi Bruce,
> 
> Please correct me if I'm wrong, but doesn't it essentially do the same
> thing? You're adding a new loop over optional deps, while I'm simply
> extending existing loop to iterate over deps + optional deps, which would
> achieve the same thing?
> 
> What does that patch do that this patch doesn't?
> 
Your patch categorises the dependencies into optional and mandatory but
doesn't actually change any code flow logic. My patch doesn't do the
classification changes in the individual components, but changes the higher
level meson.build file to do the checks for optional dependencies and only
add them if they are present. That is, it removes the need for individual
components to check for the optional deps themselves and add them if found.

/Bruce
  

Patch

diff --git a/app/meson.build b/app/meson.build
index 5b2c80c7a1..1c61cd862c 100644
--- a/app/meson.build
+++ b/app/meson.build
@@ -65,6 +65,7 @@  foreach app:apps
     # external package/library requirements
     ext_deps = []
     deps = []
+    optional_deps = []
 
     if not enable_apps.contains(app)
         build = false
@@ -84,7 +85,7 @@  foreach app:apps
 
     if build
         dep_objs = []
-        foreach d:deps
+        foreach d:deps + optional_deps
             var_name = get_option('default_library') + '_rte_' + d
             if not is_variable(var_name)
                 build = false
diff --git a/app/proc-info/meson.build b/app/proc-info/meson.build
index 4f83f29a64..156592119b 100644
--- a/app/proc-info/meson.build
+++ b/app/proc-info/meson.build
@@ -10,5 +10,5 @@  endif
 sources = files('main.c')
 deps += ['ethdev', 'security', 'eventdev']
 if dpdk_conf.has('RTE_LIB_METRICS')
-    deps += 'metrics'
+    optional_deps += 'metrics'
 endif
diff --git a/app/test-bbdev/meson.build b/app/test-bbdev/meson.build
index 926e0a5271..c26e46a987 100644
--- a/app/test-bbdev/meson.build
+++ b/app/test-bbdev/meson.build
@@ -15,14 +15,14 @@  sources = files(
 )
 deps += ['bbdev', 'bus_vdev']
 if dpdk_conf.has('RTE_BASEBAND_FPGA_LTE_FEC')
-    deps += ['baseband_fpga_lte_fec']
+    optional_deps += ['baseband_fpga_lte_fec']
 endif
 if dpdk_conf.has('RTE_BASEBAND_FPGA_5GNR_FEC')
-    deps += ['baseband_fpga_5gnr_fec']
+    optional_deps += ['baseband_fpga_5gnr_fec']
 endif
 if dpdk_conf.has('RTE_BASEBAND_ACC')
-    deps += ['baseband_acc']
+    optional_deps += ['baseband_acc']
 endif
 if dpdk_conf.has('RTE_BASEBAND_LA12XX')
-    deps += ['baseband_la12xx']
+    optional_deps += ['baseband_la12xx']
 endif
diff --git a/app/test-crypto-perf/meson.build b/app/test-crypto-perf/meson.build
index 7b02b518f0..05c71e0a0c 100644
--- a/app/test-crypto-perf/meson.build
+++ b/app/test-crypto-perf/meson.build
@@ -21,5 +21,5 @@  sources = files(
 )
 deps += ['cryptodev', 'net', 'security']
 if dpdk_conf.has('RTE_CRYPTO_SCHEDULER')
-    deps += 'crypto_scheduler'
+    optional_deps += 'crypto_scheduler'
 endif
diff --git a/app/test-pmd/meson.build b/app/test-pmd/meson.build
index 719f875be0..5559829e09 100644
--- a/app/test-pmd/meson.build
+++ b/app/test-pmd/meson.build
@@ -36,44 +36,44 @@  endif
 
 deps += ['ethdev', 'cmdline']
 if dpdk_conf.has('RTE_CRYPTO_SCHEDULER')
-    deps += 'crypto_scheduler'
+    optional_deps += 'crypto_scheduler'
 endif
 if dpdk_conf.has('RTE_LIB_BITRATESTATS')
-    deps += 'bitratestats'
+    optional_deps += 'bitratestats'
 endif
 if dpdk_conf.has('RTE_LIB_BPF')
     sources += files('bpf_cmd.c')
-    deps += 'bpf'
+    optional_deps += 'bpf'
 endif
 if dpdk_conf.has('RTE_LIB_GRO')
-    deps += 'gro'
+    optional_deps += 'gro'
 endif
 if dpdk_conf.has('RTE_LIB_GSO')
-    deps += 'gso'
+    optional_deps += 'gso'
 endif
 if dpdk_conf.has('RTE_LIB_LATENCYSTATS')
-    deps += 'latencystats'
+    optional_deps += 'latencystats'
 endif
 if dpdk_conf.has('RTE_LIB_METRICS')
-    deps += 'metrics'
+    optional_deps += 'metrics'
 endif
 if dpdk_conf.has('RTE_LIB_PDUMP')
-    deps += 'pdump'
+    optional_deps += 'pdump'
 endif
 if dpdk_conf.has('RTE_NET_BNXT')
-    deps += 'net_bnxt'
+    optional_deps += 'net_bnxt'
 endif
 if dpdk_conf.has('RTE_NET_I40E')
-    deps += 'net_i40e'
+    optional_deps += 'net_i40e'
 endif
 if dpdk_conf.has('RTE_NET_IXGBE')
-    deps += 'net_ixgbe'
+    optional_deps += 'net_ixgbe'
 endif
 if dpdk_conf.has('RTE_NET_DPAA')
-    deps += ['bus_dpaa', 'mempool_dpaa', 'net_dpaa']
+    optional_deps += ['bus_dpaa', 'mempool_dpaa', 'net_dpaa']
 endif
 
 # 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 e29258e6ec..bb0a38b3a5 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.
@@ -217,8 +217,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
+                optional_deps += d
             endif
         endif
     endforeach
@@ -239,9 +239,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 is_variable(def_lib + '_rte_' + d) and d not in optional_deps
+        optional_deps += d
     endif
 endforeach
 
diff --git a/drivers/meson.build b/drivers/meson.build
index 66931d4241..b9a18a5986 100644
--- a/drivers/meson.build
+++ b/drivers/meson.build
@@ -128,6 +128,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
@@ -169,7 +170,7 @@  foreach subpath:subdirs
             # get dependency objs from strings
             shared_deps = ext_deps
             static_deps = ext_deps
-            foreach d:deps
+            foreach d:deps + optional_deps
                 if not build
                     break
                 endif
diff --git a/examples/ethtool/meson.build b/examples/ethtool/meson.build
index d7f63d48af..e8638a8607 100644
--- a/examples/ethtool/meson.build
+++ b/examples/ethtool/meson.build
@@ -20,7 +20,7 @@  includes = include_directories('lib', 'ethtool-app')
 
 deps += 'bus_pci'
 if dpdk_conf.has('RTE_NET_IXGBE')
-    deps += 'net_ixgbe'
+    optional_deps += 'net_ixgbe'
 endif
 
 allow_experimental_apis = true
diff --git a/examples/l2fwd-crypto/meson.build b/examples/l2fwd-crypto/meson.build
index bb44c88882..f16ebadc74 100644
--- a/examples/l2fwd-crypto/meson.build
+++ b/examples/l2fwd-crypto/meson.build
@@ -8,7 +8,7 @@ 
 
 deps += 'cryptodev'
 if dpdk_conf.has('RTE_CRYPTO_SCHEDULER')
-    deps += 'crypto_scheduler'
+    optional_deps += 'crypto_scheduler'
 endif
 allow_experimental_apis = true
 sources = files(
diff --git a/examples/l3fwd/meson.build b/examples/l3fwd/meson.build
index c25de77bba..5938452607 100644
--- a/examples/l3fwd/meson.build
+++ b/examples/l3fwd/meson.build
@@ -19,5 +19,5 @@  sources = files(
         'main.c',
 )
 if dpdk_conf.has('RTE_LIB_EVENTDEV')
-    deps += 'eventdev'
+    optional_deps += 'eventdev'
 endif
diff --git a/examples/meson.build b/examples/meson.build
index 8e8968a1fa..82151d09b4 100644
--- a/examples/meson.build
+++ b/examples/meson.build
@@ -98,11 +98,12 @@  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
-        foreach d:deps
+        foreach d:deps + optional_deps
             var_name = get_option('default_library') + '_rte_' + d
             if not is_variable(var_name)
                 build = false
diff --git a/examples/vm_power_manager/meson.build b/examples/vm_power_manager/meson.build
index b866d8fd54..25e5bcb71b 100644
--- a/examples/vm_power_manager/meson.build
+++ b/examples/vm_power_manager/meson.build
@@ -9,15 +9,15 @@ 
 deps += ['power']
 
 if dpdk_conf.has('RTE_NET_BNXT')
-    deps += ['net_bnxt']
+    optional_deps += ['net_bnxt']
 endif
 
 if dpdk_conf.has('RTE_NET_I40E')
-    deps += ['net_i40e']
+    optional_deps += ['net_i40e']
 endif
 
 if dpdk_conf.has('RTE_NET_IXGBE')
-    deps += ['net_ixgbe']
+    optional_deps += ['net_ixgbe']
 endif
 
 allow_experimental_apis = true
diff --git a/lib/meson.build b/lib/meson.build
index 162287753f..7916deadd9 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,7 +172,7 @@  foreach l:libraries
 
     shared_deps = ext_deps
     static_deps = ext_deps
-    foreach d:deps
+    foreach d:deps + optional_deps
         if not build
             break
         endif