apollo.sh 20.0 KB
Newer Older
D
Dong Li 已提交
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
#!/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.
###############################################################################
S
storypku 已提交
18 19 20 21 22 23 24
APOLLO_ROOT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
source ${APOLLO_ROOT_DIR}/scripts/apollo_base.sh

MACHINE_ARCH=$(uname -m)
BUILD_CMD="bazel build --distdir=${APOLLO_CACHE_DIR}"
TEST_CMD="bazel test --distdir=${APOLLO_CACHE_DIR}"

F
Fla3inH0tCheet0s 已提交
25 26
DISABLED_CYBER_MODULES="except //cyber/record:record_file_integration_test"

27
function apollo_check_system_config() {
28
  # check docker environment
29
  if [ ${MACHINE_ARCH} == "x86_64" ] && [ ${APOLLO_IN_DOCKER} != "true" ]; then
S
storypku 已提交
30
    echo -e "${RED}Must run $0 in cyber or dev docker${NO_COLOR}"
31 32 33
    exit 0
  fi

34
  # check operating system
S
storypku 已提交
35 36
  HOST_OS=$(uname -s)
  case $HOST_OS in
37 38
    "Linux")
      echo "System check passed. Build continue ..."
39 40
      # check system configuration
      DEFAULT_MEM_SIZE="2.0"
S
storypku 已提交
41
      MEM_SIZE=$(free -m | awk '/Mem:/ {printf("%0.2f", $2 / 1024.0)}')
42 43 44
      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
45 46
      ;;
    "Darwin")
S
storypku 已提交
47 48
      warning "MacOS is UNSUPPORTED currently."
      exit 1
49
      ;;
50
    *)
S
storypku 已提交
51
      error "Apollo is UNTESTED on ${HOST_OS} systems. Linux systems expected."
52 53
      exit 1
      ;;
54 55 56
  esac
}

S
siyangy 已提交
57
function check_machine_arch() {
58
  if [ "${MACHINE_ARCH}" != "x86_64" ] && [ "${MACHINE_ARCH}" != "aarch64" ]; then
S
storypku 已提交
59
    fail "Machine architecture $MACHINE_ARCH currently not supported yet."
S
siyangy 已提交
60 61 62
    exit 1
  fi
}
D
Dong Li 已提交
63 64 65 66 67 68 69

function check_esd_files() {
  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
  else
70
      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 已提交
71 72 73 74 75
      USE_ESD_CAN=false
  fi
}

function generate_build_targets() {
F
Fla3inH0tCheet0s 已提交
76
  COMMON_TARGETS="//cyber/... union //modules/common/kv_db/... union //modules/dreamview/... $DISABLED_CYBER_MODULES"
77
  case $BUILD_FILTER in
78
  cyber)
N
Ning Qu 已提交
79
    BUILD_TARGETS=`bazel query //cyber/... union //modules/tools/visualizer/...`
80 81
    ;;
  drivers)
N
Ning Qu 已提交
82
    BUILD_TARGETS=`bazel query //cyber/... union //modules/tools/visualizer/... union //modules/drivers/... except //modules/drivers/tools/... except //modules/drivers/canbus/... except //modules/drivers/video/...`
83
    ;;
84 85 86 87 88 89 90 91 92 93 94 95 96
  control)
    BUILD_TARGETS=`bazel query $COMMON_TARGETS union //modules/control/... `
    ;;
  planning)
    BUILD_TARGETS=`bazel query $COMMON_TARGETS union //modules/routing/... union //modules/planning/...`
    ;;
  prediction)
    BUILD_TARGETS=`bazel query $COMMON_TARGETS union //modules/routing/... union //modules/prediction/...`
    ;;
  pnc)
    BUILD_TARGETS=`bazel query $COMMON_TARGETS union //modules/routing/... union //modules/prediction/... union //modules/planning/... union //modules/control/...`
    ;;
  no_perception)
97
    BUILD_TARGETS=`bazel query //modules/... except //modules/perception/... union //cyber/...`
98 99
    ;;
  *)
100 101
#    BUILD_TARGETS=`bazel query //modules/... union //cyber/...`
    # FIXME(all): temporarily disable modules doesn't compile in 18.04
