Show a cover letter.

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

{
    "id": 60076,
    "url": "http://patchwork.dpdk.org/api/covers/60076/?format=api",
    "web_url": "http://patchwork.dpdk.org/project/dpdk/cover/20190927205931.23022-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": "<20190927205931.23022-1-bruce.richardson@intel.com>",
    "list_archive_url": "https://inbox.dpdk.org/dev/20190927205931.23022-1-bruce.richardson@intel.com",
    "date": "2019-09-27T20:59:29",
    "name": "[v2,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/20190927205931.23022-1-bruce.richardson@intel.com/mbox/",
    "series": [
        {
            "id": 6596,
            "url": "http://patchwork.dpdk.org/api/series/6596/?format=api",
            "web_url": "http://patchwork.dpdk.org/project/dpdk/list/?series=6596",
            "date": "2019-09-27T20:59:29",
            "name": "Improve function versioning meson support",
            "version": 2,
            "mbox": "http://patchwork.dpdk.org/series/6596/mbox/"
        }
    ],
    "comments": "http://patchwork.dpdk.org/api/covers/60076/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 921A61BEF2;\n\tFri, 27 Sep 2019 22:59:49 +0200 (CEST)",
            "from mga01.intel.com (mga01.intel.com [192.55.52.88])\n\tby dpdk.org (Postfix) with ESMTP id 0FCDB1BEF0\n\tfor <dev@dpdk.org>; Fri, 27 Sep 2019 22:59:47 +0200 (CEST)",
            "from fmsmga006.fm.intel.com ([10.253.24.20])\n\tby fmsmga101.fm.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384;\n\t27 Sep 2019 13:59:47 -0700",
            "from silpixa00399126.ir.intel.com (HELO\n\tsilpixa00399126.ger.corp.intel.com) ([10.237.223.2])\n\tby fmsmga006.fm.intel.com with ESMTP; 27 Sep 2019 13:59:45 -0700"
        ],
        "X-Amp-Result": "SKIPPED(no attachment in message)",
        "X-Amp-File-Uploaded": "False",
        "X-ExtLoop1": "1",
        "X-IronPort-AV": "E=Sophos;i=\"5.64,556,1559545200\"; d=\"scan'208\";a=\"391328088\"",
        "From": "Bruce Richardson <bruce.richardson@intel.com>",
        "To": "dev@dpdk.org",
        "Cc": "Andrzej Ostruszka <amo@semihalf.com>,\n\tThomas Monjalon <thomas@monjalon.net>, Ray Kinsella <mdr@ashroe.eu>, \n\tNeil Horman <nhorman@tuxdriver.com>, bluca@debian.org,\n\tBruce Richardson <bruce.richardson@intel.com>",
        "Date": "Fri, 27 Sep 2019 21:59:29 +0100",
        "Message-Id": "<20190927205931.23022-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 v2 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\nV2: added in file that missed a \"git add\" when doing V1\n\nBruce Richardson (2):\n  eal: split compat header file\n  build: support building ABI versioned files twice\n\n config/common_base                            |  1 +\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 18 files changed, 117 insertions(+), 83 deletions(-)\n create mode 100644 lib/librte_eal/common/include/rte_function_versioning.h"
}