baseband/turbo_sw: Option to build turbosw PMD without SDK

Message ID 1559756323-179855-2-git-send-email-nicolas.chautru@intel.com (mailing list archive)
State Superseded, archived
Headers
Series baseband/turbo_sw: Option to build turbosw PMD without SDK |

Checks

Context Check Description
ci/checkpatch success coding style OK
ci/mellanox-Performance-Testing success Performance Testing PASS
ci/intel-Performance-Testing success Performance Testing PASS

Commit Message

Chautru, Nicolas June 5, 2019, 5:38 p.m. UTC
  Adding compile flag to allow to build the turbo_sw PMD
without SDK libraries installed with limited capability.
Update of documentation for buidling steps.
Meson build support.

Signed-off-by: Nicolas Chautru <nicolas.chautru@intel.com>
---
 config/common_base                               |   3 +-
 doc/guides/bbdevs/turbo_sw.rst                   | 339 ++++++++++++-----------
 drivers/baseband/meson.build                     |  14 +-
 drivers/baseband/turbo_sw/Makefile               |  13 +-
 drivers/baseband/turbo_sw/bbdev_turbo_software.c |  39 ++-
 drivers/baseband/turbo_sw/meson.build            |  30 ++
 mk/rte.app.mk                                    |   3 +
 7 files changed, 268 insertions(+), 173 deletions(-)
 create mode 100644 drivers/baseband/turbo_sw/meson.build
  

Comments

Thomas Monjalon June 5, 2019, 5:47 p.m. UTC | #1
05/06/2019 19:38, Nicolas Chautru:
> Adding compile flag to allow to build the turbo_sw PMD
> without SDK libraries installed with limited capability.
> Update of documentation for buidling steps.
> Meson build support.

There are 3 different things which deserve 3 patches.

About the doc, I am surprised it looks to be fully rewritten.
I think you need to double check it.
  
Chautru, Nicolas June 5, 2019, 8:10 p.m. UTC | #2
Update v2 : Splitting into 3 patches as recommended
(ignore previous v2 which had a typo)

Based on discussion with maintainer, pushing first a patch to help
maintenance of the baseband_turbo_sw which had been lacking.
The documentation is clarified to point to steps on building the
SDK libraries which are now publicly available. (Cosmetic changes
to the webpage containing these SDK  will happen in parallel
based on feedback from maintainer).
A compile flag is added to be able to build the turbo_sw PMD
when the SDK libraries for AVX2 are installed or not. 
In both cases this can be compiled with gcc RTE_TARGET. 
Missing meson build support is also added. 

Note that additional BBDEV changes pushed in previous v1
https://patches.dpdk.org/project/dpdk/list/?series=4657
will be added in a separate v2 patchset which will
depend on this very patchset.

Nicolas Chautru (3):
  baseband/turbo_sw: option to build turbosw PMD without SDK
  docs/guides: updating turbo_sw building steps
  baseband/turbo_sw: meson build support for PMD driver

 config/common_base                               |  3 +-
 doc/guides/bbdevs/turbo_sw.rst                   | 84 +++++++++++++-----------
 drivers/baseband/meson.build                     |  2 +-
 drivers/baseband/turbo_sw/Makefile               | 13 ++--
 drivers/baseband/turbo_sw/bbdev_turbo_software.c | 39 ++++++++++-
 drivers/baseband/turbo_sw/meson.build            | 30 +++++++++
 mk/rte.app.mk                                    |  3 +
 7 files changed, 127 insertions(+), 47 deletions(-)
 create mode 100644 drivers/baseband/turbo_sw/meson.build
  

Patch

diff --git a/config/common_base b/config/common_base
index 6b96e0e..bc80209 100644
--- a/config/common_base
+++ b/config/common_base
@@ -523,6 +523,7 @@  CONFIG_RTE_PMD_PACKET_PREFETCH=y
 CONFIG_RTE_LIBRTE_BBDEV=y
 CONFIG_RTE_BBDEV_MAX_DEVS=128
 CONFIG_RTE_BBDEV_OFFLOAD_COST=y
+CONFIG_RTE_BBDEV_SDK_AVX2=n
 
 #
 # Compile PMD for NULL bbdev device
