You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@rocketmq.apache.org by di...@apache.org on 2020/02/24 09:13:53 UTC
[rocketmq-client-cpp] branch master updated: feat(memory): add
asan/lsan support, and formatting code. (#257)
This is an automated email from the ASF dual-hosted git repository.
dinglei pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/rocketmq-client-cpp.git
The following commit(s) were added to refs/heads/master by this push:
new 41d7c35 feat(memory): add asan/lsan support, and formatting code. (#257)
41d7c35 is described below
commit 41d7c35edc88691ed4a52afff1847211454797f8
Author: yizhe.wcm <42...@users.noreply.github.com>
AuthorDate: Mon Feb 24 17:13:46 2020 +0800
feat(memory): add asan/lsan support, and formatting code. (#257)
* Modification item:
(1)Declare variables explicitly, and clarify variable types.
(2)Format the code style.
(3)Add asan support for memory address out of range checking.
(4)Add lsan support for memory leak checking.
* Simplify redirection semantics for easy understanding.
Co-authored-by: dinglei <li...@163.com>
---
CMakeLists.txt | 14 +++++++
build.sh | 104 ++++++++++++++++++++++++++++++-------------------
distribution/deploy.sh | 2 +-
format.sh | 2 +-
4 files changed, 81 insertions(+), 41 deletions(-)
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 3a56471..a2b178c 100755
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -173,6 +173,20 @@ ELSE ()
string(REPLACE ";" " " CMAKE_CXX_FLAGS "${CXX_FLAGS}")
string(REPLACE ";" " " CMAKE_C_FLAGS "${C_FLAGS}")
+ option(ENABLE_ASAN "Enable asan reporting" OFF)
+ if (ENABLE_ASAN)
+ set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=address -fno-omit-frame-pointer -static-libasan")
+ set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fsanitize=address -fno-omit-frame-pointer -static-libasan")
+ message(STATUS "** ENABLE_ASAN: ${ENABLE_ASAN} Enable asan reporting")
+ endif ()
+
+ option(ENABLE_LSAN "Enable lsan reporting" OFF)
+ if (ENABLE_LSAN)
+ set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=leak -fno-omit-frame-pointer -static-liblsan")
+ set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fsanitize=leak -fno-omit-frame-pointer -static-liblsan")
+ message(STATUS "** ENABLE_LSAN: ${ENABLE_LSAN} Enable lsan reporting")
+ endif ()
+
set(CMAKE_CXX_FLAGS_DEBUG "-O0 -DDEBUG")
set(CMAKE_CXX_FLAGS_RELEASE "-O3 -DNDEBUG")
diff --git a/build.sh b/build.sh
index 6979cd2..aa9b746 100755
--- a/build.sh
+++ b/build.sh
@@ -19,16 +19,16 @@ 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.7.zip"
-fname_boost_down="1.58.0/boost_1_58_0.tar.gz"
+declare down_dir="${basepath}/tmp_down_dir"
+declare build_dir="${basepath}/tmp_build_dir"
+declare packet_dir="${basepath}/tmp_packet_dir"
+declare install_lib_dir="${basepath}/bin"
+declare fname_libevent="libevent*.zip"
+declare fname_jsoncpp="jsoncpp*.zip"
+declare fname_boost="boost*.tar.gz"
+declare fname_libevent_down="release-2.1.11-stable.zip"
+declare fname_jsoncpp_down="0.10.7.zip"
+declare fname_boost_down="1.58.0/boost_1_58_0.tar.gz"
PrintParams() {
echo "=========================================one key build help============================================"
@@ -38,13 +38,15 @@ PrintParams() {
echo ""
}
-need_build_jsoncpp=1
-need_build_libevent=1
-need_build_boost=1
-test=0
-verbose=1
-codecov=0
-cpu_num=4
+declare need_build_jsoncpp=1
+declare need_build_libevent=1
+declare need_build_boost=1
+declare enable_asan=0
+declare enable_lsan=0
+declare verbose=1
+declare codecov=0
+declare cpu_num=4
+declare test=0
pasres_arguments() {
for var in "$@"; do
@@ -58,6 +60,12 @@ pasres_arguments() {
noBoost)
need_build_boost=0
;;
+ asan)
+ enable_asan=1
+ ;;
+ lsan)
+ enable_lsan=1
+ ;;
noVerbose)
verbose=0
;;
@@ -80,18 +88,26 @@ PrintParams() {
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 [ $enable_asan -eq 1 ]; then
+ echo "enable asan reporting"
+ else
+ echo "disable asan reporting"
+ fi
+ if [ $enable_lsan -eq 1 ]; then
+ echo "enable lsan reporting"
+ else
+ echo "disable lsan reporting"
+ fi
if [ $test -eq 1 ]; then
echo "build unit tests"
else
@@ -165,7 +181,7 @@ BuildLibevent() {
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
+ unzip -o ${fname_libevent} &> unziplibevent.txt
if [ $? -ne 0 ]; then
exit 1
fi
@@ -181,7 +197,7 @@ BuildLibevent() {
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
+ ./configure --disable-openssl --enable-static=yes --enable-shared=no CFLAGS=-fPIC CPPFLAGS=-fPIC --prefix=${install_lib_dir} &> libeventconfig.txt
else
./configure --disable-openssl --enable-static=yes --enable-shared=no CFLAGS=-fPIC CPPFLAGS=-fPIC --prefix=${install_lib_dir}
fi
@@ -190,7 +206,7 @@ BuildLibevent() {
fi
if [ $verbose -eq 0 ]; then
echo "build libevent without detail log."
- make -j $cpu_num >libeventbuild.txt 2>&1
+ make -j $cpu_num &> libeventbuild.txt
else
make -j $cpu_num
fi
@@ -214,7 +230,7 @@ BuildJsonCPP() {
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
+ unzip -o ${fname_jsoncpp} &> unzipjsoncpp.txt
if [ $? -ne 0 ]; then
exit 1
fi
@@ -228,7 +244,7 @@ BuildJsonCPP() {
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
+ cmake .. -DCMAKE_CXX_FLAGS=-fPIC -DBUILD_STATIC_LIBS=ON -DBUILD_SHARED_LIBS=OFF -DCMAKE_INSTALL_PREFIX=${install_lib_dir} &> jsoncppbuild.txt
else
cmake .. -DCMAKE_CXX_FLAGS=-fPIC -DBUILD_STATIC_LIBS=ON -DBUILD_SHARED_LIBS=OFF -DCMAKE_INSTALL_PREFIX=${install_lib_dir}
fi
@@ -236,7 +252,7 @@ BuildJsonCPP() {
exit 1
fi
if [ $verbose -eq 0 ]; then
- make -j $cpu_num >jsoncppbuild.txt 2>&1
+ make -j $cpu_num &> jsoncppbuild.txt
else
make -j $cpu_num
fi
@@ -263,7 +279,7 @@ BuildBoost() {
else
wget http://sourceforge.net/projects/boost/files/boost/${fname_boost_down}
fi
- tar -zxvf ${fname_boost} >unzipboost.txt 2>&1
+ tar -zxvf ${fname_boost} &> unzipboost.txt
boost_dir=$(ls | grep ^boost | grep .*[^gz]$)
cd ${boost_dir}
if [ $? -ne 0 ]; then
@@ -277,7 +293,7 @@ BuildBoost() {
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
+ ./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
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
@@ -289,18 +305,30 @@ BuildBoost() {
BuildRocketMQClient() {
cd ${build_dir}
echo "============start to build rocketmq client cpp.========="
- if [ $test -eq 0 ]; then
- cmake ..
- else
+ local ROCKETMQ_CMAKE_FLAG=""
+ if [ $test -eq 1 ]; then
if [ $codecov -eq 1 ]; then
- cmake .. -DRUN_UNIT_TEST=ON -DCODE_COVERAGE=ON
+ ROCKETMQ_CMAKE_FLAG=$ROCKETMQ_CMAKE_FLAG" -DRUN_UNIT_TEST=ON -DCODE_COVERAGE=ON"
else
- cmake .. -DRUN_UNIT_TEST=ON
+ ROCKETMQ_CMAKE_FLAG=$ROCKETMQ_CMAKE_FLAG" -DRUN_UNIT_TEST=ON -DCODE_COVERAGE=OFF"
fi
+ else
+ ROCKETMQ_CMAKE_FLAG=$ROCKETMQ_CMAKE_FLAG" -DRUN_UNIT_TEST=OFF -DCODE_COVERAGE=OFF"
fi
+ if [ $enable_asan -eq 1 ]; then
+ ROCKETMQ_CMAKE_FLAG=$ROCKETMQ_CMAKE_FLAG" -DENABLE_ASAN=ON"
+ else
+ ROCKETMQ_CMAKE_FLAG=$ROCKETMQ_CMAKE_FLAG" -DENABLE_ASAN=OFF"
+ fi
+ if [ $enable_lsan -eq 1 ]; then
+ ROCKETMQ_CMAKE_FLAG=$ROCKETMQ_CMAKE_FLAG" -DENABLE_LSAN=ON"
+ else
+ ROCKETMQ_CMAKE_FLAG=$ROCKETMQ_CMAKE_FLAG" -DENABLE_LSAN=OFF"
+ fi
+ cmake .. $ROCKETMQ_CMAKE_FLAG
if [ $verbose -eq 0 ]; then
echo "build rocketmq without detail log."
- make -j $cpu_num >buildclient.txt 2>&1
+ make -j $cpu_num &> buildclient.txt
else
make -j $cpu_num
fi
@@ -317,12 +345,10 @@ BuildGoogleTest() {
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"
@@ -330,15 +356,15 @@ BuildGoogleTest() {
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
+ tar -zxvf release-1.8.1.tar.gz &> googletest.txt
fi
cd googletest-release-1.8.1
- mkdir build
+ mkdir -p 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
+ cmake .. -DCMAKE_CXX_FLAGS=-fPIC -DBUILD_STATIC_LIBS=ON -DBUILD_SHARED_LIBS=OFF -DCMAKE_INSTALL_PREFIX=${install_lib_dir} &> googletestbuild.txt
else
cmake .. -DCMAKE_CXX_FLAGS=-fPIC -DBUILD_STATIC_LIBS=ON -DBUILD_SHARED_LIBS=OFF -DCMAKE_INSTALL_PREFIX=${install_lib_dir}
fi
@@ -346,7 +372,7 @@ BuildGoogleTest() {
exit 1
fi
if [ $verbose -eq 0 ]; then
- make -j $cpu_num >gtestbuild.txt 2>&1
+ make -j $cpu_num &> gtestbuild.txt
else
make -j $cpu_num
fi
diff --git a/distribution/deploy.sh b/distribution/deploy.sh
index c213d9a..d257c6d 100755
--- a/distribution/deploy.sh
+++ b/distribution/deploy.sh
@@ -40,7 +40,7 @@ cp -rf ${CWD_DIR}/../README.md ${DEPLOY_BUILD_HOME}/
cp -rf ${CWD_DIR}/../LICENSE ${DEPLOY_BUILD_HOME}/LICENSE
cp -rf ${CWD_DIR}/../NOTICE ${DEPLOY_BUILD_HOME}/NOTICE
-cd ${CWD_DIR} && tar -cvzf ./${PKG_NAME}-${VERSION}-bin-release.tar.gz ./${PKG_NAME} >/dev/null 2>&1
+cd ${CWD_DIR} && tar -cvzf ./${PKG_NAME}-${VERSION}-bin-release.tar.gz ./${PKG_NAME} &> /dev/null
rm -rf ${DEPLOY_BUILD_HOME}
# # ##====================================================================
#make clean
diff --git a/format.sh b/format.sh
index f46c5f2..7aa812e 100755
--- a/format.sh
+++ b/format.sh
@@ -26,7 +26,7 @@ function Usage
}
#Setp1 check clang-format support
-if ! which clang-format &>/dev/null; then
+if ! which clang-format &> /dev/null; then
echo -e "\033[32m !!!!!!please install clang-format \033[0m"
exit 1
fi