common/autoconf/build-performance.m4

Tue, 18 Sep 2012 11:29:16 -0700

author
ohair
date
Tue, 18 Sep 2012 11:29:16 -0700
changeset 478
2ba6f4da4bf3
parent 459
3156dff953b1
child 494
e64f2cb57d05
permissions
-rw-r--r--

7197849: Update new build-infra makefiles
Reviewed-by: ihse, erikj, ohrstrom, tbell

     1 #
     2 # Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved.
     3 # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
     4 #
     5 # This code is free software; you can redistribute it and/or modify it
     6 # under the terms of the GNU General Public License version 2 only, as
     7 # published by the Free Software Foundation.  Oracle designates this
     8 # particular file as subject to the "Classpath" exception as provided
     9 # by Oracle in the LICENSE file that accompanied this code.
    10 #
    11 # This code is distributed in the hope that it will be useful, but WITHOUT
    12 # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
    13 # FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
    14 # version 2 for more details (a copy is included in the LICENSE file that
    15 # accompanied this code).
    16 #
    17 # You should have received a copy of the GNU General Public License version
    18 # 2 along with this work; if not, write to the Free Software Foundation,
    19 # Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
    20 #
    21 # Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
    22 # or visit www.oracle.com if you need additional information or have any
    23 # questions.
    24 #
    26 AC_DEFUN([BPERF_CHECK_CORES],
    27 [
    28     AC_MSG_CHECKING([for number of cores])
    29     NUM_CORES=1
    30     FOUND_CORES=no
    32     if test -f /proc/cpuinfo; then
    33         # Looks like a Linux (or cygwin) system
    34         NUM_CORES=`cat /proc/cpuinfo  | grep -c processor`
    35         FOUND_CORES=yes
    36     elif test -x /usr/sbin/psrinfo; then
    37         # Looks like a Solaris system
    38         NUM_CORES=`LC_MESSAGES=C /usr/sbin/psrinfo -v | grep -c on-line`
    39         FOUND_CORES=yes
    40     elif test -x /usr/sbin/system_profiler; then
    41         # Looks like a MacOSX system
    42         NUM_CORES=`/usr/sbin/system_profiler -detailLevel full SPHardwareDataType | grep 'Cores' | awk  '{print [$]5}'`
    43         FOUND_CORES=yes
    44     fi
    46     # For c/c++ code we run twice as many concurrent build
    47     # jobs than we have cores, otherwise we will stall on io.
    48     CONCURRENT_BUILD_JOBS=`expr $NUM_CORES \* 2`
    50     if test "x$FOUND_CORES" = xyes; then
    51         AC_MSG_RESULT([$NUM_CORES])
    52     else
    53         AC_MSG_RESULT([could not detect number of cores, defaulting to 1!])
    54     fi 
    56 ])
    58 AC_DEFUN([BPERF_CHECK_MEMORY_SIZE],
    59 [
    60     AC_MSG_CHECKING([for memory size])
    61     # Default to 1024 MB
    62     MEMORY_SIZE=1024
    63     FOUND_MEM=no
    65     if test -f /proc/meminfo; then
    66         # Looks like a Linux (or cygwin) system
    67         MEMORY_SIZE=`cat /proc/meminfo | grep MemTotal | awk '{print [$]2}'`
    68         MEMORY_SIZE=`expr $MEMORY_SIZE / 1024`
    69         FOUND_MEM=yes
    70     elif test -x /usr/sbin/prtconf; then
    71         # Looks like a Solaris system
    72         MEMORY_SIZE=`/usr/sbin/prtconf | grep "Memory size" | awk '{ print [$]3 }'`
    73         FOUND_MEM=yes
    74     elif test -x /usr/sbin/system_profiler; then
    75         # Looks like a MacOSX system
    76         MEMORY_SIZE=`/usr/sbin/system_profiler -detailLevel full SPHardwareDataType | grep 'Memory' | awk  '{print [$]2}'`
    77         MEMORY_SIZE=`expr $MEMORY_SIZE \* 1024`
    78         FOUND_MEM=yes
    79     elif test "x$build_os" = xwindows; then
    80         # Windows, but without cygwin
    81         MEMORY_SIZE=`systeminfo | grep 'Total Physical Memory:' | awk '{ print [$]4 }' | sed 's/,//'`
    82         FOUND_MEM=yes    
    83     fi
    85     if test "x$FOUND_MEM" = xyes; then
    86         AC_MSG_RESULT([$MEMORY_SIZE MB])
    87     else
    88         AC_MSG_RESULT([could not detect memory size defaulting to 1024 MB!])
    89     fi 
    90 ])
    92 AC_DEFUN_ONCE([BPERF_SETUP_BUILD_CORES],
    93 [
    94 # How many cores do we have on this build system?
    95 AC_ARG_WITH(num-cores, [AS_HELP_STRING([--with-num-cores],
    96     [number of cores in the build system, e.g. --with-num-cores=8 @<:@probed@:>@])])
    97 if test "x$with_num_cores" = x; then
    98     # The number of cores were not specified, try to probe them.
    99     BPERF_CHECK_CORES
   100 else
   101     NUM_CORES=$with_num_cores
   102     CONCURRENT_BUILD_JOBS=`expr $NUM_CORES \* 2`
   103 fi
   104 AC_SUBST(NUM_CORES)
   105 AC_SUBST(CONCURRENT_BUILD_JOBS)
   106 ])
   108 AC_DEFUN_ONCE([BPERF_SETUP_BUILD_MEMORY],
   109 [
   110 # How much memory do we have on this build system?
   111 AC_ARG_WITH(memory-size, [AS_HELP_STRING([--with-memory-size],
   112     [memory (in MB) available in the build system, e.g. --with-memory-size=1024 @<:@probed@:>@])])
   113 if test "x$with_memory_size" = x; then
   114     # The memory size was not specified, try to probe it.
   115     BPERF_CHECK_MEMORY_SIZE
   116 else
   117     MEMORY_SIZE=$with_memory_size
   118 fi
   119 AC_SUBST(MEMORY_SIZE)
   120 ])
   122 AC_DEFUN([BPERF_SETUP_CCACHE],
   123 [
   124     AC_ARG_ENABLE([ccache],
   125 	      [AS_HELP_STRING([--disable-ccache],
   126 	      		      [use ccache to speed up recompilations @<:@enabled@:>@])],
   127               [ENABLE_CCACHE=${enable_ccache}], [ENABLE_CCACHE=yes])
   128     if test "x$ENABLE_CCACHE" = xyes; then
   129         AC_PATH_PROG(CCACHE, ccache)
   130     else
   131         AC_MSG_CHECKING([for ccache])
   132         AC_MSG_RESULT([explicitly disabled])    
   133         CCACHE=
   134     fi    
   135     AC_SUBST(CCACHE)
   137     AC_ARG_WITH([ccache-dir],
   138 	      [AS_HELP_STRING([--with-ccache-dir],
   139 	      		      [where to store ccache files @<:@~/.ccache@:>@])])
   141     if test "x$with_ccache_dir" != x; then
   142         # When using a non home ccache directory, assume the use is to share ccache files
   143         # with other users. Thus change the umask.
   144         SET_CCACHE_DIR="CCACHE_DIR=$with_ccache_dir CCACHE_UMASK=002"
   145     fi
   146     CCACHE_FOUND=""
   147     if test "x$CCACHE" != x; then
   148         BPERF_SETUP_CCACHE_USAGE
   149     fi    
   150 ])
   152 AC_DEFUN([BPERF_SETUP_CCACHE_USAGE],
   153 [
   154     if test "x$CCACHE" != x; then
   155         CCACHE_FOUND="true"
   156         # Only use ccache if it is 3.1.4 or later, which supports
   157         # precompiled headers.
   158         AC_MSG_CHECKING([if ccache supports precompiled headers])
   159         HAS_GOOD_CCACHE=`($CCACHE --version | head -n 1 | grep -E 3.1.@<:@456789@:>@) 2> /dev/null`
   160         if test "x$HAS_GOOD_CCACHE" = x; then
   161             AC_MSG_RESULT([no, disabling ccache])
   162             CCACHE=
   163         else
   164             AC_MSG_RESULT([yes])
   165             AC_MSG_CHECKING([if C-compiler supports ccache precompiled headers])
   166             PUSHED_FLAGS="$CXXFLAGS"
   167             CXXFLAGS="-fpch-preprocess $CXXFLAGS"
   168             AC_COMPILE_IFELSE([AC_LANG_PROGRAM([], [])], [CC_KNOWS_CCACHE_TRICK=yes], [CC_KNOWS_CCACHE_TRICK=no])
   169             CXXFLAGS="$PUSHED_FLAGS"
   170             if test "x$CC_KNOWS_CCACHE_TRICK" = xyes; then
   171                 AC_MSG_RESULT([yes])
   172             else
   173                 AC_MSG_RESULT([no, disabling ccaching of precompiled headers])
   174                 CCACHE=
   175             fi
   176         fi
   177     fi
   179     if test "x$CCACHE" != x; then
   180         CCACHE_SLOPPINESS=time_macros
   181         CCACHE="CCACHE_COMPRESS=1 $SET_CCACHE_DIR CCACHE_SLOPPINESS=$CCACHE_SLOPPINESS $CCACHE"
   182         CCACHE_FLAGS=-fpch-preprocess
   184         if test "x$SET_CCACHE_DIR" != x; then
   185             mkdir -p $CCACHE_DIR > /dev/null 2>&1
   186 	    chmod a+rwxs $CCACHE_DIR > /dev/null 2>&1
   187         fi
   188     fi
   189 ])
   191 AC_DEFUN_ONCE([BPERF_SETUP_PRECOMPILED_HEADERS],
   192 [
   194 ###############################################################################
   195 #
   196 # Can the C/C++ compiler use precompiled headers?
   197 #
   198 AC_ARG_ENABLE([precompiled-headers], [AS_HELP_STRING([--disable-precompiled-headers],
   199 	[use precompiled headers when compiling C++ @<:@enabled@:>@])],
   200     [ENABLE_PRECOMPH=${enable_precompiled-headers}], [ENABLE_PRECOMPH=yes])
   202 USE_PRECOMPILED_HEADER=1
   203 if test "x$ENABLE_PRECOMPH" = xno; then
   204     USE_PRECOMPILED_HEADER=0
   205 fi
   207 if test "x$ENABLE_PRECOMPH" = xyes; then
   208     # Check that the compiler actually supports precomp headers.
   209     if test "x$GCC" = xyes; then
   210          AC_MSG_CHECKING([that precompiled headers work])         
   211          echo "int alfa();" > conftest.h
   212          $CXX -x c++-header conftest.h -o conftest.hpp.gch
   213          if test ! -f conftest.hpp.gch; then
   214              echo Precompiled header is not working!
   215              USE_PRECOMPILED_HEADER=0
   216              AC_MSG_RESULT([no])        
   217          else
   218              AC_MSG_RESULT([yes])
   219          fi
   220          rm -f conftest.h
   221     fi
   222 fi
   224 AC_SUBST(USE_PRECOMPILED_HEADER)
   225 ])
   228 AC_DEFUN_ONCE([BPERF_SETUP_SMART_JAVAC],
   229 [
   230 AC_ARG_WITH(sjavac-server-java, [AS_HELP_STRING([--with-sjavac-server-java],
   231 	[use this java binary for running the sjavac background server and other long running java tasks in the build process,
   232      e.g. ---with-sjavac-server-java="/opt/jrockit/bin/java -server"])])
   234 if test "x$with_sjavac_server_java" != x; then
   235     SJAVAC_SERVER_JAVA="$with_sjavac_server_java"
   236     FOUND_VERSION=`$SJAVAC_SERVER_JAVA -version 2>&1 | grep " version \""`
   237     if test "x$FOUND_VERSION" = x; then
   238         AC_MSG_ERROR([Could not execute server java: $SJAVAC_SERVER_JAVA])
   239     fi
   240 else
   241     SJAVAC_SERVER_JAVA=""
   242     # Hotspot specific options.
   243     ADD_JVM_ARG_IF_OK([-verbosegc],SJAVAC_SERVER_JAVA,[$JAVA])
   244     # JRockit specific options.
   245     ADD_JVM_ARG_IF_OK([-Xverbose:gc],SJAVAC_SERVER_JAVA,[$JAVA])
   246     SJAVAC_SERVER_JAVA="$JAVA $SJAVAC_SERVER_JAVA"
   247 fi                    
   248 AC_SUBST(SJAVAC_SERVER_JAVA)
   250 AC_ARG_WITH(sjavac-server-cores, [AS_HELP_STRING([--with-sjavac-server-cores],
   251 	[use at most this number of concurrent threads on the sjavac server @<:@probed@:>@])])
   252 if test "x$with_sjavac_server_cores" != x; then
   253     SJAVAC_SERVER_CORES="$with_sjavac_server_cores"
   254 else
   255     if test "$NUM_CORES" -gt 16; then
   256         # We set this arbitrary limit because we want to limit the heap
   257         # size of the javac server.
   258         # In the future we will make the javac compilers in the server
   259         # share more and more state, thus enabling us to use more and
   260         # more concurrent threads in the server.
   261         SJAVAC_SERVER_CORES="16"
   262     else
   263         SJAVAC_SERVER_CORES="$NUM_CORES"
   264     fi
   266     if test "$MEMORY_SIZE" -gt "17000"; then
   267         MAX_HEAP_MEM=10000
   268         ADD_JVM_ARG_IF_OK([-d64],SJAVAC_SERVER_JAVA,[$SJAVAC_SERVER_JAVA])
   269         ADD_JVM_ARG_IF_OK([-Xms10G -Xmx10G],SJAVAC_SERVER_JAVA,[$SJAVAC_SERVER_JAVA])
   270     elif test "$MEMORY_SIZE" -gt "10000"; then
   271         MAX_HEAP_MEM=6000
   272         ADD_JVM_ARG_IF_OK([-d64],SJAVAC_SERVER_JAVA,[$SJAVAC_SERVER_JAVA])
   273         ADD_JVM_ARG_IF_OK([-Xms6G -Xmx6G],SJAVAC_SERVER_JAVA,[$SJAVAC_SERVER_JAVA])
   274     elif test "$MEMORY_SIZE" -gt "5000"; then
   275         MAX_HEAP_MEM=3000
   276         ADD_JVM_ARG_IF_OK([-d64],SJAVAC_SERVER_JAVA,[$SJAVAC_SERVER_JAVA])
   277         ADD_JVM_ARG_IF_OK([-Xms1G -Xmx3G],SJAVAC_SERVER_JAVA,[$SJAVAC_SERVER_JAVA])
   278     elif test "$MEMORY_SIZE" -gt "3800"; then
   279         MAX_HEAP_MEM=2500
   280         ADD_JVM_ARG_IF_OK([-Xms1G -Xmx2500M],SJAVAC_SERVER_JAVA,[$SJAVAC_SERVER_JAVA])
   281     elif test "$MEMORY_SIZE" -gt "1900"; then
   282         MAX_HEAP_MEM=1200
   283         ADD_JVM_ARG_IF_OK([-Xms700M -Xmx1400M],SJAVAC_SERVER_JAVA,[$SJAVAC_SERVER_JAVA])
   284     elif test "$MEMORY_SIZE" -gt "1000"; then
   285         MAX_HEAP_MEM=900
   286         ADD_JVM_ARG_IF_OK([-Xms400M -Xmx1100M],SJAVAC_SERVER_JAVA,[$SJAVAC_SERVER_JAVA])
   287     else
   288         MAX_HEAP_MEM=512
   289         ADD_JVM_ARG_IF_OK([-Xms256M -Xmx512M],SJAVAC_SERVER_JAVA,[$SJAVAC_SERVER_JAVA])
   290     fi
   292     ADD_JVM_ARG_IF_OK([-XX:PermSize=32m],SJAVAC_SERVER_JAVA,[$SJAVAC_SERVER_JAVA])
   293     ADD_JVM_ARG_IF_OK([-XX:MaxPermSize=160m],SJAVAC_SERVER_JAVA,[$SJAVAC_SERVER_JAVA])
   294     ADD_JVM_ARG_IF_OK([-XX:ThreadStackSize=$STACK_SIZE],SJAVAC_SERVER_JAVA,[$SJAVAC_SERVER_JAVA])
   296     MAX_COMPILERS_IN_HEAP=`expr $MAX_HEAP_MEM / 501`
   297     if test "$SJAVAC_SERVER_CORES" -gt "$MAX_COMPILERS_IN_HEAP"; then
   298         AC_MSG_CHECKING([if number of server cores must be reduced])
   299         SJAVAC_SERVER_CORES="$MAX_COMPILERS_IN_HEAP"
   300         AC_MSG_RESULT([yes, to $SJAVAC_SERVER_CORES with max heap size $MAX_HEAP_MEM MB])
   301     fi
   302 fi                    
   303 AC_SUBST(SJAVAC_SERVER_CORES)
   305 AC_MSG_CHECKING([whether to use sjavac])
   306 AC_ARG_ENABLE([sjavac], [AS_HELP_STRING([--enable-sjavac],
   307 	[use sjavac to do fast incremental compiles @<:@disabled@:>@])],
   308 	[ENABLE_SJAVAC="${enableval}"], [ENABLE_SJAVAC='no'])
   309 AC_MSG_RESULT([$ENABLE_SJAVAC])
   310 AC_SUBST(ENABLE_SJAVAC)
   312 if test "x$ENABLE_SJAVAC" = xyes; then
   313     SJAVAC_SERVER_DIR="$OUTPUT_ROOT/javacservers"
   314 else
   315     SJAVAC_SERVER_DIR=
   316 fi
   317 AC_SUBST(SJAVAC_SERVER_DIR)
   319 ])

mercurial