[v2,5/6] config: discover libpcap on Windows

Message ID 20210214021616.26970-6-dmitry.kozliuk@gmail.com (mailing list archive)
State Superseded, archived
Delegated to: Ferruh Yigit
Headers
Series net/pcap: build on Windows |

Checks

Context Check Description
ci/checkpatch success coding style OK

Commit Message

Dmitry Kozlyuk Feb. 14, 2021, 2:16 a.m. UTC
  WinPcap or Npcap, can be installed anywhere.
Add a Meson option to specify SDK path.

Signed-off-by: Dmitry Kozlyuk <dmitry.kozliuk@gmail.com>
---
 config/meson.build | 21 ++++++++++++++++++---
 meson_options.txt  |  6 ++++--
 2 files changed, 22 insertions(+), 5 deletions(-)
  

Comments

Ferruh Yigit Feb. 25, 2021, 3:02 p.m. UTC | #1
On 2/14/2021 2:16 AM, Dmitry Kozlyuk wrote:
> WinPcap or Npcap, can be installed anywhere.
> Add a Meson option to specify SDK path.
> 

I am not sure if it is OK to add a meson option for this, can't we use the 
default path?

And does this mean we will need to add an option for each dependent library in 
Windows? If not, why pcap is special?

> Signed-off-by: Dmitry Kozlyuk <dmitry.kozliuk@gmail.com>

<...>
  
Dmitry Kozlyuk Feb. 25, 2021, 4:04 p.m. UTC | #2
2021-02-25 15:02, Ferruh Yigit:
> On 2/14/2021 2:16 AM, Dmitry Kozlyuk wrote:
> > WinPcap or Npcap, can be installed anywhere.
> > Add a Meson option to specify SDK path.
> >   
> 
> I am not sure if it is OK to add a meson option for this, can't we use the 
> default path?
> 
> And does this mean we will need to add an option for each dependent library in 
> Windows? If not, why pcap is special?

There are some meson options for SDK paths already. Are they exceptions?

IMO, explicit specification is better because it allows switching
dependency versions and library distributions.
I understand that consensus it to keep build matrix size at minimum, but
options to specify SDK path don't change the number of variants what can be
found.
  
Bruce Richardson Feb. 25, 2021, 4:33 p.m. UTC | #3
On Thu, Feb 25, 2021 at 07:04:38PM +0300, Dmitry Kozlyuk wrote:
> 2021-02-25 15:02, Ferruh Yigit:
> > On 2/14/2021 2:16 AM, Dmitry Kozlyuk wrote:
> > > WinPcap or Npcap, can be installed anywhere.
> > > Add a Meson option to specify SDK path.
> > >   
> > 
> > I am not sure if it is OK to add a meson option for this, can't we use the 
> > default path?
> > 
> > And does this mean we will need to add an option for each dependent library in 
> > Windows? If not, why pcap is special?
> 
> There are some meson options for SDK paths already. Are they exceptions?
> 
Right now, yes, they are exceptions, but there is work underway to remove
them and just replace them with use of pkg-config. Is there some automatic
path discovery mechanism on windows, similar to pkg-config, that can be
used rather than having to add explicit dependency paths?

/bruce
  
Dmitry Kozlyuk Feb. 25, 2021, 5:42 p.m. UTC | #4
2021-02-25 16:33, Bruce Richardson:
> On Thu, Feb 25, 2021 at 07:04:38PM +0300, Dmitry Kozlyuk wrote:
> > 2021-02-25 15:02, Ferruh Yigit:  
> > > On 2/14/2021 2:16 AM, Dmitry Kozlyuk wrote:  
> > > > WinPcap or Npcap, can be installed anywhere.
> > > > Add a Meson option to specify SDK path.
> > > >     
> > > 
> > > I am not sure if it is OK to add a meson option for this, can't we use the 
> > > default path?
> > > 
> > > And does this mean we will need to add an option for each dependent library in 
> > > Windows? If not, why pcap is special?  
> > 
> > There are some meson options for SDK paths already. Are they exceptions?
> >   
> Right now, yes, they are exceptions, but there is work underway to remove
> them and just replace them with use of pkg-config. Is there some automatic
> path discovery mechanism on windows, similar to pkg-config, that can be
> used rather than having to add explicit dependency paths?

pkg-config itself works on Windows if installed and given a PKG_CONFIG_PATH.

Npcap doesn't provide a .pc file, despite libpcap commit 4f6b2b99 having it.
Another quirk is that library is named libpcap.a/wpcap.lib on Unix/Windows.
I can just handle the name difference and assume it's in the search path.
  
