[1/6] eal: eal stub to add windows support

Message ID 20190301071847.13376-2-anand.rawat@intel.com (mailing list archive)
State Superseded, archived
Delegated to: Thomas Monjalon
Headers
Series HelloWorld example for Windows |

Checks

Context Check Description
ci/checkpatch warning coding style issues
ci/Intel-compilation success Compilation OK
ci/intel-Performance-Testing success Performance Testing PASS
ci/mellanox-Performance-Testing success Performance Testing PASS

Commit Message

Anand Rawat March 1, 2019, 7:18 a.m. UTC
  Added initial stub source files for windows support and meson
changes to build them.

Signed-off-by: Anand Rawat <anand.rawat@intel.com>
Signed-off-by: Kadam, Pallavi <pallavi.kadam@intel.com>
Reviewed-by: Jeffrey B Shaw <jeffrey.b.shaw@intel.com>
Reviewed-by: Ranjit Menon <ranjit.menon@intel.com>
---
 config/meson.build                            |  28 +--
 config/x86/meson.build                        |  14 +-
 .../common/include/arch/x86/meson.build       |  41 +++--
 lib/librte_eal/common/meson.build             | 162 +++++++++---------
 lib/librte_eal/meson.build                    |  10 +-
 lib/librte_eal/winapp/eal/eal.c               |  11 ++
 lib/librte_eal/winapp/eal/eal_debug.c         |  11 ++
 lib/librte_eal/winapp/eal/eal_lcore.c         |  26 +++
 lib/librte_eal/winapp/eal/eal_thread.c        |  15 ++
 lib/librte_eal/winapp/eal/meson.build         |  10 ++
 lib/meson.build                               |   6 +-
 meson.build                                   |  34 ++--
 12 files changed, 239 insertions(+), 129 deletions(-)
 create mode 100644 lib/librte_eal/winapp/eal/eal.c
 create mode 100644 lib/librte_eal/winapp/eal/eal_debug.c
 create mode 100644 lib/librte_eal/winapp/eal/eal_lcore.c
 create mode 100644 lib/librte_eal/winapp/eal/eal_thread.c
 create mode 100644 lib/librte_eal/winapp/eal/meson.build
  

Comments

Thomas Monjalon March 1, 2019, 2:03 p.m. UTC | #1
01/03/2019 08:18, Anand Rawat:
> Added initial stub source files for windows support and meson
> changes to build them.

Thanks for sending some new patches based on meson.

Let's start review with some simple considerations.

> Signed-off-by: Anand Rawat <anand.rawat@intel.com>
> Signed-off-by: Kadam, Pallavi <pallavi.kadam@intel.com>

Please avoid comma in names.
I think the right name is Pallavi Kadam?

> Reviewed-by: Jeffrey B Shaw <jeffrey.b.shaw@intel.com>
> Reviewed-by: Ranjit Menon <ranjit.menon@intel.com>

Please make sure everybody involved here is in Cc of the emails.
Git should add them automatically.
Please add me as Cc of next versions. I'm interested in the start
of the Windows port. Thanks

[...]
> -# Copyright(c) 2017 Intel Corporation
> +# Copyright(c) 2019 Intel Corporation

I'm not sure you need to update the dates.
In case you need to, you should probably keep the original date.

> -# use pthreads
> -add_project_link_arguments('-pthread', language: 'c')
> -dpdk_extra_ldflags += '-pthread'
> +if host_machine.system() != 'windows'
> +	# use pthreads
> +	add_project_link_arguments('-pthread', language: 'c')
> +	dpdk_extra_ldflags += '-pthread'

Why pthreads is not used in Windows?

> -# some libs depend on maths lib
> -add_project_link_arguments('-lm', language: 'c')
> -dpdk_extra_ldflags += '-lm'
> +	# some libs depend on maths lib
> +	add_project_link_arguments('-lm', language: 'c')
> +	dpdk_extra_ldflags += '-lm'
> +endif

Why libmath is not used?

>  # get binutils version for the workaround of Bug 97
> -ldver = run_command('ld', '-v').stdout().strip()
> -if ldver.contains('2.30')
> -	if cc.has_argument('-mno-avx512f')
> -		march_opt += '-mno-avx512f'
> -		message('Binutils 2.30 detected, disabling AVX512 support as workaround for bug #97')
> +if host_machine.system() != 'windows'

