build.sh 11.2 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
OPTMODEL_DIR=""
BUILD_TAILOR=OFF
22
BUILD_CV=OFF
23
SHUTDOWN_LOG=ON
24

25 26 27 28
readonly THIRDPARTY_TAR=https://paddle-inference-dist.bj.bcebos.com/PaddleLite/third-party-05b862.tar.gz

readonly workspace=$PWD

Y
Yan Chunwei 已提交
29 30 31
# 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 {
32 33
    local root_dir=$1
    local build_dir=$2
Y
Yan Chunwei 已提交
34 35
    # in build directory
    # 1. Prepare gen_code file
36 37 38
    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 已提交
39 40

    # 2.Prepare debug tool
41 42 43
    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 已提交
44 45
}

46 47 48 49 50 51 52 53 54 55 56 57 58
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
}

59 60
function build_model_optimize_tool {
    cd $workspace
61
    prepare_thirdparty
62 63
    mkdir -p build.model_optimize_tool
    cd build.model_optimize_tool
64 65 66 67 68 69
    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
70 71
}

Y
Yan Chunwei 已提交
72 73 74 75 76 77 78 79
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 已提交
80 81 82 83
  if [ -d $build_dir ]
  then
    rm -rf $build_dir
  fi
Y
Yan Chunwei 已提交
84 85 86
  mkdir -p $build_dir
  cd $build_dir

87 88 89 90
  if [ ${os} == "armlinux" ]; then
    BUILD_JAVA=OFF
  fi

Y
Yan Chunwei 已提交
91
  cmake .. \
92
      ${PYTHON_FLAGS} \
Y
Yan Chunwei 已提交
93 94
      ${CMAKE_COMMON_OPTIONS} \
      -DWITH_TESTING=OFF \
95
      -DLITE_WITH_JAVA=$BUILD_JAVA \
96
      -DLITE_WITH_PYTHON=$BUILD_PYTHON \
97
      -DLITE_SHUTDOWN_LOG=$SHUTDOWN_LOG \
Y
Yan Chunwei 已提交
98 99
      -DLITE_ON_TINY_PUBLISH=ON \
      -DANDROID_STL_TYPE=$android_stl \
100
      -DLITE_BUILD_EXTRA=$BUILD_EXTRA \
101
      -DLITE_WITH_CV=$BUILD_CV \
102 103
      -DLITE_BUILD_TAILOR=$BUILD_TAILOR \
      -DLITE_OPTMODEL_DIR=$OPTMODEL_DIR \
Y
Yan Chunwei 已提交
104 105
      -DARM_TARGET_OS=${os} -DARM_TARGET_ARCH_ABI=${abi} -DARM_TARGET_LANG=${lang}

106
  make publish_inference -j$NUM_PROC
Y
Yan Chunwei 已提交
107 108 109 110 111 112 113 114 115
  cd - > /dev/null
}

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

116 117
  #git submodule update --init --recursive
  prepare_thirdparty
118

119 120 121 122
  root_dir=$(pwd)
  build_directory=$BUILD_DIR/build.lite.${os}.${abi}.${lang}

  if [ -d $build_directory ]
S
sangoly 已提交
123
  then
124
    rm -rf $build_directory
S
sangoly 已提交
125
  fi
126 127
  mkdir -p $build_directory
  cd $build_directory
128

129 130 131
  if [ ${os} == "armlinux" ]; then
    BUILD_JAVA=OFF
  fi
Y
Yan Chunwei 已提交
132

133 134
  prepare_workspace $root_dir $build_directory
  cmake $root_dir \
135
      ${PYTHON_FLAGS} \
Y
Yan Chunwei 已提交
136 137
      ${CMAKE_COMMON_OPTIONS} \
      -DWITH_TESTING=OFF \
138
      -DLITE_WITH_JAVA=$BUILD_JAVA \
139
      -DLITE_WITH_PYTHON=$BUILD_PYTHON \
140
      -DLITE_SHUTDOWN_LOG=$SHUTDOWN_LOG \
