get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

GET /api/patches/91650/?format=api
HTTP 200 OK
Allow: GET, PUT, PATCH, HEAD, OPTIONS
Content-Type: application/json
Vary: Accept

{
    "id": 91650,
    "url": "https://patches.dpdk.org/api/patches/91650/?format=api",
    "web_url": "https://patches.dpdk.org/project/dpdk/patch/20210416170458.50188-8-bruce.richardson@intel.com/",
    "project": {
        "id": 1,
        "url": "https://patches.dpdk.org/api/projects/1/?format=api",
        "name": "DPDK",
        "link_name": "dpdk",
        "list_id": "dev.dpdk.org",
        "list_email": "dev@dpdk.org",
        "web_url": "http://core.dpdk.org",
        "scm_url": "git://dpdk.org/dpdk",
        "webscm_url": "http://git.dpdk.org/dpdk",
        "list_archive_url": "https://inbox.dpdk.org/dev",
        "list_archive_url_format": "https://inbox.dpdk.org/dev/{}",
        "commit_url_format": ""
    },
    "msgid": "<20210416170458.50188-8-bruce.richardson@intel.com>",
    "list_archive_url": "https://inbox.dpdk.org/dev/20210416170458.50188-8-bruce.richardson@intel.com",
    "date": "2021-04-16T17:04:51",
    "name": "[07/14] build: change infrastructure file tabs to spaces",
    "commit_ref": null,
    "pull_url": null,
    "state": "superseded",
    "archived": true,
    "hash": "f274c1511dafb3034c23586507a4628f2a4f6b8d",
    "submitter": {
        "id": 20,
        "url": "https://patches.dpdk.org/api/people/20/?format=api",
        "name": "Bruce Richardson",
        "email": "bruce.richardson@intel.com"
    },
    "delegate": {
        "id": 1,
        "url": "https://patches.dpdk.org/api/users/1/?format=api",
        "username": "tmonjalo",
        "first_name": "Thomas",
        "last_name": "Monjalon",
        "email": "thomas@monjalon.net"
    },
    "mbox": "https://patches.dpdk.org/project/dpdk/patch/20210416170458.50188-8-bruce.richardson@intel.com/mbox/",
    "series": [
        {
            "id": 16449,
            "url": "https://patches.dpdk.org/api/series/16449/?format=api",
            "web_url": "https://patches.dpdk.org/project/dpdk/list/?series=16449",
            "date": "2021-04-16T17:04:44",
            "name": "Build file updates",
            "version": 1,
            "mbox": "https://patches.dpdk.org/series/16449/mbox/"
        }
    ],
    "comments": "https://patches.dpdk.org/api/patches/91650/comments/",
    "check": "success",
    "checks": "https://patches.dpdk.org/api/patches/91650/checks/",
    "tags": {},
    "related": [],
    "headers": {
        "Return-Path": "<dev-bounces@dpdk.org>",
        "X-Original-To": "patchwork@inbox.dpdk.org",
        "Delivered-To": "patchwork@inbox.dpdk.org",
        "Received": [
            "from mails.dpdk.org (mails.dpdk.org [217.70.189.124])\n\tby inbox.dpdk.org (Postfix) with ESMTP id 3ACEFA0C41;\n\tFri, 16 Apr 2021 19:06:06 +0200 (CEST)",
            "from [217.70.189.124] (localhost [127.0.0.1])\n\tby mails.dpdk.org (Postfix) with ESMTP id 4FC79161A58;\n\tFri, 16 Apr 2021 19:05:26 +0200 (CEST)",
            "from mga05.intel.com (mga05.intel.com [192.55.52.43])\n by mails.dpdk.org (Postfix) with ESMTP id 8CD54161A08\n for <dev@dpdk.org>; Fri, 16 Apr 2021 19:05:14 +0200 (CEST)",
            "from orsmga006.jf.intel.com ([10.7.209.51])\n by fmsmga105.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384;\n 16 Apr 2021 10:05:13 -0700",
            "from silpixa00399126.ir.intel.com ([10.237.223.116])\n by orsmga006.jf.intel.com with ESMTP; 16 Apr 2021 10:05:12 -0700"
        ],
        "IronPort-SDR": [
            "\n 5t0nHnfkZ9DWpDBBBZsrZk+bjefhVgoO1/T3PaaLSkMbzud7O460t1+ejVqmCgiDq550fOrz1Q\n 4hlVug1HjhqQ==",
            "\n zrQJgOTdpEgUYs/obXx99U/NZ0HiLKdNzEfTAUCJYnW9NdZ65dc6up/cItQutP7MwwxUixkKsE\n wBUn6q1Hxtow=="
        ],
        "X-IronPort-AV": [
            "E=McAfee;i=\"6200,9189,9956\"; a=\"280388234\"",
            "E=Sophos;i=\"5.82,226,1613462400\"; d=\"scan'208\";a=\"280388234\"",
            "E=Sophos;i=\"5.82,226,1613462400\"; d=\"scan'208\";a=\"384375846\""
        ],
        "X-ExtLoop1": "1",
        "From": "Bruce Richardson <bruce.richardson@intel.com>",
        "To": "dev@dpdk.org",
        "Cc": "Bruce Richardson <bruce.richardson@intel.com>",
        "Date": "Fri, 16 Apr 2021 18:04:51 +0100",
        "Message-Id": "<20210416170458.50188-8-bruce.richardson@intel.com>",
        "X-Mailer": "git-send-email 2.27.0",
        "In-Reply-To": "<20210416170458.50188-1-bruce.richardson@intel.com>",
        "References": "<20210401115009.1063844-1-bruce.richardson@intel.com>\n <20210416170458.50188-1-bruce.richardson@intel.com>",
        "MIME-Version": "1.0",
        "Content-Transfer-Encoding": "8bit",
        "Subject": "[dpdk-dev] [PATCH 07/14] build: change infrastructure file tabs to\n spaces",
        "X-BeenThere": "dev@dpdk.org",
        "X-Mailman-Version": "2.1.29",
        "Precedence": "list",
        "List-Id": "DPDK patches and discussions <dev.dpdk.org>",
        "List-Unsubscribe": "<https://mails.dpdk.org/options/dev>,\n <mailto:dev-request@dpdk.org?subject=unsubscribe>",
        "List-Archive": "<http://mails.dpdk.org/archives/dev/>",
        "List-Post": "<mailto:dev@dpdk.org>",
        "List-Help": "<mailto:dev-request@dpdk.org?subject=help>",
        "List-Subscribe": "<https://mails.dpdk.org/listinfo/dev>,\n <mailto:dev-request@dpdk.org?subject=subscribe>",
        "Errors-To": "dev-bounces@dpdk.org",
        "Sender": "\"dev\" <dev-bounces@dpdk.org>"
    },
    "content": "Switch from using tabs to 4 spaces for meson.build indentation, for the\nbasic infrastructure and tooling files, as well as doc and kernel\ndirectories.\n\nSigned-off-by: Bruce Richardson <bruce.richardson@intel.com>\n---\n buildtools/chkincs/meson.build    |  24 +-\n buildtools/meson.build            |  34 +-\n buildtools/pkg-config/meson.build |  34 +-\n config/arm/meson.build            | 630 +++++++++++++++---------------\n config/meson.build                | 286 +++++++-------\n config/ppc/meson.build            |   8 +-\n config/x86/meson.build            |  64 +--\n doc/api/meson.build               |  36 +-\n doc/guides/meson.build            |  25 +-\n doc/meson.build                   |   6 +-\n kernel/freebsd/meson.build        |  32 +-\n kernel/linux/kni/meson.build      |  41 +-\n kernel/linux/meson.build          | 111 +++---\n meson.build                       |  94 ++---\n meson_options.txt                 |  84 ++--\n usertools/meson.build             |  11 +-\n 16 files changed, 759 insertions(+), 761 deletions(-)",
    "diff": "diff --git a/buildtools/chkincs/meson.build b/buildtools/chkincs/meson.build\nindex f28cfd3cd..34dcd81ce 100644\n--- a/buildtools/chkincs/meson.build\n+++ b/buildtools/chkincs/meson.build\n@@ -2,19 +2,19 @@\n # Copyright(c) 2021 Intel Corporation\n \n if not get_option('check_includes')\n-\tbuild = false\n-\tsubdir_done()\n+    build = false\n+    subdir_done()\n endif\n \n if is_windows\n-\t# for windows, the shebang line in the script won't work.\n-\terror('option \"check_includes\" is not supported on windows')\n+    # for windows, the shebang line in the script won't work.\n+    error('option \"check_includes\" is not supported on windows')\n endif\n \n gen_c_file_for_header = find_program('gen_c_file_for_header.py')\n gen_c_files = generator(gen_c_file_for_header,\n-\toutput: '@BASENAME@.c',\n-\targuments: ['@INPUT@', '@OUTPUT@'])\n+        output: '@BASENAME@.c',\n+        arguments: ['@INPUT@', '@OUTPUT@'])\n \n cflags = machine_args\n cflags += '-DALLOW_EXPERIMENTAL_API'\n@@ -24,12 +24,12 @@ sources += gen_c_files.process(dpdk_chkinc_headers)\n \n deps = []\n foreach l:enabled_libs\n-\tdeps += get_variable('static_rte_' + l)\n+    deps += get_variable('static_rte_' + l)\n endforeach\n \n executable('chkincs', sources,\n-\tc_args: cflags,\n-\tinclude_directories: includes,\n-\tdependencies: deps,\n-\tlink_whole: dpdk_static_libraries + dpdk_drivers,\n-\tinstall: false)\n+        c_args: cflags,\n+        include_directories: includes,\n+        dependencies: deps,\n+        link_whole: dpdk_static_libraries + dpdk_drivers,\n+        install: false)\ndiff --git a/buildtools/meson.build b/buildtools/meson.build\nindex 9c9347457..c520896b4 100644\n--- a/buildtools/meson.build\n+++ b/buildtools/meson.build\n@@ -10,9 +10,9 @@ binutils_avx512_check = find_program('binutils-avx512-check.sh')\n # set up map-to-win script using python, either built-in or external\n python3 = import('python').find_installation(required: false)\n if python3.found()\n-\tpy3 = [python3]\n+    py3 = [python3]\n else\n-\tpy3 = ['meson', 'runpython']\n+    py3 = ['meson', 'runpython']\n endif\n map_to_win_cmd = py3 + files('map_to_win.py')\n sphinx_wrapper = py3 + files('call-sphinx-build.py')\n@@ -21,27 +21,27 @@ sphinx_wrapper = py3 + files('call-sphinx-build.py')\n pmdinfo = py3 + files('gen-pmdinfo-cfile.py') + [meson.current_build_dir()]\n pmdinfogen = py3 + files('pmdinfogen.py')\n if host_machine.system() == 'windows'\n-\tif cc.get_id() == 'gcc'\n-\t\tpmdinfo += 'ar'\n-\telse\n-\t\tpmdinfo += 'llvm-ar'\n-\tendif\n-\tpmdinfogen += 'coff'\n+    if cc.get_id() == 'gcc'\n+        pmdinfo += 'ar'\n+    else\n+        pmdinfo += 'llvm-ar'\n+    endif\n+    pmdinfogen += 'coff'\n else\n-\tpmdinfo += 'ar'\n-\tpmdinfogen += 'elf'\n+    pmdinfo += 'ar'\n+    pmdinfogen += 'elf'\n endif\n \n # TODO: starting from Meson 0.51.0 use\n-# \tpython3 = import('python').find_installation('python',\n-#\t\tmodules : python3_required_modules)\n+#     python3 = import('python').find_installation('python',\n+#        modules : python3_required_modules)\n python3_required_modules = []\n if host_machine.system() != 'windows'\n-\tpython3_required_modules = ['elftools']\n+    python3_required_modules = ['elftools']\n endif\n foreach module : python3_required_modules\n-\tscript = 'import importlib.util; import sys; exit(importlib.util.find_spec(\"@0@\") is None)'\n-\tif run_command(py3, '-c', script.format(module)).returncode() != 0\n-\t\terror('missing python module: @0@'.format(module))\n-\tendif\n+    script = 'import importlib.util; import sys; exit(importlib.util.find_spec(\"@0@\") is None)'\n+    if run_command(py3, '-c', script.format(module)).returncode() != 0\n+        error('missing python module: @0@'.format(module))\n+    endif\n endforeach\ndiff --git a/buildtools/pkg-config/meson.build b/buildtools/pkg-config/meson.build\nindex 39a8fd1c8..0412883c8 100644\n--- a/buildtools/pkg-config/meson.build\n+++ b/buildtools/pkg-config/meson.build\n@@ -4,7 +4,7 @@\n pkg = import('pkgconfig')\n pkg_extra_cflags = ['-include', 'rte_config.h'] + machine_args\n if is_freebsd\n-\tpkg_extra_cflags += ['-D__BSD_VISIBLE']\n+    pkg_extra_cflags += ['-D__BSD_VISIBLE']\n endif\n \n # When calling pkg-config --static --libs, pkg-config will always output the\n@@ -28,30 +28,30 @@ endif\n \n \n pkg.generate(name: 'dpdk-libs',\n-\tfilebase: 'libdpdk-libs',\n-\tdescription: '''Internal-only DPDK pkgconfig file. Not for direct use.\n+        filebase: 'libdpdk-libs',\n+        description: '''Internal-only DPDK pkgconfig file. Not for direct use.\n Use libdpdk.pc instead of this file to query DPDK compile/link arguments''',\n-\tversion: meson.project_version(),\n-\tsubdirs: [get_option('include_subdir_arch'), '.'],\n-\textra_cflags: pkg_extra_cflags,\n-\tlibraries: ['-Wl,--as-needed'] + dpdk_libraries,\n-\tlibraries_private: dpdk_extra_ldflags)\n+        version: meson.project_version(),\n+        subdirs: [get_option('include_subdir_arch'), '.'],\n+        extra_cflags: pkg_extra_cflags,\n+        libraries: ['-Wl,--as-needed'] + dpdk_libraries,\n+        libraries_private: dpdk_extra_ldflags)\n \n platform_flags = []\n if not is_windows\n-\tplatform_flags += ['-Wl,--export-dynamic'] # ELF only\n+    platform_flags += ['-Wl,--export-dynamic'] # ELF only\n endif\n pkg.generate(name: 'DPDK', # main DPDK pkgconfig file\n-\tfilebase: 'libdpdk',\n-\tversion: meson.project_version(),\n-\tdescription: '''The Data Plane Development Kit (DPDK).\n+        filebase: 'libdpdk',\n+        version: meson.project_version(),\n+        description: '''The Data Plane Development Kit (DPDK).\n Note that CFLAGS might contain an -march flag higher than typical baseline.\n This is required for a number of static inline functions in the public headers.''',\n-\trequires: ['libdpdk-libs', libbsd], # may need libbsd for string funcs\n-\t                  # if libbsd is not enabled, then this is blank\n-\tlibraries_private: ['-Wl,--whole-archive'] +\n-\t\t\tdpdk_drivers + dpdk_static_libraries +\n-\t\t\t['-Wl,--no-whole-archive'] + platform_flags\n+        requires: ['libdpdk-libs', libbsd], # may need libbsd for string funcs\n+                      # if libbsd is not enabled, then this is blank\n+        libraries_private: ['-Wl,--whole-archive'] +\n+            dpdk_drivers + dpdk_static_libraries +\n+            ['-Wl,--no-whole-archive'] + platform_flags\n )\n \n # For static linking with dependencies as shared libraries,\ndiff --git a/config/arm/meson.build b/config/arm/meson.build\nindex b9f70f2e7..3a1c1a598 100644\n--- a/config/arm/meson.build\n+++ b/config/arm/meson.build\n@@ -5,22 +5,22 @@\n \n # common flags to all aarch64 builds, with lowest priority\n flags_common = [\n-\t# Accelerate rte_memcpy. Be sure to run unit test (memcpy_perf_autotest)\n-\t# to determine the best threshold in code. Refer to notes in source file\n-\t# (lib/librte_eal/arm/include/rte_memcpy_64.h) for more info.\n-\t['RTE_ARCH_ARM64_MEMCPY', false],\n-\t#\t['RTE_ARM64_MEMCPY_ALIGNED_THRESHOLD', 2048],\n-\t#\t['RTE_ARM64_MEMCPY_UNALIGNED_THRESHOLD', 512],\n-\t# Leave below RTE_ARM64_MEMCPY_xxx options commented out,\n-\t# unless there are strong reasons.\n-\t#\t['RTE_ARM64_MEMCPY_SKIP_GCC_VER_CHECK', false],\n-\t#\t['RTE_ARM64_MEMCPY_ALIGN_MASK', 0xF],\n-\t#\t['RTE_ARM64_MEMCPY_STRICT_ALIGN', false],\n-\n-\t['RTE_SCHED_VECTOR', false],\n-\t['RTE_ARM_USE_WFE', false],\n-\t['RTE_ARCH_ARM64', true],\n-\t['RTE_CACHE_LINE_SIZE', 128]\n+        # Accelerate rte_memcpy. Be sure to run unit test (memcpy_perf_autotest)\n+        # to determine the best threshold in code. Refer to notes in source file\n+        # (lib/librte_eal/arm/include/rte_memcpy_64.h) for more info.\n+        ['RTE_ARCH_ARM64_MEMCPY', false],\n+        #    ['RTE_ARM64_MEMCPY_ALIGNED_THRESHOLD', 2048],\n+        #    ['RTE_ARM64_MEMCPY_UNALIGNED_THRESHOLD', 512],\n+        # Leave below RTE_ARM64_MEMCPY_xxx options commented out,\n+        # unless there are strong reasons.\n+        #    ['RTE_ARM64_MEMCPY_SKIP_GCC_VER_CHECK', false],\n+        #    ['RTE_ARM64_MEMCPY_ALIGN_MASK', 0xF],\n+        #    ['RTE_ARM64_MEMCPY_STRICT_ALIGN', false],\n+\n+        ['RTE_SCHED_VECTOR', false],\n+        ['RTE_ARM_USE_WFE', false],\n+        ['RTE_ARCH_ARM64', true],\n+        ['RTE_CACHE_LINE_SIZE', 128]\n ]\n \n ## Part numbers are specific to Arm implementers\n@@ -29,381 +29,381 @@ flags_common = [\n # part number specific aarch64 flags have higher priority\n #     (will overwrite both common and implementer specific flags)\n implementer_generic = {\n-\t'description': 'Generic armv8',\n-\t'flags': [\n-\t\t['RTE_MACHINE', '\"armv8a\"'],\n-\t\t['RTE_USE_C11_MEM_MODEL', true],\n-\t\t['RTE_MAX_LCORE', 256],\n-\t\t['RTE_MAX_NUMA_NODES', 4]\n-\t],\n-\t'part_number_config': {\n-\t\t'generic': {'machine_args': ['-march=armv8-a+crc',\n-\t\t\t\t\t     '-moutline-atomics']}\n-\t}\n+    'description': 'Generic armv8',\n+    'flags': [\n+        ['RTE_MACHINE', '\"armv8a\"'],\n+        ['RTE_USE_C11_MEM_MODEL', true],\n+        ['RTE_MAX_LCORE', 256],\n+        ['RTE_MAX_NUMA_NODES', 4]\n+    ],\n+    'part_number_config': {\n+        'generic': {'machine_args': ['-march=armv8-a+crc',\n+                         '-moutline-atomics']}\n+    }\n }\n \n part_number_config_arm = {\n-\t'0xd03': {'machine_args':  ['-mcpu=cortex-a53']},\n-\t'0xd04': {'machine_args':  ['-mcpu=cortex-a35']},\n-\t'0xd07': {'machine_args':  ['-mcpu=cortex-a57']},\n-\t'0xd08': {'machine_args':  ['-mcpu=cortex-a72']},\n-\t'0xd09': {'machine_args':  ['-mcpu=cortex-a73']},\n-\t'0xd0a': {'machine_args':  ['-mcpu=cortex-a75']},\n-\t'0xd0b': {'machine_args':  ['-mcpu=cortex-a76']},\n-\t'0xd0c': {\n-\t\t'machine_args':  ['-march=armv8.2-a+crypto',\n-\t\t\t\t  '-mcpu=neoverse-n1'],\n-\t\t'flags': [\n-\t\t\t['RTE_MACHINE', '\"neoverse-n1\"'],\n-\t\t\t['RTE_ARM_FEATURE_ATOMICS', true],\n-\t\t\t['RTE_MAX_MEM_MB', 1048576],\n-\t\t\t['RTE_MAX_LCORE', 160],\n-\t\t\t['RTE_MAX_NUMA_NODES', 2]\n-\t\t]\n-\t},\n-\t'0xd49': {\n-\t\t'machine_args':  ['-march=armv8.5-a+crypto+sve2'],\n-\t\t'flags': [\n-\t\t\t['RTE_MACHINE', '\"neoverse-n2\"'],\n-\t\t\t['RTE_ARM_FEATURE_ATOMICS', true],\n-\t\t\t['RTE_MAX_LCORE', 64],\n-\t\t\t['RTE_MAX_NUMA_NODES', 1]\n-\t\t]\n-\t}\n+    '0xd03': {'machine_args':  ['-mcpu=cortex-a53']},\n+    '0xd04': {'machine_args':  ['-mcpu=cortex-a35']},\n+    '0xd07': {'machine_args':  ['-mcpu=cortex-a57']},\n+    '0xd08': {'machine_args':  ['-mcpu=cortex-a72']},\n+    '0xd09': {'machine_args':  ['-mcpu=cortex-a73']},\n+    '0xd0a': {'machine_args':  ['-mcpu=cortex-a75']},\n+    '0xd0b': {'machine_args':  ['-mcpu=cortex-a76']},\n+    '0xd0c': {\n+        'machine_args':  ['-march=armv8.2-a+crypto',\n+                  '-mcpu=neoverse-n1'],\n+        'flags': [\n+            ['RTE_MACHINE', '\"neoverse-n1\"'],\n+            ['RTE_ARM_FEATURE_ATOMICS', true],\n+            ['RTE_MAX_MEM_MB', 1048576],\n+            ['RTE_MAX_LCORE', 160],\n+            ['RTE_MAX_NUMA_NODES', 2]\n+        ]\n+    },\n+    '0xd49': {\n+        'machine_args':  ['-march=armv8.5-a+crypto+sve2'],\n+        'flags': [\n+            ['RTE_MACHINE', '\"neoverse-n2\"'],\n+            ['RTE_ARM_FEATURE_ATOMICS', true],\n+            ['RTE_MAX_LCORE', 64],\n+            ['RTE_MAX_NUMA_NODES', 1]\n+        ]\n+    }\n }\n implementer_arm = {\n-\t'description': 'Arm',\n-\t'flags': [\n-\t\t['RTE_MACHINE', '\"armv8a\"'],\n-\t\t['RTE_USE_C11_MEM_MODEL', true],\n-\t\t['RTE_CACHE_LINE_SIZE', 64],\n-\t\t['RTE_MAX_LCORE', 64],\n-\t\t['RTE_MAX_NUMA_NODES', 4]\n-\t],\n-\t'part_number_config': part_number_config_arm\n+    'description': 'Arm',\n+    'flags': [\n+        ['RTE_MACHINE', '\"armv8a\"'],\n+        ['RTE_USE_C11_MEM_MODEL', true],\n+        ['RTE_CACHE_LINE_SIZE', 64],\n+        ['RTE_MAX_LCORE', 64],\n+        ['RTE_MAX_NUMA_NODES', 4]\n+    ],\n+    'part_number_config': part_number_config_arm\n }\n \n flags_part_number_thunderx = [\n-\t['RTE_MACHINE', '\"thunderx\"'],\n-\t['RTE_USE_C11_MEM_MODEL', false]\n+    ['RTE_MACHINE', '\"thunderx\"'],\n+    ['RTE_USE_C11_MEM_MODEL', false]\n ]\n implementer_cavium = {\n-\t'description': 'Cavium',\n-\t'flags': [\n-\t\t['RTE_MAX_VFIO_GROUPS', 128],\n-\t\t['RTE_MAX_LCORE', 96],\n-\t\t['RTE_MAX_NUMA_NODES', 2]\n-\t],\n-\t'part_number_config': {\n-\t\t'0xa1': {\n-\t\t\t'machine_args': ['-mcpu=thunderxt88'],\n-\t\t\t'flags': flags_part_number_thunderx\n-\t\t},\n-\t\t'0xa2': {\n-\t\t\t'machine_args': ['-mcpu=thunderxt81'],\n-\t\t\t'flags': flags_part_number_thunderx\n-\t\t},\n-\t\t'0xa3': {\n-\t\t\t'machine_args': ['-mcpu=thunderxt83'],\n-\t\t\t'flags': flags_part_number_thunderx\n-\t\t},\n-\t\t'0xaf': {\n-\t\t\t'machine_args': ['-march=armv8.1-a+crc+crypto',\n-\t\t\t\t\t '-mcpu=thunderx2t99'],\n-\t\t\t'flags': [\n-\t\t\t\t['RTE_MACHINE', '\"thunderx2\"'],\n-\t\t\t\t['RTE_ARM_FEATURE_ATOMICS', true],\n-\t\t\t\t['RTE_USE_C11_MEM_MODEL', true],\n-\t\t\t\t['RTE_CACHE_LINE_SIZE', 64],\n-\t\t\t\t['RTE_MAX_LCORE', 256]\n-\t\t\t]\n-\t\t},\n-\t\t'0xb2': {\n-\t\t\t'machine_args': ['-march=armv8.2-a+crc+crypto+lse',\n-\t\t\t\t\t '-mcpu=octeontx2'],\n-\t\t\t'flags': [\n-\t\t\t\t['RTE_MACHINE', '\"octeontx2\"'],\n-\t\t\t\t['RTE_ARM_FEATURE_ATOMICS', true],\n-\t\t\t\t['RTE_USE_C11_MEM_MODEL', true],\n-\t\t\t\t['RTE_MAX_LCORE', 36],\n-\t\t\t\t['RTE_MAX_NUMA_NODES', 1]\n-\t\t\t]\n-\t\t}\n-\t}\n+    'description': 'Cavium',\n+    'flags': [\n+        ['RTE_MAX_VFIO_GROUPS', 128],\n+        ['RTE_MAX_LCORE', 96],\n+        ['RTE_MAX_NUMA_NODES', 2]\n+    ],\n+    'part_number_config': {\n+        '0xa1': {\n+            'machine_args': ['-mcpu=thunderxt88'],\n+            'flags': flags_part_number_thunderx\n+        },\n+        '0xa2': {\n+            'machine_args': ['-mcpu=thunderxt81'],\n+            'flags': flags_part_number_thunderx\n+        },\n+        '0xa3': {\n+            'machine_args': ['-mcpu=thunderxt83'],\n+            'flags': flags_part_number_thunderx\n+        },\n+        '0xaf': {\n+            'machine_args': ['-march=armv8.1-a+crc+crypto',\n+                     '-mcpu=thunderx2t99'],\n+            'flags': [\n+                ['RTE_MACHINE', '\"thunderx2\"'],\n+                ['RTE_ARM_FEATURE_ATOMICS', true],\n+                ['RTE_USE_C11_MEM_MODEL', true],\n+                ['RTE_CACHE_LINE_SIZE', 64],\n+                ['RTE_MAX_LCORE', 256]\n+            ]\n+        },\n+        '0xb2': {\n+            'machine_args': ['-march=armv8.2-a+crc+crypto+lse',\n+                     '-mcpu=octeontx2'],\n+            'flags': [\n+                ['RTE_MACHINE', '\"octeontx2\"'],\n+                ['RTE_ARM_FEATURE_ATOMICS', true],\n+                ['RTE_USE_C11_MEM_MODEL', true],\n+                ['RTE_MAX_LCORE', 36],\n+                ['RTE_MAX_NUMA_NODES', 1]\n+            ]\n+        }\n+    }\n }\n \n implementer_ampere = {\n-\t'description': 'Ampere Computing',\n-\t'flags': [\n-\t\t['RTE_MACHINE', '\"emag\"'],\n-\t\t['RTE_CACHE_LINE_SIZE', 64],\n-\t\t['RTE_MAX_LCORE', 32],\n-\t\t['RTE_MAX_NUMA_NODES', 1]\n-\t],\n-\t'part_number_config': {\n-\t\t'0x0': {'machine_args':  ['-march=armv8-a+crc+crypto',\n-\t\t\t\t\t  '-mtune=emag']}\n-\t}\n+    'description': 'Ampere Computing',\n+    'flags': [\n+        ['RTE_MACHINE', '\"emag\"'],\n+        ['RTE_CACHE_LINE_SIZE', 64],\n+        ['RTE_MAX_LCORE', 32],\n+        ['RTE_MAX_NUMA_NODES', 1]\n+    ],\n+    'part_number_config': {\n+        '0x0': {'machine_args':  ['-march=armv8-a+crc+crypto',\n+                      '-mtune=emag']}\n+    }\n }\n \n implementer_qualcomm = {\n-\t'description': 'Qualcomm',\n-\t'flags': [\n-\t\t['RTE_MACHINE', '\"armv8a\"'],\n-\t\t['RTE_USE_C11_MEM_MODEL', true],\n-\t\t['RTE_CACHE_LINE_SIZE', 64],\n-\t\t['RTE_MAX_LCORE', 64],\n-\t\t['RTE_MAX_NUMA_NODES', 1]\n-\t],\n-\t'part_number_config': {\n-\t\t'0xc00': {'machine_args':  ['-march=armv8-a+crc']}\n-\t}\n+    'description': 'Qualcomm',\n+    'flags': [\n+        ['RTE_MACHINE', '\"armv8a\"'],\n+        ['RTE_USE_C11_MEM_MODEL', true],\n+        ['RTE_CACHE_LINE_SIZE', 64],\n+        ['RTE_MAX_LCORE', 64],\n+        ['RTE_MAX_NUMA_NODES', 1]\n+    ],\n+    'part_number_config': {\n+        '0xc00': {'machine_args':  ['-march=armv8-a+crc']}\n+    }\n }\n \n ## Arm implementers (ID from MIDR in Arm Architecture Reference Manual)\n implementers = {\n-\t'generic': implementer_generic,\n-\t'0x41': implementer_arm,\n-\t'0x43': implementer_cavium,\n-\t'0x50': implementer_ampere,\n-\t'0x51': implementer_qualcomm\n+    'generic': implementer_generic,\n+    '0x41': implementer_arm,\n+    '0x43': implementer_cavium,\n+    '0x50': implementer_ampere,\n+    '0x51': implementer_qualcomm\n }\n \n # SoC specific aarch64 flags have the highest priority\n #     (will overwrite all other flags)\n soc_generic = {\n-\t'description': 'Generic un-optimized build for all aarch64 machines',\n-\t'implementer': 'generic',\n-\t'part_number': 'generic'\n+    'description': 'Generic un-optimized build for all aarch64 machines',\n+    'implementer': 'generic',\n+    'part_number': 'generic'\n }\n \n soc_armada = {\n-\t'description': 'Marvell ARMADA',\n-\t'implementer': '0x41',\n-\t'part_number': '0xd08',\n-\t'flags': [\n-\t\t['RTE_MAX_LCORE', 16],\n-\t\t['RTE_MAX_NUMA_NODES', 1]\n-\t],\n-\t'numa': false\n+    'description': 'Marvell ARMADA',\n+    'implementer': '0x41',\n+    'part_number': '0xd08',\n+    'flags': [\n+        ['RTE_MAX_LCORE', 16],\n+        ['RTE_MAX_NUMA_NODES', 1]\n+    ],\n+    'numa': false\n }\n \n soc_bluefield = {\n-\t'description': 'NVIDIA BlueField',\n-\t'implementer': '0x41',\n-\t'part_number': '0xd08',\n-\t'flags': [\n-\t\t['RTE_MAX_LCORE', 16],\n-\t\t['RTE_MAX_NUMA_NODES', 1]\n-\t],\n-\t'numa': false\n+    'description': 'NVIDIA BlueField',\n+    'implementer': '0x41',\n+    'part_number': '0xd08',\n+    'flags': [\n+        ['RTE_MAX_LCORE', 16],\n+        ['RTE_MAX_NUMA_NODES', 1]\n+    ],\n+    'numa': false\n }\n \n soc_dpaa = {\n-\t'description': 'NXP DPAA',\n-\t'implementer': '0x41',\n-\t'part_number': '0xd08',\n-\t'flags': [\n-\t\t['RTE_MACHINE', '\"dpaa\"'],\n-\t\t['RTE_LIBRTE_DPAA2_USE_PHYS_IOVA', false],\n-\t\t['RTE_MAX_LCORE', 16],\n-\t\t['RTE_MAX_NUMA_NODES', 1]\n-\t],\n-\t'numa': false\n+    'description': 'NXP DPAA',\n+    'implementer': '0x41',\n+    'part_number': '0xd08',\n+    'flags': [\n+        ['RTE_MACHINE', '\"dpaa\"'],\n+        ['RTE_LIBRTE_DPAA2_USE_PHYS_IOVA', false],\n+        ['RTE_MAX_LCORE', 16],\n+        ['RTE_MAX_NUMA_NODES', 1]\n+    ],\n+    'numa': false\n }\n \n soc_emag = {\n-\t'description': 'Ampere eMAG',\n-\t'implementer': '0x50',\n-\t'part_number': '0x0'\n+    'description': 'Ampere eMAG',\n+    'implementer': '0x50',\n+    'part_number': '0x0'\n }\n \n soc_graviton2 = {\n-\t'description': 'AWS Graviton2',\n-\t'implementer': '0x41',\n-\t'part_number': '0xd0c',\n-\t'numa': false\n+    'description': 'AWS Graviton2',\n+    'implementer': '0x41',\n+    'part_number': '0xd0c',\n+    'numa': false\n }\n \n soc_n1sdp = {\n-\t'description': 'Arm Neoverse N1SDP',\n-\t'implementer': '0x41',\n-\t'part_number': '0xd0c',\n-\t'flags': [\n-\t\t['RTE_MAX_LCORE', 4]\n-\t],\n-\t'numa': false\n+    'description': 'Arm Neoverse N1SDP',\n+    'implementer': '0x41',\n+    'part_number': '0xd0c',\n+    'flags': [\n+        ['RTE_MAX_LCORE', 4]\n+    ],\n+    'numa': false\n }\n \n soc_n2 = {\n-\t'description': 'Arm Neoverse N2',\n-\t'implementer': '0x41',\n-\t'part_number': '0xd49',\n-\t'numa': false\n+    'description': 'Arm Neoverse N2',\n+    'implementer': '0x41',\n+    'part_number': '0xd49',\n+    'numa': false\n }\n \n soc_octeontx2 = {\n-\t'description': 'Marvell OCTEON TX2',\n-\t'implementer': '0x43',\n-\t'part_number': '0xb2',\n-\t'numa': false\n+    'description': 'Marvell OCTEON TX2',\n+    'implementer': '0x43',\n+    'part_number': '0xb2',\n+    'numa': false\n }\n \n soc_stingray = {\n-\t'description': 'Broadcom Stingray',\n-\t'implementer': '0x41',\n-\t'flags': [\n-\t\t['RTE_MAX_LCORE', 16],\n-\t\t['RTE_MAX_NUMA_NODES', 1]\n-\t],\n-\t'part_number': '0xd08',\n-\t'numa': false\n+    'description': 'Broadcom Stingray',\n+    'implementer': '0x41',\n+    'flags': [\n+        ['RTE_MAX_LCORE', 16],\n+        ['RTE_MAX_NUMA_NODES', 1]\n+    ],\n+    'part_number': '0xd08',\n+    'numa': false\n }\n \n soc_thunderx2 = {\n-\t'description': 'Marvell ThunderX2 T99',\n-\t'implementer': '0x43',\n-\t'part_number': '0xaf'\n+    'description': 'Marvell ThunderX2 T99',\n+    'implementer': '0x43',\n+    'part_number': '0xaf'\n }\n \n soc_thunderxt88 = {\n-\t'description': 'Marvell ThunderX T88',\n-\t'implementer': '0x43',\n-\t'part_number': '0xa1'\n+    'description': 'Marvell ThunderX T88',\n+    'implementer': '0x43',\n+    'part_number': '0xa1'\n }\n \n socs = {\n-\t'generic': soc_generic,\n-\t'armada': soc_armada,\n-\t'bluefield': soc_bluefield,\n-\t'dpaa': soc_dpaa,\n-\t'emag': soc_emag,\n-\t'graviton2': soc_graviton2,\n-\t'n1sdp': soc_n1sdp,\n-\t'n2': soc_n2,\n-\t'octeontx2': soc_octeontx2,\n-\t'stingray': soc_stingray,\n-\t'thunderx2': soc_thunderx2,\n-\t'thunderxt88': soc_thunderxt88\n+    'generic': soc_generic,\n+    'armada': soc_armada,\n+    'bluefield': soc_bluefield,\n+    'dpaa': soc_dpaa,\n+    'emag': soc_emag,\n+    'graviton2': soc_graviton2,\n+    'n1sdp': soc_n1sdp,\n+    'n2': soc_n2,\n+    'octeontx2': soc_octeontx2,\n+    'stingray': soc_stingray,\n+    'thunderx2': soc_thunderx2,\n+    'thunderxt88': soc_thunderxt88\n }\n \n dpdk_conf.set('RTE_ARCH_ARM', 1)\n dpdk_conf.set('RTE_FORCE_INTRINSICS', 1)\n \n if dpdk_conf.get('RTE_ARCH_32')\n-\t# armv7 build\n-\tdpdk_conf.set('RTE_CACHE_LINE_SIZE', 64)\n-\tdpdk_conf.set('RTE_ARCH_ARMv7', 1)\n-\t# the minimum architecture supported, armv7-a, needs the following,\n-\tmachine_args += '-mfpu=neon'\n+    # armv7 build\n+    dpdk_conf.set('RTE_CACHE_LINE_SIZE', 64)\n+    dpdk_conf.set('RTE_ARCH_ARMv7', 1)\n+    # the minimum architecture supported, armv7-a, needs the following,\n+    machine_args += '-mfpu=neon'\n else\n-\t# aarch64 build\n-\tsoc = get_option('platform')\n-\tsoc_config = {}\n-\tif not meson.is_cross_build()\n-\t\tif machine == 'generic'\n-\t\t\t# generic build\n-\t\t\tif soc != ''\n-\t\t\t\terror('Building for a particular platform is ' +\n-\t\t\t\t      'unsupported with generic build.')\n-\t\t\tendif\n-\t\t\timplementer_id = 'generic'\n-\t\t\tpart_number = 'generic'\n-\t\telif soc != ''\n-\t\t\tsoc_config = socs.get(soc, {'not_supported': true})\n-\t\telse\n-\t\t\t# native build\n-\t\t\t# The script returns ['Implementer', 'Variant', 'Architecture',\n-\t\t\t# 'Primary Part number', 'Revision']\n-\t\t\tdetect_vendor = find_program(join_paths(\n-\t\t\t\t\tmeson.current_source_dir(), 'armv8_machine.py'))\n-\t\t\tcmd = run_command(detect_vendor.path())\n-\t\t\tif cmd.returncode() == 0\n-\t\t\t\tcmd_output = cmd.stdout().to_lower().strip().split(' ')\n-\t\t\t\timplementer_id = cmd_output[0]\n-\t\t\t\tpart_number = cmd_output[3]\n-\t\t\telse\n-\t\t\t\terror('Error when getting Arm Implementer ID and part number.')\n-\t\t\tendif\n-\t\tendif\n-\telse\n-\t\t# cross build\n-\t\tsoc = meson.get_cross_property('platform', '')\n-\t\tif soc == ''\n-\t\t\terror('Arm SoC must be specified in the cross file.')\n-\t\tendif\n-\t\tsoc_config = socs.get(soc, {'not_supported': true})\n-\tendif\n-\n-\tsoc_flags = []\n-\tif soc_config.has_key('not_supported')\n-\t\terror('SoC @0@ not supported.'.format(soc))\n-\telif soc_config != {}\n-\t\timplementer_id = soc_config['implementer']\n-\t\timplementer_config = implementers[implementer_id]\n-\t\tpart_number = soc_config['part_number']\n-\t\tsoc_flags = soc_config.get('flags', [])\n-\t\tif not soc_config.get('numa', true)\n-\t\t\thas_libnuma = 0\n-\t\tendif\n-\n-\t\tdisable_drivers += ',' + soc_config.get('disable_drivers', '')\n-\t\tenable_drivers += ',' + soc_config.get('enable_drivers', '')\n-\tendif\n-\n-\tif implementers.has_key(implementer_id)\n-\t\timplementer_config = implementers[implementer_id]\n-\telse\n-\t\terror('Unsupported Arm implementer: @0@. '.format(implementer_id) +\n-\t\t      'Please add support for it or use the generic ' +\n-\t\t      '(-Dmachine=generic) build.')\n-\tendif\n-\n-\tmessage('Arm implementer: ' + implementer_config['description'])\n-\tmessage('Arm part number: ' + part_number)\n-\n-\tpart_number_config = implementer_config['part_number_config']\n-\tif part_number_config.has_key(part_number)\n-\t\t# use the specified part_number machine args if found\n-\t\tpart_number_config = part_number_config[part_number]\n-\telse\n-\t\t# unknown part number\n-\t\terror('Unsupported part number @0@ of implementer @1@. '\n-\t\t      .format(part_number, implementer_id) +\n-\t\t      'Please add support for it or use the generic ' +\n-\t\t      '(-Dmachine=generic) build.')\n-\tendif\n-\n-\t# add/overwrite flags in the proper order\n-\tdpdk_flags = flags_common + implementer_config['flags'] + part_number_config.get('flags', []) + soc_flags\n-\n-\t# apply supported machine args\n-\tmachine_args = [] # Clear previous machine args\n-\tforeach flag: part_number_config['machine_args']\n-\t\tif cc.has_argument(flag)\n-\t\t\tmachine_args += flag\n-\t\tendif\n-\tendforeach\n-\n-\t# apply flags\n-\tforeach flag: dpdk_flags\n-\t\tif flag.length() > 0\n-\t\t\tdpdk_conf.set(flag[0], flag[1])\n-\t\tendif\n-\tendforeach\n+    # aarch64 build\n+    soc = get_option('platform')\n+    soc_config = {}\n+    if not meson.is_cross_build()\n+        if machine == 'generic'\n+            # generic build\n+            if soc != ''\n+                error('Building for a particular platform is unsupported with generic build.')\n+            endif\n+            implementer_id = 'generic'\n+            part_number = 'generic'\n+        elif soc != ''\n+            soc_config = socs.get(soc, {'not_supported': true})\n+        else\n+            # native build\n+            # The script returns ['Implementer', 'Variant', 'Architecture',\n+            # 'Primary Part number', 'Revision']\n+            detect_vendor = find_program(join_paths(meson.current_source_dir(), 'armv8_machine.py'))\n+            cmd = run_command(detect_vendor.path())\n+            if cmd.returncode() == 0\n+                cmd_output = cmd.stdout().to_lower().strip().split(' ')\n+                implementer_id = cmd_output[0]\n+                part_number = cmd_output[3]\n+            else\n+                error('Error when getting Arm Implementer ID and part number.')\n+            endif\n+        endif\n+    else\n+        # cross build\n+        soc = meson.get_cross_property('platform', '')\n+        if soc == ''\n+            error('Arm SoC must be specified in the cross file.')\n+        endif\n+        soc_config = socs.get(soc, {'not_supported': true})\n+    endif\n+\n+    soc_flags = []\n+    if soc_config.has_key('not_supported')\n+        error('SoC @0@ not supported.'.format(soc))\n+    elif soc_config != {}\n+        implementer_id = soc_config['implementer']\n+        implementer_config = implementers[implementer_id]\n+        part_number = soc_config['part_number']\n+        soc_flags = soc_config.get('flags', [])\n+        if not soc_config.get('numa', true)\n+            has_libnuma = 0\n+        endif\n+\n+        disable_drivers += ',' + soc_config.get('disable_drivers', '')\n+        enable_drivers += ',' + soc_config.get('enable_drivers', '')\n+    endif\n+\n+    if implementers.has_key(implementer_id)\n+        implementer_config = implementers[implementer_id]\n+    else\n+        error('Unsupported Arm implementer: @0@. '.format(implementer_id) +\n+              'Please add support for it or use the generic ' +\n+              '(-Dmachine=generic) build.')\n+    endif\n+\n+    message('Arm implementer: ' + implementer_config['description'])\n+    message('Arm part number: ' + part_number)\n+\n+    part_number_config = implementer_config['part_number_config']\n+    if part_number_config.has_key(part_number)\n+        # use the specified part_number machine args if found\n+        part_number_config = part_number_config[part_number]\n+    else\n+        # unknown part number\n+        error('Unsupported part number @0@ of implementer @1@. '\n+              .format(part_number, implementer_id) +\n+              'Please add support for it or use the generic ' +\n+              '(-Dmachine=generic) build.')\n+    endif\n+\n+    # add/overwrite flags in the proper order\n+    dpdk_flags = flags_common + implementer_config['flags'] + part_number_config.get('flags', []) + soc_flags\n+\n+    # apply supported machine args\n+    machine_args = [] # Clear previous machine args\n+    foreach flag: part_number_config['machine_args']\n+        if cc.has_argument(flag)\n+            machine_args += flag\n+        endif\n+    endforeach\n+\n+    # apply flags\n+    foreach flag: dpdk_flags\n+        if flag.length() > 0\n+            dpdk_conf.set(flag[0], flag[1])\n+        endif\n+    endforeach\n endif\n message('Using machine args: @0@'.format(machine_args))\n \n if (cc.get_define('__ARM_NEON', args: machine_args) != '' or\n-    cc.get_define('__aarch64__', args: machine_args) != '')\n-\tcompile_time_cpuflags += ['RTE_CPUFLAG_NEON']\n+        cc.get_define('__aarch64__', args: machine_args) != '')\n+    compile_time_cpuflags += ['RTE_CPUFLAG_NEON']\n endif\n \n if cc.get_define('__ARM_FEATURE_CRC32', args: machine_args) != ''\n-\tcompile_time_cpuflags += ['RTE_CPUFLAG_CRC32']\n+    compile_time_cpuflags += ['RTE_CPUFLAG_CRC32']\n endif\n \n if cc.get_define('__ARM_FEATURE_CRYPTO', args: machine_args) != ''\n-\tcompile_time_cpuflags += ['RTE_CPUFLAG_AES', 'RTE_CPUFLAG_PMULL',\n-\t'RTE_CPUFLAG_SHA1', 'RTE_CPUFLAG_SHA2']\n+    compile_time_cpuflags += [\n+           'RTE_CPUFLAG_AES', 'RTE_CPUFLAG_PMULL',\n+           'RTE_CPUFLAG_SHA1', 'RTE_CPUFLAG_SHA2',\n+    ]\n endif\ndiff --git a/config/meson.build b/config/meson.build\nindex 6e6ef8c0e..9e49abc0f 100644\n--- a/config/meson.build\n+++ b/config/meson.build\n@@ -5,13 +5,13 @@\n supported_exec_envs = ['freebsd', 'linux', 'windows']\n exec_env = host_machine.system()\n if not supported_exec_envs.contains(exec_env)\n-\terror('unsupported system type \"@0@\"'.format(exec_env))\n+    error('unsupported system type \"@0@\"'.format(exec_env))\n endif\n \n # define a handy variable for checking which OS we have.\n # gives us \"is_windows\", \"is_freebsd\" and \"is_linux\"\n foreach env:supported_exec_envs\n-\tset_variable('is_' + env, exec_env == env)\n+    set_variable('is_' + env, exec_env == env)\n endforeach\n \n # MS linker requires special treatment.\n@@ -22,8 +22,7 @@ is_ms_linker = is_windows and (cc.get_id() == 'clang')\n # depending on the configuration options\n pver = meson.project_version().split('.')\n major_version = '@0@.@1@'.format(pver.get(0), pver.get(1))\n-abi_version = run_command(find_program('cat', 'more'),\n-\tabi_version_file).stdout().strip()\n+abi_version = run_command(find_program('cat', 'more'), abi_version_file).stdout().strip()\n \n # Libraries have the abi_version as the filename extension\n # and have the soname be all but the final part of the abi_version.\n@@ -35,21 +34,21 @@ so_version = abi_version.split('.')[0]\n dpdk_conf.set('RTE_VER_YEAR', pver.get(0).to_int())\n dpdk_conf.set('RTE_VER_MONTH', pver.get(1).to_int())\n if pver.get(2).contains('-rc')\n-\trc_ver = pver.get(2).split('-rc')\n-\tdpdk_conf.set('RTE_VER_MINOR', rc_ver.get(0).to_int())\n-\tdpdk_conf.set_quoted('RTE_VER_SUFFIX', '-rc')\n-\tdpdk_conf.set('RTE_VER_RELEASE', rc_ver.get(1).to_int())\n+    rc_ver = pver.get(2).split('-rc')\n+    dpdk_conf.set('RTE_VER_MINOR', rc_ver.get(0).to_int())\n+    dpdk_conf.set_quoted('RTE_VER_SUFFIX', '-rc')\n+    dpdk_conf.set('RTE_VER_RELEASE', rc_ver.get(1).to_int())\n else\n-\tdpdk_conf.set('RTE_VER_MINOR', pver.get(2).to_int())\n-\tdpdk_conf.set_quoted('RTE_VER_SUFFIX', '')\n+    dpdk_conf.set('RTE_VER_MINOR', pver.get(2).to_int())\n+    dpdk_conf.set_quoted('RTE_VER_SUFFIX', '')\n # for actual, non-rc releases, set the release value to 99 to ensure releases\n # have higher version numbers than their respective release candidates\n-\tdpdk_conf.set('RTE_VER_RELEASE', 99)\n+    dpdk_conf.set('RTE_VER_RELEASE', 99)\n endif\n \n pmd_subdir_opt = get_option('drivers_install_subdir')\n if pmd_subdir_opt.contains('<VERSION>')\n-\tpmd_subdir_opt = abi_version.join(pmd_subdir_opt.split('<VERSION>'))\n+    pmd_subdir_opt = abi_version.join(pmd_subdir_opt.split('<VERSION>'))\n endif\n driver_install_path = join_paths(get_option('libdir'), pmd_subdir_opt)\n eal_pmd_path = join_paths(get_option('prefix'), driver_install_path)\n@@ -58,9 +57,8 @@ eal_pmd_path = join_paths(get_option('prefix'), driver_install_path)\n # e.g. ixgbe depends on librte_bus_pci. This means that the bus drivers need\n # to be in the library path, so symlink the drivers from the main lib directory.\n if not is_windows\n-\tmeson.add_install_script('../buildtools/symlink-drivers-solibs.sh',\n-\t\t\tget_option('libdir'),\n-\t\t\tpmd_subdir_opt)\n+    meson.add_install_script('../buildtools/symlink-drivers-solibs.sh',\n+            get_option('libdir'), pmd_subdir_opt)\n endif\n \n # init disable/enable driver lists that will be populated in different places\n@@ -69,9 +67,9 @@ enable_drivers = ''\n \n # set the machine type and cflags for it\n if meson.is_cross_build()\n-\tmachine = host_machine.cpu()\n+    machine = host_machine.cpu()\n else\n-\tmachine = get_option('machine')\n+    machine = get_option('machine')\n endif\n \n # machine type 'generic' is special, it selects the per arch agreed common\n@@ -82,17 +80,17 @@ endif\n # This can be bumped up by the DPDK project, but it can never be an\n # invariant like 'native'\n if machine == 'default' or machine == 'generic'\n-\tif host_machine.cpu_family().startswith('x86')\n-\t\t# matches the old pre-meson build systems generic machine\n-\t\tmachine = 'corei7'\n-\telif host_machine.cpu_family().startswith('arm')\n-\t\tmachine = 'armv7-a'\n-\telif host_machine.cpu_family().startswith('aarch')\n-\t\t# arm64 manages generic config in config/arm/meson.build\n-\t\tmachine = 'generic'\n-\telif host_machine.cpu_family().startswith('ppc')\n-\t\tmachine = 'power8'\n-\tendif\n+    if host_machine.cpu_family().startswith('x86')\n+        # matches the old pre-meson build systems generic machine\n+        machine = 'corei7'\n+    elif host_machine.cpu_family().startswith('arm')\n+        machine = 'armv7-a'\n+    elif host_machine.cpu_family().startswith('aarch')\n+        # arm64 manages generic config in config/arm/meson.build\n+        machine = 'generic'\n+    elif host_machine.cpu_family().startswith('ppc')\n+        machine = 'power8'\n+    endif\n endif\n \n dpdk_conf.set('RTE_MACHINE', machine)\n@@ -100,10 +98,10 @@ machine_args = []\n \n # ppc64 does not support -march= at all, use -mcpu and -mtune for that\n if host_machine.cpu_family().startswith('ppc')\n-\tmachine_args += '-mcpu=' + machine\n-\tmachine_args += '-mtune=' + machine\n+    machine_args += '-mcpu=' + machine\n+    machine_args += '-mtune=' + machine\n else\n-\tmachine_args += '-march=' + machine\n+    machine_args += '-march=' + machine\n endif\n \n toolchain = cc.get_id()\n@@ -114,88 +112,88 @@ dpdk_conf.set('RTE_ARCH_64', cc.sizeof('void *') == 8)\n dpdk_conf.set('RTE_ARCH_32', cc.sizeof('void *') == 4)\n \n if not is_windows\n-\tadd_project_link_arguments('-Wl,--no-as-needed', language: 'c')\n+    add_project_link_arguments('-Wl,--no-as-needed', language: 'c')\n endif\n \n # use pthreads if available for the platform\n if not is_windows\n-\tadd_project_link_arguments('-pthread', language: 'c')\n-\tdpdk_extra_ldflags += '-pthread'\n+    add_project_link_arguments('-pthread', language: 'c')\n+    dpdk_extra_ldflags += '-pthread'\n endif\n \n # on some OS, maths functions are in a separate library\n if cc.find_library('m', required : false).found()\n-\t# some libs depend on maths lib\n-\tadd_project_link_arguments('-lm', language: 'c')\n-\tdpdk_extra_ldflags += '-lm'\n+    # some libs depend on maths lib\n+    add_project_link_arguments('-lm', language: 'c')\n+    dpdk_extra_ldflags += '-lm'\n endif\n \n if is_linux\n-\tlink_lib = 'dl'\n+    link_lib = 'dl'\n else\n-\tlink_lib = ''\n+    link_lib = ''\n endif\n \n # if link_lib is empty, do not add it to project properties\n if link_lib != ''\n-\tadd_project_link_arguments('-l' + link_lib, language: 'c')\n-\tdpdk_extra_ldflags += '-l' + link_lib\n+    add_project_link_arguments('-l' + link_lib, language: 'c')\n+    dpdk_extra_ldflags += '-l' + link_lib\n endif\n \n # check for libraries used in multiple places in DPDK\n has_libnuma = 0\n find_libnuma = true\n if meson.is_cross_build() and not meson.get_cross_property('numa', true)\n-\t# don't look for libnuma if explicitly disabled in cross build\n-\tfind_libnuma = false\n+    # don't look for libnuma if explicitly disabled in cross build\n+    find_libnuma = false\n endif\n if find_libnuma\n-\tnuma_dep = cc.find_library('numa', required: false)\n-\tif numa_dep.found() and cc.has_header('numaif.h')\n-\t\tdpdk_conf.set10('RTE_HAS_LIBNUMA', true)\n-\t\thas_libnuma = 1\n-\t\tadd_project_link_arguments('-lnuma', language: 'c')\n-\t\tdpdk_extra_ldflags += '-lnuma'\n-\tendif\n+    numa_dep = cc.find_library('numa', required: false)\n+    if numa_dep.found() and cc.has_header('numaif.h')\n+        dpdk_conf.set10('RTE_HAS_LIBNUMA', true)\n+        has_libnuma = 1\n+        add_project_link_arguments('-lnuma', language: 'c')\n+        dpdk_extra_ldflags += '-lnuma'\n+    endif\n endif\n \n has_libfdt = 0\n fdt_dep = cc.find_library('libfdt', required: false)\n if fdt_dep.found() and cc.has_header('fdt.h')\n-\tdpdk_conf.set10('RTE_HAS_LIBFDT', true)\n-\thas_libfdt = 1\n-\tadd_project_link_arguments('-lfdt', language: 'c')\n-\tdpdk_extra_ldflags += '-lfdt'\n+    dpdk_conf.set10('RTE_HAS_LIBFDT', true)\n+    has_libfdt = 1\n+    add_project_link_arguments('-lfdt', language: 'c')\n+    dpdk_extra_ldflags += '-lfdt'\n endif\n \n libexecinfo = cc.find_library('libexecinfo', required: false)\n if libexecinfo.found() and cc.has_header('execinfo.h')\n-\tadd_project_link_arguments('-lexecinfo', language: 'c')\n-\tdpdk_extra_ldflags += '-lexecinfo'\n+    add_project_link_arguments('-lexecinfo', language: 'c')\n+    dpdk_extra_ldflags += '-lexecinfo'\n endif\n \n # check for libbsd\n libbsd = dependency('libbsd', required: false, method: 'pkg-config')\n if libbsd.found()\n-\tdpdk_conf.set('RTE_USE_LIBBSD', 1)\n+    dpdk_conf.set('RTE_USE_LIBBSD', 1)\n endif\n \n # check for pcap\n pcap_dep = dependency('libpcap', required: false, method: 'pkg-config')\n if not pcap_dep.found()\n-\t# pcap got a pkg-config file only in 1.9.0\n-\tpcap_dep = cc.find_library('pcap', required: false)\n+    # pcap got a pkg-config file only in 1.9.0\n+    pcap_dep = cc.find_library('pcap', required: false)\n endif\n if pcap_dep.found() and cc.has_header('pcap.h', dependencies: pcap_dep)\n-\tdpdk_conf.set('RTE_PORT_PCAP', 1)\n-\tdpdk_extra_ldflags += '-lpcap'\n+    dpdk_conf.set('RTE_PORT_PCAP', 1)\n+    dpdk_extra_ldflags += '-lpcap'\n endif\n \n # for clang 32-bit compiles we need libatomic for 64-bit atomic ops\n if cc.get_id() == 'clang' and dpdk_conf.get('RTE_ARCH_64') == false\n-\tatomic_dep = cc.find_library('atomic', required: true)\n-\tadd_project_link_arguments('-latomic', language: 'c')\n-\tdpdk_extra_ldflags += '-latomic'\n+    atomic_dep = cc.find_library('atomic', required: true)\n+    add_project_link_arguments('-latomic', language: 'c')\n+    dpdk_extra_ldflags += '-latomic'\n endif\n \n # add -include rte_config to cflags\n@@ -203,48 +201,48 @@ add_project_arguments('-include', 'rte_config.h', language: 'c')\n \n # enable extra warnings and disable any unwanted warnings\n warning_flags = [\n-\t# -Wall is added by meson by default, so add -Wextra only\n-\t'-Wextra',\n-\n-\t# additional warnings in alphabetical order\n-\t'-Wcast-qual',\n-\t'-Wdeprecated',\n-\t'-Wformat',\n-\t'-Wformat-nonliteral',\n-\t'-Wformat-security',\n-\t'-Wmissing-declarations',\n-\t'-Wmissing-prototypes',\n-\t'-Wnested-externs',\n-\t'-Wold-style-definition',\n-\t'-Wpointer-arith',\n-\t'-Wsign-compare',\n-\t'-Wstrict-prototypes',\n-\t'-Wundef',\n-\t'-Wwrite-strings',\n-\n-\t# globally disabled warnings\n-\t'-Wno-address-of-packed-member',\n-\t'-Wno-packed-not-aligned',\n-\t'-Wno-missing-field-initializers'\n+        # -Wall is added by meson by default, so add -Wextra only\n+        '-Wextra',\n+\n+        # additional warnings in alphabetical order\n+        '-Wcast-qual',\n+        '-Wdeprecated',\n+        '-Wformat',\n+        '-Wformat-nonliteral',\n+        '-Wformat-security',\n+        '-Wmissing-declarations',\n+        '-Wmissing-prototypes',\n+        '-Wnested-externs',\n+        '-Wold-style-definition',\n+        '-Wpointer-arith',\n+        '-Wsign-compare',\n+        '-Wstrict-prototypes',\n+        '-Wundef',\n+        '-Wwrite-strings',\n+\n+        # globally disabled warnings\n+        '-Wno-address-of-packed-member',\n+        '-Wno-packed-not-aligned',\n+        '-Wno-missing-field-initializers',\n ]\n if cc.get_id() == 'gcc' and cc.version().version_compare('>=10.0')\n # FIXME: Bugzilla 396\n-\twarning_flags += '-Wno-zero-length-bounds'\n+    warning_flags += '-Wno-zero-length-bounds'\n endif\n if not dpdk_conf.get('RTE_ARCH_64')\n # for 32-bit, don't warn about casting a 32-bit pointer to 64-bit int - it's fine!!\n-\twarning_flags += '-Wno-pointer-to-int-cast'\n+    warning_flags += '-Wno-pointer-to-int-cast'\n endif\n if cc.get_id() == 'intel'\n-\twarning_ids = [181, 188, 2203, 2279, 2557, 3179, 3656]\n-\tforeach i:warning_ids\n-\t\twarning_flags += '-diag-disable=@0@'.format(i)\n-\tendforeach\n+    warning_ids = [181, 188, 2203, 2279, 2557, 3179, 3656]\n+    foreach i:warning_ids\n+        warning_flags += '-diag-disable=@0@'.format(i)\n+    endforeach\n endif\n foreach arg: warning_flags\n-\tif cc.has_argument(arg)\n-\t\tadd_project_arguments(arg, language: 'c')\n-\tendif\n+    if cc.has_argument(arg)\n+        add_project_arguments(arg, language: 'c')\n+    endif\n endforeach\n \n # set other values pulled from the build options\n@@ -258,9 +256,9 @@ dpdk_conf.set('RTE_MAX_VFIO_GROUPS', 64)\n dpdk_conf.set('RTE_DRIVER_MEMPOOL_BUCKET_SIZE_KB', 64)\n dpdk_conf.set('RTE_LIBRTE_DPAA2_USE_PHYS_IOVA', true)\n if dpdk_conf.get('RTE_ARCH_64')\n-\tdpdk_conf.set('RTE_MAX_MEM_MB', 524288)\n+    dpdk_conf.set('RTE_MAX_MEM_MB', 524288)\n else # for 32-bit we need smaller reserved memory areas\n-\tdpdk_conf.set('RTE_MAX_MEM_MB', 2048)\n+    dpdk_conf.set('RTE_MAX_MEM_MB', 2048)\n endif\n \n \n@@ -270,24 +268,24 @@ dpdk_conf.set('RTE_COMPILE_TIME_CPUFLAGS', ','.join(compile_time_cpuflags))\n \n # apply cross-specific options\n if meson.is_cross_build()\n-\t# configure RTE_MAX_LCORE and RTE_MAX_NUMA_NODES from cross file\n-\tcross_max_lcores = meson.get_cross_property('max_lcores', 0)\n-\tif cross_max_lcores != 0\n-\t\tmessage('Setting RTE_MAX_LCORE from cross file')\n-\t\tdpdk_conf.set('RTE_MAX_LCORE', cross_max_lcores)\n-\tendif\n-\tcross_max_numa_nodes = meson.get_cross_property('max_numa_nodes', 0)\n-\tif cross_max_numa_nodes != 0\n-\t\tmessage('Setting RTE_MAX_NUMA_NODES from cross file')\n-\t\tdpdk_conf.set('RTE_MAX_NUMA_NODES', cross_max_numa_nodes)\n-\tendif\n+    # configure RTE_MAX_LCORE and RTE_MAX_NUMA_NODES from cross file\n+    cross_max_lcores = meson.get_cross_property('max_lcores', 0)\n+    if cross_max_lcores != 0\n+        message('Setting RTE_MAX_LCORE from cross file')\n+        dpdk_conf.set('RTE_MAX_LCORE', cross_max_lcores)\n+    endif\n+    cross_max_numa_nodes = meson.get_cross_property('max_numa_nodes', 0)\n+    if cross_max_numa_nodes != 0\n+        message('Setting RTE_MAX_NUMA_NODES from cross file')\n+        dpdk_conf.set('RTE_MAX_NUMA_NODES', cross_max_numa_nodes)\n+    endif\n endif\n \n # set the install path for the drivers\n dpdk_conf.set_quoted('RTE_EAL_PMD_PATH', eal_pmd_path)\n \n install_headers(['rte_config.h'],\n-\t\tsubdir: get_option('include_subdir_arch'))\n+        subdir: get_option('include_subdir_arch'))\n \n # enable VFIO only if it is linux OS\n dpdk_conf.set('RTE_EAL_VFIO', is_linux)\n@@ -297,53 +295,53 @@ add_project_arguments('-D_GNU_SOURCE', language: 'c')\n \n # specify -D__BSD_VISIBLE for FreeBSD\n if is_freebsd\n-\tadd_project_arguments('-D__BSD_VISIBLE', language: 'c')\n+    add_project_arguments('-D__BSD_VISIBLE', language: 'c')\n endif\n \n if is_windows\n-\t# VirtualAlloc2() is available since Windows 10 / Server 2016.\n-\tadd_project_arguments('-D_WIN32_WINNT=0x0A00', language: 'c')\n+    # VirtualAlloc2() is available since Windows 10 / Server 2016.\n+    add_project_arguments('-D_WIN32_WINNT=0x0A00', language: 'c')\n \n-\t# Use MinGW-w64 stdio, because DPDK assumes ANSI-compliant formatting.\n-\tif cc.get_id() == 'gcc'\n-\t\tadd_project_arguments('-D__USE_MINGW_ANSI_STDIO', language: 'c')\n-\tendif\n+    # Use MinGW-w64 stdio, because DPDK assumes ANSI-compliant formatting.\n+    if cc.get_id() == 'gcc'\n+        add_project_arguments('-D__USE_MINGW_ANSI_STDIO', language: 'c')\n+    endif\n \n-\t# Disable secure CRT deprecated warnings for clang\n-\tif cc.get_id() == 'clang'\n-\t\tadd_project_arguments('-D_CRT_SECURE_NO_WARNINGS', language: 'c')\n-\tendif\n+    # Disable secure CRT deprecated warnings for clang\n+    if cc.get_id() == 'clang'\n+        add_project_arguments('-D_CRT_SECURE_NO_WARNINGS', language: 'c')\n+    endif\n \n-\tadd_project_link_arguments('-lws2_32', language: 'c')\n+    add_project_link_arguments('-lws2_32', language: 'c')\n \n-\t# Contrary to docs, VirtualAlloc2() is exported by mincore.lib\n-\t# in Windows SDK, while MinGW exports it by advapi32.a.\n-\tif is_ms_linker\n-\t\tadd_project_link_arguments('-lmincore', language: 'c')\n-\tendif\n+    # Contrary to docs, VirtualAlloc2() is exported by mincore.lib\n+    # in Windows SDK, while MinGW exports it by advapi32.a.\n+    if is_ms_linker\n+        add_project_link_arguments('-lmincore', language: 'c')\n+    endif\n \n-\tadd_project_link_arguments('-ladvapi32', '-lsetupapi', language: 'c')\n-\tadd_project_link_arguments('-ldbghelp', language: 'c')\n+    add_project_link_arguments('-ladvapi32', '-lsetupapi', language: 'c')\n+    add_project_link_arguments('-ldbghelp', language: 'c')\n endif\n \n if get_option('b_lto')\n-\tif cc.has_argument('-ffat-lto-objects')\n-\t\tadd_project_arguments('-ffat-lto-objects', language: 'c')\n-\telse\n-\t\terror('compiler does not support fat LTO objects - please turn LTO off')\n-\tendif\n-\t# workaround for gcc bug 81440\n-\tif cc.get_id() == 'gcc' and cc.version().version_compare('<8.0')\n-\t\tadd_project_arguments('-Wno-lto-type-mismatch', language: 'c')\n-\t\tadd_project_link_arguments('-Wno-lto-type-mismatch', language: 'c')\n-\tendif\n+    if cc.has_argument('-ffat-lto-objects')\n+        add_project_arguments('-ffat-lto-objects', language: 'c')\n+    else\n+        error('compiler does not support fat LTO objects - please turn LTO off')\n+    endif\n+    # workaround for gcc bug 81440\n+    if cc.get_id() == 'gcc' and cc.version().version_compare('<8.0')\n+        add_project_arguments('-Wno-lto-type-mismatch', language: 'c')\n+        add_project_link_arguments('-Wno-lto-type-mismatch', language: 'c')\n+    endif\n endif\n \n if get_option('default_library') == 'both'\n-\terror( '''\n-    Unsupported value \"both\" for \"default_library\" option.\n+    error( '''\n+ Unsupported value \"both\" for \"default_library\" option.\n \n-    NOTE: DPDK always builds both shared and static libraries.  Please set\n-    \"default_library\" to either \"static\" or \"shared\" to select default linkage\n-    for apps and any examples.''')\n+ NOTE: DPDK always builds both shared and static libraries.  Please set\n+ \"default_library\" to either \"static\" or \"shared\" to select default linkage\n+ for apps and any examples.''')\n endif\ndiff --git a/config/ppc/meson.build b/config/ppc/meson.build\nindex 0d8da87e6..1c196b8db 100644\n--- a/config/ppc/meson.build\n+++ b/config/ppc/meson.build\n@@ -2,7 +2,7 @@\n # Copyright(c) 2018 Luca Boccassi <bluca@debian.org>\n \n if not dpdk_conf.get('RTE_ARCH_64')\n-\terror('Only 64-bit compiles are supported for this platform type')\n+    error('Only 64-bit compiles are supported for this platform type')\n endif\n dpdk_conf.set('RTE_ARCH', 'ppc_64')\n dpdk_conf.set('RTE_ARCH_PPC_64', 1)\n@@ -12,9 +12,9 @@ dpdk_conf.set('RTE_ARCH_PPC_64', 1)\n # is used, resulting in a build failure.\n power9_supported = cc.has_argument('-mcpu=power9')\n if not power9_supported\n-\tmachine = 'power8'\n-\tmachine_args = ['-mcpu=power8', '-mtune=power8']\n-\tdpdk_conf.set('RTE_MACHINE','power8')\n+    machine = 'power8'\n+    machine_args = ['-mcpu=power8', '-mtune=power8']\n+    dpdk_conf.set('RTE_MACHINE','power8')\n endif\n \n # overrides specific to ppc64\ndiff --git a/config/x86/meson.build b/config/x86/meson.build\nindex 31bfa63b1..34b116481 100644\n--- a/config/x86/meson.build\n+++ b/config/x86/meson.build\n@@ -3,57 +3,57 @@\n \n # get binutils version for the workaround of Bug 97\n if not is_windows\n-\tbinutils_ok = run_command(binutils_avx512_check)\n-\tif binutils_ok.returncode() != 0 and cc.has_argument('-mno-avx512f')\n-\t\tmachine_args += '-mno-avx512f'\n-\t\twarning('Binutils error with AVX512 assembly, disabling AVX512 support')\n-\tendif\n+    binutils_ok = run_command(binutils_avx512_check)\n+    if binutils_ok.returncode() != 0 and cc.has_argument('-mno-avx512f')\n+        machine_args += '-mno-avx512f'\n+        warning('Binutils error with AVX512 assembly, disabling AVX512 support')\n+    endif\n endif\n \n # we require SSE4.2 for DPDK\n if cc.get_define('__SSE4_2__', args: machine_args) == ''\n-\tmessage('SSE 4.2 not enabled by default, explicitly enabling')\n-\tmachine_args += '-msse4'\n+    message('SSE 4.2 not enabled by default, explicitly enabling')\n+    machine_args += '-msse4'\n endif\n \n base_flags = ['SSE', 'SSE2', 'SSE3','SSSE3', 'SSE4_1', 'SSE4_2']\n foreach f:base_flags\n-\tcompile_time_cpuflags += ['RTE_CPUFLAG_' + f]\n+    compile_time_cpuflags += ['RTE_CPUFLAG_' + f]\n endforeach\n \n optional_flags = [\n-\t'AES',\n-\t'AVX',\n-\t'AVX2',\n-\t'AVX512BW',\n-\t'AVX512CD',\n-\t'AVX512DQ',\n-\t'AVX512F',\n-\t'AVX512VL',\n-\t'PCLMUL',\n-\t'RDRND',\n-\t'RDSEED',\n-\t'VPCLMULQDQ',\n+    'AES',\n+    'AVX',\n+    'AVX2',\n+    'AVX512BW',\n+    'AVX512CD',\n+    'AVX512DQ',\n+    'AVX512F',\n+    'AVX512VL',\n+    'PCLMUL',\n+    'RDRND',\n+    'RDSEED',\n+    'VPCLMULQDQ',\n ]\n foreach f:optional_flags\n-\tif cc.get_define('__@0@__'.format(f), args: machine_args) == '1'\n-\t\tif f == 'PCLMUL' # special case flags with different defines\n-\t\t\tf = 'PCLMULQDQ'\n-\t\telif f == 'RDRND'\n-\t\t\tf = 'RDRAND'\n-\t\tendif\n-\t\tcompile_time_cpuflags += ['RTE_CPUFLAG_' + f]\n-\tendif\n+    if cc.get_define('__@0@__'.format(f), args: machine_args) == '1'\n+        if f == 'PCLMUL' # special case flags with different defines\n+            f = 'PCLMULQDQ'\n+        elif f == 'RDRND'\n+            f = 'RDRAND'\n+        endif\n+        compile_time_cpuflags += ['RTE_CPUFLAG_' + f]\n+    endif\n endforeach\n \n \n dpdk_conf.set('RTE_ARCH_X86', 1)\n if dpdk_conf.get('RTE_ARCH_64')\n-\tdpdk_conf.set('RTE_ARCH_X86_64', 1)\n-\tdpdk_conf.set('RTE_ARCH', 'x86_64')\n+    dpdk_conf.set('RTE_ARCH_X86_64', 1)\n+    dpdk_conf.set('RTE_ARCH', 'x86_64')\n else\n-\tdpdk_conf.set('RTE_ARCH_I686', 1)\n-\tdpdk_conf.set('RTE_ARCH', 'i686')\n+    dpdk_conf.set('RTE_ARCH_I686', 1)\n+    dpdk_conf.set('RTE_ARCH', 'i686')\n endif\n \n dpdk_conf.set('RTE_CACHE_LINE_SIZE', 64)\ndiff --git a/doc/api/meson.build b/doc/api/meson.build\nindex dfdefdc92..d34c38369 100644\n--- a/doc/api/meson.build\n+++ b/doc/api/meson.build\n@@ -23,12 +23,12 @@ htmldir = join_paths(get_option('datadir'), 'doc', 'dpdk')\n # false it would be impossible to install the docs.\n # So use a configure option for now.\n example = custom_target('examples.dox',\n-\toutput: 'examples.dox',\n-\tcommand: [generate_examples, join_paths(meson.source_root(), 'examples'), '@OUTPUT@'],\n-\tdepfile: 'examples.dox.d',\n-\tinstall: get_option('enable_docs'),\n-\tinstall_dir: htmldir,\n-\tbuild_by_default: get_option('enable_docs'))\n+        output: 'examples.dox',\n+        command: [generate_examples, join_paths(meson.source_root(), 'examples'), '@OUTPUT@'],\n+        depfile: 'examples.dox.d',\n+        install: get_option('enable_docs'),\n+        install_dir: htmldir,\n+        build_by_default: get_option('enable_docs'))\n \n cdata = configuration_data()\n cdata.set('VERSION', meson.project_version())\n@@ -39,23 +39,23 @@ cdata.set('TOPDIR', meson.source_root())\n cdata.set('STRIP_FROM_PATH', meson.source_root())\n cdata.set('WARN_AS_ERROR', 'NO')\n if get_option('werror')\n-\tcdata.set('WARN_AS_ERROR', 'YES')\n+    cdata.set('WARN_AS_ERROR', 'YES')\n endif\n \n doxy_conf = configure_file(input: 'doxy-api.conf.in',\n-\toutput: 'doxy-api.conf',\n-\tconfiguration: cdata)\n+        output: 'doxy-api.conf',\n+        configuration: cdata)\n \n doxy_build = custom_target('doxygen',\n-\tdepends: example,\n-\tdepend_files: 'doxy-api-index.md',\n-\tinput: doxy_conf,\n-\toutput: 'html',\n-\tdepfile: 'html.d',\n-\tcommand: [generate_doxygen, '@INPUT@', '@OUTPUT@', generate_css],\n-\tinstall: get_option('enable_docs'),\n-\tinstall_dir: htmldir,\n-\tbuild_by_default: get_option('enable_docs'))\n+        depends: example,\n+        depend_files: 'doxy-api-index.md',\n+        input: doxy_conf,\n+        output: 'html',\n+        depfile: 'html.d',\n+        command: [generate_doxygen, '@INPUT@', '@OUTPUT@', generate_css],\n+        install: get_option('enable_docs'),\n+        install_dir: htmldir,\n+        build_by_default: get_option('enable_docs'))\n \n doc_targets += doxy_build\n doc_target_names += 'Doxygen_API'\ndiff --git a/doc/guides/meson.build b/doc/guides/meson.build\nindex 9c35efb5b..03b8bee56 100644\n--- a/doc/guides/meson.build\n+++ b/doc/guides/meson.build\n@@ -4,28 +4,27 @@\n sphinx = find_program('sphinx-build', required: get_option('enable_docs'))\n \n if not sphinx.found()\n-\tsubdir_done()\n+    subdir_done()\n endif\n \n extra_sphinx_args = []\n if get_option('werror')\n-\textra_sphinx_args += '-W'\n+    extra_sphinx_args += '-W'\n endif\n \n htmldir = join_paths(get_option('datadir'), 'doc', 'dpdk')\n html_guides = custom_target('html_guides',\n-\tinput: files('index.rst'),\n-\toutput: 'html',\n-\tcommand: [sphinx_wrapper, sphinx, meson.project_version(),\n-\t\tmeson.current_source_dir(), meson.current_build_dir(),\n-\t\textra_sphinx_args],\n-\tdepfile: '.html.d',\n-\tbuild_by_default: get_option('enable_docs'),\n-\tinstall: get_option('enable_docs'),\n-\tinstall_dir: htmldir)\n+        input: files('index.rst'),\n+        output: 'html',\n+        command: [sphinx_wrapper, sphinx, meson.project_version(),\n+            meson.current_source_dir(), meson.current_build_dir(),\n+            extra_sphinx_args],\n+        depfile: '.html.d',\n+        build_by_default: get_option('enable_docs'),\n+        install: get_option('enable_docs'),\n+        install_dir: htmldir)\n \n-install_data(files('custom.css'),\n-\t\t\tinstall_dir: join_paths(htmldir,'_static', 'css'))\n+install_data(files('custom.css'), install_dir: join_paths(htmldir,'_static', 'css'))\n \n doc_targets += html_guides\n doc_target_names += 'HTML_Guides'\ndiff --git a/doc/meson.build b/doc/meson.build\nindex c5410d85d..959606b96 100644\n--- a/doc/meson.build\n+++ b/doc/meson.build\n@@ -7,9 +7,9 @@ subdir('api')\n subdir('guides')\n \n if doc_targets.length() == 0\n-\tmessage = 'No docs targets found'\n+    message = 'No docs targets found'\n else\n-\tmessage = 'Building docs:'\n+    message = 'Building docs:'\n endif\n run_target('doc', command: ['echo', message, doc_target_names],\n-\tdepends: doc_targets)\n+    depends: doc_targets)\ndiff --git a/kernel/freebsd/meson.build b/kernel/freebsd/meson.build\nindex dc156a43f..bf5aa20a5 100644\n--- a/kernel/freebsd/meson.build\n+++ b/kernel/freebsd/meson.build\n@@ -10,26 +10,26 @@ kmods = ['contigmem', 'nic_uio']\n # files from the individual meson.build files, and then use a custom\n # target to call make, passing in the values as env parameters.\n kmod_cflags = ['-I' + meson.build_root(),\n-\t\t'-I' + join_paths(meson.source_root(), 'config'),\n-\t\t'-include rte_config.h']\n+        '-I' + join_paths(meson.source_root(), 'config'),\n+        '-include rte_config.h']\n \n # to avoid warnings due to race conditions with creating the dev_if.h, etc.\n # files, serialize the kernel module builds. Each module will depend on\n # previous ones\n built_kmods = []\n foreach k:kmods\n-\tsubdir(k)\n-\tbuilt_kmods += custom_target(k,\n-\t\tinput: [files('BSDmakefile.meson'), sources],\n-\t\toutput: k + '.ko',\n-\t\tcommand: ['make', '-f', '@INPUT0@',\n-\t\t\t'KMOD_OBJDIR=@OUTDIR@',\n-\t\t\t'KMOD_SRC=@INPUT1@',\n-\t\t\t'KMOD=' + k,\n-\t\t\t'KMOD_CFLAGS=' + ' '.join(kmod_cflags),\n-\t\t\t'CC=clang'],\n-\t\tdepends: built_kmods, # make each module depend on prev\n-\t\tbuild_by_default: get_option('enable_kmods'),\n-\t\tinstall: get_option('enable_kmods'),\n-\t\tinstall_dir: '/boot/modules/')\n+    subdir(k)\n+    built_kmods += custom_target(k,\n+            input: [files('BSDmakefile.meson'), sources],\n+            output: k + '.ko',\n+            command: ['make', '-f', '@INPUT0@',\n+                'KMOD_OBJDIR=@OUTDIR@',\n+                'KMOD_SRC=@INPUT1@',\n+                'KMOD=' + k,\n+                'KMOD_CFLAGS=' + ' '.join(kmod_cflags),\n+                'CC=clang'],\n+            depends: built_kmods, # make each module depend on prev\n+            build_by_default: get_option('enable_kmods'),\n+            install: get_option('enable_kmods'),\n+            install_dir: '/boot/modules/')\n endforeach\ndiff --git a/kernel/linux/kni/meson.build b/kernel/linux/kni/meson.build\nindex 46b71c741..f43860bcb 100644\n--- a/kernel/linux/kni/meson.build\n+++ b/kernel/linux/kni/meson.build\n@@ -2,27 +2,28 @@\n # Copyright(c) 2018 Luca Boccassi <bluca@debian.org>\n \n kni_mkfile = custom_target('rte_kni_makefile',\n-\toutput: 'Makefile',\n-\tcommand: ['touch', '@OUTPUT@'])\n+        output: 'Makefile',\n+        command: ['touch', '@OUTPUT@'])\n \n kni_sources = files(\n-\t'kni_misc.c',\n-\t'kni_net.c',\n-\t'Kbuild')\n+        'kni_misc.c',\n+        'kni_net.c',\n+        'Kbuild',\n+)\n \n custom_target('rte_kni',\n-\tinput: kni_sources,\n-\toutput: 'rte_kni.ko',\n-\tcommand: ['make', '-j4', '-C', kernel_build_dir,\n-\t\t'M=' + meson.current_build_dir(),\n-\t\t'src=' + meson.current_source_dir(),\n-\t\t'MODULE_CFLAGS=-include ' + meson.source_root() + '/config/rte_config.h' +\n-\t\t' -I' + meson.source_root() + '/lib/librte_eal/include' +\n-\t\t' -I' + meson.source_root() + '/lib/librte_kni' +\n-\t\t' -I' + meson.build_root() +\n-\t\t' -I' + meson.current_source_dir(),\n-\t\t'modules'] + cross_args,\n-\tdepends: kni_mkfile,\n-\tinstall: install,\n-\tinstall_dir: kernel_install_dir,\n-\tbuild_by_default: get_option('enable_kmods'))\n+        input: kni_sources,\n+        output: 'rte_kni.ko',\n+        command: ['make', '-j4', '-C', kernel_build_dir,\n+            'M=' + meson.current_build_dir(),\n+            'src=' + meson.current_source_dir(),\n+            'MODULE_CFLAGS=-include ' + meson.source_root() + '/config/rte_config.h' +\n+            ' -I' + meson.source_root() + '/lib/librte_eal/include' +\n+            ' -I' + meson.source_root() + '/lib/librte_kni' +\n+            ' -I' + meson.build_root() +\n+            ' -I' + meson.current_source_dir(),\n+            'modules'] + cross_args,\n+        depends: kni_mkfile,\n+        install: install,\n+        install_dir: kernel_install_dir,\n+        build_by_default: get_option('enable_kmods'))\ndiff --git a/kernel/linux/meson.build b/kernel/linux/meson.build\nindex b43470679..3a00ea954 100644\n--- a/kernel/linux/meson.build\n+++ b/kernel/linux/meson.build\n@@ -9,84 +9,83 @@ install = not meson.is_cross_build()\n cross_args = []\n \n if not meson.is_cross_build()\n-\t# native build\n-\tkernel_version = run_command('uname', '-r').stdout().strip()\n-\tkernel_install_dir = '/lib/modules/' + kernel_version + '/extra/dpdk'\n-\tif kernel_build_dir == ''\n-\t\t# use default path for native builds\n-\t\tkernel_build_dir = '/lib/modules/' + kernel_version + '/build'\n-\tendif\n+    # native build\n+    kernel_version = run_command('uname', '-r').stdout().strip()\n+    kernel_install_dir = '/lib/modules/' + kernel_version + '/extra/dpdk'\n+    if kernel_build_dir == ''\n+        # use default path for native builds\n+        kernel_build_dir = '/lib/modules/' + kernel_version + '/build'\n+    endif\n \n-\t# test running make in kernel directory, using \"make kernelversion\"\n-\tmake_returncode = run_command('make', '-sC', kernel_build_dir,\n-\t\t\t'kernelversion').returncode()\n-\tif make_returncode != 0\n-\t\t# backward compatibility:\n-\t\t# the headers could still be in the 'build' subdir\n-\t\tif not kernel_build_dir.endswith('build') and not kernel_build_dir.endswith('build/')\n-\t\t\tkernel_build_dir = join_paths(kernel_build_dir, 'build')\n-\t\t\tmake_returncode = run_command('make', '-sC', kernel_build_dir,\n-\t\t\t\t\t'kernelversion').returncode()\n-\t\tendif\n-\tendif\n+    # test running make in kernel directory, using \"make kernelversion\"\n+    make_returncode = run_command('make', '-sC', kernel_build_dir,\n+            'kernelversion').returncode()\n+    if make_returncode != 0\n+        # backward compatibility:\n+        # the headers could still be in the 'build' subdir\n+        if not kernel_build_dir.endswith('build') and not kernel_build_dir.endswith('build/')\n+            kernel_build_dir = join_paths(kernel_build_dir, 'build')\n+            make_returncode = run_command('make', '-sC', kernel_build_dir,\n+                    'kernelversion').returncode()\n+        endif\n+    endif\n \n-\tif make_returncode != 0\n-\t\terror('Cannot compile kernel modules as requested - are kernel headers installed?')\n-\tendif\n+    if make_returncode != 0\n+        error('Cannot compile kernel modules as requested - are kernel headers installed?')\n+    endif\n \n-\t# DO ACTUAL MODULE BUILDING\n-\tforeach d:subdirs\n-\t\tsubdir(d)\n-\tendforeach\n+    # DO ACTUAL MODULE BUILDING\n+    foreach d:subdirs\n+        subdir(d)\n+    endforeach\n \n-\tsubdir_done()\n+    subdir_done()\n endif\n \n # cross build\n # if we are cross-compiling we need kernel_build_dir specified\n if kernel_build_dir == ''\n-\terror('Need \"kernel_dir\" option for kmod compilation when cross-compiling')\n+    error('Need \"kernel_dir\" option for kmod compilation when cross-compiling')\n endif\n cross_compiler = find_program('c').path()\n if cross_compiler.endswith('gcc')\n-\tcross_prefix = run_command([py3, '-c', 'print(\"' + cross_compiler + '\"[:-3])']).stdout().strip()\n+    cross_prefix = run_command([py3, '-c', 'print(\"' + cross_compiler + '\"[:-3])']).stdout().strip()\n elif cross_compiler.endswith('clang')\n-\tcross_prefix = ''\n-\tfound_target = false\n-\t# search for '-target' and use the arg that follows\n-\t# (i.e. the value of '-target') as cross_prefix\n-\tforeach cross_c_arg : meson.get_cross_property('c_args')\n-\t\tif found_target and cross_prefix == ''\n-\t\t\tcross_prefix = cross_c_arg\n-\t\tendif\n-\t\tif cross_c_arg == '-target'\n-\t\t\tfound_target = true\n-\t\tendif\n-\tendforeach\n-\tif cross_prefix == ''\n-\t\terror('Didn\\'t find -target and its value in' +\n-\t\t      ' c_args in input cross-file.')\n-\tendif\n-\tlinker = 'lld'\n-\tforeach cross_c_link_arg : meson.get_cross_property('c_link_args')\n-\t\tif cross_c_link_arg.startswith('-fuse-ld')\n-\t\t\tlinker = cross_c_link_arg.split('=')[1]\n-\t\tendif\n-\tendforeach\n-\tcross_args += ['CC=@0@'.format(cross_compiler), 'LD=ld.@0@'.format(linker)]\n+    cross_prefix = ''\n+    found_target = false\n+    # search for '-target' and use the arg that follows\n+    # (i.e. the value of '-target') as cross_prefix\n+    foreach cross_c_arg : meson.get_cross_property('c_args')\n+        if found_target and cross_prefix == ''\n+            cross_prefix = cross_c_arg\n+        endif\n+        if cross_c_arg == '-target'\n+            found_target = true\n+        endif\n+    endforeach\n+    if cross_prefix == ''\n+        error('Did not find -target and its value in c_args in input cross-file.')\n+    endif\n+    linker = 'lld'\n+    foreach cross_c_link_arg : meson.get_cross_property('c_link_args')\n+        if cross_c_link_arg.startswith('-fuse-ld')\n+            linker = cross_c_link_arg.split('=')[1]\n+        endif\n+    endforeach\n+    cross_args += ['CC=@0@'.format(cross_compiler), 'LD=ld.@0@'.format(linker)]\n else\n-\terror('Unsupported cross compiler: @0@'.format(cross_compiler))\n+    error('Unsupported cross compiler: @0@'.format(cross_compiler))\n endif\n \n cross_arch = host_machine.cpu_family()\n if host_machine.cpu_family() == 'aarch64'\n-\tcross_arch = 'arm64'\n+    cross_arch = 'arm64'\n endif\n \n cross_args += ['ARCH=@0@'.format(cross_arch),\n-\t'CROSS_COMPILE=@0@'.format(cross_prefix)]\n+        'CROSS_COMPILE=@0@'.format(cross_prefix)]\n \n # DO ACTUAL MODULE BUILDING\n foreach d:subdirs\n-\tsubdir(d)\n+    subdir(d)\n endforeach\ndiff --git a/meson.build b/meson.build\nindex f4a2759bf..6d7f8c501 100644\n--- a/meson.build\n+++ b/meson.build\n@@ -2,27 +2,27 @@\n # Copyright(c) 2017-2019 Intel Corporation\n \n project('DPDK', 'C',\n-\t# Get version number from file.\n-\t# Fallback to \"more\" for Windows compatibility.\n-\tversion: run_command(find_program('cat', 'more'),\n-\t\tfiles('VERSION')).stdout().strip(),\n-\tlicense: 'BSD',\n-\tdefault_options: ['buildtype=release', 'default_library=static'],\n-\tmeson_version: '>= 0.49'\n+        # Get version number from file.\n+        # Fallback to \"more\" for Windows compatibility.\n+        version: run_command(find_program('cat', 'more'),\n+            files('VERSION')).stdout().strip(),\n+        license: 'BSD',\n+        default_options: ['buildtype=release', 'default_library=static'],\n+        meson_version: '>= 0.49'\n )\n \n # check for developer mode\n developer_mode = false\n if get_option('developer_mode').auto()\n-\tif meson.version().version_compare('>=0.53') # fs module available\n-\t\tfs = import('fs')\n-\t\tdeveloper_mode = fs.is_dir('.git')\n-\tendif\n+    if meson.version().version_compare('>=0.53') # fs module available\n+        fs = import('fs')\n+        developer_mode = fs.is_dir('.git')\n+    endif\n else\n-\tdeveloper_mode = get_option('developer_mode').enabled()\n+    developer_mode = get_option('developer_mode').enabled()\n endif\n if developer_mode\n-\tmessage('## Building in Developer Mode ##')\n+    message('## Building in Developer Mode ##')\n endif\n \n # set up some global vars for compiler, platform, configuration, etc.\n@@ -39,20 +39,20 @@ dpdk_drvs_disabled = []\n abi_version_file = files('ABI_VERSION')\n \n if host_machine.cpu_family().startswith('x86')\n-\tarch_subdir = 'x86'\n+    arch_subdir = 'x86'\n elif host_machine.cpu_family().startswith('arm') or host_machine.cpu_family().startswith('aarch')\n-\tarch_subdir = 'arm'\n+    arch_subdir = 'arm'\n elif host_machine.cpu_family().startswith('ppc')\n-\tarch_subdir = 'ppc'\n+    arch_subdir = 'ppc'\n endif\n \n # configure the build, and make sure configs here and in config folder are\n # able to be included in any file. We also store a global array of include dirs\n # for passing to pmdinfogen scripts\n global_inc = include_directories('.', 'config',\n-\t'lib/librte_eal/include',\n-\t'lib/librte_eal/@0@/include'.format(host_machine.system()),\n-\t'lib/librte_eal/@0@/include'.format(arch_subdir),\n+    'lib/librte_eal/include',\n+    'lib/librte_eal/@0@/include'.format(host_machine.system()),\n+    'lib/librte_eal/@0@/include'.format(arch_subdir),\n )\n \n # do configuration and get tool paths\n@@ -74,25 +74,25 @@ subdir('doc')\n # install any example code into the appropriate install path\n subdir('examples')\n install_subdir('examples',\n-\tinstall_dir: get_option('datadir') + '/dpdk',\n-\texclude_files: ex_file_excludes)\n+        install_dir: get_option('datadir') + '/dpdk',\n+        exclude_files: ex_file_excludes)\n \n # build kernel modules if enabled\n if get_option('enable_kmods')\n-\tsubdir('kernel')\n+    subdir('kernel')\n endif\n \n # check header includes if requested\n if get_option('check_includes')\n-\tsubdir('buildtools/chkincs')\n+    subdir('buildtools/chkincs')\n endif\n \n # write the build config\n build_cfg = 'rte_build_config.h'\n configure_file(output: build_cfg,\n-\t\tconfiguration: dpdk_conf,\n-\t\tinstall_dir: join_paths(get_option('includedir'),\n-\t\t\t\tget_option('include_subdir_arch')))\n+        configuration: dpdk_conf,\n+        install_dir: join_paths(get_option('includedir'),\n+            get_option('include_subdir_arch')))\n \n # build pkg-config files for dpdk\n subdir('buildtools/pkg-config')\n@@ -103,40 +103,40 @@ output_message = '\\n=================\\nLibraries Enabled\\n=================\\n'\n output_message += '\\nlibs:\\n\\t'\n output_count = 0\n foreach lib:enabled_libs\n-\toutput_message += lib + ', '\n-\toutput_count += 1\n-\tif output_count == 8\n-\t\toutput_message += '\\n\\t'\n-\t\toutput_count = 0\n-\tendif\n+    output_message += lib + ', '\n+    output_count += 1\n+    if output_count == 8\n+        output_message += '\\n\\t'\n+        output_count = 0\n+    endif\n endforeach\n message(output_message + '\\n')\n \n output_message = '\\n===============\\nDrivers Enabled\\n===============\\n'\n foreach class:dpdk_driver_classes\n-\tclass_drivers = get_variable(class + '_drivers')\n-\toutput_message += '\\n' + class + ':\\n\\t'\n-\toutput_count = 0\n-\tforeach drv:class_drivers\n-\t\toutput_message += drv + ', '\n-\t\toutput_count += 1\n-\t\tif output_count == 8\n-\t\t\toutput_message += '\\n\\t'\n-\t\t\toutput_count = 0\n-\t\tendif\n-\tendforeach\n+    class_drivers = get_variable(class + '_drivers')\n+    output_message += '\\n' + class + ':\\n\\t'\n+    output_count = 0\n+    foreach drv:class_drivers\n+        output_message += drv + ', '\n+        output_count += 1\n+        if output_count == 8\n+            output_message += '\\n\\t'\n+            output_count = 0\n+        endif\n+    endforeach\n endforeach\n message(output_message + '\\n')\n \n output_message = '\\n=================\\nContent Skipped\\n=================\\n'\n output_message += '\\nlibs:\\n\\t'\n foreach lib:dpdk_libs_disabled\n-\treason = get_variable(lib.underscorify() + '_disable_reason')\n-\toutput_message += lib + ':\\t' + reason + '\\n\\t'\n+    reason = get_variable(lib.underscorify() + '_disable_reason')\n+    output_message += lib + ':\\t' + reason + '\\n\\t'\n endforeach\n output_message += '\\ndrivers:\\n\\t'\n foreach drv:dpdk_drvs_disabled\n-\treason = get_variable(drv.underscorify() + '_disable_reason')\n-\toutput_message += drv + ':\\t' + reason + '\\n\\t'\n+    reason = get_variable(drv.underscorify() + '_disable_reason')\n+    output_message += drv + ':\\t' + reason + '\\n\\t'\n endforeach\n message(output_message + '\\n')\ndiff --git a/meson_options.txt b/meson_options.txt\nindex b78f3bd9d..530fcddfa 100644\n--- a/meson_options.txt\n+++ b/meson_options.txt\n@@ -1,44 +1,44 @@\n # Please keep these options sorted alphabetically.\n \n-option('check_includes', type: 'boolean', value: false,\n-\tdescription: 'build \"chkincs\" to verify each header file can compile alone')\n-option('developer_mode', type: 'feature',\n-\tdescription: 'turn on additional build checks relevant for DPDK developers')\n-option('disable_drivers', type: 'string', value: '',\n-\tdescription: 'Comma-separated list of drivers to explicitly disable.')\n-option('drivers_install_subdir', type: 'string', value: 'dpdk/pmds-<VERSION>',\n-\tdescription: 'Subdirectory of libdir where to install PMDs. Defaults to using a versioned subdirectory.')\n-option('enable_docs', type: 'boolean', value: false,\n-\tdescription: 'build documentation')\n-option('enable_drivers', type: 'string', value: '',\n-\tdescription: 'Comma-separated list of drivers to build. If unspecified, build all drivers.')\n-option('enable_driver_sdk', type: 'boolean', value: false,\n-\tdescription: 'Install headers to build drivers.')\n-option('enable_kmods', type: 'boolean', value: false,\n-\tdescription: 'build kernel modules')\n-option('examples', type: 'string', value: '',\n-\tdescription: 'Comma-separated list of examples to build by default')\n-option('flexran_sdk', type: 'string', value: '',\n-\tdescription: 'Path to FlexRAN SDK optional Libraries for BBDEV device')\n-option('ibverbs_link', type: 'combo', choices : ['static', 'shared', 'dlopen'], value: 'shared',\n-\tdescription: 'Linkage method (static/shared/dlopen) for Mellanox PMDs with ibverbs dependencies.')\n-option('include_subdir_arch', type: 'string', value: '',\n-\tdescription: 'subdirectory where to install arch-dependent headers')\n-option('kernel_dir', type: 'string', value: '',\n-\tdescription: 'Path to the kernel for building kernel modules. Headers must be in $kernel_dir or $kernel_dir/build. Modules will be installed in /lib/modules.')\n-option('machine', type: 'string', value: 'native',\n-\tdescription: 'set the target machine type or \"generic\", a build usable on all machines of the build machine architecture or \"native\", which lets the compiler pick the architecture of the build machine.')\n-option('max_ethports', type: 'integer', value: 32,\n-\tdescription: 'maximum number of Ethernet devices')\n-option('max_lcores', type: 'integer', value: 128,\n-\tdescription: 'maximum number of cores/threads supported by EAL')\n-option('max_numa_nodes', type: 'integer', value: 32,\n-\tdescription: 'maximum number of NUMA nodes supported by EAL')\n-option('platform', type: 'string', value: '',\n-\tdescription: 'use configuration for a particular platform (such as a SoC).')\n-option('enable_trace_fp', type: 'boolean', value: false,\n-\tdescription: 'enable fast path trace points.')\n-option('tests', type: 'boolean', value: true,\n-\tdescription: 'build unit tests')\n-option('use_hpet', type: 'boolean', value: false,\n-\tdescription: 'use HPET timer in EAL')\n+option('check_includes', type: 'boolean', value: false, description:\n+        'build \"chkincs\" to verify each header file can compile alone')\n+option('developer_mode', type: 'feature', description:\n+        'turn on additional build checks relevant for DPDK developers')\n+option('disable_drivers', type: 'string', value: '', description:\n+        'Comma-separated list of drivers to explicitly disable.')\n+option('drivers_install_subdir', type: 'string', value: 'dpdk/pmds-<VERSION>', description:\n+        'Subdirectory of libdir where to install PMDs. Defaults to using a versioned subdirectory.')\n+option('enable_docs', type: 'boolean', value: false, description:\n+        'build documentation')\n+option('enable_drivers', type: 'string', value: '', description:\n+        'Comma-separated list of drivers to build. If unspecified, build all drivers.')\n+option('enable_driver_sdk', type: 'boolean', value: false, description:\n+        'Install headers to build drivers.')\n+option('enable_kmods', type: 'boolean', value: false, description:\n+        'build kernel modules')\n+option('examples', type: 'string', value: '', description:\n+        'Comma-separated list of examples to build by default')\n+option('flexran_sdk', type: 'string', value: '', description:\n+        'Path to FlexRAN SDK optional Libraries for BBDEV device')\n+option('ibverbs_link', type: 'combo', choices : ['static', 'shared', 'dlopen'], value: 'shared', description:\n+        'Linkage method (static/shared/dlopen) for Mellanox PMDs with ibverbs dependencies.')\n+option('include_subdir_arch', type: 'string', value: '', description:\n+        'subdirectory where to install arch-dependent headers')\n+option('kernel_dir', type: 'string', value: '', description:\n+        'Path to the kernel for building kernel modules. Headers must be in $kernel_dir or $kernel_dir/build. Modules will be installed in /lib/modules.')\n+option('machine', type: 'string', value: 'native', description:\n+        'set the target machine type or \"generic\", a build usable on all machines of the build machine architecture or \"native\", which lets the compiler pick the architecture of the build machine.')\n+option('max_ethports', type: 'integer', value: 32, description:\n+        'maximum number of Ethernet devices')\n+option('max_lcores', type: 'integer', value: 128, description:\n+        'maximum number of cores/threads supported by EAL')\n+option('max_numa_nodes', type: 'integer', value: 32, description:\n+        'maximum number of NUMA nodes supported by EAL')\n+option('platform', type: 'string', value: '', description:\n+        'use configuration for a particular platform (such as a SoC).')\n+option('enable_trace_fp', type: 'boolean', value: false, description:\n+        'enable fast path trace points.')\n+option('tests', type: 'boolean', value: true, description:\n+        'build unit tests')\n+option('use_hpet', type: 'boolean', value: false, description:\n+        'use HPET timer in EAL')\ndiff --git a/usertools/meson.build b/usertools/meson.build\nindex 596eaefb0..b6271a207 100644\n--- a/usertools/meson.build\n+++ b/usertools/meson.build\n@@ -2,8 +2,9 @@\n # Copyright(c) 2017 Intel Corporation\n \n install_data([\n-\t'dpdk-devbind.py',\n-\t'dpdk-pmdinfo.py',\n-\t'dpdk-telemetry.py',\n-\t'dpdk-hugepages.py'\n-],install_dir: 'bin')\n+            'dpdk-devbind.py',\n+            'dpdk-pmdinfo.py',\n+            'dpdk-telemetry.py',\n+            'dpdk-hugepages.py',\n+        ],\n+        install_dir: 'bin')\n",
    "prefixes": [
        "07/14"
    ]
}