From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from NAM03-DM3-obe.outbound.protection.outlook.com (mail-dm3nam03on0050.outbound.protection.outlook.com [104.47.41.50]) by dpdk.org (Postfix) with ESMTP id 9C9F11B302 for ; Fri, 22 Dec 2017 06:02:40 +0100 (CET) Received: from BN6PR03CA0083.namprd03.prod.outlook.com (10.164.122.149) by CY4PR03MB2693.namprd03.prod.outlook.com (10.173.43.136) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P256) id 15.20.323.15; Fri, 22 Dec 2017 05:02:39 +0000 Received: from BN1AFFO11FD028.protection.gbl (2a01:111:f400:7c10::142) by BN6PR03CA0083.outlook.office365.com (2603:10b6:405:6f::21) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384) id 15.20.345.14 via Frontend Transport; Fri, 22 Dec 2017 05:02:39 +0000 Authentication-Results: spf=fail (sender IP is 192.88.168.50) smtp.mailfrom=nxp.com; intel.com; dkim=none (message not signed) header.d=none;intel.com; dmarc=fail action=none header.from=nxp.com; Received-SPF: Fail (protection.outlook.com: domain of nxp.com does not designate 192.88.168.50 as permitted sender) receiver=protection.outlook.com; client-ip=192.88.168.50; helo=tx30smr01.am.freescale.net; Received: from tx30smr01.am.freescale.net (192.88.168.50) by BN1AFFO11FD028.mail.protection.outlook.com (10.58.52.88) with Microsoft SMTP Server (version=TLS1_0, cipher=TLS_RSA_WITH_AES_256_CBC_SHA) id 15.20.302.6 via Frontend Transport; Fri, 22 Dec 2017 05:02:24 +0000 Received: from [10.232.14.39] ([10.232.14.39]) by tx30smr01.am.freescale.net (8.14.3/8.14.0) with ESMTP id vBM52YUB003187; Thu, 21 Dec 2017 22:02:35 -0700 To: Bruce Richardson CC: , , , , , References: <20171221161226.198837-1-bruce.richardson@intel.com> From: Shreyansh Jain Message-ID: <417cb993-de79-2f8f-02a7-5649299946c5@nxp.com> Date: Fri, 22 Dec 2017 10:46:34 +0530 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.5.0 MIME-Version: 1.0 In-Reply-To: <20171221161226.198837-1-bruce.richardson@intel.com> Content-Type: text/plain; charset="utf-8"; format=flowed Content-Language: en-US Content-Transfer-Encoding: 7bit X-EOPAttributedMessage: 0 X-Matching-Connectors: 131583925442960951; (91ab9b29-cfa4-454e-5278-08d120cd25b8); () X-Forefront-Antispam-Report: CIP:192.88.168.50; IPV:NLI; CTRY:US; EFV:NLI; SFV:NSPM; SFS:(10009020)(336005)(346002)(396003)(376002)(39380400002)(39860400002)(2980300002)(1110001)(1109001)(3190300001)(339900001)(174874002)(24454002)(189003)(199004)(2950100002)(36756003)(50466002)(230700001)(53936002)(67846002)(47776003)(6916009)(65806001)(6306002)(65956001)(104016004)(31686004)(6246003)(8936002)(4326008)(64126003)(2906002)(23676004)(106466001)(65826007)(5660300001)(83506002)(53376002)(2486003)(105606002)(81156014)(76176011)(81166006)(498600001)(8676002)(97736004)(86362001)(58126008)(229853002)(85426001)(77096006)(68736007)(59450400001)(305945005)(54906003)(356003)(316002)(31696002); DIR:OUT; SFP:1101; SCL:1; SRVR:CY4PR03MB2693; H:tx30smr01.am.freescale.net; FPR:; SPF:Fail; PTR:InfoDomainNonexistent; MX:1; A:1; LANG:en; X-Microsoft-Exchange-Diagnostics: 1; BN1AFFO11FD028; 1:/ipNzj5yi/nN4En0sLkVa3Rne+8O4cDS+24QKgesbEfYZkVk0Azj4jMh5m1D8ynoErfmFAzdhONHGvzpsbpJ+K+nw9Gn9QGxNsBzoI/94nu4eOLR8zqZGkvylwOLkPji X-MS-Office365-Filtering-Correlation-Id: cb1dd238-8dd8-493a-de37-08d548f930a4 X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(4534020)(4628075)(201703131517081)(5600026)(4604075)(2017052603307); SRVR:CY4PR03MB2693; X-Microsoft-Exchange-Diagnostics: 1; CY4PR03MB2693; 3:1hubfQrrBfAZNsaeMUZCqJMRn0YLKFvnKwvDsxvMLuObejPYxuFbDaifOXDZAO41RtGyfqXOOzCVQMD9neFMoa9V0O4nulExto1Y/UaQ7k3mvucaiABtz1BqCexMYmLwxH+YruJUiCa+iedIigSxlV84jxfvMaiED8mORPGHttkUKlXdBlO/n+C+3XgMrtf9ciYAtYewDc8WKIr3ptL/MnvQ4jxaEfHCmiNZihqBc7UzsiPl2yPpkH5mBph7QhVAaAIfMjQVt4RlB6KnJvnWAizcrPdFY+1Lw7zEwVPWb+QyDgRmLX7bfHVor2Nbn/micE/7YPaqAKVlla31AL84eV2IUZ1EgB9Lujcvkdk+3bM=; 25:C/s2gdeVFJnezCK8JBvUkXUhDhm9KT8cBc6up44VvcGp4/1pgFrImoeQ6xbyStkxS9VaInzop+YJLA7+cqiKa1sFnEwtWr4LbBXA+59gJUDxrwtN+ywuAeyrT1f5jtQ5Plj4bYawf25Tt2frRwLghUA+rj5zid3UxBw9ymj5Ft41DZSCjZzMzte17wZ5JDjcl0ID9Xegp1RmAlGB4Ymi4LxDJ76NR/dW6Jl59o6lE7FKtVRBZXDJo9PtG9Nu3mHO9U0bRh0lTXnDDknCfNpHbpSjxtLJf6fLZXvpFG0UupF4ImE/qR+sFkek+L1KM8Lsq1SF6gfhgDXq4OawLnt9kg== X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: CY4PR03MB2693: X-Microsoft-Exchange-Diagnostics: 1; CY4PR03MB2693; 31:j7cBMBpjiDJS3f2o+FqoLh0u0gfo9kuaOYjEf6X3mbsypd4VjY6d90l5drgpOuuelbVCQ2Yvg2pyEFZPhSdnYAlKnbmUZxjb7fsjBqjBIojwxxaqEa5ykEZY8k9NORSgilIoOfdd7BemRSq8Li1sJt3XDe3WCxEurgUiiNQFLyQjzXEq1k61LSLG4FieHY1iohu6g4xEgoysERtgn8bGUTmhIj+tS+0CZ52zlyumRtc=; 4:NMCTJtmrMRcM2UDMach4w0foPp0mkcWfekgmsc5+C188AxGElDt9TPay6mVSSuBuY1rWxguOucztFFCQL9TyGdemBr97Qb7T9w6OGwQSZSQcU70xW1bNH1Jan0NHkn1X3k7F7SfqET+PqUeTyuKbUm8nbsDGwgXycL+ssdeGpGgfC9ASs+eBadZ7SH20F46OBasSly06b/Hm7MEjZVJN4VT/AJ2eVBQtFE0R1vj4ucaMjVi5b4wem2iLJpTiyfvV4vYXfjGkhnIZqpwoB05DGjXFqEDjPmfCBRHBM1L0Dg72AnDkOqYdM5g9A0/dRODAJKjfS2jdWW7hk3TFZziSUu7yz9+vdqnaDLh9E6A19A6lVJ1y/6+tRwS1isXytTYg X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(278428928389397)(228905959029699)(17755550239193); X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(6095135)(2401047)(8121501046)(5005006)(10201501046)(3002001)(3231023)(93006095)(93001095)(6055026)(6096035)(20161123559100)(20161123563025)(20161123561025)(20161123565025)(201703131430075)(201703131433075)(201703131448075)(201703161259150)(201703151042153)(20161123556025)(201708071742011); SRVR:CY4PR03MB2693; BCL:0; PCL:0; RULEID:(100000803101)(100110400095)(400006); SRVR:CY4PR03MB2693; X-Forefront-PRVS: 05299D545B X-Microsoft-Exchange-Diagnostics: =?utf-8?B?MTtDWTRQUjAzTUIyNjkzOzIzOnZrVm51d2N5S2ZLekg5ODNWQlBpVEh1UW1M?= =?utf-8?B?UTZZeEM2VGgrQVR4U29EZHEzV09NaGFiR0JlbUVmaVNOTitsa2pGUWp1eDl6?= =?utf-8?B?eklybHB6WmRrZ0N6M29yNjFtbDh5RHNqKzRYYWVsc0pKTVd1S2pnODkxYUQ0?= =?utf-8?B?QWJFYzlGb0QzWS9rSUIzVmtRbjlNOUJNZW0rNUFkdHU4eS9ERHJNMzdSRTVB?= =?utf-8?B?OFRIYnViWmY3ekcxK1lNeDZIWVpLbE9TTUFWcGFWQk1kamFoYlYyaXFNVTJz?= =?utf-8?B?Ti9KN2NBUDBFM1VvVVY5MVBWaThPWGtoZkpJZHNDVHd3UEQ3dWVmSEZwcWtk?= =?utf-8?B?Z0hxeW9MNUV4UzVZSEZZOWFUMkhDVlk1Z0loSzlpNUxHNW9FakJpUTAwSmJQ?= =?utf-8?B?enJ6K2RjUm5LcWp4QkI0aHNPTWRvOXFZRHRQTWNZOXdWOHhORG5WOTlLMnBw?= =?utf-8?B?bFFTWjh0U0dxc1hBemtnMUZnWklFeUliNWNmdThCSThUSFlxR3RBc2tKaVI1?= =?utf-8?B?TG9pUGVQTkhnTkp3WVc5V3RSaUlqSFJjRWhjSFRLb0FtV3FCWFhsLzc5Q2pI?= =?utf-8?B?cWJmY3JkODlxcUZodC85ck5uNm1Fc1BzY0NaZ3UyQVZoKzJsTDEyMm13TVNQ?= =?utf-8?B?dS9Idldsd3JNMTdsRklaVCtOMmwrWjltWFhpL2JmTFF5MStsMTVnaXhUZTgx?= =?utf-8?B?bVQvNmM1ZDRneFBOQ3V2bHM3d3JlV0JBWWFUdldwRWl4Z3lsZVNXanJ2TEhL?= =?utf-8?B?V0l1NmZYKzREc0xHbVFhajBBMGlKMXpxb05vNFZuRzJOL2ZCYU01MHA2dXlL?= =?utf-8?B?Ri9aNzZYZDZZREdtcS83QTZPZUQvLzZGS2NRVytES3FOaEJCRTRTcGRPNkNz?= =?utf-8?B?RVdEeWFyZGIwYnUyOFJNN3M3RFZMV1QramRYdVNlNDU5empxVThxNFZBUXd4?= =?utf-8?B?Z2JwempyMUhtNFJZOWgzYW1LS0M4UnVhVDRSTzZYZmxyaEh4SmpUbmlic052?= =?utf-8?B?cDJaOWxIYlN3ZlBSemx3RDBUNmlIL0ZWeXZ1NGpVbTVrWHYzWjZmK09PTisy?= =?utf-8?B?QVBqRHBHRWdXRWllQlJ3bEtJVFJZeTl2RmdmbWlQS2R0ejBOMyswZVl4YTIy?= =?utf-8?B?SDY3dkdSd0YzZlJ4RVgrd3hOWFVOMjR5cEtrMDkzR0dQTXI4ZDNRWDlkOHJx?= =?utf-8?B?YzllN2hwMEN6Z2VCT1lyZmw5WDZtSlZXU0NoOStKVUxSdGdMUkhRWHo2WEIw?= =?utf-8?B?elVFTUtPRGtpSFZwVDU5MHljZ0NOWlQwMTNRQmNZUDNmVTNUZlc2aG5VN1lO?= =?utf-8?B?VWIyVVkvRFNjTWxFZUxkdWh6d0x5Z1ZSSmtUeloxVlVwUUt2SDBWL2lZb2pt?= =?utf-8?B?Qmgxd0FtV1paZ3M5NnFYSVlETUNwSmhCNVlsZmVMaStnOG5wMGNuRVdVSXUv?= =?utf-8?B?Q083OEltWXgyNDFWSEM5RmFZc1FNNXZGN1crREF3MWZxQ0ZWNG8xUWd6K1BN?= =?utf-8?B?WlA3TWlsMTNFYUlnZlJiZzJtQkRQWEdOc0dzZG9BQWFnQnFEZG5sckJMZXZ3?= =?utf-8?B?dkgvbmJlK241cTRlODdMOHlyK3NNbEI2amtybUtZVjRrWGdmYktvU2pxZXR2?= =?utf-8?B?TnBFc0FjNDhGS01XaldJcTRoOTRvL2x1RkxKRWFvM1BUREloTFpWbGozQmZl?= =?utf-8?B?d01CczYvYUZKYlUxaHNqTVRvQmxERkU5MWRtZUhWMm0rbldsYjRKNm9uNXpR?= =?utf-8?B?amxUbUg3UDg5T2xrVmU3ZG9mODdDK0o1aU1Ocjd1c0FSaytLT0FQalZXMWlN?= =?utf-8?B?c3kreHcyTk5IbnZYdFZMQlloYVphYnVvNUh6eHFlNDNab0hoQXdyemV3RmIr?= =?utf-8?Q?IMHf/ohxjxk=3D?= X-Microsoft-Exchange-Diagnostics: 1; CY4PR03MB2693; 6:6z/STRI2wiEvnOErgvhkoXsEZ7c4RsgafRSprEbVEuAg7crDcuE+rTsB58/o0ZnGxIO6bhgTGbuuwgX7fPAz+GHxgjXdbVuQphAVoBZkCmD0CpbVblgN/nZojTTRoiAS+4JBMZrZ9zDw8qaJzm8ccuSIiXwqeIgOM3xQEDhrjPoZ39r8xlBOnfuZH9jwDg+kNuU3rL598QXE3VwckStMuB2hw6Rdey6zeI6Ys9a7MI5Z2NxIuqkt5ocsOrFsmSeSrCp0IPFVPFTYdk+Udl/T9IMwtykTaYoVe5yeD+8MxMlmBaPippawgFIqMZ2qBZNnfAgufeleuRe87yW542PxkpXbWYYsssC7qliQNXQIvfk=; 5:M4/L3jPWfQp7ZcAq9WbRHQ05OSwnIk5NreMQ5EDe/zvYk/ZQ8fkMpN0GVnyvxNj8U4oWxRnbRyaEKBryJRt3O8WmbB72juOt9fOI/Ex9LkchCkUCpXAdFD7K1hjqWpGZHrRvpxxK1GG8R0oEc0HD2mQ0cl1yreNFEctAGaUKPeE=; 24:bIiDLsFdkF14BZvuDAJLFAbbOQlPS5poOJT1ZLhCWakIJUXbfYCpLhlNkQGH/f981IBDztHMfgTLEEm+dkTJg/hwtguzGUOHVOTen8GjTVM=; 7:q5b51IpB2niCjcirsrrpH9O9x/OnsJMpd+Stz/JXhaL9qsE1bDvq9mLo0a8T2zRCIjnkwG8tKDFdBdFvIXYUFs/fE7lYDw5P7BcFu0jRcJbaHgvFx8zRuyA1vVTl4TOmyij0sk3qFq96LohN9oqBqdaGIp35HkQ7Nx33oB+wWRnUWNQTjYLAT6yjlEUQ/AcYEsb+ajow8eihT/7jyNXe+6pbKVQ5mJ1UsrK/SAj60ijddRH6+SdJjuGN24YipQFi SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-MS-Exchange-CrossTenant-OriginalArrivalTime: 22 Dec 2017 05:02:24.1244 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: cb1dd238-8dd8-493a-de37-08d548f930a4 X-MS-Exchange-CrossTenant-Id: 5afe0b00-7697-4969-b663-5eab37d5f47e X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=5afe0b00-7697-4969-b663-5eab37d5f47e; Ip=[192.88.168.50]; Helo=[tx30smr01.am.freescale.net] X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: CY4PR03MB2693 Subject: Re: [dpdk-dev] [PATCH] doc: add instructions on build using meson X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 22 Dec 2017 05:02:41 -0000 Hi Bruce, some trivial comments inline... On Thursday 21 December 2017 09:42 PM, Bruce Richardson wrote: > Add a document describing how to configure, build and install DPDK using > meson and ninja. Document includes references to official installation docs > using make, and points out the experimental nature of the build. > > Signed-off-by: Bruce Richardson > --- > INSTALL.meson | 177 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Just out of curiosity, why not make it a rst file, as part of standard DPDK documentation? Or, maybe until meson is experimental this readme can suffice - but, we should have rst eventually - isn't it. > 1 file changed, 177 insertions(+) > create mode 100644 INSTALL.meson > > diff --git a/INSTALL.meson b/INSTALL.meson > new file mode 100644 > index 000000000..f5ded1f7e > --- /dev/null > +++ b/INSTALL.meson > @@ -0,0 +1,177 @@ > +INSTALLING DPDK USING THE MESON BUILD SYSTEM > +--------------------------------------------- > + > +NOTE: Compiling and installing DPDK using ``meson`` and ``ninja``, rather > +than using ``make`` (GNU make) is EXPERIMENTAL. Official builds of DPDK > +should always be done using ``make``, as described in the ``Getting Started > +Guide`` documentation, and at "http://dpdk.org/doc/quick-start". > + > +Summary > +-------- > +For many platforms, compiling and installing DPDK should work using the > +following set of commands: > + > + meson build > + cd build > + ninja > + ninja install > + > +This will compile DPDK in the ``build`` subdirectory, and then install the > +resulting libraries, drivers and header files onto the system - generally > +in /usr/local. A package-config file, ``libdpdk.pc``, for DPDK will also > +be install to allow ease of compiling and linking with applications. ^^^^^^^^^^ 'be installed' > + > +After installation, to use DPDK, the necessary CFLAG and LDFLAG variables > +can be got from pkg-config. > + pkg-config --cflags libdpdk > + pkg-config --libs libdpdk > + > +More detail on each of these steps can be got from the following sections. > + > + > +Getting the Tools > +------------------ > + > +The ``meson`` tool is used to configure a DPDK build. On most Linux > +distributions this can be got using the local package management system, > +e.g. ``dnf install meson`` or ``apt-get install meson``. If meson is not > +available as a suitable package, it can also be installed using the Python > +3 ``pip`` tool, e.g. ``pip3 install meson``. Version 0.42 of meson is > +recommended - if the version packaged is too old, the latest version is > +generally available from "pip". > + > +The other dependency for building is the ``ninja`` tool, which acts similar > +to make and performs the actual build using information provided by meson. > +Installing meson will in many cases also install ninja, but, if not already ^^^^^^^^^^^^^^^^^^ will, in many cases, also install ninja ... > +installed, it too is generally packaged by most Linux distributions. If not > +available as a package, it can be downloaded as source or binary from > +https://ninja-build.org/ > + > + > +Configuring the Build > +---------------------- > + > +To configure a build, run the meson tool, passing the path to the directory > +to be used for the build e.g. ``meson build``, as shown above. If calling > +meson not from with the root directory of the DPDK project the path to the ^^^^^^^^^^^^^^^^^^^^^^^^ needs correction/rephrase > +root directory should be passed as the first parameter, and the build path > +as the second. For example, to build DPDK in /tmp/dpdk-build: > + > + user@host:/tmp$ meson ~user/dpdk dpdk-build > + > +Meson will then configure the build based on settings in the project's > +meson.build files, and by checking the build environment for e.g. compiler > +properties or the presence of dependencies, such as libpcap, or openssl > +libcrypto libraries. Once done, meson writes a ``build.ninja`` file in the > +build directory to be used to do the build itself when ninja is called '.' is missing above. > + > +Tuning of the build is possible, both as part of the original meson call, > +or subsequently using ``meson configure`` command (``mesonconf`` in some > +older versions). Some options, such as ``buildtype``, or ``werror`` are > +built into meson, while others, such as ``max_lcores``, or the list of > +examples to build, are DPDK-specific. To have a list of all options > +available run ``meson configure`` in the build directory. > + > +Examples of adjusting the defaults when doing initial meson configuration. > +Project-specific options are passed used -Doption=value. > + > + meson --werror werrorbuild # build with warnings as errors > + > + meson --buildtype=debug debugbuild # build for debugging > + > + meson -Dexamples=l3fwd,l2fwd fwdbuild # build some examples as > + # part of the normal DPDK build > + > + meson -Dmax_lcores=8 smallbuild # scale build for smaller systems > + > +Examples of setting the same options using meson configure > + > + meson configure -Dwerror=true > + > + meson configure -Dbuildtype=debug > + > + meson configure -Dexamples=l3fwd,l2fwd > + > + meson configure -Dmax_lcores=8 > + > +NOTE: once meson has been run to configure a build in a directory, it > +cannot be run again on the same directory. Instead ``meson configure`` > +should be used to change the build settings within the directory, and when > +``ninja`` is called to do the build itself, it will trigger the necessary > +re-scan from meson. > + > +As well as those settings taken from ``meson configure``, other options > +such as the compiler to use can be passed via environment variables. For > +example: > + > + CC=clang meson clang-build > + > +NOTE: for more comprehensive overriding of compilers or other environment > +settings, the tools for cross-compilation may be considered. However, for > +basic overriding of the compiler etc., the above form works as expected. > + > + > +Performing the Build > +--------------------- > + > +Use ``ninja`` to perform the actual build inside the build folder > +previously configured. In most cases no arguments are necessary. > + > +Ninja accepts a number of flags which are similar to make. For example, to > +call ninja from outside the build folder, you can use ``ninja -C build``. > +Ninja also runs parallel builds by default, but you can limit this using > +the ``-j`` flag, e.g. ``ninja -j1 -v`` to do the build one step at a time, > +printing each command on a new line as it runs. > + > + > +Installing the Compiled Files > +------------------------------ > + > +Use ``ninja install`` to install the required DPDK files onto the system. > +The install prefix defaults to ``/usr/local`` but can be used as with other > +options above. The environment variable ``DEST_DIR`` can be used to adjust > +the root directory for the install, for example when packaging. > + > +With the base install directory, the individual directories for libraries > +and headers are configurable. By default, the following will be the > +installed layout: > + > + headers -> /usr/local/include > + libraries -> /usr/local/lib64 > + drivers -> /usr/local/lib64/dpdk/drivers > + libdpdk.pc -> /usr/local/lib64/pkgconfig > + > +For the drivers, these will also be symbolically linked into the library > +install directory also, so that ld.so can find them in cases where one ^^^^^^ multiple 'also' > +driver may depend on another, e.g. a NIC PMD depending upon the PCI bus > +driver. Within the EAL, the default search path for drivers will be set to > +the configured driver install path, so dynamically-linked applications can > +be run without having to pass in ``-d /path/to/driver`` options for > +standard drivers. > + > + > +Using the DPDK within an Application > +------------------------------------- > + > +To compile and link against DPDK within an application, pkg-config should > +be used to query the correct parameters. Examples of this are given in the > +makefiles for the example applications included with DPDK. They demonstrate > +how to link either against the DPDK shared libraries, or against the static > +versions of the same. > + > +From examples/helloworld/Makefile: > + > + PC_FILE := $(shell pkg-config --path libdpdk) > + CFLAGS += -O3 $(shell pkg-config --cflags libdpdk) > + LDFLAGS_SHARED = $(shell pkg-config --libs libdpdk) > + LDFLAGS_STATIC = -Wl,-Bstatic $(shell pkg-config --static --libs libdpdk) > + > + build/$(APP)-shared: $(SRCS-y) Makefile $(PC_FILE) | build > + $(CC) $(CFLAGS) $(SRCS-y) -o $@ $(LDFLAGS) $(LDFLAGS_SHARED) > + > + build/$(APP)-static: $(SRCS-y) Makefile $(PC_FILE) | build > + $(CC) $(CFLAGS) $(SRCS-y) -o $@ $(LDFLAGS) $(LDFLAGS_STATIC) > + > + build: > + @mkdir -p $@ > + > I will give this a try in a couple of days and post if I find any issues. Thanks.