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() {
119
  info "Start building, please wait ..."
D
Dong Li 已提交
120
  generate_build_targets
121 122
  info "Building on $MACHINE_ARCH..."

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

  # Build python proto
L
Lei Wang 已提交
135
  build_py_proto
136

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

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

153 154 155 156 157 158 159 160 161 162 163 164 165
function cibuild() {
  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 已提交
166
  bazel build $DEFINES $@ $BUILD_TARGETS
167 168 169 170 171 172 173
  if [ $? -eq 0 ]; then
    success 'Build passed!'
  else
    fail 'Build failed!'
  fi
}

174
function apollo_build_dbg() {
175
  build "dbg" $@
S
siyangy 已提交
176 177
}

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

L
Lei Wang 已提交
182 183 184 185 186 187
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'
188
  find modules/ -name "*.proto" \
S
siyangy 已提交
189
      | grep -v node_modules \
190
      | xargs ${PROTOC} --python_out=py_proto
L
Lei Wang 已提交
191 192 193
  find py_proto/* -type d -exec touch "{}/__init__.py" \;
}

D
Dong Li 已提交
194
function check() {
D
Dong Li 已提交
195
  bash $0 build && bash $0 "test" && bash $0 lint
D
Dong Li 已提交
196 197 198 199 200 201 202 203 204 205 206

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

function warn_proprietary_sw() {
207 208 209 210 211 212
  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 已提交
213 214 215
}

function release() {
216 217
  RELEASE_DIR="${HOME}/.cache/apollo_release"
  if [ -d "${RELEASE_DIR}" ]; then
218
    rm -rf "${RELEASE_DIR}"
219
  fi
D
Dong Li 已提交
220 221
  APOLLO_RELEASE_DIR="${RELEASE_DIR}/apollo"
  mkdir -p "${APOLLO_RELEASE_DIR}"
222 223 224 225 226 227

  # 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 已提交
228
    DST_PATH="${APOLLO_RELEASE_DIR}/${BIN}"
229 230 231 232 233
    if [ -e "${SRC_PATH}" ]; then
      mkdir -p "$(dirname "${DST_PATH}")"
      cp "${SRC_PATH}" "${DST_PATH}"
    fi
  done
D
Dong Li 已提交
234

235
  # modules data and conf
236 237
  CONFS=$(find modules/ -name "conf")
  DATAS=$(find modules/ -name "data")
238 239
  OTHER=("modules/tools"
         "modules/perception/model")
240 241 242 243 244 245 246 247 248 249 250
  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
251
  # Other
252
  for path in "${OTHER[@]}"; do
253 254 255
    mkdir -p $APOLLO_RELEASE_DIR/$path
    rsync -a $path/* $APOLLO_RELEASE_DIR/$path
  done
256 257 258

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

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

S
siyangy 已提交
263
  # scripts
D
Dong Li 已提交
264
  cp -r scripts ${APOLLO_RELEASE_DIR}
S
siyangy 已提交
265

266 267 268
  # remove mounted models
  rm -rf ${APOLLO_RELEASE_DIR}/modules/perception/model/yolo_camera_detector/

D
Dong Li 已提交
269
  # lib
D
Dong Li 已提交
270
  LIB_DIR="${APOLLO_RELEASE_DIR}/lib"
271
  mkdir "${LIB_DIR}"
D
Dong Li 已提交
272
  if $USE_ESD_CAN; then
L
Lei Wang 已提交
273
    warn_proprietary_sw
D
Dong Li 已提交
274
  fi
275
  cp -r third_party/can_card_library/*/lib/* $LIB_DIR
L
Lei Wang 已提交
276 277
  cp -r bazel-genfiles/external $LIB_DIR
  cp -r py_proto/modules $LIB_DIR
278
  cp modules/perception/cuda_util/cmake_build/libcuda_util.so $LIB_DIR
279

D
Dong Li 已提交
280
  # doc
D
Dong Li 已提交
281 282
  cp LICENSE "${APOLLO_RELEASE_DIR}"
  cp third_party/ACKNOWLEDGEMENT.txt "${APOLLO_RELEASE_DIR}"
L
Lei Wang 已提交
283

S
siyangy 已提交
284
  # release info
D
Dong Li 已提交
285
  META="${APOLLO_RELEASE_DIR}/meta.ini"
L
Lei Wang 已提交
286
  echo "git_commit: $(git rev-parse HEAD)" >> $META
287 288
  echo "car_type: LINCOLN.MKZ" >> $META
  echo "arch: ${MACHINE_ARCH}" >> $META
D
Dong Li 已提交
289 290 291 292
}

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

D
Dong Li 已提交
299 300 301 302 303 304 305 306
  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
307 308 309 310 311 312 313 314

  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

J
Jiangtao Hu 已提交
315
  lcov --rc lcov_branch_coverage=1 --capture --directory "$COV_DIR/objs" --output-file "$COV_DIR/conv.info"
D
Dong Li 已提交
316 317 318
  if [ $? -ne 0 ]; then
    fail 'lcov failed!'
  fi
J
Jiangtao Hu 已提交
319
  lcov --rc lcov_branch_coverage=1 --remove "$COV_DIR/conv.info" \
D
Dong Li 已提交
320 321 322 323 324 325 326 327 328 329 330
      "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() {
331
  generate_build_targets
332 333
  if [ "$USE_GPU" == "1" ]; then
    echo -e "${RED}Need GPU to run the tests.${NO_COLOR}"
L
Lei Wang 已提交
334
    echo "$BUILD_TARGETS" | xargs bazel test $DEFINES --config=unit_test -c dbg --test_verbose_timeout_warnings $@
335
  else
336
    echo "$BUILD_TARGETS" | grep -v "cnn_segmentation_test\|yolo_camera_detector_test\|unity_recognize_test\|perception_traffic_light_rectify_test\|cuda_util_test" | xargs bazel test $DEFINES --config=unit_test -c dbg --test_verbose_timeout_warnings $@
337
  fi
338 339 340 341 342
  if [ $? -ne 0 ]; then
    fail 'Test failed!'
    return 1
  fi

S
siyangy 已提交
343
  if [ $? -eq 0 ]; then
D
Dong Li 已提交
344 345 346 347 348
    success 'Test passed!'
    return 0
  fi
}

349 350 351 352 353 354
function citest() {
  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
355
  //modules/dreamview/backend/simulation_world:simulation_world_service_test
356
  "
A
Aaron Xiao 已提交
357
  bazel test $DEFINES --config=unit_test --test_verbose_timeout_warnings $@ $BUILD_TARGETS
358 359 360 361 362 363 364 365 366
  if [ $? -eq 0 ]; then
    success 'Test passed!'
    return 0
  else
    fail 'Test failed!'
    return 1
  fi
}

D
Dong Li 已提交
367
function run_cpp_lint() {
368 369
  generate_build_targets
  echo "$BUILD_TARGETS" | xargs bazel test --config=cpplint -c dbg
D
Dong Li 已提交
370 371 372
}

function run_bash_lint() {
S
siyangy 已提交
373
  FILES=$(find "${APOLLO_ROOT_DIR}" -type f -name "*.sh" | grep -v ros)
D
Dong Li 已提交
374 375 376 377
  echo "${FILES}" | xargs shellcheck
}

function run_lint() {
C
Calvin Miao 已提交
378
  # Add cpplint rule to BUILD files that do not contain it.
379
  for file in $(find modules -name BUILD |  grep -v gnss/third_party | \
C
Calvin Miao 已提交
380 381 382 383 384 385
    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 已提交
386 387
  run_cpp_lint

D
Dong Li 已提交
388 389 390 391 392 393 394 395
  if [ $? -eq 0 ]; then
    success 'Lint passed!'
  else
    fail 'Lint failed!'
  fi
}

function clean() {
396
  bazel clean --async
D
Dong Li 已提交
397 398 399
}

function buildify() {
400 401 402
  local buildifier_url=https://github.com/bazelbuild/buildtools/releases/download/0.4.5/buildifier
  wget $buildifier_url -O ~/.buildifier
  chmod +x ~/.buildifier
403
  find . -name '*BUILD' -type f -exec ~/.buildifier -showlog -mode=fix {} +
404 405 406 407 408 409
  if [ $? -eq 0 ]; then
    success 'Buildify worked!'
  else
    fail 'Buildify failed!'
  fi
  rm ~/.buildifier
D
Dong Li 已提交
410 411
}

S
siyangy 已提交
412 413 414 415 416
function build_fe() {
  cd modules/dreamview/frontend
  yarn build
}

D
Dong Li 已提交
417 418 419 420 421 422 423 424 425 426 427 428
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 已提交
429 430
function build_velodyne() {
  CURRENT_PATH=$(pwd)
F
fengkaiwen01 已提交
431 432
  if [ -d "${ROS_ROOT}" ]; then
    ROS_PATH="${ROS_ROOT}/../.."
F
fengkaiwen01 已提交
433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451
  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/
}

452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475
function build_velodyne_vls128() {
  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
  catkin_make_isolated --install --source drivers/velodyne_vls \
    --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/
}


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

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
489
  catkin_make_isolated --install --source drivers/lslidar_apollo \
490 491 492 493 494 495 496 497 498 499
    --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/
}

T
Tony Zhang 已提交
500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523
function build_rslidar() {
  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
  catkin_make_isolated --install --source drivers/rslidar \
    --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
  ${BLUE}build_velodyne${NONE}: build velodyne driver
565
  ${BLUE}build_velodyne_vls128${NONE}: build velodyne vls-128 driver
566
  ${BLUE}build_lslidar${NONE}: build lslidar driver
T
Tony Zhang 已提交
567
  ${BLUE}build_rslidar${NONE}: build rslidar driver
gengqx's avatar
gengqx 已提交
568
  ${BLUE}build_usbcam${NONE}: build usb camera driver
J
Jun Zhu 已提交
569
  ${BLUE}build_opt_gpu${NONE}: build optimized binary with Caffe GPU mode support
C
Calvin Miao 已提交
570
  ${BLUE}build_fe${NONE}: compile frontend javascript code, this requires all the node_modules to be installed already
571
  ${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.
572
  ${BLUE}build_prof${NONE}: build for gprof support.
C
Calvin Miao 已提交
573 574 575 576 577 578 579 580 581 582 583 584
  ${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
  "
585 586
}

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

593 594 595 596 597
  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 已提交
598

599 600 601
  local cmd=$1
  shift

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

main $@