blob: 3f552a852917f1e2dec9254be25e125fb816f51b [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.
basepath=$(
cd $(dirname $0)
pwd
)
down_dir="${basepath}/tmp_down_dir"
build_dir="${basepath}/tmp_build_dir"
packet_dir="${basepath}/tmp_packet_dir"
install_lib_dir="${basepath}/bin"
fname_libevent="libevent*.zip"
fname_jsoncpp="jsoncpp*.zip"
fname_boost="boost*.tar.gz"
fname_libevent_down="release-2.1.11-stable.zip"
fname_jsoncpp_down="0.10.6.zip"
fname_boost_down="1.58.0/boost_1_58_0.tar.gz"
PrintParams() {
echo "=========================================one key build help============================================"
echo "sh build.sh [no build libevent:noEvent] [no build json:noJson] [no build boost:noBoost] [ execution test:test]"
echo "usage: sh build.sh noJson noEvent noBoost test"
echo "=========================================one key build help============================================"
echo ""
}
need_build_jsoncpp=1
need_build_libevent=1
need_build_boost=1
test=0
verbose=1
codecov=0
cpu_num=4
pasres_arguments() {
for var in "$@"; do
case "$var" in
noJson)
need_build_jsoncpp=0
;;
noEvent)
need_build_libevent=0
;;
noBoost)
need_build_boost=0
;;
noVerbose)
verbose=0
;;
codecov)
codecov=1
;;
test)
test=1
;;
esac
done
}
pasres_arguments $@
PrintParams() {
echo "###########################################################################"
if [ $need_build_libevent -eq 0 ]; then
echo "no need build libevent lib"
else
echo "need build libevent lib"
fi
if [ $need_build_jsoncpp -eq 0 ]; then
echo "no need build jsoncpp lib"
else
echo "need build jsoncpp lib"
fi
if [ $need_build_boost -eq 0 ]; then
echo "no need build boost lib"
else
echo "need build boost lib"
fi
if [ $test -eq 1 ]; then
echo "build unit tests"
else
echo "without build unit tests"
fi
if [ $codecov -eq 1 ]; then
echo "run unit tests with code coverage"
fi
if [ $verbose -eq 0 ]; then
echo "no need print detail logs"
else
echo "need print detail logs"
fi
echo "###########################################################################"
echo ""
}
Prepare() {
if [ -e ${down_dir} ]; then
echo "${down_dir} is exist"
#cd ${down_dir}
#ls |grep -v ${fname_libevent} |grep -v ${fname_jsoncpp} | grep -v ${fname_boost} |xargs rm -rf
else
mkdir -p ${down_dir}
fi
cd ${basepath}
if [ -e ${fname_libevent} ]; then
mv -f ${basepath}/${fname_libevent} ${down_dir}
fi
if [ -e ${fname_jsoncpp} ]; then
mv -f ${basepath}/${fname_jsoncpp} ${down_dir}
fi
if [ -e ${fname_boost} ]; then
mv -f ${basepath}/${fname_boost} ${down_dir}
fi
if [ -e ${build_dir} ]; then
echo "${build_dir} is exist"
#rm -rf ${build_dir}/*
else
mkdir -p ${build_dir}
fi
if [ -e ${packet_dir} ]; then
echo "${packet_dir} is exist"
#rm -rf ${packet_dir}/*
else
mkdir -p ${packet_dir}
fi
if [ -e ${install_lib_dir} ]; then
echo "${install_lib_dir} is exist"
else
mkdir -p ${install_lib_dir}
fi
}
BuildLibevent() {
if [ $need_build_libevent -eq 0 ]; then
echo "no need build libevent lib"
return 0
fi
cd ${down_dir}
if [ -e ${fname_libevent} ]; then
echo "${fname_libevent} is exist"
else
wget https://github.com/libevent/libevent/archive/${fname_libevent_down} -O libevent-${fname_libevent_down}
fi
unzip -o ${fname_libevent} >unziplibevent.txt 2>&1
if [ $? -ne 0 ]; then
exit 1
fi
libevent_dir=$(ls | grep libevent | grep .*[^zip^txt]$)
cd ${libevent_dir}
if [ $? -ne 0 ]; then
exit 1
fi
./autogen.sh
if [ $? -ne 0 ]; then
exit 1
fi
echo "build libevent static #####################"
if [ $verbose -eq 0 ]; then
./configure --disable-openssl --enable-static=yes --enable-shared=no CFLAGS=-fPIC CPPFLAGS=-fPIC --prefix=${install_lib_dir} >libeventconfig.txt 2>&1
else
./configure --disable-openssl --enable-static=yes --enable-shared=no CFLAGS=-fPIC CPPFLAGS=-fPIC --prefix=${install_lib_dir}
fi
if [ $? -ne 0 ]; then
exit 1
fi
if [ $verbose -eq 0 ]; then
echo "build libevent without detail log."
make -j $cpu_num >libeventbuild.txt 2>&1
else
make -j $cpu_num
fi
if [ $? -ne 0 ]; then
exit 1
fi
make install
echo "build linevent success."
}
BuildJsonCPP() {
if [ $need_build_jsoncpp -eq 0 ]; then
echo "no need build jsoncpp lib"
return 0
fi
cd ${down_dir}
if [ -e ${fname_jsoncpp} ]; then
echo "${fname_jsoncpp} is exist"
else
wget https://github.com/open-source-parsers/jsoncpp/archive/${fname_jsoncpp_down} -O jsoncpp-${fname_jsoncpp_down}
fi
unzip -o ${fname_jsoncpp} >unzipjsoncpp.txt 2>&1
if [ $? -ne 0 ]; then
exit 1
fi
jsoncpp_dir=$(ls | grep ^jsoncpp | grep .*[^zip]$)
cd ${jsoncpp_dir}
if [ $? -ne 0 ]; then
exit 1
fi
mkdir build
cd build
echo "build jsoncpp static ######################"
if [ $verbose -eq 0 ]; then
echo "build jsoncpp without detail log."
cmake .. -DCMAKE_CXX_FLAGS=-fPIC -DBUILD_STATIC_LIBS=ON -DBUILD_SHARED_LIBS=OFF -DCMAKE_INSTALL_PREFIX=${install_lib_dir} >jsoncppbuild.txt 2>&1
else
cmake .. -DCMAKE_CXX_FLAGS=-fPIC -DBUILD_STATIC_LIBS=ON -DBUILD_SHARED_LIBS=OFF -DCMAKE_INSTALL_PREFIX=${install_lib_dir}
fi
if [ $? -ne 0 ]; then
exit 1
fi
if [ $verbose -eq 0 ]; then
make -j $cpu_num >jsoncppbuild.txt 2>&1
else
make -j $cpu_num
fi
if [ $? -ne 0 ]; then
exit 1
fi
make install
echo "build jsoncpp success."
if [ ! -f ${install_lib_dir}/lib/libjsoncpp.a ]; then
echo " ./bin/lib directory is not libjsoncpp.a"
cp ${install_lib_dir}/lib/x86_64-linux-gnu/libjsoncpp.a ${install_lib_dir}/lib/
fi
}
BuildBoost() {
if [ $need_build_boost -eq 0 ]; then
echo "no need build boost lib"
return 0
fi
cd ${down_dir}
if [ -e ${fname_boost} ]; then
echo "${fname_boost} is exist"
else
wget http://sourceforge.net/projects/boost/files/boost/${fname_boost_down}
fi
tar -zxvf ${fname_boost} >unzipboost.txt 2>&1
boost_dir=$(ls | grep boost | grep .*[^gz]$)
cd ${boost_dir}
if [ $? -ne 0 ]; then
exit 1
fi
./bootstrap.sh
if [ $? -ne 0 ]; then
exit 1
fi
echo "build boost static #####################"
pwd
if [ $verbose -eq 0 ]; then
echo "build boost without detail log."
./b2 -j$cpu_num cflags=-fPIC cxxflags=-fPIC --with-atomic --with-thread --with-system --with-chrono --with-date_time --with-log --with-regex --with-serialization --with-filesystem --with-locale --with-iostreams threading=multi link=static release install --prefix=${install_lib_dir} >boostbuild.txt 2>&1
else
./b2 -j$cpu_num cflags=-fPIC cxxflags=-fPIC --with-atomic --with-thread --with-system --with-chrono --with-date_time --with-log --with-regex --with-serialization --with-filesystem --with-locale --with-iostreams threading=multi link=static release install --prefix=${install_lib_dir}
fi
if [ $? -ne 0 ]; then
exit 1
fi
}
BuildRocketMQClient() {
cd ${build_dir}
echo "============start to build rocketmq client cpp.========="
if [ $test -eq 0 ]; then
cmake ..
else
if [ $codecov -eq 1 ]; then
cmake .. -DRUN_UNIT_TEST=ON -DCODE_COVERAGE=ON
else
cmake .. -DRUN_UNIT_TEST=ON
fi
fi
if [ $verbose -eq 0 ]; then
echo "build rocketmq without detail log."
make -j $cpu_num >buildclient.txt 2>&1
else
make -j $cpu_num
fi
if [ $? -ne 0 ]; then
echo "build error....."
exit 1
fi
#sudo make install
PackageRocketMQStatic
}
BuildGoogleTest() {
if [ $test -eq 0 ]; then
echo "no need build google test lib"
return 0
fi
if [ -f ./bin/lib/libgtest.a ]; then
echo "libgteest already exist no need build test"
return 0
fi
cd ${down_dir}
if [ -e release-1.8.1.tar.gz ]; then
echo "${fname_boost} is exist"
else
wget https://github.com/abseil/googletest/archive/release-1.8.1.tar.gz
fi
if [ ! -d "googletest-release-1.8.1" ]; then
tar -zxvf release-1.8.1.tar.gz >googletest.txt 2>&1
fi
cd googletest-release-1.8.1
mkdir build
cd build
echo "build googletest static #####################"
if [ $verbose -eq 0 ]; then
echo "build googletest without detail log."
cmake .. -DCMAKE_CXX_FLAGS=-fPIC -DBUILD_STATIC_LIBS=ON -DBUILD_SHARED_LIBS=OFF -DCMAKE_INSTALL_PREFIX=${install_lib_dir} >googletestbuild.txt 2>&1
else
cmake .. -DCMAKE_CXX_FLAGS=-fPIC -DBUILD_STATIC_LIBS=ON -DBUILD_SHARED_LIBS=OFF -DCMAKE_INSTALL_PREFIX=${install_lib_dir}
fi
if [ $? -ne 0 ]; then
exit 1
fi
if [ $verbose -eq 0 ]; then
make -j $cpu_num >gtestbuild.txt 2>&1
else
make -j $cpu_num
fi
if [ $? -ne 0 ]; then
exit 1
fi
make install
if [ ! -f ${install_lib_dir}/lib/libgtest.a ]; then
echo " ./bin/lib directory is not libgtest.a"
cp ${install_lib_dir}/lib64/lib* ${install_lib_dir}/lib
fi
}
ExecutionTesting() {
if [ $test -eq 0 ]; then
echo "Build success without executing unit tests."
return 0
fi
echo "############# unit test start ###########"
cd ${build_dir}
if [ $verbose -eq 0 ]; then
ctest
else
ctest -V
fi
if [ $? -ne 0 ]; then
echo "############# unit test failed ###########"
exit 1
fi
echo "############# unit test finish ###########"
}
PackageRocketMQStatic() {
if test "$(uname)" = "Linux"; then
echo "package static library."
#packet libevent,jsoncpp,boost,rocketmq,Signature to one librocketmq.a
cp -f ${basepath}/libs/signature/lib/libSignature.a ${install_lib_dir}/lib
ar -M <${basepath}/package_rocketmq.mri
cp -f librocketmq.a ${install_lib_dir}
fi
}
PrintParams
Prepare
BuildLibevent
BuildJsonCPP
BuildBoost
BuildGoogleTest
BuildRocketMQClient
ExecutionTesting