common/autoconf/flags.m4
changeset 24911 a039e17f8896
parent 23981 6ae1260c5cab
child 25034 d9ca34c227b8
equal deleted inserted replaced
24801:410bccbded9e 24911:a039e17f8896
   114         -d \"JDK_FVER=\$(JDK_MINOR_VERSION),\$(JDK_MICRO_VERSION),\$(if \$(JDK_UPDATE_VERSION),\$(JDK_UPDATE_VERSION),0),\$(COOKED_BUILD_NUMBER)\""
   114         -d \"JDK_FVER=\$(JDK_MINOR_VERSION),\$(JDK_MICRO_VERSION),\$(if \$(JDK_UPDATE_VERSION),\$(JDK_UPDATE_VERSION),0),\$(COOKED_BUILD_NUMBER)\""
   115   fi
   115   fi
   116   AC_SUBST(RC_FLAGS)
   116   AC_SUBST(RC_FLAGS)
   117 
   117 
   118   if test "x$TOOLCHAIN_TYPE" = xmicrosoft; then
   118   if test "x$TOOLCHAIN_TYPE" = xmicrosoft; then
   119     # FIXME: likely bug, should be CCXXFLAGS_JDK? or one for C or CXX.
   119     # silence copyright notice and other headers.
   120     CCXXFLAGS="$CCXXFLAGS -nologo"
   120     COMMON_CCXXFLAGS="$COMMON_CCXXFLAGS -nologo"
   121   fi
   121   fi
   122 
   122 
   123   if test "x$SYSROOT" != "x"; then
   123   if test "x$SYSROOT" != "x"; then
   124     if test "x$TOOLCHAIN_TYPE" = xsolstudio; then
   124     if test "x$TOOLCHAIN_TYPE" = xsolstudio; then
   125       if test "x$OPENJDK_TARGET_OS" = xsolaris; then
   125       if test "x$OPENJDK_TARGET_OS" = xsolaris; then
   126         # Solaris Studio does not have a concept of sysroot. Instead we must
   126         # Solaris Studio does not have a concept of sysroot. Instead we must
   127         # make sure the default include and lib dirs are appended to each 
   127         # make sure the default include and lib dirs are appended to each
   128         # compile and link command line.
   128         # compile and link command line.
   129         SYSROOT_CFLAGS="-I$SYSROOT/usr/include"
   129         SYSROOT_CFLAGS="-I$SYSROOT/usr/include"
   130         SYSROOT_LDFLAGS="-L$SYSROOT/usr/lib$OPENJDK_TARGET_CPU_ISADIR \
   130         SYSROOT_LDFLAGS="-L$SYSROOT/usr/lib$OPENJDK_TARGET_CPU_ISADIR \
   131             -L$SYSROOT/lib$OPENJDK_TARGET_CPU_ISADIR \
   131             -L$SYSROOT/lib$OPENJDK_TARGET_CPU_ISADIR \
   132             -L$SYSROOT/usr/ccs/lib$OPENJDK_TARGET_CPU_ISADIR"
   132             -L$SYSROOT/usr/ccs/lib$OPENJDK_TARGET_CPU_ISADIR"
   300   AC_SUBST(CXX_FLAG_DEPS)
   300   AC_SUBST(CXX_FLAG_DEPS)
   301 
   301 
   302   # Debug symbols
   302   # Debug symbols
   303   if test "x$TOOLCHAIN_TYPE" = xgcc; then
   303   if test "x$TOOLCHAIN_TYPE" = xgcc; then
   304     if test "x$OPENJDK_TARGET_CPU_BITS" = "x64" && test "x$DEBUG_LEVEL" = "xfastdebug"; then
   304     if test "x$OPENJDK_TARGET_CPU_BITS" = "x64" && test "x$DEBUG_LEVEL" = "xfastdebug"; then
       
   305       # reduce from default "-g2" option to save space
   305       CFLAGS_DEBUG_SYMBOLS="-g1"
   306       CFLAGS_DEBUG_SYMBOLS="-g1"
   306       CXXFLAGS_DEBUG_SYMBOLS="-g1"
   307       CXXFLAGS_DEBUG_SYMBOLS="-g1"
   307     else
   308     else
   308       CFLAGS_DEBUG_SYMBOLS="-g"
   309       CFLAGS_DEBUG_SYMBOLS="-g"
   309       CXXFLAGS_DEBUG_SYMBOLS="-g"
   310       CXXFLAGS_DEBUG_SYMBOLS="-g"
   311   elif test "x$TOOLCHAIN_TYPE" = xclang; then
   312   elif test "x$TOOLCHAIN_TYPE" = xclang; then
   312     CFLAGS_DEBUG_SYMBOLS="-g"
   313     CFLAGS_DEBUG_SYMBOLS="-g"
   313     CXXFLAGS_DEBUG_SYMBOLS="-g"
   314     CXXFLAGS_DEBUG_SYMBOLS="-g"
   314   elif test "x$TOOLCHAIN_TYPE" = xsolstudio; then
   315   elif test "x$TOOLCHAIN_TYPE" = xsolstudio; then
   315     CFLAGS_DEBUG_SYMBOLS="-g -xs"
   316     CFLAGS_DEBUG_SYMBOLS="-g -xs"
       
   317     # FIXME: likely a bug, this disables debug symbols rather than enables them
   316     CXXFLAGS_DEBUG_SYMBOLS="-g0 -xs"
   318     CXXFLAGS_DEBUG_SYMBOLS="-g0 -xs"
   317   elif test "x$TOOLCHAIN_TYPE" = xxlc; then
   319   elif test "x$TOOLCHAIN_TYPE" = xxlc; then
   318     CFLAGS_DEBUG_SYMBOLS="-g"
   320     CFLAGS_DEBUG_SYMBOLS="-g"
   319     CXXFLAGS_DEBUG_SYMBOLS="-g"
   321     CXXFLAGS_DEBUG_SYMBOLS="-g"
   320   fi
   322   fi
   321   AC_SUBST(CFLAGS_DEBUG_SYMBOLS)
   323   AC_SUBST(CFLAGS_DEBUG_SYMBOLS)
   322   AC_SUBST(CXXFLAGS_DEBUG_SYMBOLS)
   324   AC_SUBST(CXXFLAGS_DEBUG_SYMBOLS)
       
   325 
       
   326   # bounds, memory and behavior checking options
       
   327   if test "x$TOOLCHAIN_TYPE" = xgcc; then
       
   328     case $DEBUG_LEVEL in
       
   329     release )
       
   330       # no adjustment
       
   331       ;;
       
   332     fastdebug )
       
   333       # Add compile time bounds checks.
       
   334       CFLAGS_DEBUG_OPTIONS="-U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=1"
       
   335       CXXFLAGS_DEBUG_OPTIONS="-U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=1"
       
   336       ;;
       
   337     slowdebug )
       
   338       # Add runtime bounds checks and symbol info.
       
   339       CFLAGS_DEBUG_OPTIONS="-U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 -fstack-protector-all --param ssp-buffer-size=1"
       
   340       CXXFLAGS_DEBUG_OPTIONS="-U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 -fstack-protector-all --param ssp-buffer-size=1"
       
   341       if test "x$HAS_CFLAG_DETECT_UNDEFINED_BEHAVIOR" = "xtrue"; then
       
   342         CFLAGS_DEBUG_OPTIONS="$CFLAGS_DEBUG_OPTIONS  $CFLAG_DETECT_UNDEFINED_BEHAVIOR_FLAG"
       
   343         CXXFLAGS_DEBUG_OPTIONS="$CXXFLAGS_DEBUG_OPTIONS $CFLAG_DETECT_UNDEFINED_BEHAVIOR_FLAG"
       
   344       fi
       
   345       ;;
       
   346     esac
       
   347   fi
       
   348   AC_SUBST(CFLAGS_DEBUG_OPTIONS)
       
   349   AC_SUBST(CXXFLAGS_DEBUG_OPTIONS)
   323 
   350 
   324   # Optimization levels
   351   # Optimization levels
   325   if test "x$TOOLCHAIN_TYPE" = xsolstudio; then
   352   if test "x$TOOLCHAIN_TYPE" = xsolstudio; then
   326     CC_HIGHEST="$CC_HIGHEST -fns -fsimple -fsingle -xbuiltin=%all -xdepend -xrestrict -xlibmil"
   353     CC_HIGHEST="$CC_HIGHEST -fns -fsimple -fsingle -xbuiltin=%all -xdepend -xrestrict -xlibmil"
   327 
   354 
   328     if test "x$OPENJDK_TARGET_CPU_ARCH" = "xx86"; then
   355     if test "x$OPENJDK_TARGET_CPU_ARCH" = "xx86"; then
   329       # FIXME: seems we always set -xregs=no%frameptr; put it elsewhere more global?
   356       # FIXME: seems we always set -xregs=no%frameptr; put it elsewhere more global?
   330       C_O_FLAG_HIGHEST="-xO4 -Wu,-O4~yz $CC_HIGHEST -xalias_level=basic -xregs=no%frameptr"
   357       C_O_FLAG_HIGHEST="-xO4 -Wu,-O4~yz $CC_HIGHEST -xalias_level=basic -xregs=no%frameptr"
   331       C_O_FLAG_HI="-xO4 -Wu,-O4~yz -xregs=no%frameptr"
   358       C_O_FLAG_HI="-xO4 -Wu,-O4~yz -xregs=no%frameptr"
   332       C_O_FLAG_NORM="-xO2 -Wu,-O2~yz -xregs=no%frameptr"
   359       C_O_FLAG_NORM="-xO2 -Wu,-O2~yz -xregs=no%frameptr"
       
   360       C_O_FLAG_DEBUG="-xregs=no%frameptr"
   333       C_O_FLAG_NONE="-xregs=no%frameptr"
   361       C_O_FLAG_NONE="-xregs=no%frameptr"
   334       CXX_O_FLAG_HIGHEST="-xO4 -Qoption ube -O4~yz $CC_HIGHEST -xregs=no%frameptr"
   362       CXX_O_FLAG_HIGHEST="-xO4 -Qoption ube -O4~yz $CC_HIGHEST -xregs=no%frameptr"
   335       CXX_O_FLAG_HI="-xO4 -Qoption ube -O4~yz -xregs=no%frameptr"
   363       CXX_O_FLAG_HI="-xO4 -Qoption ube -O4~yz -xregs=no%frameptr"
   336       CXX_O_FLAG_NORM="-xO2 -Qoption ube -O2~yz -xregs=no%frameptr"
   364       CXX_O_FLAG_NORM="-xO2 -Qoption ube -O2~yz -xregs=no%frameptr"
       
   365       CXX_O_FLAG_DEBUG="-xregs=no%frameptr"
   337       CXX_O_FLAG_NONE="-xregs=no%frameptr"
   366       CXX_O_FLAG_NONE="-xregs=no%frameptr"
   338       if test "x$OPENJDK_TARGET_CPU_BITS" = "x32"; then
   367       if test "x$OPENJDK_TARGET_CPU_BITS" = "x32"; then
   339         C_O_FLAG_HIGHEST="$C_O_FLAG_HIGHEST -xchip=pentium"
   368         C_O_FLAG_HIGHEST="$C_O_FLAG_HIGHEST -xchip=pentium"
   340         CXX_O_FLAG_HIGHEST="$CXX_O_FLAG_HIGHEST -xchip=pentium"
   369         CXX_O_FLAG_HIGHEST="$CXX_O_FLAG_HIGHEST -xchip=pentium"
   341       fi
   370       fi
   342     elif test "x$OPENJDK_TARGET_CPU_ARCH" = "xsparc"; then
   371     elif test "x$OPENJDK_TARGET_CPU_ARCH" = "xsparc"; then
   343       C_O_FLAG_HIGHEST="-xO4 -Wc,-Qrm-s -Wc,-Qiselect-T0 $CC_HIGHEST -xalias_level=basic -xprefetch=auto,explicit -xchip=ultra"
   372       C_O_FLAG_HIGHEST="-xO4 -Wc,-Qrm-s -Wc,-Qiselect-T0 $CC_HIGHEST -xalias_level=basic -xprefetch=auto,explicit -xchip=ultra"
   344       C_O_FLAG_HI="-xO4 -Wc,-Qrm-s -Wc,-Qiselect-T0"
   373       C_O_FLAG_HI="-xO4 -Wc,-Qrm-s -Wc,-Qiselect-T0"
   345       C_O_FLAG_NORM="-xO2 -Wc,-Qrm-s -Wc,-Qiselect-T0"
   374       C_O_FLAG_NORM="-xO2 -Wc,-Qrm-s -Wc,-Qiselect-T0"
       
   375       C_O_FLAG_DEBUG=""
   346       C_O_FLAG_NONE=""
   376       C_O_FLAG_NONE=""
   347       CXX_O_FLAG_HIGHEST="-xO4 -Qoption cg -Qrm-s -Qoption cg -Qiselect-T0 $CC_HIGHEST -xprefetch=auto,explicit -xchip=ultra"
   377       CXX_O_FLAG_HIGHEST="-xO4 -Qoption cg -Qrm-s -Qoption cg -Qiselect-T0 $CC_HIGHEST -xprefetch=auto,explicit -xchip=ultra"
   348       CXX_O_FLAG_HI="-xO4 -Qoption cg -Qrm-s -Qoption cg -Qiselect-T0"
   378       CXX_O_FLAG_HI="-xO4 -Qoption cg -Qrm-s -Qoption cg -Qiselect-T0"
   349       CXX_O_FLAG_NORM="-xO2 -Qoption cg -Qrm-s -Qoption cg -Qiselect-T0"
   379       CXX_O_FLAG_NORM="-xO2 -Qoption cg -Qrm-s -Qoption cg -Qiselect-T0"
       
   380       C_O_FLAG_DEBUG=""
   350       CXX_O_FLAG_NONE=""
   381       CXX_O_FLAG_NONE=""
   351     fi
   382     fi
   352   else
   383   else
   353     # The remaining toolchains share opt flags between CC and CXX;
   384     # The remaining toolchains share opt flags between CC and CXX;
   354     # setup for C and duplicate afterwards.
   385     # setup for C and duplicate afterwards.
   357         # On MacOSX we optimize for size, something
   388         # On MacOSX we optimize for size, something
   358         # we should do for all platforms?
   389         # we should do for all platforms?
   359         C_O_FLAG_HIGHEST="-Os"
   390         C_O_FLAG_HIGHEST="-Os"
   360         C_O_FLAG_HI="-Os"
   391         C_O_FLAG_HI="-Os"
   361         C_O_FLAG_NORM="-Os"
   392         C_O_FLAG_NORM="-Os"
   362         C_O_FLAG_NONE=""
       
   363       else
   393       else
   364         C_O_FLAG_HIGHEST="-O3"
   394         C_O_FLAG_HIGHEST="-O3"
   365         C_O_FLAG_HI="-O3"
   395         C_O_FLAG_HI="-O3"
   366         C_O_FLAG_NORM="-O2"
   396         C_O_FLAG_NORM="-O2"
   367         C_O_FLAG_NONE="-O0"
       
   368       fi
   397       fi
       
   398       if test "x$HAS_CFLAG_OPTIMIZE_DEBUG" = "xtrue"; then
       
   399         C_O_FLAG_DEBUG="$CFLAG_OPTIMIZE_DEBUG_FLAG"
       
   400       else
       
   401         C_O_FLAG_DEBUG="-O0"
       
   402       fi
       
   403       C_O_FLAG_NONE="-O0"
   369     elif test "x$TOOLCHAIN_TYPE" = xclang; then
   404     elif test "x$TOOLCHAIN_TYPE" = xclang; then
   370       if test "x$OPENJDK_TARGET_OS" = xmacosx; then
   405       if test "x$OPENJDK_TARGET_OS" = xmacosx; then
   371         # On MacOSX we optimize for size, something
   406         # On MacOSX we optimize for size, something
   372         # we should do for all platforms?
   407         # we should do for all platforms?
   373         C_O_FLAG_HIGHEST="-Os"
   408         C_O_FLAG_HIGHEST="-Os"
   374         C_O_FLAG_HI="-Os"
   409         C_O_FLAG_HI="-Os"
   375         C_O_FLAG_NORM="-Os"
   410         C_O_FLAG_NORM="-Os"
   376         C_O_FLAG_NONE=""
       
   377       else
   411       else
   378         C_O_FLAG_HIGHEST="-O3"
   412         C_O_FLAG_HIGHEST="-O3"
   379         C_O_FLAG_HI="-O3"
   413         C_O_FLAG_HI="-O3"
   380         C_O_FLAG_NORM="-O2"
   414         C_O_FLAG_NORM="-O2"
   381         C_O_FLAG_NONE="-O0"
       
   382       fi
   415       fi
       
   416       C_O_FLAG_DEBUG="-O0"
       
   417       C_O_FLAG_NONE="-O0"
   383     elif test "x$TOOLCHAIN_TYPE" = xxlc; then
   418     elif test "x$TOOLCHAIN_TYPE" = xxlc; then
   384       C_O_FLAG_HIGHEST="-O3"
   419       C_O_FLAG_HIGHEST="-O3"
   385       C_O_FLAG_HI="-O3 -qstrict"
   420       C_O_FLAG_HI="-O3 -qstrict"
   386       C_O_FLAG_NORM="-O2"
   421       C_O_FLAG_NORM="-O2"
   387       C_O_FLAG_NONE=""
   422       C_O_FLAG_DEBUG="-qnoopt"
       
   423       C_O_FLAG_NONE="-qnoop"
   388     elif test "x$TOOLCHAIN_TYPE" = xmicrosoft; then
   424     elif test "x$TOOLCHAIN_TYPE" = xmicrosoft; then
   389       C_O_FLAG_HIGHEST="-O2"
   425       C_O_FLAG_HIGHEST="-O2"
   390       C_O_FLAG_HI="-O1"
   426       C_O_FLAG_HI="-O1"
   391       C_O_FLAG_NORM="-O1"
   427       C_O_FLAG_NORM="-O1"
       
   428       C_O_FLAG_DEBUG="-Od"
   392       C_O_FLAG_NONE="-Od"
   429       C_O_FLAG_NONE="-Od"
   393     fi
   430     fi
   394     CXX_O_FLAG_HIGHEST="$C_O_FLAG_HIGHEST"
   431     CXX_O_FLAG_HIGHEST="$C_O_FLAG_HIGHEST"
   395     CXX_O_FLAG_HI="$C_O_FLAG_HI"
   432     CXX_O_FLAG_HI="$C_O_FLAG_HI"
   396     CXX_O_FLAG_NORM="$C_O_FLAG_NORM"
   433     CXX_O_FLAG_NORM="$C_O_FLAG_NORM"
       
   434     CXX_O_FLAG_DEBUG="$C_O_FLAG_DEBUG"
   397     CXX_O_FLAG_NONE="$C_O_FLAG_NONE"
   435     CXX_O_FLAG_NONE="$C_O_FLAG_NONE"
   398   fi
   436   fi
       
   437 
       
   438   # Adjust optimization flags according to debug level.
       
   439   case $DEBUG_LEVEL in
       
   440     release )
       
   441       # no adjustment
       
   442       ;;
       
   443     fastdebug )
       
   444       # Not quite so much optimization
       
   445       C_O_FLAG_HI="$C_O_FLAG_NORM"
       
   446       CXX_O_FLAG_HI="$CXX_O_FLAG_NORM"
       
   447       ;;
       
   448     slowdebug )
       
   449       # Disable optimization
       
   450       C_O_FLAG_HIGHEST="$C_O_FLAG_DEBUG"
       
   451       C_O_FLAG_HI="$C_O_FLAG_DEBUG"
       
   452       C_O_FLAG_NORM="$C_O_FLAG_DEBUG"
       
   453       CXX_O_FLAG_HIGHEST="$CXX_O_FLAG_DEBUG"
       
   454       CXX_O_FLAG_HI="$CXX_O_FLAG_DEBUG"
       
   455       CXX_O_FLAG_NORM="$CXX_O_FLAG_DEBUG"
       
   456       ;;
       
   457   esac
   399 
   458 
   400   AC_SUBST(C_O_FLAG_HIGHEST)
   459   AC_SUBST(C_O_FLAG_HIGHEST)
   401   AC_SUBST(C_O_FLAG_HI)
   460   AC_SUBST(C_O_FLAG_HI)
   402   AC_SUBST(C_O_FLAG_NORM)
   461   AC_SUBST(C_O_FLAG_NORM)
       
   462   AC_SUBST(C_O_FLAG_DEBUG)
   403   AC_SUBST(C_O_FLAG_NONE)
   463   AC_SUBST(C_O_FLAG_NONE)
   404   AC_SUBST(CXX_O_FLAG_HIGHEST)
   464   AC_SUBST(CXX_O_FLAG_HIGHEST)
   405   AC_SUBST(CXX_O_FLAG_HI)
   465   AC_SUBST(CXX_O_FLAG_HI)
   406   AC_SUBST(CXX_O_FLAG_NORM)
   466   AC_SUBST(CXX_O_FLAG_NORM)
       
   467   AC_SUBST(CXX_O_FLAG_DEBUG)
   407   AC_SUBST(CXX_O_FLAG_NONE)
   468   AC_SUBST(CXX_O_FLAG_NONE)
   408 ])
   469 ])
   409 
   470 
   410 AC_DEFUN_ONCE([FLAGS_SETUP_COMPILER_FLAGS_FOR_JDK],
   471 AC_DEFUN_ONCE([FLAGS_SETUP_COMPILER_FLAGS_FOR_JDK],
   411 [
   472 [
   459   #
   520   #
   460   # Now setup the CFLAGS and LDFLAGS for the JDK build.
   521   # Now setup the CFLAGS and LDFLAGS for the JDK build.
   461   # Later we will also have CFLAGS and LDFLAGS for the hotspot subrepo build.
   522   # Later we will also have CFLAGS and LDFLAGS for the hotspot subrepo build.
   462   #
   523   #
   463 
   524 
   464   # Setup compiler/platform specific flags to CFLAGS_JDK,
   525   # Setup compiler/platform specific flags into
   465   # CXXFLAGS_JDK and CCXXFLAGS_JDK (common to C and CXX?)
   526   #    CFLAGS_JDK    - C Compiler flags
       
   527   #    CXXFLAGS_JDK  - C++ Compiler flags
       
   528   #    COMMON_CCXXFLAGS_JDK - common to C and C++
   466   if test "x$TOOLCHAIN_TYPE" = xgcc; then
   529   if test "x$TOOLCHAIN_TYPE" = xgcc; then
   467     # these options are used for both C and C++ compiles
   530     COMMON_CCXXFLAGS_JDK="$COMMON_CCXXFLAGS $COMMON_CCXXFLAGS_JDK -Wall -Wno-parentheses -Wextra -Wno-unused -Wno-unused-parameter -Wformat=2 \
   468     CCXXFLAGS_JDK="$CCXXFLAGS $CCXXFLAGS_JDK -Wall -Wno-parentheses -Wextra -Wno-unused -Wno-unused-parameter -Wformat=2 \
       
   469         -pipe -D_GNU_SOURCE -D_REENTRANT -D_LARGEFILE64_SOURCE"
   531         -pipe -D_GNU_SOURCE -D_REENTRANT -D_LARGEFILE64_SOURCE"
   470     case $OPENJDK_TARGET_CPU_ARCH in
   532     case $OPENJDK_TARGET_CPU_ARCH in
   471       arm )
   533       arm )
   472         # on arm we don't prevent gcc to omit frame pointer but do prevent strict aliasing
   534         # on arm we don't prevent gcc to omit frame pointer but do prevent strict aliasing
   473         CFLAGS_JDK="${CFLAGS_JDK} -fno-strict-aliasing"
   535         CFLAGS_JDK="${CFLAGS_JDK} -fno-strict-aliasing"
   475       ppc )
   537       ppc )
   476         # on ppc we don't prevent gcc to omit frame pointer but do prevent strict aliasing
   538         # on ppc we don't prevent gcc to omit frame pointer but do prevent strict aliasing
   477         CFLAGS_JDK="${CFLAGS_JDK} -fno-strict-aliasing"
   539         CFLAGS_JDK="${CFLAGS_JDK} -fno-strict-aliasing"
   478         ;;
   540         ;;
   479       * )
   541       * )
   480         CCXXFLAGS_JDK="$CCXXFLAGS_JDK -fno-omit-frame-pointer"
   542         COMMON_CCXXFLAGS_JDK="$COMMON_CCXXFLAGS_JDK -fno-omit-frame-pointer"
   481         CFLAGS_JDK="${CFLAGS_JDK} -fno-strict-aliasing"
   543         CFLAGS_JDK="${CFLAGS_JDK} -fno-strict-aliasing"
   482         ;;
   544         ;;
   483     esac
   545     esac
   484   elif test "x$TOOLCHAIN_TYPE" = xsolstudio; then
   546   elif test "x$TOOLCHAIN_TYPE" = xsolstudio; then
   485     CCXXFLAGS_JDK="$CCXXFLAGS $CCXXFLAGS_JDK -DTRACING -DMACRO_MEMSYS_OPS -DBREAKPTS"
   547     COMMON_CCXXFLAGS_JDK="$COMMON_CCXXFLAGS $COMMON_CCXXFLAGS_JDK -DTRACING -DMACRO_MEMSYS_OPS -DBREAKPTS"
   486     if test "x$OPENJDK_TARGET_CPU_ARCH" = xx86; then
   548     if test "x$OPENJDK_TARGET_CPU_ARCH" = xx86; then
   487       CCXXFLAGS_JDK="$CCXXFLAGS_JDK -DcpuIntel -Di586 -D$OPENJDK_TARGET_CPU_LEGACY_LIB"
   549       COMMON_CCXXFLAGS_JDK="$COMMON_CCXXFLAGS_JDK -DcpuIntel -Di586 -D$OPENJDK_TARGET_CPU_LEGACY_LIB"
   488       CFLAGS_JDK="$CFLAGS_JDK -erroff=E_BAD_PRAGMA_PACK_VALUE"
   550       CFLAGS_JDK="$CFLAGS_JDK -erroff=E_BAD_PRAGMA_PACK_VALUE"
   489     fi
   551     fi
   490   
   552 
   491     CFLAGS_JDK="$CFLAGS_JDK -xc99=%none -xCC -errshort=tags -Xa -v -mt -W0,-noglobal"
   553     CFLAGS_JDK="$CFLAGS_JDK -xc99=%none -xCC -errshort=tags -Xa -v -mt -W0,-noglobal"
   492     CXXFLAGS_JDK="$CXXFLAGS_JDK -errtags=yes +w -mt -features=no%except -DCC_NOEX -norunpath -xnolib"
   554     CXXFLAGS_JDK="$CXXFLAGS_JDK -errtags=yes +w -mt -features=no%except -DCC_NOEX -norunpath -xnolib"
   493   elif test "x$TOOLCHAIN_TYPE" = xxlc; then
   555   elif test "x$TOOLCHAIN_TYPE" = xxlc; then
   494     CFLAGS_JDK="$CFLAGS_JDK -D_GNU_SOURCE -D_REENTRANT -D_LARGEFILE64_SOURCE -DSTDC"
   556     CFLAGS_JDK="$CFLAGS_JDK -D_GNU_SOURCE -D_REENTRANT -D_LARGEFILE64_SOURCE -DSTDC"
   495     CXXFLAGS_JDK="$CXXFLAGS_JDK -D_GNU_SOURCE -D_REENTRANT -D_LARGEFILE64_SOURCE -DSTDC"
   557     CXXFLAGS_JDK="$CXXFLAGS_JDK -D_GNU_SOURCE -D_REENTRANT -D_LARGEFILE64_SOURCE -DSTDC"
   496   elif test "x$TOOLCHAIN_TYPE" = xmicrosoft; then
   558   elif test "x$TOOLCHAIN_TYPE" = xmicrosoft; then
   497     CCXXFLAGS_JDK="$CCXXFLAGS $CCXXFLAGS_JDK -Zi -MD -Zc:wchar_t- -W3 -wd4800 \
   559     COMMON_CCXXFLAGS_JDK="$COMMON_CCXXFLAGS $COMMON_CCXXFLAGS_JDK -Zi -MD -Zc:wchar_t- -W3 -wd4800 \
   498     -D_STATIC_CPPLIB -D_DISABLE_DEPRECATE_STATIC_CPPLIB -DWIN32_LEAN_AND_MEAN \
   560     -D_STATIC_CPPLIB -D_DISABLE_DEPRECATE_STATIC_CPPLIB -DWIN32_LEAN_AND_MEAN \
   499     -D_CRT_SECURE_NO_DEPRECATE -D_CRT_NONSTDC_NO_DEPRECATE \
   561     -D_CRT_SECURE_NO_DEPRECATE -D_CRT_NONSTDC_NO_DEPRECATE \
   500     -DWIN32 -DIAL"
   562     -DWIN32 -DIAL"
   501     if test "x$OPENJDK_TARGET_CPU" = xx86_64; then
   563     if test "x$OPENJDK_TARGET_CPU" = xx86_64; then
   502       CCXXFLAGS_JDK="$CCXXFLAGS_JDK -D_AMD64_ -Damd64"
   564       COMMON_CCXXFLAGS_JDK="$COMMON_CCXXFLAGS_JDK -D_AMD64_ -Damd64"
   503     else
   565     else
   504       CCXXFLAGS_JDK="$CCXXFLAGS_JDK -D_X86_ -Dx86"
   566       COMMON_CCXXFLAGS_JDK="$COMMON_CCXXFLAGS_JDK -D_X86_ -Dx86"
   505     fi
   567     fi
   506   fi
   568   fi
   507 
   569 
   508   ###############################################################################
   570   ###############################################################################
   509 
   571 
   510   # Adjust flags according to debug level.
   572   # Adjust flags according to debug level.
   511   case $DEBUG_LEVEL in
   573   case $DEBUG_LEVEL in
   512     fastdebug )
   574     fastdebug | slowdebug )
   513       CFLAGS_JDK="$CFLAGS_JDK $CFLAGS_DEBUG_SYMBOLS"
   575       CFLAGS_JDK="$CFLAGS_JDK $CFLAGS_DEBUG_SYMBOLS $CFLAGS_DEBUG_OPTIONS"
   514       CXXFLAGS_JDK="$CXXFLAGS_JDK $CXXFLAGS_DEBUG_SYMBOLS"
   576       CXXFLAGS_JDK="$CXXFLAGS_JDK $CXXFLAGS_DEBUG_SYMBOLS $CXXFLAGS_DEBUG_OPTIONS"
   515       C_O_FLAG_HI="$C_O_FLAG_NORM"
       
   516       C_O_FLAG_NORM="$C_O_FLAG_NORM"
       
   517       CXX_O_FLAG_HI="$CXX_O_FLAG_NORM"
       
   518       CXX_O_FLAG_NORM="$CXX_O_FLAG_NORM"
       
   519       JAVAC_FLAGS="$JAVAC_FLAGS -g"
   577       JAVAC_FLAGS="$JAVAC_FLAGS -g"
   520       ;;
   578       ;;
   521     slowdebug )
   579     release )
   522       CFLAGS_JDK="$CFLAGS_JDK $CFLAGS_DEBUG_SYMBOLS"
   580       ;;
   523       CXXFLAGS_JDK="$CXXFLAGS_JDK $CXXFLAGS_DEBUG_SYMBOLS"
   581     * )
   524       C_O_FLAG_HI="$C_O_FLAG_NONE"
   582       AC_MSG_ERROR([Unrecognized \$DEBUG_LEVEL: $DEBUG_LEVEL])
   525       C_O_FLAG_NORM="$C_O_FLAG_NONE"
       
   526       CXX_O_FLAG_HI="$CXX_O_FLAG_NONE"
       
   527       CXX_O_FLAG_NORM="$CXX_O_FLAG_NONE"
       
   528       JAVAC_FLAGS="$JAVAC_FLAGS -g"
       
   529       ;;
   583       ;;
   530   esac
   584   esac
   531 
   585 
   532   # Setup LP64
   586   # Setup LP64
   533   CCXXFLAGS_JDK="$CCXXFLAGS_JDK $ADD_LP64"
   587   COMMON_CCXXFLAGS_JDK="$COMMON_CCXXFLAGS_JDK $ADD_LP64"
   534 
   588 
   535   # Set some common defines. These works for all compilers, but assume
   589   # Set some common defines. These works for all compilers, but assume
   536   # -D is universally accepted.
   590   # -D is universally accepted.
   537 
   591 
   538   # Setup endianness
   592   # Setup endianness
   541     #   Sun C compiler warning message: warning: macro redefined: _LITTLE_ENDIAN
   595     #   Sun C compiler warning message: warning: macro redefined: _LITTLE_ENDIAN
   542     #   (The Solaris X86 system defines this in file /usr/include/sys/isa_defs.h).
   596     #   (The Solaris X86 system defines this in file /usr/include/sys/isa_defs.h).
   543     #   Note: -Dmacro         is the same as    #define macro 1
   597     #   Note: -Dmacro         is the same as    #define macro 1
   544     #         -Dmacro=        is the same as    #define macro
   598     #         -Dmacro=        is the same as    #define macro
   545     if test "x$OPENJDK_TARGET_OS" = xsolaris; then
   599     if test "x$OPENJDK_TARGET_OS" = xsolaris; then
   546       CCXXFLAGS_JDK="$CCXXFLAGS_JDK -D_LITTLE_ENDIAN="
   600       COMMON_CCXXFLAGS_JDK="$COMMON_CCXXFLAGS_JDK -D_LITTLE_ENDIAN="
   547     else
   601     else
   548       CCXXFLAGS_JDK="$CCXXFLAGS_JDK -D_LITTLE_ENDIAN"
   602       COMMON_CCXXFLAGS_JDK="$COMMON_CCXXFLAGS_JDK -D_LITTLE_ENDIAN"
   549     fi
   603     fi
   550   else
   604   else
   551     # Same goes for _BIG_ENDIAN. Do we really need to set *ENDIAN on Solaris if they
   605     # Same goes for _BIG_ENDIAN. Do we really need to set *ENDIAN on Solaris if they
   552     # are defined in the system?
   606     # are defined in the system?
   553     if test "x$OPENJDK_TARGET_OS" = xsolaris; then
   607     if test "x$OPENJDK_TARGET_OS" = xsolaris; then
   554       CCXXFLAGS_JDK="$CCXXFLAGS_JDK -D_BIG_ENDIAN="
   608       COMMON_CCXXFLAGS_JDK="$COMMON_CCXXFLAGS_JDK -D_BIG_ENDIAN="
   555     else
   609     else
   556       CCXXFLAGS_JDK="$CCXXFLAGS_JDK -D_BIG_ENDIAN"
   610       COMMON_CCXXFLAGS_JDK="$COMMON_CCXXFLAGS_JDK -D_BIG_ENDIAN"
   557     fi
   611     fi
   558   fi
   612   fi
   559   
   613 
   560   # Setup target OS define. Use OS target name but in upper case.
   614   # Setup target OS define. Use OS target name but in upper case.
   561   OPENJDK_TARGET_OS_UPPERCASE=`$ECHO $OPENJDK_TARGET_OS | $TR 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
   615   OPENJDK_TARGET_OS_UPPERCASE=`$ECHO $OPENJDK_TARGET_OS | $TR 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
   562   CCXXFLAGS_JDK="$CCXXFLAGS_JDK -D$OPENJDK_TARGET_OS_UPPERCASE"
   616   COMMON_CCXXFLAGS_JDK="$COMMON_CCXXFLAGS_JDK -D$OPENJDK_TARGET_OS_UPPERCASE"
   563 
   617 
   564   # Setup target CPU
   618   # Setup target CPU
   565   CCXXFLAGS_JDK="$CCXXFLAGS_JDK -DARCH='\"$OPENJDK_TARGET_CPU_LEGACY\"' -D$OPENJDK_TARGET_CPU_LEGACY"
   619   COMMON_CCXXFLAGS_JDK="$COMMON_CCXXFLAGS_JDK -DARCH='\"$OPENJDK_TARGET_CPU_LEGACY\"' -D$OPENJDK_TARGET_CPU_LEGACY"
   566   
   620 
   567   # Setup debug/release defines
   621   # Setup debug/release defines
   568   if test "x$DEBUG_LEVEL" = xrelease; then
   622   if test "x$DEBUG_LEVEL" = xrelease; then
   569     CCXXFLAGS_JDK="$CCXXFLAGS_JDK -DNDEBUG"
   623     COMMON_CCXXFLAGS_JDK="$COMMON_CCXXFLAGS_JDK -DNDEBUG"
   570     if test "x$OPENJDK_TARGET_OS" = xsolaris; then
   624     if test "x$OPENJDK_TARGET_OS" = xsolaris; then
   571       CCXXFLAGS_JDK="$CCXXFLAGS_JDK -DTRIMMED"
   625       COMMON_CCXXFLAGS_JDK="$COMMON_CCXXFLAGS_JDK -DTRIMMED"
   572     fi
   626     fi
   573   else
   627   else
   574     CCXXFLAGS_JDK="$CCXXFLAGS_JDK -DDEBUG"
   628     COMMON_CCXXFLAGS_JDK="$COMMON_CCXXFLAGS_JDK -DDEBUG"
   575   fi
   629   fi
   576 
   630 
   577   # Setup release name
   631   # Setup release name
   578   CCXXFLAGS_JDK="$CCXXFLAGS_JDK -DRELEASE='\"\$(RELEASE)\"'"
   632   COMMON_CCXXFLAGS_JDK="$COMMON_CCXXFLAGS_JDK -DRELEASE='\"\$(RELEASE)\"'"
   579 
   633 
   580 
   634 
   581   # Set some additional per-OS defines.
   635   # Set some additional per-OS defines.
   582   if test "x$OPENJDK_TARGET_OS" = xmacosx; then
   636   if test "x$OPENJDK_TARGET_OS" = xmacosx; then
   583     CCXXFLAGS_JDK="$CCXXFLAGS_JDK -D_ALLBSD_SOURCE -D_DARWIN_UNLIMITED_SELECT"
   637     COMMON_CCXXFLAGS_JDK="$COMMON_CCXXFLAGS_JDK -D_ALLBSD_SOURCE -D_DARWIN_UNLIMITED_SELECT"
   584   elif test "x$OPENJDK_TARGET_OS" = xaix; then
   638   elif test "x$OPENJDK_TARGET_OS" = xaix; then
   585     # FIXME: PPC64 should not be here.
   639     # FIXME: PPC64 should not be here.
   586     CCXXFLAGS_JDK="$CCXXFLAGS_JDK -DPPC64"
   640     COMMON_CCXXFLAGS_JDK="$COMMON_CCXXFLAGS_JDK -DPPC64"
   587   elif test "x$OPENJDK_TARGET_OS" = xbsd; then
   641   elif test "x$OPENJDK_TARGET_OS" = xbsd; then
   588     CCXXFLAGS_JDK="$CCXXFLAGS_JDK -D_ALLBSD_SOURCE"
   642     COMMON_CCXXFLAGS_JDK="$COMMON_CCXXFLAGS_JDK -D_ALLBSD_SOURCE"
   589   fi
   643   fi
   590 
   644 
   591   # Additional macosx handling
   645   # Additional macosx handling
   592   if test "x$OPENJDK_TARGET_OS" = xmacosx; then
   646   if test "x$OPENJDK_TARGET_OS" = xmacosx; then
   593     if test "x$TOOLCHAIN_TYPE" = xgcc; then
   647     if test "x$TOOLCHAIN_TYPE" = xgcc; then
   594       # FIXME: This needs to be exported in spec.gmk due to closed legacy code.
   648       # FIXME: This needs to be exported in spec.gmk due to closed legacy code.
   595       # FIXME: clean this up, and/or move it elsewhere.
   649       # FIXME: clean this up, and/or move it elsewhere.
   596 
   650 
   597       # Setting these parameters makes it an error to link to macosx APIs that are
   651       # Setting these parameters makes it an error to link to macosx APIs that are
   598       # newer than the given OS version and makes the linked binaries compatible 
   652       # newer than the given OS version and makes the linked binaries compatible
   599       # even if built on a newer version of the OS.
   653       # even if built on a newer version of the OS.
   600       # The expected format is X.Y.Z
   654       # The expected format is X.Y.Z
   601       MACOSX_VERSION_MIN=10.7.0
   655       MACOSX_VERSION_MIN=10.7.0
   602       AC_SUBST(MACOSX_VERSION_MIN)
   656       AC_SUBST(MACOSX_VERSION_MIN)
   603     
   657 
   604       # The macro takes the version with no dots, ex: 1070
   658       # The macro takes the version with no dots, ex: 1070
   605       # Let the flags variables get resolved in make for easier override on make
   659       # Let the flags variables get resolved in make for easier override on make
   606       # command line.
   660       # command line.
   607       CCXXFLAGS_JDK="$CCXXFLAGS_JDK -DMAC_OS_X_VERSION_MAX_ALLOWED=\$(subst .,,\$(MACOSX_VERSION_MIN)) -mmacosx-version-min=\$(MACOSX_VERSION_MIN)"
   661       COMMON_CCXXFLAGS_JDK="$COMMON_CCXXFLAGS_JDK -DMAC_OS_X_VERSION_MAX_ALLOWED=\$(subst .,,\$(MACOSX_VERSION_MIN)) -mmacosx-version-min=\$(MACOSX_VERSION_MIN)"
   608       LDFLAGS_JDK="$LDFLAGS_JDK -mmacosx-version-min=\$(MACOSX_VERSION_MIN)"
   662       LDFLAGS_JDK="$LDFLAGS_JDK -mmacosx-version-min=\$(MACOSX_VERSION_MIN)"
   609     fi
   663     fi
   610   fi
   664   fi
   611 
   665 
   612   # Setup some hard coded includes
   666   # Setup some hard coded includes
   613   CCXXFLAGS_JDK="$CCXXFLAGS_JDK \
   667   COMMON_CCXXFLAGS_JDK="$COMMON_CCXXFLAGS_JDK \
   614       -I${JDK_OUTPUTDIR}/include \
   668       -I${JDK_OUTPUTDIR}/include \
   615       -I${JDK_OUTPUTDIR}/include/$OPENJDK_TARGET_OS \
   669       -I${JDK_OUTPUTDIR}/include/$OPENJDK_TARGET_OS \
   616       -I${JDK_TOPDIR}/src/share/javavm/export \
   670       -I${JDK_TOPDIR}/src/share/javavm/export \
   617       -I${JDK_TOPDIR}/src/$OPENJDK_TARGET_OS_EXPORT_DIR/javavm/export \
   671       -I${JDK_TOPDIR}/src/$OPENJDK_TARGET_OS_EXPORT_DIR/javavm/export \
   618       -I${JDK_TOPDIR}/src/share/native/common \
   672       -I${JDK_TOPDIR}/src/share/native/common \
   619       -I${JDK_TOPDIR}/src/$OPENJDK_TARGET_OS_API_DIR/native/common"
   673       -I${JDK_TOPDIR}/src/$OPENJDK_TARGET_OS_API_DIR/native/common"
   620 
   674 
   621   # The shared libraries are compiled using the picflag.
   675   # The shared libraries are compiled using the picflag.
   622   CFLAGS_JDKLIB="$CCXXFLAGS_JDK $CFLAGS_JDK $PICFLAG $CFLAGS_JDKLIB_EXTRA"
   676   CFLAGS_JDKLIB="$COMMON_CCXXFLAGS_JDK $CFLAGS_JDK $PICFLAG $CFLAGS_JDKLIB_EXTRA"
   623   CXXFLAGS_JDKLIB="$CCXXFLAGS_JDK $CXXFLAGS_JDK $PICFLAG $CXXFLAGS_JDKLIB_EXTRA "
   677   CXXFLAGS_JDKLIB="$COMMON_CCXXFLAGS_JDK $CXXFLAGS_JDK $PICFLAG $CXXFLAGS_JDKLIB_EXTRA "
   624 
   678 
   625   # Executable flags
   679   # Executable flags
   626   CFLAGS_JDKEXE="$CCXXFLAGS_JDK $CFLAGS_JDK"
   680   CFLAGS_JDKEXE="$COMMON_CCXXFLAGS_JDK $CFLAGS_JDK"
   627   CXXFLAGS_JDKEXE="$CCXXFLAGS_JDK $CXXFLAGS_JDK"
   681   CXXFLAGS_JDKEXE="$COMMON_CCXXFLAGS_JDK $CXXFLAGS_JDK"
   628 
   682 
   629   AC_SUBST(CFLAGS_JDKLIB)
   683   AC_SUBST(CFLAGS_JDKLIB)
   630   AC_SUBST(CFLAGS_JDKEXE)
   684   AC_SUBST(CFLAGS_JDKEXE)
   631   AC_SUBST(CXXFLAGS_JDKLIB)
   685   AC_SUBST(CXXFLAGS_JDKLIB)
   632   AC_SUBST(CXXFLAGS_JDKEXE)
   686   AC_SUBST(CXXFLAGS_JDKEXE)
   633 
   687 
   634   # Setup LDFLAGS et al.
   688   # Setup LDFLAGS et al.
   635   #
   689   #
       
   690 
   636   # Now this is odd. The JDK native libraries have to link against libjvm.so
   691   # Now this is odd. The JDK native libraries have to link against libjvm.so
   637   # On 32-bit machines there is normally two distinct libjvm.so:s, client and server.
   692   # On 32-bit machines there is normally two distinct libjvm.so:s, client and server.
   638   # Which should we link to? Are we lucky enough that the binary api to the libjvm.so library
   693   # Which should we link to? Are we lucky enough that the binary api to the libjvm.so library
   639   # is identical for client and server? Yes. Which is picked at runtime (client or server)?
   694   # is identical for client and server? Yes. Which is picked at runtime (client or server)?
   640   # Neither, since the chosen libjvm.so has already been loaded by the launcher, all the following
   695   # Neither, since the chosen libjvm.so has already been loaded by the launcher, all the following
   646     if test "x$OPENJDK_TARGET_CPU_BITS" = "x32"; then
   701     if test "x$OPENJDK_TARGET_CPU_BITS" = "x32"; then
   647       LDFLAGS_JDK="$LDFLAGS_JDK -safeseh"
   702       LDFLAGS_JDK="$LDFLAGS_JDK -safeseh"
   648     fi
   703     fi
   649     # TODO: make -debug optional "--disable-full-debug-symbols"
   704     # TODO: make -debug optional "--disable-full-debug-symbols"
   650     LDFLAGS_JDK="$LDFLAGS_JDK -debug"
   705     LDFLAGS_JDK="$LDFLAGS_JDK -debug"
   651     LDFLAGS_JDKLIB="${LDFLAGS_JDK} -dll -libpath:${JDK_OUTPUTDIR}/lib"
   706   elif test "x$TOOLCHAIN_TYPE" = xgcc; then
   652     LDFLAGS_JDKLIB_SUFFIX=""
   707     # If this is a --hash-style=gnu system, use --hash-style=both, why?
       
   708     # We have previously set HAS_GNU_HASH if this is the case
       
   709     if test -n "$HAS_GNU_HASH"; then
       
   710       LDFLAGS_JDK="${LDFLAGS_JDK} -Xlinker --hash-style=both"
       
   711     fi
       
   712     if test "x$OPENJDK_TARGET_OS" = xlinux; then
       
   713       # And since we now know that the linker is gnu, then add -z defs, to forbid
       
   714       # undefined symbols in object files.
       
   715       LDFLAGS_JDK="${LDFLAGS_JDK} -Xlinker -z -Xlinker defs"
       
   716       case $DEBUG_LEVEL in
       
   717         release )
       
   718           # tell linker to optimize libraries.
       
   719           # Should this be supplied to the OSS linker as well?
       
   720           LDFLAGS_JDK="${LDFLAGS_JDK} -Xlinker -O1"
       
   721           ;;
       
   722         slowdebug )
       
   723           if test "x$HAS_LINKER_NOW" = "xtrue"; then
       
   724             # do relocations at load
       
   725             LDFLAGS_JDK="$LDFLAGS_JDK $LINKER_NOW_FLAG"
       
   726             LDFLAGS_CXX_JDK="$LDFLAGS_CXX_JDK $LINKER_NOW_FLAG"
       
   727           fi
       
   728           if test "x$HAS_LINKER_RELRO" = "xtrue"; then
       
   729             # mark relocations read only
       
   730             LDFLAGS_JDK="$LDFLAGS_JDK $LINKER_RELRO_FLAG"
       
   731             LDFLAGS_CXX_JDK="$LDFLAGS_CXX_JDK $LINKER_RELRO_FLAG"
       
   732           fi
       
   733           ;;
       
   734         fastdebug )
       
   735           if test "x$HAS_LINKER_RELRO" = "xtrue"; then
       
   736             # mark relocations read only
       
   737             LDFLAGS_JDK="$LDFLAGS_JDK $LINKER_RELRO_FLAG"
       
   738             LDFLAGS_CXX_JDK="$LDFLAGS_CXX_JDK $LINKER_RELRO_FLAG"
       
   739           fi
       
   740           ;;
       
   741         * )
       
   742           AC_MSG_ERROR([Unrecognized \$DEBUG_LEVEL: $DEBUG_LEVEL])
       
   743           ;;
       
   744         esac
       
   745     fi
       
   746   elif test "x$TOOLCHAIN_TYPE" = xsolstudio; then
       
   747     LDFLAGS_JDK="$LDFLAGS_JDK -z defs -xildoff -ztext"
       
   748     LDFLAGS_CXX_JDK="$LDFLAGS_CXX_JDK -norunpath -xnolib"
       
   749   fi
       
   750 
       
   751   if test "x$TOOLCHAIN_TYPE" = xgcc || test "x$TOOLCHAIN_TYPE" = xclang; then
       
   752     # If undefined behaviour detection is enabled then we need to tell linker.
       
   753     case $DEBUG_LEVEL in
       
   754       release | fastdebug )
       
   755         ;;
       
   756       slowdebug )
       
   757         AC_MSG_WARN([$HAS_CFLAG_DETECT_UNDEFINED_BEHAVIOR])
       
   758         if test "x$HAS_CFLAG_DETECT_UNDEFINED_BEHAVIOR" = "xtrue"; then
       
   759           # enable undefined behaviour checking
       
   760           LDFLAGS_JDK="$LDFLAGS_JDK `$ECHO -n $CFLAG_DETECT_UNDEFINED_BEHAVIOR_FLAG | sed -e "s/[ ]*\([^ ]\+\)/ -Xlinker \1/g"`"
       
   761           LDFLAGS_CXX_JDK="$LDFLAGS_CXX_JDK `$ECHO -n $CFLAG_DETECT_UNDEFINED_BEHAVIOR_FLAG | sed -e "s/[ ]*\([^ ]\+\)/ -Xlinker \1/g"`"
       
   762         fi
       
   763         ;;
       
   764       * )
       
   765         AC_MSG_ERROR([Unrecognized \$DEBUG_LEVEL: $DEBUG_LEVEL])
       
   766         ;;
       
   767     esac
       
   768   fi
       
   769 
       
   770   # Customize LDFLAGS for executables
       
   771 
       
   772   LDFLAGS_JDKEXE="${LDFLAGS_JDK}"
       
   773 
       
   774   if test "x$TOOLCHAIN_TYPE" = xmicrosoft; then
   653     if test "x$OPENJDK_TARGET_CPU_BITS" = "x64"; then
   775     if test "x$OPENJDK_TARGET_CPU_BITS" = "x64"; then
   654       LDFLAGS_STACK_SIZE=1048576
   776       LDFLAGS_STACK_SIZE=1048576
   655     else
   777     else
   656       LDFLAGS_STACK_SIZE=327680
   778       LDFLAGS_STACK_SIZE=327680
   657     fi
   779     fi
   658     LDFLAGS_JDKEXE="${LDFLAGS_JDK} /STACK:$LDFLAGS_STACK_SIZE"
   780     LDFLAGS_JDKEXE="${LDFLAGS_JDKEXE} /STACK:$LDFLAGS_STACK_SIZE"
       
   781   elif test "x$OPENJDK_TARGET_OS" = xlinux; then
       
   782     LDFLAGS_JDKEXE="$LDFLAGS_JDKEXE -Xlinker --allow-shlib-undefined"
       
   783   fi
       
   784 
       
   785   # Customize LDFLAGS for libs
       
   786   LDFLAGS_JDKLIB="${LDFLAGS_JDK}"
       
   787 
       
   788   if test "x$TOOLCHAIN_TYPE" = xmicrosoft; then
       
   789     LDFLAGS_JDKLIB="${LDFLAGS_JDKLIB} -dll -libpath:${JDK_OUTPUTDIR}/lib"
       
   790     LDFLAGS_JDKLIB_SUFFIX=""
   659   else
   791   else
   660     if test "x$TOOLCHAIN_TYPE" = xgcc; then
   792     LDFLAGS_JDKLIB="${LDFLAGS_JDKLIB}  ${SHARED_LIBRARY_FLAGS} \
   661       # If this is a --hash-style=gnu system, use --hash-style=both, why?
       
   662       # We have previously set HAS_GNU_HASH if this is the case
       
   663       if test -n "$HAS_GNU_HASH"; then
       
   664         LDFLAGS_JDK="${LDFLAGS_JDK} -Xlinker --hash-style=both "
       
   665       fi
       
   666       if test "x$OPENJDK_TARGET_OS" = xlinux; then
       
   667         # And since we now know that the linker is gnu, then add -z defs, to forbid
       
   668         # undefined symbols in object files.
       
   669         LDFLAGS_JDK="${LDFLAGS_JDK} -Xlinker -z -Xlinker defs"
       
   670         if test "x$DEBUG_LEVEL" = "xrelease"; then
       
   671           # When building release libraries, tell the linker optimize them.
       
   672           # Should this be supplied to the OSS linker as well?
       
   673           LDFLAGS_JDK="${LDFLAGS_JDK} -Xlinker -O1"
       
   674         fi
       
   675       fi
       
   676     fi
       
   677 
       
   678     if test "x$TOOLCHAIN_TYPE" = xsolstudio; then
       
   679       LDFLAGS_JDK="$LDFLAGS_JDK -z defs -xildoff -ztext"
       
   680       LDFLAGS_CXX_JDK="$LDFLAGS_CXX_JDK -norunpath -xnolib"
       
   681     fi
       
   682 
       
   683     LDFLAGS_JDKLIB="${LDFLAGS_JDK} $SHARED_LIBRARY_FLAGS \
       
   684         -L${JDK_OUTPUTDIR}/lib${OPENJDK_TARGET_CPU_LIBDIR}"
   793         -L${JDK_OUTPUTDIR}/lib${OPENJDK_TARGET_CPU_LIBDIR}"
   685 
   794 
   686     # On some platforms (mac) the linker warns about non existing -L dirs.
   795     # On some platforms (mac) the linker warns about non existing -L dirs.
   687     # Add server first if available. Linking aginst client does not always produce the same results.
   796     # Add server first if available. Linking aginst client does not always produce the same results.
   688     # Only add client dir if client is being built. Add minimal (note not minimal1) if only building minimal1.
   797     # Only add client dir if client is being built. Add minimal (note not minimal1) if only building minimal1.
   699 
   808 
   700     LDFLAGS_JDKLIB_SUFFIX="-ljava -ljvm"
   809     LDFLAGS_JDKLIB_SUFFIX="-ljava -ljvm"
   701     if test "x$TOOLCHAIN_TYPE" = xsolstudio; then
   810     if test "x$TOOLCHAIN_TYPE" = xsolstudio; then
   702       LDFLAGS_JDKLIB_SUFFIX="$LDFLAGS_JDKLIB_SUFFIX -lc"
   811       LDFLAGS_JDKLIB_SUFFIX="$LDFLAGS_JDKLIB_SUFFIX -lc"
   703     fi
   812     fi
   704 
   813   fi
   705     LDFLAGS_JDKEXE="${LDFLAGS_JDK}"
   814 
   706     if test "x$OPENJDK_TARGET_OS" = xlinux; then
       
   707       LDFLAGS_JDKEXE="$LDFLAGS_JDKEXE -Xlinker --allow-shlib-undefined"
       
   708     fi
       
   709   fi
       
   710   AC_SUBST(LDFLAGS_JDKLIB)
   815   AC_SUBST(LDFLAGS_JDKLIB)
   711   AC_SUBST(LDFLAGS_JDKEXE)
   816   AC_SUBST(LDFLAGS_JDKEXE)
   712   AC_SUBST(LDFLAGS_JDKLIB_SUFFIX)
   817   AC_SUBST(LDFLAGS_JDKLIB_SUFFIX)
   713   AC_SUBST(LDFLAGS_JDKEXE_SUFFIX)
   818   AC_SUBST(LDFLAGS_JDKEXE_SUFFIX)
   714   AC_SUBST(LDFLAGS_CXX_JDK)
   819   AC_SUBST(LDFLAGS_CXX_JDK)
   715 ])
   820 ])
   716 
       
   717 
   821 
   718 # FLAGS_COMPILER_CHECK_ARGUMENTS([ARGUMENT], [RUN-IF-TRUE],
   822 # FLAGS_COMPILER_CHECK_ARGUMENTS([ARGUMENT], [RUN-IF-TRUE],
   719 #                                   [RUN-IF-FALSE])
   823 #                                   [RUN-IF-FALSE])
   720 # ------------------------------------------------------------
   824 # ------------------------------------------------------------
   721 # Check that the c and c++ compilers support an argument
   825 # Check that the c and c++ compilers support an argument
   725   supports=yes
   829   supports=yes
   726 
   830 
   727   saved_cflags="$CFLAGS"
   831   saved_cflags="$CFLAGS"
   728   CFLAGS="$CFLAGS $1"
   832   CFLAGS="$CFLAGS $1"
   729   AC_LANG_PUSH([C])
   833   AC_LANG_PUSH([C])
   730   AC_COMPILE_IFELSE([AC_LANG_SOURCE([[int i;]])], [], 
   834   AC_COMPILE_IFELSE([AC_LANG_SOURCE([[int i;]])], [],
   731       [supports=no])
   835       [supports=no])
   732   AC_LANG_POP([C])
   836   AC_LANG_POP([C])
   733   CFLAGS="$saved_cflags"
   837   CFLAGS="$saved_cflags"
   734 
   838 
   735   saved_cxxflags="$CXXFLAGS"
   839   saved_cxxflags="$CXXFLAGS"
   736   CXXFLAGS="$CXXFLAG $1"
   840   CXXFLAGS="$CXXFLAG $1"
   737   AC_LANG_PUSH([C++])
   841   AC_LANG_PUSH([C++])
   738   AC_COMPILE_IFELSE([AC_LANG_SOURCE([[int i;]])], [], 
   842   AC_COMPILE_IFELSE([AC_LANG_SOURCE([[int i;]])], [],
   739       [supports=no])
   843       [supports=no])
   740   AC_LANG_POP([C++])
   844   AC_LANG_POP([C++])
   741   CXXFLAGS="$saved_cxxflags"
   845   CXXFLAGS="$saved_cxxflags"
       
   846 
       
   847   AC_MSG_RESULT([$supports])
       
   848   if test "x$supports" = "xyes" ; then
       
   849     m4_ifval([$2], [$2], [:])
       
   850   else
       
   851     m4_ifval([$3], [$3], [:])
       
   852   fi
       
   853 ])
       
   854 
       
   855 # FLAGS_LINKER_CHECK_ARGUMENTS([ARGUMENT], [RUN-IF-TRUE],
       
   856 #                                    [RUN-IF-FALSE])
       
   857 # ------------------------------------------------------------
       
   858 # Check that the linker support an argument
       
   859 AC_DEFUN([FLAGS_LINKER_CHECK_ARGUMENTS],
       
   860 [
       
   861   AC_MSG_CHECKING([if linker supports "$1"])
       
   862   supports=yes
       
   863 
       
   864   saved_ldflags="$LDFLAGS"
       
   865   LDFLAGS="$LDFLAGS $1"
       
   866   AC_LANG_PUSH([C])
       
   867   AC_LINK_IFELSE([AC_LANG_PROGRAM([[]],[[]])],
       
   868       [], [supports=no])
       
   869   AC_LANG_POP([C])
       
   870   LDFLAGS="$saved_ldflags"
   742 
   871 
   743   AC_MSG_RESULT([$supports])
   872   AC_MSG_RESULT([$supports])
   744   if test "x$supports" = "xyes" ; then
   873   if test "x$supports" = "xyes" ; then
   745     m4_ifval([$2], [$2], [:])
   874     m4_ifval([$2], [$2], [:])
   746   else
   875   else