Thomas Monjalon March 16, 2021, 9:16 a.m. UTC | #5
25/02/2021 18:42, Dmitry Kozlyuk:
> 2021-02-25 16:33, Bruce Richardson:
> > On Thu, Feb 25, 2021 at 07:04:38PM +0300, Dmitry Kozlyuk wrote:
> > > 2021-02-25 15:02, Ferruh Yigit:  
> > > > On 2/14/2021 2:16 AM, Dmitry Kozlyuk wrote:  
> > > > > WinPcap or Npcap, can be installed anywhere.
> > > > > Add a Meson option to specify SDK path.
> > > > >     
> > > > 
> > > > I am not sure if it is OK to add a meson option for this, can't we use the 
> > > > default path?
> > > > 
> > > > And does this mean we will need to add an option for each dependent library in 
> > > > Windows? If not, why pcap is special?  
> > > 
> > > There are some meson options for SDK paths already. Are they exceptions?
> > >   
> > Right now, yes, they are exceptions, but there is work underway to remove
> > them and just replace them with use of pkg-config. Is there some automatic
> > path discovery mechanism on windows, similar to pkg-config, that can be
> > used rather than having to add explicit dependency paths?
> 
> pkg-config itself works on Windows if installed and given a PKG_CONFIG_PATH.
> 
> Npcap doesn't provide a .pc file, despite libpcap commit 4f6b2b99 having it.

Please work with them to provide a .pc.

> Another quirk is that library is named libpcap.a/wpcap.lib on Unix/Windows.
> I can just handle the name difference and assume it's in the search path.

Yes please avoid adding a meson option for a path.
  
Dmitry Kozlyuk March 16, 2021, 9:37 a.m. UTC | #6
2021-03-16 10:16 (UTC+0100), Thomas Monjalon:
> 25/02/2021 18:42, Dmitry Kozlyuk:
> > 2021-02-25 16:33, Bruce Richardson:  
> > > On Thu, Feb 25, 2021 at 07:04:38PM +0300, Dmitry Kozlyuk wrote:  
> > > > 2021-02-25 15:02, Ferruh Yigit:    
> > > > > On 2/14/2021 2:16 AM, Dmitry Kozlyuk wrote:    
[...]
> > pkg-config itself works on Windows if installed and given a PKG_CONFIG_PATH.
> > 
> > Npcap doesn't provide a .pc file, despite libpcap commit 4f6b2b99 having it.  
> 
> Please work with them to provide a .pc.

Good idea, but I can't tell how soon they do'll it.

> > Another quirk is that library is named libpcap.a/wpcap.lib on Unix/Windows.
> > I can just handle the name difference and assume it's in the search path.  
> 
> Yes please avoid adding a meson option for a path.

I have v3 that relies on search paths only with just a library name fixup.
It's blocked by [2] and, transitively, by [1].

[1]: http://patchwork.dpdk.org/project/dpdk/list/?series=15513
[1]: http://patchwork.dpdk.org/project/dpdk/list/?series=15640
  

Patch

diff --git a/config/meson.build b/config/meson.build
index 3cf560b8a..6aae8276c 100644
--- a/config/meson.build
+++ b/config/meson.build
@@ -178,9 +178,24 @@  if not pcap_dep.found()
 	# pcap got a pkg-config file only in 1.9.0
 	pcap_dep = cc.find_library('pcap', required: false)
 endif
-if pcap_dep.found() and cc.has_header('pcap.h', dependencies: pcap_dep)
-	dpdk_conf.set('RTE_PORT_PCAP', 1)
-	dpdk_extra_ldflags += '-lpcap'
+if is_windows
+	# npcap SDK can be installed anywhere
+	pcap_sdk = get_option('pcap_sdk')
+	if pcap_sdk != ''
+		pcap_ldflags = ['-L@0@/Lib/x64'.format(pcap_sdk), '-lwpcap']
+		pcap_dep = declare_dependency(
+			compile_args: ['-I@0@/Include'.format(pcap_sdk)],
+			link_args: pcap_ldflags)
+	endif
+	if pcap_dep.found()
+		dpdk_conf.set('RTE_PORT_PCAP', 1)
+		dpdk_extra_ldflags += pcap_ldflags
+	endif
+else
+	if pcap_dep.found() and cc.has_header('pcap.h', dependencies: pcap_dep)
+		dpdk_conf.set('RTE_PORT_PCAP', 1)
+		dpdk_extra_ldflags += '-lpcap'
+	endif
 endif
 
 # for clang 32-bit compiles we need libatomic for 64-bit atomic ops
diff --git a/meson_options.txt b/meson_options.txt
index 6eff62e47..d74146d3a 100644
--- a/meson_options.txt
+++ b/meson_options.txt
@@ -10,6 +10,8 @@  option('enable_docs', type: 'boolean', value: false,
 	description: 'build documentation')
 option('enable_kmods', type: 'boolean', value: false,
 	description: 'build kernel modules')
+option('enable_trace_fp', type: 'boolean', value: false,
+	description: 'enable fast path trace points.')
 option('examples', type: 'string', value: '',
 	description: 'Comma-separated list of examples to build by default')
 option('flexran_sdk', type: 'string', value: '',
@@ -28,8 +30,8 @@  option('max_lcores', type: 'integer', value: 128,
 	description: 'maximum number of cores/threads supported by EAL')
 option('max_numa_nodes', type: 'integer', value: 32,
 	description: 'maximum number of NUMA nodes supported by EAL')
-option('enable_trace_fp', type: 'boolean', value: false,
-	description: 'enable fast path trace points.')
+option('pcap_sdk', type: 'string', value: '',
+	description: 'Path to libpcap SDK used on Windows')
 option('tests', type: 'boolean', value: true,
 	description: 'build unit tests')
 option('use_hpet', type: 'boolean', value: false,