@@ -532,7 +533,7 @@  CONFIG_RTE_LIBRTE_PMD_BBDEV_NULL=y
 #
 # Compile PMD for turbo software bbdev device
 #
-CONFIG_RTE_LIBRTE_PMD_BBDEV_TURBO_SW=n
+CONFIG_RTE_LIBRTE_PMD_BBDEV_TURBO_SW=y
 
 #
 # Compile generic crypto device library
diff --git a/doc/guides/bbdevs/turbo_sw.rst b/doc/guides/bbdevs/turbo_sw.rst
index 29f7ec9..97ff888 100644
--- a/doc/guides/bbdevs/turbo_sw.rst
+++ b/doc/guides/bbdevs/turbo_sw.rst
@@ -1,158 +1,181 @@ 
-..  SPDX-License-Identifier: BSD-3-Clause
-    Copyright(c) 2017 Intel Corporation
-
-SW Turbo Poll Mode Driver
-=========================
-
-The SW Turbo PMD (**baseband_turbo_sw**) provides a poll mode bbdev driver that utilizes
-Intel optimized libraries for LTE Layer 1 workloads acceleration. This PMD
-supports the functions: Turbo FEC, Rate Matching and CRC functions.
-
-Features
---------
-
-SW Turbo PMD has support for the following capabilities:
-
-For the encode operation:
-
-* ``RTE_BBDEV_TURBO_CRC_24A_ATTACH``
-* ``RTE_BBDEV_TURBO_CRC_24B_ATTACH``
-* ``RTE_BBDEV_TURBO_RATE_MATCH``
-* ``RTE_BBDEV_TURBO_RV_INDEX_BYPASS``
-
-For the decode operation:
-
-* ``RTE_BBDEV_TURBO_SUBBLOCK_DEINTERLEAVE``
-* ``RTE_BBDEV_TURBO_CRC_TYPE_24B``
-* ``RTE_BBDEV_TURBO_POS_LLR_1_BIT_IN``
-* ``RTE_BBDEV_TURBO_NEG_LLR_1_BIT_IN``
-* ``RTE_BBDEV_TURBO_DEC_TB_CRC_24B_KEEP``
-* ``RTE_BBDEV_TURBO_EARLY_TERMINATION``
-
-
-Limitations
------------
-
-* In-place operations for Turbo encode and decode are not supported
-
-Installation
-------------
-
-FlexRAN SDK Download
-~~~~~~~~~~~~~~~~~~~~
-
-To build DPDK with the *baseband_turbo_sw* PMD the user is required to download
-the export controlled ``FlexRAN SDK`` Libraries. An account at `Intel Resource
-Design Center <https://www.intel.com/content/www/us/en/design/resource-design-center.html>`_
-needs to be registered.
-
-Once registered, the user needs to log in, and look for
-*Intel FlexRAN Software Release Package -18-09* to download or directly through
-this `link <https://cdrdv2.intel.com/v1/dl/getContent/605167>`_.
-
-After download is complete, the user needs to unpack and compile on their
-system before building DPDK.
-
-The following table maps DPDK versions with past FlexRAN SDK releases:
-
-.. _table_flexran_releases:
-
-.. table:: DPDK and FlexRAN SDK releases compliance
-
-   =====================  ============================
-   DPDK version           FlexRAN SDK release
-   =====================  ============================
-   18.02                  1.3.0
-   18.05                  1.4.0
-   18.08                  1.6.0
-   19.02                  18.09
-   =====================  ============================
-
-FlexRAN SDK Installation
-~~~~~~~~~~~~~~~~~~~~~~~~
-
-The following are pre-requisites for building FlexRAN SDK Libraries:
- (a) An AVX2 supporting machine
- (b) CentOS Linux release 7.2.1511 (Core) operating system
- (c) Intel ICC 18.0.1 20171018 compiler installed
-
-The following instructions should be followed in this exact order:
-
-#. Set the environment variables:
-
-    .. code-block:: console
-
-        source <path-to-icc-compiler-install-folder>/linux/bin/compilervars.sh intel64 -platform linux
-
-#. Extract the ``605167-flexran-18-09-tar.gz`` package:
-
-    .. code-block:: console
-
-        mkdir FlexRAN-18.09
-        tar xvzf 605167-flexran-18-09-tar.gz -C FlexRAN-18.09/
-
-#. Run the SDK extractor script and accept the license:
-
-    .. code-block:: console
-
-        cd <path-to-workspace>/FlexRAN-18.09/
-        ./SDK-18.09.sh
-
-#. Generate makefiles based on system configuration:
-
-    .. code-block:: console
-
-        cd <path-to-workspace>/FlexRAN-18.09/SDK-18.09/sdk/
-        ./create-makefiles-linux.sh
-
-#. A build folder is generated in this form ``build-<ISA>-<CC>``, enter that
-   folder and install:
-
-    .. code-block:: console
-
-        cd build-avx2-icc/
-        make && make install
-
-
-Initialization
---------------
-
-In order to enable this virtual bbdev PMD, the user must:
-
-* Build the ``FLEXRAN SDK`` libraries (explained in Installation section).
-
-* Export the environmental variables ``FLEXRAN_SDK`` to the path where the
-  FlexRAN SDK libraries were installed. And ``DIR_WIRELESS_SDK`` to the path
-  where the libraries were extracted.
-
-Example:
-
-.. code-block:: console
-
-    export FLEXRAN_SDK=<path-to-workspace>/FlexRAN-18.09/SDK-18.09/sdk/build-avx2-icc/install
-    export DIR_WIRELESS_SDK=<path-to-workspace>/FlexRAN-18.09/SDK-18.09/sdk/
-
-
-* Set ``CONFIG_RTE_LIBRTE_PMD_BBDEV_TURBO_SW=y`` in DPDK common configuration
-  file ``config/common_base``.
-
-To use the PMD in an application, user must:
-
-- Call ``rte_vdev_init("baseband_turbo_sw")`` within the application.
-
-- Use ``--vdev="baseband_turbo_sw"`` in the EAL options, which will call ``rte_vdev_init()`` internally.
-
-The following parameters (all optional) can be provided in the previous two calls:
-
-* ``socket_id``: Specify the socket where the memory for the device is going to be allocated
-  (by default, *socket_id* will be the socket where the core that is creating the PMD is running on).
-
-* ``max_nb_queues``: Specify the maximum number of queues in the device (default is ``RTE_MAX_LCORE``).
-
-Example:
-~~~~~~~~
-
-.. code-block:: console
-
-    ./test-bbdev.py -e="--vdev=baseband_turbo_sw,socket_id=0,max_nb_queues=8" \
-    -c validation -v ./turbo_*_default.data
+..  SPDX-License-Identifier: BSD-3-Clause
+    Copyright(c) 2017 Intel Corporation
+
+SW FEC Poll Mode Driver
+=========================
+
+The SW FEC PMD (**baseband_turbo_sw**) provides a software only poll mode bbdev
+driver that can optionally utilize Intel optimized libraries for LTE and 5GNR
+Layer 1 workloads acceleration.
+
+Note that the driver can also be built without any dependency with reduced
+functionality for maintenance purpose.
+
+To enable linking to the SDK libraries see detailed installation section below.
+Two flags can be enabled depending on whether the target machine can support
+AVX2 and AVX512 instructions sets and the related SDK libraries for vectorized
+signal processing functions are installed :
+- CONFIG_RTE_BBDEV_SDK_AVX2
+- CONFIG_RTE_BBDEV_SDK_AVX512
+By default these 2 flags are disabled by default. For AVX2 machine and SDK
+library installed then the first flag can be enabled. For AVX512 machine and
+SDK library installed then both flags can be enabled for full real time capability.
+
+This PMD supports the functions: FEC, Rate Matching and CRC functions detailed
+in the Features section.
+
+Features
+--------
+
+SW FEC PMD can support for the following capabilities when the SDK libraries
+are used:
+
+For the LTE encode operation:
+
+* ``RTE_BBDEV_TURBO_CRC_24A_ATTACH``
+* ``RTE_BBDEV_TURBO_CRC_24B_ATTACH``
+* ``RTE_BBDEV_TURBO_RATE_MATCH``
+* ``RTE_BBDEV_TURBO_RV_INDEX_BYPASS``
+
+For the LTE decode operation:
+
+* ``RTE_BBDEV_TURBO_SUBBLOCK_DEINTERLEAVE``
+* ``RTE_BBDEV_TURBO_CRC_TYPE_24B``
+* ``RTE_BBDEV_TURBO_POS_LLR_1_BIT_IN``
+* ``RTE_BBDEV_TURBO_NEG_LLR_1_BIT_IN``
+* ``RTE_BBDEV_TURBO_DEC_TB_CRC_24B_KEEP``
+* ``RTE_BBDEV_TURBO_EARLY_TERMINATION``
+
+For the 5G NR LDPC encode operation:
+
+* ``RTE_BBDEV_LDPC_RATE_MATCH``
+* ``RTE_BBDEV_LDPC_CRC_24A_ATTACH``
+* ``RTE_BBDEV_LDPC_CRC_24B_ATTACH``
+
+For the 5G NR LDPC decode operation:
+
+* ``RTE_BBDEV_LDPC_CRC_TYPE_24B_CHECK``
+* ``RTE_BBDEV_LDPC_CRC_TYPE_24A_CHECK``
+* ``RTE_BBDEV_LDPC_CRC_TYPE_24B_DROP``
+* ``RTE_BBDEV_LDPC_HQ_COMBINE_IN_ENABLE``
+* ``RTE_BBDEV_LDPC_HQ_COMBINE_OUT_ENABLE``
+* ``RTE_BBDEV_LDPC_ITERATION_STOP_ENABLE``
+
+Limitations
+-----------
+
+* In-place operations for encode and decode are not supported
+
+Installation
+------------
+
+FlexRAN FEC SDK Download
+~~~~~~~~~~~~~~~~~~~~
+
+As an option it is possible to link this driver with FleXRAN SDK libraries
+which can enable real time signal processing using AVX instructions.
+
+These libraries are available through this link `link <https://software.intel.com/en-us/articles/flexran-lte-and-5g-nr-fec-software-development-kit-modules>`_.
+
+After download is complete, the user needs to unpack and compile on their
+system before building DPDK.
+
+The following table maps DPDK versions with past FlexRAN SDK releases:
+
+.. _table_flexran_releases:
+
+.. table:: DPDK and FlexRAN FEC SDK releases compliance
+
+   =====================  ============================
+   DPDK version           FlexRAN FEC SDK release
+   =====================  ============================
+   19.08                  19.04
+   =====================  ============================
+
+FlexRAN SDK Installation
+~~~~~~~~~~~~~~~~~~~~~~~~
+
+Note that the installation of these libraries is optional.
+
+The following are pre-requisites for building FlexRAN SDK Libraries:
+ (a) An AVX2 or AVX512 supporting machine
+ (b) CentOS Linux release 7.2.1511 (Core) operating system is advised
+ (c) Intel ICC 18.0.1 20171018 compiler or more recent and related libraries
+     ICC is available with a free community license `link <https://software.intel.com/en-us/system-studio/choose-download#technical>`_.
+
+The following instructions should be followed in this exact order:
+
+#. Set the environment variables:
+
+    .. code-block:: console
+
+        source <path-to-icc-compiler-install-folder>/linux/bin/compilervars.sh intel64 -platform linux
+
+#. Run the SDK extractor script and accept the license:
+
+    .. code-block:: console
+
+        cd <path-to-workspace>
+        ./FlexRAN-FEC-SDK-19-04.sh
+
+#. Generate makefiles based on system configuration:
+
+    .. code-block:: console
+
+        cd <path-to-workspace>/FlexRAN-FEC-SDK-19-04/sdk/
+        ./create-makefiles-linux.sh
+
+#. A build folder is generated in this form ``build-<ISA>-<CC>``, enter that
+   folder and install:
+
+    .. code-block:: console
+
+        cd build-avx512-icc/
+        make && make install
+
+Initialization
+--------------
+
+In order to enable this virtual bbdev PMD, the user may:
+
+* Build the ``FLEXRAN SDK`` libraries (explained in Installation section).
+
+* Export the environmental variables ``FLEXRAN_SDK`` to the path where the
+  FlexRAN SDK libraries were installed. And ``DIR_WIRELESS_SDK`` to the path
+  where the libraries were extracted.
+
+Example:
+
+.. code-block:: console
+
+    export FLEXRAN_SDK=<path-to-workspace>/FlexRAN-FEC-SDK-19-04/sdk/build-avx2-icc/install
+    export DIR_WIRELESS_SDK=<path-to-workspace>/FlexRAN-FEC-SDK-19-04/sdk/build-avx2-icc/
+
+* Set ``CONFIG_RTE_BBDEV_SDK_AVX2=y`` and ``CONFIG_RTE_BBDEV_SDK_AVX512=y``
+  in DPDK common configuration file ``config/common_base`` to be able to use
+  the SDK libraries as mentioned above.
+  For AVX2 machine it is possible to only enable CONFIG_RTE_BBDEV_SDK_AVX2
+  for limited 4G functionality.
+  If no flag are set the PMD driver will still build but its capabilities
+  will be limited accordingly.
+
+To use the PMD in an application, user must:
+
+- Call ``rte_vdev_init("baseband_turbo_sw")`` within the application.
+
+- Use ``--vdev="baseband_turbo_sw"`` in the EAL options, which will call ``rte_vdev_init()`` internally.
+
+The following parameters (all optional) can be provided in the previous two calls:
+
+* ``socket_id``: Specify the socket where the memory for the device is going to be allocated
+  (by default, *socket_id* will be the socket where the core that is creating the PMD is running on).
+
+* ``max_nb_queues``: Specify the maximum number of queues in the device (default is ``RTE_MAX_LCORE``).
+
+Example:
+~~~~~~~~
+
+.. code-block:: console
+
+    ./test-bbdev.py -e="--vdev=baseband_turbo_sw,socket_id=0,max_nb_queues=8" \
+    -c validation -v ./turbo_*_default.data
diff --git a/drivers/baseband/meson.build b/drivers/baseband/meson.build
index 52489df..d2641d6 100644
--- a/drivers/baseband/meson.build
+++ b/drivers/baseband/meson.build
@@ -1,7 +1,7 @@ 
-# SPDX-License-Identifier: BSD-3-Clause
-# Copyright(c) 2018 Luca Boccassi <bluca@debian.org>
-
-drivers = ['null']
-
-config_flag_fmt = 'RTE_LIBRTE_@0@_PMD'
-driver_name_fmt = 'rte_pmd_@0@'
+# SPDX-License-Identifier: BSD-3-Clause
+# Copyright(c) 2018 Luca Boccassi <bluca@debian.org>
+
+drivers = ['null', 'turbo_sw']
+
+config_flag_fmt = 'RTE_LIBRTE_@0@_PMD'
+driver_name_fmt = 'rte_pmd_@0@'
diff --git a/drivers/baseband/turbo_sw/Makefile b/drivers/baseband/turbo_sw/Makefile
index d364677..414d0d9 100644
--- a/drivers/baseband/turbo_sw/Makefile
+++ b/drivers/baseband/turbo_sw/Makefile
@@ -3,9 +3,6 @@ 
 
 include $(RTE_SDK)/mk/rte.vars.mk
 
