blob: c5458987d2586e1f490ca0fecd9cf0cbcc0abe06 [file] [log] [blame]
#!/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.
set -ex
source $TRAVIS_BUILD_DIR/ci/travis_env_common.sh
only_library_mode=no
using_homebrew=no
while true; do
case "$1" in
--only-library)
only_library_mode=yes
shift ;;
--homebrew)
using_homebrew=yes
shift ;;
*) break ;;
esac
done
if [ "$only_library_mode" == "no" ]; then
source $TRAVIS_BUILD_DIR/ci/travis_install_conda.sh
fi
if [ "$ARROW_TRAVIS_USE_TOOLCHAIN" == "1" ]; then
# Set up C++ toolchain from conda-forge packages for faster builds
source $TRAVIS_BUILD_DIR/ci/travis_install_toolchain.sh
fi
mkdir -p $ARROW_CPP_BUILD_DIR
pushd $ARROW_CPP_BUILD_DIR
CMAKE_COMMON_FLAGS="\
-DCMAKE_INSTALL_PREFIX=$ARROW_CPP_INSTALL \
-DARROW_NO_DEPRECATED_API=ON \
-DARROW_INSTALL_NAME_RPATH=OFF \
-DARROW_EXTRA_ERROR_CONTEXT=ON"
CMAKE_LINUX_FLAGS=""
CMAKE_OSX_FLAGS="\
-DARROW_GFLAGS_USE_SHARED=OFF"
if [ "$ARROW_TRAVIS_USE_TOOLCHAIN" == "1" ]; then
CMAKE_COMMON_FLAGS="$CMAKE_COMMON_FLAGS -DARROW_JEMALLOC=ON"
CMAKE_COMMON_FLAGS="$CMAKE_COMMON_FLAGS -DARROW_WITH_BZ2=ON"
fi
if [ "$ARROW_TRAVIS_MIMALLOC" == "1" ]; then
CMAKE_COMMON_FLAGS="$CMAKE_COMMON_FLAGS -DARROW_MIMALLOC=ON"
fi
if [ $only_library_mode == "yes" ]; then
CMAKE_COMMON_FLAGS="\
$CMAKE_COMMON_FLAGS \
-DARROW_BUILD_UTILITIES=OFF"
else
CMAKE_COMMON_FLAGS="\
$CMAKE_COMMON_FLAGS \
-DARROW_BUILD_BENCHMARKS=ON \
-DARROW_BUILD_TESTS=ON \
-DARROW_BUILD_EXAMPLES=ON \
-DARROW_BUILD_UTILITIES=ON"
fi
ARROW_CXXFLAGS=""
# Use Ninja for faster builds when using toolchain
if [ "$ARROW_TRAVIS_USE_TOOLCHAIN" == "1" ]; then
CMAKE_COMMON_FLAGS="$CMAKE_COMMON_FLAGS -GNinja"
if [ "$DISTRO_CODENAME" != "trusty" ]; then
# Make sure the toolchain linker (from binutils package) is picked up by clang
ARROW_CXXFLAGS="$ARROW_CXXFLAGS -B$CPP_TOOLCHAIN/bin"
fi
export TRAVIS_MAKE=ninja
elif [ "$using_homebrew" = "yes" ]; then
CMAKE_COMMON_FLAGS="$CMAKE_COMMON_FLAGS -GNinja"
export TRAVIS_MAKE=ninja
else
export TRAVIS_MAKE=make
fi
if [ "$ARROW_TRAVIS_FLIGHT" == "1" ]; then
CMAKE_COMMON_FLAGS="$CMAKE_COMMON_FLAGS -DARROW_FLIGHT=ON"
fi
if [ "$ARROW_TRAVIS_INTEGRATION" == "1" ]; then
CMAKE_COMMON_FLAGS="$CMAKE_COMMON_FLAGS -DARROW_BUILD_INTEGRATION=ON"
fi
if [ "$ARROW_TRAVIS_PLASMA" == "1" ]; then
CMAKE_COMMON_FLAGS="$CMAKE_COMMON_FLAGS -DARROW_PLASMA=ON"
fi
if [ "$ARROW_TRAVIS_PLASMA_JAVA_CLIENT" == "1" ]; then
CMAKE_COMMON_FLAGS="$CMAKE_COMMON_FLAGS -DARROW_PLASMA_JAVA_CLIENT=ON"
fi
if [ "$ARROW_TRAVIS_ORC" == "1" ]; then
CMAKE_COMMON_FLAGS="$CMAKE_COMMON_FLAGS -DARROW_ORC=ON"
fi
if [ "$ARROW_TRAVIS_PYTHON" == "1" ]; then
CMAKE_COMMON_FLAGS="$CMAKE_COMMON_FLAGS -DARROW_PYTHON=ON"
if [ "$using_homebrew" == "yes" ]; then
CMAKE_COMMON_FLAGS="$CMAKE_COMMON_FLAGS \
-DPYTHON_EXECUTABLE=$(brew --prefix python)/bin/python3"
fi
fi
if [ "$ARROW_TRAVIS_S3" == "1" ]; then
CMAKE_COMMON_FLAGS="$CMAKE_COMMON_FLAGS -DARROW_S3=ON"
fi
if [ "$ARROW_TRAVIS_PARQUET" == "1" ]; then
CMAKE_COMMON_FLAGS="$CMAKE_COMMON_FLAGS \
-DARROW_PARQUET=ON \
-DPARQUET_BUILD_EXAMPLES=ON \
-DPARQUET_BUILD_EXECUTABLES=ON"
fi
if [ "$ARROW_TRAVIS_GANDIVA" == "1" ]; then
CMAKE_COMMON_FLAGS="$CMAKE_COMMON_FLAGS -DARROW_GANDIVA=ON"
if [ "$ARROW_TRAVIS_GANDIVA_JAVA" == "1" ]; then
CMAKE_COMMON_FLAGS="$CMAKE_COMMON_FLAGS -DARROW_GANDIVA_JAVA=ON"
fi
fi
if [ "$ARROW_TRAVIS_VALGRIND" == "1" ]; then
CMAKE_COMMON_FLAGS="$CMAKE_COMMON_FLAGS -DARROW_TEST_MEMCHECK=ON"
fi
if [ "$ARROW_USE_ASAN" == "1" ]; then
CMAKE_COMMON_FLAGS="$CMAKE_COMMON_FLAGS -DARROW_USE_ASAN=ON"
fi
if [ "$ARROW_USE_UBSAN" == "1" ]; then
CMAKE_COMMON_FLAGS="$CMAKE_COMMON_FLAGS -DARROW_USE_UBSAN=ON"
fi
if [ "$ARROW_TRAVIS_COVERAGE" == "1" ]; then
CMAKE_COMMON_FLAGS="$CMAKE_COMMON_FLAGS -DARROW_GENERATE_COVERAGE=ON"
fi
if [ "$ARROW_TRAVIS_VERBOSE" == "1" ]; then
CMAKE_COMMON_FLAGS="$CMAKE_COMMON_FLAGS -DARROW_VERBOSE_THIRDPARTY_BUILD=ON"
fi
if [ "$ARROW_TRAVIS_STATIC_BOOST" == "1" ]; then
CMAKE_COMMON_FLAGS="$CMAKE_COMMON_FLAGS -DARROW_BOOST_USE_SHARED=OFF"
fi
if [ "$ARROW_TRAVIS_OPTIONAL_INSTALL" == "1" ]; then
CMAKE_COMMON_FLAGS="$CMAKE_COMMON_FLAGS -DARROW_OPTIONAL_INSTALL=ON"
fi
if [ "$ARROW_TRAVIS_USE_TOOLCHAIN" == "1" ]; then
conda activate $CPP_TOOLCHAIN
fi
# conda-forge sets the build flags by default to -02, skip this to speed up the build
export CFLAGS=${CFLAGS//-O2}
export CXXFLAGS=${CXXFLAGS//-O2}
if [ $TRAVIS_OS_NAME == "osx" ]; then
source $TRAVIS_BUILD_DIR/ci/travis_install_osx_sdk.sh
fi
if [ $TRAVIS_OS_NAME == "linux" ]; then
cmake $CMAKE_COMMON_FLAGS \
$CMAKE_LINUX_FLAGS \
-DCMAKE_BUILD_TYPE=$ARROW_BUILD_TYPE \
-DBUILD_WARNING_LEVEL=$ARROW_BUILD_WARNING_LEVEL \
-DARROW_CXXFLAGS="$ARROW_CXXFLAGS" \
$ARROW_CPP_DIR
else
cmake $CMAKE_COMMON_FLAGS \
$CMAKE_OSX_FLAGS \
-DCMAKE_BUILD_TYPE=$ARROW_BUILD_TYPE \
-DBUILD_WARNING_LEVEL=$ARROW_BUILD_WARNING_LEVEL \
$ARROW_CPP_DIR
fi
# Build and install libraries. Configure ARROW_CPP_BUILD_TARGETS environment
# variable to only build certain targets. If you use this, you must also set
# the environment variable ARROW_TRAVIS_OPTIONAL_INSTALL=1
time $TRAVIS_MAKE -j4 $ARROW_CPP_BUILD_TARGETS
time $TRAVIS_MAKE install
popd