build-performance.m4 11.9 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
#
# Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved.
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
#
# This code is free software; you can redistribute it and/or modify it
# under the terms of the GNU General Public License version 2 only, as
# published by the Free Software Foundation.  Oracle designates this
# particular file as subject to the "Classpath" exception as provided
# by Oracle in the LICENSE file that accompanied this code.
#
# This code is distributed in the hope that it will be useful, but WITHOUT
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
# version 2 for more details (a copy is included in the LICENSE file that
# accompanied this code).
#
# You should have received a copy of the GNU General Public License version
# 2 along with this work; if not, write to the Free Software Foundation,
# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
#
# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
# or visit www.oracle.com if you need additional information or have any
# questions.
#

AC_DEFUN([BPERF_CHECK_CORES],
[
    AC_MSG_CHECKING([for number of cores])
    NUM_CORES=1
    FOUND_CORES=no
    
    if test -f /proc/cpuinfo; then
33
        # Looks like a Linux (or cygwin) system
34 35
        NUM_CORES=`cat /proc/cpuinfo  | grep -c processor`
        FOUND_CORES=yes
36
    elif test -x /usr/sbin/psrinfo; then
37 38 39
        # Looks like a Solaris system
        NUM_CORES=`LC_MESSAGES=C /usr/sbin/psrinfo -v | grep -c on-line`
        FOUND_CORES=yes
40
    elif test -x /usr/sbin/system_profiler; then
41 42 43
        # Looks like a MacOSX system
        NUM_CORES=`/usr/sbin/system_profiler -detailLevel full SPHardwareDataType | grep 'Cores' | awk  '{print [$]5}'`
        FOUND_CORES=yes
S
simonis 已提交
44 45 46
    elif test "x$OPENJDK_BUILD_OS" = xaix ; then
        NUM_CORES=`/usr/sbin/prtconf | grep "^Number Of Processors" | awk '{ print [$]4 }'`
        FOUND_CORES=yes
O
ohair 已提交
47 48 49 50
    elif test -n "$NUMBER_OF_PROCESSORS"; then
        # On windows, look in the env
        NUM_CORES=$NUMBER_OF_PROCESSORS
        FOUND_CORES=yes
51 52 53 54 55
    fi

    if test "x$FOUND_CORES" = xyes; then
        AC_MSG_RESULT([$NUM_CORES])
    else
O
ohair 已提交
56 57
        AC_MSG_RESULT([could not detect number of cores, defaulting to 1])
        AC_MSG_WARN([This will disable all parallelism from build!])
58 59 60 61 62 63 64
    fi 

])

AC_DEFUN([BPERF_CHECK_MEMORY_SIZE],
[
    AC_MSG_CHECKING([for memory size])
65
    # Default to 1024 MB
66 67 68
    MEMORY_SIZE=1024
    FOUND_MEM=no
    
69 70
    if test -f /proc/meminfo; then
        # Looks like a Linux (or cygwin) system
71 72 73
        MEMORY_SIZE=`cat /proc/meminfo | grep MemTotal | awk '{print [$]2}'`
        MEMORY_SIZE=`expr $MEMORY_SIZE / 1024`
        FOUND_MEM=yes
74
    elif test -x /usr/sbin/prtconf; then
S
simonis 已提交
75 76
        # Looks like a Solaris or AIX system
        MEMORY_SIZE=`/usr/sbin/prtconf | grep "^Memory [[Ss]]ize" | awk '{ print [$]3 }'`
77
        FOUND_MEM=yes
78
    elif test -x /usr/sbin/system_profiler; then
79 80 81 82
        # Looks like a MacOSX system
        MEMORY_SIZE=`/usr/sbin/system_profiler -detailLevel full SPHardwareDataType | grep 'Memory' | awk  '{print [$]2}'`
        MEMORY_SIZE=`expr $MEMORY_SIZE \* 1024`
        FOUND_MEM=yes
O
ohair 已提交
83
    elif test "x$OPENJDK_BUILD_OS" = xwindows; then
84
        # Windows, but without cygwin
O
ohair 已提交
85 86
        MEMORY_SIZE=`wmic computersystem get totalphysicalmemory -value | grep = | cut -d "=" -f 2-`
        MEMORY_SIZE=`expr $MEMORY_SIZE / 1024 / 1024`
87 88 89 90 91 92
        FOUND_MEM=yes    
    fi

    if test "x$FOUND_MEM" = xyes; then
        AC_MSG_RESULT([$MEMORY_SIZE MB])
    else
O
ohair 已提交
93 94
        AC_MSG_RESULT([could not detect memory size, defaulting to 1024 MB])
        AC_MSG_WARN([This might seriously impact build performance!])
95 96 97 98 99
    fi 
])