The real fix should be to check which linker is selected by meson.

> +	ldver = run_command('ld', '-v').stdout().strip()
> +	if ldver.contains('2.30')
> +		if cc.has_argument('-mno-avx512f')
> +			march_opt += '-mno-avx512f'
> +			message('Binutils 2.30 detected, disabling AVX512 support as workaround for bug #97')
> +		endif

[...]
> --- a/lib/librte_eal/common/include/arch/x86/meson.build
> +++ b/lib/librte_eal/common/include/arch/x86/meson.build
> -install_headers(
> -	'rte_atomic_32.h',
> -	'rte_atomic_64.h',
> -	'rte_atomic.h',
> -	'rte_byteorder_32.h',
> -	'rte_byteorder_64.h',
> -	'rte_byteorder.h',
> -	'rte_cpuflags.h',
> -	'rte_cycles.h',
> -	'rte_io.h',
> -	'rte_memcpy.h',
> -	'rte_prefetch.h',
> -	'rte_pause.h',
> -	'rte_rtm.h',
> -	'rte_rwlock.h',
> -	'rte_spinlock.h',
> -	'rte_vect.h',
> -	subdir: get_option('include_subdir_arch'))
> +if host_machine.system() != 'windows'
> +	install_headers(
> +		'rte_atomic_32.h',
> +		'rte_atomic_64.h',
> +		'rte_atomic.h',
> +		'rte_byteorder_32.h',
> +		'rte_byteorder_64.h',
> +		'rte_byteorder.h',
> +		'rte_cpuflags.h',
> +		'rte_cycles.h',
> +		'rte_io.h',
> +		'rte_memcpy.h',
> +		'rte_prefetch.h',
> +		'rte_pause.h',
> +		'rte_rtm.h',
> +		'rte_rwlock.h',
> +		'rte_spinlock.h',
> +		'rte_vect.h',
> +		subdir: get_option('include_subdir_arch')
> +	)
> +endif

The headers should not be different for Windows.
NACK for this part.

[...]
> @@ -17,13 +17,19 @@ elif host_machine.system() == 'freebsd'
>  	dpdk_conf.set('RTE_EXEC_ENV_BSDAPP', 1)
>  	subdir('bsdapp/eal')
>  
> +elif host_machine.system() == 'windows'
> +	dpdk_conf.set('RTE_EXEC_ENV_WINDOWS', 1)

For consistency, it should RTE_EXEC_ENV_WINAPP.

> +	subdir('winapp/eal')
> +
  
