#!/bin/bash
set -e
BUILD_BOOST=true
BUILD_XGBOOST=true
BUILD_LIGHTGBM=true
BUILD_ALGOMARKER=true

OVERRIDE_ALL=${1-0}

#export CC=/nas1/Work/Applications/GCC/gcc-13.1.0/installation/bin/gcc
#export CXX=/nas1/Work/Applications/GCC/gcc-13.1.0/installation/bin/c++
#export PATH=/nas1/Work/Applications/GCC/gcc-13.1.0/installation/bin:$PATH

BOOST_FPIC_DIR=/nas1/Work/Libs/Boost/boost_1_67_0-fPIC.ubuntu
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )"
BLDDIR="${DIR}/Build.ubuntu"
STATIC_LIBS_TARGET="${BLDDIR}/lib"

mkdir -p ${BLDDIR}
mkdir -p ${STATIC_LIBS_TARGET}

if [[ "`which sudo 2>>/dev/null`" ]]; 
then 
export SUDO="`which sudo`"
else
export SUDO=''
fi

echo "SUDO=${SUDO}"
echo "BOOST_FPIC_DIR=${BOOST_FPIC_DIR}"
echo "DIR=${DIR}"
echo "BLDDIR=${BLDDIR}"
echo "STATIC_LIBS_TARGET=${STATIC_LIBS_TARGET}"

mkdir -p "${STATIC_LIBS_TARGET}"
mkdir -p ${BOOST_FPIC_DIR}/installation
source /nas1/Work/python-env/python310/bin/activate

if [ "$BUILD_BOOST" = true ] ; then
pushd ${BOOST_FPIC_DIR}
if [ ! -f ${STATIC_LIBS_TARGET}/libboost_system.a ] || [ $OVERRIDE_ALL -gt 0 ]; then
	./b2 --clean
	./bootstrap.sh --without-icu --with-libraries=filesystem,system,regex,program_options --prefix=${BOOST_FPIC_DIR}/installation
	./b2 link=static variant=release linkflags=-static-libstdc++ -j20 cxxflags="-fPIC" toolset=gcc --stagedir="${BLDDIR}"
else
	echo "BOOST Already exists"
fi
popd
fi

if [ "$BUILD_XGBOOST" = true ] ; then
pushd $MR_ROOT/Libs/External/xgboost

if [ $OVERRIDE_ALL -gt 0 ]; then
	cp $MR_ROOT/Libs/External/xgboost/CMakeLists.txt.orig $MR_ROOT/Libs/External/xgboost/CMakeLists.txt
	make clean
	cmake .
	#The clean doesn't delete .a files
	find . -name '*.a' -exec rm {} \;
	make -j20
fi

if [ ! -f ${STATIC_LIBS_TARGET}/libxgboost.a ]; then
	cp /server/Work/SharedLibs/linux/ubuntu/static_libs/Release_new/libxgboost_static.a ${STATIC_LIBS_TARGET}/libxgboost.a
fi
if [ ! -f ${STATIC_LIBS_TARGET}/libdmlc.a ]; then
	cp /server/Work/SharedLibs/linux/ubuntu/static_libs/Release_new/libdmlc.a ${STATIC_LIBS_TARGET}
fi
popd
fi

if [ "$BUILD_LIGHTGBM" = true ] ; then
mkdir -p ${BLDDIR}/LightGBM/
cp ${DIR}/Resources/LightGBM.ubuntu/LightGBM_CMakeLists_file ${BLDDIR}/LightGBM/CMakeLists.txt
pushd ${BLDDIR}/LightGBM/
cmake .
make -j20
popd 
fi

#To remove warnings in boost library
 export CPATH=/nas1/Work/Libs/Boost/boost_1_67_0-fPIC.ubuntu
 export CPLUS_INCLUDE_PATH=/nas1/Work/Libs/Boost/boost_1_67_0-fPIC.ubuntu
 export C_INCLUDE_PATH=/nas1/Work/Libs/Boost/boost_1_67_0-fPIC.ubuntu
 export LIBRARY_PATH=${STATIC_LIBS_TARGET}


if [ "$BUILD_ALGOMARKER" = true ] ; then
cp ${DIR}/Resources/AlgoMarker.ubuntu/AlgoMarker_TopLeveL_CMakeLists ${DIR}/../CMakeLists.txt
cp ${DIR}/Resources/AlgoMarker.ubuntu/AlgoMarker_CMakeLists ${DIR}/../AlgoMarker/CMakeLists.txt
mkdir -p ${BLDDIR}/AlgoMarker/CMakeBuild/Linux/Release
pushd ${BLDDIR}/AlgoMarker/CMakeBuild/Linux/Release
cmake -D SO_COMPILATION=TRUE ${DIR}/..

version_txt=`get_git_status_text.py | sed 's|"||g' | awk -F"\t" '{print "\"" $1 "\""}'`
echo -e "Git version info:\n${version_txt}"
touch ${MR_ROOT}/Libs/Internal/MedUtils/MedUtils/MedGitVersion.h

make -j20 -e GIT_HEAD_VERSION="$version_txt"
cp ${BLDDIR}/AlgoMarker/CMakeBuild/Linux/Release/AlgoMarker/libdyn_AlgoMarker.so ${DIR}/../Linux/Release/
strip ${DIR}/../Linux/Release/libdyn_AlgoMarker.so
nm -CD ${DIR}/../Linux/Release/libdyn_AlgoMarker.so | grep " T " > ${BLDDIR}/AlgoMarker/AlgoMarker.public_symbols
ldd ${DIR}/../Linux/Release/libdyn_AlgoMarker.so > ${BLDDIR}/AlgoMarker/AlgoMarker.ldd
FINAL_PT=$(realpath ${DIR}/../Linux/Release/libdyn_AlgoMarker.so)
echo "AlgoMarker Shared Object file written to ${FINAL_PT}"
popd
fi

echo "Compiled with new lib - Ubuntu"
#echo "export LD_LIBRARY_PATH=/server/Work/Libs/Boost/boost_1_67_0-fPIC.ubuntu/installation/lib:\$LD_LIBRARY_PATH"

exit 0


