apollo.sh 20.6 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
    exit 1
  fi
62

S
storypku 已提交
63
  #TODO(ALL): checks whether still in use
64
  #setup vtk folder name for different systems.
65
  VTK_VERSION=$(find /usr/include/ -type d  -name "vtk-*" | tail -n1 | cut -d '-' -f 2)
66
  sed "s/VTK_VERSION/${VTK_VERSION}/g" WORKSPACE.in > WORKSPACE
S
siyangy 已提交
67
}
D
Dong Li 已提交
68 69

function check_esd_files() {
S
siyangy 已提交
70 71
  CAN_CARD="fake_can"

D
Dong Li 已提交
72 73 74 75
  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 已提交
76
      CAN_CARD="esd_can"
D
Dong Li 已提交
77
  else
78
      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 已提交
79 80 81 82 83
      USE_ESD_CAN=false
  fi
}

function generate_build_targets() {
F
Fla3inH0tCheet0s 已提交
84
  COMMON_TARGETS="//cyber/... union //modules/common/kv_db/... union //modules/dreamview/... $DISABLED_CYBER_MODULES"
85
  case $BUILD_FILTER in
86
  cyber)
N
Ning Qu 已提交
87
    BUILD_TARGETS=`bazel query //cyber/... union //modules/tools/visualizer/...`
88 89
    ;;
  drivers)
N
Ning Qu 已提交
90
    BUILD_TARGETS=`bazel query //cyber/... union //modules/tools/visualizer/... union //modules/drivers/... except //modules/drivers/tools/... except //modules/drivers/canbus/... except //modules/drivers/video/...`
91
    ;;
92 93 94 95 96 97 98 99 100 101 102 103 104
  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)
105
    BUILD_TARGETS=`bazel query //modules/... except //modules/perception/... union //cyber/...`
106 107
    ;;
  *)
108 109
#    BUILD_TARGETS=`bazel query //modules/... union //cyber/...`
    # FIXME(all): temporarily disable modules doesn't compile in 18.04
C
changsh726 已提交
110
    BUILD_TARGETS=`bazel query //modules/... union //cyber/... except //modules/v2x/... except //modules/map/tools/map_datachecker/... $DISABLE_CYBER_MODULES`
111
  esac
112

C
Calvin Miao 已提交
113 114 115
  if [ $? -ne 0 ]; then
    fail 'Build failed!'
  fi
D
Dong Li 已提交
116
  if ! $USE_ESD_CAN; then
117
     BUILD_TARGETS=$(echo $BUILD_TARGETS |tr ' ' '\n' | grep -v "esd")
D
Dong Li 已提交
118
  fi
119
  #skip msf for non x86_64 platforms
120
  if [ ${MACHINE_ARCH} != "x86_64" ]; then
121 122
     BUILD_TARGETS=$(echo $BUILD_TARGETS |tr ' ' '\n' | grep -v "msf")
  fi
D
Dong Li 已提交
123 124 125 126 127 128
}

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

S
siyangy 已提交
129
function build() {
130
  if [ "${USE_GPU}" = "1" ] ; then
131 132
    echo -e "${YELLOW}Running build under GPU mode. GPU is required to run the build.${NO_COLOR}"
  else
S
storypku 已提交
133
    echo -e "${YELLOW}Running build under CPU mode. GPU is not required to run the build.${NO_COLOR}"
134
  fi
135
  info "Start building, please wait ..."
136

D
Dong Li 已提交
137
  generate_build_targets
S
storypku 已提交
138

139 140
  info "Building on $MACHINE_ARCH..."

141
  JOB_ARG="--jobs=$(nproc) --local_ram_resources=HOST_RAM*0.8" # --ram_utilization_factor 80
142 143 144
  if [ "$MACHINE_ARCH" == 'aarch64' ]; then
    JOB_ARG="--jobs=3"
  fi
145
  info "Building with $JOB_ARG for $MACHINE_ARCH"
146

S
storypku 已提交
147
  ${BUILD_CMD} $JOB_ARG $DEFINES -c $@ $BUILD_TARGETS
A
Aaron Xiao 已提交
148
  if [ ${PIPESTATUS[0]} -ne 0 ]; then
D
Dong Li 已提交
149 150
    fail 'Build failed!'
  fi
S
siyangy 已提交
151

152
  # Clear KV DB and update commit_id after compiling.
153 154 155
  if [ "$BUILD_FILTER" == 'cyber' ] || [ "$BUILD_FILTER" == 'drivers' ]; then
    info "Skipping revision recording"
  else
S
storypku 已提交
156
    ${BUILD_CMD} $JOB_ARG $DEFINES -c $@ $BUILD_TARGETS
157 158 159 160 161 162 163 164
    if [ ${PIPESTATUS[0]} -ne 0 ]; then
      fail 'Build failed!'
    fi
    rm -fr data/kv_db*
    REVISION=$(get_revision)
    ./bazel-bin/modules/common/kv_db/kv_db_tool --op=put \
        --key="apollo:data:commit_id" --value="$REVISION"
  fi
165

S
storypku 已提交
166
  # TODO(ALL): check whether still in public use.
S
siyangy 已提交
167 168 169 170 171 172
  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
173 174
  if [ $? -eq 0 ]; then
    success 'Build passed!'
175 176
  else
    fail 'Build failed'
177
  fi
D
Dong Li 已提交
178 179
}