Bruce Richardson March 1, 2019, 2:17 p.m. UTC | #2
On Fri, Mar 01, 2019 at 03:03:02PM +0100, Thomas Monjalon wrote:
> 01/03/2019 08:18, Anand Rawat:
> > Added initial stub source files for windows support and meson changes
> > to build them.
> 
> Thanks for sending some new patches based on meson.
> 
> Let's start review with some simple considerations.
> 
> > Signed-off-by: Anand Rawat <anand.rawat@intel.com> Signed-off-by:
> > Kadam, Pallavi <pallavi.kadam@intel.com>
> 
> Please avoid comma in names.  I think the right name is Pallavi Kadam?
> 
> > Reviewed-by: Jeffrey B Shaw <jeffrey.b.shaw@intel.com> Reviewed-by:
> > Ranjit Menon <ranjit.menon@intel.com>
> 
> Please make sure everybody involved here is in Cc of the emails.  Git
> should add them automatically.  Please add me as Cc of next versions. I'm
> interested in the start of the Windows port. Thanks
> 
> [...]
> > -# Copyright(c) 2017 Intel Corporation +# Copyright(c) 2019 Intel
> > Corporation
> 
> I'm not sure you need to update the dates.  In case you need to, you
> should probably keep the original date.
> 
> > -# use pthreads -add_project_link_arguments('-pthread', language: 'c')
> > -dpdk_extra_ldflags += '-pthread' +if host_machine.system() !=
> > 'windows' +	# use pthreads + add_project_link_arguments('-pthread',
> > language: 'c') + dpdk_extra_ldflags += '-pthread'
> 
> Why pthreads is not used in Windows?
> 
> > -# some libs depend on maths lib -add_project_link_arguments('-lm',
> > language: 'c') -dpdk_extra_ldflags += '-lm' +	# some libs depend
> > on maths lib +	add_project_link_arguments('-lm', language: 'c') +
> > dpdk_extra_ldflags += '-lm' +endif
> 
> Why libmath is not used?
> 
> >  # get binutils version for the workaround of Bug 97 -ldver =
> >  run_command('ld', '-v').stdout().strip() -if ldver.contains('2.30') -
> >  if cc.has_argument('-mno-avx512f') -		march_opt +=
> >  '-mno-avx512f' -		message('Binutils 2.30 detected, disabling
> >  AVX512 support as workaround for bug #97') +if host_machine.system()
> >  != 'windows'
> 
> The real fix should be to check which linker is selected by meson.
> 
> > +	ldver = run_command('ld', '-v').stdout().strip() +	if
> > ldver.contains('2.30') +		if cc.has_argument('-mno-avx512f')
> > +			march_opt += '-mno-avx512f' + message('Binutils
> > 2.30 detected, disabling AVX512 support as workaround for bug #97') +
> > endif
> 
> [...]
> > --- a/lib/librte_eal/common/include/arch/x86/meson.build +++
> > b/lib/librte_eal/common/include/arch/x86/meson.build -install_headers(
> > -	'rte_atomic_32.h', -	'rte_atomic_64.h', -	'rte_atomic.h', -
> > 'rte_byteorder_32.h', -	'rte_byteorder_64.h', -	'rte_byteorder.h',
> > -	'rte_cpuflags.h', -	'rte_cycles.h', -	'rte_io.h', -
> > 'rte_memcpy.h', -	'rte_prefetch.h', -	'rte_pause.h', -
> > 'rte_rtm.h', -	'rte_rwlock.h', -	'rte_spinlock.h', -
> > 'rte_vect.h', -	subdir: get_option('include_subdir_arch')) +if
> > host_machine.system() != 'windows' +	install_headers( +
> > 'rte_atomic_32.h', +		'rte_atomic_64.h', +
> > 'rte_atomic.h', +		'rte_byteorder_32.h', +
> > 'rte_byteorder_64.h', +		'rte_byteorder.h', +
> > 'rte_cpuflags.h', +		'rte_cycles.h', +		'rte_io.h',
> > +		'rte_memcpy.h', +		'rte_prefetch.h', +
> > 'rte_pause.h', +		'rte_rtm.h', +		'rte_rwlock.h', +
> > 'rte_spinlock.h', +		'rte_vect.h', +		subdir:
> > get_option('include_subdir_arch') +	) +endif
> 
> The headers should not be different for Windows.  NACK for this part.
> 
> [...]
> > @@ -17,13 +17,19 @@ elif host_machine.system() == 'freebsd'
> > dpdk_conf.set('RTE_EXEC_ENV_BSDAPP', 1) subdir('bsdapp/eal')
> >  
> > +elif host_machine.system() == 'windows' +
> > dpdk_conf.set('RTE_EXEC_ENV_WINDOWS', 1)
> 
> For consistency, it should RTE_EXEC_ENV_WINAPP.
> 
For this one you can partially blame me - early internal review suggested
changing to winapp, but I suggested holding off on the change for community
consensus. Personally, I  would prefer a little inconsistency and keep it
as windows for clarity. In future, I also think we should just rename
linxuapp to linux, and bsdapp to freebsd!

However, for now, if the majority prefer winapp, I'm ok with it. [Though I
can't help reading it as winamp half the time! No llamas involved here
though!]

/Bruce
  
Thomas Monjalon March 1, 2019, 2:30 p.m. UTC | #3
01/03/2019 15:17, Bruce Richardson:
> On Fri, Mar 01, 2019 at 03:03:02PM +0100, Thomas Monjalon wrote:
> > 01/03/2019 08:18, Anand Rawat:
> > > +elif host_machine.system() == 'windows' +
> > > dpdk_conf.set('RTE_EXEC_ENV_WINDOWS', 1)
> > 
> > For consistency, it should RTE_EXEC_ENV_WINAPP.
> > 
> For this one you can partially blame me - early internal review suggested
> changing to winapp, but I suggested holding off on the change for community
> consensus. Personally, I  would prefer a little inconsistency and keep it
> as windows for clarity. In future, I also think we should just rename
> linxuapp to linux, and bsdapp to freebsd!

OK I agree to remove APP suffixes.

> However, for now, if the majority prefer winapp, I'm ok with it. [Though I
> can't help reading it as winamp half the time! No llamas involved here
> though!]
  
