From patchwork Mon Aug 14 09:51:40 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Bruce Richardson X-Patchwork-Id: 27547 Return-Path: X-Original-To: patchwork@dpdk.org Delivered-To: patchwork@dpdk.org Received: from [92.243.14.124] (localhost [IPv6:::1]) by dpdk.org (Postfix) with ESMTP id AA33199A0; Mon, 14 Aug 2017 12:03:46 +0200 (CEST) Received: from mga02.intel.com (mga02.intel.com [134.134.136.20]) by dpdk.org (Postfix) with ESMTP id AA55E9171 for ; Mon, 14 Aug 2017 12:03:22 +0200 (CEST) Received: from orsmga004.jf.intel.com ([10.7.209.38]) by orsmga101.jf.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 14 Aug 2017 03:03:21 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.41,372,1498546800"; d="scan'208";a="118723744" Received: from silpixa00399126.ir.intel.com (HELO silpixa00399126.ger.corp.intel.com) ([10.237.223.223]) by orsmga004.jf.intel.com with ESMTP; 14 Aug 2017 03:03:20 -0700 From: Bruce Richardson To: dev@dpdk.org Cc: thomas@monjalon.net, Bruce Richardson Date: Mon, 14 Aug 2017 10:51:40 +0100 Message-Id: <20170814095208.166496-13-bruce.richardson@intel.com> X-Mailer: git-send-email 2.13.4 In-Reply-To: <20170814095208.166496-1-bruce.richardson@intel.com> References: <20170814095208.166496-1-bruce.richardson@intel.com> Subject: [dpdk-dev] [RFCv2 12/40] build: generalize net driver build to higher level 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: , Errors-To: dev-bounces@dpdk.org Sender: "dev" Move the logic for generating the pmdinfo file and the driver library itself to the meson.build file at the driver/net level, to avoid duplicating code. Signed-off-by: Bruce Richardson --- drivers/net/i40e/base/meson.build | 2 +- drivers/net/i40e/meson.build | 31 ++++--------------------- drivers/net/meson.build | 48 ++++++++++++++++++++++++++++++++++++++- 3 files changed, 52 insertions(+), 29 deletions(-) diff --git a/drivers/net/i40e/base/meson.build b/drivers/net/i40e/base/meson.build index 43399cb11..69f55497e 100644 --- a/drivers/net/i40e/base/meson.build +++ b/drivers/net/i40e/base/meson.build @@ -43,7 +43,7 @@ error_cflags = ['-Wno-sign-compare', '-Wno-unused-value', '-Wno-format', '-Wno-unused-but-set-variable'] -c_args = i40e_cflags +c_args = cflags foreach flag: error_cflags if cc.has_argument(flag) c_args += flag diff --git a/drivers/net/i40e/meson.build b/drivers/net/i40e/meson.build index 7d103868d..4652b8ac9 100644 --- a/drivers/net/i40e/meson.build +++ b/drivers/net/i40e/meson.build @@ -29,12 +29,13 @@ # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -i40e_cflags = ['-DPF_DRIVER', +cflags = ['-DPF_DRIVER', '-DVF_DRIVER', '-DINTEGRATED_VF', '-DX722_A0_SUPPORT'] subdir('base') +libs = [base_lib] sources = files( 'i40e_ethdev.c', @@ -56,31 +57,7 @@ if arch_subdir == 'x86' sources += files('i40e_rxtx_vec_sse.c') endif -install_headers('rte_pmd_i40e.h') - -pmdinfogen_srcs = run_command('grep', '--files-with-matches', - 'RTE_PMD_REGISTER_.*(.*)', sources).stdout().strip().split() -foreach src: pmdinfogen_srcs - out_filename = '@0@.pmd.c'.format(src.split('/')[-1]) - tmp_lib = static_library('tmp_@0@'.format(src.underscorify()), - src, include_directories: include_directories('base'), - dependencies: deps, - c_args: i40e_cflags) - sources += custom_target(out_filename, - command: [pmdinfo, tmp_lib.full_path(), '@OUTPUT@', pmdinfogen], - output: out_filename, - depends: [pmdinfogen, tmp_lib]) -endforeach +includes = include_directories('base', '.') -i40e_lib = library('rte_pmd_i40e', sources, - include_directories: include_directories('base'), - dependencies: deps, - link_with: base_lib, - c_args: i40e_cflags, - install: true, - install_dir: 'dpdk/drivers') - -dpdk_drivers += i40e_lib +install_headers('rte_pmd_i40e.h') -i40e_pmd = declare_dependency(link_with: i40e_lib, - include_directories: include_directories('.')) diff --git a/drivers/net/meson.build b/drivers/net/meson.build index 22237b1aa..db242d71b 100644 --- a/drivers/net/meson.build +++ b/drivers/net/meson.build @@ -29,4 +29,50 @@ # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -subdir('i40e') +drivers = ['i40e'] + +foreach drv:drivers + dpdk_conf.set('RTE_LIBRTE_@0@_PMD'.format(drv.to_upper()),1) + + # set up empty variables used for build + sources = [] + libs = [] + cflags = [] + deps = [] + includes = [] + + # pull in driver directory which should assign to each of the above + subdir(drv) + + # generate pmdinfo sources + pmdinfogen_srcs = run_command('grep', '--files-with-matches', + 'RTE_PMD_REGISTER_.*(.*)', sources).stdout().strip().split() + foreach src: pmdinfogen_srcs + out_filename = '@0@.pmd.c'.format(src.split('/')[-1]) + tmp_lib = static_library('tmp_@0@'.format(src.underscorify()), + src, include_directories: includes, + dependencies: deps, + c_args: cflags) + sources += custom_target(out_filename, + command: [pmdinfo, tmp_lib.full_path(), '@OUTPUT@', pmdinfogen], + output: out_filename, + depends: [pmdinfogen, tmp_lib]) + endforeach + + # now build the driver itself, and add to the drivers list + lib = library('rte_pmd_@0@'.format(drv), sources, + include_directories: includes, + dependencies: deps, + link_with: libs, + c_args: cflags, + install: true, + install_dir: driver_install_path) + + dpdk_drivers += lib + + # create a dependency object and add it to the global dictionary so + # testpmd or other built-in apps can find it if necessary + set_variable('dep_pmd_@0@'.format(drv), + declare_dependency(link_with: lib, + include_directories: includes)) +endforeach