AC_DEFUN_ONCE([BPERF_SETUP_BUILD_CORES],
[
100 101
  # How many cores do we have on this build system?
  AC_ARG_WITH(num-cores, [AS_HELP_STRING([--with-num-cores],
102
    [number of cores in the build system, e.g. --with-num-cores=8 @<:@probed@:>@])])
103
  if test "x$with_num_cores" = x; then
104 105
    # The number of cores were not specified, try to probe them.
    BPERF_CHECK_CORES
106
  else
107
    NUM_CORES=$with_num_cores
108 109
  fi
  AC_SUBST(NUM_CORES)
110 111 112 113
])

AC_DEFUN_ONCE([BPERF_SETUP_BUILD_MEMORY],
[
114 115
  # How much memory do we have on this build system?
  AC_ARG_WITH(memory-size, [AS_HELP_STRING([--with-memory-size],
116
    [memory (in MB) available in the build system, e.g. --with-memory-size=1024 @<:@probed@:>@])])
117
  if test "x$with_memory_size" = x; then
118 119
    # The memory size was not specified, try to probe it.
    BPERF_CHECK_MEMORY_SIZE
120
  else
121
    MEMORY_SIZE=$with_memory_size
122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150
  fi
  AC_SUBST(MEMORY_SIZE)
])

AC_DEFUN_ONCE([BPERF_SETUP_BUILD_JOBS],
[
  # Provide a decent default number of parallel jobs for make depending on 
  # number of cores, amount of memory and machine architecture.
  AC_ARG_WITH(jobs, [AS_HELP_STRING([--with-jobs],
    [number of parallel jobs to let make run @<:@calculated based on cores and memory@:>@])])
  if test "x$with_jobs" = x; then
    # Number of jobs was not specified, calculate.
    AC_MSG_CHECKING([for appropriate number of jobs to run in parallel])
    # Approximate memory in GB, rounding up a bit.
    memory_gb=`expr $MEMORY_SIZE / 1100`
    # Pick the lowest of memory in gb and number of cores.
    if test "$memory_gb" -lt "$NUM_CORES"; then
      JOBS="$memory_gb"
    else
      JOBS="$NUM_CORES"
      # On bigger machines, leave some room for other processes to run
      if test "$JOBS" -gt "4"; then
        JOBS=`expr $JOBS '*' 90 / 100`
      fi
    fi
    # Cap number of jobs to 16
    if test "$JOBS" -gt "16"; then
      JOBS=16
    fi
151 152 153
    if test "$JOBS" -eq "0"; then
      JOBS=1
    fi
154 155 156 157 158
    AC_MSG_RESULT([$JOBS])
  else
    JOBS=$with_jobs
  fi
  AC_SUBST(JOBS)
159 160 161 162 163 164
])

AC_DEFUN([BPERF_SETUP_CCACHE],
[
    AC_ARG_ENABLE([ccache],
	      [AS_HELP_STRING([--disable-ccache],
O
ohair 已提交
165
	      		      [disable using ccache to speed up recompilations @<:@enabled@:>@])],
166 167
              [ENABLE_CCACHE=${enable_ccache}], [ENABLE_CCACHE=yes])
    if test "x$ENABLE_CCACHE" = xyes; then
168 169 170 171
        OLD_PATH="$PATH"
        if test "x$TOOLS_DIR" != x; then
          PATH=$TOOLS_DIR:$PATH
        fi
172
        AC_PATH_PROG(CCACHE, ccache)
173
        PATH="$OLD_PATH"
174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242
    else
        AC_MSG_CHECKING([for ccache])
        AC_MSG_RESULT([explicitly disabled])    
        CCACHE=
    fi    
    AC_SUBST(CCACHE)

    AC_ARG_WITH([ccache-dir],
	      [AS_HELP_STRING([--with-ccache-dir],
	      		      [where to store ccache files @<:@~/.ccache@:>@])])

    if test "x$with_ccache_dir" != x; then
        # When using a non home ccache directory, assume the use is to share ccache files
        # with other users. Thus change the umask.
        SET_CCACHE_DIR="CCACHE_DIR=$with_ccache_dir CCACHE_UMASK=002"
    fi
    CCACHE_FOUND=""
    if test "x$CCACHE" != x; then
        BPERF_SETUP_CCACHE_USAGE
    fi    
])

