Support prebuilt binaries

...to make Travis CI builds reasonable.

Progress towards #16
This commit is contained in:
Colin Dellow 2018-07-04 23:17:57 -04:00
parent 806d87c8e7
commit 100edb7015
2 changed files with 93 additions and 33 deletions

View File

@ -24,7 +24,7 @@ Subsequent builds will only build the parquet virtual table extension.
Run `./make-linx-pgo` to build an instrumented binary, run tests to collect real-life usage samples, then build an optimized binary. PGO seems to give a 5-10% reduction in query times. Run `./make-linx-pgo` to build an instrumented binary, run tests to collect real-life usage samples, then build an optimized binary. PGO seems to give a 5-10% reduction in query times.
#### Tests ### Tests
Run: Run:

View File

@ -1,41 +1,101 @@
#!/bin/bash #!/bin/bash
set -euo pipefail set -euo pipefail
mkdir -p build/linux here=$(dirname "${BASH_SOURCE[0]}")
cp -f build/Makefile.linux build/linux/Makefile here=$(readlink -f "$here")
prebuilt="$here"/build/linux/prebuilt
ubuntu="$(lsb_release -s -r)"
libs=(libarrow.a libboost_filesystem.a libboost_regex.a libboost_system.a libbrotlicommon.a libbrotlidec.a \
libbrotlienc.a libicudata.a libicui18n.a libicuuc.a liblz4.a libparquet.a libsnappy.a libthrift.a libzstd.a)
lib_locs=()
cd build/linux setup_directories() {
cd "$here"
mkdir -p build/linux
mkdir -p "$prebuilt"
cp -f build/Makefile.linux build/linux/Makefile
cd build/linux
}
# Install prereqs based on https://github.com/apache/parquet-cpp#linux install_prerequisites() {
sudo apt-get install libboost-dev g++ libboost-filesystem-dev \ # Install prereqs based on https://github.com/apache/parquet-cpp#linux
libboost-program-options-dev libboost-regex-dev \ sudo apt-get install libboost-dev g++ libboost-filesystem-dev \
libboost-system-dev libboost-test-dev \ libboost-program-options-dev libboost-regex-dev \
libssl-dev libtool bison flex pkg-config libboost-system-dev libboost-test-dev \
libssl-dev libtool bison flex pkg-config
# Install prereqs based on https://github.com/apache/arrow/tree/master/cpp # Install prereqs based on https://github.com/apache/arrow/tree/master/cpp
sudo apt-get install cmake \ sudo apt-get install cmake \
libboost-dev \ libboost-dev \
libboost-filesystem-dev \ libboost-filesystem-dev \
libboost-system-dev libboost-system-dev
}
if [ ! -e ../../sqlite/sqlite3 ]; then build_sqlite() {
make sqlite if [ ! -e ../../sqlite/sqlite3 ]; then
fi make sqlite
fi
}
case "$(lsb_release -s -r)" in set_icu_version() {
14.04) case "$ubuntu" in
export ICU_VERSION=52.1 14.04)
;; export ICU_VERSION=52.1
16.04) ;;
export ICU_VERSION=55.1 16.04)
;; export ICU_VERSION=55.1
18.04) ;;
export ICU_VERSION=60.2 18.04)
;; export ICU_VERSION=60.2
*) ;;
echo "unsure what libicu version to use" >&2 *)
exit 1 echo "unsure what libicu version to use" >&2
esac exit 1
esac
export ICU_VERSION_U=${ICU_VERSION//./_} export ICU_VERSION_U=${ICU_VERSION//./_}
make "$@" }
add_prebuilt_lib() {
lib_locs+=("$1=$prebuilt/$2.a")
}
fetch_prebuilt_libs() {
for lib in "${libs[@]}"; do
if [ ! -e "$prebuilt/$lib" ]; then
echo "Fetching prebuilt $lib for Ubuntu $ubuntu"
curl "https://s3.amazonaws.com/cldellow/public/libparquet/$ubuntu/$lib" > tmp.a
mv tmp.a "$prebuilt"/$lib
fi
done
add_prebuilt_lib "PARQUET_CPP_LIB" libparquet
add_prebuilt_lib "LZ4_LIB" liblz4
add_prebuilt_lib "ZSTD_LIB" libzstd
add_prebuilt_lib "THRIFT_LIB" libthrift
add_prebuilt_lib "SNAPPY_LIB" libsnappy
add_prebuilt_lib "ARROW_LIB" libarrow
add_prebuilt_lib "ICU_I18N_LIB" libicui18n
add_prebuilt_lib "ICU_UC_LIB" libicuuc
add_prebuilt_lib "ICU_DATA_LIB" libicudata
add_prebuilt_lib "BROTLI_ENC_LIB" libbrotlienc
add_prebuilt_lib "BROTLI_COMMON_LIB" libbrotlicommon
add_prebuilt_lib "BROTLI_DEC_LIB" libbrotlidec
add_prebuilt_lib "BOOST_REGEX_LIB" libboost_regex
add_prebuilt_lib "BOOST_SYSTEM_LIB" libboost_system
add_prebuilt_lib "BOOST_FILESYSTEM_LIB" libboost_filesystem
}
main() {
setup_directories
install_prerequisites
build_sqlite
set_icu_version
if [ -v PREBUILT ]; then
fetch_prebuilt_libs
fi
make ${lib_locs[@]-} "$@"
}
main "$@"