C
changsh726 已提交
102
    BUILD_TARGETS=`bazel query //modules/... union //cyber/... except //modules/v2x/... except //modules/map/tools/map_datachecker/... $DISABLE_CYBER_MODULES`
103
  esac
104

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

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

S
siyangy 已提交
121
function build() {
122
  if [ "${USE_GPU}" = "1" ] ; then
123 124
    echo -e "${YELLOW}Running build under GPU mode. GPU is required to run the build.${NO_COLOR}"
  else
S
storypku 已提交
125
    echo -e "${YELLOW}Running build under CPU mode. GPU is not required to run the build.${NO_COLOR}"
126
  fi
127
  info "Start building, please wait ..."
128

D
Dong Li 已提交
129
  generate_build_targets
S
storypku 已提交
130

131 132
  info "Building on $MACHINE_ARCH..."

133
  JOB_ARG="--jobs=$(nproc) --local_ram_resources=HOST_RAM*0.8" # --ram_utilization_factor 80
134 135 136
  if [ "$MACHINE_ARCH" == 'aarch64' ]; then
    JOB_ARG="--jobs=3"
  fi
137
  info "Building with $JOB_ARG for $MACHINE_ARCH"
138

S
storypku 已提交
139
  ${BUILD_CMD} $JOB_ARG $DEFINES -c $@ $BUILD_TARGETS
A
Aaron Xiao 已提交
140
  if [ ${PIPESTATUS[0]} -ne 0 ]; then
D
Dong Li 已提交
141 142
    fail 'Build failed!'
  fi
S
siyangy 已提交
143

144
  # Clear KV DB and update commit_id after compiling.
145 146 147
  if [ "$BUILD_FILTER" == 'cyber' ] || [ "$BUILD_FILTER" == 'drivers' ]; then
    info "Skipping revision recording"
  else
S
storypku 已提交
148
    ${BUILD_CMD} $JOB_ARG $DEFINES -c $@ $BUILD_TARGETS
149 150 151 152 153
    if [ ${PIPESTATUS[0]} -ne 0 ]; then
      fail 'Build failed!'
    fi
    rm -fr data/kv_db*
  fi
154

S
storypku 已提交
155
  # TODO(ALL): check whether still in public use.
S
siyangy 已提交
156 157 158 159 160 161
  if [ -d /apollo-simulator ] && [ -e /apollo-simulator/build.sh ]; then
    cd /apollo-simulator && bash build.sh build
    if [ $? -ne 0 ]; then
      fail 'Build failed!'
    fi
  fi
162 163
  if [ $? -eq 0 ]; then
    success 'Build passed!'
164 165
  else
    fail 'Build failed'
166
  fi
D
Dong Li 已提交
167 168
}

169
function cibuild_extended() {
170 171
  info "Building framework ..."

S
storypku 已提交
172
  cd ${APOLLO_ROOT_DIR}
173
  info "Building modules ..."
174

175
  JOB_ARG="--jobs=12"
176 177 178 179
  if [ "$MACHINE_ARCH" == 'aarch64' ]; then
    JOB_ARG="--jobs=3"
  fi

A
Aaron Xiao 已提交
180
  info "Building with $JOB_ARG for $MACHINE_ARCH"
J
Jiangtao Hu 已提交
181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198

  # FIXME(all): temporarily disable modules doesn't compile in 18.04
  BUILD_TARGETS=`
    bazel query //cyber/... \
    union //modules/perception/... \
    union //modules/dreamview/... \
    union //modules/drivers/radar/conti_radar/... \
    union //modules/drivers/radar/racobit_radar/... \
    union //modules/drivers/radar/ultrasonic_radar/... \
    union //modules/drivers/gnss/... \
    union //modules/drivers/velodyne/... \
    union //modules/drivers/camera/... \
    union //modules/guardian/... \
    union //modules/localization/... \
    union //modules/map/... \
    union //modules/third_party_perception/... \
    except //modules/map/tools/map_datachecker/...
    `
199

S
storypku 已提交
200
  ${BUILD_CMD} $JOB_ARG $DEFINES $@ $BUILD_TARGETS
201 202 203 204 205 206 207

  if [ $? -eq 0 ]; then
    success 'Build passed!'
  else
    fail 'Build failed!'
  fi
}
S
storypku 已提交
208