180
function cibuild_extended() {
181 182
  info "Building framework ..."

S
storypku 已提交
183
  cd ${APOLLO_ROOT_DIR}
184
  info "Building modules ..."
185

186
  JOB_ARG="--jobs=12"
187 188 189 190
  if [ "$MACHINE_ARCH" == 'aarch64' ]; then
    JOB_ARG="--jobs=3"
  fi

A
Aaron Xiao 已提交
191
  info "Building with $JOB_ARG for $MACHINE_ARCH"
J
Jiangtao Hu 已提交
192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209

  # 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/...
    `
210

S
storypku 已提交
211
  ${BUILD_CMD} $JOB_ARG $DEFINES $@ $BUILD_TARGETS
212 213 214 215 216 217 218

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

220 221
function cibuild() {
  info "Building framework ..."
S
storypku 已提交
222
  cd "${APOLLO_ROOT_DIR}"
G
GoLancer 已提交
223

224 225
  info "Building modules ..."

226
  JOB_ARG="--jobs=12"
227 228 229 230 231 232 233 234 235
  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/...
236 237
    //modules/planning/...
    //modules/prediction/...
238
    //modules/routing/...
239
    //modules/transform/..."
240

241 242 243
  # 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 已提交
244 245
  ${BUILD_CMD} $JOB_ARG $DEFINES $@ "//modules/data/..." || bazel clean
  ${BUILD_CMD} $JOB_ARG $DEFINES $@ $BUILD_TARGETS
246

247 248 249 250 251 252 253
  if [ $? -eq 0 ]; then
    success 'Build passed!'
  else
    fail 'Build failed!'
  fi
}

254
function apollo_build_dbg() {
255
  build "dbg" $@
S
siyangy 已提交
256 257
}

258
function apollo_build_opt() {
259
  build "opt" $@
S
siyangy 已提交
260 261
}

D
Dong Li 已提交
262
function check() {
D
Dong Li 已提交
263
  bash $0 build && bash $0 "test" && bash $0 lint
D
Dong Li 已提交
264 265 266 267 268 269 270 271 272 273 274 275

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

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

D
Dong Li 已提交
282 283
  COV_DIR=data/cov
  rm -rf $COV_DIR
284
  files=$(find bazel-out/local-dbg/bin/ -iname "*.gcda" -o -iname "*.gcno" | grep -v external | grep -v third_party)
D
Dong Li 已提交
285
  for f in $files; do
286 287 288 289 290
    if [ "$f" != "${f##*cyber}" ]; then
      target="$COV_DIR/objs/cyber${f##*cyber}"
    else
      target="$COV_DIR/objs/modules${f##*modules}"
    fi
291 292 293 294
    mkdir -p "$(dirname "$target")"
    cp "$f" "$target"
  done

295
  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 已提交
296 297 298
  if [ $? -ne 0 ]; then
    fail 'lcov failed!'
  fi
J
Jiangtao Hu 已提交
299
  lcov --rc lcov_branch_coverage=1 --remove "$COV_DIR/conv.info" \
D
Dong Li 已提交
300 301 302 303 304 305 306 307 308 309 310
      "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() {
311
  JOB_ARG="--jobs=$(nproc) --ram_utilization_factor 80"
312

313
  generate_build_targets
314
  if [ "$USE_GPU" == "1" ]; then
315
    echo -e "${YELLOW}Running tests under GPU mode. GPU is required to run the tests.${NO_COLOR}"
S
storypku 已提交
316
    ${TEST_CMD} $DEFINES $JOB_ARG --config=unit_test -c dbg --test_verbose_timeout_warnings $@ $BUILD_TARGETS
317
  else
318
    echo -e "${YELLOW}Running tests under CPU mode. No GPU is required to run the tests.${NO_COLOR}"
319
    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 已提交
320
    ${TEST_CMD} $DEFINES $JOB_ARG --config=unit_test -c dbg --test_verbose_timeout_warnings $@ $BUILD_TARGETS
321
  fi
322 323 324 325 326
  if [ $? -ne 0 ]; then
    fail 'Test failed!'
    return 1
  fi

S
siyangy 已提交
327
  if [ $? -eq 0 ]; then
D
Dong Li 已提交
328 329 330 331 332
    success 'Test passed!'
    return 0
  fi
}

L
Liangliang Zhang 已提交
333
function citest_basic() {
L
Liangliang Zhang 已提交
334 335
  set -e

336 337
  info "Building framework ..."
  cd /apollo
G
GoLancer 已提交
338
  source cyber/setup.bash
339

J
Jiangtao Hu 已提交
340 341 342 343
  # FIXME(all): temporarily disable modules doesn't compile in 18.04
#   BUILD_TARGETS="
#    `bazel query //modules/... union //cyber/...`
#  "
344
  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/... `
345

346
  JOB_ARG="--jobs=12 --ram_utilization_factor 80"
L
Liangliang Zhang 已提交
347

348
  BUILD_TARGETS="`echo "$BUILD_TARGETS" | grep "modules\/" | grep "test" \
349 350 351 352
          | grep -v "modules\/planning" \
          | grep -v "modules\/prediction" \
          | grep -v "modules\/control" \
          | grep -v "modules\/common" \
353
          | grep -v "can_client" \
354
          | grep -v "blob_test" \
355
          | grep -v "pyramid_map" \
356
          | grep -v "ndt_lidar_locator_test" \
357 358 359
          | grep -v "syncedmem_test" | grep -v "blob_test" \
          | grep -v "perception_inference_operators_test" \
          | grep -v "cuda_util_test" \
360 361
          | grep -v "modules\/perception"`"

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

364 365 366 367 368 369 370 371 372
  if [ $? -eq 0 ]; then
    success 'Test passed!'
    return 0
  else
    fail 'Test failed!'
    return 1
  fi
}

373 374 375 376 377
function citest_extended() {
  set -e

  info "Building framework ..."
  cd /apollo
G
GoLancer 已提交
378
  source cyber/setup.bash
379 380

  BUILD_TARGETS="
F
Fla3inH0tCheet0s 已提交
381
    `bazel query //modules/planning/... union //modules/common/... union //cyber/... $DISABLED_CYBER_MODULES`
382
    `bazel query //modules/prediction/... union //modules/control/...`
383 384
  "

385
  JOB_ARG="--jobs=12 --ram_utilization_factor 80"
386

387
  BUILD_TARGETS="`echo "$BUILD_TARGETS" | grep "test"`"
388

S
storypku 已提交
389
  ${TEST_CMD} $DEFINES $JOB_ARG --config=unit_test -c dbg --test_verbose_timeout_warnings $@ $BUILD_TARGETS
390 391 392 393 394 395 396 397 398 399

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

L
Liangliang Zhang 已提交
400
function citest() {
401 402
  info "Building framework ..."
  cd /apollo
G
GoLancer 已提交
403
  source cyber/setup.bash
404

L
Liangliang Zhang 已提交
405
  citest_basic
406
  citest_extended
L
Liangliang Zhang 已提交
407 408 409 410 411 412 413 414 415
  if [ $? -eq 0 ]; then
    success 'Test passed!'
    return 0
  else
    fail 'Test failed!'
    return 1
  fi
}

D
Dong Li 已提交
416
function run_cpp_lint() {
417
  BUILD_TARGETS="`bazel query //modules/... except //modules/tools/visualizer/... union //cyber/...`"
S
storypku 已提交
418
  ${TEST_CMD} --config=cpplint -c dbg $BUILD_TARGETS
D
Dong Li 已提交
419 420 421
}

function run_bash_lint() {
S
siyangy 已提交
422
  FILES=$(find "${APOLLO_ROOT_DIR}" -type f -name "*.sh" | grep -v ros)
D
Dong Li 已提交
423 424 425 426
  echo "${FILES}" | xargs shellcheck
}

function run_lint() {
C
Calvin Miao 已提交
427
  # Add cpplint rule to BUILD files that do not contain it.
428
  for file in $(find cyber modules -name BUILD | \
H
hugomatic 已提交
429
    grep -v gnss/third_party | grep -v modules/teleop/encoder/nvenc_sdk6 | \
C
Calvin Miao 已提交
430 431 432 433 434 435
    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 已提交
436 437
  run_cpp_lint

D
Dong Li 已提交
438 439 440 441 442 443 444 445
  if [ $? -eq 0 ]; then
    success 'Lint passed!'
  else
    fail 'Lint failed!'
  fi
}

function clean() {
A
Aaron Xiao 已提交
446
  # Remove bazel cache.
447
  bazel clean --async
448 449 450 451 452 453

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

A
Aaron Xiao 已提交
454 455
  # Remove cmake cache.
  rm -fr framework/build
D
Dong Li 已提交
456 457 458
}

function buildify() {
459
  find . -name '*BUILD' -or -name '*.bzl' -type f -exec buildifier -mode=fix {} +
460 461 462 463 464
  if [ $? -eq 0 ]; then
    success 'Buildify worked!'
  else
    fail 'Buildify failed!'
  fi
D
Dong Li 已提交
465 466
}

S
siyangy 已提交
467 468 469 470 471
function build_fe() {
  cd modules/dreamview/frontend
  yarn build
}

D
Dong Li 已提交
472 473 474 475 476 477
function gen_doc() {
  rm -rf docs/doxygen
  doxygen apollo.doxygen
}

function version() {
478 479 480 481 482
  rev=$(get_revision)
  if [ "$rev" = "unknown" ];then
    echo "Version: $rev"
    return
  fi
D
Dong Li 已提交
483 484 485 486 487 488
  commit=$(git log -1 --pretty=%H)
  date=$(git log -1 --pretty=%cd)
  echo "Commit: ${commit}"
  echo "Date: ${date}"
}

489 490 491 492 493 494 495 496 497 498 499
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"
}

500 501 502 503 504 505 506 507 508 509 510
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"
}

