From mboxrd@z Thu Jan  1 00:00:00 1970
Return-Path: <dev-bounces@dpdk.org>
Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124])
	by inbox.dpdk.org (Postfix) with ESMTP id 2BF30A0093;
	Sat, 21 May 2022 02:54:25 +0200 (CEST)
Received: from [217.70.189.124] (localhost [127.0.0.1])
	by mails.dpdk.org (Postfix) with ESMTP id 0F89A40222;
	Sat, 21 May 2022 02:54:25 +0200 (CEST)
Received: from mail-wr1-f45.google.com (mail-wr1-f45.google.com
 [209.85.221.45]) by mails.dpdk.org (Postfix) with ESMTP id 04EBC40156
 for <dev@dpdk.org>; Sat, 21 May 2022 02:54:23 +0200 (CEST)
Received: by mail-wr1-f45.google.com with SMTP id w4so13419238wrg.12
 for <dev@dpdk.org>; Fri, 20 May 2022 17:54:23 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112;
 h=mime-version:references:in-reply-to:from:date:message-id:subject:to
 :cc; bh=NPn26lietQhhZniJcdxHK1teLiLohvrZOWFPGsLQRUM=;
 b=eq7TytFp7nCYXAMVxLDaZXp/4qrDCxXyutqjvbgBYxCIqJkW6fmjlN1G1bAPZqtvWq
 B5yIRR5L9qHQsk3d2W2TyWHrhZcBMWPlfHwS/HD6kEptRafNnmYEus7hw0nSQmscbAN5
 NqWYsC9zmPll5zSHHr4jMIaUfZKt3978exJAZaQ90DyFrZCBW/U4StYH0V2L6hsixmBM
 inyBBLMQieLM7k0f5q3FLF6l1YxBm92EQZqdX1D8J1Ln+SodpUoZHcBqM9hwx6/gU4h6
 e6YoX5jwCe8I4FNS/k5SitKzzvYUMNIZeB/MOOAy5j4jg0IyiD2ZbC37STFbDtyAFxeW
 3Waw==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20210112;
 h=x-gm-message-state:mime-version:references:in-reply-to:from:date
 :message-id:subject:to:cc;
 bh=NPn26lietQhhZniJcdxHK1teLiLohvrZOWFPGsLQRUM=;
 b=8LDckyn7bRLkKz4gcZWdur1QJLrURPKAkIDaQmGUW0GtL+3ts9FXeiVo3OSZ0AhYeu
 /lOSOhFa2DO3UKygcnrkMfMXPEqL9fwiu28jwxJq8g9sPp0l8CiD8VSVwW5T3vGIn26A
 lRTO04rdJC8qLw7nSTAxK25FeJK3W9TM3sdv4Xu7nDSF0OooqreBZ4oIDG2flNkF9cFH
 pzIjvWS553viB3zcw6eXyMpUJolha5L/DSTINDd/UhW6eI3p0vl/awixK0fqVRKU8g4p
 +7tTGWyJgJnwIBxYAxTnm0njFowOYKjwQG0azuw+dlcLIntKfPBHVXlxvGjhMKkY/8+A
 9LmQ==
X-Gm-Message-State: AOAM532XNufUQlUxQOoFezf8c0RyzK73bBJsq4+whiDCA2YGyIBogdGf
 agrG4BDFyOpUUlgdw/lphaW9rbhof02H4lXzScuRNh8K
X-Google-Smtp-Source: ABdhPJwZkmQ9W/06zJqB43G8iOGnnwh3GRFyLw02bePNtZkgHALElcYOfYQp0UezWOqdfLcuUtcl4sQxXfYrplCyEGc=
X-Received: by 2002:a5d:47c8:0:b0:20c:95c6:23df with SMTP id
 o8-20020a5d47c8000000b0020c95c623dfmr10340248wrc.315.1653094462562; Fri, 20
 May 2022 17:54:22 -0700 (PDT)
MIME-Version: 1.0
References: <20211103221205.63175-1-stephen@networkplumber.org>
 <20220506144318.540584-1-bruce.richardson@intel.com>
