apollo.sh 17.9 KB
Newer Older
D
Dong Li 已提交
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
#!/usr/bin/env bash

###############################################################################
# Copyright 2017 The Apollo Authors. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
###############################################################################

#=================================================
#                   Utils
#=================================================

S
siyangy 已提交
23 24 25
function source_apollo_base() {
  DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
  cd "${DIR}"
D
Dong Li 已提交
26

S
siyangy 已提交
27 28
  source "${DIR}/scripts/apollo_base.sh"
}
29 30

function apollo_check_system_config() {
31
  # check docker environment
32
  if [ ${MACHINE_ARCH} == "x86_64" ] && [ ${APOLLO_IN_DOCKER} != "true" ]; then
33 34 35 36
    echo -e "${RED}Must run $0 in dev docker or release docker${NO_COLOR}"
    exit 0
  fi

37
  # check operating system
38
  OP_SYSTEM=$(uname -s)
39
  case $OP_SYSTEM in
40 41
    "Linux")
      echo "System check passed. Build continue ..."
42 43 44 45 46 47 48

      # check system configuration
      DEFAULT_MEM_SIZE="2.0"
      MEM_SIZE=$(free | grep Mem | awk '{printf("%0.2f", $2 / 1024.0 / 1024.0)}')
      if (( $(echo "$MEM_SIZE < $DEFAULT_MEM_SIZE" | bc -l) )); then
         warning "System memory [${MEM_SIZE}G] is lower than minimum required memory size [2.0G]. Apollo build could fail."
      fi
49 50 51 52
      ;;
    "Darwin")
      warning "Mac OS is not officially supported in the current version. Build could fail. We recommend using Ubuntu 14.04."
      ;;
53
    *)
54 55 56 57
      error "Unsupported system: ${OP_SYSTEM}."
      error "Please use Linux, we recommend Ubuntu 14.04."
      exit 1
      ;;
58 59 60
  esac
}

S
siyangy 已提交
61 62 63
function check_machine_arch() {
  # the machine type, currently support x86_64, aarch64
  MACHINE_ARCH=$(uname -m)
D
Dong Li 已提交
64

S
siyangy 已提交
65 66 67 68 69 70 71 72 73
  # Generate WORKSPACE file based on marchine architecture
  if [ "$MACHINE_ARCH" == 'x86_64' ]; then
    sed "s/MACHINE_ARCH/x86_64/g" WORKSPACE.in > WORKSPACE
  elif [ "$MACHINE_ARCH" == 'aarch64' ]; then
    sed "s/MACHINE_ARCH/aarch64/g" WORKSPACE.in > WORKSPACE
  else
    fail "Unknown machine architecture $MACHINE_ARCH"
    exit 1
  fi
74 75

  #setup vtk folder name for different systems.
76
  VTK_VERSION=$(find /usr/include/ -type d  -name "vtk-*" | tail -n1 | cut -d '-' -f 2)
77
  sed -i "s/VTK_VERSION/${VTK_VERSION}/g" WORKSPACE
S
siyangy 已提交
78
}
D
Dong Li 已提交
79 80

function check_esd_files() {
S
siyangy 已提交
81 82
  CAN_CARD="fake_can"

D
Dong Li 已提交
83 84 85 86
  if [ -f ./third_party/can_card_library/esd_can/include/ntcan.h \
      -a -f ./third_party/can_card_library/esd_can/lib/libntcan.so.4 \
      -a -f ./third_party/can_card_library/esd_can/lib/libntcan.so.4.0.1 ]; then
      USE_ESD_CAN=true
L
Lei Wang 已提交
87
      CAN_CARD="esd_can"
D
Dong Li 已提交
88
  else
89
      warning "ESD CAN library supplied by ESD Electronics does not exist. If you need ESD CAN, please refer to third_party/can_card_library/esd_can/README.md."
D
Dong Li 已提交
90 91 92 93 94
      USE_ESD_CAN=false
  fi
}