Y
Yan Chunwei 已提交
141
      -DANDROID_STL_TYPE=$android_stl \
142
      -DLITE_BUILD_EXTRA=$BUILD_EXTRA \
143
      -DLITE_WITH_CV=$BUILD_CV \
144 145
      -DLITE_BUILD_TAILOR=$BUILD_TAILOR \
      -DLITE_OPTMODEL_DIR=$OPTMODEL_DIR \
Y
Yan Chunwei 已提交
146 147 148 149 150 151 152 153 154 155 156
      -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

157 158
  #git submodule update --init --recursive
  prepare_thirdparty
159 160
  root_dir=$(pwd)
  build_directory=$BUILD_DIR/build.lite.${os}.${abi}.${lang}
S
sangoly 已提交
161 162 163 164
  if [ -d $build_dir ]
  then
    rm -rf $build_dir
  fi
165 166
  mkdir -p $build_directory
  cd $build_directory
Y
Yan Chunwei 已提交
167

168 169
  prepare_workspace $root_dir $build_directory
  cmake $root_dir \
Y
Yan Chunwei 已提交
170 171
      ${CMAKE_COMMON_OPTIONS} \
      -DWITH_TESTING=ON \
172
      -DLITE_BUILD_EXTRA=$BUILD_EXTRA \
173
      -DLITE_WITH_CV=$BUILD_CV \
Y
Yan Chunwei 已提交
174 175
      -DARM_TARGET_OS=${os} -DARM_TARGET_ARCH_ABI=${abi} -DARM_TARGET_LANG=${lang}

176
  make lite_compile_deps -j$NUM_PROC
Y
Yan Chunwei 已提交
177 178 179
  cd - > /dev/null
}

X
Xiaoyang LI 已提交
180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208
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 \
209
            -DLITE_WITH_CV=$BUILD_CV \
X
Xiaoyang LI 已提交
210 211 212 213 214 215
            -DARM_TARGET_OS=$os

    make -j4 publish_inference
    cd -
}

216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239
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 \
H
huzhiqiang 已提交
240 241
            -DLITE_WITH_PYTHON=ON \
            -DLITE_BUILD_EXTRA=ON
242 243 244 245

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

H
huzhiqiang 已提交
247 248 249 250
function make_x86 {
  prepare_thirdparty

  root_dir=$(pwd)
251
  build_directory=$BUILD_DIR/build.lite.x86
H
huzhiqiang 已提交
252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275

  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=ON       \
            -DWITH_MKLDNN=OFF    \
            -DLITE_WITH_X86=ON  \
            -DLITE_WITH_PROFILE=OFF \
            -DWITH_LITE=ON \
            -DLITE_WITH_LIGHT_WEIGHT_FRAMEWORK=OFF \
            -DLITE_WITH_ARM=OFF \
            -DWITH_GPU=OFF \
            -DLITE_BUILD_EXTRA=ON

  make publish_inference -j4
  cd -
}

Y
Yan Chunwei 已提交
276
function print_usage {
277
    set +x
Y
Yan Chunwei 已提交
278 279 280 281
    echo -e "\nUSAGE:"
    echo
    echo "----------------------------------------"
    echo -e "compile tiny publish so lib:"
X
Xiaoyang LI 已提交
282
    echo -e "for android:"
Y
Yan Chunwei 已提交
283
    echo -e "   ./build.sh --arm_os=<os> --arm_abi=<abi> --arm_lang=<lang> --android_stl=<stl> tiny_publish"
X
Xiaoyang LI 已提交
284 285
    echo -e "for ios:"
    echo -e "   ./build.sh --arm_os=<os> --arm_abi=<abi> ios"
Y
Yan Chunwei 已提交
286
    echo
X
Xiaoyang LI 已提交
287
    echo -e "compile full publish so lib (ios not support):"
Y
Yan Chunwei 已提交
288 289
    echo -e "   ./build.sh --arm_os=<os> --arm_abi=<abi> --arm_lang=<lang> --android_stl=<stl> full_publish"
    echo
X
Xiaoyang LI 已提交
290
    echo -e "compile all arm tests (ios not support):"
Y
Yan Chunwei 已提交
291 292
    echo -e "   ./build.sh --arm_os=<os> --arm_abi=<abi> --arm_lang=<lang> test"
    echo
293
    echo -e "optional argument:"
294
    echo -e "--shutdown_log: (OFF|ON); controls whether to shutdown log, default is ON"
295
    echo -e "--build_extra: (OFF|ON); controls whether to publish extra operators and kernels for (sequence-related model such as OCR or NLP)"
296 297
    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)"
