diff --git a/CMakeLists.txt b/CMakeLists.txt
index 116b8a55d2..7da5bbc5e5 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -140,29 +140,6 @@ set (OPENAIR_BIN_DIR ${CMAKE_CURRENT_BINARY_DIR}${CMAKE_FILES_DIRECTORY})
project (OpenAirInterface)
-##############################################
-# Base CUDA setting
-##############################################
-find_package(CUDA)
-if (CUDA_FOUND)
- message ("cuda include ${CUDA_INCLUDE_DIRS}")
- message ("cuda library ${CUDA_LIBRARY_DIRS}")
-
- add_definitions("-L/usr/local/cuda/lib64")
-
- SET(CUDA_NVCC_FLAGS
- "${CUDA_NVCC_FLAGS};-arch=sm_60;")
-
- # Disable warnings for CUDA
- SET(CUDA_NVCC_FLAGS "${CUDA_NVCC_FLAGS};-lpthread;-w;-O3;--default-stream;per-thread;-I/usr/local/cuda/inc;-L/usr/local/cuda/lib -lcutil;-rdc=true;-lcudadevrt")
- SET(CUDA_VERBOSE_BUILD ON)
-
- SET(CUDA_SEPARABLE_COMPILATION ON)
-
-else (CUDA_FOUND)
- message ("No CUDA tool installed")
-endif ()
-
####################################################
# compilation flags
#############################################
@@ -618,26 +595,19 @@ target_link_libraries(benetel_5g PRIVATE asn1_nr_rrc asn1_lte_rrc)
# LDPC offload library
##########################################################
-# there is no generic way to test for T1 Offload, it simply comes with the
-# shared object
-if (EXISTS "/usr/local/lib64/librte_pmd_hpac_sdfec_pmd.so")
- set(T1_OFFLOAD_FOUND TRUE)
-else()
- set(T1_OFFLOAD_FOUND FALSE)
+add_boolean_option(ENABLE_LDPC_T1 OFF "Build support for LDPC Offload to T1 library")
+if (ENABLE_LDPC_T1)
+ pkg_check_modules(LIBDPDK_T1 REQUIRED libdpdk=20.05.0)
+ find_library(T1 NAMES rte_pmd_hpac_sdfec_pmd REQUIRED)
+ if (NOT T1)
+ message(FATAL_ERROR "Library rte_pmd_hpac_sdfec_pmd for T1 offload not found")
+ endif()
+ add_library(ldpc_t1 MODULE ${OPENAIR1_DIR}/PHY/CODING/nrLDPC_decoder/nrLDPC_decoder_offload.c)
+ set_target_properties(ldpc_t1 PROPERTIES COMPILE_FLAGS "-DALLOW_EXPERIMENTAL_API")
+ target_compile_options(ldpc_t1 PRIVATE ${LIBDPDK_T1_CFLAGS})
+ target_link_libraries(ldpc_t1 ${LIBDPDK_T1_LDFLAGS} ${T1})
endif()
-if(T1_OFFLOAD_FOUND)
- message(STATUS "T1 Offload support detected")
- set(ENV{PKG_CONFIG_PATH} "$ENV{PKG_CONFIG_PATH}:/usr/local/lib64/pkgconfig/")
- pkg_search_module(LIBDPDK REQUIRED libdpdk=20.05.0)
- add_library(ldpc_offload MODULE ${OPENAIR1_DIR}/PHY/CODING/nrLDPC_decoder/nrLDPC_decoder_offload.c)
- set_target_properties(ldpc_offload PROPERTIES COMPILE_FLAGS "-DALLOW_EXPERIMENTAL_API")
- target_compile_options(ldpc_offload PRIVATE ${LIBDPDK_CFLAGS})
- target_link_libraries(ldpc_offload ${LIBDPDK_LDFLAGS} rte_pmd_hpac_sdfec_pmd "-Wl,-rpath /usr/local/lib64")
-else()
- message(STATUS "No T1 Offload support detected")
-endif ()
-
##########################################################
include_directories ("${OPENAIR_DIR}/radio/COMMON")
@@ -1033,16 +1003,26 @@ add_library(ldpc_cl MODULE ${PHY_LDPC_CL_SRC} )
target_link_libraries(ldpc_cl OpenCL)
add_dependencies(ldpc_cl nrLDPC_decoder_kernels_CL)
-if (CUDA_FOUND)
- cuda_add_library(ldpc_cuda MODULE ${PHY_LDPC_CUDA_SRC} )
+
+##############################################
+# Base CUDA setting
+##############################################
+
+add_boolean_option(BUILD_CUDA False "Build support for CUDA")
+if (ENABLE_LDPC_CUDA)
+ find_package(CUDA REQUIRED)
+ SET(CUDA_NVCC_FLAG "${CUDA_NVCC_FLAGS};-arch=sm_60;")
+ SET(CUDA_VERBOSE_BUILD ON)
+ cuda_add_library(ldpc_cuda MODULE ${PHY_LDPC_CUDA_SRC})
set_target_properties(ldpc_cuda PROPERTIES CUDA_SEPARABLE_COMPILATION ON)
-# CUDA_ADD_CUFFT_TO_TARGET(ldpc_cuda)
-endif (CUDA_FOUND)
+ if (NOT CUDA_FOUND)
+ message(FATAL_ERROR "no CUDA found")
+ endif()
+endif()
add_library(ldpc MODULE ${PHY_LDPC_OPTIM8SEGMULTI_SRC} )
target_link_libraries(ldpc PRIVATE ldpc_gen_HEADERS)
-
add_library(coding MODULE ${PHY_TURBOSRC} )
target_link_libraries(coding PRIVATE asn1_nr_rrc asn1_lte_rrc)
@@ -2384,11 +2364,11 @@ target_link_libraries(nr-softmodem PRIVATE ${LIB_LMS_LIBRARIES})
target_link_libraries(nr-softmodem PRIVATE ${T_LIB})
target_link_libraries(nr-softmodem PRIVATE asn1_nr_rrc asn1_lte_rrc)
-add_dependencies( nr-softmodem ldpc_orig ldpc_optim ldpc_optim8seg ldpc)
+add_dependencies(nr-softmodem ldpc_orig ldpc_optim ldpc_optim8seg ldpc)
-if(T1_OFFLOAD_FOUND)
-add_dependencies( nr-softmodem ldpc_offload)
-endif ()
+if (ENABLE_LDPC_T1)
+ add_dependencies(nr-softmodem ldpc_t1)
+endif()
# force the generation of ASN.1 so that we don't need to wait during the build
target_link_libraries(nr-softmodem PRIVATE
@@ -2451,10 +2431,10 @@ target_link_libraries(nr-uesoftmodem PRIVATE ${T_LIB})
target_link_libraries(nr-uesoftmodem PRIVATE asn1_nr_rrc asn1_lte_rrc)
add_dependencies( nr-uesoftmodem ldpc_orig ldpc_optim ldpc_optim8seg ldpc )
-if (CUDA_FOUND)
- add_dependencies( nr-uesoftmodem ldpc_cuda)
- add_dependencies( nr-softmodem ldpc_cuda)
-endif (CUDA_FOUND)
+if (ENABLE_LDPC_CUDA)
+ add_dependencies(nr-uesoftmodem ldpc_cuda)
+ add_dependencies(nr-softmodem ldpc_cuda)
+endif()
# force the generation of ASN.1 so that we don't need to wait during the build
target_link_libraries(nr-uesoftmodem PRIVATE
@@ -2523,9 +2503,9 @@ add_executable(ldpctest
)
add_dependencies( ldpctest ldpc_orig ldpc_optim ldpc_optim8seg ldpc )
-if (CUDA_FOUND)
- add_dependencies( ldpctest ldpc_cuda)
-endif (CUDA_FOUND)
+if (ENABLE_LDPC_CUDA)
+ add_dependencies(ldpctest ldpc_cuda)
+endif()
target_link_libraries(ldpctest PRIVATE
-Wl,--start-group UTIL SIMU PHY_NR PHY_COMMON PHY_NR_COMMON CONFIG_LIB -Wl,--end-group
m pthread ${ATLAS_LIBRARIES} dl
@@ -2634,9 +2614,9 @@ add_executable(nr_ulsim
${SHLIB_LOADER_SOURCES}
)
-if(T1_OFFLOAD_FOUND)
-add_dependencies( nr_ulsim ldpc_offload)
-endif ()
+if (ENABLE_LDPC_T1)
+ add_dependencies(nr_ulsim ldpc_t1)
+endif()
target_link_libraries(nr_ulsim PRIVATE
-Wl,--start-group UTIL SIMU PHY_COMMON PHY_NR_COMMON PHY_NR PHY_NR_UE SCHED_NR_LIB SCHED_NR_UE_LIB MAC_NR MAC_UE_NR MAC_NR_COMMON lte_rrc nr_rrc CONFIG_LIB L2_LTE_NR L2_NR HASHTABLE x2ap SECU_CN ngap NFAPI_COMMON_LIB NFAPI_LIB NFAPI_PNF_LIB NFAPI_USER_LIB -lz -Wl,--end-group
diff --git a/ci-scripts/xml_files/gnb_usrp_build.xml b/ci-scripts/xml_files/gnb_usrp_build.xml
index 3fc1b1c955..45adb6a2c1 100644
--- a/ci-scripts/xml_files/gnb_usrp_build.xml
+++ b/ci-scripts/xml_files/gnb_usrp_build.xml
@@ -34,7 +34,7 @@
TesteNB
Build_eNB
Build gNB (USRP)
- --gNB -w USRP --ninja -c -P
+ --gNB -w USRP --ninja -c -P --build-lib "ldpc_cuda"
True
diff --git a/cmake_targets/build_oai b/cmake_targets/build_oai
index f9166e0555..f27a0cb315 100755
--- a/cmake_targets/build_oai
+++ b/cmake_targets/build_oai
@@ -55,7 +55,7 @@ CMAKE_BUILD_TYPE="RelWithDebInfo"
CMAKE_CMD="$CMAKE"
BUILD_ECLIPSE=0
NR="False"
-OPTIONAL_LIBRARIES="telnetsrv enbscope uescope nrscope"
+OPTIONAL_LIBRARIES="telnetsrv enbscope uescope nrscope ldpc_cuda ldpc_t1"
ulfiusdep=$(basename ./`find /usr/lib* -name libulfius.so`)
jssondep=$(basename ./`find /usr/lib* -name libjansson.so`)
if [ "$ulfiusdep" == "libulfius.so" -a "$jssondep" == "libjansson.so" ] ; then
@@ -392,13 +392,16 @@ function main() {
if [ "$alib" = "$oklib" ] ; then
BUILD_OPTLIB="$BUILD_OPTLIB $alib"
echo_info "Enabling build of lib${alib}.so"
- fi
- done
- done
- if [ "${BUILD_OPTLIB## }" != "$2" ] ; then
- echo_fatal "Unknown optional library in $2, valid libraries are $OPTIONAL_LIBRARIES"
+ fi
+ done
+ done
+ if [ "${BUILD_OPTLIB## }" != "$2" ] ; then
+ echo_fatal "Unknown optional library in $2, valid libraries are $OPTIONAL_LIBRARIES"
fi
fi
+ for oklib in $BUILD_OPTLIB ; do
+ CMAKE_CMD="$CMAKE_CMD -DENABLE_${oklib^^}=ON"
+ done
shift 2;;
--noavx512)
CMAKE_CMD="$CMAKE_CMD -DAVX512=OFF"
diff --git a/doc/NR_SA_CN5G_gNB_USRP_COTS_UE_Tutorial.md b/doc/NR_SA_CN5G_gNB_USRP_COTS_UE_Tutorial.md
index 8d82b1964f..13624042ee 100644
--- a/doc/NR_SA_CN5G_gNB_USRP_COTS_UE_Tutorial.md
+++ b/doc/NR_SA_CN5G_gNB_USRP_COTS_UE_Tutorial.md
@@ -144,7 +144,7 @@ cd cmake_targets
cd ~/openairinterface5g
source oaienv
cd cmake_targets
-./build_oai -w USRP --ninja --nrUE --gNB --build-lib all -c
+./build_oai -w USRP --ninja --nrUE --gNB --build-lib "telnetsrv nrscope" -c
```
# 4. Run OAI CN5G and OAI gNB
diff --git a/docker/Dockerfile.build.rhel8.2 b/docker/Dockerfile.build.rhel8.2
index 6fc2598276..4978c0c50d 100644
--- a/docker/Dockerfile.build.rhel8.2
+++ b/docker/Dockerfile.build.rhel8.2
@@ -35,4 +35,4 @@ COPY . .
RUN /bin/sh oaienv && \
cd cmake_targets && \
mkdir -p log && \
- ./build_oai --eNB --gNB --RU --UE --nrUE --ninja --build-lib all -w USRP --verbose-ci --noavx512 -c
+ ./build_oai --eNB --gNB --RU --UE --nrUE --ninja --build-lib "telnetsrv enbscope uescope nrscope" -w USRP --verbose-ci --noavx512 -c
diff --git a/docker/Dockerfile.build.ubuntu18 b/docker/Dockerfile.build.ubuntu18
index 8c1ea3556d..62c3b84c10 100644
--- a/docker/Dockerfile.build.ubuntu18
+++ b/docker/Dockerfile.build.ubuntu18
@@ -35,4 +35,4 @@ COPY . .
RUN /bin/sh oaienv && \
cd cmake_targets && \
mkdir -p log && \
- ./build_oai --eNB --gNB --RU --UE --nrUE --ninja --build-lib all -w USRP --verbose-ci --noavx512 -c
+ ./build_oai --eNB --gNB --RU --UE --nrUE --ninja --build-lib "telnetsrv enbscope uescope nrscope" -w USRP --verbose-ci --noavx512 -c
diff --git a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_decoder_offload.c b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_decoder_offload.c
index a523e960e2..33c0026314 100644
--- a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_decoder_offload.c
+++ b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_decoder_offload.c
@@ -1434,7 +1434,7 @@ int32_t nrLDPC_decod_offload(t_nrLDPC_dec_params* p_decParams, uint8_t harq_pid,
argv_re[1] = "-l";
argv_re[2] = "31";
argv_re[3] = "-w";
- argv_re[4] = "81:00.0";
+ argv_re[4] = "b0:00.0";
argv_re[5] = "--file-prefix=b6";
argv_re[6] = "--";
diff --git a/openair1/PHY/CODING/nrLDPC_load.c b/openair1/PHY/CODING/nrLDPC_load.c
index 49ca9bf0de..400fb8d836 100644
--- a/openair1/PHY/CODING/nrLDPC_load.c
+++ b/openair1/PHY/CODING/nrLDPC_load.c
@@ -75,7 +75,7 @@ int load_nrLDPClib_offload(void) {
loader_shlibfunc_t shlib_decoffload_fdesc;
shlib_decoffload_fdesc.fname = "nrLDPC_decod_offload";
- int ret=load_module_shlib("ldpc_offload",&shlib_decoffload_fdesc,1,NULL);
+ int ret=load_module_shlib("ldpc_t1",&shlib_decoffload_fdesc,1,NULL);
AssertFatal( (ret >= 0),"Error loading ldpc decoder offload");
nrLDPC_decoder_offload = (nrLDPC_decoffloadfunc_t)shlib_decoffload_fdesc.fptr;