From patchwork Mon Sep 13 16:44:38 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Cristian Dumitrescu X-Patchwork-Id: 98789 X-Patchwork-Delegate: thomas@monjalon.net Return-Path: 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]) by inbox.dpdk.org (Postfix) with ESMTP id EED62A0C45; Mon, 13 Sep 2021 18:46:57 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 4663C411A1; Mon, 13 Sep 2021 18:45:11 +0200 (CEST) Received: from mga12.intel.com (mga12.intel.com [192.55.52.136]) by mails.dpdk.org (Postfix) with ESMTP id 838124117F for ; Mon, 13 Sep 2021 18:45:05 +0200 (CEST) X-IronPort-AV: E=McAfee;i="6200,9189,10106"; a="201239187" X-IronPort-AV: E=Sophos;i="5.85,290,1624345200"; d="scan'208";a="201239187" Received: from fmsmga008.fm.intel.com ([10.253.24.58]) by fmsmga106.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 13 Sep 2021 09:45:05 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.85,290,1624345200"; d="scan'208";a="507429233" Received: from silpixa00400573.ir.intel.com (HELO silpixa00400573.ger.corp.intel.com) ([10.237.223.107]) by fmsmga008.fm.intel.com with ESMTP; 13 Sep 2021 09:45:04 -0700 From: Cristian Dumitrescu To: dev@dpdk.org Date: Mon, 13 Sep 2021 17:44:38 +0100 Message-Id: <20210913164443.16875-19-cristian.dumitrescu@intel.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20210913164443.16875-1-cristian.dumitrescu@intel.com> References: <20210910133713.93103-1-cristian.dumitrescu@intel.com> <20210913164443.16875-1-cristian.dumitrescu@intel.com> Subject: [dpdk-dev] [PATCH V3 19/24] pipeline: introduce pipeline compilation X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 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" Lay the foundation to generate C code for the pipeline: C functions for actions and custom instructions are generated, built as shared object library and loaded into the pipeline. Signed-off-by: Cristian Dumitrescu --- lib/pipeline/rte_swx_pipeline.c | 44 +++++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) diff --git a/lib/pipeline/rte_swx_pipeline.c b/lib/pipeline/rte_swx_pipeline.c index 9afe42ed25..392e2cf1bc 100644 --- a/lib/pipeline/rte_swx_pipeline.c +++ b/lib/pipeline/rte_swx_pipeline.c @@ -8977,6 +8977,9 @@ rte_swx_pipeline_instructions_config(struct rte_swx_pipeline *p, return 0; } +static int +pipeline_compile(struct rte_swx_pipeline *p); + int rte_swx_pipeline_build(struct rte_swx_pipeline *p) { @@ -9046,6 +9049,9 @@ rte_swx_pipeline_build(struct rte_swx_pipeline *p) goto error; p->build_done = 1; + + pipeline_compile(p); + return 0; error: @@ -9789,3 +9795,41 @@ rte_swx_ctl_meter_stats_read(struct rte_swx_pipeline *p, return 0; } + +/* + * Pipeline compilation. + */ +static int +pipeline_codegen(struct rte_swx_pipeline *p) +{ + FILE *f = NULL; + + if (!p) + return -EINVAL; + + /* Create the .c file. */ + f = fopen("/tmp/pipeline.c", "w"); + if (!f) + return -EIO; + + /* Include the .h file. */ + fprintf(f, "#include \"rte_swx_pipeline_internal.h\"\n"); + + /* Close the .c file. */ + fclose(f); + + return 0; +} + +static int +pipeline_compile(struct rte_swx_pipeline *p) +{ + int status = 0; + + /* Code generation. */ + status = pipeline_codegen(p); + if (status) + return status; + + return status; +}