209 210
function cibuild() {
  info "Building framework ..."
S
storypku 已提交
211
  cd "${APOLLO_ROOT_DIR}"
G
GoLancer 已提交
212

213 214
  info "Building modules ..."

215
  JOB_ARG="--jobs=12"
216 217 218 219 220 221 222 223 224
  if [ "$MACHINE_ARCH" == 'aarch64' ]; then
    JOB_ARG="--jobs=3"
  fi

  info "Building with $JOB_ARG for $MACHINE_ARCH"
  BUILD_TARGETS="
    //modules/canbus/...
    //modules/common/...
    //modules/control/...
225 226
    //modules/planning/...
    //modules/prediction/...
227
    //modules/routing/...
228
    //modules/transform/..."
229

230 231 232
  # The data module is lightweight and rarely changed. If it fails, it's
  # most-likely an environment mess. So we try `bazel clean` and then initial
  # the building process.
S
storypku 已提交
233 234
  ${BUILD_CMD} $JOB_ARG $DEFINES $@ "//modules/data/..." || bazel clean
  ${BUILD_CMD} $JOB_ARG $DEFINES $@ $BUILD_TARGETS
235

236 237 238 239 240 241 242
  if [ $? -eq 0 ]; then
    success 'Build passed!'
  else
    fail 'Build failed!'
  fi
}

243
function apollo_build_dbg() {
244
  build "dbg" $@
S
siyangy 已提交
245 246
}

247
function apollo_build_opt() {
248
  build "opt" $@
S
siyangy 已提交
249 250
}

