diff --git a/backends/cadence/CMakeLists.txt b/backends/cadence/CMakeLists.txt index c4bcd47f343..b5d72529bc2 100644 --- a/backends/cadence/CMakeLists.txt +++ b/backends/cadence/CMakeLists.txt @@ -82,6 +82,19 @@ if(EXECUTORCH_NNLIB_OPT) ${EXECUTORCH_ROOT}/runtime/core/portable_type/c10 ) add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/${TARGET_DIR}/kernels) +elseif( + EXECUTORCH_HIFI_CORE STREQUAL "hifi1" + OR EXECUTORCH_HIFI_CORE STREQUAL "hifi4" + OR EXECUTORCH_HIFI_CORE STREQUAL "hifi5" +) + if(EXECUTORCH_HIFI_CORE STREQUAL "hifi5") + add_compile_definitions(CORE_HIFI5=1) + else() + add_compile_definitions(CORE_HIFI5=0) + endif() + set(TARGET_DIR hifi) + add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/${TARGET_DIR}/third-party/nnlib) + add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/${TARGET_DIR}/kernels) elseif(EXECUTORCH_FUSION_G3_OPT) set(TARGET_DIR fusion_g3) add_subdirectory( diff --git a/backends/cadence/cadence.cmake b/backends/cadence/cadence.cmake index 1bd5a8db0e0..8654a3194a3 100644 --- a/backends/cadence/cadence.cmake +++ b/backends/cadence/cadence.cmake @@ -42,10 +42,10 @@ set(CMAKE_C_COMPILER ${TOOLCHAIN_HOME}/bin/${CROSS_COMPILE_TARGET}-clang) set(CMAKE_CXX_COMPILER ${TOOLCHAIN_HOME}/bin/${CROSS_COMPILE_TARGET}-clang++) set(CMAKE_C_FLAGS_INIT - "-stdlib=libc++ -mtext-section-literals -mlongcalls -DET_ENABLE_ENUM_STRINGS=0" + "-stdlib=libc++ -mtext-section-literals -mlongcalls -DET_ENABLE_ENUM_STRINGS=0 -O3 -mcoproc -LNO:simd -ffunction-sections -fsigned-char -INLINE:requested -fno-zero-initialized-in-bss -fmessage-length=0" ) set(CMAKE_CXX_FLAGS_INIT - "-stdlib=libc++ -mtext-section-literals -mlongcalls -DET_ENABLE_ENUM_STRINGS=0" + "-stdlib=libc++ -mtext-section-literals -mlongcalls -DET_ENABLE_ENUM_STRINGS=0 -O3 -mcoproc -LNO:simd -ffunction-sections -fsigned-char -INLINE:requested -fno-zero-initialized-in-bss -fmessage-length=0" ) # workaround for larger compilation time set(CMAKE_CXX_FLAGS_INIT "${CMAKE_CXX_FLAGS_INIT} -fno-strict-aliasing") diff --git a/backends/cadence/hifi/kernels/CMakeLists.txt b/backends/cadence/hifi/kernels/CMakeLists.txt index a7ea9f5963c..826e93291e4 100644 --- a/backends/cadence/hifi/kernels/CMakeLists.txt +++ b/backends/cadence/hifi/kernels/CMakeLists.txt @@ -23,14 +23,22 @@ set(_common_include_directories ${EXECUTORCH_ROOT}/.. ${EXECUTORCH_ROOT}/runtime/core/portable_type/c10 ) +if(EXECUTORCH_HIFI_CORE STREQUAL "hifi5") + set(NNLIB_DIR_NAME "nnlib-hifi5") + set(NNLIB_ARCH_DIR "hifi5") +else() + set(NNLIB_DIR_NAME "nnlib-hifi4") + set(NNLIB_ARCH_DIR "hifi4") +endif() + target_include_directories( cadence_kernels PUBLIC . - ${EXECUTORCH_ROOT}/backends/cadence/hifi/third-party/nnlib/nnlib-hifi4/xa_nnlib/algo/common/include/ - ${EXECUTORCH_ROOT}/backends/cadence/hifi/third-party/nnlib/nnlib-hifi4/xa_nnlib/include/nnlib - ${EXECUTORCH_ROOT}/backends/cadence/hifi/third-party/nnlib/nnlib-hifi4/xa_nnlib/include - ${EXECUTORCH_ROOT}/backends/cadence/hifi/third-party/nnlib/nnlib-hifi4/xa_nnlib/algo/ndsp/hifi4/include/ + ${EXECUTORCH_ROOT}/backends/cadence/hifi/third-party/nnlib/${NNLIB_DIR_NAME}/xa_nnlib/algo/common/include/ + ${EXECUTORCH_ROOT}/backends/cadence/hifi/third-party/nnlib/${NNLIB_DIR_NAME}/xa_nnlib/include/nnlib + ${EXECUTORCH_ROOT}/backends/cadence/hifi/third-party/nnlib/${NNLIB_DIR_NAME}/xa_nnlib/include + ${EXECUTORCH_ROOT}/backends/cadence/hifi/third-party/nnlib/${NNLIB_DIR_NAME}/xa_nnlib/algo/ndsp/${NNLIB_ARCH_DIR}/include/ ${_common_include_directories} ) diff --git a/backends/cadence/hifi/kernels/kernels.cpp b/backends/cadence/hifi/kernels/kernels.cpp index 07f0ac960b1..f40365e8dcf 100644 --- a/backends/cadence/hifi/kernels/kernels.cpp +++ b/backends/cadence/hifi/kernels/kernels.cpp @@ -8,7 +8,12 @@ #include #include + +#if CORE_HIFI5 +#include +#else #include +#endif namespace impl { namespace HiFi { diff --git a/backends/cadence/hifi/third-party/nnlib/CMakeLists.txt b/backends/cadence/hifi/third-party/nnlib/CMakeLists.txt index 90eca6b47e1..5e552fe1cc8 100644 --- a/backends/cadence/hifi/third-party/nnlib/CMakeLists.txt +++ b/backends/cadence/hifi/third-party/nnlib/CMakeLists.txt @@ -1,11 +1,17 @@ cmake_minimum_required(VERSION 3.10.0) project(cadence_nnlib) +if(EXECUTORCH_HIFI_CORE STREQUAL "hifi5") + set(NNLIB_DIR_NAME "nnlib-hifi5") +else() + set(NNLIB_DIR_NAME "nnlib-hifi4") +endif() + add_custom_target( nnlib_target ALL COMMAND make install_nnlib -f makefile -C - ${EXECUTORCH_ROOT}/backends/cadence/hifi/third-party/nnlib/nnlib-hifi4/xa_nnlib/build + ${EXECUTORCH_ROOT}/backends/cadence/hifi/third-party/nnlib/${NNLIB_DIR_NAME}/xa_nnlib/build OBJDIR=${CMAKE_CURRENT_BINARY_DIR}/obj LIBDIR=${CMAKE_CURRENT_BINARY_DIR}/lib -j8 ) diff --git a/backends/cadence/hifi/third-party/nnlib/xa_nn_reduce_32_32.c b/backends/cadence/hifi/third-party/nnlib/xa_nn_reduce_32_32.c index fcc89260be4..99b18f5506a 100644 --- a/backends/cadence/hifi/third-party/nnlib/xa_nn_reduce_32_32.c +++ b/backends/cadence/hifi/third-party/nnlib/xa_nn_reduce_32_32.c @@ -1,7 +1,11 @@ #include "xa_nnlib_common.h" #include //#include "xa_nn_basic_state.h" -#include "xa_nnlib_common_macros.h" +#if CORE_HIFI5 +#include +#else +#include +#endif #define ALIGNMENT_8 8 diff --git a/backends/cadence/install_requirements.sh b/backends/cadence/install_requirements.sh index 88c5bdb21d1..bb642b1696a 100755 --- a/backends/cadence/install_requirements.sh +++ b/backends/cadence/install_requirements.sh @@ -10,7 +10,6 @@ green=`tput setaf 2` EXECUTORCH_ROOT_PATH=$(realpath "$SCRIPT_DIR_PATH/../../") CADENCE_DIR_PATH="$EXECUTORCH_ROOT_PATH/backends/cadence" -HIFI_DIR_PATH="$CADENCE_DIR_PATH/hifi/third-party/nnlib/nnlib-hifi4" FUSION_DIR_PATH="$CADENCE_DIR_PATH/fusion_g3/third-party/nnlib/nnlib-FusionG3" FACTO_DIR_PATH="$CADENCE_DIR_PATH/utils/FACTO" @@ -18,20 +17,24 @@ cd "$EXECUTORCH_ROOT_PATH" ## HiFi -rm -rf "$HIFI_DIR_PATH" -mkdir -p "$HIFI_DIR_PATH" +targets=(hifi4 hifi5) -echo "${green}ExecuTorch: Cloning hifi nnlib" -git clone "https://github.com/foss-xtensa/nnlib-hifi4.git" $HIFI_DIR_PATH -cd $HIFI_DIR_PATH -STATUS=$? -if [ $STATUS -ne 0 ]; then - echo "${red}ExecuTorch: Failed to clone hifi nnlib." - exit 1 -fi +for target in ${targets[@]}; +do + TARGET_DIR_PATH="$CADENCE_DIR_PATH/hifi/third-party/nnlib/nnlib-$target" -git checkout 64d73d729797388b0e346794d7a2e408374a74de + rm -rf "$TARGET_DIR_PATH" + mkdir -p "$TARGET_DIR_PATH" + echo "${green}ExecuTorch: Cloning $target nnlib" + git clone "https://github.com/foss-xtensa/nnlib-$target.git" $TARGET_DIR_PATH + cd $TARGET_DIR_PATH + STATUS=$? + if [ $STATUS -ne 0 ]; then + echo "${red}ExecuTorch: Failed to clone $target nnlib." + exit 1 + fi +done ## Fusion G3