298
    echo -e "--build_dir: directory for building"
Y
Yan Chunwei 已提交
299
    echo
300
    echo -e "argument choices:"
X
Xiaoyang LI 已提交
301
    echo -e "--arm_os:\t android|ios|ios64"
Y
Yan Chunwei 已提交
302
    echo -e "--arm_abi:\t armv8|armv7"
303
    echo -e "--arm_lang:\t only support gcc now, clang will be supported in future.(for android)"
X
Xiaoyang LI 已提交
304
    echo -e "--android_stl:\t c++_static|c++_shared (for android)"
Y
Yan Chunwei 已提交
305 306 307 308 309 310
    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 已提交
311 312 313 314 315
    echo "----------------------------------------"
    echo
}

function main {
Y
Yan Chunwei 已提交
316 317 318 319 320
    if [ -z "$1" ]; then
        print_usage
        exit -1
    fi

Y
Yan Chunwei 已提交
321 322 323 324 325 326 327 328 329 330 331 332 333
    # 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#*=}"
334 335 336 337 338 339 340
                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 已提交
341 342 343 344 345 346
                shift
                ;;
            --android_stl=*)
                ANDROID_STL="${i#*=}"
                shift
                ;;
347 348 349 350
            --build_extra=*)
                BUILD_EXTRA="${i#*=}"
                shift
                ;;
351 352 353 354 355 356 357 358
            --build_python=*)
                BUILD_PYTHON="${i#*=}"
                shift
                ;;
            --build_java=*)
                BUILD_JAVA="${i#*=}"
                shift
                ;;
359 360 361 362
            --build_dir=*)
                BUILD_DIR="${i#*=}"
                shift
		            ;;
363 364 365 366 367 368 369 370
            --opt_model_dir=*)
                OPTMODEL_DIR="${i#*=}"
                shift
                ;;
            --build_tailor=*)
                BUILD_TAILOR="${i#*=}"
                shift
                ;;
371 372 373 374
            --shutdown_log=*)
                SHUTDOWN_LOG="${i#*=}"
                shift
                ;;
Y
Yan Chunwei 已提交
375
            tiny_publish)
376
                make_tiny_publish_so $ARM_OS $ARM_ABI $ARM_LANG $ANDROID_STL 
Y
Yan Chunwei 已提交
377 378 379
                shift
                ;;
            full_publish)
380
                make_full_publish_so $ARM_OS $ARM_ABI $ARM_LANG $ANDROID_STL 
Y
Yan Chunwei 已提交
381 382 383 384 385 386
                shift
                ;;
            test)
                make_all_tests $ARM_OS $ARM_ABI $ARM_LANG
                shift
                ;;
X
Xiaoyang LI 已提交
387 388 389 390
            ios)
                make_ios $ARM_OS $ARM_ABI
                shift
                ;;
391 392 393 394
            build_optimize_tool)
                build_model_optimize_tool
                shift
                ;;
395
            cuda)
396
                make_cuda
397 398
                shift
                ;;
H
huzhiqiang 已提交
399 400 401 402
            x86)
               make_x86
               shift
               ;;
Y
Yan Chunwei 已提交
403 404 405 406 407 408 409 410 411 412
            *)
                # unknown option
                print_usage
                exit 1
                ;;
        esac
    done
}

main $@