function generate_build_targets() {
S
siyangy 已提交
95
  if [ -z $NOT_BUILD_PERCEPTION ] ; then
96 97 98
    BUILD_TARGETS=`bazel query //...`
  else
    info 'Skip building perception module!'
L
Lei Wang 已提交
99
    BUILD_TARGETS=`bazel query //... except //modules/perception/... except //modules/calibration/lidar_ex_checker/...`
100 101
  fi

C
Calvin Miao 已提交
102 103 104
  if [ $? -ne 0 ]; then
    fail 'Build failed!'
  fi
D
Dong Li 已提交
105
  if ! $USE_ESD_CAN; then
106
     BUILD_TARGETS=$(echo $BUILD_TARGETS |tr ' ' '\n' | grep -v "esd")
D
Dong Li 已提交
107
  fi
108
  #skip msf for non x86_64 platforms
109
  if [ ${MACHINE_ARCH} != "x86_64" ]; then
110 111
     BUILD_TARGETS=$(echo $BUILD_TARGETS |tr ' ' '\n' | grep -v "msf")
  fi
D
Dong Li 已提交
112 113 114 115 116 117
}

#=================================================
#              Build functions
#=================================================

S
siyangy 已提交
118
function build() {
S
siyangy 已提交
119
  START_TIME=$(get_now)
D
Dong Li 已提交
120

121

122
  info "Start building, please wait ..."
D
Dong Li 已提交
123
  generate_build_targets
124 125
  info "Building on $MACHINE_ARCH..."

126 127 128 129 130 131
  MACHINE_ARCH=$(uname -m)
  JOB_ARG=""
  if [ "$MACHINE_ARCH" == 'aarch64' ]; then
    JOB_ARG="--jobs=3"
  fi
  echo "$BUILD_TARGETS" | xargs bazel build $JOB_ARG $DEFINES -c $@
132
  if [ $? -ne 0 ]; then
D
Dong Li 已提交
133 134
    fail 'Build failed!'
  fi
S
siyangy 已提交
135 136

  # Build python proto
L
Lei Wang 已提交
137
  build_py_proto
138

139 140
  # Clear KV DB and update commit_id after compiling.
  rm -fr data/kv_db
141 142
  python modules/tools/common/kv_db.py put \
      "apollo:data:commit_id" "$(git rev-parse HEAD)"
143

144
  if [ -d /apollo-simulator ] && [ -e /apollo-simulator/build.sh ]; then
145 146 147 148
    cd /apollo-simulator && bash build.sh build
    if [ $? -ne 0 ]; then
      fail 'Build failed!'
    fi
149 150 151 152
  fi
  if [ $? -eq 0 ]; then
    success 'Build passed!'
  fi
D
Dong Li 已提交
153 154
}

155 156 157 158 159 160 161 162 163 164 165 166 167 168 169
function cibuild() {
  START_TIME=$(get_now)

  echo "Start building, please wait ..."
  generate_build_targets
  echo "Building on $MACHINE_ARCH..."
  BUILD_TARGETS="
  //modules/control
  //modules/dreamview
  //modules/localization
  //modules/perception
  //modules/planning
  //modules/prediction
  //modules/routing
  "
A
Aaron Xiao 已提交
170
  bazel build $DEFINES $@ $BUILD_TARGETS
171 172 173 174 175 176 177
  if [ $? -eq 0 ]; then
    success 'Build passed!'
  else
    fail 'Build failed!'
  fi
}

178
function apollo_build_dbg() {
179
  build "dbg" $@
S
siyangy 已提交
180 181
}

182
function apollo_build_opt() {
183
  build "opt" $@
S
siyangy 已提交
184 185
}