-ifeq ($(FLEXRAN_SDK),)
-$(error "Please define FLEXRAN_SDK environment variable")
-endif
 
 # library name
 LIB = librte_pmd_bbdev_turbo_sw.a
@@ -21,17 +18,21 @@  LDLIBS += -lrte_bus_vdev
 # versioning export map
 EXPORT_MAP := rte_pmd_bbdev_turbo_sw_version.map
 
-# external library dependencies
+# external library dependencies if available
+ifeq ($(CONFIG_RTE_BBDEV_SDK_AVX2),y)
+ifeq ($(FLEXRAN_SDK),)
+$(error "Please define FLEXRAN_SDK environment variable")
+endif
 CFLAGS += -I$(FLEXRAN_SDK)/lib_common
 CFLAGS += -I$(FLEXRAN_SDK)/lib_turbo
 CFLAGS += -I$(FLEXRAN_SDK)/lib_crc
 CFLAGS += -I$(FLEXRAN_SDK)/lib_rate_matching
-
 LDLIBS += -L$(FLEXRAN_SDK)/lib_turbo -lturbo
 LDLIBS += -L$(FLEXRAN_SDK)/lib_crc -lcrc
 LDLIBS += -L$(FLEXRAN_SDK)/lib_rate_matching -lrate_matching
 LDLIBS += -L$(FLEXRAN_SDK)/lib_common -lcommon