D
Dong Li 已提交
251
function check() {
D
Dong Li 已提交
252
  bash $0 build && bash $0 "test" && bash $0 lint
D
Dong Li 已提交
253 254 255 256 257 258 259 260 261 262 263 264

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

function gen_coverage() {
  bazel clean
265
  generate_build_targets
S
storypku 已提交
266
  echo "$BUILD_TARGETS" | grep -v "cnn_segmentation_test" | xargs ${TEST_CMD} $DEFINES -c dbg --config=coverage $@
D
Dong Li 已提交
267 268 269
  if [ $? -ne 0 ]; then
    fail 'run test failed!'
  fi
S
siyangy 已提交
270

D
Dong Li 已提交
271 272
  COV_DIR=data/cov
  rm -rf $COV_DIR
273
  files=$(find bazel-out/local-dbg/bin/ -iname "*.gcda" -o -iname "*.gcno" | grep -v external | grep -v third_party)
D
Dong Li 已提交
274
  for f in $files; do
275 276 277 278 279
    if [ "$f" != "${f##*cyber}" ]; then
      target="$COV_DIR/objs/cyber${f##*cyber}"
    else
      target="$COV_DIR/objs/modules${f##*modules}"
    fi
280 281 282 283
    mkdir -p "$(dirname "$target")"
    cp "$f" "$target"
  done

284
  lcov --rc lcov_branch_coverage=1 --base-directory "/apollo/bazel-apollo" --capture --directory "$COV_DIR/objs" --output-file "$COV_DIR/conv.info"
D
Dong Li 已提交
285 286 287
  if [ $? -ne 0 ]; then
    fail 'lcov failed!'
  fi
J
Jiangtao Hu 已提交
288
  lcov --rc lcov_branch_coverage=1 --remove "$COV_DIR/conv.info" \
D
Dong Li 已提交
289 290 291 292 293 294 295 296 297 298 299
      "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() {
300
  JOB_ARG="--jobs=$(nproc) --ram_utilization_factor 80"
301

302
  generate_build_targets
303
  if [ "$USE_GPU" == "1" ]; then
304
    echo -e "${YELLOW}Running tests under GPU mode. GPU is required to run the tests.${NO_COLOR}"
S
storypku 已提交
305
    ${TEST_CMD} $DEFINES $JOB_ARG --config=unit_test -c dbg --test_verbose_timeout_warnings $@ $BUILD_TARGETS
306
  else
307
    echo -e "${YELLOW}Running tests under CPU mode. No GPU is required to run the tests.${NO_COLOR}"
308
    BUILD_TARGETS="`echo "$BUILD_TARGETS" | grep -v "cnn_segmentation_test\|yolo_camera_detector_test\|unity_recognize_test\|perception_traffic_light_rectify_test\|cuda_util_test"`"
S
storypku 已提交
309
    ${TEST_CMD} $DEFINES $JOB_ARG --config=unit_test -c dbg --test_verbose_timeout_warnings $@ $BUILD_TARGETS
310
  fi
311 312 313 314 315
  if [ $? -ne 0 ]; then
    fail 'Test failed!'
    return 1
  fi

S
siyangy 已提交
316
  if [ $? -eq 0 ]; then
D
Dong Li 已提交
317 318 319 320 321
    success 'Test passed!'
    return 0
  fi
}

L
Liangliang Zhang 已提交
322
function citest_basic() {
L
Liangliang Zhang 已提交
323 324
  set -e

325 326
  info "Building framework ..."
  cd /apollo
G
GoLancer 已提交
327
  source cyber/setup.bash
328

J
Jiangtao Hu 已提交
329 330 331 332
  # FIXME(all): temporarily disable modules doesn't compile in 18.04
#   BUILD_TARGETS="
#    `bazel query //modules/... union //cyber/...`
#  "
333
  BUILD_TARGETS=`bazel query //modules/... union //cyber/... except //modules/tools/visualizer/... except //modules/v2x/... except //modules/drivers/video/tools/decode_video/... except //modules/map/tools/map_datachecker/... `
334

335
  JOB_ARG="--jobs=12 --ram_utilization_factor 80"
L
Liangliang Zhang 已提交
336

337
  BUILD_TARGETS="`echo "$BUILD_TARGETS" | grep "modules\/" | grep "test" \
338 339 340 341
          | grep -v "modules\/planning" \
          | grep -v "modules\/prediction" \
          | grep -v "modules\/control" \
          | grep -v "modules\/common" \
342
          | grep -v "can_client" \
343
          | grep -v "blob_test" \
344
          | grep -v "pyramid_map" \
345
          | grep -v "ndt_lidar_locator_test" \
346 347 348
          | grep -v "syncedmem_test" | grep -v "blob_test" \
          | grep -v "perception_inference_operators_test" \
          | grep -v "cuda_util_test" \
349 350
          | grep -v "modules\/perception"`"

S
storypku 已提交
351
  ${TEST_CMD} $DEFINES $JOB_ARG --config=unit_test -c dbg --test_verbose_timeout_warnings $@ $BUILD_TARGETS
352

353 354 355 356 357 358 359 360 361
  if [ $? -eq 0 ]; then
    success 'Test passed!'
    return 0
  else
    fail 'Test failed!'
    return 1
  fi
}

362 363 364 365 366
function citest_extended() {
  set -e

  info "Building framework ..."
  cd /apollo
G
GoLancer 已提交
367
  source cyber/setup.bash
368 369

  BUILD_TARGETS="
F
Fla3inH0tCheet0s 已提交
370
    `bazel query //modules/planning/... union //modules/common/... union //cyber/... $DISABLED_CYBER_MODULES`
371
    `bazel query //modules/prediction/... union //modules/control/...`
372 373
  "

374
  JOB_ARG="--jobs=12 --ram_utilization_factor 80"
375

376
  BUILD_TARGETS="`echo "$BUILD_TARGETS" | grep "test"`"
377

S
storypku 已提交
378
  ${TEST_CMD} $DEFINES $JOB_ARG --config=unit_test -c dbg --test_verbose_timeout_warnings $@ $BUILD_TARGETS
379 380 381 382 383 384 385 386 387 388

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

L
Liangliang Zhang 已提交
389
function citest() {
390 391
  info "Building framework ..."
  cd /apollo
G
GoLancer 已提交
392
  source cyber/setup.bash
393

L
Liangliang Zhang 已提交
394
  citest_basic
395
  citest_extended
L
Liangliang Zhang 已提交
396 397 398 399 400 401 402 403 404
  if [ $? -eq 0 ]; then
    success 'Test passed!'
    return 0
  else
    fail 'Test failed!'
    return 1
  fi
}

D
Dong Li 已提交
405
function run_cpp_lint() {
406
  BUILD_TARGETS="`bazel query //modules/... except //modules/tools/visualizer/... union //cyber/...`"
S
storypku 已提交
407
  ${TEST_CMD} --config=cpplint -c dbg $BUILD_TARGETS
D
Dong Li 已提交
408 409 410
}

function run_bash_lint() {
S
siyangy 已提交
411
  FILES=$(find "${APOLLO_ROOT_DIR}" -type f -name "*.sh" | grep -v ros)
D
Dong Li 已提交
412 413 414 415
  echo "${FILES}" | xargs shellcheck
}

function run_lint() {
C
Calvin Miao 已提交
416
  # Add cpplint rule to BUILD files that do not contain it.
417
  for file in $(find cyber modules -name BUILD | \
H
hugomatic 已提交
418
    grep -v gnss/third_party | grep -v modules/teleop/encoder/nvenc_sdk6 | \
C
Calvin Miao 已提交
419 420 421 422 423 424
    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 已提交
425 426
  run_cpp_lint

D
Dong Li 已提交
427 428 429 430 431 432 433 434
  if [ $? -eq 0 ]; then
    success 'Lint passed!'
  else
    fail 'Lint failed!'
  fi
}

function clean() {
A
Aaron Xiao 已提交
435
  # Remove bazel cache.
436
  bazel clean --async
437 438 439 440 441 442

  # Remove bazel cache in associated directories
  if [ -d /apollo-simulator ]; then
    cd /apollo-simulator && bazel clean --async
  fi

A
Aaron Xiao 已提交
443 444
  # Remove cmake cache.
  rm -fr framework/build
D
Dong Li 已提交
445 446 447
}

function buildify() {
448
  find . -name '*BUILD' -or -name '*.bzl' -type f -exec buildifier -mode=fix {} +
449 450 451 452 453
  if [ $? -eq 0 ]; then
    success 'Buildify worked!'
  else
    fail 'Buildify failed!'
  fi
D
Dong Li 已提交
454 455
}

S
siyangy 已提交
456 457 458 459 460
function build_fe() {
  cd modules/dreamview/frontend
  yarn build
}

D
Dong Li 已提交
461 462 463 464 465 466
function gen_doc() {
  rm -rf docs/doxygen
  doxygen apollo.doxygen
}

function version() {
467 468 469 470 471
  rev=$(get_revision)
  if [ "$rev" = "unknown" ];then
    echo "Version: $rev"
    return
  fi
D
Dong Li 已提交
472 473 474 475 476 477
  commit=$(git log -1 --pretty=%H)
  date=$(git log -1 --pretty=%cd)
  echo "Commit: ${commit}"
  echo "Date: ${date}"
}

478 479 480 481 482 483 484 485 486 487 488
function get_revision() {
  git rev-parse --is-inside-work-tree &> /dev/null
  if [ $? = 0 ];then
    REVISION=$(git rev-parse HEAD)
  else
    warning "Could not get the version number, maybe this is not a git work tree." >&2
    REVISION="unknown"
  fi
  echo "$REVISION"
}

489 490 491 492 493 494 495 496 497 498 499
function get_branch() {
  git branch &> /dev/null
  if [ $? = 0 ];then
    BRANCH=$(git rev-parse --abbrev-ref HEAD)
  else
    warning "Could not get the branch name, maybe this is not a git work tree." >&2
    BRANCH="unknown"
  fi
  echo "$BRANCH"
}

S
siyangy 已提交
500
function set_use_gpu() {
S
siyangy 已提交
501 502 503 504 505
  if [ "${USE_GPU}" = "1" ] ; then
    DEFINES="${DEFINES} --define USE_GPU=true"
  else
    DEFINES="${DEFINES} --cxxopt=-DCPU_ONLY"
  fi
S
siyangy 已提交
506 507
}

508
function print_usage() {
C
Calvin Miao 已提交
509 510 511 512 513 514 515 516 517 518
  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
519
  ${BLUE}build_opt${NONE}: build optimized binary for the code
L
luoqi06 已提交
520
  ${BLUE}build_cpu${NONE}: dbg build with CPU
J
Jun Zhu 已提交
521 522
  ${BLUE}build_gpu${NONE}: run build only with Caffe GPU mode support
  ${BLUE}build_opt_gpu${NONE}: build optimized binary with Caffe GPU mode support
C
Calvin Miao 已提交
523
  ${BLUE}build_fe${NONE}: compile frontend javascript code, this requires all the node_modules to be installed already
524 525
  ${BLUE}build_cyber [dbg|opt]${NONE}: build Cyber RT only
  ${BLUE}build_drivers [dbg|opt]${NONE}: build drivers only
526 527 528 529
  ${BLUE}build_planning${NONE}: compile planning and its dependencies.
  ${BLUE}build_control${NONE}: compile control and its dependencies.
  ${BLUE}build_prediction${NONE}: compile prediction and its dependencies.
  ${BLUE}build_pnc${NONE}: compile pnc and its dependencies.
X
Xiangquan Xiao 已提交
530
  ${BLUE}build_no_perception [dbg|opt]${NONE}: run build, skip building perception module, useful when some perception dependencies are not satisfied, e.g., CUDA, CUDNN, LIDAR, etc.
531
  ${BLUE}build_prof${NONE}: build for gprof support.
C
Calvin Miao 已提交
532 533 534 535 536 537 538 539 540 541 542
  ${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}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
  "
543 544
}

S
storypku 已提交
545 546 547 548 549 550 551 552 553 554 555 556 557 558
function bootstrap() {
  if [ -z "$PYTHON_BIN_PATH" ]; then
    PYTHON_BIN_PATH=$(which python3 || true)
  fi
  if [[ -f "${APOLLO_ROOT_DIR}/.apollo.bazelrc" ]]; then
    return
  fi
  cp -f "${TOP_DIR}/tools/sample.bazelrc" "${APOLLO_ROOT_DIR}/.apollo.bazelrc"
  # Set all env variables
  # TODO(storypku): enable bootstrap.py inside docker
  # $PYTHON_BIN_PATH ${APOLLO_ROOT_DIR}/tools/bootstrap.py $@
  echo "bootstrap done"
}

S
siyangy 已提交
559
function main() {
560

S
siyangy 已提交
561
  check_machine_arch
562
  apollo_check_system_config
S
storypku 已提交
563 564 565

  bootstrap

S
siyangy 已提交
566 567
  check_esd_files

S
storypku 已提交
568
  DEFINES="--define ARCH=${MACHINE_ARCH} --define USE_ESD_CAN=${USE_ESD_CAN} --cxxopt=-DUSE_ESD_CAN=${USE_ESD_CAN}"
F
Fla3inH0tCheet0s 已提交
569
  # Enable bazel's feature to compute md5 checksums in parallel
570
  DEFINES="${DEFINES} --experimental_multi_threaded_digest"
571 572 573 574

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

576 577 578
  local cmd=$1
  shift

S
siyangy 已提交
579
  START_TIME=$(get_now)
580
  case $cmd in
S
siyangy 已提交
581
    check)
582
      DEFINES="${DEFINES} --cxxopt=-DCPU_ONLY"
583
      check $@
S
siyangy 已提交
584 585
      ;;
    build)
S
siyangy 已提交
586
      set_use_gpu
587
      apollo_build_dbg $@
588 589
      ;;
    build_cpu)
L
Lei Wang 已提交
590
      DEFINES="${DEFINES} --cxxopt=-DCPU_ONLY"
591
      apollo_build_dbg $@
S
siyangy 已提交
592
      ;;
593
    build_prof)