511
function config() {
512
  ${APOLLO_ROOT_DIR}/scripts/configurator.sh
513 514
}

S
siyangy 已提交
515
function set_use_gpu() {
S
siyangy 已提交
516 517 518 519 520
  if [ "${USE_GPU}" = "1" ] ; then
    DEFINES="${DEFINES} --define USE_GPU=true"
  else
    DEFINES="${DEFINES} --cxxopt=-DCPU_ONLY"
  fi
S
siyangy 已提交
521 522
}

523
function print_usage() {
C
Calvin Miao 已提交
524 525 526 527 528 529 530 531 532 533
  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
534
  ${BLUE}build_opt${NONE}: build optimized binary for the code
L
luoqi06 已提交
535
  ${BLUE}build_cpu${NONE}: dbg build with CPU
J
Jun Zhu 已提交
536 537
  ${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 已提交
538
  ${BLUE}build_fe${NONE}: compile frontend javascript code, this requires all the node_modules to be installed already
539 540
  ${BLUE}build_cyber [dbg|opt]${NONE}: build Cyber RT only
  ${BLUE}build_drivers [dbg|opt]${NONE}: build drivers only
541 542 543 544
  ${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 已提交
545
  ${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.
546
  ${BLUE}build_prof${NONE}: build for gprof support.
C
Calvin Miao 已提交
547 548 549 550 551 552 553 554 555 556 557 558
  ${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
  "
559 560
}

S
storypku 已提交
561 562 563 564 565 566 567 568 569 570 571 572 573 574
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 已提交
575
function main() {
576

S
siyangy 已提交
577
  check_machine_arch
578
  apollo_check_system_config
S
storypku 已提交
579 580 581

  bootstrap

S
siyangy 已提交
582 583
  check_esd_files

584
  DEFINES="--define ARCH=${MACHINE_ARCH} --define CAN_CARD=${CAN_CARD} --cxxopt=-DUSE_ESD_CAN=${USE_ESD_CAN}"
F
Fla3inH0tCheet0s 已提交
585
  # Enable bazel's feature to compute md5 checksums in parallel
586
  DEFINES="${DEFINES} --experimental_multi_threaded_digest"
587 588 589 590

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

592 593 594
  local cmd=$1
  shift

S
siyangy 已提交
595
  START_TIME=$(get_now)
596
  case $cmd in
S
siyangy 已提交
597
    check)
598
      DEFINES="${DEFINES} --cxxopt=-DCPU_ONLY"
599
      check $@
S
siyangy 已提交
600 601
      ;;
    build)
S
siyangy 已提交
602
      set_use_gpu
603
      apollo_build_dbg $@
604 605
      ;;
    build_cpu)
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
      BUILD_FILTER="no_perception"
616 617 618
      if [ "$1" == "opt" ]; then
        shift
        apollo_build_opt $@
619
      else
620 621 622
        shift
        apollo_build_dbg $@
      fi
623
      ;;
624 625 626 627
    clean_cyber)
      export LD_PRELOAD=
      clean
      ;;
628
    build_cyber)
