diff options
-rwxr-xr-x | BUILD/build_mccge.sh | 250 | ||||
-rwxr-xr-x | BUILD/check-cpu | 112 |
2 files changed, 234 insertions, 128 deletions
diff --git a/BUILD/build_mccge.sh b/BUILD/build_mccge.sh index fc0f8181692..3855b5ed7d9 100755 --- a/BUILD/build_mccge.sh +++ b/BUILD/build_mccge.sh @@ -170,7 +170,7 @@ Usage: $0 [options] --error-inject Enable error injection into MySQL Server and data nodes --valgrind Build with valgrind - --fast Optimise for CPU architecture buildt on + --fast Optimise for CPU architecture built on --static-linking Statically link system libraries into binaries --with-flags * Pass extra --with-xxx options to configure EOF @@ -314,10 +314,6 @@ extended_usage() In addition there are some configure options that are specific to Linux operating systems: - --with-fast-mutexes - Include an alternative implementation of mutexes that is faster on - Linux systems - --enable-assembler Include assembler code optimisations for a number of mostly string methods. Used for x86 processors only. @@ -376,6 +372,10 @@ extended_usage() Use of the --debug option adds -g to the C/C++ flags. + In all cases it is possible to override the definition of CC and CXX + by calling the script as follows: + CC="/usr/local/bin/gcc" CXX="/usr/local/bin/gcc" BUILD/build_mccge.sh + FreeBSD/x86/gcc --------------- No flags are used. Instead, configure determines the proper flags to @@ -383,8 +383,7 @@ extended_usage() Linux/x86+Itanium/gcc ------------- - No flags are used. Instead the configure script determines the - proper flags to use for both normal and debug builds. Discovery of a + For debug builds -O is used and otherwise -O3 is used.Discovery of a Nocona or Core 2 Duo CPU causes a 64-bit binary to be built; otherwise, the binary is 32-bit. To build a 64-bit binary, -m64 is added to the C/C++ flags. (To build a 32-bit binary on a 64-bit CPU, @@ -393,11 +392,11 @@ extended_usage() Linux/x86+Itanium/icc ------------- Flags used: - CC = icc -static-libgcc -static-libcxa -i-static - C++ = icpc -static-libgcc -static-libcxa -i-static + CC = icc -static-libgcc -static-intel + C++ = icpc -static-libgcc -static-intel C/C++ flags = -mp -restrict - On Itanium we also add -no-ftz and -no-prefetch to CC and C++ flags. + On Itanium we also add -no-ftz and to CC and C++ flags. The non-debug versions also add the following: C/C++ flags += -O3 unroll2 -ip @@ -411,12 +410,18 @@ extended_usage() Solaris/x86/gcc --------------- - All builds on Solaris are 64-bit, so -m64 is always used in the - C/C++ flags. LDFLAGS is set to -m64 -static-libgcc -O/-O2. + All builds on Solaris are by default 64-bit, so -m64 is always used in + the C/C++ flags. LDFLAGS is set to -m64 -static-libgcc -O/-O2. If for + some reason a 32-bit Solaris is used it is necessary to add the flag + --32 to the script invocation. Due to bugs in compiling with -O3 on + Solaris only -O2 is used by default, when --fast flag is used -O3 will + be used instead. Solaris/Sparc/Forte ------------------- Uses cc-5.0 as CC + Set -m64 (default) or -m32 (if specifically set) in ASFLAGS, + LDFLAGS and C/C++ flags. Sets ASFLAGS=LDFLAGS=xarch=v9, so that we compile Sparc v9 binaries C flags = -Xa -strconst -xc99=none C++ flags = -noex @@ -424,7 +429,7 @@ extended_usage() For non-debug builds, the following flags are also used: - C/C++ flags = -xO3 + C/C++ flags = -xO2 MacOSX/x86/gcc -------------- @@ -433,6 +438,10 @@ extended_usage() Non-debug versions also add -Os -felide-constructors, where "-Os" means the build is space-optimised as long as the space optimisations do not negatively affect performance. Debug versions use -O. + + Mac OS X builds will always be 32-bit by default, when --64 is added + the build will be 64 bit instead. Thus the flag --m64 is added only + when specifically given as an option. EOF } with_usage() @@ -775,9 +784,17 @@ set_cpu_base() check_cpu_cflags="" fi if test "x$os" = "xMacOSX" ; then - m64="no" + if test "x$m64" = "xyes" ; then + m64="yes" + else + m64="no" + fi elif test "x$os" = "xSolaris" ; then - m64="yes" + if test "x$m32" = "x" ; then + m64="yes" + else + m64="no" + fi elif test "x$m32" = "x" ; then if test "x$cpu_arg" = "xnocona" || test "x$cpu_arg" = "xcore2" || \ test "x$cpu_arg" = "xathlon64" || test "x$cpu_arg" = "xopteron" ; then @@ -791,8 +808,10 @@ set_cpu_base() echo "Discovered CPU of type $cpu_base_type ($cpu_arg) on $os" if test "x$m64" = "xyes" ; then echo "Will compile 64-bit binaries" - else + elif test "x$m32" = "xyes" ; then echo "Will compile 32-bit binaries" + else + echo "Will compile default-sized (32 or 64 bit) binaries" fi return 0 } @@ -806,18 +825,15 @@ init_configure_commands() cxxflags="$cxx_warnings $base_cxxflags $compiler_flags" configure="./configure $base_configs $with_flags" - commands="$commands - CC=\"$CC\" CFLAGS=\"$cflags\" CXX=\"$CXX\" CXXFLAGS=\"$cxxflags\"" + flags="CC=\"$CC\" CFLAGS=\"$cflags\" CXX=\"$CXX\" CXXFLAGS=\"$cxxflags\"" if test "x$LDFLAGS" != "x" ; then - commands="$commands - LDFLAGS=\"$LDFLAGS\"" + flags="$flags LDFLAGS=\"$LDFLAGS\"" fi if test "x$ASFLAGS" != "x" ; then - commands="$commands - ASFLAGS=\"$ASFLAGS\"" + flags="$flags ASFLAGS=\"$ASFLAGS\"" fi commands="$commands - $configure" + $flags $configure" } # @@ -920,7 +936,7 @@ set_libtoolize_version() # We do not use ccache when gcov is used. Also only when # gcc is used. # -set_up_ccache() +set_ccache_usage() { if test "x$compiler" = "xgcc" ; then if ccache -V > /dev/null 2>&1 && test "$USING_GCOV" != "1" @@ -1046,7 +1062,7 @@ set_base_configs() base_configs="$base_configs --enable-local-infile" base_configs="$base_configs --enable-thread-safe-client" base_configs="$base_configs --with-big-tables" - base_configs="$base_configs --with-extra-charsets=all" + base_configs="$base_configs --with-extra-charsets=complex" base_configs="$base_configs --with-ssl" base_configs="$base_configs --with-pic" base_configs="$base_configs --with-csv-storage-engine" @@ -1059,17 +1075,27 @@ set_base_configs() # set_base_engines() { - engine_configs="$engine_configs --with-archive-storage-engine" + engine_configs="--with-archive-storage-engine" engine_configs="$engine_configs --with-blackhole-storage-engine" - engine_configs="$engine_configs --with-example-storage-engine" + engine_configs="$engine_configs --without-example-storage-engine" engine_configs="$engine_configs --with-federated-storage-engine" engine_configs="$engine_configs --with-partition" + base_configs="$base_configs $engine_configs" } -set_pro_package() +set_innodb_engine() { - base_configs="$base_configs $engine_configs" base_configs="$base_configs --with-innodb" +} + +set_ndb_engine() +{ + base_configs="$base_configs --with-ndbcluster" + base_configs="$base_configs --without-ndb-debug" +} + +set_pro_package() +{ base_configs="$base_configs --with-comment=\"MySQL Pro $version_text built from source\"" if test "x$with_debug_flag" = "xyes" ; then base_configs="$base_configs --with-server-suffix=\"-debug\"" @@ -1081,10 +1107,6 @@ set_cge_extended_package() if test "x$gpl" = "xno" ; then echo "Cannot build Extended Carrier Grade Edition as Commercial version" fi - base_configs="$base_configs --with-ndbcluster" - base_configs="$base_configs --without-ndb-debug" - base_configs="$base_configs $engine_configs" - base_configs="$base_configs --with-innodb" base_configs="$base_configs --with-comment=\"MySQL Cluster Carrier Grade Extended Edition $version_text built from source\"" if test "x$with_debug_flag" = "xyes" ; then base_configs="$base_configs --with-server-suffix=\"-cge-extended-debug\"" @@ -1095,9 +1117,6 @@ set_cge_extended_package() set_cge_package() { - base_configs="$base_configs --with-ndbcluster" - base_configs="$base_configs --without-ndb-debug" - base_configs="$base_configs $engine_configs" base_configs="$base_configs --with-comment=\"MySQL Cluster Carrier Grade Edition $version_text built from source\"" if test "x$with_debug_flag" = "xyes" ; then base_configs="$base_configs --with-server-suffix=\"-cge-debug\"" @@ -1139,6 +1158,36 @@ set_gcc_special_options() fi } +set_cc_and_cxx_for_gcc() +{ + if test "x$CC" = "x" ; then + CC="gcc -static-libgcc" + fi + if test "x$CXX" = "x" ; then + CXX="gcc -static-libgcc" + fi +} + +set_cc_and_cxx_for_icc() +{ + if test "x$CC" = "x" ; then + CC="icc -static-intel -static-libgcc" + fi + if test "x$CXX" = "x" ; then + CXX="icpc -static-intel -static-libgcc" + fi +} + +set_cc_and_cxx_for_forte() +{ + if test "x$CC" = "x" ; then + CC="cc-5.0" + fi + if test "x$CXX" = "x" ; then + CXX="cc-5.0" + fi +} + # # If we discover a Core 2 Duo architecture and we have enabled the fast # flag, we enable a compile especially optimised for Core 2 Duo. This @@ -1166,8 +1215,12 @@ set_bsd_configs() exit 1 fi base_configs="$base_configs --enable-assembler" - CC="gcc" - CXX="gcc" + if test "x$fast_flag" != "xno" ; then + compiler_flags="$compiler_flags -O3" + else + compiler_flags="$compiler_flags -O" + fi + set_cc_and_cxx_for_gcc } # @@ -1177,24 +1230,28 @@ set_linux_configs() { if test "x$cpu_base_type" != "xx86" && \ test "x$cpu_base_type" != "xitanium" ; then - usage "Only x86 and Itanium CPUs supported for 32-bit Linux" + usage "Only x86 and Itanium CPUs supported for Linux" exit 1 fi - base_configs="$base_configs --with-fast-mutexes" if test "x$cpu_base_type" = "xx86" ; then base_configs="$base_configs --enable-assembler" fi if test "x$compiler" = "xgcc" ; then - CC="gcc" - CXX="gcc" + set_cc_and_cxx_for_gcc if test "x$m64" = "xyes" ; then compiler_flags="$compiler_flags -m64" + elif test "x$m32" = "xyes" ; then + compiler_flags="$compiler_flags -m32" + fi + if test "x$fast_flag" != "xno" ; then + compiler_flags="$compiler_flags -O2" + else + compiler_flags="$compiler_flags -O" fi # configure will set proper compiler flags for gcc on Linux elif test "x$compiler" = "xicc" ; then compiler_flags="$compiler_flags -mp -restrict" - CC="icc -static-intel" - CXX="icpc -static-intel" + set_cc_and_cxx_for_icc if test "x$cpu_base_type" = "xitanium" ; then compiler_flags="$compiler_flags -no-ftz" fi @@ -1215,12 +1272,15 @@ set_linux_configs() # set_solaris_configs() { +# Use mtmalloc as malloc, see Tim Cook blog base_configs="$base_configs --with-mysqld-libs=-lmtmalloc" + base_configs="$base_configs --with-named-curses=-lcurses" case "`uname -a`" in - *5.10*|*5.11*) + *5.8* | *5.9* | *5.10* | *5.11*) + ;; *) - die "Only versions 10 and 11 supported for Solaris" + die "Only versions 8,9, 10 and 11 supported for Solaris" esac if test "x$cpu_base_type" != "xx86" && \ test "x$cpu_base_type" != "xsparc" ; then @@ -1228,13 +1288,17 @@ set_solaris_configs() exit 1 fi if test "x$compiler" = "xgcc" ; then - CC="gcc" - CXX="gcc" + set_cc_and_cxx_for_gcc if test "x$cpu_base_type" != "xx86" ; then usage "Only gcc supported for Solaris 10/11 on SPARC" fi - compiler_flags="$compiler_flags -m64 -DMY_ATOMIC_MODE_RWLOCKS" - LDFLAGS="-m64 -static-libgcc" + if test "x$m64" = "xyes" ; then + compiler_flags="$compiler_flags -m64" + LDFLAGS="-m64" + elif test "x$m32" = "xyes" ; then + compiler_flags="$compiler_flags -m32" + LDFLAGS="-m32" + fi if test "x$fast_flag" != "xno" ; then LDFLAGS="$LDFLAGS -O2" compiler_flags="$compiler_flags -O2" @@ -1243,21 +1307,40 @@ set_solaris_configs() compiler_flags="$compiler_flags -O" fi elif test "x$compiler" = "xforte" ; then + set_cc_and_cxx_for_forte if test "x$cpu_base_type" = "xx86" ; then - usage "Only gcc supported for Solaris/x86" - fi - if test "x$cpu_base_type" != "xsparc" ; then - usage "Forte compiler supported for Solaris 9/SPARC only" - fi - CC="cc-5.0" - CXX=CC - ASFLAGS="xarch=v9" - LDFLAGS="xarch=v9" - base_cflags="$base_cflags -Xa -xstrconst -xc99=none" - base_cxxflags="$base_cxxflags -noex" - compiler_flags="$compiler_flags -mt -D_FORTEC -xarch=v9" - if test "x$fast_flag" != "xno" ; then - compiler_flags="$compiler_flags -xO3" + if test "x$fast_flag" != "xno" ; then + compiler_flags="$compiler_flags -xO2" + fi + compiler_flags="$compiler_flags -mt" + compiler_flags="$compiler_flags -fsimple=1" + compiler_flags="$compiler_flags -ftrap=%none" + compiler_flags="$compiler_flags -nofstore" + compiler_flags="$compiler_flags -xbuiltin=%all" + compiler_flags="$compiler_flags -xlibmil" + compiler_flags="$compiler_flags -xlibmopt" + compiler_flags="$compiler_flags -xtarget=generic" + base_cxx_flags="$base_cxx_flags -features=no%except" + elif test "x$cpu_base_type" != "xsparc" ; then + usage "Forte compiler supported for Solaris on x86 and SPARC only" + else + ASFLAGS="$ASFLAGS xarch=v9" + LDFLAGS="$LDFLAGS xarch=v9" + if test "x$m64" = "xyes" ; then + compiler_flags="$compiler_flags -m64" + ASFLAGS="$ASFLAGS -m64" + LDFLAGS="$LDFLAGS -m64" + elif test "x$m32" = "xyes" ; then + compiler_flags="$compiler_flags -m32" + ASFLAGS="$ASFLAGS -m32" + LDFLAGS="$LDFLAGS -m32" + fi + base_cflags="$base_cflags -Xa -xstrconst -xc99=none" + base_cxxflags="$base_cxxflags -noex" + compiler_flags="$compiler_flags -mt -D_FORTEC -xarch=v9" + if test "x$fast_flag" != "xno" ; then + compiler_flags="$compiler_flags -xO2" + fi fi else usage "Only gcc and Forte compilers supported for Solaris" @@ -1270,10 +1353,7 @@ set_solaris_configs() # set_macosx_configs() { - base_cxxflags="$base_cxxflags -fno-common" - if test "x$cpu_base_type" = "xx86" && test "x$compiler" = "xgcc" ; then - compiler_flags="$compiler_flags -arch i386" - else + if test "x$cpu_base_type" != "xx86" || test "x$compiler" != "xgcc" ; then usage "Only gcc/x86 supported for Mac OS X" exit 1 fi @@ -1281,14 +1361,23 @@ set_macosx_configs() # Optimize for space as long as it doesn't affect performance, use some # optimisations also when not in fast mode. # + base_cxxflags="$base_cxxflags -felide-constructors" + base_cxxflags="$base_cxxflags -fno-common" + if test "x$m64" = "xyes" ; then + compiler_flags="$compiler_flags -m64" + compiler_flags="$compiler_flags -arch x86_64" + elif test "x$m32" = "xyes" ; then + compiler_flags="$compiler_flags -m32" + compiler_flags="$compiler_flags -arch i386" + else + compiler_flags="$compiler_flags -arch i386" + fi if test "x$fast_flag" != "xno" ; then compiler_flags="$compiler_flags -Os" - base_cxxflags="$base_cxxflags -felide-constructors" else compiler_flags="$compiler_flags -O" fi - CC="gcc" - CXX="gcc" + set_cc_and_cxx_for_gcc } # @@ -1402,6 +1491,9 @@ m64= datadir= commands= use_autotools= +engine_configs= +ASFLAGS= +LDFLAGS= set_defaults_based_on_environment @@ -1418,7 +1510,13 @@ set -e # This call sets the cpu_arg and check_cpu_args parameters # path=`dirname $0` +if test "x$compiler" = "xgcc" ; then + compiler= +fi . "$path/check-cpu" +if test "x$compiler" = "x" ; then + compiler="gcc" +fi set_cpu_base if test "x$?" = "x1" ; then exit 1 @@ -1446,17 +1544,23 @@ set_icc_special_options # including all storage engines except InnoDB, and to use GPL libraries. # set_base_configs -set_base_engines if test "x$gpl" = "xyes" ; then version_text="GPL version" else version_text="Commercial version" fi if test "x$package" = "xpro" ; then + set_base_engines + set_innodb_engine set_pro_package elif test "x$package" = "xextended" ; then + set_base_engines + set_ndb_engine + set_innodb_engine set_cge_extended_package elif test "x$package" = "xcge" ; then + set_base_engines + set_ndb_engine set_cge_package elif test "x$package" = "xclassic" ; then set_classic_package @@ -1490,7 +1594,7 @@ fi # proper libtoolize versions, and to determine whether to use ccache. # set_make_version -set_up_ccache +set_ccache_usage # # Set up commands variable from variables prepared for base diff --git a/BUILD/check-cpu b/BUILD/check-cpu index 33bf857b845..c2ea197bfa4 100755 --- a/BUILD/check-cpu +++ b/BUILD/check-cpu @@ -175,67 +175,69 @@ check_cpu () { cc=$CC fi - cc_ver=`$cc --version | sed 1q` - cc_verno=`echo $cc_ver | sed -e 's/^.*(GCC)//g; s/[^0-9. ]//g; s/^ *//g; s/ .*//g'` - set -- `echo $cc_verno | tr '.' ' '` - cc_major=$1 - cc_minor=$2 - cc_patch=$3 - cc_comp=`expr $cc_major '*' 100 '+' $cc_minor` + if test "x$compiler" = "x" ; then + cc_ver=`$cc --version | sed 1q` + cc_verno=`echo $cc_ver | sed -e 's/^.*(GCC)//g; s/[^0-9. ]//g; s/^ *//g; s/ .*//g'` + set -- `echo $cc_verno | tr '.' ' '` + cc_major=$1 + cc_minor=$2 + cc_patch=$3 + cc_comp=`expr $cc_major '*' 100 '+' $cc_minor` - case "$cc_ver--$cc_verno" in - *GCC*) - # different gcc backends (and versions) have different CPU flags - case `gcc -dumpmachine` in - i?86-* | x86_64-*) - if test "$cc_comp" -lt 304 ; then - check_cpu_cflags="-mcpu=${cpu_arg}" - elif test "$cc_comp" -ge 402 ; then - check_cpu_cflags="-mtune=native" - else - check_cpu_cflags="-mtune=${cpu_arg}" - fi - ;; - ppc-*) - check_cpu_cflags="-mcpu=${cpu_arg} -mtune=${cpu_arg}" - ;; - *) - check_cpu_cflags="" - return - ;; - esac - ;; - 2.95.*) - # GCC 2.95 doesn't expose its name in --version output - check_cpu_cflags="-m${cpu_arg}" - ;; - *) - check_cpu_cflags="" - return - ;; - esac + case "$cc_ver--$cc_verno" in + *GCC*) + # different gcc backends (and versions) have different CPU flags + case `gcc -dumpmachine` in + i?86-* | x86_64-*) + if test "$cc_comp" -lt 304 ; then + check_cpu_cflags="-mcpu=${cpu_arg}" + elif test "$cc_comp" -ge 402 ; then + check_cpu_cflags="-mtune=native" + else + check_cpu_cflags="-mtune=${cpu_arg}" + fi + ;; + ppc-*) + check_cpu_cflags="-mcpu=${cpu_arg} -mtune=${cpu_arg}" + ;; + *) + check_cpu_cflags="" + return + ;; + esac + ;; + 2.95.*) + # GCC 2.95 doesn't expose its name in --version output + check_cpu_cflags="-m${cpu_arg}" + ;; + *) + check_cpu_cflags="" + return + ;; + esac + # now we check whether the compiler really understands the cpu type + touch __test.c - # now we check whether the compiler really understands the cpu type - touch __test.c + while [ "$cpu_arg" ] ; do + printf "testing $cpu_arg ... " >&2 + + # compile check + eval "$cc -c $check_cpu_cflags __test.c" 2>/dev/null + if test "x$?" = "x0" ; then + echo ok >&2 + break; + fi + echo failed >&2 + check_cpu_cflags="" + break; + done + rm __test.* + fi if test "x$core2" = "xyes" ; then cpu_arg="core2" fi - while [ "$cpu_arg" ] ; do - printf "testing $cpu_arg ... " >&2 - - # compile check - eval "$cc -c $check_cpu_cflags __test.c" 2>/dev/null - if test "x$?" = "x0" ; then - echo ok >&2 - break; - fi - - echo failed >&2 - check_cpu_cflags="" - break; - done - rm __test.* + return 0 } check_cpu |