flags.m4 revision 2189:f51004322fbe
10Sduke# 22001Sdfazunen# Copyright (c) 2011, 2016, Oracle and/or its affiliates. All rights reserved. 30Sduke# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 40Sduke# 50Sduke# This code is free software; you can redistribute it and/or modify it 60Sduke# under the terms of the GNU General Public License version 2 only, as 7180Sohair# published by the Free Software Foundation. Oracle designates this 80Sduke# particular file as subject to the "Classpath" exception as provided 9180Sohair# by Oracle in the LICENSE file that accompanied this code. 100Sduke# 110Sduke# This code is distributed in the hope that it will be useful, but WITHOUT 120Sduke# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 130Sduke# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 140Sduke# version 2 for more details (a copy is included in the LICENSE file that 150Sduke# accompanied this code). 160Sduke# 170Sduke# You should have received a copy of the GNU General Public License version 180Sduke# 2 along with this work; if not, write to the Free Software Foundation, 190Sduke# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 200Sduke# 21180Sohair# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 22180Sohair# or visit www.oracle.com if you need additional information or have any 23180Sohair# questions. 240Sduke# 250Sduke 261084Smikael# Reset the global CFLAGS/LDFLAGS variables and initialize them with the 271084Smikael# corresponding configure arguments instead 281084SmikaelAC_DEFUN_ONCE([FLAGS_SETUP_USER_SUPPLIED_FLAGS], 291084Smikael[ 300Sduke if test "x$CFLAGS" != "x${ADDED_CFLAGS}"; then 311461Smikael AC_MSG_WARN([Ignoring CFLAGS($CFLAGS) found in environment. Use --with-extra-cflags]) 321461Smikael fi 331345Sihse 341084Smikael if test "x$CXXFLAGS" != "x${ADDED_CXXFLAGS}"; then 35922Serikj AC_MSG_WARN([Ignoring CXXFLAGS($CXXFLAGS) found in environment. Use --with-extra-cxxflags]) 36206Sohair fi 371891Serikj 381877Smikael if test "x$LDFLAGS" != "x${ADDED_LDFLAGS}"; then 39157Sohair AC_MSG_WARN([Ignoring LDFLAGS($LDFLAGS) found in environment. Use --with-extra-ldflags]) 40206Sohair fi 41157Sohair 42157Sohair AC_ARG_WITH(extra-cflags, [AS_HELP_STRING([--with-extra-cflags], 431084Smikael [extra flags to be used when compiling jdk c-files])]) 44921Serikj 451930Serikj AC_ARG_WITH(extra-cxxflags, [AS_HELP_STRING([--with-extra-cxxflags], 461930Serikj [extra flags to be used when compiling jdk c++-files])]) 471930Serikj 481084Smikael AC_ARG_WITH(extra-ldflags, [AS_HELP_STRING([--with-extra-ldflags], 491930Serikj [extra flags to be used when linking jdk])]) 501930Serikj 511930Serikj EXTRA_CFLAGS="$with_extra_cflags" 521930Serikj EXTRA_CXXFLAGS="$with_extra_cxxflags" 531930Serikj EXTRA_LDFLAGS="$with_extra_ldflags" 541930Serikj 551930Serikj # Hotspot needs these set in their legacy form 561930Serikj LEGACY_EXTRA_CFLAGS="$LEGACY_EXTRA_CFLAGS $EXTRA_CFLAGS" 571930Serikj LEGACY_EXTRA_CXXFLAGS="$LEGACY_EXTRA_CXXFLAGS $EXTRA_CXXFLAGS" 581930Serikj LEGACY_EXTRA_LDFLAGS="$LEGACY_EXTRA_LDFLAGS $EXTRA_LDFLAGS" 591930Serikj 601930Serikj AC_SUBST(LEGACY_EXTRA_CFLAGS) 611930Serikj AC_SUBST(LEGACY_EXTRA_CXXFLAGS) 621930Serikj AC_SUBST(LEGACY_EXTRA_LDFLAGS) 631930Serikj 641930Serikj AC_SUBST(EXTRA_CFLAGS) 651930Serikj AC_SUBST(EXTRA_CXXFLAGS) 661930Serikj AC_SUBST(EXTRA_LDFLAGS) 671930Serikj 681930Serikj # The global CFLAGS and LDLAGS variables are used by configure tests and 691930Serikj # should include the extra parameters 701930Serikj CFLAGS="$EXTRA_CFLAGS" 711930Serikj CXXFLAGS="$EXTRA_CXXFLAGS" 721930Serikj LDFLAGS="$EXTRA_LDFLAGS" 731930Serikj CPPFLAGS="" 741930Serikj]) 751891Serikj 761891Serikj# Setup the sysroot flags and add them to global CFLAGS and LDFLAGS so 771468Smikael# that configure can use them while detecting compilers. 782129Slmesnik# TOOLCHAIN_TYPE is available here. 791468Smikael# Param 1 - Optional prefix to all variables. (e.g BUILD_) 801930SerikjAC_DEFUN([FLAGS_SETUP_SYSROOT_FLAGS], 811930Serikj[ 821964Serikj if test "x[$]$1SYSROOT" != "x"; then 831964Serikj if test "x$TOOLCHAIN_TYPE" = xsolstudio; then 841964Serikj if test "x$OPENJDK_TARGET_OS" = xsolaris; then 851964Serikj # Solaris Studio does not have a concept of sysroot. Instead we must 861964Serikj # make sure the default include and lib dirs are appended to each 871964Serikj # compile and link command line. Must also add -I-xbuiltin to enable 881930Serikj # inlining of system functions and intrinsics. 891930Serikj $1SYSROOT_CFLAGS="-I-xbuiltin -I[$]$1SYSROOT/usr/include" 901930Serikj $1SYSROOT_LDFLAGS="-L[$]$1SYSROOT/usr/lib$OPENJDK_TARGET_CPU_ISADIR \ 911930Serikj -L[$]$1SYSROOT/lib$OPENJDK_TARGET_CPU_ISADIR \ 921930Serikj -L[$]$1SYSROOT/usr/ccs/lib$OPENJDK_TARGET_CPU_ISADIR" 931930Serikj fi 941930Serikj elif test "x$TOOLCHAIN_TYPE" = xgcc; then 951930Serikj $1SYSROOT_CFLAGS="--sysroot=[$]$1SYSROOT" 961930Serikj $1SYSROOT_LDFLAGS="--sysroot=[$]$1SYSROOT" 971964Serikj elif test "x$TOOLCHAIN_TYPE" = xclang; then 981964Serikj $1SYSROOT_CFLAGS="-isysroot [$]$1SYSROOT" 991964Serikj $1SYSROOT_LDFLAGS="-isysroot [$]$1SYSROOT" 1001964Serikj fi 1011964Serikj # Propagate the sysroot args to hotspot 1021964Serikj $1LEGACY_EXTRA_CFLAGS="[$]$1LEGACY_EXTRA_CFLAGS [$]$1SYSROOT_CFLAGS" 1031964Serikj $1LEGACY_EXTRA_CXXFLAGS="[$]$1LEGACY_EXTRA_CXXFLAGS [$]$1SYSROOT_CFLAGS" 1041964Serikj $1LEGACY_EXTRA_LDFLAGS="[$]$1LEGACY_EXTRA_LDFLAGS [$]$1SYSROOT_LDFLAGS" 1051964Serikj # The global CFLAGS and LDFLAGS variables need these for configure to function 1061930Serikj $1CFLAGS="[$]$1CFLAGS [$]$1SYSROOT_CFLAGS" 1071964Serikj $1CPPFLAGS="[$]$1CPPFLAGS [$]$1SYSROOT_CFLAGS" 1081964Serikj $1CXXFLAGS="[$]$1CXXFLAGS [$]$1SYSROOT_CFLAGS" 1091964Serikj $1LDFLAGS="[$]$1LDFLAGS [$]$1SYSROOT_LDFLAGS" 1101964Serikj fi 1111964Serikj 1121964Serikj if test "x$OPENJDK_TARGET_OS" = xmacosx; then 1131964Serikj # We also need -iframework<path>/System/Library/Frameworks 1141964Serikj $1SYSROOT_CFLAGS="[$]$1SYSROOT_CFLAGS -iframework [$]$1SYSROOT/System/Library/Frameworks" 1151964Serikj $1SYSROOT_LDFLAGS="[$]$1SYSROOT_LDFLAGS -iframework [$]$1SYSROOT/System/Library/Frameworks" 1161964Serikj # These always need to be set, or we can't find the frameworks embedded in JavaVM.framework 1171964Serikj # set this here so it doesn't have to be peppered throughout the forest 1181964Serikj $1SYSROOT_CFLAGS="[$]$1SYSROOT_CFLAGS -F [$]$1SYSROOT/System/Library/Frameworks/JavaVM.framework/Frameworks" 1191964Serikj $1SYSROOT_LDFLAGS="[$]$1SYSROOT_LDFLAGS -F [$]$1SYSROOT/System/Library/Frameworks/JavaVM.framework/Frameworks" 1201930Serikj fi 1211930Serikj 1221930Serikj AC_SUBST($1SYSROOT_CFLAGS) 1231084Smikael AC_SUBST($1SYSROOT_LDFLAGS) 1241964Serikj]) 1251084Smikael 126921SerikjAC_DEFUN_ONCE([FLAGS_SETUP_INIT_FLAGS], 1271084Smikael[ 1281229Siignatyev # COMPILER_TARGET_BITS_FLAG : option for selecting 32- or 64-bit output 1291229Siignatyev # COMPILER_COMMAND_FILE_FLAG : option for passing a command file to the compiler 1301964Serikj # COMPILER_BINDCMD_FILE_FLAG : option for specifying a file which saves the binder 1311084Smikael # commands produced by the link step (currently AIX only) 1322024Serikj if test "x$TOOLCHAIN_TYPE" = xxlc; then 1332024Serikj COMPILER_TARGET_BITS_FLAG="-q" 1341964Serikj COMPILER_COMMAND_FILE_FLAG="-f" 1351930Serikj COMPILER_BINDCMD_FILE_FLAG="-bloadmap:" 1362024Serikj else 1372024Serikj COMPILER_TARGET_BITS_FLAG="-m" 1382024Serikj COMPILER_COMMAND_FILE_FLAG="@" 1392024Serikj COMPILER_BINDCMD_FILE_FLAG="" 1402024Serikj 1411930Serikj # The solstudio linker does not support @-files. 1421229Siignatyev if test "x$TOOLCHAIN_TYPE" = xsolstudio; then 1431964Serikj COMPILER_COMMAND_FILE_FLAG= 1441930Serikj fi 1451930Serikj 1461930Serikj # Check if @file is supported by gcc 1471084Smikael if test "x$TOOLCHAIN_TYPE" = xgcc; then 1481832Scjplummer AC_MSG_CHECKING([if @file is supported by gcc]) 1491832Scjplummer # Extra emtpy "" to prevent ECHO from interpreting '--version' as argument 1501832Scjplummer $ECHO "" "--version" > command.file 1511832Scjplummer if $CXX @command.file 2>&AS_MESSAGE_LOG_FD >&AS_MESSAGE_LOG_FD; then 1521964Serikj AC_MSG_RESULT(yes) 1531964Serikj COMPILER_COMMAND_FILE_FLAG="@" 1541832Scjplummer else 1551832Scjplummer AC_MSG_RESULT(no) 1561832Scjplummer COMPILER_COMMAND_FILE_FLAG= 1571832Scjplummer fi 1581832Scjplummer $RM command.file 1591832Scjplummer fi 1601832Scjplummer fi 1611832Scjplummer AC_SUBST(COMPILER_TARGET_BITS_FLAG) 1621832Scjplummer AC_SUBST(COMPILER_COMMAND_FILE_FLAG) 1631832Scjplummer AC_SUBST(COMPILER_BINDCMD_FILE_FLAG) 1641084Smikael 1651084Smikael # FIXME: figure out if we should select AR flags depending on OS or toolchain. 1661084Smikael if test "x$OPENJDK_TARGET_OS" = xmacosx; then 1671084Smikael ARFLAGS="-r" 1681461Smikael elif test "x$OPENJDK_TARGET_OS" = xaix; then 1691084Smikael ARFLAGS="-X64" 1701084Smikael elif test "x$OPENJDK_TARGET_OS" = xwindows; then 1711084Smikael # lib.exe is used as AR to create static libraries. 1721084Smikael ARFLAGS="-nologo -NODEFAULTLIB:MSVCRT" 1731084Smikael else 1741084Smikael ARFLAGS="" 1751084Smikael fi 1761084Smikael AC_SUBST(ARFLAGS) 1771084Smikael 1781084Smikael ## Setup strip. 1791084Smikael # FIXME: should this really be per platform, or should it be per toolchain type? 1801084Smikael # strip is not provided by clang or solstudio; so guessing platform makes most sense. 1811084Smikael # FIXME: we should really only export STRIPFLAGS from here, not POST_STRIP_CMD. 1821758Serikj if test "x$OPENJDK_TARGET_OS" = xlinux; then 1831758Serikj STRIPFLAGS="-g" 1841930Serikj elif test "x$OPENJDK_TARGET_OS" = xsolaris; then 1851340Sihse STRIPFLAGS="-x" 1861340Sihse elif test "x$OPENJDK_TARGET_OS" = xmacosx; then 1871084Smikael STRIPFLAGS="-S" 1881084Smikael elif test "x$OPENJDK_TARGET_OS" = xaix; then 1891084Smikael STRIPFLAGS="-X32_64" 1901084Smikael fi 1911084Smikael 1921084Smikael AC_SUBST(STRIPFLAGS) 1931084Smikael 1941084Smikael if test "x$TOOLCHAIN_TYPE" = xmicrosoft; then 1951084Smikael CC_OUT_OPTION=-Fo 1961084Smikael EXE_OUT_OPTION=-out: 1972083Serikj LD_OUT_OPTION=-out: 1982083Serikj AR_OUT_OPTION=-out: 1992083Serikj else 2002083Serikj # The option used to specify the target .o,.a or .so file. 2012083Serikj # When compiling, how to specify the to be created object file. 2022083Serikj CC_OUT_OPTION='-o$(SPACE)' 2032083Serikj # When linking, how to specify the to be created executable. 2042083Serikj EXE_OUT_OPTION='-o$(SPACE)' 2052083Serikj # When linking, how to specify the to be created dynamically linkable library. 2061084Smikael LD_OUT_OPTION='-o$(SPACE)' 2071084Smikael # When archiving, how to specify the to be create static archive for object files. 2081084Smikael AR_OUT_OPTION='rcs$(SPACE)' 2091084Smikael fi 2101084Smikael AC_SUBST(CC_OUT_OPTION) 2112129Slmesnik AC_SUBST(EXE_OUT_OPTION) 2121891Serikj AC_SUBST(LD_OUT_OPTION) 2131417Stbell AC_SUBST(AR_OUT_OPTION) 2142129Slmesnik 2151891Serikj # On Windows, we need to set RC flags. 2161084Smikael if test "x$TOOLCHAIN_TYPE" = xmicrosoft; then 2171084Smikael RC_FLAGS="-nologo -l0x409" 2181084Smikael JVM_RCFLAGS="-nologo" 2191084Smikael if test "x$DEBUG_LEVEL" = xrelease; then 2201084Smikael RC_FLAGS="$RC_FLAGS -DNDEBUG" 2211084Smikael JVM_RCFLAGS="$JVM_RCFLAGS -DNDEBUG" 2221084Smikael fi 2231084Smikael 2241084Smikael # The version variables used to create RC_FLAGS may be overridden 2251084Smikael # in a custom configure script, or possibly the command line. 2261084Smikael # Let those variables be expanded at make time in spec.gmk. 2271084Smikael # The \$ are escaped to the shell, and the $(...) variables 2281236Sihse # are evaluated by make. 2291084Smikael RC_FLAGS="$RC_FLAGS \ 2301084Smikael -D\"JDK_VERSION_STRING=\$(VERSION_STRING)\" \ 2311084Smikael -D\"JDK_COMPANY=\$(COMPANY_NAME)\" \ 2321084Smikael -D\"JDK_COMPONENT=\$(PRODUCT_NAME) \$(JDK_RC_PLATFORM_NAME) binary\" \ 2331084Smikael -D\"JDK_VER=\$(VERSION_NUMBER)\" \ 2341084Smikael -D\"JDK_COPYRIGHT=Copyright \xA9 $COPYRIGHT_YEAR\" \ 2351084Smikael -D\"JDK_NAME=\$(PRODUCT_NAME) \$(JDK_RC_PLATFORM_NAME) \$(VERSION_MAJOR)\" \ 2361084Smikael -D\"JDK_FVER=\$(subst .,\$(COMMA),\$(VERSION_NUMBER_FOUR_POSITIONS))\"" 2371084Smikael 2381084Smikael JVM_RCFLAGS="$JVM_RCFLAGS \ 2391084Smikael -D\"HS_BUILD_ID=\$(VERSION_STRING)\" \ 2401084Smikael -D\"HS_COMPANY=\$(COMPANY_NAME)\" \ 2411084Smikael -D\"JDK_DOTVER=\$(VERSION_NUMBER_FOUR_POSITIONS)\" \ 2421084Smikael -D\"HS_COPYRIGHT=Copyright $COPYRIGHT_YEAR\" \ 2431159Scoffeys -D\"HS_NAME=\$(PRODUCT_NAME) \$(VERSION_SHORT)\" \ 2441084Smikael -D\"JDK_VER=\$(subst .,\$(COMMA),\$(VERSION_NUMBER_FOUR_POSITIONS))\" \ 2451084Smikael -D\"HS_FNAME=jvm.dll\" \ 2461084Smikael -D\"HS_INTERNAL_NAME=jvm\"" 2471084Smikael fi 2481084Smikael AC_SUBST(RC_FLAGS) 2491084Smikael AC_SUBST(JVM_RCFLAGS) 2501084Smikael 2511084Smikael if test "x$TOOLCHAIN_TYPE" = xmicrosoft; then 2521084Smikael # silence copyright notice and other headers. 2531084Smikael COMMON_CCXXFLAGS="$COMMON_CCXXFLAGS -nologo" 2541084Smikael fi 2551084Smikael]) 2561084Smikael 2571084SmikaelAC_DEFUN([FLAGS_SETUP_COMPILER_FLAGS_FOR_LIBS], 2581084Smikael[ 2591223Schegar ############################################################################### 2601223Schegar # 2611084Smikael # How to compile shared libraries. 2621257Sjoehw # 2631257Sjoehw 2641257Sjoehw if test "x$TOOLCHAIN_TYPE" = xgcc; then 2651257Sjoehw PICFLAG="-fPIC" 2661257Sjoehw C_FLAG_REORDER='' 2671257Sjoehw CXX_FLAG_REORDER='' 2681257Sjoehw 2691084Smikael if test "x$OPENJDK_TARGET_OS" = xmacosx; then 2701084Smikael # Linking is different on MacOSX 2711084Smikael if test "x$STATIC_BUILD" = xtrue; then 2721084Smikael SHARED_LIBRARY_FLAGS ='-undefined dynamic_lookup' 2731084Smikael else 2741084Smikael SHARED_LIBRARY_FLAGS="-dynamiclib -compatibility_version 1.0.0 -current_version 1.0.0 $PICFLAG" 2751084Smikael JVM_CFLAGS="$JVM_CFLAGS $PICFLAG" 2761084Smikael fi 2771084Smikael SET_EXECUTABLE_ORIGIN='-Wl,-rpath,@loader_path/.' 2781084Smikael SET_SHARED_LIBRARY_ORIGIN="$SET_EXECUTABLE_ORIGIN" 2791084Smikael SET_SHARED_LIBRARY_NAME='-Wl,-install_name,@rpath/[$]1' 2801092Smikael SET_SHARED_LIBRARY_MAPFILE='-Wl,-exported_symbols_list,[$]1' 2811084Smikael else 2821084Smikael # Default works for linux, might work on other platforms as well. 2831084Smikael SHARED_LIBRARY_FLAGS='-shared' 2841084Smikael SET_EXECUTABLE_ORIGIN='-Wl,-rpath,\$$$$ORIGIN[$]1' 2851084Smikael SET_SHARED_LIBRARY_ORIGIN="-Wl,-z,origin $SET_EXECUTABLE_ORIGIN" 2861084Smikael SET_SHARED_LIBRARY_NAME='-Wl,-soname=[$]1' 2871084Smikael SET_SHARED_LIBRARY_MAPFILE='-Wl,-version-script=[$]1' 2881084Smikael fi 2891084Smikael elif test "x$TOOLCHAIN_TYPE" = xclang; then 2901084Smikael C_FLAG_REORDER='' 2911084Smikael CXX_FLAG_REORDER='' 2921257Sjoehw 2931257Sjoehw if test "x$OPENJDK_TARGET_OS" = xmacosx; then 2941084Smikael # Linking is different on MacOSX 2951084Smikael PICFLAG='' 2961084Smikael SHARED_LIBRARY_FLAGS="-dynamiclib -compatibility_version 1.0.0 -current_version 1.0.0 $PICFLAG" 2971084Smikael SET_EXECUTABLE_ORIGIN='-Wl,-rpath,@loader_path/.' 2981084Smikael SET_SHARED_LIBRARY_ORIGIN="$SET_EXECUTABLE_ORIGIN" 2992129Slmesnik SET_SHARED_LIBRARY_NAME='-Wl,-install_name,@rpath/[$]1' 3001891Serikj SET_SHARED_LIBRARY_MAPFILE='-Wl,-exported_symbols_list,[$]1' 3011084Smikael 3021084Smikael if test "x$STATIC_BUILD" = xfalse; then 3031084Smikael JVM_CFLAGS="$JVM_CFLAGS -fPIC" 3041084Smikael fi 3051084Smikael else 3061084Smikael # Default works for linux, might work on other platforms as well. 3071084Smikael PICFLAG='-fPIC' 3081084Smikael SHARED_LIBRARY_FLAGS='-shared' 3091084Smikael SET_EXECUTABLE_ORIGIN='-Wl,-rpath,\$$$$ORIGIN[$]1' 3101084Smikael SET_SHARED_LIBRARY_ORIGIN="-Wl,-z,origin $SET_EXECUTABLE_ORIGIN" 3111084Smikael SET_SHARED_LIBRARY_NAME='-Wl,-soname=[$]1' 3121084Smikael SET_SHARED_LIBRARY_MAPFILE='-Wl,-version-script=[$]1' 3131084Smikael fi 3141084Smikael elif test "x$TOOLCHAIN_TYPE" = xsolstudio; then 3151084Smikael PICFLAG="-KPIC" 3161964Serikj C_FLAG_REORDER='-xF' 3171084Smikael CXX_FLAG_REORDER='-xF' 3181084Smikael SHARED_LIBRARY_FLAGS="-G" 3191084Smikael SET_EXECUTABLE_ORIGIN='-R\$$$$ORIGIN[$]1' 3201084Smikael SET_SHARED_LIBRARY_ORIGIN="$SET_EXECUTABLE_ORIGIN" 3212002Sctornqvi SET_SHARED_LIBRARY_NAME='-h [$]1' 3221084Smikael SET_SHARED_LIBRARY_MAPFILE='-M[$]1' 3231891Serikj elif test "x$TOOLCHAIN_TYPE" = xxlc; then 3242002Sctornqvi # '-qpic' defaults to 'qpic=small'. This means that the compiler generates only 3251417Stbell # one instruction for accessing the TOC. If the TOC grows larger than 64K, the linker 3261891Serikj # will have to patch this single instruction with a call to some out-of-order code which 3272002Sctornqvi # does the load from the TOC. This is of course slow. But in that case we also would have 3281964Serikj # to use '-bbigtoc' for linking anyway so we could also change the PICFLAG to 'qpic=large'. 3291891Serikj # With 'qpic=large' the compiler will by default generate a two-instruction sequence which 3301084Smikael # can be patched directly by the linker and does not require a jump to out-of-order code. 331921Serikj # Another alternative instead of using 'qpic=large -bbigtoc' may be to use '-qminimaltoc' 3321084Smikael # instead. This creates a distinct TOC for every compilation unit (and thus requires two 3331084Smikael # loads for accessing a global variable). But there are rumors that this may be seen as a 3341084Smikael # 'performance feature' because of improved code locality of the symbols used in a 3351084Smikael # compilation unit. 3361084Smikael PICFLAG="-qpic" 3372323Sehelin JVM_CFLAGS="$JVM_CFLAGS $PICFLAG" 3381084Smikael C_FLAG_REORDER='' 3391084Smikael CXX_FLAG_REORDER='' 3401084Smikael SHARED_LIBRARY_FLAGS="-qmkshrobj -bM:SRE -bnoentry" 3411084Smikael SET_EXECUTABLE_ORIGIN="" 3421084Smikael SET_SHARED_LIBRARY_ORIGIN='' 3431114Smikael SET_SHARED_LIBRARY_NAME='' 3441114Smikael SET_SHARED_LIBRARY_MAPFILE='' 3452323Sehelin elif test "x$TOOLCHAIN_TYPE" = xmicrosoft; then 3461084Smikael PICFLAG="" 3471084Smikael C_FLAG_REORDER='' 3482002Sctornqvi CXX_FLAG_REORDER='' 3491891Serikj SHARED_LIBRARY_FLAGS="-dll" 3502002Sctornqvi SET_EXECUTABLE_ORIGIN='' 3511891Serikj SET_SHARED_LIBRARY_ORIGIN='' 3522323Sehelin SET_SHARED_LIBRARY_NAME='' 3531084Smikael SET_SHARED_LIBRARY_MAPFILE='-def:[$]1' 3541084Smikael fi 3551891Serikj 3561891Serikj AC_SUBST(C_FLAG_REORDER) 3572323Sehelin AC_SUBST(CXX_FLAG_REORDER) 358921Serikj AC_SUBST(SET_EXECUTABLE_ORIGIN) 3591084Smikael AC_SUBST(SET_SHARED_LIBRARY_ORIGIN) 3601417Stbell AC_SUBST(SET_SHARED_LIBRARY_NAME) 3611417Stbell AC_SUBST(SET_SHARED_LIBRARY_MAPFILE) 3622323Sehelin AC_SUBST(SHARED_LIBRARY_FLAGS) 3631084Smikael 3641084Smikael # The (cross) compiler is now configured, we can now test capabilities 3652002Sctornqvi # of the target platform. 3661891Serikj]) 3672002Sctornqvi 3682002Sctornqvi# Documentation on common flags used for solstudio in HIGHEST. 3692002Sctornqvi# 3702323Sehelin# WARNING: Use of OPTIMIZATION_LEVEL=HIGHEST in your Makefile needs to be 371921Serikj# done with care, there are some assumptions below that need to 3721084Smikael# be understood about the use of pointers, and IEEE behavior. 3731891Serikj# 3741891Serikj# -fns: Use non-standard floating point mode (not IEEE 754) 3751891Serikj# -fsimple: Do some simplification of floating point arithmetic (not IEEE 754) 3761891Serikj# -fsingle: Use single precision floating point with 'float' 3771891Serikj# -xalias_level=basic: Assume memory references via basic pointer types do not alias 3782323Sehelin# (Source with excessing pointer casting and data access with mixed 3791084Smikael# pointer types are not recommended) 3801084Smikael# -xbuiltin=%all: Use intrinsic or inline versions for math/std functions 3811084Smikael# (If you expect perfect errno behavior, do not use this) 3821084Smikael# -xdepend: Loop data dependency optimizations (need -xO3 or higher) 3831891Serikj# -xrestrict: Pointer parameters to functions do not overlap 3841084Smikael# (Similar to -xalias_level=basic usage, but less obvious sometimes. 3851084Smikael# If you pass in multiple pointers to the same data, do not use this) 3861084Smikael# -xlibmil: Inline some library routines 3871084Smikael# (If you expect perfect errno behavior, do not use this) 3881084Smikael# -xlibmopt: Use optimized math routines (CURRENTLY DISABLED) 3891084Smikael# (If you expect perfect errno behavior, do not use this) 3901084Smikael# Can cause undefined external on Solaris 8 X86 on __sincos, removing for now 3911084Smikael 3921084Smikael # FIXME: this will never happen since sparc != sparcv9, ie 32 bit, which we don't build anymore. 3931084Smikael # Bug? 3941084Smikael #if test "x$OPENJDK_TARGET_CPU" = xsparc; then 3951084Smikael # CFLAGS_JDK="${CFLAGS_JDK} -xmemalign=4s" 3961084Smikael # CXXFLAGS_JDK="${CXXFLAGS_JDK} -xmemalign=4s" 3971084Smikael #fi 3981084Smikael 3991084SmikaelAC_DEFUN_ONCE([FLAGS_SETUP_COMPILER_FLAGS_FOR_OPTIMIZATION], 4001084Smikael[ 4011084Smikael 4021084Smikael ############################################################################### 4031084Smikael # 4041084Smikael # Setup the opt flags for different compilers 4051468Smikael # and different operating systems. 4061891Serikj # 4071891Serikj 4081468Smikael # FIXME: this was indirectly the old default, but just inherited. 4091468Smikael # if test "x$TOOLCHAIN_TYPE" = xmicrosoft; then 4101468Smikael # C_FLAG_DEPS="-MMD -MF" 4111891Serikj # fi 4121891Serikj 4131891Serikj # Generate make dependency files 4142079Siignatyev if test "x$TOOLCHAIN_TYPE" = xgcc; then 4152079Siignatyev C_FLAG_DEPS="-MMD -MF" 4162079Siignatyev elif test "x$TOOLCHAIN_TYPE" = xclang; then 4172079Siignatyev C_FLAG_DEPS="-MMD -MF" 4182079Siignatyev elif test "x$TOOLCHAIN_TYPE" = xsolstudio; then 4192079Siignatyev C_FLAG_DEPS="-xMMD -xMF" 4202079Siignatyev elif test "x$TOOLCHAIN_TYPE" = xxlc; then 4212079Siignatyev C_FLAG_DEPS="-qmakedep=gcc -MF" 4222079Siignatyev fi 4232079Siignatyev CXX_FLAG_DEPS="$C_FLAG_DEPS" 4241137Sanoll AC_SUBST(C_FLAG_DEPS) 4251137Sanoll AC_SUBST(CXX_FLAG_DEPS) 4261137Sanoll 4271891Serikj # Debug symbols 4281891Serikj if test "x$TOOLCHAIN_TYPE" = xgcc; then 4291417Stbell if test "x$OPENJDK_TARGET_CPU_BITS" = "x64" && test "x$DEBUG_LEVEL" = "xfastdebug"; then 4301891Serikj # reduce from default "-g2" option to save space 4312002Sctornqvi CFLAGS_DEBUG_SYMBOLS="-g1" 4321084Smikael CXXFLAGS_DEBUG_SYMBOLS="-g1" 4331461Smikael else 4342004Sctornqvi CFLAGS_DEBUG_SYMBOLS="-g" 4352004Sctornqvi CXXFLAGS_DEBUG_SYMBOLS="-g" 4362004Sctornqvi fi 4372004Sctornqvi elif test "x$TOOLCHAIN_TYPE" = xclang; then 4382004Sctornqvi CFLAGS_DEBUG_SYMBOLS="-g" 4392004Sctornqvi CXXFLAGS_DEBUG_SYMBOLS="-g" 4402004Sctornqvi elif test "x$TOOLCHAIN_TYPE" = xsolstudio; then 4412004Sctornqvi CFLAGS_DEBUG_SYMBOLS="-g -xs" 4422004Sctornqvi # -g0 enables debug symbols without disabling inlining. 4432323Sehelin CXXFLAGS_DEBUG_SYMBOLS="-g0 -xs" 4442004Sctornqvi elif test "x$TOOLCHAIN_TYPE" = xxlc; then 4452004Sctornqvi CFLAGS_DEBUG_SYMBOLS="-g" 4462004Sctornqvi CXXFLAGS_DEBUG_SYMBOLS="-g" 4472323Sehelin elif test "x$TOOLCHAIN_TYPE" = xmicrosoft; then 4482323Sehelin CFLAGS_DEBUG_SYMBOLS="-Zi" 4492323Sehelin CXXFLAGS_DEBUG_SYMBOLS="-Zi" 4502323Sehelin fi 4512323Sehelin AC_SUBST(CFLAGS_DEBUG_SYMBOLS) 4522323Sehelin AC_SUBST(CXXFLAGS_DEBUG_SYMBOLS) 4532323Sehelin 4541461Smikael # Debug symbols for JVM_CFLAGS 4551461Smikael if test "x$TOOLCHAIN_TYPE" = xsolstudio; then 4561461Smikael JVM_CFLAGS_SYMBOLS="$JVM_CFLAGS_SYMBOLS -xs" 4571461Smikael if test "x$DEBUG_LEVEL" = xslowdebug; then 4581468Smikael JVM_CFLAGS_SYMBOLS="$JVM_CFLAGS_SYMBOLS -g" 4592079Siignatyev else 4601461Smikael # -g0 does not disable inlining, which -g does. 4611461Smikael JVM_CFLAGS_SYMBOLS="$JVM_CFLAGS_SYMBOLS -g0" 4621461Smikael fi 4631461Smikael elif test "x$TOOLCHAIN_TYPE" = xmicrosoft; then 4641461Smikael JVM_CFLAGS_SYMBOLS="$JVM_CFLAGS_SYMBOLS -Z7 -d2Zi+" 4651461Smikael else 4661461Smikael JVM_CFLAGS_SYMBOLS="$JVM_CFLAGS_SYMBOLS -g" 4671461Smikael fi 4681461Smikael AC_SUBST(JVM_CFLAGS_SYMBOLS) 4692079Siignatyev 4702079Siignatyev # bounds, memory and behavior checking options 4712079Siignatyev if test "x$TOOLCHAIN_TYPE" = xgcc; then 4721345Sihse case $DEBUG_LEVEL in 4731345Sihse release ) 4741345Sihse # no adjustment 4751345Sihse ;; 4761345Sihse fastdebug ) 4771461Smikael # no adjustment 4781461Smikael ;; 4791461Smikael slowdebug ) 4801964Serikj # FIXME: By adding this to C(XX)FLAGS_DEBUG_OPTIONS/JVM_CFLAGS_SYMBOLS it 4811964Serikj # get's added conditionally on whether we produce debug symbols or not. 4821964Serikj # This is most likely not really correct. 4831964Serikj 4841964Serikj # Add runtime stack smashing and undefined behavior checks. 4851964Serikj # Not all versions of gcc support -fstack-protector 4861964Serikj STACK_PROTECTOR_CFLAG="-fstack-protector-all" 4871964Serikj FLAGS_COMPILER_CHECK_ARGUMENTS(ARGUMENT: [$STACK_PROTECTOR_CFLAG -Werror], IF_FALSE: [STACK_PROTECTOR_CFLAG=""]) 4881964Serikj 4891964Serikj CFLAGS_DEBUG_OPTIONS="$STACK_PROTECTOR_CFLAG --param ssp-buffer-size=1" 4901964Serikj CXXFLAGS_DEBUG_OPTIONS="$STACK_PROTECTOR_CFLAG --param ssp-buffer-size=1" 4911964Serikj if test "x$STACK_PROTECTOR_CFLAG" != x; then 4921964Serikj JVM_CFLAGS_SYMBOLS="$JVM_CFLAGS_SYMBOLS $STACK_PROTECTOR_CFLAG --param ssp-buffer-size=1" 4931964Serikj fi 4941964Serikj ;; 4951964Serikj esac 4961964Serikj fi 4971964Serikj 4981964Serikj if test "x$TOOLCHAIN_TYPE" = xmicrosoft; then 4991964Serikj if test "x$DEBUG_LEVEL" != xrelease; then 5001964Serikj if test "x$OPENJDK_TARGET_CPU" = xx86_64; then 5011964Serikj JVM_CFLAGS="$JVM_CFLAGS -homeparams" 5021964Serikj fi 5031964Serikj fi 5041964Serikj fi 505 506 # Optimization levels 507 if test "x$TOOLCHAIN_TYPE" = xsolstudio; then 508 CC_HIGHEST="$CC_HIGHEST -fns -fsimple -fsingle -xbuiltin=%all -xdepend -xrestrict -xlibmil" 509 510 if test "x$OPENJDK_TARGET_CPU_ARCH" = "xx86"; then 511 # FIXME: seems we always set -xregs=no%frameptr; put it elsewhere more global? 512 C_O_FLAG_HIGHEST_JVM="-xO4" 513 C_O_FLAG_HIGHEST="-xO4 -Wu,-O4~yz $CC_HIGHEST -xalias_level=basic -xregs=no%frameptr" 514 C_O_FLAG_HI="-xO4 -Wu,-O4~yz -xregs=no%frameptr" 515 C_O_FLAG_NORM="-xO2 -Wu,-O2~yz -xregs=no%frameptr" 516 C_O_FLAG_DEBUG="-xregs=no%frameptr" 517 C_O_FLAG_DEBUG_JVM="" 518 C_O_FLAG_NONE="-xregs=no%frameptr" 519 CXX_O_FLAG_HIGHEST_JVM="-xO4" 520 CXX_O_FLAG_HIGHEST="-xO4 -Qoption ube -O4~yz $CC_HIGHEST -xregs=no%frameptr" 521 CXX_O_FLAG_HI="-xO4 -Qoption ube -O4~yz -xregs=no%frameptr" 522 CXX_O_FLAG_NORM="-xO2 -Qoption ube -O2~yz -xregs=no%frameptr" 523 CXX_O_FLAG_DEBUG="-xregs=no%frameptr" 524 CXX_O_FLAG_DEBUG_JVM="" 525 CXX_O_FLAG_NONE="-xregs=no%frameptr" 526 if test "x$OPENJDK_TARGET_CPU_BITS" = "x32"; then 527 C_O_FLAG_HIGHEST="$C_O_FLAG_HIGHEST -xchip=pentium" 528 CXX_O_FLAG_HIGHEST="$CXX_O_FLAG_HIGHEST -xchip=pentium" 529 fi 530 elif test "x$OPENJDK_TARGET_CPU_ARCH" = "xsparc"; then 531 C_O_FLAG_HIGHEST_JVM="-xO4" 532 C_O_FLAG_HIGHEST="-xO4 -Wc,-Qrm-s -Wc,-Qiselect-T0 $CC_HIGHEST -xalias_level=basic -xprefetch=auto,explicit -xchip=ultra" 533 C_O_FLAG_HI="-xO4 -Wc,-Qrm-s -Wc,-Qiselect-T0" 534 C_O_FLAG_NORM="-xO2 -Wc,-Qrm-s -Wc,-Qiselect-T0" 535 C_O_FLAG_DEBUG="" 536 C_O_FLAG_DEBUG_JVM="" 537 C_O_FLAG_NONE="" 538 CXX_O_FLAG_HIGHEST_JVM="-xO4" 539 CXX_O_FLAG_HIGHEST="-xO4 -Qoption cg -Qrm-s -Qoption cg -Qiselect-T0 $CC_HIGHEST -xprefetch=auto,explicit -xchip=ultra" 540 CXX_O_FLAG_HI="-xO4 -Qoption cg -Qrm-s -Qoption cg -Qiselect-T0" 541 CXX_O_FLAG_NORM="-xO2 -Qoption cg -Qrm-s -Qoption cg -Qiselect-T0" 542 CXX_O_FLAG_DEBUG="" 543 CXX_O_FLAG_DEBUG_JVM="" 544 CXX_O_FLAG_NONE="" 545 fi 546 else 547 # The remaining toolchains share opt flags between CC and CXX; 548 # setup for C and duplicate afterwards. 549 if test "x$TOOLCHAIN_TYPE" = xgcc; then 550 if test "x$OPENJDK_TARGET_OS" = xmacosx; then 551 # On MacOSX we optimize for size, something 552 # we should do for all platforms? 553 C_O_FLAG_HIGHEST_JVM="-Os" 554 C_O_FLAG_HIGHEST="-Os" 555 C_O_FLAG_HI="-Os" 556 C_O_FLAG_NORM="-Os" 557 C_O_FLAG_SIZE="-Os" 558 else 559 C_O_FLAG_HIGHEST_JVM="-O3" 560 C_O_FLAG_HIGHEST="-O3" 561 C_O_FLAG_HI="-O3" 562 C_O_FLAG_NORM="-O2" 563 C_O_FLAG_SIZE="-Os" 564 fi 565 C_O_FLAG_DEBUG="-O0" 566 if test "x$OPENJDK_TARGET_OS" = xmacosx; then 567 C_O_FLAG_DEBUG_JVM="" 568 elif test "x$OPENJDK_TARGET_OS" = xlinux; then 569 C_O_FLAG_DEBUG_JVM="-O0" 570 fi 571 C_O_FLAG_NONE="-O0" 572 elif test "x$TOOLCHAIN_TYPE" = xclang; then 573 if test "x$OPENJDK_TARGET_OS" = xmacosx; then 574 # On MacOSX we optimize for size, something 575 # we should do for all platforms? 576 C_O_FLAG_HIGHEST_JVM="-Os" 577 C_O_FLAG_HIGHEST="-Os" 578 C_O_FLAG_HI="-Os" 579 C_O_FLAG_NORM="-Os" 580 C_O_FLAG_SIZE="-Os" 581 else 582 C_O_FLAG_HIGHEST_JVM="-O3" 583 C_O_FLAG_HIGHEST="-O3" 584 C_O_FLAG_HI="-O3" 585 C_O_FLAG_NORM="-O2" 586 C_O_FLAG_SIZE="-Os" 587 fi 588 C_O_FLAG_DEBUG="-O0" 589 if test "x$OPENJDK_TARGET_OS" = xmacosx; then 590 C_O_FLAG_DEBUG_JVM="" 591 elif test "x$OPENJDK_TARGET_OS" = xlinux; then 592 C_O_FLAG_DEBUG_JVM="-O0" 593 fi 594 C_O_FLAG_NONE="-O0" 595 elif test "x$TOOLCHAIN_TYPE" = xxlc; then 596 C_O_FLAG_HIGHEST_JVM="-O3 -qhot=level=1 -qinline -qinlglue" 597 C_O_FLAG_HIGHEST="-O3 -qhot=level=1 -qinline -qinlglue" 598 C_O_FLAG_HI="-O3 -qinline -qinlglue" 599 C_O_FLAG_NORM="-O2" 600 C_O_FLAG_DEBUG="-qnoopt" 601 # FIXME: Value below not verified. 602 C_O_FLAG_DEBUG_JVM="" 603 C_O_FLAG_NONE="-qnoopt" 604 elif test "x$TOOLCHAIN_TYPE" = xmicrosoft; then 605 C_O_FLAG_HIGHEST_JVM="-O2 -Oy-" 606 C_O_FLAG_HIGHEST="-O2" 607 C_O_FLAG_HI="-O1" 608 C_O_FLAG_NORM="-O1" 609 C_O_FLAG_DEBUG="-Od" 610 C_O_FLAG_DEBUG_JVM="" 611 C_O_FLAG_NONE="-Od" 612 C_O_FLAG_SIZE="-Os" 613 fi 614 CXX_O_FLAG_HIGHEST_JVM="$C_O_FLAG_HIGHEST_JVM" 615 CXX_O_FLAG_HIGHEST="$C_O_FLAG_HIGHEST" 616 CXX_O_FLAG_HI="$C_O_FLAG_HI" 617 CXX_O_FLAG_NORM="$C_O_FLAG_NORM" 618 CXX_O_FLAG_DEBUG="$C_O_FLAG_DEBUG" 619 CXX_O_FLAG_DEBUG_JVM="$C_O_FLAG_DEBUG_JVM" 620 CXX_O_FLAG_NONE="$C_O_FLAG_NONE" 621 CXX_O_FLAG_SIZE="$C_O_FLAG_SIZE" 622 fi 623 624 # Adjust optimization flags according to debug level. 625 case $DEBUG_LEVEL in 626 release ) 627 # no adjustment 628 ;; 629 fastdebug ) 630 # Not quite so much optimization 631 C_O_FLAG_HI="$C_O_FLAG_NORM" 632 CXX_O_FLAG_HI="$CXX_O_FLAG_NORM" 633 ;; 634 slowdebug ) 635 # Disable optimization 636 C_O_FLAG_HIGHEST_JVM="$C_O_FLAG_DEBUG_JVM" 637 C_O_FLAG_HIGHEST="$C_O_FLAG_DEBUG" 638 C_O_FLAG_HI="$C_O_FLAG_DEBUG" 639 C_O_FLAG_NORM="$C_O_FLAG_DEBUG" 640 C_O_FLAG_SIZE="$C_O_FLAG_DEBUG" 641 CXX_O_FLAG_HIGHEST_JVM="$CXX_O_FLAG_DEBUG_JVM" 642 CXX_O_FLAG_HIGHEST="$CXX_O_FLAG_DEBUG" 643 CXX_O_FLAG_HI="$CXX_O_FLAG_DEBUG" 644 CXX_O_FLAG_NORM="$CXX_O_FLAG_DEBUG" 645 CXX_O_FLAG_SIZE="$CXX_O_FLAG_DEBUG" 646 ;; 647 esac 648 649 AC_SUBST(C_O_FLAG_HIGHEST_JVM) 650 AC_SUBST(C_O_FLAG_HIGHEST) 651 AC_SUBST(C_O_FLAG_HI) 652 AC_SUBST(C_O_FLAG_NORM) 653 AC_SUBST(C_O_FLAG_DEBUG) 654 AC_SUBST(C_O_FLAG_NONE) 655 AC_SUBST(C_O_FLAG_SIZE) 656 AC_SUBST(CXX_O_FLAG_HIGHEST_JVM) 657 AC_SUBST(CXX_O_FLAG_HIGHEST) 658 AC_SUBST(CXX_O_FLAG_HI) 659 AC_SUBST(CXX_O_FLAG_NORM) 660 AC_SUBST(CXX_O_FLAG_DEBUG) 661 AC_SUBST(CXX_O_FLAG_NONE) 662 AC_SUBST(CXX_O_FLAG_SIZE) 663]) 664 665 666AC_DEFUN([FLAGS_SETUP_COMPILER_FLAGS_FOR_JDK], 667[ 668 669 FLAGS_SETUP_COMPILER_FLAGS_FOR_JDK_HELPER([TARGET]) 670 FLAGS_SETUP_COMPILER_FLAGS_FOR_JDK_HELPER([BUILD], [OPENJDK_BUILD_]) 671 672 # Tests are only ever compiled for TARGET 673 # Flags for compiling test libraries 674 CFLAGS_TESTLIB="$COMMON_CCXXFLAGS_JDK $CFLAGS_JDK $PICFLAG $CFLAGS_JDKLIB_EXTRA" 675 CXXFLAGS_TESTLIB="$COMMON_CCXXFLAGS_JDK $CXXFLAGS_JDK $PICFLAG $CXXFLAGS_JDKLIB_EXTRA" 676 677 # Flags for compiling test executables 678 CFLAGS_TESTEXE="$COMMON_CCXXFLAGS_JDK $CFLAGS_JDK" 679 CXXFLAGS_TESTEXE="$COMMON_CCXXFLAGS_JDK $CXXFLAGS_JDK" 680 681 AC_SUBST(CFLAGS_TESTLIB) 682 AC_SUBST(CFLAGS_TESTEXE) 683 AC_SUBST(CXXFLAGS_TESTLIB) 684 AC_SUBST(CXXFLAGS_TESTEXE) 685 686 LDFLAGS_TESTLIB="$LDFLAGS_JDKLIB" 687 LDFLAGS_TESTEXE="$LDFLAGS_JDKEXE" 688 689 AC_SUBST(LDFLAGS_TESTLIB) 690 AC_SUBST(LDFLAGS_TESTEXE) 691 692]) 693 694################################################################################ 695# $1 - Either BUILD or TARGET to pick the correct OS/CPU variables to check 696# conditionals against. 697# $2 - Optional prefix for each variable defined. 698AC_DEFUN([FLAGS_SETUP_COMPILER_FLAGS_FOR_JDK_HELPER], 699[ 700 # Special extras... 701 if test "x$TOOLCHAIN_TYPE" = xsolstudio; then 702 if test "x$OPENJDK_$1_CPU_ARCH" = "xsparc"; then 703 $2CFLAGS_JDKLIB_EXTRA="${$2CFLAGS_JDKLIB_EXTRA} -xregs=no%appl" 704 $2CXXFLAGS_JDKLIB_EXTRA="${$2CXXFLAGS_JDKLIB_EXTRA} -xregs=no%appl" 705 fi 706 $2CFLAGS_JDKLIB_EXTRA="${$2CFLAGS_JDKLIB_EXTRA} -errtags=yes -errfmt" 707 $2CXXFLAGS_JDKLIB_EXTRA="${$2CXXFLAGS_JDKLIB_EXTRA} -errtags=yes -errfmt" 708 elif test "x$TOOLCHAIN_TYPE" = xxlc; then 709 $2CFLAGS_JDK="${$2CFLAGS_JDK} -qchars=signed -qfullpath -qsaveopt" 710 $2CXXFLAGS_JDK="${$2CXXFLAGS_JDK} -qchars=signed -qfullpath -qsaveopt" 711 elif test "x$TOOLCHAIN_TYPE" = xgcc; then 712 $2CXXSTD_CXXFLAG="-std=gnu++98" 713 FLAGS_CXX_COMPILER_CHECK_ARGUMENTS(ARGUMENT: [[$]$2CXXSTD_CXXFLAG -Werror], 714 IF_FALSE: [$2CXXSTD_CXXFLAG=""]) 715 $2CXXFLAGS_JDK="${$2CXXFLAGS_JDK} ${$2CXXSTD_CXXFLAG}" 716 $2JVM_CFLAGS="${$2JVM_CFLAGS} ${$2CXXSTD_CXXFLAG}" 717 AC_SUBST([$2CXXSTD_CXXFLAG]) 718 fi 719 if test "x$OPENJDK_TARGET_OS" = xsolaris; then 720 $2CFLAGS_JDK="${$2CFLAGS_JDK} -D__solaris__" 721 $2CXXFLAGS_JDK="${$2CXXFLAGS_JDK} -D__solaris__" 722 $2CFLAGS_JDKLIB_EXTRA='-xstrconst' 723 CFLAGS_JDK="${CFLAGS_JDK} -qchars=signed -qfullpath -qsaveopt" 724 CXXFLAGS_JDK="${CXXFLAGS_JDK} -qchars=signed -qfullpath -qsaveopt" 725 fi 726 727 if test "x$OPENJDK_TARGET_OS" = xsolaris; then 728 $2CFLAGS_JDK="${$2CFLAGS_JDK} -D__solaris__" 729 $2CXXFLAGS_JDK="${$2CXXFLAGS_JDK} -D__solaris__" 730 $2CFLAGS_JDKLIB_EXTRA='-xstrconst' 731 fi 732 733 $2CFLAGS_JDK="${$2CFLAGS_JDK} ${$2EXTRA_CFLAGS}" 734 $2CXXFLAGS_JDK="${$2CXXFLAGS_JDK} ${$2EXTRA_CXXFLAGS}" 735 $2LDFLAGS_JDK="${$2LDFLAGS_JDK} ${$2EXTRA_LDFLAGS}" 736 737 ############################################################################### 738 # 739 # Now setup the CFLAGS and LDFLAGS for the JDK build. 740 # Later we will also have CFLAGS and LDFLAGS for the hotspot subrepo build. 741 # 742 743 # Setup compiler/platform specific flags into 744 # $2CFLAGS_JDK - C Compiler flags 745 # $2CXXFLAGS_JDK - C++ Compiler flags 746 # $2COMMON_CCXXFLAGS_JDK - common to C and C++ 747 if test "x$TOOLCHAIN_TYPE" = xgcc; then 748 $2JVM_CFLAGS="[$]$2JVM_CFLAGS -D_GNU_SOURCE" 749 $2JVM_CFLAGS="[$]$2JVM_CFLAGS -D_REENTRANT" 750 $2JVM_CFLAGS="[$]$2JVM_CFLAGS -fcheck-new" 751 if test "x$OPENJDK_$1_CPU" = xx86; then 752 # Force compatibility with i586 on 32 bit intel platforms. 753 $2COMMON_CCXXFLAGS="${$2COMMON_CCXXFLAGS} -march=i586" 754 $2JVM_CFLAGS="[$]$2JVM_CFLAGS -march=i586" 755 fi 756 $2COMMON_CCXXFLAGS_JDK="[$]$2COMMON_CCXXFLAGS [$]$2COMMON_CCXXFLAGS_JDK -Wall -Wextra -Wno-unused -Wno-unused-parameter -Wformat=2 \ 757 -pipe -D_GNU_SOURCE -D_REENTRANT -D_LARGEFILE64_SOURCE" 758 case $OPENJDK_$1_CPU_ARCH in 759 arm ) 760 # on arm we don't prevent gcc to omit frame pointer but do prevent strict aliasing 761 $2CFLAGS_JDK="${$2CFLAGS_JDK} -fno-strict-aliasing" 762 ;; 763 ppc ) 764 # on ppc we don't prevent gcc to omit frame pointer but do prevent strict aliasing 765 $2CFLAGS_JDK="${$2CFLAGS_JDK} -fno-strict-aliasing" 766 ;; 767 * ) 768 $2COMMON_CCXXFLAGS_JDK="[$]$2COMMON_CCXXFLAGS_JDK -fno-omit-frame-pointer" 769 $2CFLAGS_JDK="${$2CFLAGS_JDK} -fno-strict-aliasing" 770 ;; 771 esac 772 TOOLCHAIN_CHECK_COMPILER_VERSION(VERSION: 6, PREFIX: $2, IF_AT_LEAST: FLAGS_SETUP_GCC6_COMPILER_FLAGS($2)) 773 elif test "x$TOOLCHAIN_TYPE" = xclang; then 774 $2JVM_CFLAGS="[$]$2JVM_CFLAGS -D_GNU_SOURCE" 775 776 # Restrict the debug information created by Clang to avoid 777 # too big object files and speed the build up a little bit 778 # (see http://llvm.org/bugs/show_bug.cgi?id=7554) 779 $2JVM_CFLAGS="[$]$2JVM_CFLAGS -flimit-debug-info" 780 if test "x$OPENJDK_$1_OS" = xlinux; then 781 if test "x$OPENJDK_$1_CPU" = xx86; then 782 # Force compatibility with i586 on 32 bit intel platforms. 783 $2COMMON_CCXXFLAGS="${$2COMMON_CCXXFLAGS} -march=i586" 784 $2JVM_CFLAGS="[$]$2JVM_CFLAGS -march=i586" 785 fi 786 $2JVM_CFLAGS="[$]$2JVM_CFLAGS -Wno-sometimes-uninitialized" 787 $2COMMON_CCXXFLAGS_JDK="[$]$2COMMON_CCXXFLAGS [$]$2COMMON_CCXXFLAGS_JDK -Wall -Wextra -Wno-unused -Wno-unused-parameter -Wformat=2 \ 788 -pipe -D_GNU_SOURCE -D_REENTRANT -D_LARGEFILE64_SOURCE" 789 case $OPENJDK_$1_CPU_ARCH in 790 ppc ) 791 # on ppc we don't prevent gcc to omit frame pointer but do prevent strict aliasing 792 $2CFLAGS_JDK="${$2CFLAGS_JDK} -fno-strict-aliasing" 793 ;; 794 * ) 795 $2COMMON_CCXXFLAGS_JDK="[$]$2COMMON_CCXXFLAGS_JDK -fno-omit-frame-pointer" 796 $2CFLAGS_JDK="${$2CFLAGS_JDK} -fno-strict-aliasing" 797 ;; 798 esac 799 fi 800 elif test "x$TOOLCHAIN_TYPE" = xsolstudio; then 801 $2JVM_CFLAGS="[$]$2JVM_CFLAGS -DSPARC_WORKS" 802 $2COMMON_CCXXFLAGS_JDK="[$]$2COMMON_CCXXFLAGS [$]$2COMMON_CCXXFLAGS_JDK -DTRACING -DMACRO_MEMSYS_OPS -DBREAKPTS" 803 if test "x$OPENJDK_$1_CPU_ARCH" = xx86; then 804 $2COMMON_CCXXFLAGS_JDK="[$]$2COMMON_CCXXFLAGS_JDK -DcpuIntel -Di586 -D$OPENJDK_$1_CPU_LEGACY_LIB" 805 fi 806 807 $2CFLAGS_JDK="[$]$2CFLAGS_JDK -xc99=%none -xCC -errshort=tags -Xa -v -mt -W0,-noglobal" 808 $2CXXFLAGS_JDK="[$]$2CXXFLAGS_JDK -errtags=yes +w -mt -features=no%except -DCC_NOEX -norunpath -xnolib" 809 elif test "x$TOOLCHAIN_TYPE" = xxlc; then 810 $2JVM_CFLAGS="[$]$2JVM_CFLAGS -D_REENTRANT -D__STDC_FORMAT_MACROS" 811 $2CFLAGS_JDK="[$]$2CFLAGS_JDK -D_GNU_SOURCE -D_REENTRANT -D_LARGEFILE64_SOURCE -DSTDC" 812 $2CXXFLAGS_JDK="[$]$2CXXFLAGS_JDK -D_GNU_SOURCE -D_REENTRANT -D_LARGEFILE64_SOURCE -DSTDC" 813 elif test "x$TOOLCHAIN_TYPE" = xmicrosoft; then 814 $2COMMON_CCXXFLAGS_JDK="[$]$2COMMON_CCXXFLAGS [$]$2COMMON_CCXXFLAGS_JDK \ 815 -MD -Zc:wchar_t- -W3 -wd4800 \ 816 -DWIN32_LEAN_AND_MEAN \ 817 -D_CRT_SECURE_NO_DEPRECATE -D_CRT_NONSTDC_NO_DEPRECATE \ 818 -D_WINSOCK_DEPRECATED_NO_WARNINGS \ 819 -DWIN32 -DIAL" 820 if test "x$OPENJDK_$1_CPU" = xx86_64; then 821 $2COMMON_CCXXFLAGS_JDK="[$]$2COMMON_CCXXFLAGS_JDK -D_AMD64_ -Damd64" 822 else 823 $2COMMON_CCXXFLAGS_JDK="[$]$2COMMON_CCXXFLAGS_JDK -D_X86_ -Dx86" 824 fi 825 # If building with Visual Studio 2010, we can still use _STATIC_CPPLIB to 826 # avoid bundling msvcpNNN.dll. Doesn't work with newer versions of visual 827 # studio. 828 if test "x$TOOLCHAIN_VERSION" = "x2010"; then 829 STATIC_CPPLIB_FLAGS="-D_STATIC_CPPLIB -D_DISABLE_DEPRECATE_STATIC_CPPLIB" 830 $2COMMON_CCXXFLAGS_JDK="[$]$2COMMON_CCXXFLAGS_JDK $STATIC_CPPLIB_FLAGS" 831 $2JVM_CFLAGS="[$]$2JVM_CFLAGS $STATIC_CPPLIB_FLAGS" 832 fi 833 fi 834 835 ############################################################################### 836 837 # Adjust flags according to debug level. 838 case $DEBUG_LEVEL in 839 fastdebug | slowdebug ) 840 $2CFLAGS_JDK="[$]$2CFLAGS_JDK $CFLAGS_DEBUG_SYMBOLS $CFLAGS_DEBUG_OPTIONS" 841 $2CXXFLAGS_JDK="[$]$2CXXFLAGS_JDK $CXXFLAGS_DEBUG_SYMBOLS $CXXFLAGS_DEBUG_OPTIONS" 842 JAVAC_FLAGS="$JAVAC_FLAGS -g" 843 ;; 844 release ) 845 ;; 846 * ) 847 AC_MSG_ERROR([Unrecognized \$DEBUG_LEVEL: $DEBUG_LEVEL]) 848 ;; 849 esac 850 851 # Set some common defines. These works for all compilers, but assume 852 # -D is universally accepted. 853 854 # Setup endianness 855 if test "x$OPENJDK_$1_CPU_ENDIAN" = xlittle; then 856 # The macro _LITTLE_ENDIAN needs to be defined the same to avoid the 857 # Sun C compiler warning message: warning: macro redefined: _LITTLE_ENDIAN 858 # (The Solaris X86 system defines this in file /usr/include/sys/isa_defs.h). 859 # Note: -Dmacro is the same as #define macro 1 860 # -Dmacro= is the same as #define macro 861 if test "x$OPENJDK_$1_OS" = xsolaris; then 862 $2COMMON_CCXXFLAGS_JDK="[$]$2COMMON_CCXXFLAGS_JDK -D_LITTLE_ENDIAN=" 863 else 864 $2COMMON_CCXXFLAGS_JDK="[$]$2COMMON_CCXXFLAGS_JDK -D_LITTLE_ENDIAN" 865 fi 866 else 867 # Same goes for _BIG_ENDIAN. Do we really need to set *ENDIAN on Solaris if they 868 # are defined in the system? 869 if test "x$OPENJDK_$1_OS" = xsolaris; then 870 $2COMMON_CCXXFLAGS_JDK="[$]$2COMMON_CCXXFLAGS_JDK -D_BIG_ENDIAN=" 871 else 872 $2COMMON_CCXXFLAGS_JDK="[$]$2COMMON_CCXXFLAGS_JDK -D_BIG_ENDIAN" 873 fi 874 fi 875 876 # Setup target OS define. Use OS target name but in upper case. 877 OPENJDK_$1_OS_UPPERCASE=`$ECHO $OPENJDK_$1_OS | $TR 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'` 878 $2COMMON_CCXXFLAGS_JDK="[$]$2COMMON_CCXXFLAGS_JDK -D$OPENJDK_$1_OS_UPPERCASE" 879 880 # Setup target CPU 881 $2COMMON_CCXXFLAGS_JDK="[$]$2COMMON_CCXXFLAGS_JDK \ 882 $OPENJDK_$1_ADD_LP64 \ 883 -DARCH='\"$OPENJDK_$1_CPU_LEGACY\"' -D$OPENJDK_$1_CPU_LEGACY" 884 885 # Setup debug/release defines 886 if test "x$DEBUG_LEVEL" = xrelease; then 887 $2COMMON_CCXXFLAGS_JDK="[$]$2COMMON_CCXXFLAGS_JDK -DNDEBUG" 888 if test "x$OPENJDK_$1_OS" = xsolaris; then 889 $2COMMON_CCXXFLAGS_JDK="[$]$2COMMON_CCXXFLAGS_JDK -DTRIMMED" 890 fi 891 else 892 $2COMMON_CCXXFLAGS_JDK="[$]$2COMMON_CCXXFLAGS_JDK -DDEBUG" 893 fi 894 895 # Set some additional per-OS defines. 896 if test "x$OPENJDK_$1_OS" = xlinux; then 897 $2JVM_CFLAGS="[$]$2JVM_CFLAGS -DLINUX" 898 $2JVM_CFLAGS="[$]$2JVM_CFLAGS -pipe -fPIC -fno-rtti -fno-exceptions \ 899 -fvisibility=hidden -fno-strict-aliasing -fno-omit-frame-pointer" 900 elif test "x$OPENJDK_$1_OS" = xsolaris; then 901 $2JVM_CFLAGS="[$]$2JVM_CFLAGS -DSOLARIS" 902 $2JVM_CFLAGS="[$]$2JVM_CFLAGS -template=no%extdef -features=no%split_init \ 903 -D_Crun_inline_placement -library=%none -KPIC -mt -xwe -features=no%except" 904 elif test "x$OPENJDK_$1_OS" = xmacosx; then 905 $2COMMON_CCXXFLAGS_JDK="[$]$2COMMON_CCXXFLAGS_JDK -D_ALLBSD_SOURCE -D_DARWIN_UNLIMITED_SELECT" 906 $2JVM_CFLAGS="[$]$2JVM_CFLAGS -D_ALLBSD_SOURCE" 907 $2JVM_CFLAGS="[$]$2JVM_CFLAGS -D_DARWIN_C_SOURCE -D_XOPEN_SOURCE" 908 $2JVM_CFLAGS="[$]$2JVM_CFLAGS -fno-rtti -fno-exceptions -fvisibility=hidden \ 909 -mno-omit-leaf-frame-pointer -mstack-alignment=16 -pipe -fno-strict-aliasing \ 910 -DMAC_OS_X_VERSION_MAX_ALLOWED=1070 -mmacosx-version-min=10.7.0 \ 911 -fno-omit-frame-pointer" 912 elif test "x$OPENJDK_$1_OS" = xaix; then 913 $2JVM_CFLAGS="[$]$2JVM_CFLAGS -DAIX" 914 # We may need '-qminimaltoc' or '-qpic=large -bbigtoc' if the TOC overflows. 915 $2JVM_CFLAGS="[$]$2JVM_CFLAGS -qtune=balanced \ 916 -qalias=noansi -qstrict -qtls=default -qlanglvl=c99vla \ 917 -qlanglvl=noredefmac -qnortti -qnoeh -qignerrno" 918 elif test "x$OPENJDK_$1_OS" = xbsd; then 919 $2COMMON_CCXXFLAGS_JDK="[$]$2COMMON_CCXXFLAGS_JDK -D_ALLBSD_SOURCE" 920 elif test "x$OPENJDK_$1_OS" = xwindows; then 921 $2JVM_CFLAGS="[$]$2JVM_CFLAGS -D_WINDOWS -DWIN32 -D_JNI_IMPLEMENTATION_" 922 $2JVM_CFLAGS="[$]$2JVM_CFLAGS -nologo -W3 -MD -MP" 923 fi 924 925 # Set some additional per-CPU defines. 926 if test "x$OPENJDK_$1_OS-$OPENJDK_$1_CPU" = xwindows-x86; then 927 $2JVM_CFLAGS="[$]$2JVM_CFLAGS -arch:IA32" 928 elif test "x$OPENJDK_$1_CPU" = xsparcv9; then 929 $2JVM_CFLAGS="[$]$2JVM_CFLAGS -xarch=sparc" 930 elif test "x$OPENJDK_$1_CPU" = xppc64; then 931 if test "x$OPENJDK_$1_OS" = xlinux; then 932 $2JVM_CFLAGS="[$]$2JVM_CFLAGS -minsert-sched-nops=regroup_exact -mno-multiple -mno-string" 933 # fixes `relocation truncated to fit' error for gcc 4.1. 934 $2JVM_CFLAGS="[$]$2JVM_CFLAGS -mminimal-toc" 935 # Use ppc64 instructions, but schedule for power5 936 $2JVM_CFLAGS="[$]$2JVM_CFLAGS -mcpu=powerpc64 -mtune=power5" 937 elif test "x$OPENJDK_$1_OS" = xaix; then 938 $2JVM_CFLAGS="[$]$2JVM_CFLAGS -qarch=ppc64" 939 fi 940 elif test "x$OPENJDK_$1_CPU" = xppc64le; then 941 if test "x$OPENJDK_$1_OS" = xlinux; then 942 $2JVM_CFLAGS="[$]$2JVM_CFLAGS -minsert-sched-nops=regroup_exact -mno-multiple -mno-string" 943 # Little endian machine uses ELFv2 ABI. 944 $2JVM_CFLAGS="[$]$2JVM_CFLAGS -DABI_ELFv2" 945 # Use Power8, this is the first CPU to support PPC64 LE with ELFv2 ABI. 946 $2JVM_CFLAGS="[$]$2JVM_CFLAGS -mcpu=power7 -mtune=power8" 947 fi 948 fi 949 950 if test "x$OPENJDK_$1_CPU_ENDIAN" = xlittle; then 951 $2JVM_CFLAGS="[$]$2JVM_CFLAGS -DVM_LITTLE_ENDIAN" 952 fi 953 954 if test "x$OPENJDK_$1_CPU_BITS" = x64; then 955 if test "x$OPENJDK_$1_OS" != xsolaris && test "x$OPENJDK_$1_OS" != xaix; then 956 # Solaris does not have _LP64=1 in the old build. 957 # xlc on AIX defines _LP64=1 by default and issues a warning if we redefine it. 958 $2JVM_CFLAGS="[$]$2JVM_CFLAGS -D_LP64=1" 959 fi 960 fi 961 962 # Set $2JVM_CFLAGS warning handling 963 if test "x$OPENJDK_$1_OS" = xlinux; then 964 $2JVM_CFLAGS="[$]$2JVM_CFLAGS -Wpointer-arith -Wsign-compare -Wunused-function \ 965 -Wunused-value -Woverloaded-virtual" 966 967 if test "x$TOOLCHAIN_TYPE" = xgcc; then 968 TOOLCHAIN_CHECK_COMPILER_VERSION(VERSION: [4.8], PREFIX: $2, 969 IF_AT_LEAST: [ 970 # These flags either do not work or give spurious warnings prior to gcc 4.8. 971 $2JVM_CFLAGS="[$]$2JVM_CFLAGS -Wno-format-zero-length -Wtype-limits -Wuninitialized" 972 ] 973 ) 974 fi 975 if ! HOTSPOT_CHECK_JVM_VARIANT(zero) && ! HOTSPOT_CHECK_JVM_VARIANT(zeroshark); then 976 # Non-zero builds have stricter warnings 977 $2JVM_CFLAGS="[$]$2JVM_CFLAGS -Wreturn-type -Wundef -Wformat=2" 978 else 979 if test "x$TOOLCHAIN_TYPE" = xclang; then 980 # Some versions of llvm do not like -Wundef 981 $2JVM_CFLAGS="[$]$2JVM_CFLAGS -Wno-undef" 982 fi 983 fi 984 elif test "x$OPENJDK_$1_OS" = xmacosx; then 985 $2JVM_CFLAGS="[$]$2JVM_CFLAGS -Wno-deprecated -Wpointer-arith \ 986 -Wsign-compare -Wundef -Wunused-function -Wformat=2" 987 fi 988 989 # Additional macosx handling 990 if test "x$OPENJDK_$1_OS" = xmacosx; then 991 # Setting these parameters makes it an error to link to macosx APIs that are 992 # newer than the given OS version and makes the linked binaries compatible 993 # even if built on a newer version of the OS. 994 # The expected format is X.Y.Z 995 MACOSX_VERSION_MIN=10.7.0 996 AC_SUBST(MACOSX_VERSION_MIN) 997 998 # The macro takes the version with no dots, ex: 1070 999 # Let the flags variables get resolved in make for easier override on make 1000 # command line. 1001 $2COMMON_CCXXFLAGS_JDK="[$]$2COMMON_CCXXFLAGS_JDK -DMAC_OS_X_VERSION_MAX_ALLOWED=\$(subst .,,\$(MACOSX_VERSION_MIN)) -mmacosx-version-min=\$(MACOSX_VERSION_MIN)" 1002 $2LDFLAGS_JDK="[$]$2LDFLAGS_JDK -mmacosx-version-min=\$(MACOSX_VERSION_MIN)" 1003 fi 1004 1005 # Setup some hard coded includes 1006 $2COMMON_CCXXFLAGS_JDK="[$]$2COMMON_CCXXFLAGS_JDK \ 1007 -I${JDK_TOPDIR}/src/java.base/share/native/include \ 1008 -I${JDK_TOPDIR}/src/java.base/$OPENJDK_$1_OS/native/include \ 1009 -I${JDK_TOPDIR}/src/java.base/$OPENJDK_$1_OS_TYPE/native/include \ 1010 -I${JDK_TOPDIR}/src/java.base/share/native/libjava \ 1011 -I${JDK_TOPDIR}/src/java.base/$OPENJDK_$1_OS_TYPE/native/libjava" 1012 1013 # The shared libraries are compiled using the picflag. 1014 $2CFLAGS_JDKLIB="[$]$2COMMON_CCXXFLAGS_JDK \ 1015 [$]$2CFLAGS_JDK [$]$2EXTRA_CFLAGS_JDK $PICFLAG [$]$2CFLAGS_JDKLIB_EXTRA" 1016 $2CXXFLAGS_JDKLIB="[$]$2COMMON_CCXXFLAGS_JDK \ 1017 [$]$2CXXFLAGS_JDK [$]$2EXTRA_CXXFLAGS_JDK $PICFLAG [$]$2CXXFLAGS_JDKLIB_EXTRA" 1018 1019 # Executable flags 1020 $2CFLAGS_JDKEXE="[$]$2COMMON_CCXXFLAGS_JDK [$]$2CFLAGS_JDK [$]$2EXTRA_CFLAGS_JDK" 1021 $2CXXFLAGS_JDKEXE="[$]$2COMMON_CCXXFLAGS_JDK [$]$2CXXFLAGS_JDK [$]$2EXTRA_CXXFLAGS_JDK" 1022 1023 AC_SUBST($2CFLAGS_JDKLIB) 1024 AC_SUBST($2CFLAGS_JDKEXE) 1025 AC_SUBST($2CXXFLAGS_JDKLIB) 1026 AC_SUBST($2CXXFLAGS_JDKEXE) 1027 1028 # Setup LDFLAGS et al. 1029 # 1030 1031 if test "x$TOOLCHAIN_TYPE" = xmicrosoft; then 1032 LDFLAGS_MICROSOFT="-nologo -opt:ref" 1033 $2LDFLAGS_JDK="[$]$2LDFLAGS_JDK $LDFLAGS_MICROSOFT -incremental:no" 1034 $2JVM_LDFLAGS="[$]$2JVM_LDFLAGS $LDFLAGS_MICROSOFT -opt:icf,8 -subsystem:windows -base:0x8000000" 1035 if test "x$OPENJDK_$1_CPU_BITS" = "x32"; then 1036 LDFLAGS_SAFESH="-safeseh" 1037 $2LDFLAGS_JDK="[$]$2LDFLAGS_JDK $LDFLAGS_SAFESH" 1038 $2JVM_LDFLAGS="[$]$2JVM_LDFLAGS $LDFLAGS_SAFESH" 1039 # NOTE: Old build added -machine. Probably not needed. 1040 $2JVM_LDFLAGS="[$]$2JVM_LDFLAGS -machine:I386" 1041 else 1042 $2JVM_LDFLAGS="[$]$2JVM_LDFLAGS -machine:AMD64" 1043 fi 1044 elif test "x$TOOLCHAIN_TYPE" = xclang; then 1045 $2JVM_LDFLAGS="[$]$2JVM_LDFLAGS -mno-omit-leaf-frame-pointer -mstack-alignment=16 -stdlib=libstdc++ -fPIC" 1046 if test "x$OPENJDK_$1_OS" = xmacosx; then 1047 # FIXME: We should really generalize SET_SHARED_LIBRARY_ORIGIN instead. 1048 $2JVM_LDFLAGS="[$]$2JVM_LDFLAGS -Wl,-rpath,@loader_path/. -Wl,-rpath,@loader_path/.." 1049 fi 1050 elif test "x$TOOLCHAIN_TYPE" = xgcc; then 1051 # If this is a --hash-style=gnu system, use --hash-style=both, why? 1052 # We have previously set HAS_GNU_HASH if this is the case 1053 if test -n "$HAS_GNU_HASH"; then 1054 $2LDFLAGS_HASH_STYLE="-Wl,--hash-style=both" 1055 $2LDFLAGS_JDK="${$2LDFLAGS_JDK} [$]$2LDFLAGS_HASH_STYLE" 1056 $2JVM_LDFLAGS="[$]$2JVM_LDFLAGS [$]$2LDFLAGS_HASH_STYLE" 1057 fi 1058 if test "x$OPENJDK_$1_OS" = xmacosx; then 1059 $2JVM_LDFLAGS="[$]$2JVM_LDFLAGS -Wl,-rpath,@loader_path/. -Wl,-rpath,@loader_path/.." 1060 fi 1061 if test "x$OPENJDK_$1_OS" = xlinux; then 1062 # And since we now know that the linker is gnu, then add -z defs, to forbid 1063 # undefined symbols in object files. 1064 LDFLAGS_NO_UNDEF_SYM="-Wl,-z,defs" 1065 $2LDFLAGS_JDK="${$2LDFLAGS_JDK} $LDFLAGS_NO_UNDEF_SYM" 1066 $2JVM_LDFLAGS="[$]$2JVM_LDFLAGS $LDFLAGS_NO_UNDEF_SYM" 1067 LDFLAGS_NO_EXEC_STACK="-Wl,-z,noexecstack" 1068 $2JVM_LDFLAGS="[$]$2JVM_LDFLAGS $LDFLAGS_NO_EXEC_STACK" 1069 if test "x$OPENJDK_$1_CPU" = xx86; then 1070 $2JVM_LDFLAGS="[$]$2JVM_LDFLAGS -march=i586" 1071 fi 1072 case $DEBUG_LEVEL in 1073 release ) 1074 # tell linker to optimize libraries. 1075 # Should this be supplied to the OSS linker as well? 1076 LDFLAGS_DEBUGLEVEL_release="-Wl,-O1" 1077 $2LDFLAGS_JDK="${$2LDFLAGS_JDK} $LDFLAGS_DEBUGLEVEL_release" 1078 $2JVM_LDFLAGS="[$]$2JVM_LDFLAGS $LDFLAGS_DEBUGLEVEL_release" 1079 if test "x$HAS_LINKER_RELRO" = "xtrue"; then 1080 $2JVM_LDFLAGS="[$]$2JVM_LDFLAGS $LINKER_RELRO_FLAG" 1081 fi 1082 ;; 1083 slowdebug ) 1084 # Hotspot always let the linker optimize 1085 $2JVM_LDFLAGS="[$]$2JVM_LDFLAGS -Wl,-O1" 1086 if test "x$HAS_LINKER_NOW" = "xtrue"; then 1087 # do relocations at load 1088 $2LDFLAGS_JDK="[$]$2LDFLAGS_JDK $LINKER_NOW_FLAG" 1089 $2LDFLAGS_CXX_JDK="[$]$2LDFLAGS_CXX_JDK $LINKER_NOW_FLAG" 1090 $2JVM_LDFLAGS="[$]$2JVM_LDFLAGS $LINKER_NOW_FLAG" 1091 fi 1092 if test "x$HAS_LINKER_RELRO" = "xtrue"; then 1093 # mark relocations read only 1094 $2LDFLAGS_JDK="[$]$2LDFLAGS_JDK $LINKER_RELRO_FLAG" 1095 $2LDFLAGS_CXX_JDK="[$]$2LDFLAGS_CXX_JDK $LINKER_RELRO_FLAG" 1096 $2JVM_LDFLAGS="[$]$2JVM_LDFLAGS $LINKER_RELRO_FLAG" 1097 fi 1098 ;; 1099 fastdebug ) 1100 # Hotspot always let the linker optimize 1101 $2JVM_LDFLAGS="[$]$2JVM_LDFLAGS -Wl,-O1" 1102 if test "x$HAS_LINKER_RELRO" = "xtrue"; then 1103 # mark relocations read only 1104 $2LDFLAGS_JDK="[$]$2LDFLAGS_JDK $LINKER_RELRO_FLAG" 1105 $2LDFLAGS_CXX_JDK="[$]$2LDFLAGS_CXX_JDK $LINKER_RELRO_FLAG" 1106 $2JVM_LDFLAGS="[$]$2JVM_LDFLAGS $LINKER_RELRO_FLAG" 1107 fi 1108 ;; 1109 * ) 1110 AC_MSG_ERROR([Unrecognized \$DEBUG_LEVEL: $DEBUG_LEVEL]) 1111 ;; 1112 esac 1113 fi 1114 elif test "x$TOOLCHAIN_TYPE" = xsolstudio; then 1115 LDFLAGS_SOLSTUDIO="-Wl,-z,defs" 1116 $2LDFLAGS_JDK="[$]$2LDFLAGS_JDK $LDFLAGS_SOLSTUDIO -xildoff -ztext" 1117 LDFLAGS_CXX_SOLSTUDIO="-norunpath" 1118 $2LDFLAGS_CXX_JDK="[$]$2LDFLAGS_CXX_JDK $LDFLAGS_CXX_SOLSTUDIO -xnolib" 1119 $2JVM_LDFLAGS="[$]$2JVM_LDFLAGS $LDFLAGS_SOLSTUDIO -library=%none -mt $LDFLAGS_CXX_SOLSTUDIO -z noversion" 1120 if test "x$OPENJDK_$1_CPU_ARCH" = "xsparc"; then 1121 $2JVM_LDFLAGS="[$]$2JVM_LDFLAGS -xarch=sparc" 1122 fi 1123 elif test "x$TOOLCHAIN_TYPE" = xxlc; then 1124 LDFLAGS_XLC="-b64 -brtl -bnolibpath -bexpall -bernotok" 1125 $2LDFLAGS_JDK="${$2LDFLAGS_JDK} $LDFLAGS_XLC" 1126 $2JVM_LDFLAGS="[$]$2JVM_LDFLAGS $LDFLAGS_XLC" 1127 fi 1128 1129 # Customize LDFLAGS for executables 1130 1131 $2LDFLAGS_JDKEXE="${$2LDFLAGS_JDK}" 1132 1133 if test "x$TOOLCHAIN_TYPE" = xmicrosoft; then 1134 if test "x$OPENJDK_$1_CPU_BITS" = "x64"; then 1135 LDFLAGS_STACK_SIZE=1048576 1136 else 1137 LDFLAGS_STACK_SIZE=327680 1138 fi 1139 $2LDFLAGS_JDKEXE="${$2LDFLAGS_JDKEXE} /STACK:$LDFLAGS_STACK_SIZE" 1140 elif test "x$OPENJDK_$1_OS" = xlinux; then 1141 $2LDFLAGS_JDKEXE="[$]$2LDFLAGS_JDKEXE -Wl,--allow-shlib-undefined" 1142 fi 1143 1144 $2LDFLAGS_JDKEXE="${$2LDFLAGS_JDKEXE} ${$2EXTRA_LDFLAGS_JDK}" 1145 1146 # Customize LDFLAGS for libs 1147 $2LDFLAGS_JDKLIB="${$2LDFLAGS_JDK}" 1148 1149 $2LDFLAGS_JDKLIB="${$2LDFLAGS_JDKLIB} ${SHARED_LIBRARY_FLAGS}" 1150 if test "x$TOOLCHAIN_TYPE" = xmicrosoft; then 1151 $2LDFLAGS_JDKLIB="${$2LDFLAGS_JDKLIB} \ 1152 -libpath:${OUTPUT_ROOT}/support/modules_libs/java.base" 1153 $2JDKLIB_LIBS="" 1154 else 1155 $2LDFLAGS_JDKLIB="${$2LDFLAGS_JDKLIB} \ 1156 -L\$(SUPPORT_OUTPUTDIR)/modules_libs/java.base\$(OPENJDK_$1_CPU_LIBDIR)" 1157 1158 if test "x$1" = "xTARGET"; then 1159 # On some platforms (mac) the linker warns about non existing -L dirs. 1160 # Add server first if available. Linking aginst client does not always produce the same results. 1161 # Only add client/minimal dir if client/minimal is being built. 1162 # Default to server for other variants. 1163 if HOTSPOT_CHECK_JVM_VARIANT(server); then 1164 $2LDFLAGS_JDKLIB="${$2LDFLAGS_JDKLIB} -L\$(SUPPORT_OUTPUTDIR)/modules_libs/java.base\$(OPENJDK_$1_CPU_LIBDIR)/server" 1165 elif HOTSPOT_CHECK_JVM_VARIANT(client); then 1166 $2LDFLAGS_JDKLIB="${$2LDFLAGS_JDKLIB} -L\$(SUPPORT_OUTPUTDIR)/modules_libs/java.base\$(OPENJDK_$1_CPU_LIBDIR)/client" 1167 elif HOTSPOT_CHECK_JVM_VARIANT(minimal); then 1168 $2LDFLAGS_JDKLIB="${$2LDFLAGS_JDKLIB} -L\$(SUPPORT_OUTPUTDIR)/modules_libs/java.base\$(OPENJDK_$1_CPU_LIBDIR)/minimal" 1169 else 1170 $2LDFLAGS_JDKLIB="${$2LDFLAGS_JDKLIB} -L\$(SUPPORT_OUTPUTDIR)/modules_libs/java.base\$(OPENJDK_$1_CPU_LIBDIR)/server" 1171 fi 1172 elif test "x$1" = "xBUILD"; then 1173 # When building a buildjdk, it's always only the server variant 1174 $2LDFLAGS_JDKLIB="${$2LDFLAGS_JDKLIB} \ 1175 -L\$(SUPPORT_OUTPUTDIR)/modules_libs/java.base\$(OPENJDK_$1_CPU_LIBDIR)/server" 1176 fi 1177 1178 $2JDKLIB_LIBS="-ljava -ljvm" 1179 if test "x$TOOLCHAIN_TYPE" = xsolstudio; then 1180 $2JDKLIB_LIBS="[$]$2JDKLIB_LIBS -lc" 1181 fi 1182 1183 fi 1184 1185 # Set $2JVM_LIBS (per os) 1186 if test "x$OPENJDK_$1_OS" = xlinux; then 1187 $2JVM_LIBS="[$]$2JVM_LIBS -lm -ldl -lpthread" 1188 elif test "x$OPENJDK_$1_OS" = xsolaris; then 1189 # FIXME: This hard-coded path is not really proper. 1190 if test "x$OPENJDK_$1_CPU" = xx86_64; then 1191 $2SOLARIS_LIBM_LIBS="/usr/lib/amd64/libm.so.1" 1192 elif test "x$OPENJDK_$1_CPU" = xsparcv9; then 1193 $2SOLARIS_LIBM_LIBS="/usr/lib/sparcv9/libm.so.1" 1194 fi 1195 $2JVM_LIBS="[$]$2JVM_LIBS -lsocket -lsched -ldl $SOLARIS_LIBM_LIBS -lCrun \ 1196 -lthread -ldoor -lc -ldemangle -lnsl -lkstat -lrt" 1197 elif test "x$OPENJDK_$1_OS" = xmacosx; then 1198 $2JVM_LIBS="[$]$2JVM_LIBS -lm" 1199 elif test "x$OPENJDK_$1_OS" = xaix; then 1200 $2JVM_LIBS="[$]$2JVM_LIBS -Wl,-lC_r -lm -ldl -lpthread" 1201 elif test "x$OPENJDK_$1_OS" = xbsd; then 1202 $2JVM_LIBS="[$]$2JVM_LIBS -lm" 1203 elif test "x$OPENJDK_$1_OS" = xwindows; then 1204 $2JVM_LIBS="[$]$2JVM_LIBS kernel32.lib user32.lib gdi32.lib winspool.lib \ 1205 comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib \ 1206 wsock32.lib winmm.lib version.lib psapi.lib" 1207 fi 1208 1209 # Set $2JVM_ASFLAGS 1210 if test "x$OPENJDK_$1_OS" = xlinux; then 1211 if test "x$OPENJDK_$1_CPU" = xx86; then 1212 $2JVM_ASFLAGS="[$]$2JVM_ASFLAGS -march=i586" 1213 fi 1214 elif test "x$OPENJDK_$1_OS" = xmacosx; then 1215 $2JVM_ASFLAGS="[$]$2JVM_ASFLAGS -x assembler-with-cpp -mno-omit-leaf-frame-pointer -mstack-alignment=16" 1216 fi 1217 1218 $2LDFLAGS_JDKLIB="${$2LDFLAGS_JDKLIB} ${$2EXTRA_LDFLAGS_JDK}" 1219 1220 AC_SUBST($2LDFLAGS_JDKLIB) 1221 AC_SUBST($2LDFLAGS_JDKEXE) 1222 AC_SUBST($2JDKLIB_LIBS) 1223 AC_SUBST($2JDKEXE_LIBS) 1224 AC_SUBST($2LDFLAGS_CXX_JDK) 1225 AC_SUBST($2LDFLAGS_HASH_STYLE) 1226 1227 AC_SUBST($2JVM_CFLAGS) 1228 AC_SUBST($2JVM_LDFLAGS) 1229 AC_SUBST($2JVM_ASFLAGS) 1230 AC_SUBST($2JVM_LIBS) 1231 1232]) 1233 1234# FLAGS_C_COMPILER_CHECK_ARGUMENTS(ARGUMENT: [ARGUMENT], IF_TRUE: [RUN-IF-TRUE], 1235# IF_FALSE: [RUN-IF-FALSE]) 1236# ------------------------------------------------------------ 1237# Check that the C compiler supports an argument 1238BASIC_DEFUN_NAMED([FLAGS_C_COMPILER_CHECK_ARGUMENTS], 1239 [*ARGUMENT IF_TRUE IF_FALSE], [$@], 1240[ 1241 AC_MSG_CHECKING([if the C compiler supports "ARG_ARGUMENT"]) 1242 supports=yes 1243 1244 saved_cflags="$CFLAGS" 1245 CFLAGS="$CFLAGS ARG_ARGUMENT" 1246 AC_LANG_PUSH([C]) 1247 AC_COMPILE_IFELSE([AC_LANG_SOURCE([[int i;]])], [], 1248 [supports=no]) 1249 AC_LANG_POP([C]) 1250 CFLAGS="$saved_cflags" 1251 1252 AC_MSG_RESULT([$supports]) 1253 if test "x$supports" = "xyes" ; then 1254 : 1255 ARG_IF_TRUE 1256 else 1257 : 1258 ARG_IF_FALSE 1259 fi 1260]) 1261 1262# FLAGS_CXX_COMPILER_CHECK_ARGUMENTS(ARGUMENT: [ARGUMENT], IF_TRUE: [RUN-IF-TRUE], 1263# IF_FALSE: [RUN-IF-FALSE]) 1264# ------------------------------------------------------------ 1265# Check that the C++ compiler supports an argument 1266BASIC_DEFUN_NAMED([FLAGS_CXX_COMPILER_CHECK_ARGUMENTS], 1267 [*ARGUMENT IF_TRUE IF_FALSE], [$@], 1268[ 1269 AC_MSG_CHECKING([if the C++ compiler supports "ARG_ARGUMENT"]) 1270 supports=yes 1271 1272 saved_cxxflags="$CXXFLAGS" 1273 CXXFLAGS="$CXXFLAG ARG_ARGUMENT" 1274 AC_LANG_PUSH([C++]) 1275 AC_COMPILE_IFELSE([AC_LANG_SOURCE([[int i;]])], [], 1276 [supports=no]) 1277 AC_LANG_POP([C++]) 1278 CXXFLAGS="$saved_cxxflags" 1279 1280 AC_MSG_RESULT([$supports]) 1281 if test "x$supports" = "xyes" ; then 1282 : 1283 ARG_IF_TRUE 1284 else 1285 : 1286 ARG_IF_FALSE 1287 fi 1288]) 1289 1290# FLAGS_COMPILER_CHECK_ARGUMENTS(ARGUMENT: [ARGUMENT], IF_TRUE: [RUN-IF-TRUE], 1291# IF_FALSE: [RUN-IF-FALSE]) 1292# ------------------------------------------------------------ 1293# Check that the C and C++ compilers support an argument 1294BASIC_DEFUN_NAMED([FLAGS_COMPILER_CHECK_ARGUMENTS], 1295 [*ARGUMENT IF_TRUE IF_FALSE], [$@], 1296[ 1297 FLAGS_C_COMPILER_CHECK_ARGUMENTS(ARGUMENT: [ARG_ARGUMENT], 1298 IF_TRUE: [C_COMP_SUPPORTS="yes"], 1299 IF_FALSE: [C_COMP_SUPPORTS="no"]) 1300 FLAGS_CXX_COMPILER_CHECK_ARGUMENTS(ARGUMENT: [ARG_ARGUMENT], 1301 IF_TRUE: [CXX_COMP_SUPPORTS="yes"], 1302 IF_FALSE: [CXX_COMP_SUPPORTS="no"]) 1303 1304 AC_MSG_CHECKING([if both compilers support "ARG_ARGUMENT"]) 1305 supports=no 1306 if test "x$C_COMP_SUPPORTS" = "xyes" -a "x$CXX_COMP_SUPPORTS" = "xyes"; then supports=yes; fi 1307 1308 AC_MSG_RESULT([$supports]) 1309 if test "x$supports" = "xyes" ; then 1310 : 1311 ARG_IF_TRUE 1312 else 1313 : 1314 ARG_IF_FALSE 1315 fi 1316]) 1317 1318# FLAGS_LINKER_CHECK_ARGUMENTS(ARGUMENT: [ARGUMENT], IF_TRUE: [RUN-IF-TRUE], 1319# IF_FALSE: [RUN-IF-FALSE]) 1320# ------------------------------------------------------------ 1321# Check that the linker support an argument 1322BASIC_DEFUN_NAMED([FLAGS_LINKER_CHECK_ARGUMENTS], 1323 [*ARGUMENT IF_TRUE IF_FALSE], [$@], 1324[ 1325 AC_MSG_CHECKING([if linker supports "ARG_ARGUMENT"]) 1326 supports=yes 1327 1328 saved_ldflags="$LDFLAGS" 1329 LDFLAGS="$LDFLAGS ARG_ARGUMENT" 1330 AC_LANG_PUSH([C]) 1331 AC_LINK_IFELSE([AC_LANG_PROGRAM([[]],[[]])], 1332 [], [supports=no]) 1333 AC_LANG_POP([C]) 1334 LDFLAGS="$saved_ldflags" 1335 1336 AC_MSG_RESULT([$supports]) 1337 if test "x$supports" = "xyes" ; then 1338 : 1339 ARG_IF_TRUE 1340 else 1341 : 1342 ARG_IF_FALSE 1343 fi 1344]) 1345 1346AC_DEFUN_ONCE([FLAGS_SETUP_COMPILER_FLAGS_MISC], 1347[ 1348 # Some Zero and Shark settings. 1349 # ZERO_ARCHFLAG tells the compiler which mode to build for 1350 case "${OPENJDK_TARGET_CPU}" in 1351 s390) 1352 ZERO_ARCHFLAG="${COMPILER_TARGET_BITS_FLAG}31" 1353 ;; 1354 *) 1355 ZERO_ARCHFLAG="${COMPILER_TARGET_BITS_FLAG}${OPENJDK_TARGET_CPU_BITS}" 1356 esac 1357 FLAGS_COMPILER_CHECK_ARGUMENTS(ARGUMENT: [$ZERO_ARCHFLAG], IF_FALSE: [ZERO_ARCHFLAG=""]) 1358 AC_SUBST(ZERO_ARCHFLAG) 1359 1360 # Check that the compiler supports -mX (or -qX on AIX) flags 1361 # Set COMPILER_SUPPORTS_TARGET_BITS_FLAG to 'true' if it does 1362 FLAGS_COMPILER_CHECK_ARGUMENTS(ARGUMENT: [${COMPILER_TARGET_BITS_FLAG}${OPENJDK_TARGET_CPU_BITS}], 1363 IF_TRUE: [COMPILER_SUPPORTS_TARGET_BITS_FLAG=true], 1364 IF_FALSE: [COMPILER_SUPPORTS_TARGET_BITS_FLAG=false]) 1365 AC_SUBST(COMPILER_SUPPORTS_TARGET_BITS_FLAG) 1366 1367 AC_ARG_ENABLE([warnings-as-errors], [AS_HELP_STRING([--disable-warnings-as-errors], 1368 [do not consider native warnings to be an error @<:@enabled@:>@])]) 1369 1370 AC_MSG_CHECKING([if native warnings are errors]) 1371 if test "x$enable_warnings_as_errors" = "xyes"; then 1372 AC_MSG_RESULT([yes (explicitely set)]) 1373 WARNINGS_AS_ERRORS=true 1374 elif test "x$enable_warnings_as_errors" = "xno"; then 1375 AC_MSG_RESULT([no]) 1376 WARNINGS_AS_ERRORS=false 1377 elif test "x$enable_warnings_as_errors" = "x"; then 1378 AC_MSG_RESULT([yes (default)]) 1379 WARNINGS_AS_ERRORS=true 1380 else 1381 AC_MSG_ERROR([--enable-warnings-as-errors accepts no argument]) 1382 fi 1383 1384 if test "x$WARNINGS_AS_ERRORS" = "xfalse"; then 1385 # Set legacy hotspot variable 1386 HOTSPOT_SET_WARNINGS_AS_ERRORS="WARNINGS_ARE_ERRORS=" 1387 else 1388 HOTSPOT_SET_WARNINGS_AS_ERRORS="" 1389 fi 1390 1391 AC_SUBST(WARNINGS_AS_ERRORS) 1392 AC_SUBST(HOTSPOT_SET_WARNINGS_AS_ERRORS) 1393 1394 case "${TOOLCHAIN_TYPE}" in 1395 microsoft) 1396 DISABLE_WARNING_PREFIX="-wd" 1397 CFLAGS_WARNINGS_ARE_ERRORS="-WX" 1398 ;; 1399 solstudio) 1400 DISABLE_WARNING_PREFIX="-erroff=" 1401 CFLAGS_WARNINGS_ARE_ERRORS="-errtags -errwarn=%all" 1402 ;; 1403 gcc) 1404 # Prior to gcc 4.4, a -Wno-X where X is unknown for that version of gcc will cause an error 1405 FLAGS_COMPILER_CHECK_ARGUMENTS(ARGUMENT: [-Wno-this-is-a-warning-that-do-not-exist], 1406 IF_TRUE: [GCC_CAN_DISABLE_WARNINGS=true], 1407 IF_FALSE: [GCC_CAN_DISABLE_WARNINGS=false] 1408 ) 1409 if test "x$GCC_CAN_DISABLE_WARNINGS" = "xtrue"; then 1410 DISABLE_WARNING_PREFIX="-Wno-" 1411 else 1412 DISABLE_WARNING_PREFIX= 1413 fi 1414 CFLAGS_WARNINGS_ARE_ERRORS="-Werror" 1415 # Repeate the check for the BUILD_CC and BUILD_CXX. Need to also reset 1416 # CFLAGS since any target specific flags will likely not work with the 1417 # build compiler 1418 CC_OLD="$CC" 1419 CXX_OLD="$CXX" 1420 CC="$BUILD_CC" 1421 CXX="$BUILD_CXX" 1422 CFLAGS_OLD="$CFLAGS" 1423 CFLAGS="" 1424 FLAGS_COMPILER_CHECK_ARGUMENTS(ARGUMENT: [-Wno-this-is-a-warning-that-do-not-exist], 1425 IF_TRUE: [BUILD_CC_CAN_DISABLE_WARNINGS=true], 1426 IF_FALSE: [BUILD_CC_CAN_DISABLE_WARNINGS=false] 1427 ) 1428 if test "x$BUILD_CC_CAN_DISABLE_WARNINGS" = "xtrue"; then 1429 BUILD_CC_DISABLE_WARNING_PREFIX="-Wno-" 1430 else 1431 BUILD_CC_DISABLE_WARNING_PREFIX= 1432 fi 1433 CC="$CC_OLD" 1434 CXX="$CXX_OLD" 1435 CFLAGS="$CFLAGS_OLD" 1436 ;; 1437 clang) 1438 DISABLE_WARNING_PREFIX="-Wno-" 1439 CFLAGS_WARNINGS_ARE_ERRORS="-Werror" 1440 ;; 1441 xlc) 1442 DISABLE_WARNING_PREFIX="-qsuppress=" 1443 CFLAGS_WARNINGS_ARE_ERRORS="-qhalt=w" 1444 ;; 1445 esac 1446 AC_SUBST(DISABLE_WARNING_PREFIX) 1447 AC_SUBST(BUILD_CC_DISABLE_WARNING_PREFIX) 1448 AC_SUBST(CFLAGS_WARNINGS_ARE_ERRORS) 1449]) 1450 1451# FLAGS_SETUP_GCC6_COMPILER_FLAGS([PREFIX]) 1452# Arguments: 1453# $1 - Optional prefix for each variable defined. 1454AC_DEFUN([FLAGS_SETUP_GCC6_COMPILER_FLAGS], 1455[ 1456 # These flags are required for GCC 6 builds as undefined behaviour in OpenJDK code 1457 # runs afoul of the more aggressive versions of these optimisations. 1458 # Notably, value range propagation now assumes that the this pointer of C++ 1459 # member functions is non-null. 1460 NO_DELETE_NULL_POINTER_CHECKS_CFLAG="-fno-delete-null-pointer-checks" 1461 dnl Argument check is disabled until FLAGS_COMPILER_CHECK_ARGUMENTS handles cross-compilation 1462 dnl FLAGS_COMPILER_CHECK_ARGUMENTS(ARGUMENT: [$NO_DELETE_NULL_POINTER_CHECKS_CFLAG -Werror], 1463 dnl IF_FALSE: [NO_DELETE_NULL_POINTER_CHECKS_CFLAG=""]) 1464 NO_LIFETIME_DSE_CFLAG="-fno-lifetime-dse" 1465 dnl Argument check is disabled until FLAGS_COMPILER_CHECK_ARGUMENTS handles cross-compilation 1466 dnl FLAGS_COMPILER_CHECK_ARGUMENTS(ARGUMENT: [$NO_LIFETIME_DSE_CFLAG -Werror], 1467 dnl IF_FALSE: [NO_LIFETIME_DSE_CFLAG=""]) 1468 AC_MSG_NOTICE([GCC >= 6 detected; adding ${NO_DELETE_NULL_POINTER_CHECKS_CFLAG} and ${NO_LIFETIME_DSE_CFLAG}]) 1469 $1CFLAGS_JDK="[$]$1CFLAGS_JDK ${NO_DELETE_NULL_POINTER_CHECKS_CFLAG} ${NO_LIFETIME_DSE_CFLAG}" 1470 $1JVM_CFLAGS="[$]$1JVM_CFLAGS ${NO_DELETE_NULL_POINTER_CHECKS_CFLAG} ${NO_LIFETIME_DSE_CFLAG}" 1471]) 1472