123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195 |
- function(download_ncnn)
- include(FetchContent)
- # We use a modified version of NCNN.
- # The changed code is in
- # https://github.com/csukuangfj/ncnn/pull/7
- # Please also change ../pack-for-embedded-systems.sh
- set(ncnn_URL "https://github.com/csukuangfj/ncnn/archive/refs/tags/sherpa-1.1.tar.gz")
- set(ncnn_URL2 "https://huggingface.co/csukuangfj/sherpa-ncnn-cmake-deps/resolve/main/ncnn-sherpa-1.1.tar.gz")
- set(ncnn_HASH "SHA256=254aaedf8ad3e6baaa63bcd5d23e9673e3973d7cb2154c18e5c7743d45b4e160")
- # If you don't have access to the Internet, please download it to your
- # local drive and modify the following line according to your needs.
- set(possible_file_locations
- $ENV{HOME}/Downloads/ncnn-sherpa-1.1.tar.gz
- $ENV{HOME}/asr/ncnn-sherpa-1.1.tar.gz
- ${PROJECT_SOURCE_DIR}/ncnn-sherpa-1.1.tar.gz
- ${PROJECT_BINARY_DIR}/ncnn-sherpa-1.1.tar.gz
- /tmp/ncnn-sherpa-1.1.tar.gz
- )
- foreach(f IN LISTS possible_file_locations)
- if(EXISTS ${f})
- set(ncnn_URL "${f}")
- file(TO_CMAKE_PATH "${ncnn_URL}" ncnn_URL)
- set(ncnn_URL2)
- break()
- endif()
- endforeach()
- if(NOT WIN32)
- FetchContent_Declare(ncnn
- URL
- ${ncnn_URL}
- ${ncnn_URL2}
- URL_HASH ${ncnn_HASH}
- PATCH_COMMAND
- sed -i.bak "/ncnn PROPERTIES VERSION/d" "src/CMakeLists.txt"
- )
- else()
- FetchContent_Declare(ncnn
- URL
- ${ncnn_URL}
- ${ncnn_URL2}
- URL_HASH ${ncnn_HASH}
- )
- endif()
- set(NCNN_PIXEL OFF CACHE BOOL "" FORCE)
- set(NCNN_PIXEL_ROTATE OFF CACHE BOOL "" FORCE)
- set(NCNN_PIXEL_AFFINE OFF CACHE BOOL "" FORCE)
- set(NCNN_PIXEL_DRAWING OFF CACHE BOOL "" FORCE)
- set(NCNN_BUILD_BENCHMARK OFF CACHE BOOL "" FORCE)
- set(NCNN_SHARED_LIB ${BUILD_SHARED_LIBS} CACHE BOOL "" FORCE)
- set(NCNN_BUILD_TOOLS OFF CACHE BOOL "" FORCE)
- set(NCNN_BUILD_EXAMPLES OFF CACHE BOOL "" FORCE)
- set(NCNN_BUILD_TESTS OFF CACHE BOOL "" FORCE)
- # For RNN-T with ScaledLSTM, the following operators are not sued,
- # so we keep them from compiling.
- #
- # CAUTION: If you switch to a different model, please change
- # the following disabled layers accordingly; otherwise, you
- # will get segmentation fault during runtime.
- set(disabled_layers
- AbsVal
- ArgMax
- BatchNorm
- Bias
- BNLL
- # Concat
- # Convolution
- # Crop
- Deconvolution
- # Dropout
- Eltwise
- ELU
- # Embed
- Exp
- # Flatten # needed by innerproduct
- # InnerProduct
- # Input
- Log
- LRN
- # MemoryData
- MVN
- Pooling
- Power
- PReLU
- Proposal
- # Reduction
- # ReLU
- # Reshape
- ROIPooling
- Scale
- # Sigmoid
- # Slice
- # Softmax
- # Split
- SPP
- # TanH
- Threshold
- Tile
- # RNN
- # LSTM
- # BinaryOp
- # UnaryOp
- ConvolutionDepthWise
- # Padding # required by innerproduct and convolution
- Squeeze
- # ExpandDims
- Normalize
- # Permute
- PriorBox
- DetectionOutput
- Interp
- DeconvolutionDepthWise
- ShuffleChannel
- InstanceNorm
- Clip
- Reorg
- YoloDetectionOutput
- # Quantize
- # Dequantize
- Yolov3DetectionOutput
- PSROIPooling
- ROIAlign
- # Packing
- # Requantize
- # Cast # needed InnerProduct
- HardSigmoid
- SELU
- HardSwish
- Noop
- PixelShuffle
- DeepCopy
- Mish
- StatisticsPooling
- Swish
- # Gemm
- GroupNorm
- LayerNorm
- Softplus
- GRU
- MultiHeadAttention
- GELU
- # Convolution1D
- Pooling1D
- # ConvolutionDepthWise1D
- Convolution3D
- ConvolutionDepthWise3D
- Pooling3D
- # MatMul
- Deconvolution1D
- # DeconvolutionDepthWise1D
- Deconvolution3D
- DeconvolutionDepthWise3D
- Einsum
- DeformableConv2D
- RelPositionalEncoding
- MakePadMask
- RelShift
- # GLU
- Fold
- Unfold
- GridSample
- CumulativeSum
- CopyTo
- )
- foreach(layer IN LISTS disabled_layers)
- string(TOLOWER ${layer} name)
- set(WITH_LAYER_${name} OFF CACHE BOOL "" FORCE)
- endforeach()
- FetchContent_GetProperties(ncnn)
- if(NOT ncnn_POPULATED)
- message(STATUS "Downloading ncnn from ${ncnn_URL}")
- FetchContent_Populate(ncnn)
- endif()
- message(STATUS "ncnn is downloaded to ${ncnn_SOURCE_DIR}")
- message(STATUS "ncnn's binary dir is ${ncnn_BINARY_DIR}")
- add_subdirectory(${ncnn_SOURCE_DIR} ${ncnn_BINARY_DIR} EXCLUDE_FROM_ALL)
- if(SHERPA_NCNN_ENABLE_PYTHON AND WIN32)
- install(TARGETS ncnn DESTINATION ..)
- else()
- install(TARGETS ncnn DESTINATION lib)
- endif()
- endfunction()
- download_ncnn()
|