build.sh 9.6 KB
Newer Older
Y
Yan Chunwei 已提交
1
#!/bin/bash
2
set -ex
Y
Yan Chunwei 已提交
3 4 5 6 7 8 9 10 11

readonly CMAKE_COMMON_OPTIONS="-DWITH_GPU=OFF \
                               -DWITH_MKL=OFF \
                               -DWITH_LITE=ON \
                               -DLITE_WITH_CUDA=OFF \
                               -DLITE_WITH_X86=OFF \
                               -DLITE_WITH_ARM=ON \
                               -DLITE_WITH_LIGHT_WEIGHT_FRAMEWORK=ON"

12 13
readonly NUM_PROC=${LITE_BUILD_THREADS:-4}

14 15 16

# global variables
BUILD_EXTRA=OFF
17
BUILD_JAVA=ON
18
BUILD_PYTHON=OFF
19
BUILD_DIR=$(pwd)
20

21 22 23 24
readonly THIRDPARTY_TAR=https://paddle-inference-dist.bj.bcebos.com/PaddleLite/third-party-05b862.tar.gz

readonly workspace=$PWD

Y
Yan Chunwei 已提交
25 26 27
# 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 {
28 29
    local root_dir=$1
    local build_dir=$2
Y
Yan Chunwei 已提交
30 31
    # in build directory
    # 1. Prepare gen_code file
32 33 34
    GEN_CODE_PATH_PREFIX=$build_dir/lite/gen_code
    mkdir -p ${GEN_CODE_PATH_PREFIX}
    touch ${GEN_CODE_PATH_PREFIX}/__generated_code__.cc
Y
Yan Chunwei 已提交
35 36

    # 2.Prepare debug tool
37 38 39
    DEBUG_TOOL_PATH_PREFIX=$build_dir/lite/tools/debug
    mkdir -p ${DEBUG_TOOL_PATH_PREFIX}
    cp $root_dir/lite/tools/debug/analysis_tool.py ${DEBUG_TOOL_PATH_PREFIX}/
Y
Yan Chunwei 已提交
40 41
}

42 43 44 45 46 47 48 49 50 51 52 53 54
function prepare_thirdparty {
    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
}

55 56
function build_model_optimize_tool {
    cd $workspace
57
    prepare_thirdparty
58 59
    mkdir -p build.model_optimize_tool
    cd build.model_optimize_tool
60 61 62 63 64 65
    cmake .. -DWITH_LITE=ON \
      -DLITE_ON_MODEL_OPTIMIZE_TOOL=ON \
      -DWITH_TESTING=OFF \
      -DLITE_BUILD_EXTRA=ON \
      -DWITH_MKL=OFF
    make model_optimize_tool -j$NUM_PROC
66 67
}

Y
Yan Chunwei 已提交
68 69 70 71 72 73 74 75
function make_tiny_publish_so {
  local os=$1
  local abi=$2
  local lang=$3
  local android_stl=$4

  cur_dir=$(pwd)
  build_dir=$cur_dir/build.lite.${os}.${abi}.${lang}
S
sangoly 已提交
76 77 78 79
  if [ -d $build_dir ]
  then
    rm -rf $build_dir
  fi
Y
Yan Chunwei 已提交
80 81 82
  mkdir -p $build_dir
  cd $build_dir

83 84 85 86
  if [ ${os} == "armlinux" ]; then
    BUILD_JAVA=OFF
  fi

Y
Yan Chunwei 已提交
87
  cmake .. \
88
      ${PYTHON_FLAGS} \
Y
Yan Chunwei 已提交
89 90
      ${CMAKE_COMMON_OPTIONS} \
      -DWITH_TESTING=OFF \
91
      -DLITE_WITH_JAVA=$BUILD_JAVA \
92
      -DLITE_WITH_PYTHON=$BUILD_PYTHON \
Y
Yan Chunwei 已提交
93 94 95
      -DLITE_SHUTDOWN_LOG=ON \
      -DLITE_ON_TINY_PUBLISH=ON \
      -DANDROID_STL_TYPE=$android_stl \
96
      -DLITE_BUILD_EXTRA=$BUILD_EXTRA \
Y
Yan Chunwei 已提交
97 98
      -DARM_TARGET_OS=${os} -DARM_TARGET_ARCH_ABI=${abi} -DARM_TARGET_LANG=${lang}

99
  make publish_inference -j$NUM_PROC
Y
Yan Chunwei 已提交
100 101 102 103 104 105 106 107 108
  cd - > /dev/null
}

