#!/bin/bash
set -x
WORKSPACE=$(realpath "$(dirname "$0")")
LLVM_DIR=/opt/buildtools/llvm-15.0.4/lib/cmake/llvm
GCC_INSTALL_PATH=/usr/local/
OMNISTREAM_SRC_PATH=$WORKSPACE
OMNISTREAM_PGO_PROFILE_PATH=$WORKSPACE/profile/flink_omnistream_profile
RDKAFKA_SRC_PATH=$WORKSPACE/3rdparty/rdkafka
RDKAFKA_PGO_PROFILE_PATH=$WORKSPACE/profile/flink_rdkafka_profile
GLOBAL_FLAGS="-O3 -flto=auto -DNDEBUG"
GLOBAL_FLAGS+=" -Wno-missing-profile -Wno-deprecated-declarations -Wno-range-loop-construct -Wno-odr"
function build_omnistream {
cd $WORKSPACE/profile
tar zxvf flink_omnistream_profile.tar.gz
cd flink_omnistream_profile
srcdir=$(echo "$OMNISTREAM_SRC_PATH" | sed 's/\//#/g')
rename "#repo#codehub#OmniStream" "$srcdir" *
rm -rf $OMNISTREAM_SRC_PATH/cpp/cmake_build_release
mkdir -p $OMNISTREAM_SRC_PATH/cpp/cmake_build_release
cd $OMNISTREAM_SRC_PATH/cpp/cmake_build_release
local flags="$GLOBAL_FLAGS -finline-force=libcore.a,libtable.a,libruntime.a,libdatagen.a,libbasictypes.a"
flags="$flags -fcfgo-profile-use=$OMNISTREAM_PGO_PROFILE_PATH -Wno-error=coverage-mismatch -Wno-error=missing-profile -fprofile-correction -fprofile-update=atomic"
cmake .. \
-DLLVM_DIR=$LLVM_DIR \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_C_COMPILER=$GCC_INSTALL_PATH/bin/gcc \
-DCMAKE_CXX_COMPILER=$GCC_INSTALL_PATH/bin/g++ \
-DCMAKE_CXX_FLAGS_RELEASE="$flags" \
-DCMAKE_C_FLAGS="$flags" \
-DCMAKE_CXX_FLAGS="$flags" \
-DCMAKE_SHARED_LINKER_FLAGS="$flags" \
-DCMAKE_AR=$GCC_INSTALL_PATH/bin/gcc-ar \
-DCMAKE_RANLIB=$GCC_INSTALL_PATH/bin/gcc-ranlib \
-DENABLE_TESTS=off || {
echo "CMake Failed"
exit 1
}
sed -i "s/-MD -MT table\/CMakeFiles\/table.dir\/typeutils\/InternalTypeInfo.cpp.o/-fno-lto &/" table/CMakeFiles/table.dir/build.make
sed -i "s/-MD -MT table\/CMakeFiles\/table.dir\/types\/logical\/LogicalType.cpp.o/-fno-lto &/" table/CMakeFiles/table.dir/build.make
make -j$num_cpus || {
echo "Make Failed"
exit 1
}
cmake .. -DCMAKE_BUILD_TYPE=release -DCMAKE_INSTALL_PREFIX=$(pwd)/libbasictypes && cmake --build . --parallel 16 --target basictypes && cmake --install .|| {
echo "CMake Failed"
exit 1
}
cmake .. -DCMAKE_BUILD_TYPE=release -DCMAKE_INSTALL_PREFIX=$(pwd)/libbasictypes && cmake --build . --parallel 16 --target functions && cmake --install .|| {
echo "CMake Failed"
exit 1
}
cmake .. -DCMAKE_BUILD_TYPE=release -DCMAKE_INSTALL_PREFIX=$(pwd)/libbasictypes && cmake --build . --parallel 16 --target thirdlibrary && cmake --install .|| {
echo "CMake Failed"
exit 1
}
}
function build_rdkafka {
cd $WORKSPACE/profile/
tar zxvf flink_rdkafka_profile.tar.gz
cd flink_rdkafka_profile
srcdir=$(echo "$RDKAFKA_SRC_PATH" | sed 's/\//#/g')
rename "#repo#codehub#OmniStream#3rdparty#rdkafka" "$srcdir" *
cd $RDKAFKA_SRC_PATH
git apply "${OMNISTREAM_SRC_PATH}/cpp/connector/kafka/omni_kafka_opt.patch"
./configure --cc=$GCC_INSTALL_PATH/bin/gcc --cxx=$GCC_INSTALL_PATH/bin/g++ --CFLAGS="-O3" --CXXFLAGS="-O3"
GCC_INSTALL_PATH_CHANGED=$(echo "$GCC_INSTALL_PATH" | sed 's/\//\\\//g')
sed -i "s/^RANLIB=.*/RANLIB=$GCC_INSTALL_PATH_CHANGED\/bin\/gcc-ranlib/" Makefile.config
echo "AR=$GCC_INSTALL_PATH/bin/gcc-ar" >> Makefile.config
local flags="$GLOBAL_FLAGS -Wall -Wsign-compare -Wfloat-equal -Wpointer-arith -Wcast-align -Wno-free-nonheap-object -fPIC"
local cflags="$flags -fcfgo-profile-use=$RDKAFKA_PGO_PROFILE_PATH -Wno-error=coverage-mismatch -Wno-error=missing-profile -fprofile-correction -fprofile-update=atomic"
flags_changed=$(echo "$flags" | sed 's/\//\\\//g')
cflags_changed=$(echo "$cflags" | sed 's/\//\\\//g')
sed -i "s/^CPPFLAGS+=.*/CPPFLAGS+= $flags_changed/" Makefile.config
sed -i "s/^CFLAGS+=.*/CFLAGS+= $cflags_changed/" Makefile.config
sed -i "71i\\LIB_LDFLAGS+= ${cflags_changed}" src/Makefile
make -j`nproc` LDFLAGS="$flags" RANLIB=$GCC_INSTALL_PATH/bin/gcc-ranlib AR=$GCC_INSTALL_PATH/bin/gcc-ar libs
sudo make install
sed -i '71d' src/Makefile
}
if [ "$1" == "omnistream" ];then
build_omnistream
elif [ "$1" == "rdkafka" ];then
build_rdkafka
else
exit 1
fi