629
      export LD_PRELOAD=
630 631 632 633 634 635 636 637 638 639
      BUILD_FILTER="cyber"
      if [ "$1" == "opt" ]; then
        shift
        apollo_build_opt $@
      else
        shift
        apollo_build_dbg $@
      fi
      ;;
    build_drivers)
640
      export LD_PRELOAD=
641 642 643 644 645 646 647 648 649
      BUILD_FILTER="drivers"
      if [ "$1" == "opt" ]; then
        shift
        apollo_build_opt $@
      else
        shift
        apollo_build_dbg $@
      fi
      ;;
650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665
    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 $@
      ;;
666 667 668 669
    cibuild)
      DEFINES="${DEFINES} --cxxopt=-DCPU_ONLY"
      cibuild $@
      ;;
670 671 672 673
    cibuild_extended)
      DEFINES="${DEFINES} --cxxopt=-DCPU_ONLY"
      cibuild_extended $@
      ;;
674
    build_opt)
675
      DEFINES="${DEFINES} --cxxopt=-DCPU_ONLY --copt=-fpic"
676
      apollo_build_opt $@
S
siyangy 已提交
677
      ;;
678
    build_gpu)
S
siyangy 已提交
679
      set_use_gpu
680
      apollo_build_dbg $@
J
Jun Zhu 已提交
681
      ;;
