From 1f2098fccecb90742f9f3e2aff9ebd8fddcc1d61 Mon Sep 17 00:00:00 2001 From: Tsung-Yu Chan <Tsung-Yu.Chan@eurecom.fr> Date: Thu, 27 Jul 2023 11:44:48 +0200 Subject: [PATCH] feat / work with cross-compile can compile the target ldpc_generators and generate_T with cross-compiler --- CMakeLists.txt | 13 ++- cmake_targets/cross-arm.cmake | 16 +++ common/utils/T/CMakeLists.txt | 34 ++++-- doc/BUILD.md | 5 + doc/README.md | 1 + doc/cross-compile.md | 93 +++++++++++++++ .../nrLDPC_tools/CMakeLists.txt | 22 +++- .../generator_bnProc/CMakeLists.txt | 110 ++++++++++++------ .../generator_bnProc_avx512/CMakeLists.txt | 59 ++++++---- .../generator_cnProc/CMakeLists.txt | 69 +++++++---- .../generator_cnProc_avx512/CMakeLists.txt | 40 ++++--- 11 files changed, 339 insertions(+), 123 deletions(-) create mode 100644 cmake_targets/cross-arm.cmake create mode 100644 doc/cross-compile.md diff --git a/CMakeLists.txt b/CMakeLists.txt index 8a09e1664cf..ec60df8b35c 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -102,7 +102,7 @@ add_list_string_option(CMAKE_BUILD_TYPE "RelWithDebInfo" "Choose the type of bui # in case /proc/cpuinfo exists we want to inspect available Intrinsics # -so not to go always through SIMDE emulation # -so to avoid AVX512 instructions generation by gcc -if(EXISTS "/proc/cpuinfo") +if(EXISTS "/proc/cpuinfo" AND NOT CROSS_COMPILE) file(STRINGS "/proc/cpuinfo" CPUFLAGS REGEX flags LIMIT_COUNT 1) else() message(WARNING "did not find /proc/cpuinfo -- not setting any x86-specific compilation variables") @@ -115,7 +115,10 @@ eval_boolean(AUTODETECT_AVX2 DEFINED CPUFLAGS AND CPUFLAGS MATCHES "avx2") add_boolean_option(AVX2 ${AUTODETECT_AVX2} "Whether AVX2 intrinsics is available on the host processor" ON) message(STATUS "CPU architecture is ${CMAKE_SYSTEM_PROCESSOR}") -if(CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64") +if (CROSS_COMPILE) + message(STATUS "setting as aarch64") + set(C_FLAGS_PROCESSOR "${C_FLAGS_PROCESSOR} -gdwarf-2 -lgcc -lrt") +elseif(CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64") # The following intrinsics are assumed to be available on any x86 system # (avx, f16c, fma, gnfi, mmx, pclmul, sse, sse2, sse3, xop) set(C_FLAGS_PROCESSOR "${C_FLAGS_PROCESSOR} -DSIMDE_X86_AVX_NATIVE -DSIMDE_X86_AVX_NATIVE -DSIMDE_X86_F16C_NATIVE -DSIMDE_X86_FMA_NATIVE -DSIMDE_X86_GFNI_NATIVE -DSIMDE_X86_MMX_NATIVE -DSIMDE_X86_PCLMUL_NATIVE -DSIMDE_X86_SSE2_NATIVE -DSIMDE_X86_SSE3_NATIVE -DSIMDE_X86_SSE_NATIVE -DSIMDE_X86_XOP_HAVE_COM_ -DSIMDE_X86_XOP_NATIVE") @@ -146,7 +149,11 @@ else() message(FATAL_ERROR "compile for CPU architecture ${CPUARCH}, CMAKE_SYSTEM_PROCESSOR ${CMAKE_SYSTEM_PROCESSOR}") endif() -set(C_FLAGS_PROCESSOR "${C_FLAGS_PROCESSOR} -march=native") +if (NOT CROSS_COMPILE) + set(C_FLAGS_PROCESSOR "${C_FLAGS_PROCESSOR} -march=native") +else () + set(C_FLAGS_PROCESSOR "${C_FLAGS_PROCESSOR} -march=armv8-a") +endif() # add autotools definitions that were maybe used! add_definitions("-DSTDC_HEADERS=1 -DHAVE_SYS_TYPES_H=1 -DHAVE_SYS_STAT_H=1 -DHAVE_STDLIB_H=1 -DHAVE_STRING_H=1 -DHAVE_MEMORY_H=1 -DHAVE_STRINGS_H=1 -DHAVE_INTTYPES_H=1 -DHAVE_STDINT_H=1 -DHAVE_UNISTD_H=1 -DHAVE_FCNTL_H=1 -DHAVE_ARPA_INET_H=1 -DHAVE_SYS_TIME_H=1 -DHAVE_SYS_SOCKET_H=1 -DHAVE_STRERROR=1 -DHAVE_SOCKET=1 -DHAVE_MEMSET=1 -DHAVE_GETTIMEOFDAY=1 -DHAVE_STDLIB_H=1 -DHAVE_MALLOC=1 -DHAVE_LIBSCTP") diff --git a/cmake_targets/cross-arm.cmake b/cmake_targets/cross-arm.cmake new file mode 100644 index 00000000000..6209245876c --- /dev/null +++ b/cmake_targets/cross-arm.cmake @@ -0,0 +1,16 @@ +set(CMAKE_SYSTEM_NAME Linux) +set(CMAKE_SYSTEM_PROCESSOR arm) + +set(CMAKE_C_COMPILER /usr/bin/aarch64-linux-gnu-gcc-9) +set(CMAKE_CXX_COMPILER /usr/bin/aarch64-linux-gnu-g++-9) + +set(CROSS_COMPILE 1) +set(bnProc_gen_128_DIR ${CMAKE_CURRENT_BINARY_DIR}/${NATIVE_DIR}) # /../build) +set(bnProc_gen_avx2_DIR ${CMAKE_CURRENT_BINARY_DIR}/${NATIVE_DIR}) # /../build) +set(bnProc_gen_avx512_DIR ${CMAKE_CURRENT_BINARY_DIR}/${NATIVE_DIR}) # /../build) +set(cnProc_gen_128_DIR ${CMAKE_CURRENT_BINARY_DIR}/${NATIVE_DIR}) # /../build) +set(cnProc_gen_avx2_DIR ${CMAKE_CURRENT_BINARY_DIR}/${NATIVE_DIR}) # /../build) +set(cnProc_gen_avx512_DIR ${CMAKE_CURRENT_BINARY_DIR}/${NATIVE_DIR}) # /../build) +set(genids_DIR ${CMAKE_CURRENT_BINARY_DIR}/${NATIVE_DIR}) # /../build) +set(_check_vcd_DIR ${CMAKE_CURRENT_BINARY_DIR}/${NATIVE_DIR}) # /../build) + diff --git a/common/utils/T/CMakeLists.txt b/common/utils/T/CMakeLists.txt index 19aed0440e6..1f9055e0076 100644 --- a/common/utils/T/CMakeLists.txt +++ b/common/utils/T/CMakeLists.txt @@ -1,8 +1,13 @@ -add_executable(genids genids.c) -set_target_properties(genids PROPERTIES RUNTIME_OUTPUT_DIRECTORY .) - +if (CROSS_COMPILE) + find_package(genids) +else() + add_executable(genids genids.c) + set_target_properties(genids PROPERTIES RUNTIME_OUTPUT_DIRECTORY .) + export(TARGETS genids FILE + "${CMAKE_BINARY_DIR}/genidsConfig.cmake") +endif() add_custom_command(OUTPUT T_IDs.h - COMMAND ./genids ${CMAKE_CURRENT_SOURCE_DIR}/T_messages.txt T_IDs.h + COMMAND genids ${CMAKE_CURRENT_SOURCE_DIR}/T_messages.txt T_IDs.h DEPENDS genids COMMENT "Generating T_IDs.h from T_messages.txt" ) @@ -12,14 +17,19 @@ add_custom_command(OUTPUT T_messages.txt.h WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} ) -add_executable(_check_vcd check_vcd.c tracer/database.c tracer/utils.c T_IDs.h T_messages.txt.h) -target_include_directories(_check_vcd PRIVATE - .. ../itti ../../../openair2/COMMON tracer - ${CMAKE_CURRENT_BINARY_DIR} ${CMAKE_CURRENT_SOURCE_DIR}) -target_compile_options(_check_vcd PRIVATE -Wall) -target_link_libraries(_check_vcd PRIVATE m pthread) -set_target_properties(_check_vcd PROPERTIES RUNTIME_OUTPUT_DIRECTORY .) - +if (CROSS_COMPILE) + find_package(_check_vcd) +else () + add_executable(_check_vcd check_vcd.c tracer/database.c tracer/utils.c T_IDs.h T_messages.txt.h) + target_include_directories(_check_vcd PRIVATE + .. ../itti ../../../openair2/COMMON tracer + ${CMAKE_CURRENT_BINARY_DIR} ${CMAKE_CURRENT_SOURCE_DIR}) + target_compile_options(_check_vcd PRIVATE -Wall) + target_link_libraries(_check_vcd PRIVATE m pthread) + set_target_properties(_check_vcd PROPERTIES RUNTIME_OUTPUT_DIRECTORY .) + export(TARGETS _check_vcd FILE + "${CMAKE_BINARY_DIR}/_check_vcdConfig.cmake") +endif() add_custom_target(check_vcd COMMAND _check_vcd ${CMAKE_CURRENT_SOURCE_DIR}/T_messages.txt ${CMAKE_CURRENT_SOURCE_DIR}/../LOG/vcd_signal_dumper.h DEPENDS _check_vcd diff --git a/doc/BUILD.md b/doc/BUILD.md index 45e0c1dc067..798d0b5ea22 100644 --- a/doc/BUILD.md +++ b/doc/BUILD.md @@ -215,3 +215,8 @@ ccmake ../../.. cmake-gui ../../.. ``` You can of course use all standard cmake/ninja/make commands in this directory. + +# Cross Compile + +If you want to use cross-compiler on x86 platform for aarch64 version, please refer the [cross-compile.md](./cross-compile.md) for more information. + diff --git a/doc/README.md b/doc/README.md index 5898c22ef49..0f52a0b8ffd 100644 --- a/doc/README.md +++ b/doc/README.md @@ -19,6 +19,7 @@ - [FEATURE_SET.md](./FEATURE_SET.md): lists supported features - [GET_SOURCES.md](./GET_SOURCES.md): how to download the sources - [BUILD.md](./BUILD.md): how to build the sources +- [cross-compile.md](./cross-compile.md): how to cross-compile OAI for ARM - [clang-format.md](./clang-format.md): how to format the code - [environment-variables.md](./environment-variables.md): the environment variables used by OAI diff --git a/doc/cross-compile.md b/doc/cross-compile.md new file mode 100644 index 00000000000..7e8205eaa6f --- /dev/null +++ b/doc/cross-compile.md @@ -0,0 +1,93 @@ +[[_TOC_]] + + +# OpenAirInterface Cross-Compiler User Guide + +## Environment + +- OS: ubuntu 20.04 + +### Set up the environment + +Set up for install the package for aarch64. + +```shell +sudo dpkg --add-architecture arm64 + +echo -e \ + "deb [arch=arm64] http://ports.ubuntu.com/ focal main restricted\n"\ + "deb [arch=arm64] http://ports.ubuntu.com/ focal-updates main restricted\n"\ + "deb [arch=arm64] http://ports.ubuntu.com/ focal universe\n"\ + "deb [arch=arm64] http://ports.ubuntu.com/ focal-updates universe\n"\ + "deb [arch=arm64] http://ports.ubuntu.com/ focal multiverse\n"\ + "deb [arch=arm64] http://ports.ubuntu.com/ focal-updates multiverse\n"\ + "deb [arch=arm64] http://ports.ubuntu.com/ focal-backports main restricted universe multiverse"\ + | sudo tee /etc/apt/sources.list.d/arm-cross-compile-sources.list + +sudo cp /etc/apt/sources.list "/etc/apt/sources.list.`date`.backup" +sudo sed -i -E "s/(deb)\ (http:.+)/\1\ [arch=amd64]\ \2/" /etc/apt/sources.list + +sudo apt update +sudo apt install -y gcc-9-aarch64-linux-gnu \ + g++-9-aarch64-linux-gnu + +sudo apt-get install -y \ + libatlas-base-dev:arm64 \ + libblas-dev:arm64 \ + libc6-dev-i386 \ + liblapack-dev:arm64 \ + liblapacke-dev:arm64 \ + libreadline-dev:arm64 \ + libgnutls28-dev:arm64 \ + libconfig-dev:arm64 \ + libsctp-dev:arm64 \ + libssl-dev:arm64 \ + libtool:arm64 \ + zlib1g-dev:arm64 +``` + +## Install and Build + +### Install required packages + +Use the host compiler to install some dependencies. + +```shell +cd cmake_targets +./build_oai -I +``` + +### Build the LDPC generators + +Use the x86 compiler to build the `ldpc_generators` and generate the header +file in the `ran_build/build` folder. They are necessary during a build for +code generation, and therefore need to be created for the x86 architecture. + +```shell +rm -r ran_build +mkdir ran_build +mkdir ran_build/build +mkdir ran_build/build-cross + +cd ran_build/build +cmake ../../.. +make -j`nproc` ldpc_generators generate_T +``` + +### Build the Other Executables for aarch64 + +Switch to the `ran_build/build-cross` folder to build the target executables +for ARM. The `cross-arm.cmake` file defines some ARM-specific build tools +(e.g., compilers) that you might need to adapt. Further, it defines cmake +variables that define in this step where the host tools (such as LDPC +generators) are to be found. For the latter, the `NATIVE_DIR` option has to +be defined in order to tell cmake where the host tools have been built. + +```shell +cd ../build-cross +cmake ../../.. -DCMAKE_TOOLCHAIN_FILE=../../../cmake_targets/cross-arm.cmake -DNATIVE_DIR=../build + +make -j`nproc` dlsim ulsim ldpctest polartest smallblocktest nr_pbchsim nr_dlschsim nr_ulschsim nr_dlsim nr_ulsim nr_pucchsim nr_prachsim +make -j`nproc` lte-softmodem nr-softmodem nr-cuup oairu lte-uesoftmodem nr-uesoftmodem +make -j`nproc` params_libconfig coding rfsimulator +``` diff --git a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/CMakeLists.txt b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/CMakeLists.txt index b84b259152a..26ef39408fc 100644 --- a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/CMakeLists.txt +++ b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/CMakeLists.txt @@ -5,13 +5,23 @@ add_subdirectory(${CMAKE_CURRENT_LIST_DIR}/generator_cnProc_avx512 ldpc/generato # custom target to build all generators add_custom_target(ldpc_generators) + +# if (CROSS_COMPILE) +# find_package(bnProc_gen_avx2) +# find_package(bnProc_gen_128) +# find_package(bnProc_gen_avx512) +# find_package(cnProc_gen_avx2) +# find_package(cnProc_gen_128) +# find_package(cnProc_gen_avx512) +# endif() + add_dependencies(ldpc_generators - bnProc_gen_avx2 - bnProc_gen_128 - bnProc_gen_avx512 - cnProc_gen_avx2 - cnProc_gen_128 - cnProc_gen_avx512) + bnProc_gen_avx2_files + bnProc_gen_128_files + bnProc_gen_avx512_files + cnProc_gen_avx2_files + cnProc_gen_128_files + cnProc_gen_avx512_files) add_library(ldpc_gen_HEADERS INTERFACE) target_link_libraries(ldpc_gen_HEADERS INTERFACE diff --git a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/generator_bnProc/CMakeLists.txt b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/generator_bnProc/CMakeLists.txt index 96ad39f79c9..e67f3868adb 100644 --- a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/generator_bnProc/CMakeLists.txt +++ b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/generator_bnProc/CMakeLists.txt @@ -1,55 +1,89 @@ -add_executable(bnProc_gen_avx2 - bnProc_gen_BG1_avx2.c - bnProc_gen_BG2_avx2.c - bnProcPc_gen_BG1_avx2.c - bnProcPc_gen_BG2_avx2.c - main.c) -add_executable(bnProc_gen_128 - bnProc_gen_BG1_128.c - bnProc_gen_BG2_128.c - bnProcPc_gen_BG1_128.c - bnProcPc_gen_BG2_128.c - main128.c) - -target_compile_options(bnProc_gen_avx2 PRIVATE -W -Wall ) - -target_compile_options(bnProc_gen_128 PRIVATE -W -Wall ) -#set(bnProc_headers -# bnProc/nrLDPC_bnProc_BG1_R13_AVX2.h -# bnProc/nrLDPC_bnProc_BG1_R23_AVX2.h -# bnProc/nrLDPC_bnProc_BG1_R89_AVX2.h -# bnProc/rLDPC_bnProc_BG2_R13_AVX2.h -# bnProc/rLDPC_bnProc_BG2_R15_AVX2.h -# bnProc/rLDPC_bnProc_BG2_R23_AVX2.h) -# -#set(bnProcPc_headers -# bnProcPc/rLDPC_bnProcPc_BG1_R13_AVX2.h -# bnProcPc/rLDPC_bnProcPc_BG1_R23_AVX2.h -# bnProcPc/rLDPC_bnProcPc_BG1_R89_AVX2.h -# bnProcPc/rLDPC_bnProcPc_BG2_R13_AVX2.h -# bnProcPc/rLDPC_bnProcPc_BG2_R15_AVX2.h -# bnProcPc/rLDPC_bnProcPc_BG2_R23_AVX2.h) - -add_custom_command(TARGET bnProc_gen_avx2 POST_BUILD - #OUTPUT ${bnProc_headers} ${bnProcPc_headers} +if (CROSS_COMPILE) + find_package(bnProc_gen_128) + find_package(bnProc_gen_avx2) +else() + add_executable(bnProc_gen_avx2 + bnProc_gen_BG1_avx2.c + bnProc_gen_BG2_avx2.c + bnProcPc_gen_BG1_avx2.c + bnProcPc_gen_BG2_avx2.c + main.c) + add_executable(bnProc_gen_128 + bnProc_gen_BG1_128.c + bnProc_gen_BG2_128.c + bnProcPc_gen_BG1_128.c + bnProcPc_gen_BG2_128.c + main128.c) + + target_compile_options(bnProc_gen_avx2 PRIVATE -W -Wall ) + + target_compile_options(bnProc_gen_128 PRIVATE -W -Wall ) + export(TARGETS bnProc_gen_avx2 FILE + "${CMAKE_BINARY_DIR}/bnProc_gen_avx2Config.cmake") + export(TARGETS bnProc_gen_128 FILE + "${CMAKE_BINARY_DIR}/bnProc_gen_128Config.cmake") +endif () + +set(bnProc_headers + bnProc/nrLDPC_bnProc_BG1_R13_AVX2.h + bnProc/nrLDPC_bnProc_BG1_R23_AVX2.h + bnProc/nrLDPC_bnProc_BG1_R89_AVX2.h + bnProc/nrLDPC_bnProc_BG2_R13_AVX2.h + bnProc/nrLDPC_bnProc_BG2_R15_AVX2.h + bnProc/nrLDPC_bnProc_BG2_R23_AVX2.h) + +set(bnProcPc_headers + bnProcPc/nrLDPC_bnProcPc_BG1_R13_AVX2.h + bnProcPc/nrLDPC_bnProcPc_BG1_R23_AVX2.h + bnProcPc/nrLDPC_bnProcPc_BG1_R89_AVX2.h + bnProcPc/nrLDPC_bnProcPc_BG2_R13_AVX2.h + bnProcPc/nrLDPC_bnProcPc_BG2_R15_AVX2.h + bnProcPc/nrLDPC_bnProcPc_BG2_R23_AVX2.h) + +set(bnProc128_headers + bnProc/nrLDPC_bnProc_BG1_R13_128.h + bnProc/nrLDPC_bnProc_BG1_R23_128.h + bnProc/nrLDPC_bnProc_BG1_R89_128.h + bnProc/nrLDPC_bnProc_BG2_R13_128.h + bnProc/nrLDPC_bnProc_BG2_R15_128.h + bnProc/nrLDPC_bnProc_BG2_R23_128.h) + +set(bnProcPc128_headers + bnProcPc/nrLDPC_bnProcPc_BG1_R13_128.h + bnProcPc/nrLDPC_bnProcPc_BG1_R23_128.h + bnProcPc/nrLDPC_bnProcPc_BG1_R89_128.h + bnProcPc/nrLDPC_bnProcPc_BG2_R13_128.h + bnProcPc/nrLDPC_bnProcPc_BG2_R15_128.h + bnProcPc/nrLDPC_bnProcPc_BG2_R23_128.h) + + +add_custom_command( + # TARGET bnProc_gen_avx2 POST_BUILD + OUTPUT ${bnProc_headers} ${bnProcPc_headers} COMMAND ${CMAKE_COMMAND} -E make_directory bnProc COMMAND ${CMAKE_COMMAND} -E make_directory bnProcPc COMMAND bnProc_gen_avx2 . DEPENDS bnProc_gen_avx2 COMMENT "Generating LDPC bnProc header files for AVX2" ) -add_custom_command(TARGET bnProc_gen_128 POST_BUILD - #OUTPUT ${bnProc_headers} ${bnProcPc_headers} +add_custom_target(bnProc_gen_avx2_files DEPENDS ${bnProc_headers} ${bnProcPc_headers}) + +add_custom_command( + # TARGET bnProc_gen_128 POST_BUILD + OUTPUT ${bnProc128_headers} ${bnProcPc128_headers} COMMAND ${CMAKE_COMMAND} -E make_directory bnProc128 COMMAND ${CMAKE_COMMAND} -E make_directory bnProcPc128 COMMAND bnProc_gen_128 . DEPENDS bnProc_gen_128 COMMENT "Generating LDPC bnProc header files for 128-bit SIMD" ) +add_custom_target(bnProc_gen_128_files DEPENDS ${bnProc128_headers} ${bnProcPc128_headers}) add_library(bnProc_gen_avx2_HEADERS INTERFACE) target_include_directories(bnProc_gen_avx2_HEADERS INTERFACE ${CMAKE_CURRENT_BINARY_DIR}) -add_dependencies(bnProc_gen_avx2_HEADERS bnProc_gen_avx2) +add_dependencies(bnProc_gen_avx2_HEADERS bnProc_gen_avx2_files) + add_library(bnProc_gen_128_HEADERS INTERFACE) target_include_directories(bnProc_gen_128_HEADERS INTERFACE ${CMAKE_CURRENT_BINARY_DIR}) -add_dependencies(bnProc_gen_128_HEADERS bnProc_gen_128) +add_dependencies(bnProc_gen_128_HEADERS bnProc_gen_128_files) + diff --git a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/generator_bnProc_avx512/CMakeLists.txt b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/generator_bnProc_avx512/CMakeLists.txt index f8da0c9c248..e06d3ed21b1 100644 --- a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/generator_bnProc_avx512/CMakeLists.txt +++ b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/generator_bnProc_avx512/CMakeLists.txt @@ -1,36 +1,45 @@ -add_executable(bnProc_gen_avx512 - bnProc_gen_BG1_avx512.c - bnProc_gen_BG2_avx512.c - bnProcPc_gen_BG1_avx512.c - bnProcPc_gen_BG2_avx512.c - main.c) -target_compile_options(bnProc_gen_avx512 PRIVATE -W -Wall ) +if (CROSS_COMPILE) + find_package(bnProc_gen_avx512) +else() + add_executable(bnProc_gen_avx512 + bnProc_gen_BG1_avx512.c + bnProc_gen_BG2_avx512.c + bnProcPc_gen_BG1_avx512.c + bnProcPc_gen_BG2_avx512.c + main.c) + target_compile_options(bnProc_gen_avx512 PRIVATE -W -Wall ) + export(TARGETS bnProc_gen_avx512 FILE + "${CMAKE_BINARY_DIR}/bnProc_gen_avx512Config.cmake") +endif () -#set(bnProc_avx512_headers -# bnProc_avx512/rLDPC_bnProc_BG1_R13_AVX512.h -# bnProc_avx512/rLDPC_bnProc_BG1_R23_AVX512.h -# bnProc_avx512/rLDPC_bnProc_BG1_R89_AVX512.h -# bnProc_avx512/rLDPC_bnProc_BG2_R13_AVX512.h -# bnProc_avx512/rLDPC_bnProc_BG2_R15_AVX512.h -# bnProc_avx512/rLDPC_bnProc_BG2_R23_AVX512.h) -# -#set(bnProcPc_avx512_headers -# bnProcPc_avx512/rLDPC_bnProcPc_BG1_R13_AVX512.h -# bnProcPc_avx512/rLDPC_bnProcPc_BG1_R23_AVX512.h -# bnProcPc_avx512/rLDPC_bnProcPc_BG1_R89_AVX512.h -# bnProcPc_avx512/rLDPC_bnProcPc_BG2_R13_AVX512.h -# bnProcPc_avx512/rLDPC_bnProcPc_BG2_R15_AVX512.h -# bnProcPc_avx512/rLDPC_bnProcPc_BG2_R23_AVX512.h) +set(bnProc_avx512_headers + bnProc_avx512/nrLDPC_bnProc_BG1_R13_AVX512.h + bnProc_avx512/nrLDPC_bnProc_BG1_R23_AVX512.h + bnProc_avx512/nrLDPC_bnProc_BG1_R89_AVX512.h + bnProc_avx512/nrLDPC_bnProc_BG2_R13_AVX512.h + bnProc_avx512/nrLDPC_bnProc_BG2_R15_AVX512.h + bnProc_avx512/nrLDPC_bnProc_BG2_R23_AVX512.h) -add_custom_command(TARGET bnProc_gen_avx512 POST_BUILD - #OUTPUT ${bnProc_avx512_headers} ${bnProcPc_avx512_headers} +set(bnProcPc_avx512_headers + bnProcPc_avx512/nrLDPC_bnProcPc_BG1_R13_AVX512.h + bnProcPc_avx512/nrLDPC_bnProcPc_BG1_R23_AVX512.h + bnProcPc_avx512/nrLDPC_bnProcPc_BG1_R89_AVX512.h + bnProcPc_avx512/nrLDPC_bnProcPc_BG2_R13_AVX512.h + bnProcPc_avx512/nrLDPC_bnProcPc_BG2_R15_AVX512.h + bnProcPc_avx512/nrLDPC_bnProcPc_BG2_R23_AVX512.h) + +add_custom_command( + # TARGET bnProc_gen_avx512 POST_BUILD + OUTPUT ${bnProc_avx512_headers} ${bnProcPc_avx512_headers} COMMAND ${CMAKE_COMMAND} -E make_directory bnProc_avx512 COMMAND ${CMAKE_COMMAND} -E make_directory bnProcPc_avx512 COMMAND bnProc_gen_avx512 . DEPENDS bnProc_gen_avx512 COMMENT "Generating LDPC bnProc header files for AVX512" ) +add_custom_target(bnProc_gen_avx512_files DEPENDS ${bnProc_avx512_headers} ${bnProcPc_avx512_headers}) add_library(bnProc_gen_avx512_HEADERS INTERFACE) target_include_directories(bnProc_gen_avx512_HEADERS INTERFACE ${CMAKE_CURRENT_BINARY_DIR}) -add_dependencies(bnProc_gen_avx512_HEADERS bnProc_gen_avx512) +add_dependencies(bnProc_gen_avx512_HEADERS bnProc_gen_avx512_files) + diff --git a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/generator_cnProc/CMakeLists.txt b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/generator_cnProc/CMakeLists.txt index a54349c61db..8c097dc4dce 100644 --- a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/generator_cnProc/CMakeLists.txt +++ b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/generator_cnProc/CMakeLists.txt @@ -1,41 +1,64 @@ -add_executable(cnProc_gen_avx2 - cnProc_gen_BG1_avx2.c - cnProc_gen_BG2_avx2.c - main.c) -add_executable(cnProc_gen_128 - cnProc_gen_BG1_128.c - cnProc_gen_BG2_128.c - main128.c) -target_compile_options(cnProc_gen_avx2 PRIVATE -W -Wall ) -target_compile_options(cnProc_gen_128 PRIVATE -W -Wall ) +if (CROSS_COMPILE) + find_package(cnProc_gen_128) + find_package(cnProc_gen_avx2) +else() + add_executable(cnProc_gen_avx2 + cnProc_gen_BG1_avx2.c + cnProc_gen_BG2_avx2.c + main.c) + add_executable(cnProc_gen_128 + cnProc_gen_BG1_128.c + cnProc_gen_BG2_128.c + main128.c) + target_compile_options(cnProc_gen_avx2 PRIVATE -W -Wall ) + target_compile_options(cnProc_gen_128 PRIVATE -W -Wall ) + export(TARGETS cnProc_gen_avx2 FILE + "${CMAKE_BINARY_DIR}/cnProc_gen_avx2Config.cmake") + export(TARGETS cnProc_gen_128 FILE + "${CMAKE_BINARY_DIR}/cnProc_gen_128Config.cmake") +endif() -#set(cnProc_headers -# cnProc/rLDPC_cnProc_BG1_R13_AVX2.h -# cnProc/rLDPC_cnProc_BG1_R23_AVX2.h -# cnProc/rLDPC_cnProc_BG1_R89_AVX2.h -# cnProc/rLDPC_cnProc_BG2_R13_AVX2.h -# cnProc/rLDPC_cnProc_BG2_R15_AVX2.h -# cnProc/rLDPC_cnProc_BG2_R23_AVX2.h) +set(cnProc_headers + cnProc/nrLDPC_cnProc_BG1_R13_AVX2.h + cnProc/nrLDPC_cnProc_BG1_R23_AVX2.h + cnProc/nrLDPC_cnProc_BG1_R89_AVX2.h + cnProc/nrLDPC_cnProc_BG2_R13_AVX2.h + cnProc/nrLDPC_cnProc_BG2_R15_AVX2.h + cnProc/nrLDPC_cnProc_BG2_R23_AVX2.h) -add_custom_command(TARGET cnProc_gen_avx2 POST_BUILD - #OUTPUT ${cnProc_headers} +set(cnProc128_headers + cnProc/nrLDPC_cnProc_BG1_R13_128.h + cnProc/nrLDPC_cnProc_BG1_R23_128.h + cnProc/nrLDPC_cnProc_BG1_R89_128.h + cnProc/nrLDPC_cnProc_BG2_R13_128.h + cnProc/nrLDPC_cnProc_BG2_R15_128.h + cnProc/nrLDPC_cnProc_BG2_R23_128.h) + +add_custom_command( + # TARGET cnProc_gen_avx2 POST_BUILD + OUTPUT ${cnProc_headers} COMMAND ${CMAKE_COMMAND} -E make_directory cnProc COMMAND cnProc_gen_avx2 . DEPENDS cnProc_gen_avx2 COMMENT "Generating LDPC cnProc header files for AVX2" ) +add_custom_target(cnProc_gen_avx2_files DEPENDS ${cnProc_headers}) -add_custom_command(TARGET cnProc_gen_128 POST_BUILD - #OUTPUT ${cnProc_headers} +add_custom_command( + # TARGET cnProc_gen_128 POST_BUILD + OUTPUT ${cnProc128_headers} COMMAND ${CMAKE_COMMAND} -E make_directory cnProc128 COMMAND cnProc_gen_128 . DEPENDS cnProc_gen_128 COMMENT "Generating LDPC cnProc header files for 128-bit SIMD" ) +add_custom_target(cnProc_gen_128_files DEPENDS ${cnProc128_headers}) + add_library(cnProc_gen_avx2_HEADERS INTERFACE) target_include_directories(cnProc_gen_avx2_HEADERS INTERFACE ${CMAKE_CURRENT_BINARY_DIR}) -add_dependencies(cnProc_gen_avx2_HEADERS cnProc_gen_avx2) +add_dependencies(cnProc_gen_avx2_HEADERS cnProc_gen_avx2_files) add_library(cnProc_gen_128_HEADERS INTERFACE) target_include_directories(cnProc_gen_128_HEADERS INTERFACE ${CMAKE_CURRENT_BINARY_DIR}) -add_dependencies(cnProc_gen_128_HEADERS cnProc_gen_128) +add_dependencies(cnProc_gen_128_HEADERS cnProc_gen_128_files) + diff --git a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/generator_cnProc_avx512/CMakeLists.txt b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/generator_cnProc_avx512/CMakeLists.txt index f6da998c851..e78d0ee007e 100644 --- a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/generator_cnProc_avx512/CMakeLists.txt +++ b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/generator_cnProc_avx512/CMakeLists.txt @@ -1,25 +1,33 @@ -add_executable(cnProc_gen_avx512 - cnProc_gen_BG1_avx512.c - cnProc_gen_BG2_avx512.c - main.c) -target_compile_options(cnProc_gen_avx512 PRIVATE -W -Wall ) +if (CROSS_COMPILE) + find_package(cnProc_gen_avx512) +else() + add_executable(cnProc_gen_avx512 + cnProc_gen_BG1_avx512.c + cnProc_gen_BG2_avx512.c + main.c) + target_compile_options(cnProc_gen_avx512 PRIVATE -W -Wall ) + export(TARGETS cnProc_gen_avx512 FILE + "${CMAKE_BINARY_DIR}/cnProc_gen_avx512Config.cmake") +endif() -#set(cnProc_avx512_headers -# cnProc_avx512/nrLDPC_cnProc_BG1_R13_AVX512.h -# cnProc_avx512/nrLDPC_cnProc_BG1_R23_AVX512.h -# cnProc_avx512/nrLDPC_cnProc_BG1_R89_AVX512.h -# cnProc_avx512/nrLDPC_cnProc_BG2_R13_AVX512.h -# cnProc_avx512/nrLDPC_cnProc_BG2_R15_AVX512.h -# cnProc_avx512/nrLDPC_cnProc_BG2_R23_AVX512.h) +set(cnProc_avx512_headers + cnProc_avx512/nrLDPC_cnProc_BG1_R13_AVX512.h + cnProc_avx512/nrLDPC_cnProc_BG1_R23_AVX512.h + cnProc_avx512/nrLDPC_cnProc_BG1_R89_AVX512.h + cnProc_avx512/nrLDPC_cnProc_BG2_R13_AVX512.h + cnProc_avx512/nrLDPC_cnProc_BG2_R15_AVX512.h + cnProc_avx512/nrLDPC_cnProc_BG2_R23_AVX512.h) -add_custom_command(TARGET cnProc_gen_avx512 POST_BUILD - #OUTPUT ${cnProc_avx512_headers} +add_custom_command( + # TARGET cnProc_gen_avx512 POST_BUILD + OUTPUT ${cnProc_avx512_headers} COMMAND ${CMAKE_COMMAND} -E make_directory cnProc_avx512 COMMAND cnProc_gen_avx512 . DEPENDS cnProc_gen_avx512 COMMENT "Generating LDPC cnProc header files for AVX512" ) - +add_custom_target(cnProc_gen_avx512_files DEPENDS ${cnProc_avx512_headers}) add_library(cnProc_gen_avx512_HEADERS INTERFACE) target_include_directories(cnProc_gen_avx512_HEADERS INTERFACE ${CMAKE_CURRENT_BINARY_DIR}) -add_dependencies(cnProc_gen_avx512_HEADERS cnProc_gen_avx512) +add_dependencies(cnProc_gen_avx512_HEADERS cnProc_gen_avx512_files) + -- GitLab