D
Dong Li 已提交
594
      DEFINES="${DEFINES} --config=cpu_prof --cxxopt=-DCPU_ONLY"
595 596
      apollo_build_dbg $@
      ;;
597
    build_no_perception)
S
siyangy 已提交
598
      DEFINES="${DEFINES} --cxxopt=-DCPU_ONLY"
599
      BUILD_FILTER="no_perception"
600 601 602
      if [ "$1" == "opt" ]; then
        shift
        apollo_build_opt $@
603
      else
604 605 606
        shift
        apollo_build_dbg $@
      fi
607
      ;;
608 609 610 611
    clean_cyber)
      export LD_PRELOAD=
      clean
      ;;
612
    build_cyber)
613
      export LD_PRELOAD=
614 615 616 617 618 619 620 621 622 623
      BUILD_FILTER="cyber"
      if [ "$1" == "opt" ]; then
        shift
        apollo_build_opt $@
      else
        shift
        apollo_build_dbg $@
      fi
      ;;
    build_drivers)
624
      export LD_PRELOAD=
625 626 627 628 629 630 631 632 633
      BUILD_FILTER="drivers"
      if [ "$1" == "opt" ]; then
        shift
        apollo_build_opt $@
      else
        shift
        apollo_build_dbg $@
      fi
      ;;
