toolchain.m4 revision 952:8c50ba0ba497
1168404Spjd# 2168404Spjd# Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved. 3168404Spjd# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4168404Spjd# 5168404Spjd# This code is free software; you can redistribute it and/or modify it 6168404Spjd# under the terms of the GNU General Public License version 2 only, as 7168404Spjd# published by the Free Software Foundation. Oracle designates this 8168404Spjd# particular file as subject to the "Classpath" exception as provided 9168404Spjd# by Oracle in the LICENSE file that accompanied this code. 10168404Spjd# 11168404Spjd# This code is distributed in the hope that it will be useful, but WITHOUT 12168404Spjd# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 13168404Spjd# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 14168404Spjd# version 2 for more details (a copy is included in the LICENSE file that 15168404Spjd# accompanied this code). 16168404Spjd# 17168404Spjd# You should have received a copy of the GNU General Public License version 18168404Spjd# 2 along with this work; if not, write to the Free Software Foundation, 19168404Spjd# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 20168404Spjd# 21168404Spjd# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 22219089Spjd# or visit www.oracle.com if you need additional information or have any 23221263Smm# questions. 24286708Smav# 25264835Sdelphij 26235222Smm# $1 = compiler to test (CC or CXX) 27272810Sdelphij# $2 = human readable name of compiler (C or C++) 28296516SmavAC_DEFUN([TOOLCHAIN_CHECK_COMPILER_VERSION], 29296519Smav[ 30221263Smm COMPILER=[$]$1 31168404Spjd COMPILER_NAME=$2 32168404Spjd 33168404Spjd if test "x$OPENJDK_TARGET_OS" = xsolaris; then 34168404Spjd # Make sure we use the Sun Studio compiler and not gcc on Solaris, which won't work 35168404Spjd COMPILER_VERSION_TEST=`$COMPILER -V 2>&1 | $HEAD -n 1` 36168404Spjd $ECHO $COMPILER_VERSION_TEST | $GREP "^.*: Sun $COMPILER_NAME" > /dev/null 37168404Spjd if test $? -ne 0; then 38168404Spjd GCC_VERSION_TEST=`$COMPILER --version 2>&1 | $HEAD -n 1` 39168404Spjd 40168404Spjd AC_MSG_NOTICE([The $COMPILER_NAME compiler (located as $COMPILER) does not seem to be the required Sun Studio compiler.]) 41168404Spjd AC_MSG_NOTICE([The result from running with -V was: "$COMPILER_VERSION_TEST" and with --version: "$GCC_VERSION_TEST"]) 42219089Spjd AC_MSG_ERROR([Sun Studio compiler is required. Try setting --with-tools-dir.]) 43168404Spjd else 44168404Spjd COMPILER_VERSION=`$ECHO $COMPILER_VERSION_TEST | $SED -n "s/^.*@<:@ ,\t@:>@$COMPILER_NAME@<:@ ,\t@:>@\(@<:@1-9@:>@\.@<:@0-9@:>@@<:@0-9@:>@*\).*/\1/p"` 45168404Spjd COMPILER_VENDOR="Sun Studio" 46168404Spjd fi 47168404Spjd elif test "x$OPENJDK_TARGET_OS" = xaix; then 48219089Spjd COMPILER_VERSION_TEST=`$COMPILER -qversion 2>&1 | $TAIL -n 1` 49219089Spjd $ECHO $COMPILER_VERSION_TEST | $GREP "^Version: " > /dev/null 50219089Spjd if test $? -ne 0; then 51219089Spjd AC_MSG_ERROR([Failed to detect the compiler version of $COMPILER ....]) 52219089Spjd else 53248571Smm COMPILER_VERSION=`$ECHO $COMPILER_VERSION_TEST | $SED -n 's/Version: \([0-9][0-9]\.[0-9][0-9]*\).*/\1/p'` 54248571Smm COMPILER_VENDOR='IBM' 55268075Sdelphij fi 56260183Sdelphij elif test "x$OPENJDK_TARGET_OS" = xwindows; then 57268075Sdelphij # First line typically looks something like: 58286705Smav # Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 16.00.40219.01 for 80x86 59168404Spjd COMPILER_VERSION_TEST=`$COMPILER 2>&1 | $HEAD -n 1 | $TR -d '\r'` 60268075Sdelphij COMPILER_VERSION=`$ECHO $COMPILER_VERSION_TEST | $SED -n "s/^.*Version \(@<:@1-9@:>@@<:@0-9.@:>@*\) .*/\1/p"` 61268075Sdelphij COMPILER_VENDOR="Microsoft CL.EXE" 62268075Sdelphij COMPILER_CPU_TEST=`$ECHO $COMPILER_VERSION_TEST | $SED -n "s/^.* for \(.*\)$/\1/p"` 63268075Sdelphij if test "x$OPENJDK_TARGET_CPU" = "xx86"; then 64268075Sdelphij if test "x$COMPILER_CPU_TEST" != "x80x86"; then 65228103Smm AC_MSG_ERROR([Target CPU mismatch. We are building for $OPENJDK_TARGET_CPU but CL is for "$COMPILER_CPU_TEST"; expected "80x86".]) 66228103Smm fi 67286705Smav elif test "x$OPENJDK_TARGET_CPU" = "xx86_64"; then 68286705Smav if test "x$COMPILER_CPU_TEST" != "xx64"; then 69296516Smav AC_MSG_ERROR([Target CPU mismatch. We are building for $OPENJDK_TARGET_CPU but CL is for "$COMPILER_CPU_TEST"; expected "x64".]) 70296516Smav fi 71228103Smm fi 72296516Smav else 73296516Smav COMPILER_VERSION_TEST=`$COMPILER --version 2>&1 | $HEAD -n 1` 74296516Smav # Check that this is likely to be GCC. 75296516Smav $COMPILER --version 2>&1 | $GREP "Free Software Foundation" > /dev/null 76185029Spjd if test $? -ne 0; then 77289362Smav AC_MSG_NOTICE([The $COMPILER_NAME compiler (located as $COMPILER) does not seem to be the required GCC compiler.]) 78185029Spjd AC_MSG_NOTICE([The result from running with --version was: "$COMPILER_VERSION_TEST"]) 79286705Smav AC_MSG_ERROR([GCC compiler is required. Try setting --with-tools-dir.]) 80286705Smav fi 81286705Smav 82286705Smav # First line typically looks something like: 83289362Smav # gcc (Ubuntu/Linaro 4.5.2-8ubuntu4) 4.5.2 84289362Smav COMPILER_VERSION=`$ECHO $COMPILER_VERSION_TEST | $SED -n "s/^.* \(@<:@1-9@:>@@<:@0-9.@:>@*\)/\1/p"` 85286705Smav COMPILER_VENDOR=`$ECHO $COMPILER_VERSION_TEST | $SED -n "s/^\(.*\) @<:@1-9@:>@@<:@0-9.@:>@*/\1/p"` 86286705Smav fi 87286705Smav # This sets CC_VERSION or CXX_VERSION. (This comment is a grep marker) 88286705Smav $1_VERSION="$COMPILER_VERSION" 89286705Smav # This sets CC_VENDOR or CXX_VENDOR. (This comment is a grep marker) 90286705Smav $1_VENDOR="$COMPILER_VENDOR" 91286705Smav 92289362Smav AC_MSG_NOTICE([Using $COMPILER_VENDOR $COMPILER_NAME compiler version $COMPILER_VERSION (located at $COMPILER)]) 93286705Smav]) 94286705Smav 95286705Smav 96286705SmavAC_DEFUN_ONCE([TOOLCHAIN_SETUP_SYSROOT_AND_OUT_OPTIONS], 97286705Smav[ 98286705Smav ############################################################################### 99286705Smav # 100286705Smav # Configure the development tool paths and potential sysroot. 101286705Smav # 102286705Smav AC_LANG(C++) 103286705Smav 104168404Spjd # The option used to specify the target .o,.a or .so file. 105235222Smm # When compiling, how to specify the to be created object file. 106168404Spjd CC_OUT_OPTION='-o$(SPACE)' 107289362Smav # When linking, how to specify the to be created executable. 108168404Spjd EXE_OUT_OPTION='-o$(SPACE)' 109168404Spjd # When linking, how to specify the to be created dynamically linkable library. 110297509Smav LD_OUT_OPTION='-o$(SPACE)' 111297509Smav # When archiving, how to specify the to be create static archive for object files. 112297509Smav AR_OUT_OPTION='rcs$(SPACE)' 113297509Smav AC_SUBST(CC_OUT_OPTION) 114297509Smav AC_SUBST(EXE_OUT_OPTION) 115297509Smav AC_SUBST(LD_OUT_OPTION) 116297509Smav AC_SUBST(AR_OUT_OPTION) 117297509Smav]) 118297509Smav 119297509Smav# $1 = compiler to test (CC or CXX) 120297509Smav# $2 = human readable name of compiler (C or C++) 121297509Smav# $3 = list of compiler names to search for 122297509SmavAC_DEFUN([TOOLCHAIN_FIND_COMPILER], 123240415Smm[ 124168404Spjd COMPILER_NAME=$2 125168404Spjd SEARCH_LIST="$3" 126168404Spjd 127168404Spjd if test "x[$]$1" != x; then 128168404Spjd # User has supplied compiler name already, always let that override. 129168404Spjd AC_MSG_NOTICE([Will use user supplied compiler $1=[$]$1]) 130169170Spjd if test "x`basename [$]$1`" = "x[$]$1"; then 131168404Spjd # A command without a complete path is provided, search $PATH. 132168404Spjd 133235222Smm AC_PATH_PROGS(POTENTIAL_$1, [$]$1) 134168404Spjd if test "x$POTENTIAL_$1" != x; then 135235222Smm $1=$POTENTIAL_$1 136168404Spjd else 137235222Smm AC_MSG_ERROR([User supplied compiler $1=[$]$1 could not be found]) 138235222Smm fi 139168404Spjd else 140168404Spjd # Otherwise it might already be a complete path 141235222Smm if test ! -x "[$]$1"; then 142168404Spjd AC_MSG_ERROR([User supplied compiler $1=[$]$1 does not exist]) 143235222Smm fi 144235222Smm fi 145235222Smm else 146235222Smm # No user supplied value. Locate compiler ourselves 147235222Smm $1= 148168404Spjd # If TOOLS_DIR is set, check for all compiler names in there first 149168404Spjd # before checking the rest of the PATH. 150286587Smav if test -n "$TOOLS_DIR"; then 151286587Smav PATH_save="$PATH" 152286587Smav PATH="$TOOLS_DIR" 153286587Smav AC_PATH_PROGS(TOOLS_DIR_$1, $SEARCH_LIST) 154286587Smav $1=$TOOLS_DIR_$1 155168404Spjd PATH="$PATH_save" 156286587Smav fi 157286587Smav 158286587Smav # AC_PATH_PROGS can't be run multiple times with the same variable, 159286587Smav # so create a new name for this run. 160321610Smav if test "x[$]$1" = x; then 161286587Smav AC_PATH_PROGS(POTENTIAL_$1, $SEARCH_LIST) 162286587Smav $1=$POTENTIAL_$1 163307284Smav fi 164307284Smav 165307284Smav if test "x[$]$1" = x; then 166286587Smav HELP_MSG_MISSING_DEPENDENCY([devkit]) 167286587Smav AC_MSG_ERROR([Could not find a $COMPILER_NAME compiler. $HELP_MSG]) 168286587Smav fi 169286587Smav fi 170307284Smav 171307284Smav # Now we have a compiler binary in $1. Make sure it's okay. 172307284Smav BASIC_FIXUP_EXECUTABLE($1) 173321610Smav TEST_COMPILER="[$]$1" 174286587Smav # Don't remove symbolic links on AIX because 'xlc_r' and 'xlC_r' may all be links 175286587Smav # to 'xlc' but it is crucial that we invoke the compiler with the right name! 176286587Smav if test "x$OPENJDK_BUILD_OS" != xaix; then 177286587Smav AC_MSG_CHECKING([resolved symbolic links for $1]) 178286587Smav BASIC_REMOVE_SYMBOLIC_LINKS(TEST_COMPILER) 179321610Smav AC_MSG_RESULT([$TEST_COMPILER]) 180286587Smav fi 181286587Smav AC_MSG_CHECKING([if $1 is disguised ccache]) 182286587Smav 183286587Smav COMPILER_BASENAME=`$BASENAME "$TEST_COMPILER"` 184286587Smav if test "x$COMPILER_BASENAME" = "xccache"; then 185286587Smav AC_MSG_RESULT([yes, trying to find proper $COMPILER_NAME compiler]) 186286587Smav # We /usr/lib/ccache in the path, so cc is a symlink to /usr/bin/ccache. 187294815Smav # We want to control ccache invocation ourselves, so ignore this cc and try 188294815Smav # searching again. 189294815Smav 190294815Smav # Remove the path to the fake ccache cc from the PATH 191294815Smav RETRY_COMPILER_SAVED_PATH="$PATH" 192294815Smav COMPILER_DIRNAME=`$DIRNAME [$]$1` 193294815Smav PATH="`$ECHO $PATH | $SED -e "s,$COMPILER_DIRNAME,,g" -e "s,::,:,g" -e "s,^:,,g"`" 194294815Smav 195286587Smav # Try again looking for our compiler 196235222Smm AC_CHECK_TOOLS(PROPER_COMPILER_$1, $3) 197168404Spjd BASIC_FIXUP_EXECUTABLE(PROPER_COMPILER_$1) 198168404Spjd PATH="$RETRY_COMPILER_SAVED_PATH" 199235222Smm 200219089Spjd AC_MSG_CHECKING([for resolved symbolic links for $1]) 201253821Sdelphij BASIC_REMOVE_SYMBOLIC_LINKS(PROPER_COMPILER_$1) 202253821Sdelphij AC_MSG_RESULT([$PROPER_COMPILER_$1]) 203253821Sdelphij $1="$PROPER_COMPILER_$1" 204253821Sdelphij else 205253821Sdelphij AC_MSG_RESULT([no, keeping $1]) 206289362Smav fi 207253821Sdelphij 208253821Sdelphij TOOLCHAIN_CHECK_COMPILER_VERSION([$1], [$COMPILER_NAME]) 209253821Sdelphij]) 210253821Sdelphij 211253821Sdelphij 212253821SdelphijAC_DEFUN([TOOLCHAIN_SETUP_PATHS], 213253821Sdelphij[ 214253821Sdelphij if test "x$OPENJDK_TARGET_OS" = "xwindows"; then 215253821Sdelphij TOOLCHAIN_SETUP_VISUAL_STUDIO_ENV 216253821Sdelphij TOOLCHAIN_SETUP_MSVCR_DLL 217253821Sdelphij BASIC_DEPRECATED_ARG_WITH([dxsdk]) 218237458Smm BASIC_DEPRECATED_ARG_WITH([dxsdk-lib]) 219237458Smm BASIC_DEPRECATED_ARG_WITH([dxsdk-include]) 220237458Smm fi 221219089Spjd 222219089Spjd AC_SUBST(MSVCR_DLL) 223219089Spjd 224219089Spjd # If --build AND --host is set, then the configure script will find any 225219089Spjd # cross compilation tools in the PATH. Cross compilation tools 226219089Spjd # follows the cross compilation standard where they are prefixed with ${host}. 227219089Spjd # For example the binary i686-sun-solaris2.10-gcc 228235222Smm # will cross compile for i686-sun-solaris2.10 229235222Smm # If neither of build and host is not set, then build=host and the 230286587Smav # default compiler found in the path will be used. 231249195Smm # Setting only --host, does not seem to be really supported. 232235222Smm # Please set both --build and --host if you want to cross compile. 233219089Spjd 234219089Spjd if test "x$COMPILE_TYPE" = "xcross"; then 235235222Smm # Now we to find a C/C++ compiler that can build executables for the build 236219089Spjd # platform. We can't use the AC_PROG_CC macro, since it can only be used 237219089Spjd # once. Also, we need to do this before adding a tools dir to the path, 238219089Spjd # otherwise we might pick up cross-compilers which don't use standard naming. 239219089Spjd # Otherwise, we'll set the BUILD_tools to the native tools, but that'll have 240219089Spjd # to wait until they are properly discovered. 241219089Spjd AC_PATH_PROGS(BUILD_CC, [cl cc gcc]) 242219089Spjd BASIC_FIXUP_EXECUTABLE(BUILD_CC) 243219089Spjd AC_PATH_PROGS(BUILD_CXX, [cl CC g++]) 244219089Spjd BASIC_FIXUP_EXECUTABLE(BUILD_CXX) 245219089Spjd AC_PATH_PROG(BUILD_LD, ld) 246219089Spjd BASIC_FIXUP_EXECUTABLE(BUILD_LD) 247219089Spjd fi 248219089Spjd AC_SUBST(BUILD_CC) 249219089Spjd AC_SUBST(BUILD_CXX) 250219089Spjd AC_SUBST(BUILD_LD) 251219089Spjd 252219089Spjd # If a devkit is found on the builddeps server, then prepend its path to the 253286587Smav # PATH variable. If there are cross compilers available in the devkit, these 254249195Smm # will be found by AC_PROG_CC et al. 255235222Smm DEVKIT= 256219089Spjd BDEPS_CHECK_MODULE(DEVKIT, devkit, xxx, 257219089Spjd [ 258219089Spjd # Found devkit 259235222Smm PATH="$DEVKIT/bin:$PATH" 260235222Smm SYS_ROOT="$DEVKIT/${rewritten_target}/sys-root" 261219089Spjd if test "x$x_includes" = "xNONE"; then 262219089Spjd x_includes="$SYS_ROOT/usr/include/X11" 263219089Spjd fi 264235222Smm if test "x$x_libraries" = "xNONE"; then 265219089Spjd x_libraries="$SYS_ROOT/usr/lib" 266286587Smav fi 267249195Smm ], 268219089Spjd []) 269235222Smm 270219089Spjd # Store the CFLAGS etal passed to the configure script. 271168404Spjd ORG_CFLAGS="$CFLAGS" 272168404Spjd ORG_CXXFLAGS="$CXXFLAGS" 273168404Spjd ORG_OBJCFLAGS="$OBJCFLAGS" 274168404Spjd 275168404Spjd # autoconf magic only relies on PATH, so update it if tools dir is specified 276268075Sdelphij OLD_PATH="$PATH" 277321535Smav if test "x$TOOLS_DIR" != x; then 278321535Smav PATH=$TOOLS_DIR:$PATH 279168404Spjd fi 280321535Smav 281235222Smm 282219089Spjd ### Locate C compiler (CC) 283253821Sdelphij 284253821Sdelphij # On windows, only cl.exe is supported. 285253821Sdelphij # On Solaris, cc is preferred to gcc. 286253821Sdelphij # Elsewhere, gcc is preferred to cc. 287253821Sdelphij 288253821Sdelphij if test "x$OPENJDK_TARGET_OS" = "xwindows"; then 289253821Sdelphij COMPILER_CHECK_LIST="cl" 290253821Sdelphij elif test "x$OPENJDK_TARGET_OS" = "xsolaris"; then 291321535Smav COMPILER_CHECK_LIST="cc gcc" 292219089Spjd elif test "x$OPENJDK_TARGET_OS" = "xaix"; then 293219089Spjd # Do not probe for cc on AIX. 294219089Spjd COMPILER_CHECK_LIST="xlc_r" 295219089Spjd else 296219089Spjd COMPILER_CHECK_LIST="gcc cc" 297219089Spjd fi 298219089Spjd 299235222Smm TOOLCHAIN_FIND_COMPILER([CC],[C],[$COMPILER_CHECK_LIST]) 300286587Smav # Now that we have resolved CC ourself, let autoconf have its go at it 301249195Smm AC_PROG_CC([$CC]) 302235222Smm 303219089Spjd # Option used to tell the compiler whether to create 32- or 64-bit executables 304286587Smav # Notice that CC contains the full compiler path at this point. 305235222Smm case $CC in 306235222Smm *xlc_r) COMPILER_TARGET_BITS_FLAG="-q";; 307219089Spjd *) COMPILER_TARGET_BITS_FLAG="-m";; 308219089Spjd esac 309219089Spjd AC_SUBST(COMPILER_TARGET_BITS_FLAG) 310235222Smm 311321535Smav ### Locate C++ compiler (CXX) 312321535Smav 313321535Smav if test "x$OPENJDK_TARGET_OS" = "xwindows"; then 314321535Smav COMPILER_CHECK_LIST="cl" 315321535Smav elif test "x$OPENJDK_TARGET_OS" = "xsolaris"; then 316321535Smav COMPILER_CHECK_LIST="CC g++" 317321535Smav elif test "x$OPENJDK_TARGET_OS" = "xaix"; then 318321535Smav # Do not probe for CC on AIX . 319321535Smav COMPILER_CHECK_LIST="xlC_r" 320321535Smav else 321321535Smav COMPILER_CHECK_LIST="g++ CC" 322321535Smav fi 323321535Smav 324321535Smav TOOLCHAIN_FIND_COMPILER([CXX],[C++],[$COMPILER_CHECK_LIST]) 325321535Smav # Now that we have resolved CXX ourself, let autoconf have its go at it 326321535Smav AC_PROG_CXX([$CXX]) 327321535Smav 328321535Smav ### Locate other tools 329321535Smav 330274337Sdelphij if test "x$OPENJDK_TARGET_OS" = xmacosx; then 331268075Sdelphij AC_PROG_OBJC 332274337Sdelphij BASIC_FIXUP_EXECUTABLE(OBJC) 333274337Sdelphij else 334274337Sdelphij OBJC= 335274337Sdelphij fi 336268075Sdelphij 337268075Sdelphij # Restore the flags to the user specified values. 338268075Sdelphij # This is necessary since AC_PROG_CC defaults CFLAGS to "-g -O2" 339268075Sdelphij CFLAGS="$ORG_CFLAGS" 340289422Smav CXXFLAGS="$ORG_CXXFLAGS" 341289422Smav OBJCFLAGS="$ORG_OBJCFLAGS" 342268075Sdelphij 343268075Sdelphij LD="$CC" 344268075Sdelphij LDEXE="$CC" 345268075Sdelphij LDCXX="$CXX" 346268075Sdelphij LDEXECXX="$CXX" 347268075Sdelphij AC_SUBST(LD) 348168404Spjd # LDEXE is the linker to use, when creating executables. 349321535Smav AC_SUBST(LDEXE) 350249195Smm # Linking C++ libraries. 351219089Spjd AC_SUBST(LDCXX) 352219089Spjd # Linking C++ executables. 353219089Spjd AC_SUBST(LDEXECXX) 354219089Spjd 355268075Sdelphij if test "x$OPENJDK_TARGET_OS" != xwindows; then 356268075Sdelphij AC_CHECK_TOOL(AR, ar) 357268075Sdelphij BASIC_FIXUP_EXECUTABLE(AR) 358268075Sdelphij fi 359268075Sdelphij if test "x$OPENJDK_TARGET_OS" = xmacosx; then 360268075Sdelphij ARFLAGS="-r" 361268075Sdelphij elif test "x$OPENJDK_TARGET_OS" = xaix; then 362268075Sdelphij ARFLAGS="-X64" 363286587Smav else 364268075Sdelphij ARFLAGS="" 365268075Sdelphij fi 366268075Sdelphij AC_SUBST(ARFLAGS) 367268075Sdelphij 368268075Sdelphij # For hotspot, we need these in Windows mixed path; other platforms keep them the same 369268075Sdelphij HOTSPOT_CXX="$CXX" 370268075Sdelphij HOTSPOT_LD="$LD" 371268075Sdelphij AC_SUBST(HOTSPOT_CXX) 372268075Sdelphij AC_SUBST(HOTSPOT_LD) 373268075Sdelphij 374268075Sdelphij COMPILER_NAME=gcc 375268075Sdelphij COMPILER_TYPE=CC 376268075Sdelphij AS_IF([test "x$OPENJDK_TARGET_OS" = xwindows], [ 377268075Sdelphij # For now, assume that we are always compiling using cl.exe. 378268075Sdelphij CC_OUT_OPTION=-Fo 379268075Sdelphij EXE_OUT_OPTION=-out: 380268075Sdelphij LD_OUT_OPTION=-out: 381268075Sdelphij AR_OUT_OPTION=-out: 382268075Sdelphij # On Windows, reject /usr/bin/link (as determined in CYGWIN_LINK), which is a cygwin 383286587Smav # program for something completely different. 384268075Sdelphij AC_CHECK_PROG([WINLD], [link],[link],,, [$CYGWIN_LINK]) 385268075Sdelphij # Since we must ignore the first found link, WINLD will contain 386268075Sdelphij # the full path to the link.exe program. 387268075Sdelphij BASIC_FIXUP_EXECUTABLE(WINLD) 388268075Sdelphij printf "Windows linker was found at $WINLD\n" 389235222Smm AC_MSG_CHECKING([if the found link.exe is actually the Visual Studio linker]) 390219089Spjd "$WINLD" --version > /dev/null 391235222Smm if test $? -eq 0 ; then 392219089Spjd AC_MSG_RESULT([no]) 393235222Smm AC_MSG_ERROR([This is the Cygwin link tool. Please check your PATH and rerun configure.]) 394286587Smav else 395249195Smm AC_MSG_RESULT([yes]) 396235222Smm fi 397219089Spjd LD="$WINLD" 398219089Spjd LDEXE="$WINLD" 399219089Spjd LDCXX="$WINLD" 400235222Smm LDEXECXX="$WINLD" 401235222Smm 402219089Spjd AC_CHECK_PROG([MT], [mt], [mt],,, [/usr/bin/mt]) 403219089Spjd BASIC_FIXUP_EXECUTABLE(MT) 404235222Smm # The resource compiler 405219089Spjd AC_CHECK_PROG([RC], [rc], [rc],,, [/usr/bin/rc]) 406286587Smav BASIC_FIXUP_EXECUTABLE(RC) 407249195Smm 408168404Spjd # For hotspot, we need these in Windows mixed path, 409168404Spjd # so rewrite them all. Need added .exe suffix. 410168404Spjd HOTSPOT_CXX="$CXX.exe" 411168404Spjd HOTSPOT_LD="$LD.exe" 412235222Smm HOTSPOT_MT="$MT.exe" 413168404Spjd HOTSPOT_RC="$RC.exe" 414235222Smm BASIC_WINDOWS_REWRITE_AS_WINDOWS_MIXED_PATH(HOTSPOT_CXX) 415219089Spjd BASIC_WINDOWS_REWRITE_AS_WINDOWS_MIXED_PATH(HOTSPOT_LD) 416219089Spjd BASIC_WINDOWS_REWRITE_AS_WINDOWS_MIXED_PATH(HOTSPOT_MT) 417219089Spjd BASIC_WINDOWS_REWRITE_AS_WINDOWS_MIXED_PATH(HOTSPOT_RC) 418219089Spjd AC_SUBST(HOTSPOT_MT) 419219089Spjd AC_SUBST(HOTSPOT_RC) 420219089Spjd 421219089Spjd RC_FLAGS="-nologo -l 0x409 -r" 422219089Spjd AS_IF([test "x$VARIANT" = xOPT], [ 423235222Smm RC_FLAGS="$RC_FLAGS -d NDEBUG" 424235222Smm ]) 425286587Smav 426249195Smm # The version variables used to create RC_FLAGS may be overridden 427235222Smm # in a custom configure script, or possibly the command line. 428219089Spjd # Let those variables be expanded at make time in spec.gmk. 429235222Smm # The \$ are escaped to the shell, and the $(...) variables 430219089Spjd # are evaluated by make. 431219089Spjd RC_FLAGS="$RC_FLAGS \ 432219089Spjd -d \"JDK_BUILD_ID=\$(FULL_VERSION)\" \ 433219089Spjd -d \"JDK_COMPANY=\$(COMPANY_NAME)\" \ 434219089Spjd -d \"JDK_COMPONENT=\$(PRODUCT_NAME) \$(JDK_RC_PLATFORM_NAME) binary\" \ 435219089Spjd -d \"JDK_VER=\$(JDK_MINOR_VERSION).\$(JDK_MICRO_VERSION).\$(if \$(JDK_UPDATE_VERSION),\$(JDK_UPDATE_VERSION),0).\$(COOKED_BUILD_NUMBER)\" \ 436219089Spjd -d \"JDK_COPYRIGHT=Copyright \xA9 $COPYRIGHT_YEAR\" \ 437219089Spjd -d \"JDK_NAME=\$(PRODUCT_NAME) \$(JDK_RC_PLATFORM_NAME) \$(JDK_MINOR_VERSION) \$(JDK_UPDATE_META_TAG)\" \ 438219089Spjd -d \"JDK_FVER=\$(JDK_MINOR_VERSION),\$(JDK_MICRO_VERSION),\$(if \$(JDK_UPDATE_VERSION),\$(JDK_UPDATE_VERSION),0),\$(COOKED_BUILD_NUMBER)\"" 439286587Smav 440249195Smm # lib.exe is used to create static libraries. 441235222Smm AC_CHECK_PROG([WINAR], [lib],[lib],,,) 442219089Spjd BASIC_FIXUP_EXECUTABLE(WINAR) 443219089Spjd AR="$WINAR" 444219089Spjd ARFLAGS="-nologo -NODEFAULTLIB:MSVCRT" 445168404Spjd 446235222Smm AC_CHECK_PROG([DUMPBIN], [dumpbin], [dumpbin],,,) 447235222Smm BASIC_FIXUP_EXECUTABLE(DUMPBIN) 448219089Spjd 449219089Spjd COMPILER_TYPE=CL 450235222Smm CCXXFLAGS="$CCXXFLAGS -nologo" 451168404Spjd ]) 452235222Smm AC_SUBST(RC_FLAGS) 453219089Spjd AC_SUBST(COMPILER_TYPE) 454168404Spjd 455168404Spjd AC_PROG_CPP 456168404Spjd BASIC_FIXUP_EXECUTABLE(CPP) 457168404Spjd 458235222Smm AC_PROG_CXXCPP 459168404Spjd BASIC_FIXUP_EXECUTABLE(CXXCPP) 460235222Smm 461219089Spjd if test "x$COMPILE_TYPE" != "xcross"; then 462289362Smav # If we are not cross compiling, use the same compilers for 463289362Smav # building the build platform executables. The cross-compilation 464289362Smav # case needed to be done earlier, but this can only be done after 465289362Smav # the native tools have been localized. 466289362Smav BUILD_CC="$CC" 467289362Smav BUILD_CXX="$CXX" 468289362Smav BUILD_LD="$LD" 469289362Smav fi 470289362Smav 471289362Smav # for solaris we really need solaris tools, and not gnu equivalent 472289362Smav # these seems to normally reside in /usr/ccs/bin so add that to path before 473289362Smav # starting to probe 474289362Smav # 475168404Spjd # NOTE: I add this /usr/ccs/bin after TOOLS but before OLD_PATH 476235222Smm # so that it can be overriden --with-tools-dir 477168404Spjd if test "x$OPENJDK_BUILD_OS" = xsolaris; then 478235222Smm PATH="${TOOLS_DIR}:/usr/ccs/bin:${OLD_PATH}" 479286587Smav fi 480249195Smm 481235222Smm # Find the right assembler. 482219089Spjd if test "x$OPENJDK_TARGET_OS" = xsolaris; then 483219089Spjd AC_PATH_PROG(AS, as) 484168404Spjd BASIC_FIXUP_EXECUTABLE(AS) 485235222Smm else 486235222Smm AS="$CC -c" 487219089Spjd fi 488219089Spjd AC_SUBST(AS) 489219089Spjd 490219089Spjd if test "x$OPENJDK_TARGET_OS" = xsolaris; then 491219089Spjd AC_PATH_PROG(NM, nm) 492219089Spjd BASIC_FIXUP_EXECUTABLE(NM) 493219089Spjd AC_PATH_PROG(GNM, gnm) 494235222Smm BASIC_FIXUP_EXECUTABLE(GNM) 495168404Spjd AC_PATH_PROG(STRIP, strip) 496274337Sdelphij BASIC_FIXUP_EXECUTABLE(STRIP) 497274337Sdelphij AC_PATH_PROG(MCS, mcs) 498274337Sdelphij BASIC_FIXUP_EXECUTABLE(MCS) 499274337Sdelphij elif test "x$OPENJDK_TARGET_OS" != xwindows; then 500286587Smav AC_CHECK_TOOL(NM, nm) 501286587Smav BASIC_FIXUP_EXECUTABLE(NM) 502249195Smm GNM="$NM" 503286587Smav AC_SUBST(GNM) 504168404Spjd AC_CHECK_TOOL(STRIP, strip) 505253821Sdelphij BASIC_FIXUP_EXECUTABLE(STRIP) 506235222Smm fi 507253821Sdelphij 508249195Smm # objcopy is used for moving debug symbols to separate files when 509248571Smm # full debug symbols are enabled. 510249195Smm if test "x$OPENJDK_TARGET_OS" = xsolaris || test "x$OPENJDK_TARGET_OS" = xlinux; then 511168404Spjd AC_CHECK_TOOLS(OBJCOPY, [gobjcopy objcopy]) 512168404Spjd # Only call fixup if objcopy was found. 513168404Spjd if test -n "$OBJCOPY"; then 514268075Sdelphij BASIC_FIXUP_EXECUTABLE(OBJCOPY) 515268075Sdelphij fi 516268075Sdelphij fi 517268075Sdelphij 518268075Sdelphij AC_CHECK_TOOLS(OBJDUMP, [gobjdump objdump]) 519268075Sdelphij if test "x$OBJDUMP" != x; then 520268075Sdelphij # Only used for compare.sh; we can live without it. BASIC_FIXUP_EXECUTABLE bails if argument is missing. 521268075Sdelphij BASIC_FIXUP_EXECUTABLE(OBJDUMP) 522268075Sdelphij fi 523268075Sdelphij 524321535Smav if test "x$OPENJDK_TARGET_OS" = "xmacosx"; then 525268075Sdelphij AC_PATH_PROG(LIPO, lipo) 526268075Sdelphij BASIC_FIXUP_EXECUTABLE(LIPO) 527268075Sdelphij fi 528268075Sdelphij 529268075Sdelphij TOOLCHAIN_SETUP_JTREG 530268075Sdelphij 531268075Sdelphij # Restore old path without tools dir 532268075Sdelphij PATH="$OLD_PATH" 533268075Sdelphij]) 534268075Sdelphij 535268075Sdelphij 536268075SdelphijAC_DEFUN_ONCE([TOOLCHAIN_SETUP_COMPILER_FLAGS_FOR_LIBS], 537268075Sdelphij[ 538268075Sdelphij 539268075Sdelphij ############################################################################### 540268075Sdelphij # 541286705Smav # How to compile shared libraries. 542286705Smav # 543286705Smav 544286705Smav if test "x$GCC" = xyes; then 545286705Smav COMPILER_NAME=gcc 546286705Smav PICFLAG="-fPIC" 547286705Smav LIBRARY_PREFIX=lib 548286705Smav SHARED_LIBRARY='lib[$]1.so' 549286705Smav STATIC_LIBRARY='lib[$]1.a' 550286705Smav SHARED_LIBRARY_FLAGS="-shared" 551286705Smav SHARED_LIBRARY_SUFFIX='.so' 552286705Smav STATIC_LIBRARY_SUFFIX='.a' 553286705Smav OBJ_SUFFIX='.o' 554168404Spjd EXE_SUFFIX='' 555289362Smav SET_SHARED_LIBRARY_NAME='-Xlinker -soname=[$]1' 556289362Smav SET_SHARED_LIBRARY_MAPFILE='-Xlinker -version-script=[$]1' 557289362Smav C_FLAG_REORDER='' 558286705Smav CXX_FLAG_REORDER='' 559286705Smav SET_SHARED_LIBRARY_ORIGIN='-Xlinker -z -Xlinker origin -Xlinker -rpath -Xlinker \$$$$ORIGIN[$]1' 560286705Smav SET_EXECUTABLE_ORIGIN='-Xlinker -rpath -Xlinker \$$$$ORIGIN[$]1' 561286705Smav LD="$CC" 562286705Smav LDEXE="$CC" 563286705Smav LDCXX="$CXX" 564286705Smav LDEXECXX="$CXX" 565286705Smav POST_STRIP_CMD="$STRIP -g" 566286705Smav 567286705Smav # Linking is different on MacOSX 568286705Smav if test "x$OPENJDK_TARGET_OS" = xmacosx; then 569286705Smav # Might change in the future to clang. 570286705Smav COMPILER_NAME=gcc 571286705Smav SHARED_LIBRARY='lib[$]1.dylib' 572286705Smav SHARED_LIBRARY_FLAGS="-dynamiclib -compatibility_version 1.0.0 -current_version 1.0.0 $PICFLAG" 573286705Smav SHARED_LIBRARY_SUFFIX='.dylib' 574286705Smav EXE_SUFFIX='' 575286705Smav SET_SHARED_LIBRARY_NAME='-Xlinker -install_name -Xlinker @rpath/[$]1' 576286705Smav SET_SHARED_LIBRARY_MAPFILE='' 577286705Smav SET_SHARED_LIBRARY_ORIGIN='-Xlinker -rpath -Xlinker @loader_path/.' 578286705Smav SET_EXECUTABLE_ORIGIN="$SET_SHARED_LIBRARY_ORIGIN" 579286705Smav POST_STRIP_CMD="$STRIP -S" 580286705Smav fi 581286705Smav else 582286705Smav if test "x$OPENJDK_TARGET_OS" = xsolaris; then 583286705Smav # If it is not gcc, then assume it is the Oracle Solaris Studio Compiler 584286705Smav COMPILER_NAME=ossc 585286705Smav PICFLAG="-KPIC" 586286705Smav LIBRARY_PREFIX=lib 587286705Smav SHARED_LIBRARY='lib[$]1.so' 588286705Smav STATIC_LIBRARY='lib[$]1.a' 589286705Smav SHARED_LIBRARY_FLAGS="-G" 590286705Smav SHARED_LIBRARY_SUFFIX='.so' 591286705Smav STATIC_LIBRARY_SUFFIX='.a' 592286705Smav OBJ_SUFFIX='.o' 593286705Smav EXE_SUFFIX='' 594289362Smav SET_SHARED_LIBRARY_NAME='' 595289362Smav SET_SHARED_LIBRARY_MAPFILE='-M[$]1' 596289362Smav C_FLAG_REORDER='-xF' 597289362Smav CXX_FLAG_REORDER='-xF' 598286705Smav SET_SHARED_LIBRARY_ORIGIN='-R\$$$$ORIGIN[$]1' 599286705Smav SET_EXECUTABLE_ORIGIN="$SET_SHARED_LIBRARY_ORIGIN" 600286705Smav CFLAGS_JDK="${CFLAGS_JDK} -D__solaris__" 601286705Smav CXXFLAGS_JDK="${CXXFLAGS_JDK} -D__solaris__" 602286705Smav CFLAGS_JDKLIB_EXTRA='-xstrconst' 603286705Smav POST_STRIP_CMD="$STRIP -x" 604286705Smav POST_MCS_CMD="$MCS -d -a \"JDK $FULL_VERSION\"" 605286705Smav fi 606286705Smav if test "x$OPENJDK_TARGET_OS" = xaix; then 607286705Smav COMPILER_NAME=xlc 608286705Smav PICFLAG="-qpic=large" 609286705Smav LIBRARY_PREFIX=lib 610286705Smav SHARED_LIBRARY='lib[$]1.so' 611286705Smav STATIC_LIBRARY='lib[$]1.a' 612168404Spjd SHARED_LIBRARY_FLAGS="-qmkshrobj" 613286705Smav SHARED_LIBRARY_SUFFIX='.so' 614168404Spjd STATIC_LIBRARY_SUFFIX='.a' 615286705Smav OBJ_SUFFIX='.o' 616286705Smav EXE_SUFFIX='' 617286705Smav SET_SHARED_LIBRARY_NAME='' 618286705Smav SET_SHARED_LIBRARY_MAPFILE='' 619286705Smav C_FLAG_REORDER='' 620286705Smav CXX_FLAG_REORDER='' 621168404Spjd SET_SHARED_LIBRARY_ORIGIN='' 622168404Spjd SET_EXECUTABLE_ORIGIN="" 623168404Spjd CFLAGS_JDK="" 624286705Smav CXXFLAGS_JDK="" 625168404Spjd CFLAGS_JDKLIB_EXTRA='' 626289362Smav POST_STRIP_CMD="$STRIP -X32_64" 627289362Smav POST_MCS_CMD="" 628289362Smav fi 629219089Spjd if test "x$OPENJDK_TARGET_OS" = xwindows; then 630219089Spjd # If it is not gcc, then assume it is the MS Visual Studio compiler 631209962Smm COMPILER_NAME=cl 632260150Sdelphij PICFLAG="" 633260150Sdelphij LIBRARY_PREFIX= 634286705Smav SHARED_LIBRARY='[$]1.dll' 635208047Smm STATIC_LIBRARY='[$]1.lib' 636286705Smav SHARED_LIBRARY_FLAGS="-LD" 637260150Sdelphij SHARED_LIBRARY_SUFFIX='.dll' 638286705Smav STATIC_LIBRARY_SUFFIX='.lib' 639286705Smav OBJ_SUFFIX='.obj' 640286705Smav EXE_SUFFIX='.exe' 641208047Smm SET_SHARED_LIBRARY_NAME='' 642208047Smm SET_SHARED_LIBRARY_MAPFILE='' 643208047Smm SET_SHARED_LIBRARY_ORIGIN='' 644168404Spjd SET_EXECUTABLE_ORIGIN='' 645275811Sdelphij fi 646208047Smm fi 647168404Spjd 648286705Smav AC_SUBST(COMPILER_NAME) 649286705Smav AC_SUBST(OBJ_SUFFIX) 650246666Smm AC_SUBST(SHARED_LIBRARY) 651246666Smm AC_SUBST(STATIC_LIBRARY) 652246666Smm AC_SUBST(LIBRARY_PREFIX) 653249195Smm AC_SUBST(SHARED_LIBRARY_SUFFIX) 654208047Smm AC_SUBST(STATIC_LIBRARY_SUFFIX) 655286705Smav AC_SUBST(EXE_SUFFIX) 656286705Smav AC_SUBST(SHARED_LIBRARY_FLAGS) 657286705Smav AC_SUBST(SET_SHARED_LIBRARY_NAME) 658286705Smav AC_SUBST(SET_SHARED_LIBRARY_MAPFILE) 659248571Smm AC_SUBST(C_FLAG_REORDER) 660168404Spjd AC_SUBST(CXX_FLAG_REORDER) 661168404Spjd AC_SUBST(SET_SHARED_LIBRARY_ORIGIN) 662307265Smav AC_SUBST(SET_EXECUTABLE_ORIGIN) 663219089Spjd AC_SUBST(POST_STRIP_CMD) 664275811Sdelphij AC_SUBST(POST_MCS_CMD) 665208047Smm 666168404Spjd # The (cross) compiler is now configured, we can now test capabilities 667168404Spjd # of the target platform. 668246666Smm]) 669246666Smm 670246666SmmAC_DEFUN_ONCE([TOOLCHAIN_SETUP_COMPILER_FLAGS_FOR_OPTIMIZATION], 671249195Smm[ 672168404Spjd 673286705Smav ############################################################################### 674307265Smav # 675286705Smav # Setup the opt flags for different compilers 676268075Sdelphij # and different operating systems. 677286705Smav # 678286705Smav 679286705Smav # 680268075Sdelphij # NOTE: check for -mstackrealign needs to be below potential addition of -m32 681286705Smav # 682286705Smav if test "x$OPENJDK_TARGET_CPU_BITS" = x32 && test "x$OPENJDK_TARGET_OS" = xmacosx; then 683275811Sdelphij # On 32-bit MacOSX the OS requires C-entry points to be 16 byte aligned. 684219089Spjd # While waiting for a better solution, the current workaround is to use -mstackrealign. 685286705Smav CFLAGS="$CFLAGS -mstackrealign" 686274337Sdelphij AC_MSG_CHECKING([if 32-bit compiler supports -mstackrealign]) 687219089Spjd AC_LINK_IFELSE([AC_LANG_SOURCE([[int main() { return 0; }]])], 688321535Smav [ 689321535Smav AC_MSG_RESULT([yes]) 690321535Smav ], 691321535Smav [ 692321535Smav AC_MSG_RESULT([no]) 693321535Smav AC_MSG_ERROR([The selected compiler $CXX does not support -mstackrealign! Try to put another compiler in the path.]) 694321535Smav ] 695321535Smav ) 696321535Smav fi 697321535Smav 698321535Smav C_FLAG_DEPS="-MMD -MF" 699321535Smav CXX_FLAG_DEPS="-MMD -MF" 700321535Smav 701321535Smav case $COMPILER_TYPE in 702321535Smav CC ) 703321535Smav case $COMPILER_NAME in 704321535Smav gcc ) 705321535Smav case $OPENJDK_TARGET_OS in 706321535Smav macosx ) 707321535Smav # On MacOSX we optimize for size, something 708321535Smav # we should do for all platforms? 709321535Smav C_O_FLAG_HI="-Os" 710260183Sdelphij C_O_FLAG_NORM="-Os" 711289362Smav C_O_FLAG_NONE="" 712289362Smav ;; 713289362Smav *) 714289362Smav C_O_FLAG_HI="-O3" 715321535Smav C_O_FLAG_NORM="-O2" 716321535Smav C_O_FLAG_NONE="-O0" 717321535Smav ;; 718321535Smav esac 719321535Smav CXX_O_FLAG_HI="$C_O_FLAG_HI" 720321535Smav CXX_O_FLAG_NORM="$C_O_FLAG_NORM" 721321535Smav CXX_O_FLAG_NONE="$C_O_FLAG_NONE" 722321535Smav CFLAGS_DEBUG_SYMBOLS="-g" 723321535Smav CXXFLAGS_DEBUG_SYMBOLS="-g" 724321535Smav if test "x$OPENJDK_TARGET_CPU_BITS" = "x64" && test "x$DEBUG_LEVEL" = "xfastdebug"; then 725246666Smm CFLAGS_DEBUG_SYMBOLS="-g1" 726321535Smav CXXFLAGS_DEBUG_SYMBOLS="-g1" 727228103Smm fi 728228103Smm ;; 729321535Smav ossc ) 730321535Smav # 731228103Smm # Forte has different names for this with their C++ compiler... 732228103Smm # 733228103Smm C_FLAG_DEPS="-xMMD -xMF" 734228103Smm CXX_FLAG_DEPS="-xMMD -xMF" 735286554Smav 736228103Smm # Extra options used with HIGHEST 737249195Smm # 738228103Smm # WARNING: Use of OPTIMIZATION_LEVEL=HIGHEST in your Makefile needs to be 739228103Smm # done with care, there are some assumptions below that need to 740219089Spjd # be understood about the use of pointers, and IEEE behavior. 741274337Sdelphij # 742274337Sdelphij # Use non-standard floating point mode (not IEEE 754) 743321535Smav CC_HIGHEST="$CC_HIGHEST -fns" 744321535Smav # Do some simplification of floating point arithmetic (not IEEE 754) 745321535Smav CC_HIGHEST="$CC_HIGHEST -fsimple" 746274337Sdelphij # Use single precision floating point with 'float' 747274337Sdelphij CC_HIGHEST="$CC_HIGHEST -fsingle" 748274337Sdelphij # Assume memory references via basic pointer types do not alias 749286705Smav # (Source with excessing pointer casting and data access with mixed 750321535Smav # pointer types are not recommended) 751274337Sdelphij CC_HIGHEST="$CC_HIGHEST -xalias_level=basic" 752274337Sdelphij # Use intrinsic or inline versions for math/std functions 753274337Sdelphij # (If you expect perfect errno behavior, do not use this) 754274337Sdelphij CC_HIGHEST="$CC_HIGHEST -xbuiltin=%all" 755274337Sdelphij # Loop data dependency optimizations (need -xO3 or higher) 756321535Smav CC_HIGHEST="$CC_HIGHEST -xdepend" 757321535Smav # Pointer parameters to functions do not overlap 758274337Sdelphij # (Similar to -xalias_level=basic usage, but less obvious sometimes. 759307265Smav # If you pass in multiple pointers to the same data, do not use this) 760168404Spjd CC_HIGHEST="$CC_HIGHEST -xrestrict" 761168404Spjd # Inline some library routines 762168404Spjd # (If you expect perfect errno behavior, do not use this) 763168404Spjd CC_HIGHEST="$CC_HIGHEST -xlibmil" 764168404Spjd # Use optimized math routines 765168404Spjd # (If you expect perfect errno behavior, do not use this) 766248571Smm # Can cause undefined external on Solaris 8 X86 on __sincos, removing for now 767286705Smav #CC_HIGHEST="$CC_HIGHEST -xlibmopt" 768248571Smm 769286705Smav if test "x$OPENJDK_TARGET_CPU" = xsparc; then 770286705Smav CFLAGS_JDK="${CFLAGS_JDK} -xmemalign=4s" 771286705Smav CXXFLAGS_JDK="${CXXFLAGS_JDK} -xmemalign=4s" 772286705Smav fi 773286705Smav 774286705Smav case $OPENJDK_TARGET_CPU_ARCH in 775286705Smav x86) 776286705Smav C_O_FLAG_HIGHEST="-xO4 -Wu,-O4~yz $CC_HIGHEST -xregs=no%frameptr" 777286705Smav C_O_FLAG_HI="-xO4 -Wu,-O4~yz -xregs=no%frameptr" 778286705Smav C_O_FLAG_NORM="-xO2 -Wu,-O2~yz -xregs=no%frameptr" 779286705Smav C_O_FLAG_NONE="-xregs=no%frameptr" 780286705Smav CXX_O_FLAG_HIGHEST="-xO4 -Qoption ube -O4~yz $CC_HIGHEST -xregs=no%frameptr" 781286705Smav CXX_O_FLAG_HI="-xO4 -Qoption ube -O4~yz -xregs=no%frameptr" 782248571Smm CXX_O_FLAG_NORM="-xO2 -Qoption ube -O2~yz -xregs=no%frameptr" 783286705Smav CXX_O_FLAG_NONE="-xregs=no%frameptr" 784321535Smav if test "x$OPENJDK_TARGET_CPU" = xx86; then 785321535Smav C_O_FLAG_HIGHEST="$C_O_FLAG_HIGHEST -xchip=pentium" 786321535Smav CXX_O_FLAG_HIGHEST="$CXX_O_FLAG_HIGHEST -xchip=pentium" 787248571Smm fi 788289362Smav ;; 789248571Smm sparc) 790289362Smav CFLAGS_JDKLIB_EXTRA="${CFLAGS_JDKLIB_EXTRA} -xregs=no%appl" 791248571Smm CXXFLAGS_JDKLIB_EXTRA="${CXXFLAGS_JDKLIB_EXTRA} -xregs=no%appl" 792168404Spjd C_O_FLAG_HIGHEST="-xO4 -Wc,-Qrm-s -Wc,-Qiselect-T0 $CC_HIGHEST -xprefetch=auto,explicit -xchip=ultra" 793248571Smm C_O_FLAG_HI="-xO4 -Wc,-Qrm-s -Wc,-Qiselect-T0" 794168404Spjd C_O_FLAG_NORM="-xO2 -Wc,-Qrm-s -Wc,-Qiselect-T0" 795235222Smm C_O_FLAG_NONE="" 796168404Spjd CXX_O_FLAG_HIGHEST="-xO4 -Qoption cg -Qrm-s -Qoption cg -Qiselect-T0 $CC_HIGHEST -xprefetch=auto,explicit -xchip=ultra" 797185029Spjd CXX_O_FLAG_HI="-xO4 -Qoption cg -Qrm-s -Qoption cg -Qiselect-T0" 798268075Sdelphij CXX_O_FLAG_NORM="-xO2 -Qoption cg -Qrm-s -Qoption cg -Qiselect-T0" 799289362Smav CXX_O_FLAG_NONE="" 800168404Spjd ;; 801286705Smav esac 802248571Smm 803248571Smm CFLAGS_DEBUG_SYMBOLS="-g -xs" 804248571Smm CXXFLAGS_DEBUG_SYMBOLS="-g0 -xs" 805185029Spjd ;; 806185029Spjd xlc ) 807168404Spjd C_FLAG_DEPS="-qmakedep=gcc -MF" 808168404Spjd CXX_FLAG_DEPS="-qmakedep=gcc -MF" 809168404Spjd C_O_FLAG_HIGHEST="-O3" 810219089Spjd C_O_FLAG_HI="-O3 -qstrict" 811219089Spjd C_O_FLAG_NORM="-O2" 812219089Spjd C_O_FLAG_NONE="" 813219089Spjd CXX_O_FLAG_HIGHEST="-O3" 814248571Smm CXX_O_FLAG_HI="-O3 -qstrict" 815219089Spjd CXX_O_FLAG_NORM="-O2" 816248571Smm CXX_O_FLAG_NONE="" 817235222Smm CFLAGS_DEBUG_SYMBOLS="-g" 818248571Smm CXXFLAGS_DEBUG_SYMBOLS="-g" 819249195Smm LDFLAGS_JDK="${LDFLAGS_JDK} -q64 -brtl -bnolibpath -liconv -bexpall" 820235222Smm CFLAGS_JDK="${CFLAGS_JDK} -qchars=signed -q64 -qfullpath -qsaveopt" 821248571Smm CXXFLAGS_JDK="${CXXFLAGS_JDK} -qchars=signed -q64 -qfullpath -qsaveopt" 822268075Sdelphij ;; 823219089Spjd esac 824219089Spjd ;; 825219089Spjd CL ) 826219089Spjd C_O_FLAG_HIGHEST="-O2" 827286708Smav C_O_FLAG_HI="-O1" 828274337Sdelphij C_O_FLAG_NORM="-O1" 829268075Sdelphij C_O_FLAG_NONE="-Od" 830268075Sdelphij CXX_O_FLAG_HIGHEST="$C_O_FLAG_HIGHEST" 831268075Sdelphij CXX_O_FLAG_HI="$C_O_FLAG_HI" 832268075Sdelphij CXX_O_FLAG_NORM="$C_O_FLAG_NORM" 833321535Smav CXX_O_FLAG_NONE="$C_O_FLAG_NONE" 834268075Sdelphij ;; 835321535Smav esac 836321535Smav 837321535Smav if test -z "$C_O_FLAG_HIGHEST"; then 838321535Smav C_O_FLAG_HIGHEST="$C_O_FLAG_HI" 839321535Smav fi 840321535Smav 841321535Smav if test -z "$CXX_O_FLAG_HIGHEST"; then 842321535Smav CXX_O_FLAG_HIGHEST="$CXX_O_FLAG_HI" 843268075Sdelphij fi 844289362Smav 845289362Smav AC_SUBST(C_O_FLAG_HIGHEST) 846289362Smav AC_SUBST(C_O_FLAG_HI) 847289362Smav AC_SUBST(C_O_FLAG_NORM) 848268075Sdelphij AC_SUBST(C_O_FLAG_NONE) 849268075Sdelphij AC_SUBST(CXX_O_FLAG_HIGHEST) 850268075Sdelphij AC_SUBST(CXX_O_FLAG_HI) 851168404Spjd AC_SUBST(CXX_O_FLAG_NORM) 852286705Smav AC_SUBST(CXX_O_FLAG_NONE) 853248571Smm AC_SUBST(C_FLAG_DEPS) 854260183Sdelphij AC_SUBST(CXX_FLAG_DEPS) 855185029Spjd]) 856286705Smav 857286705SmavAC_DEFUN_ONCE([TOOLCHAIN_SETUP_COMPILER_FLAGS_FOR_JDK], 858185029Spjd[ 859296516Smav 860296516Smav if test "x$CFLAGS" != "x${ADDED_CFLAGS}"; then 861185029Spjd AC_MSG_WARN([Ignoring CFLAGS($CFLAGS) found in environment. Use --with-extra-cflags]) 862286705Smav fi 863286705Smav 864286705Smav if test "x$CXXFLAGS" != "x${ADDED_CXXFLAGS}"; then 865286705Smav AC_MSG_WARN([Ignoring CXXFLAGS($CXXFLAGS) found in environment. Use --with-extra-cxxflags]) 866260183Sdelphij fi 867286705Smav 868286705Smav if test "x$LDFLAGS" != "x${ADDED_LDFLAGS}"; then 869260183Sdelphij AC_MSG_WARN([Ignoring LDFLAGS($LDFLAGS) found in environment. Use --with-extra-ldflags]) 870260183Sdelphij fi 871248571Smm 872185029Spjd AC_ARG_WITH(extra-cflags, [AS_HELP_STRING([--with-extra-cflags], 873235222Smm [extra flags to be used when compiling jdk c-files])]) 874168404Spjd 875235222Smm AC_ARG_WITH(extra-cxxflags, [AS_HELP_STRING([--with-extra-cxxflags], 876235222Smm [extra flags to be used when compiling jdk c++-files])]) 877235222Smm 878235222Smm AC_ARG_WITH(extra-ldflags, [AS_HELP_STRING([--with-extra-ldflags], 879235222Smm [extra flags to be used when linking jdk])]) 880248571Smm 881235222Smm CFLAGS_JDK="${CFLAGS_JDK} $with_extra_cflags" 882286705Smav CXXFLAGS_JDK="${CXXFLAGS_JDK} $with_extra_cxxflags" 883235222Smm LDFLAGS_JDK="${LDFLAGS_JDK} $with_extra_ldflags" 884268075Sdelphij 885289362Smav # Hotspot needs these set in their legacy form 886289362Smav LEGACY_EXTRA_CFLAGS=$with_extra_cflags 887235222Smm LEGACY_EXTRA_CXXFLAGS=$with_extra_cxxflags 888286705Smav LEGACY_EXTRA_LDFLAGS=$with_extra_ldflags 889286705Smav 890286705Smav AC_SUBST(LEGACY_EXTRA_CFLAGS) 891235222Smm AC_SUBST(LEGACY_EXTRA_CXXFLAGS) 892286705Smav AC_SUBST(LEGACY_EXTRA_LDFLAGS) 893249042Smm 894249042Smm ############################################################################### 895289362Smav # 896289362Smav # Now setup the CFLAGS and LDFLAGS for the JDK build. 897289362Smav # Later we will also have CFLAGS and LDFLAGS for the hotspot subrepo build. 898289362Smav # 899289362Smav case $COMPILER_NAME in 900289362Smav gcc ) 901289362Smav CCXXFLAGS_JDK="$CCXXFLAGS $CCXXFLAGS_JDK -W -Wall -Wno-unused -Wno-parentheses \ 902289362Smav -pipe \ 903289362Smav -D_GNU_SOURCE -D_REENTRANT -D_LARGEFILE64_SOURCE" 904289362Smav case $OPENJDK_TARGET_CPU_ARCH in 905289362Smav arm ) 906289362Smav # on arm we don't prevent gcc to omit frame pointer but do prevent strict aliasing 907289362Smav CFLAGS_JDK="${CFLAGS_JDK} -fno-strict-aliasing" 908289362Smav ;; 909289362Smav ppc ) 910289362Smav # on ppc we don't prevent gcc to omit frame pointer nor strict-aliasing 911289362Smav ;; 912289362Smav * ) 913289362Smav CCXXFLAGS_JDK="$CCXXFLAGS_JDK -fno-omit-frame-pointer" 914289362Smav CFLAGS_JDK="${CFLAGS_JDK} -fno-strict-aliasing" 915289362Smav ;; 916235222Smm esac 917235222Smm ;; 918168404Spjd ossc ) 919168404Spjd CCXXFLAGS_JDK="$CCXXFLAGS $CCXXFLAGS_JDK -DTRACING -DMACRO_MEMSYS_OPS -DBREAKPTS" 920286705Smav case $OPENJDK_TARGET_CPU_ARCH in 921286705Smav x86 ) 922286705Smav CCXXFLAGS_JDK="$CCXXFLAGS_JDK -DcpuIntel -Di586 -D$OPENJDK_TARGET_CPU_LEGACY_LIB" 923286705Smav CFLAGS_JDK="$CFLAGS_JDK -erroff=E_BAD_PRAGMA_PACK_VALUE" 924286705Smav ;; 925286705Smav esac 926286705Smav 927287280Sdelphij CFLAGS_JDK="$CFLAGS_JDK -xc99=%none -xCC -errshort=tags -Xa -v -mt -W0,-noglobal" 928286705Smav CXXFLAGS_JDK="$CXXFLAGS_JDK -errtags=yes +w -mt -features=no%except -DCC_NOEX -norunpath -xnolib" 929168404Spjd 930286705Smav LDFLAGS_JDK="$LDFLAGS_JDK -z defs -xildoff -ztext" 931286705Smav LDFLAGS_CXX_JDK="$LDFLAGS_CXX_JDK -norunpath -xnolib" 932286705Smav ;; 933286705Smav xlc ) 934286705Smav CFLAGS_JDK="$CFLAGS_JDK -D_GNU_SOURCE -D_REENTRANT -D_LARGEFILE64_SOURCE -DSTDC" 935286705Smav CXXFLAGS_JDK="$CXXFLAGS_JDK -D_GNU_SOURCE -D_REENTRANT -D_LARGEFILE64_SOURCE -DSTDC" 936286705Smav 937286705Smav LDFLAGS_JDK="$LDFLAGS_JDK" 938286705Smav LDFLAGS_CXX_JDK="$LDFLAGS_CXX_JDK" 939286705Smav ;; 940286705Smav cl ) 941286705Smav CCXXFLAGS_JDK="$CCXXFLAGS $CCXXFLAGS_JDK -Zi -MD -Zc:wchar_t- -W3 -wd4800 \ 942286705Smav -D_STATIC_CPPLIB -D_DISABLE_DEPRECATE_STATIC_CPPLIB -DWIN32_LEAN_AND_MEAN \ 943286705Smav -D_CRT_SECURE_NO_DEPRECATE -D_CRT_NONSTDC_NO_DEPRECATE \ 944286705Smav -DWIN32 -DIAL" 945286705Smav case $OPENJDK_TARGET_CPU in 946286705Smav x86 ) 947286705Smav CCXXFLAGS_JDK="$CCXXFLAGS_JDK -D_X86_ -Dx86" 948286705Smav ;; 949286705Smav x86_64 ) 950286705Smav CCXXFLAGS_JDK="$CCXXFLAGS_JDK -D_AMD64_ -Damd64" 951286705Smav ;; 952286705Smav esac 953286705Smav ;; 954286705Smav esac 955286705Smav 956235222Smm ############################################################################### 957286587Smav 958249195Smm # Adjust flags according to debug level. 959219089Spjd case $DEBUG_LEVEL in 960248571Smm fastdebug ) 961248571Smm CFLAGS_JDK="$CFLAGS_JDK $CFLAGS_DEBUG_SYMBOLS" 962235222Smm CXXFLAGS_JDK="$CXXFLAGS_JDK $CXXFLAGS_DEBUG_SYMBOLS" 963235222Smm C_O_FLAG_HI="$C_O_FLAG_NORM" 964168404Spjd C_O_FLAG_NORM="$C_O_FLAG_NORM" 965168404Spjd CXX_O_FLAG_HI="$CXX_O_FLAG_NORM" 966168404Spjd CXX_O_FLAG_NORM="$CXX_O_FLAG_NORM" 967168404Spjd JAVAC_FLAGS="$JAVAC_FLAGS -g" 968235222Smm ;; 969235222Smm slowdebug ) 970168404Spjd CFLAGS_JDK="$CFLAGS_JDK $CFLAGS_DEBUG_SYMBOLS" 971286705Smav CXXFLAGS_JDK="$CXXFLAGS_JDK $CXXFLAGS_DEBUG_SYMBOLS" 972235222Smm C_O_FLAG_HI="$C_O_FLAG_NONE" 973168404Spjd C_O_FLAG_NORM="$C_O_FLAG_NONE" 974235222Smm CXX_O_FLAG_HI="$CXX_O_FLAG_NONE" 975286705Smav CXX_O_FLAG_NORM="$CXX_O_FLAG_NONE" 976286705Smav JAVAC_FLAGS="$JAVAC_FLAGS -g" 977286705Smav ;; 978235222Smm esac 979307284Smav 980307284Smav CCXXFLAGS_JDK="$CCXXFLAGS_JDK $ADD_LP64" 981168404Spjd 982235222Smm # The package path is used only on macosx? 983168404Spjd PACKAGE_PATH=/opt/local 984286705Smav AC_SUBST(PACKAGE_PATH) 985248571Smm 986235222Smm if test "x$OPENJDK_TARGET_CPU_ENDIAN" = xlittle; then 987168404Spjd # The macro _LITTLE_ENDIAN needs to be defined the same to avoid the 988168404Spjd # Sun C compiler warning message: warning: macro redefined: _LITTLE_ENDIAN 989228103Smm # (The Solaris X86 system defines this in file /usr/include/sys/isa_defs.h). 990248571Smm # Note: -Dmacro is the same as #define macro 1 991321535Smav # -Dmacro= is the same as #define macro 992248571Smm if test "x$OPENJDK_TARGET_OS" = xsolaris; then 993274337Sdelphij CCXXFLAGS_JDK="$CCXXFLAGS_JDK -D_LITTLE_ENDIAN=" 994248571Smm else 995274337Sdelphij CCXXFLAGS_JDK="$CCXXFLAGS_JDK -D_LITTLE_ENDIAN" 996248571Smm fi 997228103Smm else 998248571Smm CCXXFLAGS_JDK="$CCXXFLAGS_JDK -D_BIG_ENDIAN" 999248571Smm fi 1000248571Smm if test "x$OPENJDK_TARGET_OS" = xlinux; then 1001248571Smm CCXXFLAGS_JDK="$CCXXFLAGS_JDK -DLINUX" 1002248571Smm fi 1003248571Smm if test "x$OPENJDK_TARGET_OS" = xwindows; then 1004248571Smm CCXXFLAGS_JDK="$CCXXFLAGS_JDK -DWINDOWS" 1005248571Smm fi 1006248571Smm if test "x$OPENJDK_TARGET_OS" = xsolaris; then 1007248571Smm CCXXFLAGS_JDK="$CCXXFLAGS_JDK -DSOLARIS" 1008248571Smm fi 1009248571Smm if test "x$OPENJDK_TARGET_OS" = xaix; then 1010248571Smm CCXXFLAGS_JDK="$CCXXFLAGS_JDK -DAIX -DPPC64" 1011248571Smm fi 1012248571Smm if test "x$OPENJDK_TARGET_OS" = xmacosx; then 1013248571Smm CCXXFLAGS_JDK="$CCXXFLAGS_JDK -DMACOSX -D_ALLBSD_SOURCE -D_DARWIN_UNLIMITED_SELECT" 1014260183Sdelphij # Setting these parameters makes it an error to link to macosx APIs that are 1015260183Sdelphij # newer than the given OS version and makes the linked binaries compatible even 1016260183Sdelphij # if built on a newer version of the OS. 1017248571Smm # The expected format is X.Y.Z 1018248571Smm MACOSX_VERSION_MIN=10.7.0 1019248571Smm AC_SUBST(MACOSX_VERSION_MIN) 1020248571Smm # The macro takes the version with no dots, ex: 1070 1021248571Smm # Let the flags variables get resolved in make for easier override on make 1022248571Smm # command line. 1023260183Sdelphij CCXXFLAGS_JDK="$CCXXFLAGS_JDK -DMAC_OS_X_VERSION_MAX_ALLOWED=\$(subst .,,\$(MACOSX_VERSION_MIN)) -mmacosx-version-min=\$(MACOSX_VERSION_MIN)" 1024260183Sdelphij LDFLAGS_JDK="$LDFLAGS_JDK -mmacosx-version-min=\$(MACOSX_VERSION_MIN)" 1025275782Sdelphij fi 1026275782Sdelphij if test "x$OPENJDK_TARGET_OS" = xbsd; then 1027275782Sdelphij CCXXFLAGS_JDK="$CCXXFLAGS_JDK -DBSD -D_ALLBSD_SOURCE" 1028275782Sdelphij fi 1029260183Sdelphij if test "x$DEBUG_LEVEL" = xrelease; then 1030260183Sdelphij CCXXFLAGS_JDK="$CCXXFLAGS_JDK -DNDEBUG" 1031274337Sdelphij if test "x$OPENJDK_TARGET_OS" = xsolaris; then 1032321535Smav CCXXFLAGS_JDK="$CCXXFLAGS_JDK -DTRIMMED" 1033260183Sdelphij fi 1034274337Sdelphij else 1035321535Smav CCXXFLAGS_JDK="$CCXXFLAGS_JDK -DDEBUG" 1036248571Smm fi 1037260183Sdelphij 1038260183Sdelphij CCXXFLAGS_JDK="$CCXXFLAGS_JDK -DARCH='\"$OPENJDK_TARGET_CPU_LEGACY\"' -D$OPENJDK_TARGET_CPU_LEGACY" 1039248571Smm CCXXFLAGS_JDK="$CCXXFLAGS_JDK -DRELEASE='\"\$(RELEASE)\"'" 1040248571Smm 1041248571Smm CCXXFLAGS_JDK="$CCXXFLAGS_JDK \ 1042289362Smav -I${JDK_OUTPUTDIR}/include \ 1043321535Smav -I${JDK_OUTPUTDIR}/include/$OPENJDK_TARGET_OS \ 1044321535Smav -I${JDK_TOPDIR}/src/share/javavm/export \ 1045248571Smm -I${JDK_TOPDIR}/src/$OPENJDK_TARGET_OS_EXPORT_DIR/javavm/export \ 1046289362Smav -I${JDK_TOPDIR}/src/share/native/common \ 1047248571Smm -I${JDK_TOPDIR}/src/$OPENJDK_TARGET_OS_API_DIR/native/common" 1048289362Smav 1049248571Smm # The shared libraries are compiled using the picflag. 1050248571Smm CFLAGS_JDKLIB="$CCXXFLAGS_JDK $CFLAGS_JDK $PICFLAG $CFLAGS_JDKLIB_EXTRA" 1051248571Smm CXXFLAGS_JDKLIB="$CCXXFLAGS_JDK $CXXFLAGS_JDK $PICFLAG $CXXFLAGS_JDKLIB_EXTRA " 1052248571Smm 1053248571Smm # Executable flags 1054260183Sdelphij CFLAGS_JDKEXE="$CCXXFLAGS_JDK $CFLAGS_JDK" 1055248571Smm CXXFLAGS_JDKEXE="$CCXXFLAGS_JDK $CXXFLAGS_JDK" 1056260183Sdelphij 1057249195Smm # Now this is odd. The JDK native libraries have to link against libjvm.so 1058248571Smm # On 32-bit machines there is normally two distinct libjvm.so:s, client and server. 1059248571Smm # Which should we link to? Are we lucky enough that the binary api to the libjvm.so library 1060248571Smm # is identical for client and server? Yes. Which is picked at runtime (client or server)? 1061248571Smm # Neither, since the chosen libjvm.so has already been loaded by the launcher, all the following 1062248571Smm # libraries will link to whatever is in memory. Yuck. 1063260183Sdelphij # 1064260183Sdelphij # Thus we offer the compiler to find libjvm.so first in server then in client. It works. Ugh. 1065260183Sdelphij if test "x$COMPILER_NAME" = xcl; then 1066260183Sdelphij LDFLAGS_JDK="$LDFLAGS_JDK -nologo -opt:ref -incremental:no" 1067260183Sdelphij if test "x$OPENJDK_TARGET_CPU" = xx86; then 1068260183Sdelphij LDFLAGS_JDK="$LDFLAGS_JDK -safeseh" 1069260183Sdelphij fi 1070260183Sdelphij # TODO: make -debug optional "--disable-full-debug-symbols" 1071260183Sdelphij LDFLAGS_JDK="$LDFLAGS_JDK -debug" 1072260183Sdelphij LDFLAGS_JDKLIB="${LDFLAGS_JDK} -dll -libpath:${JDK_OUTPUTDIR}/lib" 1073248571Smm LDFLAGS_JDKLIB_SUFFIX="" 1074248571Smm if test "x$OPENJDK_TARGET_CPU_BITS" = "x64"; then 1075248571Smm LDFLAGS_STACK_SIZE=1048576 1076248571Smm else 1077248571Smm LDFLAGS_STACK_SIZE=327680 1078248571Smm fi 1079260183Sdelphij LDFLAGS_JDKEXE="${LDFLAGS_JDK} /STACK:$LDFLAGS_STACK_SIZE" 1080260183Sdelphij else 1081260183Sdelphij if test "x$COMPILER_NAME" = xgcc; then 1082260183Sdelphij # If this is a --hash-style=gnu system, use --hash-style=both, why? 1083260183Sdelphij HAS_GNU_HASH=`$CC -dumpspecs 2>/dev/null | $GREP 'hash-style=gnu'` 1084260183Sdelphij if test -n "$HAS_GNU_HASH"; then 1085260183Sdelphij LDFLAGS_JDK="${LDFLAGS_JDK} -Xlinker --hash-style=both " 1086260183Sdelphij fi 1087260183Sdelphij if test "x$OPENJDK_TARGET_OS" = xlinux; then 1088260183Sdelphij # And since we now know that the linker is gnu, then add -z defs, to forbid 1089260183Sdelphij # undefined symbols in object files. 1090260183Sdelphij LDFLAGS_JDK="${LDFLAGS_JDK} -Xlinker -z -Xlinker defs" 1091260183Sdelphij if test "x$DEBUG_LEVEL" = "xrelease"; then 1092260183Sdelphij # When building release libraries, tell the linker optimize them. 1093260183Sdelphij # Should this be supplied to the OSS linker as well? 1094260183Sdelphij LDFLAGS_JDK="${LDFLAGS_JDK} -Xlinker -O1" 1095260183Sdelphij fi 1096260183Sdelphij fi 1097260183Sdelphij fi 1098260183Sdelphij LDFLAGS_JDKLIB="${LDFLAGS_JDK} $SHARED_LIBRARY_FLAGS \ 1099260183Sdelphij -L${JDK_OUTPUTDIR}/lib${OPENJDK_TARGET_CPU_LIBDIR}" 1100275782Sdelphij 1101260183Sdelphij # On some platforms (mac) the linker warns about non existing -L dirs. 1102275782Sdelphij # Add server first if available. Linking aginst client does not always produce the same results. 1103275782Sdelphij # Only add client dir if client is being built. Add minimal (note not minimal1) if only building minimal1. 1104260183Sdelphij # Default to server for other variants. 1105260183Sdelphij if test "x$JVM_VARIANT_SERVER" = xtrue; then 1106260183Sdelphij LDFLAGS_JDKLIB="${LDFLAGS_JDKLIB} -L${JDK_OUTPUTDIR}/lib${OPENJDK_TARGET_CPU_LIBDIR}/server" 1107260183Sdelphij elif test "x$JVM_VARIANT_CLIENT" = xtrue; then 1108260183Sdelphij LDFLAGS_JDKLIB="${LDFLAGS_JDKLIB} -L${JDK_OUTPUTDIR}/lib${OPENJDK_TARGET_CPU_LIBDIR}/client" 1109260183Sdelphij elif test "x$JVM_VARIANT_MINIMAL1" = xtrue; then 1110248571Smm LDFLAGS_JDKLIB="${LDFLAGS_JDKLIB} -L${JDK_OUTPUTDIR}/lib${OPENJDK_TARGET_CPU_LIBDIR}/minimal" 1111248571Smm else 1112248571Smm LDFLAGS_JDKLIB="${LDFLAGS_JDKLIB} -L${JDK_OUTPUTDIR}/lib${OPENJDK_TARGET_CPU_LIBDIR}/server" 1113248571Smm fi 1114248571Smm 1115274337Sdelphij LDFLAGS_JDKLIB_SUFFIX="-ljava -ljvm" 1116321535Smav if test "x$COMPILER_NAME" = xossc; then 1117289362Smav LDFLAGS_JDKLIB_SUFFIX="$LDFLAGS_JDKLIB_SUFFIX -lc" 1118260183Sdelphij fi 1119274337Sdelphij 1120321535Smav LDFLAGS_JDKEXE="${LDFLAGS_JDK}" 1121289362Smav if test "x$OPENJDK_TARGET_OS" = xlinux; then 1122248571Smm LDFLAGS_JDKEXE="$LDFLAGS_JDKEXE -Xlinker --allow-shlib-undefined" 1123260183Sdelphij fi 1124260183Sdelphij fi 1125260183Sdelphij 1126260183Sdelphij AC_SUBST(CFLAGS_JDKLIB) 1127260183Sdelphij AC_SUBST(CFLAGS_JDKEXE) 1128248571Smm 1129248571Smm AC_SUBST(CXXFLAGS_JDKLIB) 1130286683Smav AC_SUBST(CXXFLAGS_JDKEXE) 1131321535Smav 1132321535Smav AC_SUBST(LDFLAGS_JDKLIB) 1133286683Smav AC_SUBST(LDFLAGS_JDKEXE) 1134286683Smav AC_SUBST(LDFLAGS_JDKLIB_SUFFIX) 1135321535Smav AC_SUBST(LDFLAGS_JDKEXE_SUFFIX) 1136286683Smav AC_SUBST(LDFLAGS_CXX_JDK) 1137286683Smav]) 1138286683Smav 1139286683Smav 1140286683Smav# TOOLCHAIN_COMPILER_CHECK_ARGUMENTS([ARGUMENT], [RUN-IF-TRUE], 1141321535Smav# [RUN-IF-FALSE]) 1142321535Smav# ------------------------------------------------------------ 1143286683Smav# Check that the c and c++ compilers support an argument 1144321535SmavAC_DEFUN([TOOLCHAIN_COMPILER_CHECK_ARGUMENTS], 1145321535Smav[ 1146321535Smav AC_MSG_CHECKING([if compiler supports "$1"]) 1147321535Smav supports=yes 1148321535Smav 1149321535Smav saved_cflags="$CFLAGS" 1150321535Smav CFLAGS="$CFLAGS $1" 1151286683Smav AC_LANG_PUSH([C]) 1152321535Smav AC_COMPILE_IFELSE([AC_LANG_SOURCE([[int i;]])], [], 1153321535Smav [supports=no]) 1154321535Smav AC_LANG_POP([C]) 1155321535Smav CFLAGS="$saved_cflags" 1156321535Smav 1157321535Smav saved_cxxflags="$CXXFLAGS" 1158321535Smav CXXFLAGS="$CXXFLAG $1" 1159286683Smav AC_LANG_PUSH([C++]) 1160286683Smav AC_COMPILE_IFELSE([AC_LANG_SOURCE([[int i;]])], [], 1161321535Smav [supports=no]) 1162286683Smav AC_LANG_POP([C++]) 1163286683Smav CXXFLAGS="$saved_cxxflags" 1164321535Smav 1165286683Smav AC_MSG_RESULT([$supports]) 1166321535Smav if test "x$supports" = "xyes" ; then 1167286683Smav m4_ifval([$2], [$2], [:]) 1168286683Smav else 1169321535Smav m4_ifval([$3], [$3], [:]) 1170286683Smav fi 1171286683Smav]) 1172286683Smav 1173286683SmavAC_DEFUN_ONCE([TOOLCHAIN_SETUP_COMPILER_FLAGS_MISC], 1174286683Smav[ 1175286683Smav # Some Zero and Shark settings. 1176248571Smm # ZERO_ARCHFLAG tells the compiler which mode to build for 1177321535Smav case "${OPENJDK_TARGET_CPU}" in 1178321535Smav s390) 1179248571Smm ZERO_ARCHFLAG="${COMPILER_TARGET_BITS_FLAG}31" 1180228103Smm ;; 1181228103Smm *) 1182321535Smav ZERO_ARCHFLAG="${COMPILER_TARGET_BITS_FLAG}${OPENJDK_TARGET_CPU_BITS}" 1183228103Smm esac 1184248571Smm TOOLCHAIN_COMPILER_CHECK_ARGUMENTS([$ZERO_ARCHFLAG], [], [ZERO_ARCHFLAG=""]) 1185248571Smm AC_SUBST(ZERO_ARCHFLAG) 1186228103Smm 1187286575Smav # Check that the compiler supports -mX (or -qX on AIX) flags 1188249195Smm # Set COMPILER_SUPPORTS_TARGET_BITS_FLAG to 'true' if it does 1189228103Smm TOOLCHAIN_COMPILER_CHECK_ARGUMENTS([${COMPILER_TARGET_BITS_FLAG}${OPENJDK_TARGET_CPU_BITS}], 1190284301Savg [COMPILER_SUPPORTS_TARGET_BITS_FLAG=true], 1191286575Smav [COMPILER_SUPPORTS_TARGET_BITS_FLAG=false]) 1192284301Savg AC_SUBST(COMPILER_SUPPORTS_TARGET_BITS_FLAG) 1193284301Savg 1194248571Smm 1195248571Smm # Check for broken SuSE 'ld' for which 'Only anonymous version tag is allowed in executable.' 1196248571Smm USING_BROKEN_SUSE_LD=no 1197248571Smm if test "x$OPENJDK_TARGET_OS" = xlinux && test "x$GCC" = xyes; then 1198260183Sdelphij AC_MSG_CHECKING([for broken SuSE 'ld' which only understands anonymous version tags in executables]) 1199249195Smm echo "SUNWprivate_1.1 { local: *; };" > version-script.map 1200228103Smm echo "int main() { }" > main.c 1201321535Smav if $CXX -Xlinker -version-script=version-script.map main.c 2>&AS_MESSAGE_LOG_FD >&AS_MESSAGE_LOG_FD; then 1202228103Smm AC_MSG_RESULT(no) 1203321535Smav USING_BROKEN_SUSE_LD=no 1204321535Smav else 1205228103Smm AC_MSG_RESULT(yes) 1206321535Smav USING_BROKEN_SUSE_LD=yes 1207228103Smm fi 1208321535Smav rm -rf version-script.map main.c 1209248571Smm fi 1210228103Smm AC_SUBST(USING_BROKEN_SUSE_LD) 1211228103Smm]) 1212228103Smm 1213321535Smav# Setup the JTREG paths 1214321535SmavAC_DEFUN_ONCE([TOOLCHAIN_SETUP_JTREG], 1215286683Smav[ 1216286683Smav AC_ARG_WITH(jtreg, [AS_HELP_STRING([--with-jtreg], 1217228103Smm [Regression Test Harness @<:@probed@:>@])], 1218321535Smav [], 1219321535Smav [with_jtreg=no]) 1220321535Smav 1221321535Smav if test "x$with_jtreg" = xno; then 1222321535Smav # jtreg disabled 1223286683Smav AC_MSG_CHECKING([for jtreg]) 1224286683Smav AC_MSG_RESULT(no) 1225321535Smav else 1226286683Smav if test "x$with_jtreg" != xyes; then 1227286683Smav # with path specified. 1228286683Smav JT_HOME="$with_jtreg" 1229286683Smav fi 1230286683Smav 1231286683Smav if test "x$JT_HOME" != x; then 1232321535Smav AC_MSG_CHECKING([for jtreg]) 1233286683Smav 1234321535Smav # use JT_HOME enviroment var. 1235321535Smav BASIC_FIXUP_PATH([JT_HOME]) 1236286683Smav 1237286683Smav # jtreg win32 script works for everybody 1238286683Smav JTREGEXE="$JT_HOME/win32/bin/jtreg" 1239286683Smav 1240286683Smav if test ! -f "$JTREGEXE"; then 1241286683Smav AC_MSG_ERROR([JTReg executable does not exist: $JTREGEXE]) 1242286683Smav fi 1243286683Smav 1244286683Smav AC_MSG_RESULT($JTREGEXE) 1245286683Smav else 1246286683Smav # try to find jtreg on path 1247321535Smav BASIC_REQUIRE_PROG(JTREGEXE, jtreg) 1248286683Smav JT_HOME="`$DIRNAME $JTREGEXE`" 1249286683Smav fi 1250286683Smav fi 1251321535Smav 1252286683Smav AC_SUBST(JT_HOME) 1253286683Smav AC_SUBST(JTREGEXE) 1254286683Smav]) 1255286683Smav