Luca Boccassi March 1, 2019, 3:19 p.m. UTC | #4
On Fri, 2019-03-01 at 14:17 +0000, Bruce Richardson wrote:
> On Fri, Mar 01, 2019 at 03:03:02PM +0100, Thomas Monjalon wrote:
> > 01/03/2019 08:18, Anand Rawat:
> > > 
> > [...]
> > > @@ -17,13 +17,19 @@ elif host_machine.system() == 'freebsd'
> > > dpdk_conf.set('RTE_EXEC_ENV_BSDAPP', 1) subdir('bsdapp/eal')
> > >  
> > > +elif host_machine.system() == 'windows' +
> > > dpdk_conf.set('RTE_EXEC_ENV_WINDOWS', 1)
> > 
> > For consistency, it should RTE_EXEC_ENV_WINAPP.
> > 
> For this one you can partially blame me - early internal review
> suggested
> changing to winapp, but I suggested holding off on the change for
> community
> consensus. Personally, I  would prefer a little inconsistency and
> keep it
> as windows for clarity. In future, I also think we should just rename
> linxuapp to linux, and bsdapp to freebsd!
> 
> However, for now, if the majority prefer winapp, I'm ok with it.
> [Though I
> can't help reading it as winamp half the time! No llamas involved
> here
> though!]
> 
> /Bruce

We already have many utility libs and tools in DPDK, surely it's fine
to add userspace-accelerated MP3 playback too!
  

Patch

diff --git a/config/meson.build b/config/meson.build
index 0419607d3..b0356c6b5 100644
--- a/config/meson.build
+++ b/config/meson.build
@@ -1,5 +1,5 @@ 
 # SPDX-License-Identifier: BSD-3-Clause
-# Copyright(c) 2017 Intel Corporation
+# Copyright(c) 2019 Intel Corporation
 
 # set the machine type and cflags for it
 if meson.is_cross_build()
@@ -48,22 +48,30 @@  dpdk_conf.set('RTE_ARCH_64', cc.sizeof('void *') == 8)
 add_project_link_arguments('-Wl,--no-as-needed', language: 'c')
 dpdk_extra_ldflags += '-Wl,--no-as-needed'
 
-# use pthreads
-add_project_link_arguments('-pthread', language: 'c')
-dpdk_extra_ldflags += '-pthread'
+if host_machine.system() != 'windows'
+	# use pthreads
+	add_project_link_arguments('-pthread', language: 'c')
+	dpdk_extra_ldflags += '-pthread'
 
-# some libs depend on maths lib
-add_project_link_arguments('-lm', language: 'c')
-dpdk_extra_ldflags += '-lm'
+	# some libs depend on maths lib
+	add_project_link_arguments('-lm', language: 'c')
+	dpdk_extra_ldflags += '-lm'
+endif
 
 # for linux link against dl, for bsd execinfo
 if host_machine.system() == 'linux'
 	link_lib = 'dl'
-else
+elif host_machine.system() == 'freebsd'
 	link_lib = 'execinfo'
+else
+	link_lib = ''
+endif
+
+# if link_lib is empty, do not add it to project properties
+if link_lib != ''
+	add_project_link_arguments('-l' + link_lib, language: 'c')
+	dpdk_extra_ldflags += '-l' + link_lib
 endif
-add_project_link_arguments('-l' + link_lib, language: 'c')
-dpdk_extra_ldflags += '-l' + link_lib
 
 # check for libraries used in multiple places in DPDK
 has_libnuma = 0
diff --git a/config/x86/meson.build b/config/x86/meson.build
index 7504cb9e5..93cc30afc 100644
--- a/config/x86/meson.build
+++ b/config/x86/meson.build
@@ -1,15 +1,17 @@ 
 # SPDX-License-Identifier: BSD-3-Clause
