From patchwork Fri Mar 1 07:18:42 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Anand Rawat X-Patchwork-Id: 50697 X-Patchwork-Delegate: thomas@monjalon.net Return-Path: X-Original-To: patchwork@dpdk.org Delivered-To: patchwork@dpdk.org Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id CDD7F3798; Fri, 1 Mar 2019 08:18:52 +0100 (CET) Received: from mga11.intel.com (mga11.intel.com [192.55.52.93]) by dpdk.org (Postfix) with ESMTP id A3F0D2B9E for ; Fri, 1 Mar 2019 08:18:50 +0100 (CET) X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from orsmga006.jf.intel.com ([10.7.209.51]) by fmsmga102.fm.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 28 Feb 2019 23:18:48 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.58,426,1544515200"; d="scan'208";a="120044711" Received: from anandraw-devbx.amr.corp.intel.com ([10.19.242.57]) by orsmga006.jf.intel.com with ESMTP; 28 Feb 2019 23:18:48 -0800 From: Anand Rawat To: dev@dpdk.org Date: Thu, 28 Feb 2019 23:18:42 -0800 Message-Id: <20190301071847.13376-2-anand.rawat@intel.com> X-Mailer: git-send-email 2.17.1.windows.2 In-Reply-To: <20190301071847.13376-1-anand.rawat@intel.com> References: <20190301071847.13376-1-anand.rawat@intel.com> Subject: [dpdk-dev] [PATCH 1/6] eal: eal stub to add windows support 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: , Errors-To: dev-bounces@dpdk.org Sender: "dev" Added initial stub source files for windows support and meson changes to build them. Signed-off-by: Anand Rawat Signed-off-by: Kadam, Pallavi Reviewed-by: Jeffrey B Shaw Reviewed-by: Ranjit Menon --- 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 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 + +#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,