#!/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 #================================================= function source_apollo_base() { DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" cd "${DIR}" source "${DIR}/scripts/apollo_base.sh" } function apollo_check_system_config() { # check docker environment if [ ${MACHINE_ARCH} == "x86_64" ] && [ ${APOLLO_IN_DOCKER} != "true" ]; then echo -e "${RED}Must run $0 in dev docker or release docker${NO_COLOR}" exit 0 fi # check operating system OP_SYSTEM=$(uname -s) case $OP_SYSTEM in "Linux") echo "System check passed. Build continue ..." # 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 ;; "Darwin") warning "Mac OS is not officially supported in the current version. Build could fail. We recommend using Ubuntu 14.04." ;; *) error "Unsupported system: ${OP_SYSTEM}." error "Please use Linux, we recommend Ubuntu 14.04." exit 1 ;; esac } function check_machine_arch() { # the machine type, currently support x86_64, aarch64 MACHINE_ARCH=$(uname -m) # 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 #setup vtk folder name for different systems. VTK_VERSION=$(find /usr/include/ -type d -name "vtk-*" | tail -n1 | cut -d '-' -f 2) sed -i "s/VTK_VERSION/${VTK_VERSION}/g" WORKSPACE } function check_esd_files() { CAN_CARD="fake_can" 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 CAN_CARD="esd_can" else 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." USE_ESD_CAN=false fi } function generate_build_targets() { if [ -z $NOT_BUILD_PERCEPTION ] ; then BUILD_TARGETS="" else info 'Skip building perception module!' # BUILD_TARGETS=`bazel query //... except //modules/perception/... except //modules/calibration/lidar_ex_checker/...` BUILD_TARGETS="" fi BUILD_TARGETS=" //modules/canbus/... //modules/common/... //modules/control/... //modules/dreamview/... //modules/drivers/... //modules/guardian/... //modules/integration_test/... //modules/localization/... //modules/map/... //modules/monitor/... //modules/perception/... //modules/planning/... //modules/prediction/... //modules/routing/... //modules/transform/... //modules/third_party_perception/... //modules/tools/manual_traffic_light/... //modules/tools/prediction/fake_prediction/... //modules/tools/rosbag_to_record/... //modules/tools/visualizer/... //modules/transform/..." # //modules/calibration/... # //modules/data/... if [ $? -ne 0 ]; then fail 'Build failed!' fi if ! $USE_ESD_CAN; then BUILD_TARGETS=$(echo $BUILD_TARGETS |tr ' ' '\n' | grep -v "esd") fi #skip msf for non x86_64 platforms if [ ${MACHINE_ARCH} != "x86_64" ]; then BUILD_TARGETS=$(echo $BUILD_TARGETS |tr ' ' '\n' | grep -v "msf") fi } #================================================= # Build functions #================================================= function build_cybertron() { cd /apollo/framework bash cybertron.sh build_fast cd /apollo info "Building cybertron ..." source framework/install/setup.bash } function build() { if [ "${USE_GPU}" = "1" ] ; then 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 info "Start building, please wait ..." build_cybertron generate_build_targets info "Building on $MACHINE_ARCH..." MACHINE_ARCH=$(uname -m) JOB_ARG="--jobs=$(nproc) --ram_utilization_factor 80" if [ "$MACHINE_ARCH" == 'aarch64' ]; then JOB_ARG="--jobs=3" fi info "Building with $JOB_ARG for $MACHINE_ARCH" echo "$BUILD_TARGETS" | xargs bazel build $JOB_ARG $DEFINES -c $@ if [ $? -ne 0 ]; then fail 'Build failed!' fi # Build python proto build_py_proto # Clear KV DB and update commit_id after compiling. rm -fr data/kv_db REVISION=$(get_revision) python modules/tools/common/kv_db.py put \ "apollo:data:commit_id" "$REVISION" # 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 if [ $? -eq 0 ]; then success 'Build passed!' else fail 'Build failed' fi } function cibuild() { info "Building framework ..." cd /apollo/framework bash cybertron.sh build_fast cd /apollo info "Building modules ..." JOB_ARG="--jobs=$(nproc)" 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/... //modules/dreamview/... //modules/drivers/radar/conti_radar/... //modules/drivers/radar/racobit_radar/... //modules/drivers/radar/ultrasonic_radar/... //modules/drivers/gnss/... //modules/drivers/velodyne/... //modules/drivers/camera/... //modules/guardian/... //modules/localization/... //modules/map/... //modules/perception/... //modules/planning/... //modules/prediction/... //modules/routing/... //modules/transform/... //modules/third_party_perception/... //modules/transform/..." bazel build $JOB_ARG $DEFINES $@ $BUILD_TARGETS if [ $? -eq 0 ]; then success 'Build passed!' else fail 'Build failed!' fi } function apollo_build_dbg() { build "dbg" $@ } function apollo_build_opt() { build "opt" $@ } 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' find modules/ -name "*.proto" \ | grep -v node_modules \ | xargs ${PROTOC} --python_out=py_proto find py_proto/* -type d -exec touch "{}/__init__.py" \; } function check() { bash $0 build && bash $0 "test" && bash $0 lint if [ $? -eq 0 ]; then success 'Check passed!' return 0 else fail 'Check failed!' return 1 fi } function warn_proprietary_sw() { 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}" } function release() { RELEASE_DIR="${HOME}/.cache/apollo_release" if [ -d "${RELEASE_DIR}" ]; then rm -rf "${RELEASE_DIR}" fi APOLLO_RELEASE_DIR="${RELEASE_DIR}/apollo" mkdir -p "${APOLLO_RELEASE_DIR}" # 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}" DST_PATH="${APOLLO_RELEASE_DIR}/${BIN}" if [ -e "${SRC_PATH}" ]; then mkdir -p "$(dirname "${DST_PATH}")" cp "${SRC_PATH}" "${DST_PATH}" fi done # modules data and conf CONFS=$(find modules/ -name "conf") DATAS=$(find modules/ -name "data") OTHER=("modules/tools" "modules/perception/model") 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 # Other for path in "${OTHER[@]}"; do mkdir -p $APOLLO_RELEASE_DIR/$path rsync -a $path/* $APOLLO_RELEASE_DIR/$path done # dreamview frontend cp -a modules/dreamview/frontend $APOLLO_RELEASE_DIR/modules/dreamview # remove all pyc file in modules/ find modules/ -name "*.pyc" | xargs -I {} rm {} # scripts cp -r scripts ${APOLLO_RELEASE_DIR} # remove mounted models rm -rf ${APOLLO_RELEASE_DIR}/modules/perception/model/yolo_camera_detector/ # lib LIB_DIR="${APOLLO_RELEASE_DIR}/lib" mkdir "${LIB_DIR}" if $USE_ESD_CAN; then warn_proprietary_sw fi cp -r third_party/can_card_library/*/lib/* $LIB_DIR cp -r bazel-genfiles/external $LIB_DIR cp -r py_proto/modules $LIB_DIR cp /apollo/bazel-apollo/bazel-out/local-opt/bin/modules/perception/cuda_util/libintegrated_cuda_util.so $LIB_DIR # doc cp LICENSE "${APOLLO_RELEASE_DIR}" cp third_party/ACKNOWLEDGEMENT.txt "${APOLLO_RELEASE_DIR}" # release info META="${APOLLO_RELEASE_DIR}/meta.ini" echo "git_commit: $(get_revision)" >> $META echo "git_branch: $(get_branch)" >> $META echo "car_type: LINCOLN.MKZ" >> $META echo "arch: ${MACHINE_ARCH}" >> $META } function gen_coverage() { bazel clean generate_build_targets echo "$BUILD_TARGETS" | grep -v "cnn_segmentation_test" | xargs bazel test $DEFINES -c dbg --config=coverage $@ if [ $? -ne 0 ]; then fail 'run test failed!' fi 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 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 lcov --rc lcov_branch_coverage=1 --capture --directory "$COV_DIR/objs" --output-file "$COV_DIR/conv.info" if [ $? -ne 0 ]; then fail 'lcov failed!' fi lcov --rc lcov_branch_coverage=1 --remove "$COV_DIR/conv.info" \ "external/*" \ "/usr/*" \ "bazel-out/*" \ "*third_party/*" \ "tools/*" \ -o $COV_DIR/stripped_conv.info genhtml $COV_DIR/stripped_conv.info --output-directory $COV_DIR/report echo "Generated coverage report in $COV_DIR/report/index.html" } function run_test() { JOB_ARG="--jobs=$(nproc) --ram_utilization_factor 80" generate_build_targets if [ "$USE_GPU" == "1" ]; then echo -e "${YELLOW}Running tests under GPU mode. GPU is required to run the tests.${NO_COLOR}" echo "$BUILD_TARGETS" | xargs bazel test $DEFINES $JOB_ARG --config=unit_test -c dbg --test_verbose_timeout_warnings $@ else echo -e "${YELLOW}Running tests under CPU mode. No GPU is required to run the tests.${NO_COLOR}" 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 $JOB_ARG --config=unit_test -c dbg --test_verbose_timeout_warnings $@ fi if [ $? -ne 0 ]; then fail 'Test failed!' return 1 fi if [ $? -eq 0 ]; then success 'Test passed!' return 0 fi } 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 } 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 echo "$BUILD_TARGETS" | grep "map\/" | grep -v "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 } function citest_basic() { set -e 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/..." JOB_ARG="--jobs=$(nproc) --ram_utilization_factor 80" # control related test echo "$BUILD_TARGETS" | grep "control\/" | xargs bazel test $DEFINES $JOB_ARG --config=unit_test -c dbg --test_verbose_timeout_warnings $@ # prediction related test echo "$BUILD_TARGETS" | grep "prediction\/" | xargs bazel test $DEFINES $JOB_ARG --config=unit_test -c dbg --test_verbose_timeout_warnings $@ # planning related test echo "$BUILD_TARGETS" | grep "planning\/" | xargs bazel test $DEFINES $JOB_ARG --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() { info "Building framework ..." cd /apollo/framework bash cybertron.sh build_fast cd /apollo source framework/install/setup.bash citest_basic if [ $? -eq 0 ]; then success 'Test passed!' return 0 else fail 'Test failed!' return 1 fi } function run_cpp_lint() { set -e # check /apollo/module generate_build_targets echo "$BUILD_TARGETS" | grep -v "tools/visualizer" | xargs bazel test --config=cpplint -c dbg # check /apollo/framework BUILD_TARGETS="//framework/cybertron/..." echo "$BUILD_TARGETS" | xargs bazel test --config=cpplint -c dbg } function run_bash_lint() { FILES=$(find "${APOLLO_ROOT_DIR}" -type f -name "*.sh" | grep -v ros) echo "${FILES}" | xargs shellcheck } function run_lint() { # Add cpplint rule to BUILD files that do not contain it. for file in $(find framework modules -name BUILD | grep -v gnss/third_party | \ 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 run_cpp_lint if [ $? -eq 0 ]; then success 'Lint passed!' else fail 'Lint failed!' fi } function clean() { # Remove bazel cache. bazel clean --async # Remove cmake cache. rm -fr framework/build } function buildify() { local buildifier_url=https://github.com/bazelbuild/buildtools/releases/download/0.4.5/buildifier wget $buildifier_url -O ~/.buildifier chmod +x ~/.buildifier find . -name '*BUILD' -type f -exec ~/.buildifier -showlog -mode=fix {} + if [ $? -eq 0 ]; then success 'Buildify worked!' else fail 'Buildify failed!' fi rm ~/.buildifier } function build_fe() { cd modules/dreamview/frontend yarn build } function gen_doc() { rm -rf docs/doxygen doxygen apollo.doxygen } function version() { rev=$(get_revision) if [ "$rev" = "unknown" ];then echo "Version: $rev" return fi commit=$(git log -1 --pretty=%H) date=$(git log -1 --pretty=%cd) echo "Commit: ${commit}" echo "Date: ${date}" } 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" } 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" } function build_velodyne() { 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 \ --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/ } 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/ } 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 catkin_make_isolated --install --source drivers/lslidar_apollo \ --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/ } 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/ } function build_usbcam() { 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/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/ } function config() { ${APOLLO_ROOT_DIR}/scripts/configurator.sh } function print_usage() { 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 ${BLUE}build_opt${NONE}: build optimized binary for the code ${BLUE}build_gpu${NONE}: run build only with Caffe GPU mode support ${BLUE}build_cybertron${NONE}: run build cybertron framework only ${BLUE}build_velodyne${NONE}: build velodyne driver ${BLUE}build_velodyne_vls128${NONE}: build velodyne vls-128 driver ${BLUE}build_lslidar${NONE}: build lslidar driver ${BLUE}build_rslidar${NONE}: build rslidar driver ${BLUE}build_usbcam${NONE}: build usb camera driver ${BLUE}build_opt_gpu${NONE}: build optimized binary with Caffe GPU mode support ${BLUE}build_fe${NONE}: compile frontend javascript code, this requires all the node_modules to be installed already ${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. ${BLUE}build_prof${NONE}: build for gprof support. ${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 " } function main() { source_apollo_base check_machine_arch apollo_check_system_config check_esd_files 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 local cmd=$1 shift START_TIME=$(get_now) case $cmd in check) DEFINES="${DEFINES} --cxxopt=-DCPU_ONLY" check $@ ;; build) DEFINES="${DEFINES} --define USE_GPU=true --cxxopt=-DUSE_GPU" USE_GPU="1" apollo_build_dbg $@ ;; build_cpu) DEFINES="${DEFINES} --cxxopt=-DCPU_ONLY" apollo_build_dbg $@ ;; build_prof) DEFINES="${DEFINES} --config=cpu_prof --cxxopt=-DCPU_ONLY" apollo_build_dbg $@ ;; build_no_perception) DEFINES="${DEFINES} --cxxopt=-DCPU_ONLY" NOT_BUILD_PERCEPTION=true if [ "$1" == "opt" ]; then shift apollo_build_opt $@ else shift apollo_build_dbg $@ fi ;; cibuild) DEFINES="${DEFINES} --cxxopt=-DCPU_ONLY" cibuild $@ ;; build_opt) DEFINES="${DEFINES} --cxxopt=-DCPU_ONLY --copt=-fpic" apollo_build_opt $@ ;; build_gpu) DEFINES="${DEFINES} --define USE_GPU=true --cxxopt=-DUSE_GPU" USE_GPU="1" apollo_build_dbg $@ ;; build_opt_gpu) DEFINES="${DEFINES} --define USE_GPU=true --cxxopt=-DUSE_GPU --copt=-fpic" USE_GPU="1" apollo_build_opt $@ ;; build_fe) build_fe ;; buildify) buildify ;; build_cybertron) build_cybertron ;; build_py) build_py_proto ;; build_velodyne) build_velodyne ;; build_velodyne_vls128) build_velodyne_vls128 ;; build_lslidar) build_lslidar ;; build_rslidar) build_rslidar ;; build_usbcam) build_usbcam ;; config) config ;; doc) gen_doc ;; lint) run_lint ;; test) DEFINES="${DEFINES} --cxxopt=-DUSE_GPU" USE_GPU="1" run_test $@ ;; test_cpu) DEFINES="${DEFINES} --cxxopt=-DCPU_ONLY" run_test $@ ;; 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 $@ ;; citest_perception) DEFINES="${DEFINES} --cxxopt=-DCPU_ONLY" citest_perception $@ ;; citest_basic) DEFINES="${DEFINES} --cxxopt=-DCPU_ONLY" citest_basic $@ ;; test_gpu) DEFINES="${DEFINES} --cxxopt=-DUSE_GPU" USE_GPU="1" run_test $@ ;; release) release 1 ;; release_noproprietary) release 0 ;; coverage) gen_coverage $@ ;; clean) clean ;; version) version ;; usage) print_usage ;; *) print_usage ;; esac } main $@