L
Lei Wang 已提交
186 187 188 189 190 191
function build_py_proto() {
  if [ -d "./py_proto" ];then
    rm -rf py_proto
  fi
  mkdir py_proto
  PROTOC='./bazel-out/host/bin/external/com_google_protobuf/protoc'
192
  find modules/ -name "*.proto" \
S
siyangy 已提交
193
      | grep -v node_modules \
194
      | xargs ${PROTOC} --python_out=py_proto
L
Lei Wang 已提交
195 196 197
  find py_proto/* -type d -exec touch "{}/__init__.py" \;
}

D
Dong Li 已提交
198
function check() {
S
siyangy 已提交
199
  local check_start_time=$(get_now)
D
Dong Li 已提交
200 201

  bash $0 build && bash $0 "test" && bash $0 lint
D
Dong Li 已提交
202 203 204 205 206 207 208 209 210 211 212 213

  START_TIME=$check_start_time
  if [ $? -eq 0 ]; then
    success 'Check passed!'
    return 0
  else
    fail 'Check failed!'
    return 1
  fi
}

function warn_proprietary_sw() {
214 215 216 217 218 219
  echo -e "${RED}The release built contains proprietary software provided by other parties.${NO_COLOR}"
  echo -e "${RED}Make sure you have obtained proper licensing agreement for redistribution${NO_COLOR}"
  echo -e "${RED}if you intend to publish the release package built.${NO_COLOR}"
  echo -e "${RED}Such licensing agreement is solely between you and the other parties,${NO_COLOR}"
  echo -e "${RED}and is not covered by the license terms of the apollo project${NO_COLOR}"
  echo -e "${RED}(see file license).${NO_COLOR}"
D
Dong Li 已提交
220 221 222
}

function release() {
223 224
  RELEASE_DIR="${HOME}/.cache/apollo_release"
  if [ -d "${RELEASE_DIR}" ]; then
225
    rm -rf "${RELEASE_DIR}"
226
  fi
D
Dong Li 已提交
227 228
  APOLLO_RELEASE_DIR="${RELEASE_DIR}/apollo"
  mkdir -p "${APOLLO_RELEASE_DIR}"
229 230 231 232 233 234

  # Find binaries and convert from //path:target to path/target
  BINARIES=$(bazel query "kind(cc_binary, //...)" | sed 's/^\/\///' | sed 's/:/\//')
  # Copy binaries to release dir.
  for BIN in ${BINARIES}; do
    SRC_PATH="bazel-bin/${BIN}"
D
Dong Li 已提交
235
    DST_PATH="${APOLLO_RELEASE_DIR}/${BIN}"
236 237 238 239 240
    if [ -e "${SRC_PATH}" ]; then
      mkdir -p "$(dirname "${DST_PATH}")"
      cp "${SRC_PATH}" "${DST_PATH}"
    fi
  done
D
Dong Li 已提交
241

242
  # modules data and conf
243 244
  CONFS=$(find modules/ -name "conf")
  DATAS=$(find modules/ -name "data")
245 246
  OTHER=("modules/tools"
         "modules/perception/model")
247 248 249 250 251 252 253 254 255 256 257
  rm -rf test/*
  for conf in $CONFS; do
    mkdir -p $APOLLO_RELEASE_DIR/$conf
    rsync -a $conf/* $APOLLO_RELEASE_DIR/$conf
  done
  for data in $DATAS; do
    mkdir -p $APOLLO_RELEASE_DIR/$data
    if [ $data != "modules/map/data" ]; then
      rsync -a $data/* $APOLLO_RELEASE_DIR/$data
    fi
  done
258
  # Other
259
  for path in "${OTHER[@]}"; do
260 261 262
    mkdir -p $APOLLO_RELEASE_DIR/$path
    rsync -a $path/* $APOLLO_RELEASE_DIR/$path
  done
263 264 265

  # dreamview frontend
  cp -a modules/dreamview/frontend $APOLLO_RELEASE_DIR/modules/dreamview
S
siyangy 已提交
266

267
  # remove all pyc file in modules/
D
Dong Li 已提交
268
  find modules/ -name "*.pyc" | xargs -I {} rm {}
269

S
siyangy 已提交
270
  # scripts
D
Dong Li 已提交
271
  cp -r scripts ${APOLLO_RELEASE_DIR}
S
siyangy 已提交
272

D
Dong Li 已提交
273
  # lib
D
Dong Li 已提交
274
  LIB_DIR="${APOLLO_RELEASE_DIR}/lib"
275
  mkdir "${LIB_DIR}"
D
Dong Li 已提交
276
  if $USE_ESD_CAN; then
L
Lei Wang 已提交
277
    warn_proprietary_sw
D
Dong Li 已提交
278 279
    for m in esd_can
    do
280
      cp third_party/can_card_library/$m/lib/* $LIB_DIR
D
Dong Li 已提交
281 282
    done
  fi
L
Lei Wang 已提交
283 284
  cp -r bazel-genfiles/external $LIB_DIR
  cp -r py_proto/modules $LIB_DIR
285
  cp /apollo/modules/perception/cuda_util/cmake_build/libcuda_util.so $LIB_DIR
286

D
Dong Li 已提交
287
  # doc
D
Dong Li 已提交
288 289 290
  cp -r docs "${APOLLO_RELEASE_DIR}"
  cp LICENSE "${APOLLO_RELEASE_DIR}"
  cp third_party/ACKNOWLEDGEMENT.txt "${APOLLO_RELEASE_DIR}"
L
Lei Wang 已提交
291

S
siyangy 已提交
292
  # release info
D
Dong Li 已提交
293
  META="${APOLLO_RELEASE_DIR}/meta.ini"
L
Lei Wang 已提交
294
  echo "git_commit: $(git rev-parse HEAD)" >> $META
295 296
  echo "car_type: LINCOLN.MKZ" >> $META
  echo "arch: ${MACHINE_ARCH}" >> $META
D
Dong Li 已提交
297 298 299 300
}

function gen_coverage() {
  bazel clean
301
  generate_build_targets
L
Lei Wang 已提交
302
  echo "$BUILD_TARGETS" | grep -v "cnn_segmentation_test" | xargs bazel test $DEFINES -c dbg --config=coverage $@
D
Dong Li 已提交
303 304 305
  if [ $? -ne 0 ]; then
    fail 'run test failed!'
  fi
S
siyangy 已提交
306

D
Dong Li 已提交
307 308 309 310 311 312 313 314
  COV_DIR=data/cov
  rm -rf $COV_DIR
  files=$(find bazel-out/local-dbg/bin/modules/ -iname "*.gcda" -o -iname "*.gcno" | grep -v external)
  for f in $files; do
    target="$COV_DIR/objs/modules/${f##*modules}"
    mkdir -p "$(dirname "$target")"
    cp "$f" "$target"
  done
315 316 317 318 319 320 321 322

  files=$(find bazel-out/local-opt/bin/modules/ -iname "*.gcda" -o -iname "*.gcno" | grep -v external)
  for f in $files; do
    target="$COV_DIR/objs/modules/${f##*modules}"
    mkdir -p "$(dirname "$target")"
    cp "$f" "$target"
  done

D
Dong Li 已提交
323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338
  lcov --capture --directory "$COV_DIR/objs" --output-file "$COV_DIR/conv.info"
  if [ $? -ne 0 ]; then
    fail 'lcov failed!'
  fi
  lcov --remove "$COV_DIR/conv.info" \
      "external/*" \
      "/usr/*" \
      "bazel-out/*" \
      "*third_party/*" \
      "tools/*" \
      -o $COV_DIR/stripped_conv.info
  genhtml $COV_DIR/stripped_conv.info --output-directory $COV_DIR/report
  echo "Generated coverage report in $COV_DIR/report/index.html"
}

function run_test() {
S
siyangy 已提交
339
  START_TIME=$(get_now)
D
Dong Li 已提交
340

341
  generate_build_targets
342 343
  if [ "$USE_GPU" == "1" ]; then
    echo -e "${RED}Need GPU to run the tests.${NO_COLOR}"
L
Lei Wang 已提交
344
    echo "$BUILD_TARGETS" | xargs bazel test $DEFINES --config=unit_test -c dbg --test_verbose_timeout_warnings $@
345
  else
346
    echo "$BUILD_TARGETS" | grep -v "cnn_segmentation_test" | grep -v "yolo_camera_detector_test" | xargs bazel test $DEFINES --config=unit_test -c dbg --test_verbose_timeout_warnings $@
347
  fi
348 349 350 351 352
  if [ $? -ne 0 ]; then
    fail 'Test failed!'
    return 1
  fi

353
  if [ -d /apollo-simulator ] && [ -e /apollo-simulator/build.sh ]; then
354 355 356 357 358 359 360
      cd /apollo-simulator && bash build.sh test
      if [ $? -ne 0 ]; then
        fail 'Test failed!'
        return 1
      fi
  fi

S
siyangy 已提交
361
  if [ $? -eq 0 ]; then
D
Dong Li 已提交
362 363 364 365 366
    success 'Test passed!'
    return 0
  fi
}

367 368 369 370 371 372 373
function citest() {
  START_TIME=$(get_now)
  BUILD_TARGETS="
  //modules/planning/integration_tests:garage_test
  //modules/planning/integration_tests:sunnyvale_loop_test
  //modules/control/integration_tests:simple_control_test
  //modules/prediction/container/obstacles:obstacle_test
374
  //modules/dreamview/backend/simulation_world:simulation_world_service_test
375
  "
A
Aaron Xiao 已提交
376
  bazel test $DEFINES --config=unit_test --test_verbose_timeout_warnings $@ $BUILD_TARGETS
377 378 379 380 381 382 383 384 385
  if [ $? -eq 0 ]; then
    success 'Test passed!'
    return 0
  else
    fail 'Test failed!'
    return 1
  fi
}

D
Dong Li 已提交
386
function run_cpp_lint() {
387 388
  generate_build_targets
  echo "$BUILD_TARGETS" | xargs bazel test --config=cpplint -c dbg
D
Dong Li 已提交
389 390 391
}

function run_bash_lint() {
S
siyangy 已提交
392
  FILES=$(find "${APOLLO_ROOT_DIR}" -type f -name "*.sh" | grep -v ros)
D
Dong Li 已提交
393 394 395 396
  echo "${FILES}" | xargs shellcheck
}

function run_lint() {
S
siyangy 已提交
397
  START_TIME=$(get_now)
D
Dong Li 已提交
398

C
Calvin Miao 已提交
399
  # Add cpplint rule to BUILD files that do not contain it.
400
  for file in $(find modules -name BUILD |  grep -v gnss/third_party | \
C
Calvin Miao 已提交
401 402 403 404 405 406
    xargs grep -l -E 'cc_library|cc_test|cc_binary' | xargs grep -L 'cpplint()')
  do
    sed -i '1i\load("//tools:cpplint.bzl", "cpplint")\n' $file
    sed -i -e '$a\\ncpplint()' $file
  done

S
siyangy 已提交
407 408
  run_cpp_lint

D
Dong Li 已提交
409 410 411 412 413 414 415 416
  if [ $? -eq 0 ]; then
    success 'Lint passed!'
  else
    fail 'Lint failed!'
  fi
}

function clean() {
417
  bazel clean --async
D
Dong Li 已提交
418 419 420
}

function buildify() {
421 422 423 424 425
  START_TIME=$(get_now)

  local buildifier_url=https://github.com/bazelbuild/buildtools/releases/download/0.4.5/buildifier
  wget $buildifier_url -O ~/.buildifier
  chmod +x ~/.buildifier
426
  find . -name '*BUILD' -type f -exec ~/.buildifier -showlog -mode=fix {} +
427 428 429 430 431 432
  if [ $? -eq 0 ]; then
    success 'Buildify worked!'
  else
    fail 'Buildify failed!'
  fi
  rm ~/.buildifier
D
Dong Li 已提交
433 434
}

S
siyangy 已提交
435 436 437 438 439
function build_fe() {
  cd modules/dreamview/frontend
  yarn build
}

D
Dong Li 已提交
440 441 442 443 444 445 446 447 448 449 450 451
function gen_doc() {
  rm -rf docs/doxygen
  doxygen apollo.doxygen
}

function version() {
  commit=$(git log -1 --pretty=%H)
  date=$(git log -1 --pretty=%cd)
  echo "Commit: ${commit}"
  echo "Date: ${date}"
}

F
fengkaiwen01 已提交
452 453
function build_velodyne() {
  CURRENT_PATH=$(pwd)
F
fengkaiwen01 已提交
454 455
  if [ -d "${ROS_ROOT}" ]; then
    ROS_PATH="${ROS_ROOT}/../.."
F
fengkaiwen01 已提交
456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474
  else
    warning "ROS not found. Run apolllo.sh build first."
    exit 1
  fi

  source "${ROS_PATH}/setup.bash"

  cd modules
  catkin_make_isolated --install --source drivers/velodyne \
    --install-space "${ROS_PATH}" -DCMAKE_BUILD_TYPE=Release \
    --cmake-args --no-warn-unused-cli
  find "${ROS_PATH}" -name "*.pyc" -print0 | xargs -0 rm -rf
  cd -

  rm -rf modules/.catkin_workspace
  rm -rf modules/build_isolated/
  rm -rf modules/devel_isolated/
}

475 476 477 478 479 480 481 482 483 484 485 486 487

function build_lslidar() {
  CURRENT_PATH=$(pwd)
  if [ -d "${ROS_ROOT}" ]; then
    ROS_PATH="${ROS_ROOT}/../.."
  else
    warning "ROS not found. Run apolllo.sh build first."
    exit 1
  fi

  source "${ROS_PATH}/setup.bash"

  cd modules
488
  catkin_make_isolated --install --source drivers/lslidar_apollo \
489 490 491 492 493 494 495 496 497 498
    --install-space "${ROS_PATH}" -DCMAKE_BUILD_TYPE=Release \
    --cmake-args --no-warn-unused-cli
  find "${ROS_PATH}" -name "*.pyc" -print0 | xargs -0 rm -rf
  cd -

  rm -rf modules/.catkin_workspace
  rm -rf modules/build_isolated/
  rm -rf modules/devel_isolated/
}

Y
yibingl 已提交
499 500
function build_usbcam() {
  CURRENT_PATH=$(pwd)
F
fengkaiwen01 已提交
501 502
  if [ -d "${ROS_ROOT}" ]; then
    ROS_PATH="${ROS_ROOT}/../.."
Y
yibingl 已提交
503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521
  else
    warning "ROS not found. Run apolllo.sh build first."
    exit 1
  fi

  source "${ROS_PATH}/setup.bash"

  cd modules
  catkin_make_isolated --install --source drivers/usb_cam \
    --install-space "${ROS_PATH}" -DCMAKE_BUILD_TYPE=Release \
    --cmake-args --no-warn-unused-cli
  find "${ROS_PATH}" -name "*.pyc" -print0 | xargs -0 rm -rf
  cd -

  rm -rf modules/.catkin_workspace
  rm -rf modules/build_isolated/
  rm -rf modules/devel_isolated/
}

522
function config() {
523
  ${APOLLO_ROOT_DIR}/scripts/configurator.sh
524 525
}

526
function print_usage() {
C
Calvin Miao 已提交
527 528 529 530 531 532 533 534 535 536
  RED='\033[0;31m'
  BLUE='\033[0;34m'
  BOLD='\033[1m'
  NONE='\033[0m'

  echo -e "\n${RED}Usage${NONE}:
  .${BOLD}/apollo.sh${NONE} [OPTION]"

  echo -e "\n${RED}Options${NONE}:
  ${BLUE}build${NONE}: run build only
537
  ${BLUE}build_opt${NONE}: build optimized binary for the code
J
Jun Zhu 已提交
538
  ${BLUE}build_gpu${NONE}: run build only with Caffe GPU mode support
F
fengkaiwen01 已提交
539
  ${BLUE}build_velodyne${NONE}: build velodyne driver
gengqx's avatar
gengqx 已提交
540
  ${BLUE}build_usbcam${NONE}: build usb camera driver
J
Jun Zhu 已提交
541
  ${BLUE}build_opt_gpu${NONE}: build optimized binary with Caffe GPU mode support
C
Calvin Miao 已提交
542
  ${BLUE}build_fe${NONE}: compile frontend javascript code, this requires all the node_modules to be installed already
543
  ${BLUE}build_no_perception [dbg|opt]${NONE}: run build build skip building perception module, useful when some perception dependencies are not satisified, e.g., CUDA, CUDNN, LIDAR, etc.
544
  ${BLUE}build_prof${NONE}: build for gprof support.
C
Calvin Miao 已提交
545 546 547 548 549 550 551 552 553 554 555 556
  ${BLUE}buildify${NONE}: fix style of BUILD files
  ${BLUE}check${NONE}: run build/lint/test, please make sure it passes before checking in new code
  ${BLUE}clean${NONE}: run Bazel clean
  ${BLUE}config${NONE}: run configurator tool
  ${BLUE}coverage${NONE}: generate test coverage report
  ${BLUE}doc${NONE}: generate doxygen document
  ${BLUE}lint${NONE}: run code style check
  ${BLUE}usage${NONE}: print this menu
  ${BLUE}release${NONE}: build release version
  ${BLUE}test${NONE}: run all unit tests
  ${BLUE}version${NONE}: display current commit and date
  "
557 558
}

S
siyangy 已提交
559 560 561
function main() {
  source_apollo_base
  check_machine_arch
562
  apollo_check_system_config
S
siyangy 已提交
563 564
  check_esd_files

565 566 567 568 569
  DEFINES="--define ARCH=${MACHINE_ARCH} --define CAN_CARD=${CAN_CARD} --cxxopt=-DUSE_ESD_CAN=${USE_ESD_CAN}"

  if [ ${MACHINE_ARCH} == "x86_64" ]; then
    DEFINES="${DEFINES} --copt=-mavx2"
  fi
S
siyangy 已提交
570

571 572 573 574
  local cmd=$1
  shift

  case $cmd in
S
siyangy 已提交
575
    check)
576
      DEFINES="${DEFINES} --cxxopt=-DCPU_ONLY"
577
      check $@
S
siyangy 已提交
578 579
      ;;
    build)
L
Lei Wang 已提交
580
      DEFINES="${DEFINES} --cxxopt=-DCPU_ONLY"
581
      apollo_build_dbg $@
S
siyangy 已提交
582
      ;;
583
    build_prof)
D
Dong Li 已提交
584
      DEFINES="${DEFINES} --config=cpu_prof --cxxopt=-DCPU_ONLY"
585 586
      apollo_build_dbg $@
      ;;
587
    build_no_perception)
S
siyangy 已提交
588
      DEFINES="${DEFINES} --cxxopt=-DCPU_ONLY"
589
      NOT_BUILD_PERCEPTION=true
590 591 592 593 594 595 596
      if [ "$1" == "opt" ]; then
        shift
        apollo_build_opt $@
      elif [ "$1" == "dbg" ]; then
        shift
        apollo_build_dbg $@
      fi
597
      ;;
598 599 600 601
    cibuild)
      DEFINES="${DEFINES} --cxxopt=-DCPU_ONLY"
      cibuild $@
      ;;
602
    build_opt)
L
Lei Wang 已提交
603
      DEFINES="${DEFINES} --cxxopt=-DCPU_ONLY"
604
      apollo_build_opt $@
S
siyangy 已提交
605
      ;;
606
    build_gpu)
607
      DEFINES="${DEFINES} --cxxopt=-DUSE_CAFFE_GPU"
608
      apollo_build_dbg $@
J
Jun Zhu 已提交
609
      ;;
J
Jun Zhu 已提交
610
    build_opt_gpu)
611
      DEFINES="${DEFINES} --cxxopt=-DUSE_CAFFE_GPU"
612
      apollo_build_opt $@
S
siyangy 已提交
613
      ;;
S
siyangy 已提交
614 615 616
    build_fe)
      build_fe
      ;;
S
siyangy 已提交
617 618 619
    buildify)
      buildify
      ;;
F
fengkaiwen01 已提交
620
    build_gnss)
S
siyangy 已提交
621 622
      build_gnss
      ;;
L
Lei Wang 已提交
623 624 625
    build_py)
      build_py_proto
      ;;
F
fengkaiwen01 已提交
626
    build_velodyne)
F
fengkaiwen01 已提交
627 628
      build_velodyne
      ;;
F
fengkaiwen01 已提交
629
    build_usbcam)
Y
yibingl 已提交
630 631
      build_usbcam
      ;;
632 633 634
    config)
      config
      ;;
S
siyangy 已提交
635 636 637 638 639 640 641
    doc)
      gen_doc
      ;;
    lint)
      run_lint
      ;;
    test)
642
      DEFINES="${DEFINES} --cxxopt=-DCPU_ONLY"
L
Lei Wang 已提交
643
      run_test $@
S
siyangy 已提交
644
      ;;
645 646 647 648
    citest)
      DEFINES="${DEFINES} --cxxopt=-DCPU_ONLY"
      citest $@
      ;;
649 650 651
    test_gpu)
      DEFINES="${DEFINES} --cxxopt=-DUSE_CAFFE_GPU"
      USE_GPU="1"
L
Lei Wang 已提交
652
      run_test $@
653
      ;;
S
siyangy 已提交
654 655 656 657 658 659 660
    release)
      release 1
      ;;
    release_noproprietary)
      release 0
      ;;
    coverage)
L
Lei Wang 已提交
661
      gen_coverage $@
S
siyangy 已提交
662 663 664 665 666 667 668
      ;;
    clean)
      clean
      ;;
    version)
      version
      ;;
C
Calvin Miao 已提交
669 670 671
    usage)
      print_usage
      ;;
S
siyangy 已提交
672 673 674 675 676 677 678
    *)
      print_usage
      ;;
  esac
}

main $@