AC_DEFUN([BPERF_SETUP_CCACHE_USAGE],
[
    if test "x$CCACHE" != x; then
        CCACHE_FOUND="true"
        # Only use ccache if it is 3.1.4 or later, which supports
        # precompiled headers.
        AC_MSG_CHECKING([if ccache supports precompiled headers])
        HAS_GOOD_CCACHE=`($CCACHE --version | head -n 1 | grep -E 3.1.@<:@456789@:>@) 2> /dev/null`
        if test "x$HAS_GOOD_CCACHE" = x; then
            AC_MSG_RESULT([no, disabling ccache])
            CCACHE=
        else
            AC_MSG_RESULT([yes])
            AC_MSG_CHECKING([if C-compiler supports ccache precompiled headers])
            PUSHED_FLAGS="$CXXFLAGS"
            CXXFLAGS="-fpch-preprocess $CXXFLAGS"
            AC_COMPILE_IFELSE([AC_LANG_PROGRAM([], [])], [CC_KNOWS_CCACHE_TRICK=yes], [CC_KNOWS_CCACHE_TRICK=no])
            CXXFLAGS="$PUSHED_FLAGS"
            if test "x$CC_KNOWS_CCACHE_TRICK" = xyes; then
                AC_MSG_RESULT([yes])
            else
                AC_MSG_RESULT([no, disabling ccaching of precompiled headers])
                CCACHE=
            fi
        fi
    fi

    if test "x$CCACHE" != x; then
        CCACHE_SLOPPINESS=time_macros
        CCACHE="CCACHE_COMPRESS=1 $SET_CCACHE_DIR CCACHE_SLOPPINESS=$CCACHE_SLOPPINESS $CCACHE"
        CCACHE_FLAGS=-fpch-preprocess

        if test "x$SET_CCACHE_DIR" != x; then
            mkdir -p $CCACHE_DIR > /dev/null 2>&1
	    chmod a+rwxs $CCACHE_DIR > /dev/null 2>&1
        fi
    fi
])

AC_DEFUN_ONCE([BPERF_SETUP_PRECOMPILED_HEADERS],
[
       
###############################################################################
#
# Can the C/C++ compiler use precompiled headers?
#
AC_ARG_ENABLE([precompiled-headers], [AS_HELP_STRING([--disable-precompiled-headers],
O
ohair 已提交
243
	[disable using precompiled headers when compiling C++ @<:@enabled@:>@])],
244
    [ENABLE_PRECOMPH=${enable_precompiled_headers}], [ENABLE_PRECOMPH=yes])
245 246 247 248 249 250 251 252 253

USE_PRECOMPILED_HEADER=1
if test "x$ENABLE_PRECOMPH" = xno; then
    USE_PRECOMPILED_HEADER=0
fi

if test "x$ENABLE_PRECOMPH" = xyes; then
    # Check that the compiler actually supports precomp headers.
    if test "x$GCC" = xyes; then
254
         AC_MSG_CHECKING([that precompiled headers work])
255
         echo "int alfa();" > conftest.h
256
         $CXX -x c++-header conftest.h -o conftest.hpp.gch 2>&AS_MESSAGE_LOG_FD >&AS_MESSAGE_LOG_FD
257 258 259 260 261 262
         if test ! -f conftest.hpp.gch; then
             USE_PRECOMPILED_HEADER=0
             AC_MSG_RESULT([no])        
         else
             AC_MSG_RESULT([yes])
         fi
263
         rm -f conftest.h conftest.hpp.gch
264 265 266 267 268 269 270 271 272
    fi
fi

AC_SUBST(USE_PRECOMPILED_HEADER)
])


