apollo.sh 24.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 99 100 101
    BUILD_TARGETS=""
  else
    info 'Skip building perception module!'
    # BUILD_TARGETS=`bazel query //... except //modules/perception/... except //modules/calibration/lidar_ex_checker/...`
    BUILD_TARGETS=""
  fi
L
Liangliang Zhang 已提交
102
    BUILD_TARGETS="
103
    //modules/canbus/...
104
    //modules/common/...
105
    //modules/control/...
106
    //modules/dreamview/...
L
Liangliang Zhang 已提交
107
    //modules/drivers/...
108
    //modules/guardian/...
109
    //modules/integration_test/...
110
    //modules/localization/...
111
    //modules/map/...
A
Aaron Xiao 已提交
112
    //modules/monitor/...
L
Liangliang Zhang 已提交
113
    //modules/perception/...
J
JasonZhou404 已提交
114
    //modules/planning/...
115 116
    //modules/prediction/...
    //modules/routing/...
D
Dong Li 已提交
117
    //modules/third_party_perception/...
118 119
    //modules/tools/manual_traffic_light/...
    //modules/tools/prediction/fake_prediction/..."
120
    # //modules/calibration/...
121
    # //modules/data/...
122

C
Calvin Miao 已提交
123 124 125
  if [ $? -ne 0 ]; then
    fail 'Build failed!'
  fi
D
Dong Li 已提交
126
  if ! $USE_ESD_CAN; then
127
     BUILD_TARGETS=$(echo $BUILD_TARGETS |tr ' ' '\n' | grep -v "esd")
D
Dong Li 已提交
128
  fi
129
  #skip msf for non x86_64 platforms
130
  if [ ${MACHINE_ARCH} != "x86_64" ]; then
131 132
     BUILD_TARGETS=$(echo $BUILD_TARGETS |tr ' ' '\n' | grep -v "msf")
  fi
D
Dong Li 已提交
133 134 135 136 137 138
}

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

S
siyangy 已提交
139
function build() {
140
  if [ "${USE_GPU}" = "1" ] ; then
141 142 143 144
    echo -e "${YELLOW}Running build under GPU mode. GPU is required to run the build.${NO_COLOR}"
  else
    echo -e "${YELLOW}Running build under CPU mode. No GPU is required to run the build.${NO_COLOR}"
  fi
145
  info "Start building, please wait ..."
146 147 148 149 150
  info "Building framework ..."
  cd /apollo/framework
  bash cybertron.sh build_fast
  cd /apollo
  info "Building modules ..."
D
Dong Li 已提交
151
  generate_build_targets
152 153
  info "Building on $MACHINE_ARCH..."

154
  MACHINE_ARCH=$(uname -m)
155
  JOB_ARG="--jobs=$(nproc) --ram_utilization_factor 80"
156 157 158
  if [ "$MACHINE_ARCH" == 'aarch64' ]; then
    JOB_ARG="--jobs=3"
  fi
159
  info "Building with $JOB_ARG for $MACHINE_ARCH"
160

J
jiayunhan 已提交
161
  echo "$BUILD_TARGETS" | xargs bazel build $JOB_ARG $DEFINES -c $@
162

163
  if [ $? -ne 0 ]; then
D
Dong Li 已提交
164 165
    fail 'Build failed!'
  fi
S
siyangy 已提交
166 167

  # Build python proto
L
Lei Wang 已提交
168
  build_py_proto
169

170 171
  # Clear KV DB and update commit_id after compiling.
  rm -fr data/kv_db
172
  REVISION=$(get_revision)
173
  python modules/tools/common/kv_db.py put \
174
      "apollo:data:commit_id" "$REVISION"
175

S
siyangy 已提交
176 177 178 179 180 181
  # 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
182 183
  if [ $? -eq 0 ]; then
    success 'Build passed!'
184 185
  else
    fail 'Build failed'
186
  fi
D
Dong Li 已提交
187 188
}

