apollo.sh 19.2 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 195
      | grep -v modules/drivers/gnss \
      | xargs ${PROTOC} --python_out=py_proto
L
Lei Wang 已提交
196 197 198
  find py_proto/* -type d -exec touch "{}/__init__.py" \;
}

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

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

  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() {
215 216 217 218 219 220
  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 已提交
221 222 223
}

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

  # 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 已提交
236
    DST_PATH="${APOLLO_RELEASE_DIR}/${BIN}"
237 238 239 240 241
    if [ -e "${SRC_PATH}" ]; then
      mkdir -p "$(dirname "${DST_PATH}")"
      cp "${SRC_PATH}" "${DST_PATH}"
    fi
  done
D
Dong Li 已提交
242

243
  # modules data and conf
244 245
  CONFS=$(find modules/ -name "conf")
  DATAS=$(find modules/ -name "data")
246 247
  OTHER=("modules/tools"
         "modules/perception/model")
248 249 250 251 252 253 254 255 256 257 258
  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
259
  # Other
260
  for path in "${OTHER[@]}"; do
261 262 263
    mkdir -p $APOLLO_RELEASE_DIR/$path
    rsync -a $path/* $APOLLO_RELEASE_DIR/$path
  done
264 265 266

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

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

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

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

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

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

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

D
Dong Li 已提交
308 309 310 311 312 313 314 315
  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
316 317 318 319 320 321 322 323

  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 已提交
324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339
  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 已提交
340
  START_TIME=$(get_now)
D
Dong Li 已提交
341

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

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

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

368 369 370 371 372 373 374
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
375
  //modules/dreamview/backend/simulation_world:simulation_world_service_test
376
  "
A
Aaron Xiao 已提交
377
  bazel test $DEFINES --config=unit_test --test_verbose_timeout_warnings $@ $BUILD_TARGETS
378 379 380 381 382 383 384 385 386
  if [ $? -eq 0 ]; then
    success 'Test passed!'
    return 0
  else
    fail 'Test failed!'
    return 1
  fi
}

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

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

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

C
Calvin Miao 已提交
400 401 402 403 404 405 406 407
  # Add cpplint rule to BUILD files that do not contain it.
  for file in $(find modules -name BUILD | \
    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 已提交
408 409
  run_cpp_lint

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

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

function buildify() {
422 423 424 425 426
  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
427
  find . -name '*BUILD' -type f -exec ~/.buildifier -showlog -mode=fix {} +
428 429 430 431 432 433
  if [ $? -eq 0 ]; then
    success 'Buildify worked!'
  else
    fail 'Buildify failed!'
  fi
  rm ~/.buildifier
D
Dong Li 已提交
434 435
}

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

D
Dong Li 已提交
441 442 443 444 445 446 447 448 449 450 451 452
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}"
}

S
siyangy 已提交
453
function build_gnss() {
454
  CURRENT_PATH=$(pwd)
F
fengkaiwen01 已提交
455 456
  if [ -d "${ROS_ROOT}" ]; then
    ROS_PATH="${ROS_ROOT}/../.."
L
Lei Wang 已提交
457 458 459 460
  else
    warning "ROS not found. Run apolllo.sh build first."
    exit 1
  fi
461

L
Lei Wang 已提交
462
  source "${ROS_PATH}/setup.bash"
463 464 465 466 467 468 469 470 471 472 473

  protoc modules/common/proto/error_code.proto --cpp_out=./
  protoc modules/common/proto/header.proto --cpp_out=./
  protoc modules/common/proto/geometry.proto --cpp_out=./

  protoc modules/localization/proto/imu.proto --cpp_out=./
  protoc modules/localization/proto/gps.proto --cpp_out=./
  protoc modules/localization/proto/pose.proto --cpp_out=./

  protoc modules/drivers/gnss/proto/gnss.proto --cpp_out=./
  protoc modules/drivers/gnss/proto/imu.proto --cpp_out=./
F
fengkaiwen01 已提交
474
  protoc modules/drivers/gnss/proto/ins.proto --cpp_out=./ --python_out=./
475
  protoc modules/drivers/gnss/proto/config.proto --cpp_out=./
F
fengkaiwen01 已提交
476
  protoc modules/drivers/gnss/proto/gnss_status.proto --cpp_out=./ --python_out=./
477
  protoc modules/drivers/gnss/proto/gpgga.proto --cpp_out=./
478 479
  protoc modules/drivers/gnss/proto/gnss_raw_observation.proto --cpp_out=./ --python_out=./
  protoc modules/drivers/gnss/proto/gnss_best_pose.proto --cpp_out=./ --python_out=./
480 481

  cd modules
F
fengkaiwen01 已提交
482
  catkin_make_isolated --install --source drivers/gnss \
L
Lei Wang 已提交
483
    --install-space "${ROS_PATH}" -DCMAKE_BUILD_TYPE=Release \
484
    --cmake-args --no-warn-unused-cli
L
Lei Wang 已提交
485
  find "${ROS_PATH}" -name "*.pyc" -print0 | xargs -0 rm -rf
486 487 488 489 490 491
  cd -

  rm -rf modules/common/proto/*.pb.cc
  rm -rf modules/common/proto/*.pb.h
  rm -rf modules/drivers/gnss/proto/*.pb.cc
  rm -rf modules/drivers/gnss/proto/*.pb.h
F
fengkaiwen01 已提交
492
  rm -rf modules/drivers/gnss/proto/*_pb2.py
493 494 495 496 497 498
  rm -rf modules/localization/proto/*.pb.cc
  rm -rf modules/localization/proto/*.pb.h

  rm -rf modules/.catkin_workspace
  rm -rf modules/build_isolated/
  rm -rf modules/devel_isolated/
D
Dong Li 已提交
499 500
}

F
fengkaiwen01 已提交
501 502
function build_velodyne() {
  CURRENT_PATH=$(pwd)
F
fengkaiwen01 已提交
503 504
  if [ -d "${ROS_ROOT}" ]; then
    ROS_PATH="${ROS_ROOT}/../.."
F
fengkaiwen01 已提交
505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523
  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/
}

Y
yibingl 已提交
524 525
function build_usbcam() {
  CURRENT_PATH=$(pwd)
F
fengkaiwen01 已提交
526 527
  if [ -d "${ROS_ROOT}" ]; then
    ROS_PATH="${ROS_ROOT}/../.."
Y
yibingl 已提交
528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546
  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/
}

547
function config() {
548
  ${APOLLO_ROOT_DIR}/scripts/configurator.sh
549 550
}

551
function print_usage() {
C
Calvin Miao 已提交
552 553 554 555 556 557 558 559 560 561
  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
562
  ${BLUE}build_opt${NONE}: build optimized binary for the code
J
Jun Zhu 已提交
563
  ${BLUE}build_gpu${NONE}: run build only with Caffe GPU mode support
F
fengkaiwen01 已提交
564 565
  ${BLUE}build_gnss${NONE}: build gnss driver
  ${BLUE}build_velodyne${NONE}: build velodyne driver
gengqx's avatar
gengqx 已提交
566
  ${BLUE}build_usbcam${NONE}: build usb camera driver
J
Jun Zhu 已提交
567
  ${BLUE}build_opt_gpu${NONE}: build optimized binary with Caffe GPU mode support
C
Calvin Miao 已提交
568
  ${BLUE}build_fe${NONE}: compile frontend javascript code, this requires all the node_modules to be installed already
569
  ${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.
570
  ${BLUE}build_prof${NONE}: build for gprof support.
C
Calvin Miao 已提交
571 572 573 574 575 576 577 578 579 580 581 582
  ${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
  "
583 584
}

S
siyangy 已提交
585 586 587
function main() {
  source_apollo_base
  check_machine_arch
588
  apollo_check_system_config
S
siyangy 已提交
589 590
  check_esd_files

591 592 593 594 595
  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 已提交
596

597 598 599 600
  local cmd=$1
  shift

  case $cmd in
S
siyangy 已提交
601
    check)
602
      DEFINES="${DEFINES} --cxxopt=-DCPU_ONLY"
603
      check $@
S
siyangy 已提交
604 605
      ;;
    build)
L
Lei Wang 已提交
606
      DEFINES="${DEFINES} --cxxopt=-DCPU_ONLY"
607
      apollo_build_dbg $@
S
siyangy 已提交
608
      ;;
609
    build_prof)
D
Dong Li 已提交
610
      DEFINES="${DEFINES} --config=cpu_prof --cxxopt=-DCPU_ONLY"
611 612
      apollo_build_dbg $@
      ;;
613
    build_no_perception)
S
siyangy 已提交
614
      DEFINES="${DEFINES} --cxxopt=-DCPU_ONLY"
615
      NOT_BUILD_PERCEPTION=true
616 617 618 619 620 621 622
      if [ "$1" == "opt" ]; then
        shift
        apollo_build_opt $@
      elif [ "$1" == "dbg" ]; then
        shift
        apollo_build_dbg $@
      fi
623
      ;;
624 625 626 627
    cibuild)
      DEFINES="${DEFINES} --cxxopt=-DCPU_ONLY"
      cibuild $@
      ;;
628
    build_opt)
L
Lei Wang 已提交
629
      DEFINES="${DEFINES} --cxxopt=-DCPU_ONLY"
630
      apollo_build_opt $@
S
siyangy 已提交
631
      ;;
632
    build_gpu)
633
      DEFINES="${DEFINES} --cxxopt=-DUSE_CAFFE_GPU"
634
      apollo_build_dbg $@
J
Jun Zhu 已提交
635
      ;;
J
Jun Zhu 已提交
636
    build_opt_gpu)
637
      DEFINES="${DEFINES} --cxxopt=-DUSE_CAFFE_GPU"
638
      apollo_build_opt $@
S
siyangy 已提交
639
      ;;
S
siyangy 已提交
640 641 642
    build_fe)
      build_fe
      ;;
S
siyangy 已提交
643 644 645
    buildify)
      buildify
      ;;
F
fengkaiwen01 已提交
646
    build_gnss)
S
siyangy 已提交
647 648
      build_gnss
      ;;
L
Lei Wang 已提交
649 650 651
    build_py)
      build_py_proto
      ;;
F
fengkaiwen01 已提交
652
    build_velodyne)
F
fengkaiwen01 已提交
653 654
      build_velodyne
      ;;
F
fengkaiwen01 已提交
655
    build_usbcam)
Y
yibingl 已提交
656 657
      build_usbcam
      ;;
658 659 660
    config)
      config
      ;;
S
siyangy 已提交
661 662 663 664 665 666 667
    doc)
      gen_doc
      ;;
    lint)
      run_lint
      ;;
    test)
668
      DEFINES="${DEFINES} --cxxopt=-DCPU_ONLY"
L
Lei Wang 已提交
669
      run_test $@
S
siyangy 已提交
670
      ;;
671 672 673 674
    citest)
      DEFINES="${DEFINES} --cxxopt=-DCPU_ONLY"
      citest $@
      ;;
675 676 677
    test_gpu)
      DEFINES="${DEFINES} --cxxopt=-DUSE_CAFFE_GPU"
      USE_GPU="1"
L
Lei Wang 已提交
678
      run_test $@
679
      ;;
S
siyangy 已提交
680 681 682 683 684 685 686
    release)
      release 1
      ;;
    release_noproprietary)
      release 0
      ;;
    coverage)
L
Lei Wang 已提交
687
      gen_coverage $@
S
siyangy 已提交
688 689 690 691 692 693 694
      ;;
    clean)
      clean
      ;;
    version)
      version
      ;;
C
Calvin Miao 已提交
695 696 697
    usage)
      print_usage
      ;;
S
siyangy 已提交
698 699 700 701 702 703 704
    *)
      print_usage
      ;;
  esac
}

main $@