build.sh 10.9 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

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

readonly workspace=$PWD

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

X
Xiaoyang LI 已提交
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 204 205 206 207
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 \
208
            -DLITE_WITH_CV=$BUILD_CV \
X
Xiaoyang LI 已提交
209 210 211 212 213 214
            -DARM_TARGET_OS=$os

    make -j4 publish_inference
    cd -
}

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

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

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

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

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

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

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

main $@