634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649
    build_control)
      BUILD_FILTER="control"
      apollo_build_dbg $@
      ;;
    build_planning)
      BUILD_FILTER="planning"
      apollo_build_dbg $@
      ;;
    build_prediction)
      BUILD_FILTER="prediction"
      apollo_build_dbg $@
      ;;
    build_pnc)
      BUILD_FILTER="pnc"
      apollo_build_dbg $@
      ;;
650 651 652 653
    cibuild)
      DEFINES="${DEFINES} --cxxopt=-DCPU_ONLY"
      cibuild $@
      ;;
654 655 656 657
    cibuild_extended)
      DEFINES="${DEFINES} --cxxopt=-DCPU_ONLY"
      cibuild_extended $@
      ;;
658
    build_opt)
659
      DEFINES="${DEFINES} --cxxopt=-DCPU_ONLY --copt=-fpic"
660
      apollo_build_opt $@
S
siyangy 已提交
661
      ;;
662
    build_gpu)
S
siyangy 已提交
663
      set_use_gpu
664
      apollo_build_dbg $@
J
Jun Zhu 已提交
665
      ;;
J
Jun Zhu 已提交
666
    build_opt_gpu)
S
siyangy 已提交
667 668
      set_use_gpu
      DEFINES="${DEFINES} --copt=-fpic"
