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