1 # 2 # Copyright (c) 2011, 2018, 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 # 25 26 ################################################################################ 27 # 28 # Setup ABI profile (for arm) 29 # 30 AC_DEFUN([FLAGS_SETUP_ABI_PROFILE], 31 [ 32 AC_ARG_WITH(abi-profile, [AS_HELP_STRING([--with-abi-profile], 33 [specify ABI profile for ARM builds (arm-vfp-sflt,arm-vfp-hflt,arm-sflt, armv5-vfp-sflt,armv6-vfp-hflt,arm64,aarch64) @<:@toolchain dependent@:>@ ])]) 34 35 if test "x$with_abi_profile" != x; then 36 if test "x$OPENJDK_TARGET_CPU" != xarm && \ 37 test "x$OPENJDK_TARGET_CPU" != xaarch64; then 38 AC_MSG_ERROR([--with-abi-profile only available on arm/aarch64]) 39 fi 40 41 OPENJDK_TARGET_ABI_PROFILE=$with_abi_profile 42 AC_MSG_CHECKING([for ABI profle]) 43 AC_MSG_RESULT([$OPENJDK_TARGET_ABI_PROFILE]) 44 45 if test "x$OPENJDK_TARGET_ABI_PROFILE" = xarm-vfp-sflt; then 46 ARM_FLOAT_TYPE=vfp-sflt 47 ARM_ARCH_TYPE_FLAGS='-march=armv7-a -mthumb' 48 elif test "x$OPENJDK_TARGET_ABI_PROFILE" = xarm-vfp-hflt; then 49 ARM_FLOAT_TYPE=vfp-hflt 50 ARM_ARCH_TYPE_FLAGS='-march=armv7-a -mthumb' 51 elif test "x$OPENJDK_TARGET_ABI_PROFILE" = xarm-sflt; then 52 ARM_FLOAT_TYPE=sflt 53 ARM_ARCH_TYPE_FLAGS='-march=armv5t -marm' 54 elif test "x$OPENJDK_TARGET_ABI_PROFILE" = xarmv5-vfp-sflt; then 55 ARM_FLOAT_TYPE=vfp-sflt 56 ARM_ARCH_TYPE_FLAGS='-march=armv5t -marm' 57 elif test "x$OPENJDK_TARGET_ABI_PROFILE" = xarmv6-vfp-hflt; then 58 ARM_FLOAT_TYPE=vfp-hflt 59 ARM_ARCH_TYPE_FLAGS='-march=armv6 -marm' 60 elif test "x$OPENJDK_TARGET_ABI_PROFILE" = xarm64; then 61 # No special flags, just need to trigger setting JDK_ARCH_ABI_PROP_NAME 62 ARM_FLOAT_TYPE= 63 ARM_ARCH_TYPE_FLAGS= 64 elif test "x$OPENJDK_TARGET_ABI_PROFILE" = xaarch64; then 65 # No special flags, just need to trigger setting JDK_ARCH_ABI_PROP_NAME 66 ARM_FLOAT_TYPE= 67 ARM_ARCH_TYPE_FLAGS= 68 else 69 AC_MSG_ERROR([Invalid ABI profile: "$OPENJDK_TARGET_ABI_PROFILE"]) 70 fi 71 72 if test "x$ARM_FLOAT_TYPE" = xvfp-sflt; then 73 ARM_FLOAT_TYPE_FLAGS='-mfloat-abi=softfp -mfpu=vfp -DFLOAT_ARCH=-vfp-sflt' 74 elif test "x$ARM_FLOAT_TYPE" = xvfp-hflt; then 75 ARM_FLOAT_TYPE_FLAGS='-mfloat-abi=hard -mfpu=vfp -DFLOAT_ARCH=-vfp-hflt' 76 elif test "x$ARM_FLOAT_TYPE" = xsflt; then 77 ARM_FLOAT_TYPE_FLAGS='-msoft-float -mfpu=vfp' 78 fi 79 AC_MSG_CHECKING([for $ARM_FLOAT_TYPE floating point flags]) 80 AC_MSG_RESULT([$ARM_FLOAT_TYPE_FLAGS]) 81 82 AC_MSG_CHECKING([for arch type flags]) 83 AC_MSG_RESULT([$ARM_ARCH_TYPE_FLAGS]) 84 85 # Now set JDK_ARCH_ABI_PROP_NAME. This is equivalent to the last part of the 86 # autoconf target triplet. 87 [ JDK_ARCH_ABI_PROP_NAME=`$ECHO $OPENJDK_TARGET_AUTOCONF_NAME | $SED -e 's/.*-\([^-]*\)$/\1/'` ] 88 # Sanity check that it is a known ABI. 89 if test "x$JDK_ARCH_ABI_PROP_NAME" != xgnu && \ 90 test "x$JDK_ARCH_ABI_PROP_NAME" != xgnueabi && \ 91 test "x$JDK_ARCH_ABI_PROP_NAME" != xgnueabihf; then 92 AC_MSG_WARN([Unknown autoconf target triplet ABI: "$JDK_ARCH_ABI_PROP_NAME"]) 93 fi 94 AC_MSG_CHECKING([for ABI property name]) 95 AC_MSG_RESULT([$JDK_ARCH_ABI_PROP_NAME]) 96 AC_SUBST(JDK_ARCH_ABI_PROP_NAME) 97 98 # Pass these on to the open part of configure as if they were set using 99 # --with-extra-c[xx]flags. 100 EXTRA_CFLAGS="$EXTRA_CFLAGS $ARM_ARCH_TYPE_FLAGS $ARM_FLOAT_TYPE_FLAGS" 101 EXTRA_CXXFLAGS="$EXTRA_CXXFLAGS $ARM_ARCH_TYPE_FLAGS $ARM_FLOAT_TYPE_FLAGS" 102 # Get rid of annoying "note: the mangling of 'va_list' has changed in GCC 4.4" 103 # FIXME: This should not really be set using extra_cflags. 104 if test "x$OPENJDK_TARGET_CPU" = xarm; then 105 EXTRA_CFLAGS="$EXTRA_CFLAGS -Wno-psabi" 106 EXTRA_CXXFLAGS="$EXTRA_CXXFLAGS -Wno-psabi" 107 fi 108 # Also add JDK_ARCH_ABI_PROP_NAME define, but only to CFLAGS. 109 EXTRA_CFLAGS="$EXTRA_CFLAGS -DJDK_ARCH_ABI_PROP_NAME='\"\$(JDK_ARCH_ABI_PROP_NAME)\"'" 110 # And pass the architecture flags to the linker as well 111 EXTRA_LDFLAGS="$EXTRA_LDFLAGS $ARM_ARCH_TYPE_FLAGS $ARM_FLOAT_TYPE_FLAGS" 112 fi 113 114 # When building with an abi profile, the name of that profile is appended on the 115 # bundle platform, which is used in bundle names. 116 if test "x$OPENJDK_TARGET_ABI_PROFILE" != x; then 117 OPENJDK_TARGET_BUNDLE_PLATFORM="$OPENJDK_TARGET_OS_BUNDLE-$OPENJDK_TARGET_ABI_PROFILE" 118 fi 119 ]) 120 121 # Reset the global CFLAGS/LDFLAGS variables and initialize them with the 122 # corresponding configure arguments instead 123 AC_DEFUN_ONCE([FLAGS_SETUP_USER_SUPPLIED_FLAGS], 124 [ 125 if test "x$CFLAGS" != "x${ADDED_CFLAGS}"; then 126 AC_MSG_WARN([Ignoring CFLAGS($CFLAGS) found in environment. Use --with-extra-cflags]) 127 fi 128 129 if test "x$CXXFLAGS" != "x${ADDED_CXXFLAGS}"; then 130 AC_MSG_WARN([Ignoring CXXFLAGS($CXXFLAGS) found in environment. Use --with-extra-cxxflags]) 131 fi 132 133 if test "x$LDFLAGS" != "x${ADDED_LDFLAGS}"; then 134 AC_MSG_WARN([Ignoring LDFLAGS($LDFLAGS) found in environment. Use --with-extra-ldflags]) 135 fi 136 137 AC_ARG_WITH(extra-cflags, [AS_HELP_STRING([--with-extra-cflags], 138 [extra flags to be used when compiling jdk c-files])]) 139 140 AC_ARG_WITH(extra-cxxflags, [AS_HELP_STRING([--with-extra-cxxflags], 141 [extra flags to be used when compiling jdk c++-files])]) 142 143 AC_ARG_WITH(extra-ldflags, [AS_HELP_STRING([--with-extra-ldflags], 144 [extra flags to be used when linking jdk])]) 145 146 EXTRA_CFLAGS="$with_extra_cflags" 147 EXTRA_CXXFLAGS="$with_extra_cxxflags" 148 EXTRA_LDFLAGS="$with_extra_ldflags" 149 150 AC_SUBST(EXTRA_CFLAGS) 151 AC_SUBST(EXTRA_CXXFLAGS) 152 AC_SUBST(EXTRA_LDFLAGS) 153 154 # The global CFLAGS and LDLAGS variables are used by configure tests and 155 # should include the extra parameters 156 CFLAGS="$EXTRA_CFLAGS" 157 CXXFLAGS="$EXTRA_CXXFLAGS" 158 LDFLAGS="$EXTRA_LDFLAGS" 159 CPPFLAGS="" 160 ]) 161 162 # Setup the sysroot flags and add them to global CFLAGS and LDFLAGS so 163 # that configure can use them while detecting compilers. 164 # TOOLCHAIN_TYPE is available here. 165 # Param 1 - Optional prefix to all variables. (e.g BUILD_) 166 AC_DEFUN([FLAGS_SETUP_SYSROOT_FLAGS], 167 [ 168 if test "x[$]$1SYSROOT" != "x"; then 169 if test "x$TOOLCHAIN_TYPE" = xsolstudio; then 170 if test "x$OPENJDK_TARGET_OS" = xsolaris; then 171 # Solaris Studio does not have a concept of sysroot. Instead we must 172 # make sure the default include and lib dirs are appended to each 173 # compile and link command line. Must also add -I-xbuiltin to enable 174 # inlining of system functions and intrinsics. 175 $1SYSROOT_CFLAGS="-I-xbuiltin -I[$]$1SYSROOT/usr/include" 176 $1SYSROOT_LDFLAGS="-L[$]$1SYSROOT/usr/lib$OPENJDK_TARGET_CPU_ISADIR \ 177 -L[$]$1SYSROOT/lib$OPENJDK_TARGET_CPU_ISADIR" 178 # If the devkit contains the ld linker, make sure we use it. 179 AC_PATH_PROG(SOLARIS_LD, ld, , $DEVKIT_TOOLCHAIN_PATH:$DEVKIT_EXTRA_PATH) 180 # Make sure this ld is runnable. 181 if test -f "$SOLARIS_LD"; then 182 if "$SOLARIS_LD" -V > /dev/null 2> /dev/null; then 183 $1SYSROOT_LDFLAGS="[$]$1SYSROOT_LDFLAGS -Yl,$(dirname $SOLARIS_LD)" 184 else 185 AC_MSG_WARN([Could not run $SOLARIS_LD found in devkit, reverting to system ld]) 186 fi 187 fi 188 fi 189 elif test "x$TOOLCHAIN_TYPE" = xgcc; then 190 $1SYSROOT_CFLAGS="--sysroot=[$]$1SYSROOT" 191 $1SYSROOT_LDFLAGS="--sysroot=[$]$1SYSROOT" 192 elif test "x$TOOLCHAIN_TYPE" = xclang; then 193 $1SYSROOT_CFLAGS="-isysroot [$]$1SYSROOT" 194 $1SYSROOT_LDFLAGS="-isysroot [$]$1SYSROOT" 195 fi 196 # The global CFLAGS and LDFLAGS variables need these for configure to function 197 $1CFLAGS="[$]$1CFLAGS [$]$1SYSROOT_CFLAGS" 198 $1CPPFLAGS="[$]$1CPPFLAGS [$]$1SYSROOT_CFLAGS" 199 $1CXXFLAGS="[$]$1CXXFLAGS [$]$1SYSROOT_CFLAGS" 200 $1LDFLAGS="[$]$1LDFLAGS [$]$1SYSROOT_LDFLAGS" 201 fi 202 203 if test "x$OPENJDK_TARGET_OS" = xmacosx; then 204 # We also need -iframework<path>/System/Library/Frameworks 205 $1SYSROOT_CFLAGS="[$]$1SYSROOT_CFLAGS -iframework [$]$1SYSROOT/System/Library/Frameworks" 206 $1SYSROOT_LDFLAGS="[$]$1SYSROOT_LDFLAGS -iframework [$]$1SYSROOT/System/Library/Frameworks" 207 # These always need to be set, or we can't find the frameworks embedded in JavaVM.framework 208 # set this here so it doesn't have to be peppered throughout the forest 209 $1SYSROOT_CFLAGS="[$]$1SYSROOT_CFLAGS -F [$]$1SYSROOT/System/Library/Frameworks/JavaVM.framework/Frameworks" 210 $1SYSROOT_LDFLAGS="[$]$1SYSROOT_LDFLAGS -F [$]$1SYSROOT/System/Library/Frameworks/JavaVM.framework/Frameworks" 211 fi 212 213 AC_SUBST($1SYSROOT_CFLAGS) 214 AC_SUBST($1SYSROOT_LDFLAGS) 215 ]) 216 217 AC_DEFUN_ONCE([FLAGS_SETUP_INIT_FLAGS], 218 [ 219 # COMPILER_TARGET_BITS_FLAG : option for selecting 32- or 64-bit output 220 # COMPILER_COMMAND_FILE_FLAG : option for passing a command file to the compiler 221 # COMPILER_BINDCMD_FILE_FLAG : option for specifying a file which saves the binder 222 # commands produced by the link step (currently AIX only) 223 if test "x$TOOLCHAIN_TYPE" = xxlc; then 224 COMPILER_TARGET_BITS_FLAG="-q" 225 COMPILER_COMMAND_FILE_FLAG="-f" 226 COMPILER_BINDCMD_FILE_FLAG="-bloadmap:" 227 else 228 COMPILER_TARGET_BITS_FLAG="-m" 229 COMPILER_COMMAND_FILE_FLAG="@" 230 COMPILER_BINDCMD_FILE_FLAG="" 231 232 # The solstudio linker does not support @-files. 233 if test "x$TOOLCHAIN_TYPE" = xsolstudio; then 234 COMPILER_COMMAND_FILE_FLAG= 235 fi 236 237 # Check if @file is supported by gcc 238 if test "x$TOOLCHAIN_TYPE" = xgcc; then 239 AC_MSG_CHECKING([if @file is supported by gcc]) 240 # Extra emtpy "" to prevent ECHO from interpreting '--version' as argument 241 $ECHO "" "--version" > command.file 242 if $CXX @command.file 2>&AS_MESSAGE_LOG_FD >&AS_MESSAGE_LOG_FD; then 243 AC_MSG_RESULT(yes) 244 COMPILER_COMMAND_FILE_FLAG="@" 245 else 246 AC_MSG_RESULT(no) 247 COMPILER_COMMAND_FILE_FLAG= 248 fi 249 $RM command.file 250 fi 251 fi 252 AC_SUBST(COMPILER_TARGET_BITS_FLAG) 253 AC_SUBST(COMPILER_COMMAND_FILE_FLAG) 254 AC_SUBST(COMPILER_BINDCMD_FILE_FLAG) 255 256 # FIXME: figure out if we should select AR flags depending on OS or toolchain. 257 if test "x$OPENJDK_TARGET_OS" = xmacosx; then 258 ARFLAGS="-r" 259 elif test "x$OPENJDK_TARGET_OS" = xaix; then 260 ARFLAGS="-X64" 261 elif test "x$OPENJDK_TARGET_OS" = xwindows; then 262 # lib.exe is used as AR to create static libraries. 263 ARFLAGS="-nologo -NODEFAULTLIB:MSVCRT" 264 else 265 ARFLAGS="" 266 fi 267 AC_SUBST(ARFLAGS) 268 269 ## Setup strip. 270 # FIXME: should this really be per platform, or should it be per toolchain type? 271 # strip is not provided by clang or solstudio; so guessing platform makes most sense. 272 # FIXME: we should really only export STRIPFLAGS from here, not POST_STRIP_CMD. 273 if test "x$OPENJDK_TARGET_OS" = xlinux; then 274 STRIPFLAGS="-g" 275 elif test "x$OPENJDK_TARGET_OS" = xsolaris; then 276 STRIPFLAGS="-x" 277 elif test "x$OPENJDK_TARGET_OS" = xmacosx; then 278 STRIPFLAGS="-S" 279 elif test "x$OPENJDK_TARGET_OS" = xaix; then 280 STRIPFLAGS="-X32_64" 281 fi 282 283 AC_SUBST(STRIPFLAGS) 284 285 if test "x$TOOLCHAIN_TYPE" = xmicrosoft; then 286 CC_OUT_OPTION=-Fo 287 EXE_OUT_OPTION=-out: 288 LD_OUT_OPTION=-out: 289 AR_OUT_OPTION=-out: 290 else 291 # The option used to specify the target .o,.a or .so file. 292 # When compiling, how to specify the to be created object file. 293 CC_OUT_OPTION='-o$(SPACE)' 294 # When linking, how to specify the to be created executable. 295 EXE_OUT_OPTION='-o$(SPACE)' 296 # When linking, how to specify the to be created dynamically linkable library. 297 LD_OUT_OPTION='-o$(SPACE)' 298 # When archiving, how to specify the to be create static archive for object files. 299 AR_OUT_OPTION='rcs$(SPACE)' 300 fi 301 AC_SUBST(CC_OUT_OPTION) 302 AC_SUBST(EXE_OUT_OPTION) 303 AC_SUBST(LD_OUT_OPTION) 304 AC_SUBST(AR_OUT_OPTION) 305 306 # On Windows, we need to set RC flags. 307 if test "x$TOOLCHAIN_TYPE" = xmicrosoft; then 308 RC_FLAGS="-nologo -l0x409" 309 JVM_RCFLAGS="-nologo" 310 if test "x$DEBUG_LEVEL" = xrelease; then 311 RC_FLAGS="$RC_FLAGS -DNDEBUG" 312 JVM_RCFLAGS="$JVM_RCFLAGS -DNDEBUG" 313 fi 314 315 # The version variables used to create RC_FLAGS may be overridden 316 # in a custom configure script, or possibly the command line. 317 # Let those variables be expanded at make time in spec.gmk. 318 # The \$ are escaped to the shell, and the $(...) variables 319 # are evaluated by make. 320 RC_FLAGS="$RC_FLAGS \ 321 -D\"JDK_VERSION_STRING=\$(VERSION_STRING)\" \ 322 -D\"JDK_COMPANY=\$(COMPANY_NAME)\" \ 323 -D\"JDK_COMPONENT=\$(PRODUCT_NAME) \$(JDK_RC_PLATFORM_NAME) binary\" \ 324 -D\"JDK_VER=\$(VERSION_NUMBER)\" \ 325 -D\"JDK_COPYRIGHT=Copyright \xA9 $COPYRIGHT_YEAR\" \ 326 -D\"JDK_NAME=\$(PRODUCT_NAME) \$(JDK_RC_PLATFORM_NAME) \$(VERSION_FEATURE)\" \ 327 -D\"JDK_FVER=\$(subst .,\$(COMMA),\$(VERSION_NUMBER_FOUR_POSITIONS))\"" 328 329 JVM_RCFLAGS="$JVM_RCFLAGS \ 330 -D\"HS_BUILD_ID=\$(VERSION_STRING)\" \ 331 -D\"HS_COMPANY=\$(COMPANY_NAME)\" \ 332 -D\"JDK_DOTVER=\$(VERSION_NUMBER_FOUR_POSITIONS)\" \ 333 -D\"HS_COPYRIGHT=Copyright $COPYRIGHT_YEAR\" \ 334 -D\"HS_NAME=\$(PRODUCT_NAME) \$(VERSION_SHORT)\" \ 335 -D\"JDK_VER=\$(subst .,\$(COMMA),\$(VERSION_NUMBER_FOUR_POSITIONS))\" \ 336 -D\"HS_FNAME=jvm.dll\" \ 337 -D\"HS_INTERNAL_NAME=jvm\"" 338 fi 339 AC_SUBST(RC_FLAGS) 340 AC_SUBST(JVM_RCFLAGS) 341 342 if test "x$TOOLCHAIN_TYPE" = xmicrosoft; then 343 # silence copyright notice and other headers. 344 COMMON_CCXXFLAGS="$COMMON_CCXXFLAGS -nologo" 345 fi 346 ]) 347 348 AC_DEFUN([FLAGS_SETUP_COMPILER_FLAGS_FOR_LIBS], 349 [ 350 ############################################################################### 351 # 352 # How to compile shared libraries. 353 # 354 355 if test "x$TOOLCHAIN_TYPE" = xgcc; then 356 PICFLAG="-fPIC" 357 C_FLAG_REORDER='' 358 CXX_FLAG_REORDER='' 359 360 if test "x$OPENJDK_TARGET_OS" = xmacosx; then 361 # Linking is different on MacOSX 362 if test "x$STATIC_BUILD" = xtrue; then 363 SHARED_LIBRARY_FLAGS ='-undefined dynamic_lookup' 364 else 365 SHARED_LIBRARY_FLAGS="-dynamiclib -compatibility_version 1.0.0 -current_version 1.0.0 $PICFLAG" 366 JVM_CFLAGS="$JVM_CFLAGS $PICFLAG" 367 fi 368 SET_EXECUTABLE_ORIGIN='-Wl,-rpath,@loader_path$(or [$]1,/.)' 369 SET_SHARED_LIBRARY_ORIGIN="$SET_EXECUTABLE_ORIGIN" 370 SET_SHARED_LIBRARY_NAME='-Wl,-install_name,@rpath/[$]1' 371 SET_SHARED_LIBRARY_MAPFILE='-Wl,-exported_symbols_list,[$]1' 372 else 373 # Default works for linux, might work on other platforms as well. 374 SHARED_LIBRARY_FLAGS='-shared' 375 SET_EXECUTABLE_ORIGIN='-Wl,-rpath,\$$ORIGIN[$]1' 376 SET_SHARED_LIBRARY_ORIGIN="-Wl,-z,origin $SET_EXECUTABLE_ORIGIN" 377 SET_SHARED_LIBRARY_NAME='-Wl,-soname=[$]1' 378 SET_SHARED_LIBRARY_MAPFILE='-Wl,-version-script=[$]1' 379 fi 380 elif test "x$TOOLCHAIN_TYPE" = xclang; then 381 C_FLAG_REORDER='' 382 CXX_FLAG_REORDER='' 383 384 if test "x$OPENJDK_TARGET_OS" = xmacosx; then 385 # Linking is different on MacOSX 386 PICFLAG='' 387 SHARED_LIBRARY_FLAGS="-dynamiclib -compatibility_version 1.0.0 -current_version 1.0.0 $PICFLAG" 388 SET_EXECUTABLE_ORIGIN='-Wl,-rpath,@loader_path$(or [$]1,/.)' 389 SET_SHARED_LIBRARY_ORIGIN="$SET_EXECUTABLE_ORIGIN" 390 SET_SHARED_LIBRARY_NAME='-Wl,-install_name,@rpath/[$]1' 391 SET_SHARED_LIBRARY_MAPFILE='-Wl,-exported_symbols_list,[$]1' 392 393 if test "x$STATIC_BUILD" = xfalse; then 394 JVM_CFLAGS="$JVM_CFLAGS -fPIC" 395 fi 396 else 397 # Default works for linux, might work on other platforms as well. 398 PICFLAG='-fPIC' 399 SHARED_LIBRARY_FLAGS='-shared' 400 SET_EXECUTABLE_ORIGIN='-Wl,-rpath,\$$ORIGIN[$]1' 401 SET_SHARED_LIBRARY_NAME='-Wl,-soname=[$]1' 402 SET_SHARED_LIBRARY_MAPFILE='-Wl,-version-script=[$]1' 403 404 # arm specific settings 405 if test "x$OPENJDK_TARGET_CPU" = "xarm"; then 406 # '-Wl,-z,origin' isn't used on arm. 407 SET_SHARED_LIBRARY_ORIGIN='-Wl,-rpath,\$$$$ORIGIN[$]1' 408 else 409 SET_SHARED_LIBRARY_ORIGIN="-Wl,-z,origin $SET_EXECUTABLE_ORIGIN" 410 fi 411 412 fi 413 elif test "x$TOOLCHAIN_TYPE" = xsolstudio; then 414 if test "x$OPENJDK_TARGET_CPU" = xsparcv9; then 415 PICFLAG="-xcode=pic32" 416 else 417 PICFLAG="-KPIC" 418 fi 419 C_FLAG_REORDER='-xF' 420 CXX_FLAG_REORDER='-xF' 421 SHARED_LIBRARY_FLAGS="-G" 422 SET_EXECUTABLE_ORIGIN='-R\$$ORIGIN[$]1' 423 SET_SHARED_LIBRARY_ORIGIN="$SET_EXECUTABLE_ORIGIN" 424 SET_SHARED_LIBRARY_NAME='-h [$]1' 425 SET_SHARED_LIBRARY_MAPFILE='-M[$]1' 426 elif test "x$TOOLCHAIN_TYPE" = xxlc; then 427 # '-qpic' defaults to 'qpic=small'. This means that the compiler generates only 428 # one instruction for accessing the TOC. If the TOC grows larger than 64K, the linker 429 # will have to patch this single instruction with a call to some out-of-order code which 430 # does the load from the TOC. This is of course slow. But in that case we also would have 431 # to use '-bbigtoc' for linking anyway so we could also change the PICFLAG to 'qpic=large'. 432 # With 'qpic=large' the compiler will by default generate a two-instruction sequence which 433 # can be patched directly by the linker and does not require a jump to out-of-order code. 434 # Another alternative instead of using 'qpic=large -bbigtoc' may be to use '-qminimaltoc' 435 # instead. This creates a distinct TOC for every compilation unit (and thus requires two 436 # loads for accessing a global variable). But there are rumors that this may be seen as a 437 # 'performance feature' because of improved code locality of the symbols used in a 438 # compilation unit. 439 PICFLAG="-qpic" 440 JVM_CFLAGS="$JVM_CFLAGS $PICFLAG" 441 C_FLAG_REORDER='' 442 CXX_FLAG_REORDER='' 443 SHARED_LIBRARY_FLAGS="-qmkshrobj -bM:SRE -bnoentry" 444 SET_EXECUTABLE_ORIGIN="" 445 SET_SHARED_LIBRARY_ORIGIN='' 446 SET_SHARED_LIBRARY_NAME='' 447 SET_SHARED_LIBRARY_MAPFILE='' 448 elif test "x$TOOLCHAIN_TYPE" = xmicrosoft; then 449 PICFLAG="" 450 C_FLAG_REORDER='' 451 CXX_FLAG_REORDER='' 452 SHARED_LIBRARY_FLAGS="-dll" 453 SET_EXECUTABLE_ORIGIN='' 454 SET_SHARED_LIBRARY_ORIGIN='' 455 SET_SHARED_LIBRARY_NAME='' 456 SET_SHARED_LIBRARY_MAPFILE='-def:[$]1' 457 fi 458 459 AC_SUBST(C_FLAG_REORDER) 460 AC_SUBST(CXX_FLAG_REORDER) 461 AC_SUBST(SET_EXECUTABLE_ORIGIN) 462 AC_SUBST(SET_SHARED_LIBRARY_ORIGIN) 463 AC_SUBST(SET_SHARED_LIBRARY_NAME) 464 AC_SUBST(SET_SHARED_LIBRARY_MAPFILE) 465 AC_SUBST(SHARED_LIBRARY_FLAGS) 466 467 # The (cross) compiler is now configured, we can now test capabilities 468 # of the target platform. 469 ]) 470 471 # Documentation on common flags used for solstudio in HIGHEST. 472 # 473 # WARNING: Use of OPTIMIZATION_LEVEL=HIGHEST in your Makefile needs to be 474 # done with care, there are some assumptions below that need to 475 # be understood about the use of pointers, and IEEE behavior. 476 # 477 # -fns: Use non-standard floating point mode (not IEEE 754) 478 # -fsimple: Do some simplification of floating point arithmetic (not IEEE 754) 479 # -fsingle: Use single precision floating point with 'float' 480 # -xalias_level=basic: Assume memory references via basic pointer types do not alias 481 # (Source with excessing pointer casting and data access with mixed 482 # pointer types are not recommended) 483 # -xbuiltin=%all: Use intrinsic or inline versions for math/std functions 484 # (If you expect perfect errno behavior, do not use this) 485 # -xdepend: Loop data dependency optimizations (need -xO3 or higher) 486 # -xrestrict: Pointer parameters to functions do not overlap 487 # (Similar to -xalias_level=basic usage, but less obvious sometimes. 488 # If you pass in multiple pointers to the same data, do not use this) 489 # -xlibmil: Inline some library routines 490 # (If you expect perfect errno behavior, do not use this) 491 # -xlibmopt: Use optimized math routines (CURRENTLY DISABLED) 492 # (If you expect perfect errno behavior, do not use this) 493 # Can cause undefined external on Solaris 8 X86 on __sincos, removing for now 494 495 # FIXME: this will never happen since sparc != sparcv9, ie 32 bit, which we don't build anymore. 496 # Bug? 497 #if test "x$OPENJDK_TARGET_CPU" = xsparc; then 498 # CFLAGS_JDK="${CFLAGS_JDK} -xmemalign=4s" 499 # CXXFLAGS_JDK="${CXXFLAGS_JDK} -xmemalign=4s" 500 #fi 501 502 AC_DEFUN_ONCE([FLAGS_SETUP_COMPILER_FLAGS_FOR_OPTIMIZATION], 503 [ 504 505 ############################################################################### 506 # 507 # Setup the opt flags for different compilers 508 # and different operating systems. 509 # 510 511 # FIXME: this was indirectly the old default, but just inherited. 512 # if test "x$TOOLCHAIN_TYPE" = xmicrosoft; then 513 # C_FLAG_DEPS="-MMD -MF" 514 # fi 515 516 # Generate make dependency files 517 if test "x$TOOLCHAIN_TYPE" = xgcc; then 518 C_FLAG_DEPS="-MMD -MF" 519 elif test "x$TOOLCHAIN_TYPE" = xclang; then 520 C_FLAG_DEPS="-MMD -MF" 521 elif test "x$TOOLCHAIN_TYPE" = xsolstudio; then 522 C_FLAG_DEPS="-xMMD -xMF" 523 elif test "x$TOOLCHAIN_TYPE" = xxlc; then 524 C_FLAG_DEPS="-qmakedep=gcc -MF" 525 fi 526 CXX_FLAG_DEPS="$C_FLAG_DEPS" 527 AC_SUBST(C_FLAG_DEPS) 528 AC_SUBST(CXX_FLAG_DEPS) 529 530 # Debug symbols 531 if test "x$TOOLCHAIN_TYPE" = xgcc; then 532 if test "x$OPENJDK_TARGET_CPU_BITS" = "x64" && test "x$DEBUG_LEVEL" = "xfastdebug"; then 533 # reduce from default "-g2" option to save space 534 CFLAGS_DEBUG_SYMBOLS="-g1" 535 CXXFLAGS_DEBUG_SYMBOLS="-g1" 536 else 537 CFLAGS_DEBUG_SYMBOLS="-g" 538 CXXFLAGS_DEBUG_SYMBOLS="-g" 539 fi 540 elif test "x$TOOLCHAIN_TYPE" = xclang; then 541 CFLAGS_DEBUG_SYMBOLS="-g" 542 CXXFLAGS_DEBUG_SYMBOLS="-g" 543 elif test "x$TOOLCHAIN_TYPE" = xsolstudio; then 544 CFLAGS_DEBUG_SYMBOLS="-g -xs" 545 # -g0 enables debug symbols without disabling inlining. 546 CXXFLAGS_DEBUG_SYMBOLS="-g0 -xs" 547 elif test "x$TOOLCHAIN_TYPE" = xxlc; then 548 CFLAGS_DEBUG_SYMBOLS="-g" 549 CXXFLAGS_DEBUG_SYMBOLS="-g" 550 elif test "x$TOOLCHAIN_TYPE" = xmicrosoft; then 551 CFLAGS_DEBUG_SYMBOLS="-Zi" 552 CXXFLAGS_DEBUG_SYMBOLS="-Zi" 553 fi 554 AC_SUBST(CFLAGS_DEBUG_SYMBOLS) 555 AC_SUBST(CXXFLAGS_DEBUG_SYMBOLS) 556 557 # Debug symbols for JVM_CFLAGS 558 if test "x$TOOLCHAIN_TYPE" = xsolstudio; then 559 JVM_CFLAGS_SYMBOLS="$JVM_CFLAGS_SYMBOLS -xs" 560 if test "x$DEBUG_LEVEL" = xslowdebug; then 561 JVM_CFLAGS_SYMBOLS="$JVM_CFLAGS_SYMBOLS -g" 562 else 563 # -g0 does not disable inlining, which -g does. 564 JVM_CFLAGS_SYMBOLS="$JVM_CFLAGS_SYMBOLS -g0" 565 fi 566 elif test "x$TOOLCHAIN_TYPE" = xmicrosoft; then 567 JVM_CFLAGS_SYMBOLS="$JVM_CFLAGS_SYMBOLS -Z7 -d2Zi+" 568 else 569 JVM_CFLAGS_SYMBOLS="$JVM_CFLAGS_SYMBOLS -g" 570 fi 571 AC_SUBST(JVM_CFLAGS_SYMBOLS) 572 573 # bounds, memory and behavior checking options 574 if test "x$TOOLCHAIN_TYPE" = xgcc; then 575 case $DEBUG_LEVEL in 576 release ) 577 # no adjustment 578 ;; 579 fastdebug ) 580 # no adjustment 581 ;; 582 slowdebug ) 583 # FIXME: By adding this to C(XX)FLAGS_DEBUG_OPTIONS/JVM_CFLAGS_SYMBOLS it 584 # get's added conditionally on whether we produce debug symbols or not. 585 # This is most likely not really correct. 586 587 # Add runtime stack smashing and undefined behavior checks. 588 # Not all versions of gcc support -fstack-protector 589 STACK_PROTECTOR_CFLAG="-fstack-protector-all" 590 FLAGS_COMPILER_CHECK_ARGUMENTS(ARGUMENT: [$STACK_PROTECTOR_CFLAG -Werror], IF_FALSE: [STACK_PROTECTOR_CFLAG=""]) 591 592 CFLAGS_DEBUG_OPTIONS="$STACK_PROTECTOR_CFLAG --param ssp-buffer-size=1" 593 CXXFLAGS_DEBUG_OPTIONS="$STACK_PROTECTOR_CFLAG --param ssp-buffer-size=1" 594 if test "x$STACK_PROTECTOR_CFLAG" != x; then 595 JVM_CFLAGS_SYMBOLS="$JVM_CFLAGS_SYMBOLS $STACK_PROTECTOR_CFLAG --param ssp-buffer-size=1" 596 fi 597 ;; 598 esac 599 fi 600 601 if test "x$TOOLCHAIN_TYPE" = xmicrosoft; then 602 if test "x$DEBUG_LEVEL" != xrelease; then 603 if test "x$OPENJDK_TARGET_CPU" = xx86_64; then 604 JVM_CFLAGS="$JVM_CFLAGS -homeparams" 605 fi 606 fi 607 fi 608 609 # Optimization levels 610 if test "x$TOOLCHAIN_TYPE" = xsolstudio; then 611 CC_HIGHEST="$CC_HIGHEST -fns -fsimple -fsingle -xbuiltin=%all -xdepend -xrestrict -xlibmil" 612 613 if test "x$OPENJDK_TARGET_CPU_ARCH" = "xx86"; then 614 # FIXME: seems we always set -xregs=no%frameptr; put it elsewhere more global? 615 C_O_FLAG_HIGHEST_JVM="-xO4" 616 C_O_FLAG_HIGHEST="-xO4 -Wu,-O4~yz $CC_HIGHEST -xalias_level=basic -xregs=no%frameptr" 617 C_O_FLAG_HI="-xO4 -Wu,-O4~yz -xregs=no%frameptr" 618 C_O_FLAG_NORM="-xO2 -Wu,-O2~yz -xregs=no%frameptr" 619 C_O_FLAG_DEBUG="-xregs=no%frameptr" 620 C_O_FLAG_DEBUG_JVM="" 621 C_O_FLAG_NONE="-xregs=no%frameptr" 622 CXX_O_FLAG_HIGHEST_JVM="-xO4" 623 CXX_O_FLAG_HIGHEST="-xO4 -Qoption ube -O4~yz $CC_HIGHEST -xregs=no%frameptr" 624 CXX_O_FLAG_HI="-xO4 -Qoption ube -O4~yz -xregs=no%frameptr" 625 CXX_O_FLAG_NORM="-xO2 -Qoption ube -O2~yz -xregs=no%frameptr" 626 CXX_O_FLAG_DEBUG="-xregs=no%frameptr" 627 CXX_O_FLAG_DEBUG_JVM="" 628 CXX_O_FLAG_NONE="-xregs=no%frameptr" 629 if test "x$OPENJDK_TARGET_CPU_BITS" = "x32"; then 630 C_O_FLAG_HIGHEST="$C_O_FLAG_HIGHEST -xchip=pentium" 631 CXX_O_FLAG_HIGHEST="$CXX_O_FLAG_HIGHEST -xchip=pentium" 632 fi 633 elif test "x$OPENJDK_TARGET_CPU_ARCH" = "xsparc"; then 634 C_O_FLAG_HIGHEST_JVM="-xO4" 635 C_O_FLAG_HIGHEST="-xO4 -Wc,-Qrm-s -Wc,-Qiselect-T0 $CC_HIGHEST -xalias_level=basic -xprefetch=auto,explicit -xchip=ultra" 636 C_O_FLAG_HI="-xO4 -Wc,-Qrm-s -Wc,-Qiselect-T0" 637 C_O_FLAG_NORM="-xO2 -Wc,-Qrm-s -Wc,-Qiselect-T0" 638 C_O_FLAG_DEBUG="" 639 C_O_FLAG_DEBUG_JVM="" 640 C_O_FLAG_NONE="" 641 CXX_O_FLAG_HIGHEST_JVM="-xO4" 642 CXX_O_FLAG_HIGHEST="-xO4 -Qoption cg -Qrm-s -Qoption cg -Qiselect-T0 $CC_HIGHEST -xprefetch=auto,explicit -xchip=ultra" 643 CXX_O_FLAG_HI="-xO4 -Qoption cg -Qrm-s -Qoption cg -Qiselect-T0" 644 CXX_O_FLAG_NORM="-xO2 -Qoption cg -Qrm-s -Qoption cg -Qiselect-T0" 645 CXX_O_FLAG_DEBUG="" 646 CXX_O_FLAG_DEBUG_JVM="" 647 CXX_O_FLAG_NONE="" 648 fi 649 else 650 # The remaining toolchains share opt flags between CC and CXX; 651 # setup for C and duplicate afterwards. 652 if test "x$TOOLCHAIN_TYPE" = xgcc; then 653 if test "x$OPENJDK_TARGET_OS" = xmacosx; then 654 # On MacOSX we optimize for size, something 655 # we should do for all platforms? 656 C_O_FLAG_HIGHEST_JVM="-Os" 657 C_O_FLAG_HIGHEST="-Os" 658 C_O_FLAG_HI="-Os" 659 C_O_FLAG_NORM="-Os" 660 C_O_FLAG_SIZE="-Os" 661 else 662 C_O_FLAG_HIGHEST_JVM="-O3" 663 C_O_FLAG_HIGHEST="-O3" 664 C_O_FLAG_HI="-O3" 665 C_O_FLAG_NORM="-O2" 666 C_O_FLAG_SIZE="-Os" 667 fi 668 C_O_FLAG_DEBUG="-O0" 669 if test "x$OPENJDK_TARGET_OS" = xmacosx; then 670 C_O_FLAG_DEBUG_JVM="" 671 elif test "x$OPENJDK_TARGET_OS" = xlinux; then 672 C_O_FLAG_DEBUG_JVM="-O0" 673 fi 674 C_O_FLAG_NONE="-O0" 675 elif test "x$TOOLCHAIN_TYPE" = xclang; then 676 if test "x$OPENJDK_TARGET_OS" = xmacosx; then 677 # On MacOSX we optimize for size, something 678 # we should do for all platforms? 679 C_O_FLAG_HIGHEST_JVM="-Os" 680 C_O_FLAG_HIGHEST="-Os" 681 C_O_FLAG_HI="-Os" 682 C_O_FLAG_NORM="-Os" 683 C_O_FLAG_SIZE="-Os" 684 else 685 C_O_FLAG_HIGHEST_JVM="-O3" 686 C_O_FLAG_HIGHEST="-O3" 687 C_O_FLAG_HI="-O3" 688 C_O_FLAG_NORM="-O2" 689 C_O_FLAG_SIZE="-Os" 690 fi 691 C_O_FLAG_DEBUG="-O0" 692 if test "x$OPENJDK_TARGET_OS" = xmacosx; then 693 C_O_FLAG_DEBUG_JVM="" 694 elif test "x$OPENJDK_TARGET_OS" = xlinux; then 695 C_O_FLAG_DEBUG_JVM="-O0" 696 fi 697 C_O_FLAG_NONE="-O0" 698 elif test "x$TOOLCHAIN_TYPE" = xxlc; then 699 C_O_FLAG_HIGHEST_JVM="-O3 -qhot=level=1 -qinline -qinlglue" 700 C_O_FLAG_HIGHEST="-O3 -qhot=level=1 -qinline -qinlglue" 701 C_O_FLAG_HI="-O3 -qinline -qinlglue" 702 C_O_FLAG_NORM="-O2" 703 C_O_FLAG_DEBUG="-qnoopt" 704 # FIXME: Value below not verified. 705 C_O_FLAG_DEBUG_JVM="" 706 C_O_FLAG_NONE="-qnoopt" 707 elif test "x$TOOLCHAIN_TYPE" = xmicrosoft; then 708 C_O_FLAG_HIGHEST_JVM="-O2 -Oy-" 709 C_O_FLAG_HIGHEST="-O2" 710 C_O_FLAG_HI="-O1" 711 C_O_FLAG_NORM="-O1" 712 C_O_FLAG_DEBUG="-Od" 713 C_O_FLAG_DEBUG_JVM="" 714 C_O_FLAG_NONE="-Od" 715 C_O_FLAG_SIZE="-Os" 716 fi 717 CXX_O_FLAG_HIGHEST_JVM="$C_O_FLAG_HIGHEST_JVM" 718 CXX_O_FLAG_HIGHEST="$C_O_FLAG_HIGHEST" 719 CXX_O_FLAG_HI="$C_O_FLAG_HI" 720 CXX_O_FLAG_NORM="$C_O_FLAG_NORM" 721 CXX_O_FLAG_DEBUG="$C_O_FLAG_DEBUG" 722 CXX_O_FLAG_DEBUG_JVM="$C_O_FLAG_DEBUG_JVM" 723 CXX_O_FLAG_NONE="$C_O_FLAG_NONE" 724 CXX_O_FLAG_SIZE="$C_O_FLAG_SIZE" 725 fi 726 727 # Adjust optimization flags according to debug level. 728 case $DEBUG_LEVEL in 729 release ) 730 # no adjustment 731 ;; 732 fastdebug ) 733 # Not quite so much optimization 734 C_O_FLAG_HI="$C_O_FLAG_NORM" 735 CXX_O_FLAG_HI="$CXX_O_FLAG_NORM" 736 ;; 737 slowdebug ) 738 # Disable optimization 739 C_O_FLAG_HIGHEST_JVM="$C_O_FLAG_DEBUG_JVM" 740 C_O_FLAG_HIGHEST="$C_O_FLAG_DEBUG" 741 C_O_FLAG_HI="$C_O_FLAG_DEBUG" 742 C_O_FLAG_NORM="$C_O_FLAG_DEBUG" 743 C_O_FLAG_SIZE="$C_O_FLAG_DEBUG" 744 CXX_O_FLAG_HIGHEST_JVM="$CXX_O_FLAG_DEBUG_JVM" 745 CXX_O_FLAG_HIGHEST="$CXX_O_FLAG_DEBUG" 746 CXX_O_FLAG_HI="$CXX_O_FLAG_DEBUG" 747 CXX_O_FLAG_NORM="$CXX_O_FLAG_DEBUG" 748 CXX_O_FLAG_SIZE="$CXX_O_FLAG_DEBUG" 749 ;; 750 esac 751 752 AC_SUBST(C_O_FLAG_HIGHEST_JVM) 753 AC_SUBST(C_O_FLAG_HIGHEST) 754 AC_SUBST(C_O_FLAG_HI) 755 AC_SUBST(C_O_FLAG_NORM) 756 AC_SUBST(C_O_FLAG_DEBUG) 757 AC_SUBST(C_O_FLAG_NONE) 758 AC_SUBST(C_O_FLAG_SIZE) 759 AC_SUBST(CXX_O_FLAG_HIGHEST_JVM) 760 AC_SUBST(CXX_O_FLAG_HIGHEST) 761 AC_SUBST(CXX_O_FLAG_HI) 762 AC_SUBST(CXX_O_FLAG_NORM) 763 AC_SUBST(CXX_O_FLAG_DEBUG) 764 AC_SUBST(CXX_O_FLAG_NONE) 765 AC_SUBST(CXX_O_FLAG_SIZE) 766 ]) 767 768 769 AC_DEFUN([FLAGS_SETUP_COMPILER_FLAGS_FOR_JDK], 770 [ 771 772 FLAGS_SETUP_ABI_PROFILE 773 774 # Optional POSIX functionality needed by the JVM 775 # 776 # Check if clock_gettime is available and in which library. This indicates 777 # availability of CLOCK_MONOTONIC for hotspot. But we don't need to link, so 778 # don't let it update LIBS. 779 save_LIBS="$LIBS" 780 AC_SEARCH_LIBS(clock_gettime, rt, [HAS_CLOCK_GETTIME=true], []) 781 if test "x$LIBS" = "x-lrt "; then 782 CLOCK_GETTIME_IN_LIBRT=true 783 fi 784 LIBS="$save_LIBS" 785 786 FLAGS_SETUP_COMPILER_FLAGS_FOR_JDK_HELPER([TARGET]) 787 FLAGS_SETUP_COMPILER_FLAGS_FOR_JDK_HELPER([BUILD], [OPENJDK_BUILD_]) 788 789 # Tests are only ever compiled for TARGET 790 # Flags for compiling test libraries 791 CFLAGS_TESTLIB="$COMMON_CCXXFLAGS_JDK $CFLAGS_JDK $PICFLAG $CFLAGS_JDKLIB_EXTRA" 792 CXXFLAGS_TESTLIB="$COMMON_CCXXFLAGS_JDK $CXXFLAGS_JDK $PICFLAG $CXXFLAGS_JDKLIB_EXTRA" 793 794 # Flags for compiling test executables 795 CFLAGS_TESTEXE="$COMMON_CCXXFLAGS_JDK $CFLAGS_JDK" 796 CXXFLAGS_TESTEXE="$COMMON_CCXXFLAGS_JDK $CXXFLAGS_JDK" 797 798 AC_SUBST(CFLAGS_TESTLIB) 799 AC_SUBST(CFLAGS_TESTEXE) 800 AC_SUBST(CXXFLAGS_TESTLIB) 801 AC_SUBST(CXXFLAGS_TESTEXE) 802 803 LDFLAGS_TESTLIB="$LDFLAGS_JDKLIB" 804 LDFLAGS_TESTEXE="$LDFLAGS_JDKEXE $JAVA_BASE_LDFLAGS" 805 806 AC_SUBST(LDFLAGS_TESTLIB) 807 AC_SUBST(LDFLAGS_TESTEXE) 808 809 ]) 810 811 ################################################################################ 812 # $1 - Either BUILD or TARGET to pick the correct OS/CPU variables to check 813 # conditionals against. 814 # $2 - Optional prefix for each variable defined. 815 AC_DEFUN([FLAGS_SETUP_COMPILER_FLAGS_FOR_JDK_HELPER], 816 [ 817 # Special extras... 818 if test "x$TOOLCHAIN_TYPE" = xsolstudio; then 819 if test "x$OPENJDK_$1_CPU_ARCH" = "xsparc"; then 820 $2CFLAGS_JDKLIB_EXTRA="${$2CFLAGS_JDKLIB_EXTRA} -xregs=no%appl" 821 $2CXXFLAGS_JDKLIB_EXTRA="${$2CXXFLAGS_JDKLIB_EXTRA} -xregs=no%appl" 822 fi 823 $2CFLAGS_JDKLIB_EXTRA="${$2CFLAGS_JDKLIB_EXTRA} -errtags=yes -errfmt" 824 $2CXXFLAGS_JDKLIB_EXTRA="${$2CXXFLAGS_JDKLIB_EXTRA} -errtags=yes -errfmt" 825 elif test "x$TOOLCHAIN_TYPE" = xxlc; then 826 $2CFLAGS_JDK="${$2CFLAGS_JDK} -qchars=signed -qfullpath -qsaveopt" 827 $2CXXFLAGS_JDK="${$2CXXFLAGS_JDK} -qchars=signed -qfullpath -qsaveopt" 828 elif test "x$TOOLCHAIN_TYPE" = xgcc; then 829 $2CXXSTD_CXXFLAG="-std=gnu++98" 830 FLAGS_CXX_COMPILER_CHECK_ARGUMENTS(ARGUMENT: [[$]$2CXXSTD_CXXFLAG -Werror], 831 IF_FALSE: [$2CXXSTD_CXXFLAG=""]) 832 $2CXXFLAGS_JDK="${$2CXXFLAGS_JDK} ${$2CXXSTD_CXXFLAG}" 833 $2JVM_CFLAGS="${$2JVM_CFLAGS} ${$2CXXSTD_CXXFLAG}" 834 AC_SUBST($2CXXSTD_CXXFLAG) 835 fi 836 if test "x$OPENJDK_TARGET_OS" = xsolaris; then 837 $2CFLAGS_JDK="${$2CFLAGS_JDK} -D__solaris__" 838 $2CXXFLAGS_JDK="${$2CXXFLAGS_JDK} -D__solaris__" 839 fi 840 841 $2CFLAGS_JDK="${$2CFLAGS_JDK} ${$2EXTRA_CFLAGS}" 842 $2CXXFLAGS_JDK="${$2CXXFLAGS_JDK} ${$2EXTRA_CXXFLAGS}" 843 $2LDFLAGS_JDK="${$2LDFLAGS_JDK} ${$2EXTRA_LDFLAGS}" 844 845 ############################################################################### 846 # 847 # Now setup the CFLAGS and LDFLAGS for the JDK build. 848 # Later we will also have CFLAGS and LDFLAGS for the hotspot subrepo build. 849 # 850 851 # Setup compiler/platform specific flags into 852 # $2CFLAGS_JDK - C Compiler flags 853 # $2CXXFLAGS_JDK - C++ Compiler flags 854 # $2COMMON_CCXXFLAGS_JDK - common to C and C++ 855 if test "x$TOOLCHAIN_TYPE" = xgcc; then 856 $2JVM_CFLAGS="[$]$2JVM_CFLAGS -D_GNU_SOURCE" 857 $2JVM_CFLAGS="[$]$2JVM_CFLAGS -D_REENTRANT" 858 $2JVM_CFLAGS="[$]$2JVM_CFLAGS -fcheck-new" 859 if test "x$OPENJDK_$1_CPU" = xx86; then 860 # Force compatibility with i586 on 32 bit intel platforms. 861 $2COMMON_CCXXFLAGS="${$2COMMON_CCXXFLAGS} -march=i586" 862 $2JVM_CFLAGS="[$]$2JVM_CFLAGS -march=i586" 863 fi 864 $2COMMON_CCXXFLAGS_JDK="[$]$2COMMON_CCXXFLAGS [$]$2COMMON_CCXXFLAGS_JDK -Wall -Wextra -Wno-unused -Wno-unused-parameter -Wformat=2 \ 865 -pipe -D_GNU_SOURCE -D_REENTRANT -D_LARGEFILE64_SOURCE" 866 case $OPENJDK_$1_CPU_ARCH in 867 arm ) 868 # on arm we don't prevent gcc to omit frame pointer but do prevent strict aliasing 869 $2CFLAGS_JDK="${$2CFLAGS_JDK} -fno-strict-aliasing" 870 $2COMMON_CCXXFLAGS_JDK="${$2COMMON_CCXXFLAGS_JDK} -fsigned-char" 871 ;; 872 ppc ) 873 # on ppc we don't prevent gcc to omit frame pointer but do prevent strict aliasing 874 $2CFLAGS_JDK="${$2CFLAGS_JDK} -fno-strict-aliasing" 875 ;; 876 s390 ) 877 $2COMMON_CCXXFLAGS_JDK="[$]$2COMMON_CCXXFLAGS_JDK -fno-omit-frame-pointer -mbackchain -march=z10" 878 $2CFLAGS_JDK="${$2CFLAGS_JDK} -fno-strict-aliasing" 879 ;; 880 * ) 881 $2COMMON_CCXXFLAGS_JDK="[$]$2COMMON_CCXXFLAGS_JDK -fno-omit-frame-pointer" 882 $2CFLAGS_JDK="${$2CFLAGS_JDK} -fno-strict-aliasing" 883 ;; 884 esac 885 TOOLCHAIN_CHECK_COMPILER_VERSION(VERSION: 6, PREFIX: $2, IF_AT_LEAST: FLAGS_SETUP_GCC6_COMPILER_FLAGS($2)) 886 elif test "x$TOOLCHAIN_TYPE" = xclang; then 887 $2JVM_CFLAGS="[$]$2JVM_CFLAGS -D_GNU_SOURCE" 888 889 # Restrict the debug information created by Clang to avoid 890 # too big object files and speed the build up a little bit 891 # (see http://llvm.org/bugs/show_bug.cgi?id=7554) 892 $2JVM_CFLAGS="[$]$2JVM_CFLAGS -flimit-debug-info" 893 if test "x$OPENJDK_$1_OS" = xlinux; then 894 if test "x$OPENJDK_$1_CPU" = xx86; then 895 # Force compatibility with i586 on 32 bit intel platforms. 896 $2COMMON_CCXXFLAGS="${$2COMMON_CCXXFLAGS} -march=i586" 897 $2JVM_CFLAGS="[$]$2JVM_CFLAGS -march=i586" 898 fi 899 $2JVM_CFLAGS="[$]$2JVM_CFLAGS -Wno-sometimes-uninitialized" 900 $2COMMON_CCXXFLAGS_JDK="[$]$2COMMON_CCXXFLAGS [$]$2COMMON_CCXXFLAGS_JDK -Wall -Wextra -Wno-unused -Wno-unused-parameter -Wformat=2 \ 901 -pipe -D_GNU_SOURCE -D_REENTRANT -D_LARGEFILE64_SOURCE" 902 case $OPENJDK_$1_CPU_ARCH in 903 ppc ) 904 # on ppc we don't prevent gcc to omit frame pointer but do prevent strict aliasing 905 $2CFLAGS_JDK="${$2CFLAGS_JDK} -fno-strict-aliasing" 906 ;; 907 * ) 908 $2COMMON_CCXXFLAGS_JDK="[$]$2COMMON_CCXXFLAGS_JDK -fno-omit-frame-pointer" 909 $2CFLAGS_JDK="${$2CFLAGS_JDK} -fno-strict-aliasing" 910 ;; 911 esac 912 fi 913 elif test "x$TOOLCHAIN_TYPE" = xsolstudio; then 914 $2JVM_CFLAGS="[$]$2JVM_CFLAGS -DSPARC_WORKS" 915 $2COMMON_CCXXFLAGS_JDK="[$]$2COMMON_CCXXFLAGS [$]$2COMMON_CCXXFLAGS_JDK -DTRACING -DMACRO_MEMSYS_OPS -DBREAKPTS" 916 if test "x$OPENJDK_$1_CPU_ARCH" = xx86; then 917 $2COMMON_CCXXFLAGS_JDK="[$]$2COMMON_CCXXFLAGS_JDK -DcpuIntel -Di586 -D$OPENJDK_$1_CPU_LEGACY_LIB" 918 fi 919 920 $2CFLAGS_JDK="[$]$2CFLAGS_JDK -xc99=%none -xCC -errshort=tags -Xa -v -mt -W0,-noglobal" 921 $2CXXFLAGS_JDK="[$]$2CXXFLAGS_JDK -errtags=yes +w -mt -features=no%except -DCC_NOEX -norunpath -xnolib" 922 elif test "x$TOOLCHAIN_TYPE" = xxlc; then 923 $2JVM_CFLAGS="[$]$2JVM_CFLAGS -D_REENTRANT" 924 $2CFLAGS_JDK="[$]$2CFLAGS_JDK -D_GNU_SOURCE -D_REENTRANT -D_LARGEFILE64_SOURCE -DSTDC" 925 $2CXXFLAGS_JDK="[$]$2CXXFLAGS_JDK -D_GNU_SOURCE -D_REENTRANT -D_LARGEFILE64_SOURCE -DSTDC" 926 elif test "x$TOOLCHAIN_TYPE" = xmicrosoft; then 927 $2COMMON_CCXXFLAGS_JDK="[$]$2COMMON_CCXXFLAGS [$]$2COMMON_CCXXFLAGS_JDK \ 928 -MD -Zc:wchar_t- -W3 -wd4800 \ 929 -DWIN32_LEAN_AND_MEAN \ 930 -D_CRT_SECURE_NO_DEPRECATE -D_CRT_NONSTDC_NO_DEPRECATE \ 931 -DWIN32 -DIAL" 932 $2JVM_CFLAGS="[$]$2JVM_CFLAGS -DWIN32_LEAN_AND_MEAN" 933 if test "x$OPENJDK_$1_CPU" = xx86_64; then 934 $2COMMON_CCXXFLAGS_JDK="[$]$2COMMON_CCXXFLAGS_JDK -D_AMD64_ -Damd64" 935 else 936 $2COMMON_CCXXFLAGS_JDK="[$]$2COMMON_CCXXFLAGS_JDK -D_X86_ -Dx86" 937 fi 938 # If building with Visual Studio 2010, we can still use _STATIC_CPPLIB to 939 # avoid bundling msvcpNNN.dll. Doesn't work with newer versions of visual 940 # studio. 941 if test "x$TOOLCHAIN_VERSION" = "x2010"; then 942 STATIC_CPPLIB_FLAGS="-D_STATIC_CPPLIB -D_DISABLE_DEPRECATE_STATIC_CPPLIB" 943 $2COMMON_CCXXFLAGS_JDK="[$]$2COMMON_CCXXFLAGS_JDK $STATIC_CPPLIB_FLAGS" 944 $2JVM_CFLAGS="[$]$2JVM_CFLAGS $STATIC_CPPLIB_FLAGS" 945 fi 946 fi 947 948 ############################################################################### 949 950 # Adjust flags according to debug level. 951 case $DEBUG_LEVEL in 952 fastdebug | slowdebug ) 953 $2CFLAGS_JDK="[$]$2CFLAGS_JDK $CFLAGS_DEBUG_SYMBOLS $CFLAGS_DEBUG_OPTIONS" 954 $2CXXFLAGS_JDK="[$]$2CXXFLAGS_JDK $CXXFLAGS_DEBUG_SYMBOLS $CXXFLAGS_DEBUG_OPTIONS" 955 ;; 956 release ) 957 ;; 958 * ) 959 AC_MSG_ERROR([Unrecognized \$DEBUG_LEVEL: $DEBUG_LEVEL]) 960 ;; 961 esac 962 963 # Set some common defines. These works for all compilers, but assume 964 # -D is universally accepted. 965 966 # Setup endianness 967 if test "x$OPENJDK_$1_CPU_ENDIAN" = xlittle; then 968 # The macro _LITTLE_ENDIAN needs to be defined the same to avoid the 969 # Sun C compiler warning message: warning: macro redefined: _LITTLE_ENDIAN 970 # (The Solaris X86 system defines this in file /usr/include/sys/isa_defs.h). 971 # Note: -Dmacro is the same as #define macro 1 972 # -Dmacro= is the same as #define macro 973 if test "x$OPENJDK_$1_OS" = xsolaris; then 974 $2COMMON_CCXXFLAGS_JDK="[$]$2COMMON_CCXXFLAGS_JDK -D_LITTLE_ENDIAN=" 975 else 976 $2COMMON_CCXXFLAGS_JDK="[$]$2COMMON_CCXXFLAGS_JDK -D_LITTLE_ENDIAN" 977 fi 978 else 979 # Same goes for _BIG_ENDIAN. Do we really need to set *ENDIAN on Solaris if they 980 # are defined in the system? 981 if test "x$OPENJDK_$1_OS" = xsolaris; then 982 $2COMMON_CCXXFLAGS_JDK="[$]$2COMMON_CCXXFLAGS_JDK -D_BIG_ENDIAN=" 983 else 984 $2COMMON_CCXXFLAGS_JDK="[$]$2COMMON_CCXXFLAGS_JDK -D_BIG_ENDIAN" 985 fi 986 fi 987 988 # Always enable optional macros for VM. 989 $2JVM_CFLAGS="[$]$2JVM_CFLAGS -D__STDC_FORMAT_MACROS" 990 $2JVM_CFLAGS="[$]$2JVM_CFLAGS -D__STDC_LIMIT_MACROS" 991 $2JVM_CFLAGS="[$]$2JVM_CFLAGS -D__STDC_CONSTANT_MACROS" 992 993 # Setup target OS define. Use OS target name but in upper case. 994 OPENJDK_$1_OS_UPPERCASE=`$ECHO $OPENJDK_$1_OS | $TR 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'` 995 $2COMMON_CCXXFLAGS_JDK="[$]$2COMMON_CCXXFLAGS_JDK -D$OPENJDK_$1_OS_UPPERCASE" 996 997 # Setup target CPU 998 $2COMMON_CCXXFLAGS_JDK="[$]$2COMMON_CCXXFLAGS_JDK \ 999 $OPENJDK_$1_ADD_LP64 \ 1000 -DARCH='\"$OPENJDK_$1_CPU_LEGACY\"' -D$OPENJDK_$1_CPU_LEGACY" 1001 1002 # Setup debug/release defines 1003 if test "x$DEBUG_LEVEL" = xrelease; then 1004 $2COMMON_CCXXFLAGS_JDK="[$]$2COMMON_CCXXFLAGS_JDK -DNDEBUG" 1005 if test "x$OPENJDK_$1_OS" = xsolaris; then 1006 $2COMMON_CCXXFLAGS_JDK="[$]$2COMMON_CCXXFLAGS_JDK -DTRIMMED" 1007 fi 1008 else 1009 $2COMMON_CCXXFLAGS_JDK="[$]$2COMMON_CCXXFLAGS_JDK -DDEBUG" 1010 fi 1011 1012 # Optional POSIX functionality needed by the VM 1013 1014 if test "x$HAS_CLOCK_GETTIME" = "xtrue"; then 1015 $2JVM_CFLAGS="[$]$2JVM_CFLAGS -DSUPPORTS_CLOCK_MONOTONIC" 1016 if test "x$CLOCK_GETTIME_IN_LIBRT" = "xtrue"; then 1017 $2JVM_CFLAGS="[$]$2JVM_CFLAGS -DNEEDS_LIBRT" 1018 fi 1019 fi 1020 1021 1022 # Set some additional per-OS defines. 1023 if test "x$OPENJDK_$1_OS" = xlinux; then 1024 $2JVM_CFLAGS="[$]$2JVM_CFLAGS -DLINUX" 1025 $2JVM_CFLAGS="[$]$2JVM_CFLAGS -pipe $PICFLAG -fno-rtti -fno-exceptions \ 1026 -fvisibility=hidden -fno-strict-aliasing -fno-omit-frame-pointer" 1027 elif test "x$OPENJDK_$1_OS" = xsolaris; then 1028 $2JVM_CFLAGS="[$]$2JVM_CFLAGS -DSOLARIS" 1029 $2JVM_CFLAGS="[$]$2JVM_CFLAGS -template=no%extdef -features=no%split_init \ 1030 -D_Crun_inline_placement -library=stlport4 $PICFLAG -mt -features=no%except" 1031 elif test "x$OPENJDK_$1_OS" = xmacosx; then 1032 $2COMMON_CCXXFLAGS_JDK="[$]$2COMMON_CCXXFLAGS_JDK -D_ALLBSD_SOURCE -D_DARWIN_UNLIMITED_SELECT" 1033 $2JVM_CFLAGS="[$]$2JVM_CFLAGS -D_ALLBSD_SOURCE" 1034 $2JVM_CFLAGS="[$]$2JVM_CFLAGS -D_DARWIN_C_SOURCE -D_XOPEN_SOURCE" 1035 $2JVM_CFLAGS="[$]$2JVM_CFLAGS -fno-rtti -fno-exceptions -fvisibility=hidden \ 1036 -mno-omit-leaf-frame-pointer -mstack-alignment=16 -pipe -fno-strict-aliasing \ 1037 -fno-omit-frame-pointer" 1038 elif test "x$OPENJDK_$1_OS" = xaix; then 1039 $2JVM_CFLAGS="[$]$2JVM_CFLAGS -DAIX" 1040 $2JVM_CFLAGS="[$]$2JVM_CFLAGS -qtune=balanced \ 1041 -qalias=noansi -qstrict -qtls=default -qlanglvl=c99vla \ 1042 -qlanglvl=noredefmac -qnortti -qnoeh -qignerrno" 1043 # We need '-qminimaltoc' or '-qpic=large -bbigtoc' if the TOC overflows. 1044 # Hotspot now overflows its 64K TOC (currently only for debug), 1045 # so for debug we build with '-qpic=large -bbigtoc'. 1046 if test "x$DEBUG_LEVEL" = xslowdebug || test "x$DEBUG_LEVEL" = xfastdebug; then 1047 $2JVM_CFLAGS="[$]$2JVM_CFLAGS -qpic=large" 1048 fi 1049 elif test "x$OPENJDK_$1_OS" = xbsd; then 1050 $2COMMON_CCXXFLAGS_JDK="[$]$2COMMON_CCXXFLAGS_JDK -D_ALLBSD_SOURCE" 1051 elif test "x$OPENJDK_$1_OS" = xwindows; then 1052 $2JVM_CFLAGS="[$]$2JVM_CFLAGS -D_WINDOWS -DWIN32 -D_JNI_IMPLEMENTATION_" 1053 $2JVM_CFLAGS="[$]$2JVM_CFLAGS -nologo -W3 -MD -MP" 1054 fi 1055 1056 # Set some additional per-CPU defines. 1057 if test "x$OPENJDK_$1_OS-$OPENJDK_$1_CPU" = xwindows-x86; then 1058 $2JVM_CFLAGS="[$]$2JVM_CFLAGS -arch:IA32" 1059 elif test "x$OPENJDK_$1_OS-$OPENJDK_$1_CPU" = xsolaris-sparcv9; then 1060 $2JVM_CFLAGS="[$]$2JVM_CFLAGS -xarch=sparc" 1061 elif test "x$OPENJDK_$1_CPU" = xppc64; then 1062 if test "x$OPENJDK_$1_OS" = xlinux; then 1063 $2JVM_CFLAGS="[$]$2JVM_CFLAGS -minsert-sched-nops=regroup_exact -mno-multiple -mno-string" 1064 # fixes `relocation truncated to fit' error for gcc 4.1. 1065 $2JVM_CFLAGS="[$]$2JVM_CFLAGS -mminimal-toc" 1066 # Use ppc64 instructions, but schedule for power5 1067 $2JVM_CFLAGS="[$]$2JVM_CFLAGS -mcpu=powerpc64 -mtune=power5" 1068 elif test "x$OPENJDK_$1_OS" = xaix; then 1069 $2JVM_CFLAGS="[$]$2JVM_CFLAGS -qarch=ppc64" 1070 fi 1071 elif test "x$OPENJDK_$1_CPU" = xppc64le; then 1072 if test "x$OPENJDK_$1_OS" = xlinux; then 1073 $2JVM_CFLAGS="[$]$2JVM_CFLAGS -minsert-sched-nops=regroup_exact -mno-multiple -mno-string" 1074 # Little endian machine uses ELFv2 ABI. 1075 $2JVM_CFLAGS="[$]$2JVM_CFLAGS -DABI_ELFv2" 1076 # Use Power8, this is the first CPU to support PPC64 LE with ELFv2 ABI. 1077 $2JVM_CFLAGS="[$]$2JVM_CFLAGS -mcpu=power8 -mtune=power8" 1078 fi 1079 elif test "x$OPENJDK_$1_CPU" = xs390x; then 1080 if test "x$OPENJDK_$1_OS" = xlinux; then 1081 $2JVM_CFLAGS="[$]$2JVM_CFLAGS -mbackchain -march=z10" 1082 fi 1083 fi 1084 1085 if test "x$OPENJDK_$1_CPU_ENDIAN" = xlittle; then 1086 $2JVM_CFLAGS="[$]$2JVM_CFLAGS -DVM_LITTLE_ENDIAN" 1087 fi 1088 1089 if test "x$OPENJDK_$1_CPU_BITS" = x64; then 1090 if test "x$OPENJDK_$1_OS" != xsolaris && test "x$OPENJDK_$1_OS" != xaix; then 1091 # Solaris does not have _LP64=1 in the old build. 1092 # xlc on AIX defines _LP64=1 by default and issues a warning if we redefine it. 1093 $2JVM_CFLAGS="[$]$2JVM_CFLAGS -D_LP64=1" 1094 fi 1095 fi 1096 1097 # Set $2JVM_CFLAGS warning handling 1098 if test "x$OPENJDK_$1_OS" = xlinux; then 1099 $2JVM_CFLAGS="[$]$2JVM_CFLAGS -Wpointer-arith -Wsign-compare -Wunused-function \ 1100 -Wunused-value -Woverloaded-virtual" 1101 1102 if test "x$TOOLCHAIN_TYPE" = xgcc; then 1103 TOOLCHAIN_CHECK_COMPILER_VERSION(VERSION: [4.8], PREFIX: $2, 1104 IF_AT_LEAST: [ 1105 # These flags either do not work or give spurious warnings prior to gcc 4.8. 1106 $2JVM_CFLAGS="[$]$2JVM_CFLAGS -Wno-format-zero-length -Wtype-limits -Wuninitialized" 1107 ] 1108 ) 1109 fi 1110 if ! HOTSPOT_CHECK_JVM_VARIANT(zero); then 1111 # Non-zero builds have stricter warnings 1112 $2JVM_CFLAGS="[$]$2JVM_CFLAGS -Wreturn-type -Wundef -Wformat=2" 1113 else 1114 if test "x$TOOLCHAIN_TYPE" = xclang; then 1115 # Some versions of llvm do not like -Wundef 1116 $2JVM_CFLAGS="[$]$2JVM_CFLAGS -Wno-undef" 1117 fi 1118 fi 1119 elif test "x$OPENJDK_$1_OS" = xmacosx; then 1120 $2JVM_CFLAGS="[$]$2JVM_CFLAGS -Wno-deprecated -Wpointer-arith \ 1121 -Wsign-compare -Wundef -Wunused-function -Wformat=2" 1122 fi 1123 1124 # Additional macosx handling 1125 if test "x$OPENJDK_$1_OS" = xmacosx; then 1126 # MACOSX_VERSION_MIN specifies the lowest version of Macosx that the built 1127 # binaries should be compatible with, even if compiled on a newer version 1128 # of the OS. It currently has a hard coded value. Setting this also limits 1129 # exposure to API changes in header files. Bumping this is likely to 1130 # require code changes to build. 1131 MACOSX_VERSION_MIN=10.7.0 1132 AC_SUBST(MACOSX_VERSION_MIN) 1133 1134 # Setting --with-macosx-version-max=<version> makes it an error to build or 1135 # link to macosx APIs that are newer than the given OS version. The expected 1136 # format for <version> is either nn.n.n or nn.nn.nn. See /usr/include/AvailabilityMacros.h. 1137 AC_ARG_WITH([macosx-version-max], [AS_HELP_STRING([--with-macosx-version-max], 1138 [error on use of newer functionality. @<:@macosx@:>@])], 1139 [ 1140 if echo "$with_macosx_version_max" | $GREP -q "^[[0-9]][[0-9]]\.[[0-9]]\.[[0-9]]\$"; then 1141 MACOSX_VERSION_MAX=$with_macosx_version_max 1142 elif echo "$with_macosx_version_max" | $GREP -q "^[[0-9]][[0-9]]\.[[0-9]][[0-9]]\.[[0-9]][[0-9]]\$"; then 1143 MACOSX_VERSION_MAX=$with_macosx_version_max 1144 elif test "x$with_macosx_version_max" = "xno"; then 1145 # Use build system default 1146 MACOSX_VERSION_MAX= 1147 else 1148 AC_MSG_ERROR([osx version format must be nn.n.n or nn.nn.nn]) 1149 fi 1150 ], 1151 [MACOSX_VERSION_MAX=] 1152 ) 1153 AC_SUBST(MACOSX_VERSION_MAX) 1154 1155 # Let the flags variables get resolved in make for easier override on make 1156 # command line. AvailabilityMacros.h versions have no dots, ex: 1070. 1157 $2COMMON_CCXXFLAGS_JDK="[$]$2COMMON_CCXXFLAGS_JDK \ 1158 -DMAC_OS_X_VERSION_MIN_REQUIRED=\$(subst .,,\$(MACOSX_VERSION_MIN)) \ 1159 -mmacosx-version-min=\$(MACOSX_VERSION_MIN)" 1160 $2LDFLAGS_JDK="[$]$2LDFLAGS_JDK -mmacosx-version-min=\$(MACOSX_VERSION_MIN)" 1161 $2JVM_CFLAGS="[$]$2JVM_CFLAGS \ 1162 -DMAC_OS_X_VERSION_MIN_REQUIRED=\$(subst .,,\$(MACOSX_VERSION_MIN)) \ 1163 -mmacosx-version-min=\$(MACOSX_VERSION_MIN)" 1164 $2ARFLAGS="$2$ARFLAGS -mmacosx-version-min=\$(MACOSX_VERSION_MIN)" 1165 1166 if test -n "$MACOSX_VERSION_MAX"; then 1167 $2COMMON_CCXXFLAGS_JDK="[$]$2COMMON_CCXXFLAGS_JDK \ 1168 -DMAC_OS_X_VERSION_MAX_ALLOWED=\$(subst .,,\$(MACOSX_VERSION_MAX))" 1169 $2JVM_CFLAGS="[$]$2JVM_CFLAGS \ 1170 -DMAC_OS_X_VERSION_MAX_ALLOWED=\$(subst .,,\$(MACOSX_VERSION_MAX))" 1171 fi 1172 fi 1173 1174 # Setup some hard coded includes 1175 $2COMMON_CCXXFLAGS_JDK="[$]$2COMMON_CCXXFLAGS_JDK \ 1176 -I\$(SUPPORT_OUTPUTDIR)/modules_include/java.base \ 1177 -I\$(SUPPORT_OUTPUTDIR)/modules_include/java.base/\$(OPENJDK_TARGET_OS_INCLUDE_SUBDIR) \ 1178 -I${TOPDIR}/src/java.base/share/native/libjava \ 1179 -I${TOPDIR}/src/java.base/$OPENJDK_$1_OS_TYPE/native/libjava \ 1180 -I${TOPDIR}/src/hotspot/share/include \ 1181 -I${TOPDIR}/src/hotspot/os/${HOTSPOT_$1_OS_TYPE}/include" 1182 1183 # The shared libraries are compiled using the picflag. 1184 $2CFLAGS_JDKLIB="[$]$2COMMON_CCXXFLAGS_JDK \ 1185 [$]$2CFLAGS_JDK [$]$2EXTRA_CFLAGS_JDK $PICFLAG [$]$2CFLAGS_JDKLIB_EXTRA" 1186 $2CXXFLAGS_JDKLIB="[$]$2COMMON_CCXXFLAGS_JDK \ 1187 [$]$2CXXFLAGS_JDK [$]$2EXTRA_CXXFLAGS_JDK $PICFLAG [$]$2CXXFLAGS_JDKLIB_EXTRA" 1188 1189 # Executable flags 1190 $2CFLAGS_JDKEXE="[$]$2COMMON_CCXXFLAGS_JDK [$]$2CFLAGS_JDK [$]$2EXTRA_CFLAGS_JDK" 1191 $2CXXFLAGS_JDKEXE="[$]$2COMMON_CCXXFLAGS_JDK [$]$2CXXFLAGS_JDK [$]$2EXTRA_CXXFLAGS_JDK" 1192 1193 AC_SUBST($2CFLAGS_JDKLIB) 1194 AC_SUBST($2CFLAGS_JDKEXE) 1195 AC_SUBST($2CXXFLAGS_JDKLIB) 1196 AC_SUBST($2CXXFLAGS_JDKEXE) 1197 1198 # Setup LDFLAGS et al. 1199 # 1200 1201 if test "x$TOOLCHAIN_TYPE" = xmicrosoft; then 1202 LDFLAGS_MICROSOFT="-nologo -opt:ref" 1203 $2LDFLAGS_JDK="[$]$2LDFLAGS_JDK $LDFLAGS_MICROSOFT -incremental:no" 1204 $2JVM_LDFLAGS="[$]$2JVM_LDFLAGS $LDFLAGS_MICROSOFT -opt:icf,8 -subsystem:windows -base:0x8000000 -ignore:4281" 1205 if test "x$OPENJDK_$1_CPU_BITS" = "x32"; then 1206 LDFLAGS_SAFESH="-safeseh" 1207 $2LDFLAGS_JDK="[$]$2LDFLAGS_JDK $LDFLAGS_SAFESH" 1208 $2JVM_LDFLAGS="[$]$2JVM_LDFLAGS $LDFLAGS_SAFESH" 1209 # NOTE: Old build added -machine. Probably not needed. 1210 $2JVM_LDFLAGS="[$]$2JVM_LDFLAGS -machine:I386" 1211 else 1212 $2JVM_LDFLAGS="[$]$2JVM_LDFLAGS -machine:AMD64" 1213 fi 1214 elif test "x$TOOLCHAIN_TYPE" = xclang; then 1215 $2JVM_LDFLAGS="[$]$2JVM_LDFLAGS -mno-omit-leaf-frame-pointer -mstack-alignment=16 -stdlib=libstdc++ -fPIC" 1216 if test "x$OPENJDK_$1_OS" = xmacosx; then 1217 # FIXME: We should really generalize SET_SHARED_LIBRARY_ORIGIN instead. 1218 $2JVM_LDFLAGS="[$]$2JVM_LDFLAGS -Wl,-rpath,@loader_path/. -Wl,-rpath,@loader_path/.." 1219 fi 1220 elif test "x$TOOLCHAIN_TYPE" = xgcc; then 1221 # If this is a --hash-style=gnu system, use --hash-style=both, why? 1222 # We have previously set HAS_GNU_HASH if this is the case 1223 if test -n "$HAS_GNU_HASH"; then 1224 $2LDFLAGS_HASH_STYLE="-Wl,--hash-style=both" 1225 $2LDFLAGS_JDK="${$2LDFLAGS_JDK} [$]$2LDFLAGS_HASH_STYLE" 1226 $2JVM_LDFLAGS="[$]$2JVM_LDFLAGS [$]$2LDFLAGS_HASH_STYLE" 1227 fi 1228 if test "x$OPENJDK_$1_OS" = xmacosx; then 1229 $2JVM_LDFLAGS="[$]$2JVM_LDFLAGS -Wl,-rpath,@loader_path/. -Wl,-rpath,@loader_path/.." 1230 fi 1231 if test "x$OPENJDK_$1_OS" = xlinux; then 1232 # And since we now know that the linker is gnu, then add -z defs, to forbid 1233 # undefined symbols in object files. 1234 LDFLAGS_NO_UNDEF_SYM="-Wl,-z,defs" 1235 $2LDFLAGS_JDK="${$2LDFLAGS_JDK} $LDFLAGS_NO_UNDEF_SYM" 1236 $2JVM_LDFLAGS="[$]$2JVM_LDFLAGS $LDFLAGS_NO_UNDEF_SYM" 1237 LDFLAGS_NO_EXEC_STACK="-Wl,-z,noexecstack" 1238 $2JVM_LDFLAGS="[$]$2JVM_LDFLAGS $LDFLAGS_NO_EXEC_STACK" 1239 if test "x$OPENJDK_$1_CPU" = xx86; then 1240 $2JVM_LDFLAGS="[$]$2JVM_LDFLAGS -march=i586" 1241 fi 1242 case $DEBUG_LEVEL in 1243 release ) 1244 # tell linker to optimize libraries. 1245 # Should this be supplied to the OSS linker as well? 1246 LDFLAGS_DEBUGLEVEL_release="-Wl,-O1" 1247 $2LDFLAGS_JDK="${$2LDFLAGS_JDK} $LDFLAGS_DEBUGLEVEL_release" 1248 $2JVM_LDFLAGS="[$]$2JVM_LDFLAGS $LDFLAGS_DEBUGLEVEL_release" 1249 if test "x$HAS_LINKER_RELRO" = "xtrue"; then 1250 $2JVM_LDFLAGS="[$]$2JVM_LDFLAGS $LINKER_RELRO_FLAG" 1251 fi 1252 ;; 1253 slowdebug ) 1254 # Hotspot always let the linker optimize 1255 $2JVM_LDFLAGS="[$]$2JVM_LDFLAGS -Wl,-O1" 1256 if test "x$HAS_LINKER_NOW" = "xtrue"; then 1257 # do relocations at load 1258 $2LDFLAGS_JDK="[$]$2LDFLAGS_JDK $LINKER_NOW_FLAG" 1259 $2LDFLAGS_CXX_JDK="[$]$2LDFLAGS_CXX_JDK $LINKER_NOW_FLAG" 1260 $2JVM_LDFLAGS="[$]$2JVM_LDFLAGS $LINKER_NOW_FLAG" 1261 fi 1262 if test "x$HAS_LINKER_RELRO" = "xtrue"; then 1263 # mark relocations read only 1264 $2LDFLAGS_JDK="[$]$2LDFLAGS_JDK $LINKER_RELRO_FLAG" 1265 $2LDFLAGS_CXX_JDK="[$]$2LDFLAGS_CXX_JDK $LINKER_RELRO_FLAG" 1266 $2JVM_LDFLAGS="[$]$2JVM_LDFLAGS $LINKER_RELRO_FLAG" 1267 fi 1268 ;; 1269 fastdebug ) 1270 # Hotspot always let the linker optimize 1271 $2JVM_LDFLAGS="[$]$2JVM_LDFLAGS -Wl,-O1" 1272 if test "x$HAS_LINKER_RELRO" = "xtrue"; then 1273 # mark relocations read only 1274 $2LDFLAGS_JDK="[$]$2LDFLAGS_JDK $LINKER_RELRO_FLAG" 1275 $2LDFLAGS_CXX_JDK="[$]$2LDFLAGS_CXX_JDK $LINKER_RELRO_FLAG" 1276 $2JVM_LDFLAGS="[$]$2JVM_LDFLAGS $LINKER_RELRO_FLAG" 1277 fi 1278 ;; 1279 * ) 1280 AC_MSG_ERROR([Unrecognized \$DEBUG_LEVEL: $DEBUG_LEVEL]) 1281 ;; 1282 esac 1283 fi 1284 elif test "x$TOOLCHAIN_TYPE" = xsolstudio; then 1285 LDFLAGS_SOLSTUDIO="-Wl,-z,defs" 1286 $2LDFLAGS_JDK="[$]$2LDFLAGS_JDK $LDFLAGS_SOLSTUDIO -ztext" 1287 LDFLAGS_CXX_SOLSTUDIO="-norunpath" 1288 $2LDFLAGS_CXX_JDK="[$]$2LDFLAGS_CXX_JDK $LDFLAGS_CXX_SOLSTUDIO -xnolib" 1289 $2JVM_LDFLAGS="[$]$2JVM_LDFLAGS $LDFLAGS_SOLSTUDIO -library=%none -mt $LDFLAGS_CXX_SOLSTUDIO -z noversion" 1290 if test "x$OPENJDK_$1_CPU_ARCH" = "xsparc"; then 1291 $2JVM_LDFLAGS="[$]$2JVM_LDFLAGS -xarch=sparc" 1292 fi 1293 elif test "x$TOOLCHAIN_TYPE" = xxlc; then 1294 LDFLAGS_XLC="-b64 -brtl -bnolibpath -bexpall -bernotok -btextpsize:64K -bdatapsize:64K -bstackpsize:64K" 1295 $2LDFLAGS_JDK="${$2LDFLAGS_JDK} $LDFLAGS_XLC" 1296 $2JVM_LDFLAGS="[$]$2JVM_LDFLAGS $LDFLAGS_XLC" 1297 # We need '-qminimaltoc' or '-qpic=large -bbigtoc' if the TOC overflows. 1298 # Hotspot now overflows its 64K TOC (currently only for debug), 1299 # so we build with '-qpic=large -bbigtoc'. 1300 if test "x$DEBUG_LEVEL" = xslowdebug || test "x$DEBUG_LEVEL" = xfastdebug; then 1301 $2JVM_LDFLAGS="[$]$2JVM_LDFLAGS -bbigtoc" 1302 fi 1303 fi 1304 1305 # Customize LDFLAGS for executables 1306 1307 $2LDFLAGS_JDKEXE="${$2LDFLAGS_JDK}" 1308 1309 if test "x$TOOLCHAIN_TYPE" = xmicrosoft; then 1310 if test "x$OPENJDK_$1_CPU_BITS" = "x64"; then 1311 LDFLAGS_STACK_SIZE=1048576 1312 else 1313 LDFLAGS_STACK_SIZE=327680 1314 fi 1315 $2LDFLAGS_JDKEXE="${$2LDFLAGS_JDKEXE} /STACK:$LDFLAGS_STACK_SIZE" 1316 elif test "x$OPENJDK_$1_OS" = xlinux; then 1317 $2LDFLAGS_JDKEXE="[$]$2LDFLAGS_JDKEXE -Wl,--allow-shlib-undefined" 1318 fi 1319 1320 $2LDFLAGS_JDKEXE="${$2LDFLAGS_JDKEXE} ${$2EXTRA_LDFLAGS_JDK}" 1321 1322 # Customize LDFLAGS for libs 1323 $2LDFLAGS_JDKLIB="${$2LDFLAGS_JDK}" 1324 1325 $2LDFLAGS_JDKLIB="${$2LDFLAGS_JDKLIB} ${SHARED_LIBRARY_FLAGS}" 1326 $2LDFLAGS_JDKLIB="${$2LDFLAGS_JDKLIB} ${LDFLAGS_NO_EXEC_STACK}" 1327 if test "x$TOOLCHAIN_TYPE" = xmicrosoft; then 1328 $2JAVA_BASE_LDFLAGS="${$2JAVA_BASE_LDFLAGS} \ 1329 -libpath:${OUTPUTDIR}/support/modules_libs/java.base" 1330 $2JDKLIB_LIBS="" 1331 else 1332 $2JAVA_BASE_LDFLAGS="${$2JAVA_BASE_LDFLAGS} \ 1333 -L\$(SUPPORT_OUTPUTDIR)/modules_libs/java.base" 1334 1335 if test "x$1" = "xTARGET"; then 1336 # On some platforms (mac) the linker warns about non existing -L dirs. 1337 # For any of the variants server, client or minimal, the dir matches the 1338 # variant name. The "main" variant should be used for linking. For the 1339 # rest, the dir is just server. 1340 if HOTSPOT_CHECK_JVM_VARIANT(server) || HOTSPOT_CHECK_JVM_VARIANT(client) \ 1341 || HOTSPOT_CHECK_JVM_VARIANT(minimal); then 1342 $2JAVA_BASE_LDFLAGS="${$2JAVA_BASE_LDFLAGS} \ 1343 -L\$(SUPPORT_OUTPUTDIR)/modules_libs/java.base/$JVM_VARIANT_MAIN" 1344 else 1345 $2JAVA_BASE_LDFLAGS="${$2JAVA_BASE_LDFLAGS} \ 1346 -L\$(SUPPORT_OUTPUTDIR)/modules_libs/java.base/server" 1347 fi 1348 elif test "x$1" = "xBUILD"; then 1349 # When building a buildjdk, it's always only the server variant 1350 $2JAVA_BASE_LDFLAGS="${$2JAVA_BASE_LDFLAGS} \ 1351 -L\$(SUPPORT_OUTPUTDIR)/modules_libs/java.base/server" 1352 fi 1353 1354 $2JDKLIB_LIBS="-ljava -ljvm" 1355 if test "x$TOOLCHAIN_TYPE" = xsolstudio; then 1356 $2JDKLIB_LIBS="[$]$2JDKLIB_LIBS -lc" 1357 fi 1358 1359 fi 1360 1361 $2LDFLAGS_JDKLIB="${$2LDFLAGS_JDKLIB} ${$2JAVA_BASE_LDFLAGS}" 1362 1363 # Set $2JVM_LIBS (per os) 1364 if test "x$OPENJDK_$1_OS" = xlinux; then 1365 $2JVM_LIBS="[$]$2JVM_LIBS -lm -ldl -lpthread" 1366 elif test "x$OPENJDK_$1_OS" = xsolaris; then 1367 # FIXME: This hard-coded path is not really proper. 1368 if test "x$OPENJDK_$1_CPU" = xx86_64; then 1369 $2SOLARIS_LIBM_LIBS="/usr/lib/amd64/libm.so.1" 1370 elif test "x$OPENJDK_$1_CPU" = xsparcv9; then 1371 $2SOLARIS_LIBM_LIBS="/usr/lib/sparcv9/libm.so.1" 1372 fi 1373 $2JVM_LIBS="[$]$2JVM_LIBS -lsocket -lsched -ldl $SOLARIS_LIBM_LIBS -lCrun \ 1374 -lthread -ldoor -lc -ldemangle -lnsl -lrt" 1375 elif test "x$OPENJDK_$1_OS" = xmacosx; then 1376 $2JVM_LIBS="[$]$2JVM_LIBS -lm" 1377 elif test "x$OPENJDK_$1_OS" = xaix; then 1378 $2JVM_LIBS="[$]$2JVM_LIBS -Wl,-lC_r -lm -ldl -lpthread" 1379 elif test "x$OPENJDK_$1_OS" = xbsd; then 1380 $2JVM_LIBS="[$]$2JVM_LIBS -lm" 1381 elif test "x$OPENJDK_$1_OS" = xwindows; then 1382 $2JVM_LIBS="[$]$2JVM_LIBS kernel32.lib user32.lib gdi32.lib winspool.lib \ 1383 comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib \ 1384 wsock32.lib winmm.lib version.lib psapi.lib" 1385 fi 1386 1387 # Set $2JVM_ASFLAGS 1388 if test "x$OPENJDK_$1_OS" = xlinux; then 1389 if test "x$OPENJDK_$1_CPU" = xx86; then 1390 $2JVM_ASFLAGS="[$]$2JVM_ASFLAGS -march=i586" 1391 fi 1392 elif test "x$OPENJDK_$1_OS" = xmacosx; then 1393 $2JVM_ASFLAGS="[$]$2JVM_ASFLAGS -x assembler-with-cpp -mno-omit-leaf-frame-pointer -mstack-alignment=16" 1394 fi 1395 1396 $2LDFLAGS_JDKLIB="${$2LDFLAGS_JDKLIB} ${$2EXTRA_LDFLAGS_JDK}" 1397 1398 AC_SUBST($2LDFLAGS_JDKLIB) 1399 AC_SUBST($2LDFLAGS_JDKEXE) 1400 AC_SUBST($2JDKLIB_LIBS) 1401 AC_SUBST($2JDKEXE_LIBS) 1402 AC_SUBST($2LDFLAGS_CXX_JDK) 1403 AC_SUBST($2LDFLAGS_HASH_STYLE) 1404 AC_SUBST($2LDFLAGS_NO_EXEC_STACK) 1405 1406 AC_SUBST($2JVM_CFLAGS) 1407 AC_SUBST($2JVM_LDFLAGS) 1408 AC_SUBST($2JVM_ASFLAGS) 1409 AC_SUBST($2JVM_LIBS) 1410 1411 ]) 1412 1413 # FLAGS_C_COMPILER_CHECK_ARGUMENTS(ARGUMENT: [ARGUMENT], IF_TRUE: [RUN-IF-TRUE], 1414 # IF_FALSE: [RUN-IF-FALSE]) 1415 # ------------------------------------------------------------ 1416 # Check that the C compiler supports an argument 1417 BASIC_DEFUN_NAMED([FLAGS_C_COMPILER_CHECK_ARGUMENTS], 1418 [*ARGUMENT IF_TRUE IF_FALSE], [$@], 1419 [ 1420 AC_MSG_CHECKING([if the C compiler supports "ARG_ARGUMENT"]) 1421 supports=yes 1422 1423 saved_cflags="$CFLAGS" 1424 CFLAGS="$CFLAGS ARG_ARGUMENT" 1425 AC_LANG_PUSH([C]) 1426 AC_COMPILE_IFELSE([AC_LANG_SOURCE([[int i;]])], [], 1427 [supports=no]) 1428 AC_LANG_POP([C]) 1429 CFLAGS="$saved_cflags" 1430 1431 AC_MSG_RESULT([$supports]) 1432 if test "x$supports" = "xyes" ; then 1433 : 1434 ARG_IF_TRUE 1435 else 1436 : 1437 ARG_IF_FALSE 1438 fi 1439 ]) 1440 1441 # FLAGS_CXX_COMPILER_CHECK_ARGUMENTS(ARGUMENT: [ARGUMENT], IF_TRUE: [RUN-IF-TRUE], 1442 # IF_FALSE: [RUN-IF-FALSE]) 1443 # ------------------------------------------------------------ 1444 # Check that the C++ compiler supports an argument 1445 BASIC_DEFUN_NAMED([FLAGS_CXX_COMPILER_CHECK_ARGUMENTS], 1446 [*ARGUMENT IF_TRUE IF_FALSE], [$@], 1447 [ 1448 AC_MSG_CHECKING([if the C++ compiler supports "ARG_ARGUMENT"]) 1449 supports=yes 1450 1451 saved_cxxflags="$CXXFLAGS" 1452 CXXFLAGS="$CXXFLAG ARG_ARGUMENT" 1453 AC_LANG_PUSH([C++]) 1454 AC_COMPILE_IFELSE([AC_LANG_SOURCE([[int i;]])], [], 1455 [supports=no]) 1456 AC_LANG_POP([C++]) 1457 CXXFLAGS="$saved_cxxflags" 1458 1459 AC_MSG_RESULT([$supports]) 1460 if test "x$supports" = "xyes" ; then 1461 : 1462 ARG_IF_TRUE 1463 else 1464 : 1465 ARG_IF_FALSE 1466 fi 1467 ]) 1468 1469 # FLAGS_COMPILER_CHECK_ARGUMENTS(ARGUMENT: [ARGUMENT], IF_TRUE: [RUN-IF-TRUE], 1470 # IF_FALSE: [RUN-IF-FALSE]) 1471 # ------------------------------------------------------------ 1472 # Check that the C and C++ compilers support an argument 1473 BASIC_DEFUN_NAMED([FLAGS_COMPILER_CHECK_ARGUMENTS], 1474 [*ARGUMENT IF_TRUE IF_FALSE], [$@], 1475 [ 1476 FLAGS_C_COMPILER_CHECK_ARGUMENTS(ARGUMENT: [ARG_ARGUMENT], 1477 IF_TRUE: [C_COMP_SUPPORTS="yes"], 1478 IF_FALSE: [C_COMP_SUPPORTS="no"]) 1479 FLAGS_CXX_COMPILER_CHECK_ARGUMENTS(ARGUMENT: [ARG_ARGUMENT], 1480 IF_TRUE: [CXX_COMP_SUPPORTS="yes"], 1481 IF_FALSE: [CXX_COMP_SUPPORTS="no"]) 1482 1483 AC_MSG_CHECKING([if both compilers support "ARG_ARGUMENT"]) 1484 supports=no 1485 if test "x$C_COMP_SUPPORTS" = "xyes" -a "x$CXX_COMP_SUPPORTS" = "xyes"; then supports=yes; fi 1486 1487 AC_MSG_RESULT([$supports]) 1488 if test "x$supports" = "xyes" ; then 1489 : 1490 ARG_IF_TRUE 1491 else 1492 : 1493 ARG_IF_FALSE 1494 fi 1495 ]) 1496 1497 # FLAGS_LINKER_CHECK_ARGUMENTS(ARGUMENT: [ARGUMENT], IF_TRUE: [RUN-IF-TRUE], 1498 # IF_FALSE: [RUN-IF-FALSE]) 1499 # ------------------------------------------------------------ 1500 # Check that the linker support an argument 1501 BASIC_DEFUN_NAMED([FLAGS_LINKER_CHECK_ARGUMENTS], 1502 [*ARGUMENT IF_TRUE IF_FALSE], [$@], 1503 [ 1504 AC_MSG_CHECKING([if linker supports "ARG_ARGUMENT"]) 1505 supports=yes 1506 1507 saved_ldflags="$LDFLAGS" 1508 LDFLAGS="$LDFLAGS ARG_ARGUMENT" 1509 AC_LANG_PUSH([C]) 1510 AC_LINK_IFELSE([AC_LANG_PROGRAM([[]],[[]])], 1511 [], [supports=no]) 1512 AC_LANG_POP([C]) 1513 LDFLAGS="$saved_ldflags" 1514 1515 AC_MSG_RESULT([$supports]) 1516 if test "x$supports" = "xyes" ; then 1517 : 1518 ARG_IF_TRUE 1519 else 1520 : 1521 ARG_IF_FALSE 1522 fi 1523 ]) 1524 1525 AC_DEFUN_ONCE([FLAGS_SETUP_COMPILER_FLAGS_MISC], 1526 [ 1527 # Check that the compiler supports -mX (or -qX on AIX) flags 1528 # Set COMPILER_SUPPORTS_TARGET_BITS_FLAG to 'true' if it does 1529 FLAGS_COMPILER_CHECK_ARGUMENTS(ARGUMENT: [${COMPILER_TARGET_BITS_FLAG}${OPENJDK_TARGET_CPU_BITS}], 1530 IF_TRUE: [COMPILER_SUPPORTS_TARGET_BITS_FLAG=true], 1531 IF_FALSE: [COMPILER_SUPPORTS_TARGET_BITS_FLAG=false]) 1532 AC_SUBST(COMPILER_SUPPORTS_TARGET_BITS_FLAG) 1533 1534 AC_ARG_ENABLE([warnings-as-errors], [AS_HELP_STRING([--disable-warnings-as-errors], 1535 [do not consider native warnings to be an error @<:@enabled@:>@])]) 1536 1537 AC_MSG_CHECKING([if native warnings are errors]) 1538 if test "x$enable_warnings_as_errors" = "xyes"; then 1539 AC_MSG_RESULT([yes (explicitly set)]) 1540 WARNINGS_AS_ERRORS=true 1541 elif test "x$enable_warnings_as_errors" = "xno"; then 1542 AC_MSG_RESULT([no]) 1543 WARNINGS_AS_ERRORS=false 1544 elif test "x$enable_warnings_as_errors" = "x"; then 1545 AC_MSG_RESULT([yes (default)]) 1546 WARNINGS_AS_ERRORS=true 1547 else 1548 AC_MSG_ERROR([--enable-warnings-as-errors accepts no argument]) 1549 fi 1550 1551 AC_SUBST(WARNINGS_AS_ERRORS) 1552 1553 case "${TOOLCHAIN_TYPE}" in 1554 microsoft) 1555 DISABLE_WARNING_PREFIX="-wd" 1556 CFLAGS_WARNINGS_ARE_ERRORS="-WX" 1557 ;; 1558 solstudio) 1559 DISABLE_WARNING_PREFIX="-erroff=" 1560 CFLAGS_WARNINGS_ARE_ERRORS="-errtags -errwarn=%all" 1561 ;; 1562 gcc) 1563 # Prior to gcc 4.4, a -Wno-X where X is unknown for that version of gcc will cause an error 1564 FLAGS_COMPILER_CHECK_ARGUMENTS(ARGUMENT: [-Wno-this-is-a-warning-that-do-not-exist], 1565 IF_TRUE: [GCC_CAN_DISABLE_WARNINGS=true], 1566 IF_FALSE: [GCC_CAN_DISABLE_WARNINGS=false] 1567 ) 1568 if test "x$GCC_CAN_DISABLE_WARNINGS" = "xtrue"; then 1569 DISABLE_WARNING_PREFIX="-Wno-" 1570 else 1571 DISABLE_WARNING_PREFIX= 1572 fi 1573 CFLAGS_WARNINGS_ARE_ERRORS="-Werror" 1574 # Repeate the check for the BUILD_CC and BUILD_CXX. Need to also reset 1575 # CFLAGS since any target specific flags will likely not work with the 1576 # build compiler 1577 CC_OLD="$CC" 1578 CXX_OLD="$CXX" 1579 CC="$BUILD_CC" 1580 CXX="$BUILD_CXX" 1581 CFLAGS_OLD="$CFLAGS" 1582 CFLAGS="" 1583 FLAGS_COMPILER_CHECK_ARGUMENTS(ARGUMENT: [-Wno-this-is-a-warning-that-do-not-exist], 1584 IF_TRUE: [BUILD_CC_CAN_DISABLE_WARNINGS=true], 1585 IF_FALSE: [BUILD_CC_CAN_DISABLE_WARNINGS=false] 1586 ) 1587 if test "x$BUILD_CC_CAN_DISABLE_WARNINGS" = "xtrue"; then 1588 BUILD_CC_DISABLE_WARNING_PREFIX="-Wno-" 1589 else 1590 BUILD_CC_DISABLE_WARNING_PREFIX= 1591 fi 1592 CC="$CC_OLD" 1593 CXX="$CXX_OLD" 1594 CFLAGS="$CFLAGS_OLD" 1595 ;; 1596 clang) 1597 DISABLE_WARNING_PREFIX="-Wno-" 1598 CFLAGS_WARNINGS_ARE_ERRORS="-Werror" 1599 ;; 1600 xlc) 1601 DISABLE_WARNING_PREFIX="-qsuppress=" 1602 CFLAGS_WARNINGS_ARE_ERRORS="-qhalt=w" 1603 ;; 1604 esac 1605 AC_SUBST(DISABLE_WARNING_PREFIX) 1606 AC_SUBST(BUILD_CC_DISABLE_WARNING_PREFIX) 1607 AC_SUBST(CFLAGS_WARNINGS_ARE_ERRORS) 1608 ]) 1609 1610 # FLAGS_SETUP_GCC6_COMPILER_FLAGS([PREFIX]) 1611 # Arguments: 1612 # $1 - Optional prefix for each variable defined. 1613 AC_DEFUN([FLAGS_SETUP_GCC6_COMPILER_FLAGS], 1614 [ 1615 # These flags are required for GCC 6 builds as undefined behaviour in OpenJDK code 1616 # runs afoul of the more aggressive versions of these optimisations. 1617 # Notably, value range propagation now assumes that the this pointer of C++ 1618 # member functions is non-null. 1619 NO_DELETE_NULL_POINTER_CHECKS_CFLAG="-fno-delete-null-pointer-checks" 1620 dnl Argument check is disabled until FLAGS_COMPILER_CHECK_ARGUMENTS handles cross-compilation 1621 dnl FLAGS_COMPILER_CHECK_ARGUMENTS(ARGUMENT: [$NO_DELETE_NULL_POINTER_CHECKS_CFLAG -Werror], 1622 dnl IF_FALSE: [NO_DELETE_NULL_POINTER_CHECKS_CFLAG=""]) 1623 NO_LIFETIME_DSE_CFLAG="-fno-lifetime-dse" 1624 dnl Argument check is disabled until FLAGS_COMPILER_CHECK_ARGUMENTS handles cross-compilation 1625 dnl FLAGS_COMPILER_CHECK_ARGUMENTS(ARGUMENT: [$NO_LIFETIME_DSE_CFLAG -Werror], 1626 dnl IF_FALSE: [NO_LIFETIME_DSE_CFLAG=""]) 1627 AC_MSG_NOTICE([GCC >= 6 detected; adding ${NO_DELETE_NULL_POINTER_CHECKS_CFLAG} and ${NO_LIFETIME_DSE_CFLAG}]) 1628 $1CFLAGS_JDK="[$]$1CFLAGS_JDK ${NO_DELETE_NULL_POINTER_CHECKS_CFLAG} ${NO_LIFETIME_DSE_CFLAG}" 1629 $1JVM_CFLAGS="[$]$1JVM_CFLAGS ${NO_DELETE_NULL_POINTER_CHECKS_CFLAG} ${NO_LIFETIME_DSE_CFLAG}" 1630 ])