-# Copyright(c) 2017 Intel Corporation
+# Copyright(c) 2019 Intel Corporation
 
 # for checking defines we need to use the correct compiler flags
 march_opt = ['-march=@0@'.format(machine)]
 
 # get binutils version for the workaround of Bug 97
-ldver = run_command('ld', '-v').stdout().strip()
-if ldver.contains('2.30')
-	if cc.has_argument('-mno-avx512f')
-		march_opt += '-mno-avx512f'
-		message('Binutils 2.30 detected, disabling AVX512 support as workaround for bug #97')
+if host_machine.system() != 'windows'
+	ldver = run_command('ld', '-v').stdout().strip()
+	if ldver.contains('2.30')
+		if cc.has_argument('-mno-avx512f')
+			march_opt += '-mno-avx512f'
+			message('Binutils 2.30 detected, disabling AVX512 support as workaround for bug #97')
+		endif
 	endif
 endif
 
diff --git a/lib/librte_eal/common/include/arch/x86/meson.build b/lib/librte_eal/common/include/arch/x86/meson.build
index bc8ffea1e..25b73b8d6 100644
--- a/lib/librte_eal/common/include/arch/x86/meson.build
+++ b/lib/librte_eal/common/include/arch/x86/meson.build
@@ -1,21 +1,24 @@ 
 # SPDX-License-Identifier: BSD-3-Clause
-# Copyright(c) 2017 Intel Corporation
+# Copyright(c) 2019 Intel Corporation
 
-install_headers(
-	'rte_atomic_32.h',
-	'rte_atomic_64.h',
-	'rte_atomic.h',
-	'rte_byteorder_32.h',
-	'rte_byteorder_64.h',
-	'rte_byteorder.h',
-	'rte_cpuflags.h',
-	'rte_cycles.h',
-	'rte_io.h',
-	'rte_memcpy.h',
-	'rte_prefetch.h',
-	'rte_pause.h',
-	'rte_rtm.h',
-	'rte_rwlock.h',
-	'rte_spinlock.h',
-	'rte_vect.h',
-	subdir: get_option('include_subdir_arch'))
+if host_machine.system() != 'windows'
+	install_headers(
+		'rte_atomic_32.h',
+		'rte_atomic_64.h',
+		'rte_atomic.h',
+		'rte_byteorder_32.h',
+		'rte_byteorder_64.h',
+		'rte_byteorder.h',
+		'rte_cpuflags.h',
+		'rte_cycles.h',
+		'rte_io.h',
+		'rte_memcpy.h',
+		'rte_prefetch.h',
+		'rte_pause.h',
+		'rte_rtm.h',
+		'rte_rwlock.h',
+		'rte_spinlock.h',
+		'rte_vect.h',
+		subdir: get_option('include_subdir_arch')
+	)
+endif
diff --git a/lib/librte_eal/common/meson.build b/lib/librte_eal/common/meson.build
index 5ecae0b1f..68ce11222 100644
--- a/lib/librte_eal/common/meson.build
+++ b/lib/librte_eal/common/meson.build
@@ -1,91 +1,99 @@ 
 # SPDX-License-Identifier: BSD-3-Clause
-# Copyright(c) 2017 Intel Corporation
+# Copyright(c) 2019 Intel Corporation
 
 eal_inc += include_directories('.', 'include',
 		join_paths('include/arch', arch_subdir))
 
 common_objs = []
