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>></div><d= iv>Tested-by: Ben Magistro <<a href=3D"mailto:koncept1@gmail.com">koncep= t1@gmail.com</a>></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 = <<a href=3D"mailto:bruce.richardson@intel.com">bruce.richardson@intel.co= m</a>> 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('libdpdk', fallback: ['dpdk', 'd= pdk_dep'])<br> <br> Signed-off-by: Stephen Hemminger <<a href=3D"mailto:stephen@networkplumb= er.org" target=3D"_blank">stephen@networkplumber.org</a>><br> Signed-off-by: Bruce Richardson <<a href=3D"mailto:bruce.richardson@inte= l.com" target=3D"_blank">bruce.richardson@intel.com</a>><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('DPDK subproject linking: ' + get_option('default_libr= ary'))<br> +if get_option('default_library') =3D=3D 'static'<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't include "link_with" 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('shared_@0@'.format(= lib_name), shared_dep)<br> =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0set_variable('static_@0@'.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 ''.join(lib_n= ame.split('rte_'))<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('drivers/@0@: D= efining dependency "@1@"'.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('shared_rte_' + name, shared_dep)<= br> =C2=A0 =C2=A0 =C2=A0set_variable('static_rte_' + 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('lib/@0@: Defining dependency= "@1@"'.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('buildtools/pkg-config')<br> <br> +if meson.is_subproject()<br> +=C2=A0 =C2=A0 subdir('buildtools/subproject')<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 '\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'<br> -- <br> 2.34.1<br> <br> </blockquote></div> --00000000000038a5ae05df7b0c49--