J
Jun Zhu 已提交
682
    build_opt_gpu)
S
siyangy 已提交
683 684
      set_use_gpu
      DEFINES="${DEFINES} --copt=-fpic"
685
      apollo_build_opt $@
Y
Yu Cao 已提交
686 687 688 689 690
      ;;
    build_teleop)
      set_use_gpu
      DEFINES="${DEFINES} --copt=-fpic --define WITH_TELEOP=1 --cxxopt=-DTELEOP"
      apollo_build_opt $@
S
siyangy 已提交
691
      ;;
S
siyangy 已提交
692 693 694
    build_fe)
      build_fe
      ;;
S
siyangy 已提交
695 696 697
    buildify)
      buildify
      ;;
698 699 700
    config)
      config
      ;;
S
siyangy 已提交
701 702 703 704 705 706 707
    doc)
      gen_doc
      ;;
    lint)
      run_lint
      ;;
    test)
S
siyangy 已提交
708
      set_use_gpu
709 710 711
      run_test $@
      ;;
    test_cpu)
712
      DEFINES="${DEFINES} --cxxopt=-DCPU_ONLY"
L
Lei Wang 已提交
713
      run_test $@
S
siyangy 已提交
714
      ;;
L
Liangliang Zhang 已提交
715 716 717 718
    citest)
      DEFINES="${DEFINES} --cxxopt=-DCPU_ONLY"
      citest $@
      ;;
719 720 721 722 723 724 725 726
    citest_basic)
      DEFINES="${DEFINES} --cxxopt=-DCPU_ONLY"
      citest_basic $@
      ;;
    citest_extended)
      DEFINES="${DEFINES} --cxxopt=-DCPU_ONLY"
      citest_extended $@
      ;;
727
    test_gpu)
S
siyangy 已提交
728
      set_use_gpu
L
Lei Wang 已提交
729
      run_test $@
730
      ;;
S
siyangy 已提交
731
    coverage)
L
Lei Wang 已提交
732
      gen_coverage $@
S
siyangy 已提交
733 734 735 736 737 738 739
      ;;
    clean)
      clean
      ;;
    version)
      version
      ;;
C
Calvin Miao 已提交
740 741 742
    usage)
      print_usage
      ;;
S
siyangy 已提交
743 744 745 746 747 748
    *)
      print_usage
      ;;
  esac
}

749
main $@