-common_sources = files(
-	'eal_common_bus.c',
-	'eal_common_cpuflags.c',
-	'eal_common_class.c',
-	'eal_common_devargs.c',
-	'eal_common_dev.c',
-	'eal_common_errno.c',
-	'eal_common_fbarray.c',
-	'eal_common_hexdump.c',
-	'eal_common_hypervisor.c',
-	'eal_common_launch.c',
-	'eal_common_lcore.c',
-	'eal_common_log.c',
-	'eal_common_memalloc.c',
-	'eal_common_memory.c',
-	'eal_common_memzone.c',
-	'eal_common_options.c',
-	'eal_common_proc.c',
-	'eal_common_string_fns.c',
-	'eal_common_tailqs.c',
-	'eal_common_thread.c',
-	'eal_common_timer.c',
-	'eal_common_uuid.c',
-	'hotplug_mp.c',
-	'malloc_elem.c',
-	'malloc_heap.c',
-	'malloc_mp.c',
-	'rte_keepalive.c',
-	'rte_malloc.c',
-	'rte_option.c',
-	'rte_reciprocal.c',
-	'rte_service.c'
-)
+common_sources = []
+common_headers = []
+if host_machine.system() != 'windows'
+	common_sources = files(
+		'eal_common_bus.c',
+		'eal_common_cpuflags.c',
+		'eal_common_class.c',
+		'eal_common_devargs.c',
+		'eal_common_dev.c',
+		'eal_common_errno.c',
+		'eal_common_fbarray.c',
+		'eal_common_hexdump.c',
+		'eal_common_hypervisor.c',
+		'eal_common_launch.c',
+		'eal_common_lcore.c',
+		'eal_common_log.c',
+		'eal_common_memalloc.c',
+		'eal_common_memory.c',
+		'eal_common_memzone.c',
+		'eal_common_options.c',
+		'eal_common_proc.c',
+		'eal_common_string_fns.c',
+		'eal_common_tailqs.c',
+		'eal_common_thread.c',
+		'eal_common_timer.c',
+		'eal_common_uuid.c',
+		'hotplug_mp.c',
+		'malloc_elem.c',
+		'malloc_heap.c',
+		'malloc_mp.c',
+		'rte_keepalive.c',
+		'rte_malloc.c',
+		'rte_option.c',
+		'rte_reciprocal.c',
+		'rte_service.c'
+	)
+endif
 
 # get architecture specific sources and objs
 eal_common_arch_sources = []
 eal_common_arch_objs = []
-subdir(join_paths('arch', arch_subdir))
-common_sources += eal_common_arch_sources
-common_objs += eal_common_arch_objs
 
