| #!/usr/bin/env bash |
| # |
| # Licensed to the Apache Software Foundation (ASF) under one |
| # or more contributor license agreements. See the NOTICE file |
| # distributed with this work for additional information |
| # regarding copyright ownership. The ASF licenses this file |
| # to you 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. |
| |
| # Incrementally compiles the frontend and backend. |
| |
| set -euo pipefail |
| trap 'echo Error in $0 at line $LINENO: $(cd "'$PWD'" && awk "NR == $LINENO" $0)' ERR |
| |
| : ${IMPALA_TOOLCHAIN=} |
| |
| BUILD_EVERYTHING=1 |
| BUILD_FE_ONLY=0 |
| BUILD_TESTS=1 |
| CLEAN=0 |
| TARGET_BUILD_TYPE=${TARGET_BUILD_TYPE:-""} |
| BUILD_SHARED_LIBS=${BUILD_SHARED_LIBS:-""} |
| CMAKE_ONLY=0 |
| MAKE_CMD=make |
| MAKE_ARGS="-j${IMPALA_BUILD_THREADS:-4} ${IMPALA_MAKE_FLAGS}" |
| |
| # The minimal make targets if BUILD_EVERYTHING is 0. |
| MAKE_TARGETS="impalad statestored catalogd fesupport loggingsupport ImpalaUdf \ |
| udasample udfsample" |
| # parse command line options |
| for ARG in $* |
| do |
| case "$ARG" in |
| -notests) |
| BUILD_TESTS=0 |
| BUILD_EVERYTHING=0 |
| ;; |
| -clean) |
| CLEAN=1 |
| ;; |
| -build_type=*) |
| TARGET_BUILD_TYPE="${ARG#*=}" |
| ;; |
| -build_shared_libs) |
| BUILD_SHARED_LIBS="ON" |
| ;; |
| -build_static_libs) |
| BUILD_SHARED_LIBS="OFF" |
| ;; |
| -ninja) |
| MAKE_CMD=ninja |
| ;; |
| -cmake_only) |
| CMAKE_ONLY=1 |
| ;; |
| -fe) |
| MAKE_TARGETS+=" fe" |
| ;; |
| -fe_only) |
| BUILD_FE_ONLY=1 |
| BUILD_EVERYTHING=0 |
| ;; |
| -cscope) |
| MAKE_TARGETS+=" cscope" |
| ;; |
| -impala-lzo) |
| MAKE_TARGETS+=" impala-lzo" |
| ;; |
| -tarballs) |
| MAKE_TARGETS+=" tarballs" |
| ;; |
| -help|*) |
| echo "make_impala.sh [-build_type=<build type> -notests -clean]" |
| echo "[-build_type] : Target build type. Examples: Debug, Release, Address_sanitizer." |
| echo " If omitted, the last build target is built incrementally" |
| echo "[-build_shared_libs] : Link all executables dynamically" |
| echo "[-build_static_libs] : Link all executables statically (the default)" |
| echo "[-cmake_only] : Generate makefiles and exit" |
| echo "[-fe] : Builds fe in addition to backend." |
| echo "[-fe_only] : Builds fe only." |
| echo "[-ninja] : Use the Ninja build tool instead of Make" |
| echo "[-notests] : Omits building the backend tests and benchmarks." |
| echo "[-clean] : Cleans previous build artifacts." |
| echo "[-cscope] : Builds cscope metadata." |
| echo "[-impala-lzo] : Builds Impala LZO." |
| echo "[-tarballs] : Builds additional tarballs like the shell tarball." |
| echo "" |
| echo "If either -build_type or -build_*_libs is set, cmake will be re-run for the " |
| echo "project. Otherwise the last cmake configuration will continue to take effect." |
| exit 1 |
| ;; |
| esac |
| done |
| |
| if [ $BUILD_TESTS -eq 1 ]; then |
| MAKE_TARGETS+=" be-test be-benchmarks" |
| fi |
| |
| echo "********************************************************************************" |
| echo " Building Impala " |
| if [ "x${TARGET_BUILD_TYPE}" != "x" ]; |
| then |
| echo " Build type: ${TARGET_BUILD_TYPE} " |
| if [ "x${BUILD_SHARED_LIBS}" == "x" ] |
| then |
| echo " Impala libraries will be STATICALLY linked" |
| fi |
| fi |
| if [ "x${BUILD_SHARED_LIBS}" == "xOFF" ] |
| then |
| echo " Impala libraries will be STATICALLY linked" |
| fi |
| if [ "x${BUILD_SHARED_LIBS}" == "xON" ] |
| then |
| echo " Impala libraries will be DYNAMICALLY linked" |
| fi |
| echo "********************************************************************************" |
| |
| cd ${IMPALA_HOME} |
| |
| if [ "x${TARGET_BUILD_TYPE}" != "x" ] || [ "x${BUILD_SHARED_LIBS}" != "x" ] || \ |
| [ "${MAKE_CMD}" != "make" ] |
| then |
| rm -f ./CMakeCache.txt |
| CMAKE_ARGS=() |
| if [ "x${TARGET_BUILD_TYPE}" != "x" ]; then |
| CMAKE_ARGS+=(-DCMAKE_BUILD_TYPE=${TARGET_BUILD_TYPE}) |
| fi |
| |
| if [ "x${BUILD_SHARED_LIBS}" != "x" ]; then |
| CMAKE_ARGS+=(-DBUILD_SHARED_LIBS=${BUILD_SHARED_LIBS}) |
| fi |
| |
| if [ "${MAKE_CMD}" = "ninja" ]; then |
| CMAKE_ARGS+=" -GNinja" |
| fi |
| |
| if [[ ! -z $IMPALA_TOOLCHAIN ]]; then |
| |
| if [[ ("$TARGET_BUILD_TYPE" == "ADDRESS_SANITIZER") \ |
| || ("$TARGET_BUILD_TYPE" == "TIDY") \ |
| || ("$TARGET_BUILD_TYPE" == "UBSAN") \ |
| || ("$TARGET_BUILD_TYPE" == "TSAN") ]] |
| then |
| CMAKE_ARGS+=(-DCMAKE_TOOLCHAIN_FILE=$IMPALA_HOME/cmake_modules/clang_toolchain.cmake) |
| else |
| CMAKE_ARGS+=(-DCMAKE_TOOLCHAIN_FILE=$IMPALA_HOME/cmake_modules/toolchain.cmake) |
| fi |
| fi |
| |
| cmake . ${CMAKE_ARGS[@]} |
| fi |
| |
| if [ $CLEAN -eq 1 ] |
| then |
| ${MAKE_CMD} ${IMPALA_MAKE_FLAGS} clean |
| fi |
| |
| $IMPALA_HOME/bin/gen_build_version.py |
| |
| if [ $CMAKE_ONLY -eq 1 ]; then |
| exit 0 |
| fi |
| |
| if [ $BUILD_FE_ONLY -eq 1 ]; then |
| ${MAKE_CMD} ${MAKE_ARGS} fe |
| elif [ $BUILD_EVERYTHING -eq 1 ]; then |
| ${MAKE_CMD} ${MAKE_ARGS} |
| else |
| ${MAKE_CMD} ${MAKE_ARGS} ${MAKE_TARGETS} |
| fi |