function make_full_publish_so {
  local os=$1
  local abi=$2
  local lang=$3
  local android_stl=$4

109 110
  #git submodule update --init --recursive
  prepare_thirdparty
111

112 113 114 115
  root_dir=$(pwd)
  build_directory=$BUILD_DIR/build.lite.${os}.${abi}.${lang}

  if [ -d $build_directory ]
S
sangoly 已提交
116
  then
117
    rm -rf $build_directory
S
sangoly 已提交
118
  fi
119 120
  mkdir -p $build_directory
  cd $build_directory
121 122 123 124
  
  if [ ${os} == "armlinux" ]; then
    BUILD_JAVA=OFF
  fi
Y
Yan Chunwei 已提交
125

126 127
  prepare_workspace $root_dir $build_directory
  cmake $root_dir \
128
      ${PYTHON_FLAGS} \
Y
Yan Chunwei 已提交
129 130
      ${CMAKE_COMMON_OPTIONS} \
      -DWITH_TESTING=OFF \
131
      -DLITE_WITH_JAVA=$BUILD_JAVA \
132
      -DLITE_WITH_PYTHON=$BUILD_PYTHON \
Y
Yan Chunwei 已提交
133 134
      -DLITE_SHUTDOWN_LOG=ON \
      -DANDROID_STL_TYPE=$android_stl \
135
      -DLITE_BUILD_EXTRA=$BUILD_EXTRA \
Y
Yan Chunwei 已提交
136 137 138 139 140 141 142 143 144 145 146
      -DARM_TARGET_OS=${os} -DARM_TARGET_ARCH_ABI=${abi} -DARM_TARGET_LANG=${lang}

  make publish_inference -j4
  cd - > /dev/null
}

function make_all_tests {
  local os=$1
  local abi=$2
  local lang=$3

147 148
  #git submodule update --init --recursive
  prepare_thirdparty
149 150
  root_dir=$(pwd)
  build_directory=$BUILD_DIR/build.lite.${os}.${abi}.${lang}
S
sangoly 已提交
151 152 153 154
  if [ -d $build_dir ]
  then
    rm -rf $build_dir
  fi
155 156
  mkdir -p $build_directory
  cd $build_directory
Y
Yan Chunwei 已提交
157

158 159
  prepare_workspace $root_dir $build_directory
  cmake $root_dir \
Y
Yan Chunwei 已提交
160 161
      ${CMAKE_COMMON_OPTIONS} \
      -DWITH_TESTING=ON \
162
      -DLITE_BUILD_EXTRA=$BUILD_EXTRA \
Y
Yan Chunwei 已提交
163 164
      -DARM_TARGET_OS=${os} -DARM_TARGET_ARCH_ABI=${abi} -DARM_TARGET_LANG=${lang}

165
  make lite_compile_deps -j$NUM_PROC
Y
Yan Chunwei 已提交
166 167 168
  cd - > /dev/null
}

X
Xiaoyang LI 已提交
169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203
function make_ios {
    local os=$1
    local abi=$2
    build_dir=build.ios.${os}.${abi}
    echo "building ios target into $build_dir"
    echo "target os: $os"
    echo "target abi: $abi"
    mkdir -p ${build_dir}
    cd ${build_dir}
    GEN_CODE_PATH_PREFIX=lite/gen_code
    mkdir -p ./${GEN_CODE_PATH_PREFIX}
    touch ./${GEN_CODE_PATH_PREFIX}/__generated_code__.cc

    cmake .. \
            -DWITH_GPU=OFF \
            -DWITH_MKL=OFF \
            -DWITH_LITE=ON \
            -DLITE_WITH_CUDA=OFF \
            -DLITE_WITH_X86=OFF \
            -DLITE_WITH_ARM=ON \
            -DWITH_TESTING=OFF \
            -DLITE_WITH_JAVA=OFF \
            -DLITE_SHUTDOWN_LOG=ON \
            -DLITE_ON_TINY_PUBLISH=ON \
            -DLITE_WITH_OPENMP=OFF \
            -DWITH_ARM_DOTPROD=OFF \
            -DLITE_WITH_LIGHT_WEIGHT_FRAMEWORK=ON \
            -DARM_TARGET_ARCH_ABI=$abi \
            -DLITE_BUILD_EXTRA=$BUILD_EXTRA \
            -DARM_TARGET_OS=$os

    make -j4 publish_inference
    cd -
}

204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232
function make_cuda {
  prepare_thirdparty

  root_dir=$(pwd)
  build_directory=$BUILD_DIR/build_cuda

  if [ -d $build_directory ]
  then
    rm -rf $build_directory
  fi
  mkdir -p $build_directory
  cd $build_directory

  prepare_workspace $root_dir $build_directory

  cmake ..  -DWITH_MKL=OFF       \
            -DLITE_WITH_CUDA=ON  \
            -DWITH_MKLDNN=OFF    \
            -DLITE_WITH_X86=OFF  \
            -DLITE_WITH_PROFILE=OFF \
            -DWITH_LITE=ON \
            -DLITE_WITH_LIGHT_WEIGHT_FRAMEWORK=OFF \
            -DWITH_TESTING=OFF \
            -DLITE_WITH_ARM=OFF \
            -DLITE_WITH_PYTHON=ON 

  make publish_inference_python_lib -j8
  cd -
}
Y
Yan Chunwei 已提交
233 234