-common_headers = files(
-	'include/rte_alarm.h',
-	'include/rte_branch_prediction.h',
-	'include/rte_bus.h',
-	'include/rte_bitmap.h',
-	'include/rte_class.h',
-	'include/rte_common.h',
-	'include/rte_compat.h',
-	'include/rte_debug.h',
-	'include/rte_devargs.h',
-	'include/rte_dev.h',
-	'include/rte_eal.h',
-	'include/rte_eal_memconfig.h',
-	'include/rte_eal_interrupts.h',
-	'include/rte_errno.h',
-	'include/rte_fbarray.h',
-	'include/rte_hexdump.h',
-	'include/rte_hypervisor.h',
-	'include/rte_interrupts.h',
-	'include/rte_keepalive.h',
-	'include/rte_launch.h',
-	'include/rte_lcore.h',
-	'include/rte_log.h',
-	'include/rte_malloc.h',
-	'include/rte_malloc_heap.h',
-	'include/rte_memory.h',
-	'include/rte_memzone.h',
-	'include/rte_option.h',
-	'include/rte_pci_dev_feature_defs.h',
-	'include/rte_pci_dev_features.h',
-	'include/rte_per_lcore.h',
-	'include/rte_random.h',
-	'include/rte_reciprocal.h',
-	'include/rte_service.h',
-	'include/rte_service_component.h',
-	'include/rte_string_fns.h',
-	'include/rte_tailq.h',
-	'include/rte_time.h',
-	'include/rte_uuid.h',
-	'include/rte_version.h')
+common_headers += files('include/rte_common.h')
+if host_machine.system() != 'windows'
+	subdir(join_paths('arch', arch_subdir))
+	common_sources += eal_common_arch_sources
+	common_objs += eal_common_arch_objs
+
+	common_headers += files(
+		'include/rte_alarm.h',
+		'include/rte_branch_prediction.h',
+		'include/rte_bus.h',
+		'include/rte_bitmap.h',
+		'include/rte_class.h',
+		'include/rte_compat.h',
+		'include/rte_debug.h',
+		'include/rte_devargs.h',
+		'include/rte_dev.h',
+		'include/rte_eal.h',
+		'include/rte_eal_memconfig.h',
+		'include/rte_eal_interrupts.h',
+		'include/rte_errno.h',
+		'include/rte_fbarray.h',
+		'include/rte_hexdump.h',
+		'include/rte_hypervisor.h',
+		'include/rte_interrupts.h',
+		'include/rte_keepalive.h',
+		'include/rte_launch.h',
+		'include/rte_lcore.h',
+		'include/rte_log.h',
+		'include/rte_malloc.h',
+		'include/rte_malloc_heap.h',
+		'include/rte_memory.h',
+		'include/rte_memzone.h',
+		'include/rte_option.h',
+		'include/rte_pci_dev_feature_defs.h',
+		'include/rte_pci_dev_features.h',
+		'include/rte_per_lcore.h',
+		'include/rte_random.h',
+		'include/rte_reciprocal.h',
+		'include/rte_service.h',
+		'include/rte_service_component.h',
+		'include/rte_string_fns.h',
+		'include/rte_tailq.h',
+		'include/rte_time.h',
+		'include/rte_uuid.h',
+		'include/rte_version.h'
+	)
+endif
 
 # special case install the generic headers, since they go in a subdir
 generic_headers = files(
diff --git a/lib/librte_eal/meson.build b/lib/librte_eal/meson.build
index 98c1d1f31..6fa57ebe5 100644
--- a/lib/librte_eal/meson.build
+++ b/lib/librte_eal/meson.build
@@ -1,5 +1,5 @@ 
 # SPDX-License-Identifier: BSD-3-Clause
-# Copyright(c) 2017 Intel Corporation
+# Copyright(c) 2019 Intel Corporation
 
 # Custom EAL processing. EAL is complicated enough that it can't just
 # have a straight list of headers and source files.
@@ -17,13 +17,19 @@  elif host_machine.system() == 'freebsd'
 	dpdk_conf.set('RTE_EXEC_ENV_BSDAPP', 1)
 	subdir('bsdapp/eal')
 
+elif host_machine.system() == 'windows'
+	dpdk_conf.set('RTE_EXEC_ENV_WINDOWS', 1)
+	subdir('winapp/eal')
+
 else
 	error('unsupported system type "@0@"'.format(host_machine.system()))
 endif
 
 version = 9  # the version of the EAL API
 allow_experimental_apis = true
-deps += 'kvargs'
+if host_machine.system() != 'windows'
+	deps += 'kvargs'
+endif
 if dpdk_conf.has('RTE_USE_LIBBSD')
 	ext_deps += libbsd
 endif
diff --git a/lib/librte_eal/winapp/eal/eal.c b/lib/librte_eal/winapp/eal/eal.c
new file mode 100644
index 000000000..134452a77
--- /dev/null
+++ b/lib/librte_eal/winapp/eal/eal.c
@@ -0,0 +1,11 @@ 
+/* SPDX-License-Identifier: BSD-3-Clause
+ * Copyright(c) 2019 Intel Corporation
+ */
+
+#include "rte_common.h"
+
+int
+rte_eal_init(int argc __rte_unused, char **argv __rte_unused)
+{
+	return 0;
+}
diff --git a/lib/librte_eal/winapp/eal/eal_debug.c b/lib/librte_eal/winapp/eal/eal_debug.c
new file mode 100644
index 000000000..868808ca9
--- /dev/null
+++ b/lib/librte_eal/winapp/eal/eal_debug.c
@@ -0,0 +1,11 @@ 
+/* SPDX-License-Identifier: BSD-3-Clause
+ * Copyright(c) 2019 Intel Corporation
+ */
+
+#include "rte_common.h"
+
+void
+__rte_panic(const char *funcname __rte_unused,
+			const char *format __rte_unused, ...)
+{
+}
diff --git a/lib/librte_eal/winapp/eal/eal_lcore.c b/lib/librte_eal/winapp/eal/eal_lcore.c
new file mode 100644
index 000000000..46418f38f
--- /dev/null
+++ b/lib/librte_eal/winapp/eal/eal_lcore.c
@@ -0,0 +1,26 @@ 
+/* SPDX-License-Identifier: BSD-3-Clause
+ * Copyright(c) 2019 Intel Corporation
+ */
+
+#include "rte_common.h"
+
+ /* Get the cpu core id value */
+unsigned
+eal_cpu_core_id(unsigned lcore_id)
+{
+	return lcore_id;
+}
+
+/* Check if a cpu is present by the presence of the cpu information for it */
+int
+eal_cpu_detected(unsigned lcore_id __rte_unused)
+{
+	return 1;
+}
+
+/* Get CPU socket id (NUMA node) for a logical core */
+unsigned
+eal_cpu_socket_id(unsigned cpu_id __rte_unused)
+{
+	return 0;
+}
diff --git a/lib/librte_eal/winapp/eal/eal_thread.c b/lib/librte_eal/winapp/eal/eal_thread.c
new file mode 100644
index 000000000..222bd8f4d
--- /dev/null
+++ b/lib/librte_eal/winapp/eal/eal_thread.c
@@ -0,0 +1,15 @@ 
+/* SPDX-License-Identifier: BSD-3-Clause
+ * Copyright(c) 2018 Intel Corporation
+ */
+
+#include <windows.h>
+
+#include "rte_common.h"
+
+typedef uintptr_t eal_thread_t;
+
+int
+eal_thread_create(eal_thread_t *thread __rte_unused)
+{
+	return 0;
+}
diff --git a/lib/librte_eal/winapp/eal/meson.build b/lib/librte_eal/winapp/eal/meson.build
new file mode 100644
index 000000000..8b1735623
--- /dev/null
+++ b/lib/librte_eal/winapp/eal/meson.build
@@ -0,0 +1,10 @@ 
+# SPDX-License-Identifier: BSD-3-Clause
+# Copyright(c) 2019 Intel Corporation
+
+env_objs = []
+env_headers = []
+env_sources = files('eal.c',
+	'eal_debug.c',
+	'eal_lcore.c',
+	'eal_thread.c',
+)
diff --git a/lib/meson.build b/lib/meson.build
index 99957ba7d..e434cfc96 100644
--- a/lib/meson.build
+++ b/lib/meson.build
@@ -1,5 +1,5 @@ 
 # SPDX-License-Identifier: BSD-3-Clause
-# Copyright(c) 2017 Intel Corporation
+# Copyright(c) 2019 Intel Corporation
 
 
 # process all libraries equally, as far as possible
@@ -30,6 +30,10 @@  libraries = [
 	# flow_classify lib depends on pkt framework table lib
 	'flow_classify', 'bpf', 'telemetry']
 
+if host_machine.system() == 'windows'
+	libraries = ['eal'] # override libraries for windows
+endif
+
 default_cflags = machine_args
 if cc.has_argument('-Wno-format-truncation')
 	default_cflags += '-Wno-format-truncation'
diff --git a/meson.build b/meson.build
index 69833de82..c75d551a5 100644
--- a/meson.build
+++ b/meson.build
@@ -1,5 +1,5 @@ 
 # SPDX-License-Identifier: BSD-3-Clause
-# Copyright(c) 2017 Intel Corporation
+# Copyright(c) 2019 Intel Corporation
 
 project('DPDK', 'C',
 	version: '19.05.0-rc0',
@@ -16,6 +16,7 @@  dpdk_static_libraries = []
 dpdk_drivers = []
 dpdk_extra_ldflags = []
 dpdk_app_link_libraries = []
+driver_classes = []
 
 # set the major version, which might be used by drivers and libraries
 # depending on the configuration options
@@ -35,28 +36,33 @@  eal_pmd_path = join_paths(get_option('prefix'), driver_install_path)
 global_inc = include_directories('.', 'config', 'lib/librte_eal/common/include')
 subdir('config')
 
-# build libs and drivers
+# build libs
 subdir('lib')
-subdir('buildtools')
-subdir('drivers')
 
-# build binaries and installable tools
-subdir('usertools')
-subdir('app')
+if host_machine.system() != 'windows'
+	# build buildtools and drivers
+	subdir('buildtools')
+	subdir('drivers')
 
-# build docs
-subdir('doc')
+	# build binaries and installable tools
+	subdir('usertools')
+	subdir('app')
+	subdir('test')
+
+	# build kernel modules if enabled
+	if get_option('enable_kmods')
+		subdir('kernel')
+	endif
+
+	# build docs
+	subdir('doc')
+endif
 
 # build any examples explicitly requested - useful for developers
 if get_option('examples') != ''
 	subdir('examples')
 endif
 
-# build kernel modules if enabled
-if get_option('enable_kmods')
-	subdir('kernel')
-endif
-
 # write the build config
 build_cfg = 'rte_build_config.h'
 configure_file(output: build_cfg,