cmake_minimum_required(VERSION 3.13) project(sherpa_kws_axera_cpp LANGUAGES C CXX) set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_STANDARD_REQUIRED ON) set(CMAKE_BUILD_TYPE Release CACHE STRING "") set(AXERA_TARGET "AX650" CACHE STRING "AXERA target: AX650 or AX630C") set_property(CACHE AXERA_TARGET PROPERTY STRINGS AX650 AX630C) string(TOUPPER "${AXERA_TARGET}" AXERA_TARGET) if(AXERA_TARGET STREQUAL "AX650") set(KWS_EXECUTABLE sherpa_kws_ax650) set(DEFAULT_BSP_MSP_DIR "${CMAKE_SOURCE_DIR}/toolchains/ax650n_bsp_sdk/msp/out") elseif(AXERA_TARGET STREQUAL "AX630C") set(KWS_EXECUTABLE sherpa_kws_ax630c) set(DEFAULT_BSP_MSP_DIR "${CMAKE_SOURCE_DIR}/toolchains/ax620e_bsp_sdk/msp/out/arm64_glibc") else() message(FATAL_ERROR "AXERA_TARGET must be AX650 or AX630C") endif() set(BSP_MSP_DIR "${DEFAULT_BSP_MSP_DIR}" CACHE PATH "BSP directory containing include/ and lib/") if(NOT EXISTS "${BSP_MSP_DIR}/include/ax_engine_api.h") message(FATAL_ERROR "${AXERA_TARGET} BSP not found: ${BSP_MSP_DIR}. " "Set BSP_MSP_DIR to the directory containing include/ and lib/.") endif() set(KALDI_NATIVE_FBANK_BUILD_TESTS OFF CACHE BOOL "" FORCE) set(KALDI_NATIVE_FBANK_BUILD_PYTHON OFF CACHE BOOL "" FORCE) set(KALDI_NATIVE_FBANK_ENABLE_CHECK OFF CACHE BOOL "" FORCE) set(BUILD_SHARED_LIBS OFF CACHE BOOL "" FORCE) set(KALDI_NATIVE_FBANK_ARCHIVE "${CMAKE_SOURCE_DIR}/third_party/kaldi-native-fbank-1.22.3.tar.gz") set(KISSFFT_ARCHIVE "${CMAKE_SOURCE_DIR}/third_party/kissfft-febd4caeed32e33ad8b2e0bb5ea77542c40f18ec.zip") if(NOT EXISTS "${KALDI_NATIVE_FBANK_ARCHIVE}" OR NOT EXISTS "${KISSFFT_ARCHIVE}") message(FATAL_ERROR "Missing cpp/third_party fbank archives") endif() file(MAKE_DIRECTORY "${CMAKE_BINARY_DIR}/third_party") execute_process( COMMAND ${CMAKE_COMMAND} -E tar xzf "${KALDI_NATIVE_FBANK_ARCHIVE}" WORKING_DIRECTORY "${CMAKE_BINARY_DIR}/third_party" RESULT_VARIABLE KNF_EXTRACT_RESULT ) if(NOT KNF_EXTRACT_RESULT EQUAL 0) message(FATAL_ERROR "Failed to extract kaldi-native-fbank archive") endif() set(KNF_SOURCE_DIR "${CMAKE_BINARY_DIR}/third_party/kaldi-native-fbank-1.22.3") file(COPY "${KISSFFT_ARCHIVE}" DESTINATION "${CMAKE_BINARY_DIR}") add_subdirectory("${KNF_SOURCE_DIR}" "${CMAKE_BINARY_DIR}/knf" EXCLUDE_FROM_ALL) add_executable(${KWS_EXECUTABLE} sherpa_kws_ax.cpp src/engine_wrapper.cpp ) target_include_directories(${KWS_EXECUTABLE} PRIVATE ${CMAKE_SOURCE_DIR} ${CMAKE_SOURCE_DIR}/src ${KNF_SOURCE_DIR} ${BSP_MSP_DIR}/include ) target_link_directories(${KWS_EXECUTABLE} PRIVATE ${BSP_MSP_DIR}/lib) target_compile_definitions(${KWS_EXECUTABLE} PRIVATE AXERA_TARGET_NAME="${AXERA_TARGET}" ) target_compile_options(${KWS_EXECUTABLE} PRIVATE -O3 -Wall -Wextra -Wpedantic -fvisibility=hidden -fdata-sections -ffunction-sections ) target_link_libraries(${KWS_EXECUTABLE} PRIVATE kaldi-native-fbank-core ax_sys ax_engine ax_interpreter pthread dl m ) target_link_options(${KWS_EXECUTABLE} PRIVATE -Wl,--enable-new-dtags -Wl,--allow-shlib-undefined ) set_target_properties(${KWS_EXECUTABLE} PROPERTIES BUILD_WITH_INSTALL_RPATH TRUE INSTALL_RPATH "$ORIGIN" )