189
function cibuild() {
190 191 192 193 194 195
  info "Building framework ..."
  cd /apollo/framework
  bash cybertron.sh build_fast

  cd /apollo
  info "Building modules ..."
196 197 198 199 200 201

  JOB_ARG="--jobs=$(nproc)"
  if [ "$MACHINE_ARCH" == 'aarch64' ]; then
    JOB_ARG="--jobs=3"
  fi

A
Aaron Xiao 已提交
202
  info "Building with $JOB_ARG for $MACHINE_ARCH"
203
  BUILD_TARGETS="
204
    //modules/canbus/...
205 206
    //modules/common/...
    //modules/control/...
207
    //modules/dreamview/...
L
Liangliang Zhang 已提交
208
    //modules/drivers/...
209
    //modules/guardian/...
210
    //modules/localization/...
211
    //modules/map/...
L
Liangliang Zhang 已提交
212
    //modules/perception/...
213 214
    //modules/planning/...
    //modules/prediction/...
215 216
    //modules/routing/...
    //modules/third_party_perception/..."
217

218
  bazel build $JOB_ARG $DEFINES $@ $BUILD_TARGETS
219

220 221 222 223 224 225 226
  if [ $? -eq 0 ]; then
    success 'Build passed!'
  else
    fail 'Build failed!'
  fi
}

227
function apollo_build_dbg() {
228
  build "dbg" $@
S
siyangy 已提交
229 230
}

231
function apollo_build_opt() {
232
  build "opt" $@
S
siyangy 已提交
233 234
}

L
Lei Wang 已提交
235 236 237 238 239 240
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'
241
  find modules/ -name "*.proto" \
S
siyangy 已提交
242
      | grep -v node_modules \
243
      | xargs ${PROTOC} --python_out=py_proto
