339 lines
8.8 KiB
Bash
Executable File
339 lines
8.8 KiB
Bash
Executable File
#!/bin/bash
|
||
|
||
# Script for Dev's daily work. It is a good idea to use the exact same
|
||
# build options as the released version.
|
||
|
||
function version_ge()
|
||
{
|
||
if test "$(echo "$@" | tr " " "\n" | sort -rV | head -n 1)" == "$1"
|
||
then
|
||
return 0
|
||
else
|
||
return 1
|
||
fi
|
||
}
|
||
|
||
get_mach_type()
|
||
{
|
||
# ARM64: aarch64
|
||
# SW64 : sw_64
|
||
# X86 : x86_64
|
||
mach_type=`uname -m`;
|
||
}
|
||
|
||
get_os_type()
|
||
{
|
||
# Windows: MINGW32_NT
|
||
# Mac OSX: Darwin
|
||
# Linux : Linux
|
||
os_type=`uname`;
|
||
if [ "$(expr substr $(uname -s) 1 10)" == "MINGW32_NT" ]; then
|
||
# Windows NT
|
||
os_type="WIN"
|
||
fi
|
||
}
|
||
|
||
get_linux_version()
|
||
{
|
||
if uname -r | grep -q -o "el6\|alios6"
|
||
then
|
||
linux_version="alios6"
|
||
elif uname -r | grep -q -o "el7\|alios7"
|
||
then
|
||
linux_version="alios7"
|
||
else
|
||
linux_version="not_alios"
|
||
fi
|
||
}
|
||
|
||
get_key_value()
|
||
{
|
||
echo "$1" | sed 's/^--[a-zA-Z_-]*=//'
|
||
}
|
||
|
||
usage()
|
||
{
|
||
cat <<EOF
|
||
Usage: $0 [-t debug|release] [-d <dest_dir>] [-s <server_suffix>] [-g asan|tsan] [-i] [-r]
|
||
Or
|
||
$0 [-h | --help]
|
||
-t Select the build type.
|
||
-d Set the destination directory.
|
||
-l Enable lizard debug mode.
|
||
-s Set the server suffix.
|
||
-g Enable the sanitizer of compiler, asan for AddressSanitizer, tsan for ThreadSanitizer
|
||
-c Enable GCC coverage compiler option
|
||
-i initialize mysql server
|
||
-r rebuild without make chean
|
||
-h, --help Show this help message.
|
||
|
||
Note: this script is intended for internal use by MySQL developers.
|
||
EOF
|
||
}
|
||
|
||
parse_options()
|
||
{
|
||
while test $# -gt 0
|
||
do
|
||
case "$1" in
|
||
-t=*)
|
||
build_type=`get_key_value "$1"`;;
|
||
-t)
|
||
shift
|
||
build_type=`get_key_value "$1"`;;
|
||
-d=*)
|
||
dest_dir=`get_key_value "$1"`;;
|
||
-d)
|
||
shift
|
||
dest_dir=`get_key_value "$1"`;;
|
||
-s=*)
|
||
server_suffix=`get_key_value "$1"`;;
|
||
-s)
|
||
shift
|
||
server_suffix=`get_key_value "$1"`;;
|
||
-g=*)
|
||
san_type=`get_key_value "$1"`;;
|
||
-g)
|
||
shift
|
||
san_type=`get_key_value "$1"`;;
|
||
-c=*)
|
||
enable_gcov=`get_key_value "$1"`;;
|
||
-c)
|
||
shift
|
||
enable_gcov=`get_key_value "$1"`;;
|
||
-l)
|
||
enable_lizard_dbg=1;;
|
||
-i)
|
||
with_initialize=1;;
|
||
-r)
|
||
with_rebuild=1;;
|
||
-h | --help)
|
||
usage
|
||
exit 0;;
|
||
*)
|
||
echo "Unknown option '$1'"
|
||
exit 1;;
|
||
esac
|
||
shift
|
||
done
|
||
}
|
||
|
||
dump_options()
|
||
{
|
||
echo "Dumping the options used by $0 ..."
|
||
echo "build_type=$build_type"
|
||
echo "enable_lizard_dbg=$enable_lizard_dbg"
|
||
echo "dest_dir=$dest_dir"
|
||
echo "server_suffix=$server_suffix"
|
||
echo "Sanitizer=$san_type"
|
||
echo "GCOV=$enable_gcov"
|
||
echo "mach_tpye=$mach_type"
|
||
echo "os_type=$os_type"
|
||
echo "cmake_version=$cmake_version"
|
||
echo "cmake_path=$CMAKE"
|
||
echo "gcc_version=$gcc_version"
|
||
echo "gcc_path=$CC"
|
||
echo "cxx_path=$CXX"
|
||
echo "CFLAGS=$CFLAGS"
|
||
echo "CXXFLAGS=$CXXFLAGS"
|
||
}
|
||
|
||
initialize()
|
||
{
|
||
echo "
|
||
[mysqld]
|
||
port = 3306
|
||
basedir = $dest_dir
|
||
datadir = $dest_dir/data
|
||
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
|
||
default_authentication_plugin = 'mysql_native_password' #更改加密方式
|
||
|
||
#gtid:
|
||
gtid_mode = on #开启gtid模式
|
||
enforce_gtid_consistency = on #强制gtid一致性,开启后对于特定create table不被支持
|
||
|
||
#binlog
|
||
log_bin = mysql-binlog
|
||
log_slave_updates = on
|
||
binlog_format = row #强烈建议,其他格式可能造成数据不一致
|
||
binlog-ignore-db=sys
|
||
binlog-ignore-db=mysql
|
||
binlog-ignore-db=information_schema
|
||
binlog-ignore-db=performance_schema
|
||
binlog-do-db=test
|
||
|
||
server_id = 1 #服务器id
|
||
" > $HOME/my.cnf
|
||
|
||
rm -rf $dest_dir/data
|
||
mkdir -p $dest_dir/data
|
||
./runtime_output_directory/mysqld --defaults-file=$HOME/my.cnf --initialize --cluster-id=1 --cluster-start-index=1 --cluster-info='127.0.0.1:23456@1'
|
||
nohup ./runtime_output_directory/mysqld --defaults-file=$HOME/my.cnf &
|
||
}
|
||
|
||
if test ! -f sql/mysqld.cc
|
||
then
|
||
echo "You must run this script from the MySQL top-level directory"
|
||
exit 1
|
||
fi
|
||
|
||
build_type="release"
|
||
dest_dir=$HOME/tmp_run
|
||
server_suffix="rds-dev"
|
||
san_type=""
|
||
asan=0
|
||
tsan=0
|
||
enable_gcov=0
|
||
enable_lizard_dbg=0
|
||
with_initialize=0
|
||
with_rebuild=0
|
||
|
||
parse_options "$@"
|
||
get_mach_type
|
||
get_os_type
|
||
get_linux_version
|
||
|
||
if [ x"$build_type" = x"debug" ]; then
|
||
build_type="Debug"
|
||
debug=1
|
||
if [ $enable_gcov -eq 1 ]; then
|
||
gcov=1
|
||
else
|
||
gcov=0
|
||
fi
|
||
elif [ x"$build_type" = x"release" ]; then
|
||
# Release CMAKE_BUILD_TYPE is not compatible with mysql 8.0
|
||
# build_type="Release"
|
||
build_type="RelWithDebInfo"
|
||
debug=0
|
||
gcov=0
|
||
else
|
||
echo "Invalid build type, it must be \"debug\" or \"release\"."
|
||
exit 1
|
||
fi
|
||
|
||
server_suffix="-""$server_suffix"
|
||
|
||
if [ x"$build_type" = x"RelWithDebInfo" ]; then
|
||
COMMON_FLAGS="-O3 -g -fexceptions -fno-strict-aliasing"
|
||
elif [ x"$build_type" = x"Debug" ]; then
|
||
COMMON_FLAGS="-O0 -g3 -gdwarf-2 -fexceptions -fno-strict-aliasing"
|
||
fi
|
||
|
||
if [ x"$mach_type" = x"x86_64" ]; then # X86
|
||
COMMON_FLAGS="$COMMON_FLAGS -fno-omit-frame-pointer -D_GLIBCXX_USE_CXX11_ABI=0"
|
||
elif [ x"$mach_type" = x"aarch64" ]; then # ARM64
|
||
# ARM64 needn't more flags
|
||
COMMON_FLAGS="$COMMON_FLAGS" #"-static-libstdc++ -static-libgcc"
|
||
fi
|
||
|
||
COMMON_FLAGS="$COMMON_FLAGS -fdiagnostics-color=always"
|
||
export GCC_COLORS='error=01;31:warning=01;35:note=01;36:caret=01;32:locus=01:quote=01'
|
||
|
||
CFLAGS="$COMMON_FLAGS"
|
||
CXXFLAGS="$COMMON_FLAGS"
|
||
|
||
if [ x"$san_type" = x"" ]; then
|
||
asan=0
|
||
tsan=0
|
||
elif [ x"$san_type" = x"asan" ]; then
|
||
asan=1
|
||
tsan=0
|
||
## gcov is conflicting with gcc sanitizer (at least for devtoolset-7),
|
||
## disable gcov if sanitizer is requested
|
||
gcov=0
|
||
elif [ x"$san_type" = x"tsan" ]; then
|
||
asan=0
|
||
tsan=1
|
||
## gcov is conflicting with gcc sanitizer (at least for devtoolset-7),
|
||
## disable gcov if sanitizer is requested
|
||
gcov=0
|
||
else
|
||
echo "Invalid sanitizer type, it must be \"asan\" or \"tsan\"."
|
||
exit 1
|
||
fi
|
||
|
||
if [ x"$mach_type" = x"aarch64" ]; then # ARM64
|
||
CC=gcc
|
||
CXX=g++
|
||
else # X86
|
||
CC=/opt/rh/devtoolset-7/root/usr/bin/gcc
|
||
CXX=/opt/rh/devtoolset-7/root/usr/bin/g++
|
||
source /opt/rh/devtoolset-7/enable
|
||
fi
|
||
|
||
# Update choosed version
|
||
gcc_version=`$CC --version | awk 'NR==1 {print $3}'`
|
||
cmake_version=`cmake --version | awk 'NR==1 {print $3}'`
|
||
|
||
# Dumpl options
|
||
dump_options
|
||
|
||
export CC CFLAGS CXX CXXFLAGS
|
||
|
||
if [ x"$with_rebuild" = x"1" ]; then
|
||
echo "need rebuild without clean".
|
||
else
|
||
echo "need rebuild with clean".
|
||
# Avoid unexpected cmake rerunning
|
||
rm -rf packaging/deb-in/CMakeFiles/progress.marks
|
||
rm -rf CMakeCache.txt
|
||
make clean
|
||
cat extra/boost/boost_1_70_0.tar.gz.* > extra/boost/boost_1_70_0.tar.gz
|
||
cmake . \
|
||
-DCMAKE_EXPORT_COMPILE_COMMANDS=ON \
|
||
-DFORCE_INSOURCE_BUILD=ON \
|
||
-DCMAKE_BUILD_TYPE="$build_type" \
|
||
-DWITH_NORMANDY_CLUSTER=ON \
|
||
-DWITH_NORMANDY_TEST=$debug \
|
||
-DWITH_PROTOBUF:STRING=bundled \
|
||
-DSYSCONFDIR="$dest_dir" \
|
||
-DCMAKE_INSTALL_PREFIX="$dest_dir" \
|
||
-DMYSQL_DATADIR="$dest_dir/data" \
|
||
-DWITH_DEBUG=$debug \
|
||
-DWITH_LIZARD_DEBUG=$enable_lizard_dbg \
|
||
-DENABLE_GCOV=$gcov \
|
||
-DINSTALL_LAYOUT=STANDALONE \
|
||
-DMYSQL_MAINTAINER_MODE=0 \
|
||
-DWITH_EMBEDDED_SERVER=0 \
|
||
-DWITH_SSL=openssl \
|
||
-DWITH_ZLIB=bundled \
|
||
-DWITH_ZSTD=bundled \
|
||
-DWITH_MYISAM_STORAGE_ENGINE=1 \
|
||
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
|
||
-DWITH_CSV_STORAGE_ENGINE=1 \
|
||
-DWITH_ARCHIVE_STORAGE_ENGINE=1 \
|
||
-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
|
||
-DWITH_FEDERATED_STORAGE_ENGINE=1 \
|
||
-DWITH_PERFSCHEMA_STORAGE_ENGINE=1 \
|
||
-DWITH_EXAMPLE_STORAGE_ENGINE=0 \
|
||
-DWITH_TEMPTABLE_STORAGE_ENGINE=1 \
|
||
-DWITH_XENGINE_STORAGE_ENGINE=0 \
|
||
-DWITH_QUERY_TRACE=1 \
|
||
-DWITH_EXTRA_CHARSETS=all \
|
||
-DDEFAULT_CHARSET=utf8mb4 \
|
||
-DDEFAULT_COLLATION=utf8mb4_0900_ai_ci \
|
||
-DENABLED_PROFILING=1 \
|
||
-DENABLED_LOCAL_INFILE=1 \
|
||
-DWITH_ASAN=$asan \
|
||
-DWITH_TSAN=$tsan \
|
||
-DWITH_BOOST="./extra/boost/boost_1_70_0.tar.gz" \
|
||
-DDOWNLOAD_BOOST=0 \
|
||
-DMYSQL_SERVER_SUFFIX="$server_suffix" \
|
||
-DENABLE_DOWNLOADS=0 \
|
||
-DWITH_UNIT_TESTS=0
|
||
fi
|
||
|
||
make -j `getconf _NPROCESSORS_ONLN`
|
||
|
||
|
||
if [ $with_initialize -eq 1 ]; then
|
||
initialize
|
||
echo "use follow cmd to login mysql:"
|
||
echo "./runtime_output_directory/mysql -uroot -hlocalhost -P3306 -p"
|
||
echo ""
|
||
echo "use follow sql to modify password:"
|
||
echo "alter user 'root'@'localhost' identified WITH mysql_native_password by '';"
|
||
fi
|
||
|
||
# end of file |