build_rknpu.sh 4.5 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162
#!/bin/bash
set -ex

# global variables with default value
ARM_OS="armlinux"                    # android only yet
ARM_ABI="armv8"                     # armv8, armv7
ARM_LANG="gcc"                      # gcc only yet
DDK_ROOT="$(pwd)/rknpu"       
TARGET_NAME="test_subgraph_pass"    # default target
BUILD_EXTRA=OFF                     # ON(with sequence ops)/OFF
WITH_TESTING=ON 	            # ON/OFF
SHUTDOWN_LOG=OFF                    # ON(disable logging)/OFF
ON_TINY_PUBLISH=OFF                 # ON(tiny publish)/OFF(full publish)

function print_usage {
    echo -e "\nUSAGE:"
    echo
    echo "----------------------------------------"
    echo -e "--arm_os=<os> android only yet."
    echo -e "--arm_abi=<abi> armv8, armv7 yet."
    echo -e "--arm_lang=<gcc>"
    echo -e "--ddk_root=<hiai_ddk_root>"
    echo -e "--target_name=<target_name>"
    echo "----------------------------------------"
    echo
}

# for code gen, a source file is generated after a test, 
# but is dependended by some targets in cmake.
# here we fake an empty file to make cmake works.
function prepare_workspace {
    # in build directory
    # 1. Prepare gen_code file
    GEN_CODE_PATH_PREFIX=lite/gen_code
    mkdir -p ./${GEN_CODE_PATH_PREFIX}
    touch ./${GEN_CODE_PATH_PREFIX}/__generated_code__.cc

    # 2.Prepare debug tool
    DEBUG_TOOL_PATH_PREFIX=lite/tools/debug
    mkdir -p ./${DEBUG_TOOL_PATH_PREFIX}
    cp ../${DEBUG_TOOL_PATH_PREFIX}/analysis_tool.py ./${DEBUG_TOOL_PATH_PREFIX}/
}

function prepare_thirdparty {
    readonly THIRDPARTY_TAR=https://paddle-inference-dist.bj.bcebos.com/PaddleLite/third-party-05b862.tar.gz

    readonly workspace=$PWD
    if [ ! -d $workspace/third-party -o -f $workspace/third-party-05b862.tar.gz ]; then
        rm -rf $workspace/third-party

         if [ ! -f $workspace/third-party-05b862.tar.gz ]; then
            wget $THIRDPARTY_TAR
        fi
        tar xzf third-party-05b862.tar.gz
    else
        git submodule update --init --recursive
    fi
}

function build_npu {
    cur_dir=$(pwd)

    prepare_thirdparty

    local publish_dir
    if [[ "${ON_TINY_PUBLISH}" == "ON" ]]; then
        WITH_TESTING=OFF
        SHUTDOWN_LOG=ON
        publish_dir="tiny_publish"
    else
        publish_dir="full_publish"
    fi
    build_dir=$cur_dir/build.lite.rknpu.${ARM_OS}.${ARM_ABI}.${ARM_LANG}.${publish_dir}
    mkdir -p $build_dir
    cd $build_dir

    # NPU libs need API LEVEL 24 above
    prepare_workspace
    cmake .. \
        -DWITH_GPU=OFF \
        -DWITH_MKL=OFF \
        -DWITH_LITE=ON \
        -DLITE_WITH_CUDA=OFF \
        -DLITE_WITH_X86=OFF \
        -DLITE_WITH_NPU=OFF \
        -DLITE_WITH_JAVA=OFF \
        -DLITE_WITH_ARM=ON \
        -DLITE_WITH_LIGHT_WEIGHT_FRAMEWORK=ON	\
        -DWITH_ARM_DOTPROD=ON   \
        -DLITE_BUILD_EXTRA=${BUILD_EXTRA} \
        -DWITH_TESTING=${WITH_TESTING} \
        -DLITE_SHUTDOWN_LOG=${SHUTDOWN_LOG} \
        -DLITE_ON_TINY_PUBLISH=${ON_TINY_PUBLISH} \
        -DARM_TARGET_OS=${ARM_OS} \
        -DARM_TARGET_ARCH_ABI=${ARM_ABI} \
        -DARM_TARGET_LANG=${ARM_LANG} \
        -DLITE_WITH_RKNPU=ON \
        -DRKNPU_DDK_ROOT=${DDK_ROOT}

    make $TARGET_NAME -j2

    cd -
    echo "Done"
}

function main {
    # Parse command line.
    for i in "$@"; do
        case $i in
            --target_name=*)
                TARGET_NAME="${i#*=}"
                shift
                ;;
            --arm_os=*)
                ARM_OS="${i#*=}"
                shift
                ;;
            --arm_abi=*)
                ARM_ABI="${i#*=}"
                shift
                ;;
            --arm_lang=*)
                ARM_LANG="${i#*=}"
                shift
                ;;
            --android_stl=*)
                ANDROID_STL="${i#*=}"
                shift
                ;;
            --build_extra=*)
                BUILD_EXTRA="${i#*=}"
                shift
                ;;
            --ddk_root=*)
                DDK_ROOT="${i#*=}"
                shift
                ;;
            build)
                build_npu
                shift
                ;;
            full_publish)
                TARGET_NAME=publish_inference
                build_npu
                shift
                ;;
            tiny_publish)
                ON_TINY_PUBLISH=ON
                TARGET_NAME=publish_inference
                build_npu
                shift
                ;;
            *)
                # unknown option
                print_usage
                exit 1
                ;;
        esac
    done
}

main $@