In-Reply-To: <20220506144318.540584-1-bruce.richardson@intel.com>
From: Ben Magistro <koncept1@gmail.com>
Date: Fri, 20 May 2022 20:54:11 -0400
Message-ID: <CAKx8PBhT=6zhCNKDuCXhggu+8DkDAKQRAp8_kymdmDuk9LQnFg@mail.gmail.com>
Subject: Re: [PATCH v3] build: add definitions for use as meson subproject
To: Bruce Richardson <bruce.richardson@intel.com>
Cc: dev@dpdk.org, Stephen Hemminger <stephen@networkplumber.org>
Content-Type: multipart/alternative; boundary="00000000000038a5ae05df7b0c49"
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>,
 <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>,
 <mailto:dev-request@dpdk.org?subject=subscribe>
Errors-To: dev-bounces@dpdk.org

--00000000000038a5ae05df7b0c49
Content-Type: text/plain; charset="UTF-8"

Currently utilizing this in an upcoming set of changes for TLDK and all
seems to be working for fallback dependency support under both shared and
static linkage.

Reviewed-by: Ben Magistro <koncept1@gmail.com>
Tested-by: Ben Magistro <koncept1@gmail.com>

On Fri, May 6, 2022 at 10:43 AM Bruce Richardson <bruce.richardson@intel.com>
wrote:

> To allow other projects to easily use DPDK as a subproject, add in the
> necessary dependency definitions. Slightly different definitions are
> necessary for static and shared builds, since for shared builds the
> drivers should not be linked in, and the internal meson dependency
> objects are more complete.
>
> To use DPDK as a subproject fallback i.e. use installed DPDK if present,
> otherwise the shipped one, the following meson statement can be used:
>
> libdpdk = dependency('libdpdk', fallback: ['dpdk', 'dpdk_dep'])
>
> Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
> Signed-off-by: Bruce Richardson <bruce.richardson@intel.com>
> ---
>  buildtools/subproject/meson.build | 21 +++++++++++++++++++++
>  drivers/meson.build               |  4 ++++
>  lib/meson.build                   |  2 ++
>  meson.build                       |  6 ++++++
>  4 files changed, 33 insertions(+)
>  create mode 100644 buildtools/subproject/meson.build
>
> diff --git a/buildtools/subproject/meson.build
> b/buildtools/subproject/meson.build
> new file mode 100644
> index 0000000000..3192efaa40
> --- /dev/null
> +++ b/buildtools/subproject/meson.build
> @@ -0,0 +1,21 @@
> +# SPDX-License-Identifier: BSD-3-Clause
> +# Copyright(c) 2022 Intel Corporation
> +
> +message('DPDK subproject linking: ' + get_option('default_library'))
> +if get_option('default_library') == 'static'
> +    dpdk_dep = declare_dependency(
> +            version: meson.project_version(),
> +            dependencies: dpdk_static_lib_deps,
> +            # static library deps in DPDK build don't include "link_with"
> parameters,
> +            # so explicitly link-in both libs and drivers
> +            link_with: dpdk_static_libraries,
> +            link_whole: dpdk_drivers,
> +            link_args: dpdk_extra_ldflags)
> +else
> +    dpdk_dep = declare_dependency(
> +            version: meson.project_version(),
> +            # shared library deps include all necessary linking parameters
> +            dependencies: dpdk_shared_lib_deps)
> +endif
> +
> +libdpdk_dep = dpdk_dep
> diff --git a/drivers/meson.build b/drivers/meson.build
> index 1d8123b00c..db4d9c73bd 100644
> --- a/drivers/meson.build
> +++ b/drivers/meson.build
> @@ -245,6 +245,10 @@ foreach subpath:subdirs
>
>          set_variable('shared_@0@'.format(lib_name), shared_dep)
>          set_variable('static_@0@'.format(lib_name), static_dep)
> +        # for drivers, we only need to add dependency objects for static
> libs,
> +        # shared lib drivers are not linked in
> +        dpdk_static_lib_deps += static_dep
> +
>          dependency_name = ''.join(lib_name.split('rte_'))
>          if developer_mode
>              message('drivers/@0@: Defining dependency "@1@"'.format(
> diff --git a/lib/meson.build b/lib/meson.build
> index 24adbe44c9..c648f7d800 100644
> --- a/lib/meson.build
> +++ b/lib/meson.build
> @@ -266,6 +266,8 @@ foreach l:libraries
>
>      set_variable('shared_rte_' + name, shared_dep)
>      set_variable('static_rte_' + name, static_dep)
> +    dpdk_shared_lib_deps += shared_dep
> +    dpdk_static_lib_deps += static_dep
>      if developer_mode
>          message('lib/@0@: Defining dependency "@1@"'.format(l, name))
>      endif
> diff --git a/meson.build b/meson.build
> index 937f6110c0..6085e32a79 100644
> --- a/meson.build
> +++ b/meson.build
> @@ -36,6 +36,8 @@ dpdk_build_root = meson.current_build_dir()
>  dpdk_conf = configuration_data()
>  dpdk_libraries = []
>  dpdk_static_libraries = []
> +dpdk_shared_lib_deps = []
> +dpdk_static_lib_deps = []
>  dpdk_chkinc_headers = []
>  dpdk_driver_classes = []
>  dpdk_drivers = []
> @@ -103,6 +105,10 @@ configure_file(output: build_cfg,
>  # build pkg-config files for dpdk
>  subdir('buildtools/pkg-config')
>
> +if meson.is_subproject()
> +    subdir('buildtools/subproject')
> +endif
> +
>  # final output, list all the libs and drivers to be built
>  # this does not affect any part of the build, for information only.
>  output_message = '\n=================\nLibraries
> Enabled\n=================\n'
> --
> 2.34.1
>
>

--00000000000038a5ae05df7b0c49
Content-Type: text/html; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable

<div dir=3D"ltr">Currently utilizing this in an upcoming set of changes for=
 TLDK and all seems to be working for fallback dependency support under bot=
h shared and static linkage.<div><br></div><div>Reviewed-by: Ben Magistro &=
lt;<a href=3D"mailto:koncept1@gmail.com">koncept1@gmail.com</a>&gt;</div><d=
iv>Tested-by: Ben Magistro &lt;<a href=3D"mailto:koncept1@gmail.com">koncep=
t1@gmail.com</a>&gt;</div></div><br><div class=3D"gmail_quote"><div dir=3D"=
ltr" class=3D"gmail_attr">On Fri, May 6, 2022 at 10:43 AM Bruce Richardson =
&lt;<a href=3D"mailto:bruce.richardson@intel.com">bruce.richardson@intel.co=
m</a>&gt; wrote:<br></div><blockquote class=3D"gmail_quote" style=3D"margin=
:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"=
>To allow other projects to easily use DPDK as a subproject, add in the<br>
necessary dependency definitions. Slightly different definitions are<br>
necessary for static and shared builds, since for shared builds the<br>
drivers should not be linked in, and the internal meson dependency<br>
objects are more complete.<br>
<br>
To use DPDK as a subproject fallback i.e. use installed DPDK if present,<br=
>
otherwise the shipped one, the following meson statement can be used:<br>
<br>
libdpdk =3D dependency(&#39;libdpdk&#39;, fallback: [&#39;dpdk&#39;, &#39;d=
pdk_dep&#39;])<br>
<br>
Signed-off-by: Stephen Hemminger &lt;<a href=3D"mailto:stephen@networkplumb=
er.org" target=3D"_blank">stephen@networkplumber.org</a>&gt;<br>
Signed-off-by: Bruce Richardson &lt;<a href=3D"mailto:bruce.richardson@inte=
l.com" target=3D"_blank">bruce.richardson@intel.com</a>&gt;<br>
---<br>
=C2=A0buildtools/subproject/meson.build | 21 +++++++++++++++++++++<br>
=C2=A0drivers/meson.build=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =
=C2=A0|=C2=A0 4 ++++<br>
=C2=A0lib/meson.build=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=
=A0 =C2=A0 =C2=A0|=C2=A0 2 ++<br>
=C2=A0meson.build=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =
=C2=A0 =C2=A0 =C2=A0 =C2=A0|=C2=A0 6 ++++++<br>
=C2=A04 files changed, 33 insertions(+)<br>
=C2=A0create mode 100644 buildtools/subproject/meson.build<br>
<br>
diff --git a/buildtools/subproject/meson.build b/buildtools/subproject/meso=
n.build<br>
new file mode 100644<br>
index 0000000000..3192efaa40<br>
--- /dev/null<br>
+++ b/buildtools/subproject/meson.build<br>
@@ -0,0 +1,21 @@<br>
+# SPDX-License-Identifier: BSD-3-Clause<br>
+# Copyright(c) 2022 Intel Corporation<br>
+<br>
+message(&#39;DPDK subproject linking: &#39; + get_option(&#39;default_libr=
ary&#39;))<br>
+if get_option(&#39;default_library&#39;) =3D=3D &#39;static&#39;<br>
+=C2=A0 =C2=A0 dpdk_dep =3D declare_dependency(<br>
+=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 version: meson.project_version()=
,<br>
+=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 dependencies: dpdk_static_lib_de=
ps,<br>
+=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 # static library deps in DPDK bu=
ild don&#39;t include &quot;link_with&quot; parameters,<br>
+=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 # so explicitly link-in both lib=
s and drivers<br>
+=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 link_with: dpdk_static_libraries=
,<br>
+=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 link_whole: dpdk_drivers,<br>
+=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 link_args: dpdk_extra_ldflags)<b=
r>
+else<br>
+=C2=A0 =C2=A0 dpdk_dep =3D declare_dependency(<br>
+=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 version: meson.project_version()=
,<br>
+=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 # shared library deps include al=
l necessary linking parameters<br>
+=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 dependencies: dpdk_shared_lib_de=
ps)<br>
+endif<br>
+<br>
+libdpdk_dep =3D dpdk_dep<br>
diff --git a/drivers/meson.build b/drivers/meson.build<br>
index 1d8123b00c..db4d9c73bd 100644<br>
--- a/drivers/meson.build<br>
+++ b/drivers/meson.build<br>
@@ -245,6 +245,10 @@ foreach subpath:subdirs<br>
<br>
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0set_variable(&#39;shared_@0@&#39;.format(=
lib_name), shared_dep)<br>
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0set_variable(&#39;static_@0@&#39;.format(=
lib_name), static_dep)<br>
+=C2=A0 =C2=A0 =C2=A0 =C2=A0 # for drivers, we only need to add dependency =
objects for static libs,<br>
+=C2=A0 =C2=A0 =C2=A0 =C2=A0 # shared lib drivers are not linked in<br>
+=C2=A0 =C2=A0 =C2=A0 =C2=A0 dpdk_static_lib_deps +=3D static_dep<br>
+<br>
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0dependency_name =3D &#39;&#39;.join(lib_n=
ame.split(&#39;rte_&#39;))<br>
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0if developer_mode<br>
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0message(&#39;drivers/@0@: D=
efining dependency &quot;@1@&quot;&#39;.format(<br>
diff --git a/lib/meson.build b/lib/meson.build<br>
index 24adbe44c9..c648f7d800 100644<br>
--- a/lib/meson.build<br>
+++ b/lib/meson.build<br>
@@ -266,6 +266,8 @@ foreach l:libraries<br>
<br>
=C2=A0 =C2=A0 =C2=A0set_variable(&#39;shared_rte_&#39; + name, shared_dep)<=
br>
=C2=A0 =C2=A0 =C2=A0set_variable(&#39;static_rte_&#39; + name, static_dep)<=
br>
+=C2=A0 =C2=A0 dpdk_shared_lib_deps +=3D shared_dep<br>
+=C2=A0 =C2=A0 dpdk_static_lib_deps +=3D static_dep<br>
=C2=A0 =C2=A0 =C2=A0if developer_mode<br>
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0message(&#39;lib/@0@: Defining dependency=
 &quot;@1@&quot;&#39;.format(l, name))<br>
=C2=A0 =C2=A0 =C2=A0endif<br>
diff --git a/meson.build b/meson.build<br>
index 937f6110c0..6085e32a79 100644<br>
--- a/meson.build<br>
+++ b/meson.build<br>
@@ -36,6 +36,8 @@ dpdk_build_root =3D meson.current_build_dir()<br>
=C2=A0dpdk_conf =3D configuration_data()<br>
=C2=A0dpdk_libraries =3D []<br>
=C2=A0dpdk_static_libraries =3D []<br>
+dpdk_shared_lib_deps =3D []<br>
+dpdk_static_lib_deps =3D []<br>
=C2=A0dpdk_chkinc_headers =3D []<br>
=C2=A0dpdk_driver_classes =3D []<br>
=C2=A0dpdk_drivers =3D []<br>
@@ -103,6 +105,10 @@ configure_file(output: build_cfg,<br>
=C2=A0# build pkg-config files for dpdk<br>
=C2=A0subdir(&#39;buildtools/pkg-config&#39;)<br>
<br>
+if meson.is_subproject()<br>
+=C2=A0 =C2=A0 subdir(&#39;buildtools/subproject&#39;)<br>
+endif<br>
+<br>
=C2=A0# final output, list all the libs and drivers to be built<br>
=C2=A0# this does not affect any part of the build, for information only.<b=
r>
=C2=A0output_message =3D &#39;\n=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D\nLibraries Enabled\n=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D\n&#39;<br>
-- <br>
2.34.1<br>
<br>
</blockquote></div>

--00000000000038a5ae05df7b0c49--