function print_usage {
235
    set +x
Y
Yan Chunwei 已提交
236 237 238 239
    echo -e "\nUSAGE:"
    echo
    echo "----------------------------------------"
    echo -e "compile tiny publish so lib:"
X
Xiaoyang LI 已提交
240
    echo -e "for android:"
Y
Yan Chunwei 已提交
241
    echo -e "   ./build.sh --arm_os=<os> --arm_abi=<abi> --arm_lang=<lang> --android_stl=<stl> tiny_publish"
X
Xiaoyang LI 已提交
242 243
    echo -e "for ios:"
    echo -e "   ./build.sh --arm_os=<os> --arm_abi=<abi> ios"
Y
Yan Chunwei 已提交
244
    echo
X
Xiaoyang LI 已提交
245
    echo -e "compile full publish so lib (ios not support):"
Y
Yan Chunwei 已提交
246 247
    echo -e "   ./build.sh --arm_os=<os> --arm_abi=<abi> --arm_lang=<lang> --android_stl=<stl> full_publish"
    echo
X
Xiaoyang LI 已提交
248
    echo -e "compile all arm tests (ios not support):"
Y
Yan Chunwei 已提交
249 250
    echo -e "   ./build.sh --arm_os=<os> --arm_abi=<abi> --arm_lang=<lang> test"
    echo
251 252
    echo -e "optional argument:"
    echo -e "--build_extra: (OFF|ON); controls whether to publish extra operators and kernels for (sequence-related model such as OCR or NLP)"
253 254
    echo -e "--build_python: (OFF|ON); controls whether to publish python api lib (ANDROID and IOS is not supported)"
    echo -e "--build_java: (OFF|ON); controls whether to publish java api lib (Only ANDROID is supported)"
255
    echo -e "--build_dir: directory for building"
Y
Yan Chunwei 已提交
256
    echo
257
    echo -e "argument choices:"
X
Xiaoyang LI 已提交
258
    echo -e "--arm_os:\t android|ios|ios64"
Y
Yan Chunwei 已提交
259
    echo -e "--arm_abi:\t armv8|armv7"
260
    echo -e "--arm_lang:\t only support gcc now, clang will be supported in future.(for android)"
X
Xiaoyang LI 已提交
261
    echo -e "--android_stl:\t c++_static|c++_shared (for android)"
Y
Yan Chunwei 已提交
262 263 264 265 266 267
    echo
    echo -e "tasks:"
    echo
    echo -e "tiny_publish: a small library for deployment."
    echo -e "full_publish: a full library for debug and test."
    echo -e "test: produce all the unittests."
Y
Yan Chunwei 已提交
268 269 270 271 272
    echo "----------------------------------------"
    echo
}

function main {
Y
Yan Chunwei 已提交
273 274 275 276 277
    if [ -z "$1" ]; then
        print_usage
        exit -1
    fi

Y
Yan Chunwei 已提交
278 279 280 281 282 283 284 285 286 287 288 289 290
    # Parse command line.
    for i in "$@"; do
        case $i in
            --arm_os=*)
                ARM_OS="${i#*=}"
                shift
                ;;
            --arm_abi=*)
                ARM_ABI="${i#*=}"
                shift
                ;;
            --arm_lang=*)
                ARM_LANG="${i#*=}"
291 292 293 294 295 296 297
                if [ ${ARM_LANG} == "clang" ]; then
                     set +x
                     echo
                     echo -e "error: only support gcc now, clang will be supported in future."
                     echo
                     exit 1
                fi
Y
Yan Chunwei 已提交
298 299 300 301 302 303
                shift
                ;;
            --android_stl=*)
                ANDROID_STL="${i#*=}"
                shift
                ;;
304 305 306 307
            --build_extra=*)
                BUILD_EXTRA="${i#*=}"
                shift
                ;;
308 309 310 311 312 313 314 315
            --build_python=*)
                BUILD_PYTHON="${i#*=}"
                shift
                ;;
            --build_java=*)
                BUILD_JAVA="${i#*=}"
                shift
                ;;
316 317 318 319
            --build_dir=*)
                BUILD_DIR="${i#*=}"
                shift
		            ;;
Y
Yan Chunwei 已提交
320 321 322 323 324 325 326 327 328 329 330 331
            tiny_publish)
                make_tiny_publish_so $ARM_OS $ARM_ABI $ARM_LANG $ANDROID_STL
                shift
                ;;
            full_publish)
                make_full_publish_so $ARM_OS $ARM_ABI $ARM_LANG $ANDROID_STL
                shift
                ;;
            test)
                make_all_tests $ARM_OS $ARM_ABI $ARM_LANG
                shift
                ;;
X
Xiaoyang LI 已提交
332 333 334 335
            ios)
                make_ios $ARM_OS $ARM_ABI
                shift
                ;;
336 337 338 339
            build_optimize_tool)
                build_model_optimize_tool
                shift
                ;;
340 341 342 343
            cuda)
                make_cuda 
                shift
                ;;
Y
Yan Chunwei 已提交
344 345 346 347 348 349 350 351 352 353
            *)
                # unknown option
                print_usage
                exit 1
                ;;
        esac
    done
}

main $@