Show a cover letter.

GET /api/covers/60630/?format=api
HTTP 200 OK
Allow: GET, HEAD, OPTIONS
Content-Type: application/json
Vary: Accept

{
    "id": 60630,
    "url": "http://patchwork.dpdk.org/api/covers/60630/?format=api",
    "web_url": "http://patchwork.dpdk.org/project/dpdk/cover/20191007154550.46655-1-bruce.richardson@intel.com/",
    "project": {
        "id": 1,
        "url": "http://patchwork.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": "<20191007154550.46655-1-bruce.richardson@intel.com>",
    "list_archive_url": "https://inbox.dpdk.org/dev/20191007154550.46655-1-bruce.richardson@intel.com",
    "date": "2019-10-07T15:45:48",
    "name": "[v3,0/2] Improve function versioning meson support",
    "submitter": {
        "id": 20,
        "url": "http://patchwork.dpdk.org/api/people/20/?format=api",
        "name": "Bruce Richardson",
        "email": "bruce.richardson@intel.com"
    },
    "mbox": "http://patchwork.dpdk.org/project/dpdk/cover/20191007154550.46655-1-bruce.richardson@intel.com/mbox/",
    "series": [
        {
            "id": 6726,
            "url": "http://patchwork.dpdk.org/api/series/6726/?format=api",
            "web_url": "http://patchwork.dpdk.org/project/dpdk/list/?series=6726",
            "date": "2019-10-07T15:45:48",
            "name": "Improve function versioning meson support",
            "version": 3,
            "mbox": "http://patchwork.dpdk.org/series/6726/mbox/"
        }
    ],
    "comments": "http://patchwork.dpdk.org/api/covers/60630/comments/",
    "headers": {
        "Return-Path": "<dev-bounces@dpdk.org>",
        "X-Original-To": "patchwork@dpdk.org",
        "Delivered-To": "patchwork@dpdk.org",
        "Received": [
            "from [92.243.14.124] (localhost [127.0.0.1])\n\tby dpdk.org (Postfix) with ESMTP id 9CCC31C1C2;\n\tMon,  7 Oct 2019 17:46:06 +0200 (CEST)",
            "from mga01.intel.com (mga01.intel.com [192.55.52.88])\n\tby dpdk.org (Postfix) with ESMTP id 2E53B1C196\n\tfor <dev@dpdk.org>; Mon,  7 Oct 2019 17:46:05 +0200 (CEST)",
            "from orsmga005.jf.intel.com ([10.7.209.41])\n\tby fmsmga101.fm.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384;\n\t07 Oct 2019 08:46:04 -0700",
            "from silpixa00399126.ir.intel.com (HELO\n\tsilpixa00399126.ger.corp.intel.com) ([10.237.223.2])\n\tby orsmga005.jf.intel.com with ESMTP; 07 Oct 2019 08:46:01 -0700"
        ],
        "X-Amp-Result": "SKIPPED(no attachment in message)",
        "X-Amp-File-Uploaded": "False",
        "X-ExtLoop1": "1",
        "X-IronPort-AV": "E=Sophos;i=\"5.67,268,1566889200\"; d=\"scan'208\";a=\"368152553\"",
        "From": "Bruce Richardson <bruce.richardson@intel.com>",
        "To": "dev@dpdk.org",
        "Cc": "Andrzej Ostruszka <amo@semihalf.com>, Neil Horman <nhorman@tuxdriver.com>,\n\tbluca@debian.org, thomas@monjalon.net,\n\tBruce Richardson <bruce.richardson@intel.com>",
        "Date": "Mon,  7 Oct 2019 16:45:48 +0100",
        "Message-Id": "<20191007154550.46655-1-bruce.richardson@intel.com>",
        "X-Mailer": "git-send-email 2.21.0",
        "In-Reply-To": "<20190927194932.22197-1-bruce.richardson@intel.com>",
        "References": "<20190927194932.22197-1-bruce.richardson@intel.com>",
        "MIME-Version": "1.0",
        "Content-Transfer-Encoding": "8bit",
        "Subject": "[dpdk-dev] [PATCH v3 0/2] Improve function versioning meson support",
        "X-BeenThere": "dev@dpdk.org",
        "X-Mailman-Version": "2.1.15",
        "Precedence": "list",
        "List-Id": "DPDK patches and discussions <dev.dpdk.org>",
        "List-Unsubscribe": "<https://mails.dpdk.org/options/dev>,\n\t<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\t<mailto:dev-request@dpdk.org?subject=subscribe>",
        "Errors-To": "dev-bounces@dpdk.org",
        "Sender": "\"dev\" <dev-bounces@dpdk.org>"
    },
    "content": "Adding support for LTO has exposed some issues with how the functions\nversioning was supported by meson, which was always set to build both\nshared and static libraries.\n\nFor plain C code, so long as the -fPIC compiler flag was passed, the\noutput is identical whether or not the code is to be included in a\nstatic library or a dynamic one. Unfortunately, when using function\nversioning that no longer held as different macros were used for the\nversioned functions depending on which type of build it was. This means\nthat any files that use versioning need to be built twice, with\ndifferent defines in each case.\n\nWhile the trivial solution here is just to rebuild everything twice,\nthat involves a lot of unnecessary work when building DPDK. A better\noption is to identify those files or components which need multiple\nbuilds and rebuild only those. To do this, we add a new meson.build\nsetting for libraries \"use_function_versioning\" and when that is set, we\nrebuild all source files twice, initially for static library and then\nwith -DRTE_BUILD_SHARED_LIB for the shared library.\n\nIf the flag is not set, then the static versioning setting only is used,\nwhich could lead to the build succeeding but later causing problems. To\navoid that, we add a new define which must be set when the versioning\nheader is included. This addition while solving 1 problem raises 2\nother, more minor problems:\n* what to do with make builds? since make only builds one library type,\n  we can just always define the new value.\n* what about files that include rte_compat.h for the macro for\n  \"experimental\"? To solve this, we can split compat.h in two, since the\n  versioning macro should be internal only to DPDK (as no public header\n  should expose anything but the latest APIs), while the experimental\n  macros are primarily for public use.\n\nV3: following feedback, moved the define for make from the common_base\n    build config file to one of the global makefiles, as it's not user\n    tunable.\nV2: added in file that missed a \"git add\" when doing V1\n\n\nBruce Richardson (2):\n  eal: split compat header file\n  build: support building ABI versioned files twice\n\n config/rte_config.h                           |  3 -\n doc/api/doxy-api-index.md                     |  3 +-\n doc/guides/contributing/coding_style.rst      |  7 ++\n doc/guides/contributing/versioning.rst        |  4 +-\n lib/librte_distributor/meson.build            |  1 +\n lib/librte_distributor/rte_distributor.c      |  2 +-\n lib/librte_distributor/rte_distributor_v20.c  |  2 +-\n lib/librte_eal/common/Makefile                |  1 +\n lib/librte_eal/common/include/rte_compat.h    | 70 ----------------\n .../common/include/rte_function_versioning.h  | 83 +++++++++++++++++++\n lib/librte_lpm/meson.build                    |  1 +\n lib/librte_lpm/rte_lpm.c                      |  1 +\n lib/librte_lpm/rte_lpm.h                      |  1 -\n lib/librte_lpm/rte_lpm6.c                     |  1 +\n lib/librte_timer/meson.build                  |  1 +\n lib/librte_timer/rte_timer.c                  |  2 +-\n lib/meson.build                               | 16 +++-\n mk/target/generic/rte.vars.mk                 |  8 ++\n 18 files changed, 124 insertions(+), 83 deletions(-)\n create mode 100644 lib/librte_eal/common/include/rte_function_versioning.h"
}