669
      apollo_build_opt $@
Y
Yu Cao 已提交
670 671 672 673 674
      ;;
    build_teleop)
      set_use_gpu
      DEFINES="${DEFINES} --copt=-fpic --define WITH_TELEOP=1 --cxxopt=-DTELEOP"
      apollo_build_opt $@
S
siyangy 已提交
675
      ;;
S
siyangy 已提交
676 677 678
    build_fe)
      build_fe
      ;;
S
siyangy 已提交
679 680 681 682 683 684 685 686 687 688
    buildify)
      buildify
      ;;
    doc)
      gen_doc
      ;;
    lint)
      run_lint
      ;;
    test)
S
siyangy 已提交
689
      set_use_gpu
690 691 692
      run_test $@
      ;;
    test_cpu)
693
      DEFINES="${DEFINES} --cxxopt=-DCPU_ONLY"
L
Lei Wang 已提交
694
      run_test $@
S
siyangy 已提交
695
      ;;
L
Liangliang Zhang 已提交
696 697 698 699
    citest)
      DEFINES="${DEFINES} --cxxopt=-DCPU_ONLY"
      citest $@
      ;;
700 701 702 703 704 705 706 707
    citest_basic)
      DEFINES="${DEFINES} --cxxopt=-DCPU_ONLY"
      citest_basic $@
      ;;
    citest_extended)
      DEFINES="${DEFINES} --cxxopt=-DCPU_ONLY"
      citest_extended $@
      ;;
708
    test_gpu)
S
siyangy 已提交
709
      set_use_gpu
L
Lei Wang 已提交
710
      run_test $@
711
      ;;
S
siyangy 已提交
712
    coverage)
L
Lei Wang 已提交
713
      gen_coverage $@
S
siyangy 已提交
714 715 716 717 718 719 720
      ;;
    clean)
      clean
      ;;
    version)
      version
      ;;
C
Calvin Miao 已提交
721 722 723
    usage)
      print_usage
      ;;
S
siyangy 已提交
724 725 726 727 728 729
    *)
      print_usage
      ;;
  esac
}

730
main $@