L
Lei Wang 已提交
244 245 246
  find py_proto/* -type d -exec touch "{}/__init__.py" \;
}

D
Dong Li 已提交
247
function check() {
D
Dong Li 已提交
248
  bash $0 build && bash $0 "test" && bash $0 lint
D
Dong Li 已提交
249 250 251 252 253 254 255 256 257 258 259

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

function warn_proprietary_sw() {
260 261 262 263 264 265
  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 已提交
266 267 268
}

function release() {
269 270
  RELEASE_DIR="${HOME}/.cache/apollo_release"
  if [ -d "${RELEASE_DIR}" ]; then
271
    rm -rf "${RELEASE_DIR}"
272
  fi
D
Dong Li 已提交
273 274
  APOLLO_RELEASE_DIR="${RELEASE_DIR}/apollo"
  mkdir -p "${APOLLO_RELEASE_DIR}"
275 276 277 278 279 280

  # 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 已提交
281
    DST_PATH="${APOLLO_RELEASE_DIR}/${BIN}"
282 283 284 285 286
    if [ -e "${SRC_PATH}" ]; then
      mkdir -p "$(dirname "${DST_PATH}")"
      cp "${SRC_PATH}" "${DST_PATH}"
    fi
  done
D
Dong Li 已提交
287

288
  # modules data and conf
289 290
  CONFS=$(find modules/ -name "conf")
  DATAS=$(find modules/ -name "data")
291 292
  OTHER=("modules/tools"
         "modules/perception/model")
293 294 295 296 297 298 299 300 301 302 303
  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
304
  # Other
305
  for path in "${OTHER[@]}"; do
306 307 308
    mkdir -p $APOLLO_RELEASE_DIR/$path
    rsync -a $path/* $APOLLO_RELEASE_DIR/$path
  done
309 310 311

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

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

S
siyangy 已提交
316
  # scripts
D
Dong Li 已提交
317
  cp -r scripts ${APOLLO_RELEASE_DIR}
S
siyangy 已提交
318

319 320 321
  # remove mounted models
  rm -rf ${APOLLO_RELEASE_DIR}/modules/perception/model/yolo_camera_detector/

D
Dong Li 已提交
322
  # lib
D
Dong Li 已提交
323
  LIB_DIR="${APOLLO_RELEASE_DIR}/lib"
324
  mkdir "${LIB_DIR}"
D
Dong Li 已提交
325
  if $USE_ESD_CAN; then
L
Lei Wang 已提交
326
    warn_proprietary_sw
D
Dong Li 已提交
327
  fi
328
  cp -r third_party/can_card_library/*/lib/* $LIB_DIR
L
Lei Wang 已提交
329 330
  cp -r bazel-genfiles/external $LIB_DIR
  cp -r py_proto/modules $LIB_DIR
331
  cp /apollo/bazel-apollo/bazel-out/local-opt/bin/modules/perception/cuda_util/libintegrated_cuda_util.so $LIB_DIR
332

D
Dong Li 已提交
333
  # doc
D
Dong Li 已提交
334 335
  cp LICENSE "${APOLLO_RELEASE_DIR}"
  cp third_party/ACKNOWLEDGEMENT.txt "${APOLLO_RELEASE_DIR}"
L
Lei Wang 已提交
336

S
siyangy 已提交
337
  # release info
D
Dong Li 已提交
338
  META="${APOLLO_RELEASE_DIR}/meta.ini"
339
  echo "git_commit: $(get_revision)" >> $META
340
  echo "git_branch: $(get_branch)" >> $META
341 342
  echo "car_type: LINCOLN.MKZ" >> $META
  echo "arch: ${MACHINE_ARCH}" >> $META
D
Dong Li 已提交
343 344 345 346
}

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

D
Dong Li 已提交
353 354 355 356 357 358 359 360
  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
361 362 363 364 365 366 367 368

  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 已提交
369
  lcov --rc lcov_branch_coverage=1 --capture --directory "$COV_DIR/objs" --output-file "$COV_DIR/conv.info"
D
Dong Li 已提交
370 371 372
  if [ $? -ne 0 ]; then
    fail 'lcov failed!'
  fi
J
Jiangtao Hu 已提交
373
  lcov --rc lcov_branch_coverage=1 --remove "$COV_DIR/conv.info" \
D
Dong Li 已提交
374 375 376 377 378 379 380 381 382 383 384
      "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() {
385

386
  generate_build_targets
387
  if [ "$USE_GPU" == "1" ]; then
388
    echo -e "${YELLOW}Running tests under GPU mode. GPU is required to run the tests.${NO_COLOR}"
L
Lei Wang 已提交
389
    echo "$BUILD_TARGETS" | xargs bazel test $DEFINES --config=unit_test -c dbg --test_verbose_timeout_warnings $@
390
  else
391
    echo -e "${YELLOW}Running tests under CPU mode. No GPU is required to run the tests.${NO_COLOR}"
392
    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 $@
393
  fi
394 395 396 397 398
  if [ $? -ne 0 ]; then
    fail 'Test failed!'
    return 1
  fi

S
siyangy 已提交
399
  if [ $? -eq 0 ]; then
D
Dong Li 已提交
400 401 402 403 404
    success 'Test passed!'
    return 0
  fi
}

405 406 407 408 409 410 411 412 413 414 415 416 417 418 419
function citest_perception() {
  generate_build_targets

  # common related test
  echo "$BUILD_TARGETS" | grep "perception\/" | grep -v "sunnyvale_big_loop\|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 $@

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

L
Liangliang Zhang 已提交
420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438
function citest_dreamview() {
  generate_build_targets

  # common related test
  echo "$BUILD_TARGETS" | grep "dreamview\/" | xargs bazel test $DEFINES --config=unit_test -c dbg --test_verbose_timeout_warnings $@

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

function citest_map() {
  generate_build_targets

  # common related test
L
Liangliang Zhang 已提交
439
  echo "$BUILD_TARGETS" | grep "map\/" | grep -v "cuda_util_test" | xargs bazel test $DEFINES --config=unit_test -c dbg --test_verbose_timeout_warnings $@
L
Liangliang Zhang 已提交
440 441 442 443 444 445 446 447 448 449 450

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

function citest_basic() {
451 452 453 454 455 456 457 458 459 460 461
  BUILD_TARGETS="
    //modules/common/...
    //modules/control/...
    //modules/localization/proto/...
    //modules/localization/rtk/...
    `bazel query //modules/localization/msf/... except //modules/localization/msf/local_tool/...`
    `bazel query //modules/localization/msf/local_tool/local_visualization/...`
    //modules/perception/proto/...
    //modules/planning/...
    //modules/prediction/...
    //modules/routing/..."
462 463 464 465 466 467 468 469 470 471

  # control related test
  echo "$BUILD_TARGETS" | grep "control\/" | xargs bazel test $DEFINES --config=unit_test -c dbg --test_verbose_timeout_warnings $@

  # prediction related test
  echo "$BUILD_TARGETS" | grep "prediction\/" | xargs bazel test $DEFINES --config=unit_test -c dbg --test_verbose_timeout_warnings $@

  # planning related test
  echo "$BUILD_TARGETS" | grep "planning\/" | xargs bazel test $DEFINES --config=unit_test -c dbg --test_verbose_timeout_warnings $@

472 473 474 475 476 477 478 479 480
  if [ $? -eq 0 ]; then
    success 'Test passed!'
    return 0
  else
    fail 'Test failed!'
    return 1
  fi
}

L
Liangliang Zhang 已提交
481
function citest() {
482 483 484 485 486
  info "Building framework ..."
  cd /apollo/framework
  bash cybertron.sh build_fast
  cd /apollo

487
  run_test
L
Liangliang Zhang 已提交
488 489 490 491 492 493 494 495 496
  if [ $? -eq 0 ]; then
    success 'Test passed!'
    return 0
  else
    fail 'Test failed!'
    return 1
  fi
}

D
Dong Li 已提交
497
function run_cpp_lint() {
498
  set -e
499
  # check /apollo/module
500 501
  generate_build_targets
  echo "$BUILD_TARGETS" | xargs bazel test --config=cpplint -c dbg
502 503 504 505

  # check /apollo/framework
  BUILD_TARGETS="//framework/cybertron/..."
  echo "$BUILD_TARGETS" | xargs bazel test --config=cpplint -c dbg
D
Dong Li 已提交
506 507 508
}

function run_bash_lint() {
S
siyangy 已提交
509
  FILES=$(find "${APOLLO_ROOT_DIR}" -type f -name "*.sh" | grep -v ros)
D
Dong Li 已提交
510 511 512 513
  echo "${FILES}" | xargs shellcheck
}

function run_lint() {
C
Calvin Miao 已提交
514
  # Add cpplint rule to BUILD files that do not contain it.
515
  for file in $(find framework modules -name BUILD |  grep -v gnss/third_party | \
C
Calvin Miao 已提交
516 517 518 519 520 521
    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 已提交
522 523
  run_cpp_lint

D
Dong Li 已提交
524 525 526 527 528 529 530 531
  if [ $? -eq 0 ]; then
    success 'Lint passed!'
  else
    fail 'Lint failed!'
  fi
}

function clean() {
A
Aaron Xiao 已提交
532
  # Remove bazel cache.
533
  bazel clean --async
A
Aaron Xiao 已提交
534 535
  # Remove cmake cache.
  rm -fr framework/build
D
Dong Li 已提交
536 537 538
}

function buildify() {
539 540 541
  local buildifier_url=https://github.com/bazelbuild/buildtools/releases/download/0.4.5/buildifier
  wget $buildifier_url -O ~/.buildifier
  chmod +x ~/.buildifier
542
  find . -name '*BUILD' -type f -exec ~/.buildifier -showlog -mode=fix {} +
543 544 545 546 547 548
  if [ $? -eq 0 ]; then
    success 'Buildify worked!'
  else
    fail 'Buildify failed!'
  fi
  rm ~/.buildifier
D
Dong Li 已提交
549 550
}

S
siyangy 已提交
551 552 553 554 555
function build_fe() {
  cd modules/dreamview/frontend
  yarn build
}

D
Dong Li 已提交
556 557 558 559 560 561
function gen_doc() {
  rm -rf docs/doxygen
  doxygen apollo.doxygen
}

function version() {
562 563 564 565 566
  rev=$(get_revision)
  if [ "$rev" = "unknown" ];then
    echo "Version: $rev"
    return
  fi
D
Dong Li 已提交
567 568 569 570 571 572
  commit=$(git log -1 --pretty=%H)
  date=$(git log -1 --pretty=%cd)
  echo "Commit: ${commit}"
  echo "Date: ${date}"
}

573 574 575 576 577 578 579 580 581 582 583
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"
}

584 585 586 587 588 589 590 591 592 593 594
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"
}

F
fengkaiwen01 已提交
595 596
function build_velodyne() {
  CURRENT_PATH=$(pwd)
F
fengkaiwen01 已提交
597 598
  if [ -d "${ROS_ROOT}" ]; then
    ROS_PATH="${ROS_ROOT}/../.."
F
fengkaiwen01 已提交
599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617
  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/
}

618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641
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/
}


642 643 644 645 646 647 648 649 650 651 652 653 654

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
655
  catkin_make_isolated --install --source drivers/lslidar_apollo \
656 657 658 659 660 661 662 663 664 665
    --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 已提交
666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689
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 已提交
690 691
function build_usbcam() {
  CURRENT_PATH=$(pwd)
F
fengkaiwen01 已提交
692 693
  if [ -d "${ROS_ROOT}" ]; then
    ROS_PATH="${ROS_ROOT}/../.."
Y
yibingl 已提交
694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712
  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/
}

713
function config() {
714
  ${APOLLO_ROOT_DIR}/scripts/configurator.sh
715 716
}

717
function print_usage() {
C
Calvin Miao 已提交
718 719 720 721 722 723 724 725 726 727
  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
728
  ${BLUE}build_opt${NONE}: build optimized binary for the code
J
Jun Zhu 已提交
729
  ${BLUE}build_gpu${NONE}: run build only with Caffe GPU mode support
F
fengkaiwen01 已提交
730
  ${BLUE}build_velodyne${NONE}: build velodyne driver
731
  ${BLUE}build_velodyne_vls128${NONE}: build velodyne vls-128 driver
732
  ${BLUE}build_lslidar${NONE}: build lslidar driver
T
Tony Zhang 已提交
733
  ${BLUE}build_rslidar${NONE}: build rslidar driver
gengqx's avatar
gengqx 已提交
734
  ${BLUE}build_usbcam${NONE}: build usb camera driver
J
Jun Zhu 已提交
735
  ${BLUE}build_opt_gpu${NONE}: build optimized binary with Caffe GPU mode support
C
Calvin Miao 已提交
736
  ${BLUE}build_fe${NONE}: compile frontend javascript code, this requires all the node_modules to be installed already
737
  ${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.
738
  ${BLUE}build_prof${NONE}: build for gprof support.
C
Calvin Miao 已提交
739 740 741 742 743 744 745 746 747 748 749 750
  ${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
  "
751 752
}

S
siyangy 已提交
753 754 755
function main() {
  source_apollo_base
  check_machine_arch
756
  apollo_check_system_config
S
siyangy 已提交
757 758
  check_esd_files

759 760 761 762 763
  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 已提交
764

765 766 767
  local cmd=$1
  shift

S
siyangy 已提交
768
  START_TIME=$(get_now)
769
  case $cmd in
S
siyangy 已提交
770
    check)
771
      DEFINES="${DEFINES} --cxxopt=-DCPU_ONLY"
772
      check $@
S
siyangy 已提交
773 774
      ;;
    build)
775
      DEFINES="${DEFINES} --define USE_GPU=true --cxxopt=-DUSE_GPU"
776
      USE_GPU="1"
777 778 779
      apollo_build_dbg $@
      ;;
    build_cpu)
L
Lei Wang 已提交
780
      DEFINES="${DEFINES} --cxxopt=-DCPU_ONLY"
781
      apollo_build_dbg $@
S
siyangy 已提交
782
      ;;
783
    build_prof)
D
Dong Li 已提交
784
      DEFINES="${DEFINES} --config=cpu_prof --cxxopt=-DCPU_ONLY"
785 786
      apollo_build_dbg $@
      ;;
787
    build_no_perception)
S
siyangy 已提交
788
      DEFINES="${DEFINES} --cxxopt=-DCPU_ONLY"
789
      NOT_BUILD_PERCEPTION=true
790 791 792
      if [ "$1" == "opt" ]; then
        shift
        apollo_build_opt $@
793
      else
794 795 796
        shift
        apollo_build_dbg $@
      fi
797
      ;;
798 799 800 801
    cibuild)
      DEFINES="${DEFINES} --cxxopt=-DCPU_ONLY"
      cibuild $@
      ;;
802
    build_opt)
803
      DEFINES="${DEFINES} --cxxopt=-DCPU_ONLY --copt=-fpic"
804
      apollo_build_opt $@
S
siyangy 已提交
805
      ;;
806
    build_gpu)
807
      DEFINES="${DEFINES} --define USE_GPU=true --cxxopt=-DUSE_GPU"
808
      USE_GPU="1"
809
      apollo_build_dbg $@
J
Jun Zhu 已提交
810
      ;;
J
Jun Zhu 已提交
811
    build_opt_gpu)
812
      DEFINES="${DEFINES} --define USE_GPU=true --cxxopt=-DUSE_GPU --copt=-fpic"
813
      USE_GPU="1"
814
      apollo_build_opt $@
S
siyangy 已提交
815
      ;;
S
siyangy 已提交
816 817 818
    build_fe)
      build_fe
      ;;
S
siyangy 已提交
819 820 821
    buildify)
      buildify
      ;;
L
Lei Wang 已提交
822 823 824
    build_py)
      build_py_proto
      ;;
F
fengkaiwen01 已提交
825
    build_velodyne)
F
fengkaiwen01 已提交
826 827
      build_velodyne
      ;;
828 829 830
    build_velodyne_vls128)
      build_velodyne_vls128
      ;;
831 832 833
    build_lslidar)
      build_lslidar
      ;;
T
Tony Zhang 已提交
834 835 836
    build_rslidar)
      build_rslidar
      ;;
F
fengkaiwen01 已提交
837
    build_usbcam)
Y
yibingl 已提交
838 839
      build_usbcam
      ;;
840 841 842
    config)
      config
      ;;
S
siyangy 已提交
843 844 845 846 847 848 849
    doc)
      gen_doc
      ;;
    lint)
      run_lint
      ;;
    test)
850 851 852 853 854
      DEFINES="${DEFINES} --cxxopt=-DUSE_GPU"
      USE_GPU="1"
      run_test $@
      ;;
    test_cpu)
855
      DEFINES="${DEFINES} --cxxopt=-DCPU_ONLY"
L
Lei Wang 已提交
856
      run_test $@
S
siyangy 已提交
857
      ;;
L
Liangliang Zhang 已提交
858 859 860 861 862 863 864 865 866 867 868 869
    citest)
      DEFINES="${DEFINES} --cxxopt=-DCPU_ONLY"
      citest $@
      ;;
    citest_map)
      DEFINES="${DEFINES} --cxxopt=-DCPU_ONLY"
      citest_map $@
      ;;
    citest_dreamview)
      DEFINES="${DEFINES} --cxxopt=-DCPU_ONLY"
      citest_dreamview $@
      ;;
870 871 872 873
    citest_perception)
      DEFINES="${DEFINES} --cxxopt=-DCPU_ONLY"
      citest_perception $@
      ;;
L
Liangliang Zhang 已提交
874
    citest_basic)
875
      DEFINES="${DEFINES} --cxxopt=-DCPU_ONLY"
L
Liangliang Zhang 已提交
876
      citest_basic $@
877
      ;;
878
    test_gpu)
879
      DEFINES="${DEFINES} --cxxopt=-DUSE_GPU"
880
      USE_GPU="1"
L
Lei Wang 已提交
881
      run_test $@
882
      ;;
S
siyangy 已提交
883 884 885 886 887 888 889
    release)
      release 1
      ;;
    release_noproprietary)
      release 0
      ;;
    coverage)
L
Lei Wang 已提交
890
      gen_coverage $@
S
siyangy 已提交
891 892 893 894 895 896 897
      ;;
    clean)
      clean
      ;;
    version)
      version
      ;;
C
Calvin Miao 已提交
898 899 900
    usage)
      print_usage
      ;;
S
siyangy 已提交
901 902 903 904 905 906
    *)
      print_usage
      ;;
  esac
}

907
main $@