get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 139294,
    "url": "http://patches.dpdk.org/api/patches/139294/?format=api",
    "web_url": "http://patches.dpdk.org/project/dpdk/patch/1713201168-2233-2-git-send-email-roretzla@linux.microsoft.com/",
    "project": {
        "id": 1,
        "url": "http://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": "<1713201168-2233-2-git-send-email-roretzla@linux.microsoft.com>",
    "list_archive_url": "https://inbox.dpdk.org/dev/1713201168-2233-2-git-send-email-roretzla@linux.microsoft.com",
    "date": "2024-04-15T17:12:47",
    "name": "[v5,1/2] build: build only one library type on Windows",
    "commit_ref": null,
    "pull_url": null,
    "state": "new",
    "archived": false,
    "hash": "da1d5267adc9191a4504063d070fa930b2ff5f3a",
    "submitter": {
        "id": 2077,
        "url": "http://patches.dpdk.org/api/people/2077/?format=api",
        "name": "Tyler Retzlaff",
        "email": "roretzla@linux.microsoft.com"
    },
    "delegate": {
        "id": 1,
        "url": "http://patches.dpdk.org/api/users/1/?format=api",
        "username": "tmonjalo",
        "first_name": "Thomas",
        "last_name": "Monjalon",
        "email": "thomas@monjalon.net"
    },
    "mbox": "http://patches.dpdk.org/project/dpdk/patch/1713201168-2233-2-git-send-email-roretzla@linux.microsoft.com/mbox/",
    "series": [
        {
            "id": 31744,
            "url": "http://patches.dpdk.org/api/series/31744/?format=api",
            "web_url": "http://patches.dpdk.org/project/dpdk/list/?series=31744",
            "date": "2024-04-15T17:12:48",
            "name": "build and install only one library type on Windows",
            "version": 5,
            "mbox": "http://patches.dpdk.org/series/31744/mbox/"
        }
    ],
    "comments": "http://patches.dpdk.org/api/patches/139294/comments/",
    "check": "success",
    "checks": "http://patches.dpdk.org/api/patches/139294/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 516A843E7C;\n\tMon, 15 Apr 2024 19:13:03 +0200 (CEST)",
            "from mails.dpdk.org (localhost [127.0.0.1])\n\tby mails.dpdk.org (Postfix) with ESMTP id F3C6940608;\n\tMon, 15 Apr 2024 19:12:53 +0200 (CEST)",
            "from linux.microsoft.com (linux.microsoft.com [13.77.154.182])\n by mails.dpdk.org (Postfix) with ESMTP id 46597400EF\n for <dev@dpdk.org>; Mon, 15 Apr 2024 19:12:50 +0200 (CEST)",
            "by linux.microsoft.com (Postfix, from userid 1086)\n id 8D0E920FC5F8; Mon, 15 Apr 2024 10:12:49 -0700 (PDT)"
        ],
        "DKIM-Filter": "OpenDKIM Filter v2.11.0 linux.microsoft.com 8D0E920FC5F8",
        "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed; d=linux.microsoft.com;\n s=default; t=1713201169;\n bh=HI2/3+28PICxvfENaylJE6ZA54gc/A2/asVTh6xSb7M=;\n h=From:To:Cc:Subject:Date:In-Reply-To:References:From;\n b=Akryg6LVZDOMFseWfEYBtRrbJ9xiCo4zZZdRBK389NAdjChVnqOv6DxsPG1t2TYKe\n EZ9yFBOR2FZtzw5aSRY48wTDF41rBb/OwzNDaBn+Sh9+cJhCdbVzzWCDhsSGJJzIcx\n 6DbO6yKbXkJq9TsiR4aXtRZtBNJ/HuILBWlKOB94=",
        "From": "Tyler Retzlaff <roretzla@linux.microsoft.com>",
        "To": "dev@dpdk.org",
        "Cc": "Bruce Richardson <bruce.richardson@intel.com>,\n Harman Kalra <hkalra@marvell.com>,\n Tyler Retzlaff <roretzla@linux.microsoft.com>",
        "Subject": "[PATCH v5 1/2] build: build only one library type on Windows",
        "Date": "Mon, 15 Apr 2024 10:12:47 -0700",
        "Message-Id": "<1713201168-2233-2-git-send-email-roretzla@linux.microsoft.com>",
        "X-Mailer": "git-send-email 1.8.3.1",
        "In-Reply-To": "<1713201168-2233-1-git-send-email-roretzla@linux.microsoft.com>",
        "References": "<1710445477-23848-1-git-send-email-roretzla@linux.microsoft.com>\n <1713201168-2233-1-git-send-email-roretzla@linux.microsoft.com>",
        "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"
    },
    "content": "MSVC is the only compiler that can produce usable shared libraries for\nDPDK on Windows because of the use of exported TLS variables.\n\nDisable building of shared libraries with LLVM and MinGW so that\nremaining __declspec macros needed for the functional libraries built by\nMSVC can be used without triggering errors in LLVM and MinGW builds.\n\nFor Windows only install the default_library type to avoid confusion.\nWindows builds cannot build both shared and static in a single pass so\ninstall only the functional variant.\n\nSigned-off-by: Tyler Retzlaff <roretzla@linux.microsoft.com>\n---\n config/meson.build  | 24 +++++++++++++++++++\n drivers/meson.build | 59 ++++++++++++++++++++--------------------------\n lib/meson.build     | 67 +++++++++++++++++++++--------------------------------\n 3 files changed, 75 insertions(+), 75 deletions(-)",
    "diff": "diff --git a/config/meson.build b/config/meson.build\nindex 8c8b019..9882d33 100644\n--- a/config/meson.build\n+++ b/config/meson.build\n@@ -516,4 +516,28 @@ if get_option('default_library') == 'both'\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+elif get_option('default_library') == 'shared' and is_windows and not is_ms_compiler\n+    error( '''\n+ Unsupported value \"shared\" for \"default_library\" option.\n+\n+ NOTE: DPDK Windows shared is only supported when building with MSVC. Please set\n+ \"default_library\" to either \"static\" or use MSVC.''')\n+endif\n+\n+is_shared_enabled=true\n+install_static = true\n+install_shared = true\n+if is_windows\n+    install_static = get_option('default_library') == 'static'\n+    install_shared = get_option('default_library') == 'shared'\n+    if not is_ms_compiler or not install_shared\n+        is_shared_enabled = false\n+    else\n+        # building shared libraries\n+        dpdk_conf.set('RTE_BUILD_SHARED_LIB', true)\n+\n+        # enable export / import of thread_local variables\n+        add_project_arguments('/experimental:tlsDllInterface', language: 'c')\n+        add_project_link_arguments('/experimental:tlsDllInterface', language: 'c')\n+    endif\n endif\ndiff --git a/drivers/meson.build b/drivers/meson.build\nindex 66931d4..173403a 100644\n--- a/drivers/meson.build\n+++ b/drivers/meson.build\n@@ -247,7 +247,7 @@ foreach subpath:subdirs\n                 include_directories: includes,\n                 dependencies: static_deps,\n                 c_args: cflags,\n-                install: true)\n+                install: install_static)\n \n         # now build the shared driver\n         version_map = '@0@/@1@/version.map'.format(meson.current_source_dir(), drv_path)\n@@ -271,48 +271,39 @@ foreach subpath:subdirs\n             endif\n         endif\n \n-        if is_windows\n-            if is_ms_linker\n+        if is_shared_enabled\n+            if is_ms_compiler\n                 def_file = custom_target(lib_name + '_def',\n                         command: [map_to_win_cmd, '@INPUT@', '@OUTPUT@'],\n                         input: version_map,\n                         output: '@0@_exports.def'.format(lib_name))\n                 lk_deps += [def_file]\n-\n-                lk_args = ['-Wl,/def:' + def_file.full_path()]\n-                if meson.version().version_compare('<0.54.0')\n-                    lk_args += ['-Wl,/implib:drivers\\\\lib' + lib_name + '.dll.a']\n-                endif\n+                lk_args = ['/def:' + def_file.full_path()]\n             else\n-                mingw_map = custom_target(lib_name + '_mingw',\n-                        command: [map_to_win_cmd, '@INPUT@', '@OUTPUT@'],\n-                        input: version_map,\n-                        output: '@0@_mingw.map'.format(lib_name))\n-                lk_deps += [mingw_map]\n-\n-                lk_args = ['-Wl,--version-script=' + mingw_map.full_path()]\n+                lk_args = ['-Wl,--version-script=' + version_map]\n             endif\n-        else\n-            lk_args = ['-Wl,--version-script=' + version_map]\n         endif\n \n-        shared_lib = shared_library(lib_name, sources,\n-                objects: objs,\n-                include_directories: includes,\n-                dependencies: shared_deps,\n-                c_args: cflags,\n-                link_args: lk_args,\n-                link_depends: lk_deps,\n-                version: abi_version,\n-                soversion: so_version,\n-                install: true,\n-                install_dir: driver_install_path)\n-\n-        # create a dependency object and add it to the global dictionary so\n-        # testpmd or other built-in apps can find it if necessary\n-        shared_dep = declare_dependency(link_with: shared_lib,\n-                include_directories: includes,\n-                dependencies: shared_deps)\n+        shared_dep = {}\n+        if is_shared_enabled\n+            shared_lib = shared_library(lib_name, sources,\n+                    objects: objs,\n+                    include_directories: includes,\n+                    dependencies: shared_deps,\n+                    c_args: cflags,\n+                    link_args: lk_args,\n+                    link_depends: lk_deps,\n+                    version: abi_version,\n+                    soversion: so_version,\n+                    install: install_shared,\n+                    install_dir: driver_install_path)\n+\n+            # create a dependency object and add it to the global dictionary so\n+            # testpmd or other built-in apps can find it if necessary\n+            shared_dep = declare_dependency(link_with: shared_lib,\n+                    include_directories: includes,\n+                    dependencies: shared_deps)\n+        endif\n         static_dep = declare_dependency(\n                 include_directories: includes,\n                 dependencies: static_deps)\ndiff --git a/lib/meson.build b/lib/meson.build\nindex 179a272..8b28314 100644\n--- a/lib/meson.build\n+++ b/lib/meson.build\n@@ -242,11 +242,13 @@ foreach l:libraries\n             c_args: cflags,\n             dependencies: static_deps,\n             include_directories: includes,\n-            install: true)\n+            install: install_static)\n     static_dep = declare_dependency(\n             include_directories: includes,\n             dependencies: static_deps)\n \n+    dpdk_static_libraries = [static_lib] + dpdk_static_libraries\n+\n     if not use_function_versioning or is_windows\n         # use pre-build objects to build shared lib\n         sources = []\n@@ -260,33 +262,14 @@ foreach l:libraries\n     version_map = '@0@/@1@/version.map'.format(meson.current_source_dir(), l)\n     lk_deps = [version_map]\n \n-    if is_ms_linker\n-        def_file = custom_target(libname + '_def',\n-                command: [map_to_win_cmd, '@INPUT@', '@OUTPUT@'],\n-                input: version_map,\n-                output: '@0@_exports.def'.format(libname))\n-        lk_deps += [def_file]\n-\n+    if is_shared_enabled\n         if is_ms_compiler\n-            lk_args = ['/def:' + def_file.full_path()]\n-            if meson.version().version_compare('<0.54.0')\n-                lk_args += ['/implib:lib\\\\librte_' + l + '.dll.a']\n-            endif\n-        else\n-            lk_args = ['-Wl,/def:' + def_file.full_path()]\n-            if meson.version().version_compare('<0.54.0')\n-                lk_args += ['-Wl,/implib:lib\\\\librte_' + l + '.dll.a']\n-            endif\n-        endif\n-    else\n-        if is_windows\n-            mingw_map = custom_target(libname + '_mingw',\n+            def_file = custom_target(libname + '_def',\n                     command: [map_to_win_cmd, '@INPUT@', '@OUTPUT@'],\n                     input: version_map,\n-                    output: '@0@_mingw.map'.format(libname))\n-            lk_deps += [mingw_map]\n-\n-            lk_args = ['-Wl,--version-script=' + mingw_map.full_path()]\n+                    output: '@0@_exports.def'.format(libname))\n+            lk_deps += [def_file]\n+            lk_args = ['/def:' + def_file.full_path()]\n         else\n             lk_args = ['-Wl,--version-script=' + version_map]\n         endif\n@@ -304,23 +287,25 @@ foreach l:libraries\n                 output: name + '.sym_chk')\n     endif\n \n-    shared_lib = shared_library(libname,\n-            sources,\n-            objects: objs,\n-            c_args: cflags,\n-            dependencies: shared_deps,\n-            include_directories: includes,\n-            link_args: lk_args,\n-            link_depends: lk_deps,\n-            version: abi_version,\n-            soversion: so_version,\n-            install: true)\n-    shared_dep = declare_dependency(link_with: shared_lib,\n-            include_directories: includes,\n-            dependencies: shared_deps)\n+    shared_dep = {}\n+    if is_shared_enabled\n+        shared_lib = shared_library(libname,\n+                sources,\n+                objects: objs,\n+                c_args: cflags,\n+                dependencies: shared_deps,\n+                include_directories: includes,\n+                link_args: lk_args,\n+                link_depends: lk_deps,\n+                version: abi_version,\n+                soversion: so_version,\n+                install: install_shared)\n+        shared_dep = declare_dependency(link_with: shared_lib,\n+                include_directories: includes,\n+                dependencies: shared_deps)\n \n-    dpdk_libraries = [shared_lib] + dpdk_libraries\n-    dpdk_static_libraries = [static_lib] + dpdk_static_libraries\n+        dpdk_libraries = [shared_lib] + dpdk_libraries\n+    endif\n \n     set_variable('shared_rte_' + name, shared_dep)\n     set_variable('static_rte_' + name, static_dep)\n",
    "prefixes": [
        "v5",
        "1/2"
    ]
}