-LDLIBS += -lstdc++ -lirc -limf -lipps
+LDLIBS += -lstdc++ -lirc -limf -lipps -lsvml
+endif
 
 # library version
 LIBABIVER := 1
diff --git a/drivers/baseband/turbo_sw/bbdev_turbo_software.c b/drivers/baseband/turbo_sw/bbdev_turbo_software.c
index 5204a77..4781de0 100644
--- a/drivers/baseband/turbo_sw/bbdev_turbo_software.c
+++ b/drivers/baseband/turbo_sw/bbdev_turbo_software.c
@@ -14,10 +14,11 @@ 
 #include <rte_bbdev.h>
 #include <rte_bbdev_pmd.h>
 
+#ifdef RTE_BBDEV_SDK_AVX2
 #include <phy_turbo.h>
 #include <phy_crc.h>
 #include <phy_rate_match.h>
-#include <divide.h>
+#endif
 
 #define DRIVER_NAME baseband_turbo_sw
 
@@ -143,6 +144,7 @@  struct turbo_sw_queue {
 	struct bbdev_private *internals = dev->data->dev_private;
 
 	static const struct rte_bbdev_op_cap bbdev_capabilities[] = {
+#ifdef RTE_BBDEV_SDK_AVX2
 		{
 			.type = RTE_BBDEV_OP_TURBO_DEC,
 			.cap.turbo_dec = {
@@ -172,6 +174,7 @@  struct turbo_sw_queue {
 				.num_buffers_dst = RTE_BBDEV_MAX_CODE_BLOCKS,
 			}
 		},
+#endif
 		RTE_BBDEV_END_OF_CAPABILITIES_LIST()
 	};
 
@@ -472,6 +475,7 @@  struct turbo_sw_queue {
 		struct rte_mbuf *m_out, uint16_t in_offset, uint16_t out_offset,
 		uint16_t in_length, struct rte_bbdev_stats *q_stats)
 {
+#ifdef RTE_BBDEV_SDK_AVX2
 	int ret;
 	int16_t k_idx;
 	uint16_t m;
@@ -724,6 +728,22 @@  struct turbo_sw_queue {
 		}
 		*tmp_out = 0;
 	}
+#else
+	RTE_SET_USED(q);
+	RTE_SET_USED(op);
+	RTE_SET_USED(r);
+	RTE_SET_USED(c);
+	RTE_SET_USED(k);
+	RTE_SET_USED(ncb);
+	RTE_SET_USED(e);
+	RTE_SET_USED(m_in);
+	RTE_SET_USED(m_out_head);
+	RTE_SET_USED(m_out);
+	RTE_SET_USED(in_offset);
+	RTE_SET_USED(out_offset);
+	RTE_SET_USED(in_length);
+	RTE_SET_USED(q_stats);
+#endif
 }
 
 static inline void
@@ -856,6 +876,7 @@  struct turbo_sw_queue {
 		uint16_t crc24_overlap, uint16_t in_length,
 		struct rte_bbdev_stats *q_stats)
 {
+#ifdef RTE_BBDEV_SDK_AVX2
 	int ret;
 	int32_t k_idx;
 	int32_t iter_cnt;
@@ -972,6 +993,22 @@  struct turbo_sw_queue {
 		rte_bbdev_log(ERR, "Turbo Decoder failed");
 		return;
 	}
+#else
+	RTE_SET_USED(q);
+	RTE_SET_USED(op);
+	RTE_SET_USED(c);
+	RTE_SET_USED(k);
+	RTE_SET_USED(kw);
+	RTE_SET_USED(m_in);
+	RTE_SET_USED(m_out_head);
+	RTE_SET_USED(m_out);
+	RTE_SET_USED(in_offset);
+	RTE_SET_USED(out_offset);
+	RTE_SET_USED(check_crc_24b);
+	RTE_SET_USED(crc24_overlap);
+	RTE_SET_USED(in_length);
+	RTE_SET_USED(q_stats);
+#endif
 }
 
 static inline void
diff --git a/drivers/baseband/turbo_sw/meson.build b/drivers/baseband/turbo_sw/meson.build
new file mode 100644
index 0000000..9b4fe34
--- /dev/null
+++ b/drivers/baseband/turbo_sw/meson.build
@@ -0,0 +1,30 @@ 
+# SPDX-License-Identifier: BSD-3-Clause
+# Copyright(c) 2019 Intel Corporation
+
+path = get_option('flexran_sdk')
+
+if dpdk_conf.has('RTE_BBDEV_SDK_AVX2')
+	lib = cc.find_library('libturbo', dirs: [path + '/lib_turbo'], required: false)
+	if not lib.found()
+		build = false
+	else
+		ext_deps += cc.find_library('libturbo', dirs: [path + '/lib_turbo'], required: true)
+		ext_deps += cc.find_library('libcrc', dirs: [path + '/lib_crc'], required: true)
+		ext_deps += cc.find_library('librate_matching', dirs: [path + '/lib_rate_matching'], required: true)
+		ext_deps += cc.find_library('libcommon', dirs: [path + '/lib_common'], required: true)
+		ext_deps += cc.find_library('libstdc++', required: true)
+		ext_deps += cc.find_library('libirc', required: true)
+		ext_deps += cc.find_library('libimf', required: true)
+		ext_deps += cc.find_library('libipps', required: true)
+		ext_deps += cc.find_library('libsvml', required: true)
+		includes += include_directories(path + '/lib_turbo')
+		includes += include_directories(path + '/lib_crc')
+		includes += include_directories(path + '/lib_rate_matching')
+		includes += include_directories(path + '/lib_common')
+	endif
+endif
+
+deps += ['bbdev', 'bus_vdev', 'ring']
+name = 'bbdev_turbo_sw'
+allow_experimental_apis = true
+sources = files('bbdev_turbo_software.c')
diff --git a/mk/rte.app.mk b/mk/rte.app.mk
index 7c9b4b5..878cc31 100644
--- a/mk/rte.app.mk
+++ b/mk/rte.app.mk
@@ -221,11 +221,14 @@  _LDLIBS-$(CONFIG_RTE_LIBRTE_PMD_BBDEV_NULL)     += -lrte_pmd_bbdev_null
 
 # TURBO SOFTWARE PMD is dependent on the FLEXRAN library
 _LDLIBS-$(CONFIG_RTE_LIBRTE_PMD_BBDEV_TURBO_SW) += -lrte_pmd_bbdev_turbo_sw
+ifeq ($(CONFIG_RTE_BBDEV_SDK_AVX2),y)
+# Dependency on the FLEXRAN SDK library if available
 _LDLIBS-$(CONFIG_RTE_LIBRTE_PMD_BBDEV_TURBO_SW) += -L$(FLEXRAN_SDK)/lib_crc -lcrc
 _LDLIBS-$(CONFIG_RTE_LIBRTE_PMD_BBDEV_TURBO_SW) += -L$(FLEXRAN_SDK)/lib_turbo -lturbo
 _LDLIBS-$(CONFIG_RTE_LIBRTE_PMD_BBDEV_TURBO_SW) += -L$(FLEXRAN_SDK)/lib_rate_matching -lrate_matching
 _LDLIBS-$(CONFIG_RTE_LIBRTE_PMD_BBDEV_TURBO_SW) += -L$(FLEXRAN_SDK)/lib_common -lcommon
 _LDLIBS-$(CONFIG_RTE_LIBRTE_PMD_BBDEV_TURBO_SW) += -lirc -limf -lstdc++ -lipps
+endif # CONFIG_RTE_BBDEV_SDK_AVX2
 endif # CONFIG_RTE_LIBRTE_BBDEV
 
 ifeq ($(CONFIG_RTE_LIBRTE_CRYPTODEV),y)