function(download_ncnn) include(FetchContent) # We use a modified version of NCNN. # The changed code is in # https://github.com/csukuangfj/ncnn/pull/7 # 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(ncnn_URL "file:///ceph-fj/fangjun/open-source/sherpa-ncnn/sherpa-0.7.tar.gz") set(ncnn_URL "https://github.com/csukuangfj/ncnn/archive/refs/tags/sherpa-0.7.tar.gz") set(ncnn_HASH "SHA256=fdf3cc29a43bfb3e2d7cdbbc98a7e69d0a3cc8922b67c47c4c2c8ac28125ae9c") FetchContent_Declare(ncnn URL ${ncnn_URL} URL_HASH ${ncnn_HASH} ) 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 ) 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 ${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}) install(TARGETS ncnn DESTINATION lib) endfunction() download_ncnn()