AC_DEFUN_ONCE([BPERF_SETUP_SMART_JAVAC],
[
273
AC_ARG_WITH(sjavac-server-java, [AS_HELP_STRING([--with-sjavac-server-java],
O
ohair 已提交
274
	[use this java binary for running the sjavac background server @<:@Boot JDK java@:>@])])
275

276 277 278
if test "x$with_sjavac_server_java" != x; then
    SJAVAC_SERVER_JAVA="$with_sjavac_server_java"
    FOUND_VERSION=`$SJAVAC_SERVER_JAVA -version 2>&1 | grep " version \""`
279
    if test "x$FOUND_VERSION" = x; then
280
        AC_MSG_ERROR([Could not execute server java: $SJAVAC_SERVER_JAVA])
281 282
    fi
else
283
    SJAVAC_SERVER_JAVA=""
284
    # Hotspot specific options.
285
    ADD_JVM_ARG_IF_OK([-verbosegc],SJAVAC_SERVER_JAVA,[$JAVA])
286
    # JRockit specific options.
287 288
    ADD_JVM_ARG_IF_OK([-Xverbose:gc],SJAVAC_SERVER_JAVA,[$JAVA])
    SJAVAC_SERVER_JAVA="$JAVA $SJAVAC_SERVER_JAVA"
289
fi                    
290
AC_SUBST(SJAVAC_SERVER_JAVA)
291

E
erikj 已提交
292 293 294 295 296 297
if test "$MEMORY_SIZE" -gt "2500"; then
    ADD_JVM_ARG_IF_OK([-d64],SJAVAC_SERVER_JAVA,[$SJAVAC_SERVER_JAVA])
    if test "$JVM_ARG_OK" = true; then
        JVM_64BIT=true
	JVM_ARG_OK=false
    fi
298 299
    fi

E
erikj 已提交
300
if test "$JVM_64BIT" = true; then
301
    if test "$MEMORY_SIZE" -gt "17000"; then
302
        ADD_JVM_ARG_IF_OK([-Xms10G -Xmx10G],SJAVAC_SERVER_JAVA,[$SJAVAC_SERVER_JAVA])
E
erikj 已提交
303 304
    fi
    if test "$MEMORY_SIZE" -gt "10000" && test "$JVM_ARG_OK" = false; then
305
        ADD_JVM_ARG_IF_OK([-Xms6G -Xmx6G],SJAVAC_SERVER_JAVA,[$SJAVAC_SERVER_JAVA])
E
erikj 已提交
306 307
    fi
    if test "$MEMORY_SIZE" -gt "5000" && test "$JVM_ARG_OK" = false; then
308
        ADD_JVM_ARG_IF_OK([-Xms1G -Xmx3G],SJAVAC_SERVER_JAVA,[$SJAVAC_SERVER_JAVA])
309
    fi
E
erikj 已提交
310 311
    if test "$MEMORY_SIZE" -gt "3800" && test "$JVM_ARG_OK" = false; then
        ADD_JVM_ARG_IF_OK([-Xms1G -Xmx2500M],SJAVAC_SERVER_JAVA,[$SJAVAC_SERVER_JAVA])
312
    fi
E
erikj 已提交
313 314 315 316 317 318 319 320 321 322
fi
if test "$MEMORY_SIZE" -gt "2500" && test "$JVM_ARG_OK" = false; then
    ADD_JVM_ARG_IF_OK([-Xms1000M -Xmx1500M],SJAVAC_SERVER_JAVA,[$SJAVAC_SERVER_JAVA])
fi
if test "$MEMORY_SIZE" -gt "1000" && test "$JVM_ARG_OK" = false; then
    ADD_JVM_ARG_IF_OK([-Xms400M -Xmx1100M],SJAVAC_SERVER_JAVA,[$SJAVAC_SERVER_JAVA])
fi
if test "$JVM_ARG_OK" = false; then
    ADD_JVM_ARG_IF_OK([-Xms256M -Xmx512M],SJAVAC_SERVER_JAVA,[$SJAVAC_SERVER_JAVA])
fi
323 324 325 326 327 328 329 330

AC_MSG_CHECKING([whether to use sjavac])
AC_ARG_ENABLE([sjavac], [AS_HELP_STRING([--enable-sjavac],
	[use sjavac to do fast incremental compiles @<:@disabled@:>@])],
	[ENABLE_SJAVAC="${enableval}"], [ENABLE_SJAVAC='no'])
AC_MSG_RESULT([$ENABLE_SJAVAC])
AC_SUBST(ENABLE_SJAVAC)

331 332 333 334 335 336 337
if test "x$ENABLE_SJAVAC" = xyes; then
    SJAVAC_SERVER_DIR="$OUTPUT_ROOT/javacservers"
else
    SJAVAC_SERVER_DIR=
fi
AC_SUBST(SJAVAC_SERVER_DIR)

338
])