flags.m4 revision 1829:5a7e1695ac8c
1104477Ssam#
2104477Ssam# Copyright (c) 2011, 2015, Oracle and/or its affiliates. All rights reserved.
3104477Ssam# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4104477Ssam#
5104477Ssam# This code is free software; you can redistribute it and/or modify it
6104477Ssam# under the terms of the GNU General Public License version 2 only, as
7104477Ssam# published by the Free Software Foundation.  Oracle designates this
8104477Ssam# particular file as subject to the "Classpath" exception as provided
9104477Ssam# by Oracle in the LICENSE file that accompanied this code.
10104477Ssam#
11104477Ssam# This code is distributed in the hope that it will be useful, but WITHOUT
12104477Ssam# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
13104477Ssam# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
14104477Ssam# version 2 for more details (a copy is included in the LICENSE file that
15104477Ssam# accompanied this code).
16104477Ssam#
17104477Ssam# You should have received a copy of the GNU General Public License version
18104477Ssam# 2 along with this work; if not, write to the Free Software Foundation,
19104477Ssam# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
20104477Ssam#
21104477Ssam# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
22104477Ssam# or visit www.oracle.com if you need additional information or have any
23104477Ssam# questions.
24104477Ssam#
25104477Ssam
26104477Ssam# Reset the global CFLAGS/LDFLAGS variables and initialize them with the
27104477Ssam# corresponding configure arguments instead
28104477SsamAC_DEFUN_ONCE([FLAGS_SETUP_USER_SUPPLIED_FLAGS],
29104477Ssam[
30104477Ssam  if test "x$CFLAGS" != "x${ADDED_CFLAGS}"; then
31104477Ssam    AC_MSG_WARN([Ignoring CFLAGS($CFLAGS) found in environment. Use --with-extra-cflags])
32104477Ssam  fi
33104477Ssam
34104477Ssam  if test "x$CXXFLAGS" != "x${ADDED_CXXFLAGS}"; then
35104477Ssam    AC_MSG_WARN([Ignoring CXXFLAGS($CXXFLAGS) found in environment. Use --with-extra-cxxflags])
36104477Ssam  fi
37104477Ssam
38104477Ssam  if test "x$LDFLAGS" != "x${ADDED_LDFLAGS}"; then
39104477Ssam    AC_MSG_WARN([Ignoring LDFLAGS($LDFLAGS) found in environment. Use --with-extra-ldflags])
40104477Ssam  fi
41104477Ssam
42104477Ssam  AC_ARG_WITH(extra-cflags, [AS_HELP_STRING([--with-extra-cflags],
43104477Ssam      [extra flags to be used when compiling jdk c-files])])
44104477Ssam
45104477Ssam  AC_ARG_WITH(extra-cxxflags, [AS_HELP_STRING([--with-extra-cxxflags],
46104477Ssam      [extra flags to be used when compiling jdk c++-files])])
47104477Ssam
48104477Ssam  AC_ARG_WITH(extra-ldflags, [AS_HELP_STRING([--with-extra-ldflags],
49104477Ssam      [extra flags to be used when linking jdk])])
50104477Ssam
51104477Ssam  EXTRA_CFLAGS="$with_extra_cflags"
52104477Ssam  EXTRA_CXXFLAGS="$with_extra_cxxflags"
53104477Ssam  EXTRA_LDFLAGS="$with_extra_ldflags"
54104477Ssam
55104477Ssam  # Hotspot needs these set in their legacy form
56104477Ssam  LEGACY_EXTRA_CFLAGS="$LEGACY_EXTRA_CFLAGS $EXTRA_CFLAGS"
57104477Ssam  LEGACY_EXTRA_CXXFLAGS="$LEGACY_EXTRA_CXXFLAGS $EXTRA_CXXFLAGS"
58104477Ssam  LEGACY_EXTRA_LDFLAGS="$LEGACY_EXTRA_LDFLAGS $EXTRA_LDFLAGS"
59104477Ssam
60104477Ssam  AC_SUBST(LEGACY_EXTRA_CFLAGS)
61104477Ssam  AC_SUBST(LEGACY_EXTRA_CXXFLAGS)
62104477Ssam  AC_SUBST(LEGACY_EXTRA_LDFLAGS)
63104477Ssam
64104477Ssam  # The global CFLAGS and LDLAGS variables are used by configure tests and
65104477Ssam  # should include the extra parameters
66104477Ssam  CFLAGS="$EXTRA_CFLAGS"
67104477Ssam  CXXFLAGS="$EXTRA_CXXFLAGS"
68104477Ssam  LDFLAGS="$EXTRA_LDFLAGS"
69104477Ssam  CPPFLAGS=""
70104477Ssam])
71104477Ssam
72104477Ssam# Setup the sysroot flags and add them to global CFLAGS and LDFLAGS so
73104477Ssam# that configure can use them while detecting compilers.
74104477Ssam# TOOLCHAIN_TYPE is available here.
75104477Ssam# Param 1 - Optional prefix to all variables. (e.g BUILD_)
76104477SsamAC_DEFUN([FLAGS_SETUP_SYSROOT_FLAGS],
77104477Ssam[
78104477Ssam  if test "x[$]$1SYSROOT" != "x"; then
79104477Ssam    if test "x$TOOLCHAIN_TYPE" = xsolstudio; then
80104477Ssam      if test "x$OPENJDK_TARGET_OS" = xsolaris; then
81104477Ssam        # Solaris Studio does not have a concept of sysroot. Instead we must
82104477Ssam        # make sure the default include and lib dirs are appended to each
83104477Ssam        # compile and link command line.
84104477Ssam        $1SYSROOT_CFLAGS="-I[$]$1SYSROOT/usr/include"
85104477Ssam        $1SYSROOT_LDFLAGS="-L[$]$1SYSROOT/usr/lib$OPENJDK_TARGET_CPU_ISADIR \
86104477Ssam            -L[$]$1SYSROOT/lib$OPENJDK_TARGET_CPU_ISADIR \
87104477Ssam            -L[$]$1SYSROOT/usr/ccs/lib$OPENJDK_TARGET_CPU_ISADIR"
88104477Ssam      fi
89104477Ssam    elif test "x$TOOLCHAIN_TYPE" = xgcc; then
90104477Ssam      $1SYSROOT_CFLAGS="--sysroot=[$]$1SYSROOT"
91104477Ssam      $1SYSROOT_LDFLAGS="--sysroot=[$]$1SYSROOT"
92104477Ssam    elif test "x$TOOLCHAIN_TYPE" = xclang; then
93104477Ssam      $1SYSROOT_CFLAGS="-isysroot [$]$1SYSROOT"
94104477Ssam      $1SYSROOT_LDFLAGS="-isysroot [$]$1SYSROOT"
95104477Ssam    fi
96104477Ssam    # Propagate the sysroot args to hotspot
97104477Ssam    $1LEGACY_EXTRA_CFLAGS="[$]$1LEGACY_EXTRA_CFLAGS [$]$1SYSROOT_CFLAGS"
98104477Ssam    $1LEGACY_EXTRA_CXXFLAGS="[$]$1LEGACY_EXTRA_CXXFLAGS [$]$1SYSROOT_CFLAGS"
99104477Ssam    $1LEGACY_EXTRA_LDFLAGS="[$]$1LEGACY_EXTRA_LDFLAGS [$]$1SYSROOT_LDFLAGS"
100104477Ssam    # The global CFLAGS and LDFLAGS variables need these for configure to function
101104477Ssam    $1CFLAGS="[$]$1CFLAGS [$]$1SYSROOT_CFLAGS"
102104477Ssam    $1CPPFLAGS="[$]$1CPPFLAGS [$]$1SYSROOT_CFLAGS"
103104477Ssam    $1CXXFLAGS="[$]$1CXXFLAGS [$]$1SYSROOT_CFLAGS"
104104477Ssam    $1LDFLAGS="[$]$1LDFLAGS [$]$1SYSROOT_LDFLAGS"
105104477Ssam  fi
106104477Ssam
107104477Ssam  if test "x$OPENJDK_TARGET_OS" = xmacosx; then
108104477Ssam    # We also need -iframework<path>/System/Library/Frameworks
109104477Ssam    $1SYSROOT_CFLAGS="[$]$1SYSROOT_CFLAGS -iframework [$]$1SYSROOT/System/Library/Frameworks"
110104477Ssam    $1SYSROOT_LDFLAGS="[$]$1SYSROOT_LDFLAGS -iframework [$]$1SYSROOT/System/Library/Frameworks"
111105251Smarkm    # These always need to be set, or we can't find the frameworks embedded in JavaVM.framework
112104477Ssam    # set this here so it doesn't have to be peppered throughout the forest
113104477Ssam    $1SYSROOT_CFLAGS="[$]$1SYSROOT_CFLAGS -F [$]$1SYSROOT/System/Library/Frameworks/JavaVM.framework/Frameworks"
114104477Ssam    $1SYSROOT_LDFLAGS="[$]$1SYSROOT_LDFLAGS -F [$]$1SYSROOT/System/Library/Frameworks/JavaVM.framework/Frameworks"
115104477Ssam  fi
116104477Ssam
117104477Ssam  AC_SUBST($1SYSROOT_CFLAGS)
118104477Ssam  AC_SUBST($1SYSROOT_LDFLAGS)
119104477Ssam])
120104477Ssam
121104477SsamAC_DEFUN_ONCE([FLAGS_SETUP_INIT_FLAGS],
122104477Ssam[
123104477Ssam  # COMPILER_TARGET_BITS_FLAG  : option for selecting 32- or 64-bit output
124104477Ssam  # COMPILER_COMMAND_FILE_FLAG : option for passing a command file to the compiler
125104477Ssam  if test "x$TOOLCHAIN_TYPE" = xxlc; then
126104477Ssam    COMPILER_TARGET_BITS_FLAG="-q"
127104477Ssam    COMPILER_COMMAND_FILE_FLAG="-f"
128104477Ssam  else
129104477Ssam    COMPILER_TARGET_BITS_FLAG="-m"
130104477Ssam    COMPILER_COMMAND_FILE_FLAG="@"
131104477Ssam  fi
132104477Ssam  AC_SUBST(COMPILER_TARGET_BITS_FLAG)
133104477Ssam  AC_SUBST(COMPILER_COMMAND_FILE_FLAG)
134104477Ssam
135104477Ssam  # FIXME: figure out if we should select AR flags depending on OS or toolchain.
136104477Ssam  if test "x$OPENJDK_TARGET_OS" = xmacosx; then
137104477Ssam    ARFLAGS="-r"
138104477Ssam  elif test "x$OPENJDK_TARGET_OS" = xaix; then
139104477Ssam    ARFLAGS="-X64"
140104477Ssam  elif test "x$OPENJDK_TARGET_OS" = xwindows; then
141104477Ssam    # lib.exe is used as AR to create static libraries.
142104477Ssam    ARFLAGS="-nologo -NODEFAULTLIB:MSVCRT"
143104477Ssam  else
144104477Ssam    ARFLAGS=""
145104477Ssam  fi
146104477Ssam  AC_SUBST(ARFLAGS)
147104477Ssam
148104477Ssam  ## Setup strip.
149104477Ssam  # FIXME: should this really be per platform, or should it be per toolchain type?
150104477Ssam  # strip is not provided by clang or solstudio; so guessing platform makes most sense.
151104477Ssam  # FIXME: we should really only export STRIPFLAGS from here, not POST_STRIP_CMD.
152104477Ssam  if test "x$OPENJDK_TARGET_OS" = xlinux; then
153104477Ssam    STRIPFLAGS="-g"
154104477Ssam  elif test "x$OPENJDK_TARGET_OS" = xsolaris; then
155104477Ssam    STRIPFLAGS="-x"
156104477Ssam  elif test "x$OPENJDK_TARGET_OS" = xmacosx; then
157104477Ssam    STRIPFLAGS="-S"
158104477Ssam  elif test "x$OPENJDK_TARGET_OS" = xaix; then
159104477Ssam    STRIPFLAGS="-X32_64"
160104477Ssam  fi
161104477Ssam
162104477Ssam  AC_SUBST(STRIPFLAGS)
163109596Ssam
164109596Ssam  if test "x$TOOLCHAIN_TYPE" = xmicrosoft; then
165104477Ssam    CC_OUT_OPTION=-Fo
166104477Ssam    EXE_OUT_OPTION=-out:
167109596Ssam    LD_OUT_OPTION=-out:
168109596Ssam    AR_OUT_OPTION=-out:
169104477Ssam  else
170104477Ssam    # The option used to specify the target .o,.a or .so file.
171104477Ssam    # When compiling, how to specify the to be created object file.
172109596Ssam    CC_OUT_OPTION='-o$(SPACE)'
173109596Ssam    # When linking, how to specify the to be created executable.
174112121Ssam    EXE_OUT_OPTION='-o$(SPACE)'
175109596Ssam    # When linking, how to specify the to be created dynamically linkable library.
176109596Ssam    LD_OUT_OPTION='-o$(SPACE)'
177104477Ssam    # When archiving, how to specify the to be create static archive for object files.
178104477Ssam    AR_OUT_OPTION='rcs$(SPACE)'
179104477Ssam  fi
180104477Ssam  AC_SUBST(CC_OUT_OPTION)
181104477Ssam  AC_SUBST(EXE_OUT_OPTION)
182104477Ssam  AC_SUBST(LD_OUT_OPTION)
183104477Ssam  AC_SUBST(AR_OUT_OPTION)
184104477Ssam
185104477Ssam  # On Windows, we need to set RC flags.
186104477Ssam  if test "x$TOOLCHAIN_TYPE" = xmicrosoft; then
187104477Ssam    RC_FLAGS="-nologo -l0x409"
188104477Ssam    if test "x$VARIANT" = xOPT; then
189104477Ssam      RC_FLAGS="$RC_FLAGS -DNDEBUG"
190104477Ssam    fi
191104477Ssam
192104477Ssam    # The version variables used to create RC_FLAGS may be overridden
193104477Ssam    # in a custom configure script, or possibly the command line.
194104477Ssam    # Let those variables be expanded at make time in spec.gmk.
195104477Ssam    # The \$ are escaped to the shell, and the $(...) variables
196104477Ssam    # are evaluated by make.
197104477Ssam    RC_FLAGS="$RC_FLAGS \
198104477Ssam        -D\"JDK_VERSION_STRING=\$(VERSION_STRING)\" \
199104477Ssam        -D\"JDK_COMPANY=\$(COMPANY_NAME)\" \
200104477Ssam        -D\"JDK_COMPONENT=\$(PRODUCT_NAME) \$(JDK_RC_PLATFORM_NAME) binary\" \
201104477Ssam        -D\"JDK_VER=\$(VERSION_NUMBER)\" \
202104477Ssam        -D\"JDK_COPYRIGHT=Copyright \xA9 $COPYRIGHT_YEAR\" \
203104477Ssam        -D\"JDK_NAME=\$(PRODUCT_NAME) \$(JDK_RC_PLATFORM_NAME) \$(VERSION_MAJOR)\" \
204104477Ssam        -D\"JDK_FVER=\$(subst .,\$(COMMA),\$(VERSION_NUMBER_FOUR_POSITIONS))\""
205104477Ssam  fi
206104477Ssam  AC_SUBST(RC_FLAGS)
207104477Ssam
208104477Ssam  if test "x$TOOLCHAIN_TYPE" = xmicrosoft; then
209104477Ssam    # silence copyright notice and other headers.
210104477Ssam    COMMON_CCXXFLAGS="$COMMON_CCXXFLAGS -nologo"
211104477Ssam  fi
212104477Ssam])
213104477Ssam
214104477SsamAC_DEFUN_ONCE([FLAGS_SETUP_COMPILER_FLAGS_FOR_LIBS],
215104477Ssam[
216104477Ssam  ###############################################################################
217104477Ssam  #
218104477Ssam  # How to compile shared libraries.
219104477Ssam  #
220104477Ssam
221104477Ssam  if test "x$TOOLCHAIN_TYPE" = xgcc; then
222104477Ssam    PICFLAG="-fPIC"
223104477Ssam    C_FLAG_REORDER=''
224104477Ssam    CXX_FLAG_REORDER=''
225104477Ssam
226104477Ssam    if test "x$OPENJDK_TARGET_OS" = xmacosx; then
227104477Ssam      # Linking is different on MacOSX
228104477Ssam      if test "x$STATIC_BUILD" = xtrue; then
229104477Ssam        SHARED_LIBRARY_FLAGS ='-undefined dynamic_lookup'
230104477Ssam      else
231104477Ssam        SHARED_LIBRARY_FLAGS="-dynamiclib -compatibility_version 1.0.0 -current_version 1.0.0 $PICFLAG"
232104477Ssam      fi
233104477Ssam      SET_EXECUTABLE_ORIGIN='-Wl,-rpath,@loader_path/.'
234104477Ssam      SET_SHARED_LIBRARY_ORIGIN="$SET_EXECUTABLE_ORIGIN"
235104477Ssam      SET_SHARED_LIBRARY_NAME='-Wl,-install_name,@rpath/[$]1'
236104477Ssam      SET_SHARED_LIBRARY_MAPFILE=''
237104477Ssam    else
238104477Ssam      # Default works for linux, might work on other platforms as well.
239104477Ssam      SHARED_LIBRARY_FLAGS='-shared'
240104477Ssam      SET_EXECUTABLE_ORIGIN='-Wl,-rpath,\$$$$ORIGIN[$]1'
241104477Ssam      SET_SHARED_LIBRARY_ORIGIN="-Wl,-z,origin $SET_EXECUTABLE_ORIGIN"
242104477Ssam      SET_SHARED_LIBRARY_NAME='-Wl,-soname=[$]1'
243104477Ssam      SET_SHARED_LIBRARY_MAPFILE='-Wl,-version-script=[$]1'
244104477Ssam    fi
245104477Ssam  elif test "x$TOOLCHAIN_TYPE" = xclang; then
246104477Ssam    C_FLAG_REORDER=''
247104477Ssam    CXX_FLAG_REORDER=''
248104477Ssam
249104477Ssam    if test "x$OPENJDK_TARGET_OS" = xmacosx; then
250104477Ssam      # Linking is different on MacOSX
251104477Ssam      PICFLAG=''
252104477Ssam      SHARED_LIBRARY_FLAGS="-dynamiclib -compatibility_version 1.0.0 -current_version 1.0.0 $PICFLAG"
253104477Ssam      SET_EXECUTABLE_ORIGIN='-Wl,-rpath,@loader_path/.'
254104477Ssam      SET_SHARED_LIBRARY_ORIGIN="$SET_EXECUTABLE_ORIGIN"
255104477Ssam      SET_SHARED_LIBRARY_NAME='-Wl,-install_name,@rpath/[$]1'
256104477Ssam      SET_SHARED_LIBRARY_MAPFILE=''
257104477Ssam    else
258104477Ssam      # Default works for linux, might work on other platforms as well.
259104477Ssam      PICFLAG='-fPIC'
260104477Ssam      SHARED_LIBRARY_FLAGS='-shared'
261104477Ssam      SET_EXECUTABLE_ORIGIN='-Wl,-rpath,\$$$$ORIGIN[$]1'
262104477Ssam      SET_SHARED_LIBRARY_ORIGIN="-Wl,-z,origin $SET_EXECUTABLE_ORIGIN"
263104477Ssam      SET_SHARED_LIBRARY_NAME='-Wl,-soname=[$]1'
264104477Ssam      SET_SHARED_LIBRARY_MAPFILE='-Wl,-version-script=[$]1'
265104477Ssam    fi
266104477Ssam  elif test "x$TOOLCHAIN_TYPE" = xsolstudio; then
267104477Ssam    PICFLAG="-KPIC"
268104477Ssam    C_FLAG_REORDER='-xF'
269104477Ssam    CXX_FLAG_REORDER='-xF'
270104477Ssam    SHARED_LIBRARY_FLAGS="-G"
271104477Ssam    SET_EXECUTABLE_ORIGIN='-R\$$$$ORIGIN[$]1'
272104477Ssam    SET_SHARED_LIBRARY_ORIGIN="$SET_EXECUTABLE_ORIGIN"
273104477Ssam    SET_SHARED_LIBRARY_NAME='-h [$]1'
274104477Ssam    SET_SHARED_LIBRARY_MAPFILE='-M[$]1'
275104477Ssam  elif test "x$TOOLCHAIN_TYPE" = xxlc; then
276104477Ssam    PICFLAG="-qpic=large"
277104477Ssam    C_FLAG_REORDER=''
278104477Ssam    CXX_FLAG_REORDER=''
279104477Ssam    SHARED_LIBRARY_FLAGS="-qmkshrobj"
280104477Ssam    SET_EXECUTABLE_ORIGIN=""
281104477Ssam    SET_SHARED_LIBRARY_ORIGIN=''
282104477Ssam    SET_SHARED_LIBRARY_NAME=''
283104477Ssam    SET_SHARED_LIBRARY_MAPFILE=''
284104477Ssam  elif test "x$TOOLCHAIN_TYPE" = xmicrosoft; then
285104477Ssam    PICFLAG=""
286104477Ssam    C_FLAG_REORDER=''
287104477Ssam    CXX_FLAG_REORDER=''
288104477Ssam    SHARED_LIBRARY_FLAGS="-dll"
289104477Ssam    SET_EXECUTABLE_ORIGIN=''
290104477Ssam    SET_SHARED_LIBRARY_ORIGIN=''
291104477Ssam    SET_SHARED_LIBRARY_NAME=''
292104477Ssam    SET_SHARED_LIBRARY_MAPFILE=''
293104477Ssam  fi
294104477Ssam
295104477Ssam  AC_SUBST(C_FLAG_REORDER)
296104477Ssam  AC_SUBST(CXX_FLAG_REORDER)
297104477Ssam  AC_SUBST(SET_EXECUTABLE_ORIGIN)
298104477Ssam  AC_SUBST(SET_SHARED_LIBRARY_ORIGIN)
299104477Ssam  AC_SUBST(SET_SHARED_LIBRARY_NAME)
300104477Ssam  AC_SUBST(SET_SHARED_LIBRARY_MAPFILE)
301104477Ssam  AC_SUBST(SHARED_LIBRARY_FLAGS)
302104477Ssam
303104477Ssam  if test "x$OPENJDK_TARGET_OS" = xsolaris; then
304104477Ssam    CFLAGS_JDK="${CFLAGS_JDK} -D__solaris__"
305104477Ssam    CXXFLAGS_JDK="${CXXFLAGS_JDK} -D__solaris__"
306104477Ssam    CFLAGS_JDKLIB_EXTRA='-xstrconst'
307104477Ssam  fi
308104477Ssam  # The (cross) compiler is now configured, we can now test capabilities
309104477Ssam  # of the target platform.
310104477Ssam])
311104477Ssam
312104477Ssam# Documentation on common flags used for solstudio in HIGHEST.
313104477Ssam#
314104477Ssam# WARNING: Use of OPTIMIZATION_LEVEL=HIGHEST in your Makefile needs to be
315104477Ssam#          done with care, there are some assumptions below that need to
316104477Ssam#          be understood about the use of pointers, and IEEE behavior.
317104477Ssam#
318104477Ssam# -fns: Use non-standard floating point mode (not IEEE 754)
319104477Ssam# -fsimple: Do some simplification of floating point arithmetic (not IEEE 754)
320104477Ssam# -fsingle: Use single precision floating point with 'float'
321104477Ssam# -xalias_level=basic: Assume memory references via basic pointer types do not alias
322104477Ssam#   (Source with excessing pointer casting and data access with mixed
323104477Ssam#    pointer types are not recommended)
324104477Ssam# -xbuiltin=%all: Use intrinsic or inline versions for math/std functions
325104477Ssam#   (If you expect perfect errno behavior, do not use this)
326104477Ssam# -xdepend: Loop data dependency optimizations (need -xO3 or higher)
327104477Ssam# -xrestrict: Pointer parameters to functions do not overlap
328104477Ssam#   (Similar to -xalias_level=basic usage, but less obvious sometimes.
329104477Ssam#    If you pass in multiple pointers to the same data, do not use this)
330104477Ssam# -xlibmil: Inline some library routines
331104477Ssam#   (If you expect perfect errno behavior, do not use this)
332104477Ssam# -xlibmopt: Use optimized math routines (CURRENTLY DISABLED)
333104477Ssam#   (If you expect perfect errno behavior, do not use this)
334104477Ssam#  Can cause undefined external on Solaris 8 X86 on __sincos, removing for now
335104477Ssam
336104477Ssam    # FIXME: this will never happen since sparc != sparcv9, ie 32 bit, which we don't build anymore.
337104477Ssam    # Bug?
338104477Ssam    #if test "x$OPENJDK_TARGET_CPU" = xsparc; then
339104477Ssam    #  CFLAGS_JDK="${CFLAGS_JDK} -xmemalign=4s"
340104477Ssam    #  CXXFLAGS_JDK="${CXXFLAGS_JDK} -xmemalign=4s"
341104477Ssam    #fi
342104477Ssam
343104477SsamAC_DEFUN_ONCE([FLAGS_SETUP_COMPILER_FLAGS_FOR_OPTIMIZATION],
344104477Ssam[
345104477Ssam
346104477Ssam  ###############################################################################
347104477Ssam  #
348104477Ssam  # Setup the opt flags for different compilers
349104477Ssam  # and different operating systems.
350104477Ssam  #
351104477Ssam
352104477Ssam  # FIXME: this was indirectly the old default, but just inherited.
353104477Ssam  # if test "x$TOOLCHAIN_TYPE" = xmicrosoft; then
354104477Ssam  #   C_FLAG_DEPS="-MMD -MF"
355104477Ssam  # fi
356104477Ssam
357104477Ssam  # Generate make dependency files
358104477Ssam  if test "x$TOOLCHAIN_TYPE" = xgcc; then
359104477Ssam    C_FLAG_DEPS="-MMD -MF"
360104477Ssam  elif test "x$TOOLCHAIN_TYPE" = xclang; then
361104477Ssam    C_FLAG_DEPS="-MMD -MF"
362104477Ssam  elif test "x$TOOLCHAIN_TYPE" = xsolstudio; then
363104477Ssam    C_FLAG_DEPS="-xMMD -xMF"
364104477Ssam  elif test "x$TOOLCHAIN_TYPE" = xxlc; then
365104477Ssam    C_FLAG_DEPS="-qmakedep=gcc -MF"
366104477Ssam  fi
367104477Ssam  CXX_FLAG_DEPS="$C_FLAG_DEPS"
368104477Ssam  AC_SUBST(C_FLAG_DEPS)
369104477Ssam  AC_SUBST(CXX_FLAG_DEPS)
370104477Ssam
371104477Ssam  # Debug symbols
372104477Ssam  if test "x$TOOLCHAIN_TYPE" = xgcc; then
373104477Ssam    if test "x$OPENJDK_TARGET_CPU_BITS" = "x64" && test "x$DEBUG_LEVEL" = "xfastdebug"; then
374104477Ssam      # reduce from default "-g2" option to save space
375104477Ssam      CFLAGS_DEBUG_SYMBOLS="-g1"
376104477Ssam      CXXFLAGS_DEBUG_SYMBOLS="-g1"
377104477Ssam    else
378104477Ssam      CFLAGS_DEBUG_SYMBOLS="-g"
379104477Ssam      CXXFLAGS_DEBUG_SYMBOLS="-g"
380104477Ssam    fi
381104477Ssam  elif test "x$TOOLCHAIN_TYPE" = xclang; then
382104477Ssam    CFLAGS_DEBUG_SYMBOLS="-g"
383104477Ssam    CXXFLAGS_DEBUG_SYMBOLS="-g"
384104477Ssam  elif test "x$TOOLCHAIN_TYPE" = xsolstudio; then
385104477Ssam    CFLAGS_DEBUG_SYMBOLS="-g -xs"
386104477Ssam    # FIXME: likely a bug, this disables debug symbols rather than enables them
387104477Ssam    CXXFLAGS_DEBUG_SYMBOLS="-g0 -xs"
388104477Ssam  elif test "x$TOOLCHAIN_TYPE" = xxlc; then
389104477Ssam    CFLAGS_DEBUG_SYMBOLS="-g"
390104477Ssam    CXXFLAGS_DEBUG_SYMBOLS="-g"
391104477Ssam  fi
392104477Ssam  AC_SUBST(CFLAGS_DEBUG_SYMBOLS)
393104477Ssam  AC_SUBST(CXXFLAGS_DEBUG_SYMBOLS)
394104477Ssam
395104477Ssam  # bounds, memory and behavior checking options
396104477Ssam  if test "x$TOOLCHAIN_TYPE" = xgcc; then
397104477Ssam    case $DEBUG_LEVEL in
398104477Ssam    release )
399104477Ssam      # no adjustment
400104477Ssam      ;;
401104477Ssam    fastdebug )
402104477Ssam      # no adjustment
403104477Ssam      ;;
404104477Ssam    slowdebug )
405104477Ssam      # Add runtime stack smashing and undefined behavior checks.
406104477Ssam      # Not all versions of gcc support -fstack-protector
407104477Ssam      STACK_PROTECTOR_CFLAG="-fstack-protector-all"
408104477Ssam      FLAGS_COMPILER_CHECK_ARGUMENTS([$STACK_PROTECTOR_CFLAG], [], [STACK_PROTECTOR_CFLAG=""])
409104477Ssam
410104477Ssam      CFLAGS_DEBUG_OPTIONS="$STACK_PROTECTOR_CFLAG --param ssp-buffer-size=1"
411104477Ssam      CXXFLAGS_DEBUG_OPTIONS="$STACK_PROTECTOR_CFLAG --param ssp-buffer-size=1"
412104477Ssam      ;;
413104477Ssam    esac
414104477Ssam  fi
415104477Ssam
416104477Ssam  # Optimization levels
417104477Ssam  if test "x$TOOLCHAIN_TYPE" = xsolstudio; then
418104477Ssam    CC_HIGHEST="$CC_HIGHEST -fns -fsimple -fsingle -xbuiltin=%all -xdepend -xrestrict -xlibmil"
419104477Ssam
420104477Ssam    if test "x$OPENJDK_TARGET_CPU_ARCH" = "xx86"; then
421104477Ssam      # FIXME: seems we always set -xregs=no%frameptr; put it elsewhere more global?
422104477Ssam      C_O_FLAG_HIGHEST="-xO4 -Wu,-O4~yz $CC_HIGHEST -xalias_level=basic -xregs=no%frameptr"
423104477Ssam      C_O_FLAG_HI="-xO4 -Wu,-O4~yz -xregs=no%frameptr"
424104477Ssam      C_O_FLAG_NORM="-xO2 -Wu,-O2~yz -xregs=no%frameptr"
425104477Ssam      C_O_FLAG_DEBUG="-xregs=no%frameptr"
426104477Ssam      C_O_FLAG_NONE="-xregs=no%frameptr"
427104477Ssam      CXX_O_FLAG_HIGHEST="-xO4 -Qoption ube -O4~yz $CC_HIGHEST -xregs=no%frameptr"
428104477Ssam      CXX_O_FLAG_HI="-xO4 -Qoption ube -O4~yz -xregs=no%frameptr"
429104477Ssam      CXX_O_FLAG_NORM="-xO2 -Qoption ube -O2~yz -xregs=no%frameptr"
430104477Ssam      CXX_O_FLAG_DEBUG="-xregs=no%frameptr"
431104477Ssam      CXX_O_FLAG_NONE="-xregs=no%frameptr"
432104477Ssam      if test "x$OPENJDK_TARGET_CPU_BITS" = "x32"; then
433104477Ssam        C_O_FLAG_HIGHEST="$C_O_FLAG_HIGHEST -xchip=pentium"
434104477Ssam        CXX_O_FLAG_HIGHEST="$CXX_O_FLAG_HIGHEST -xchip=pentium"
435104477Ssam      fi
436104477Ssam    elif test "x$OPENJDK_TARGET_CPU_ARCH" = "xsparc"; then
437104477Ssam      C_O_FLAG_HIGHEST="-xO4 -Wc,-Qrm-s -Wc,-Qiselect-T0 $CC_HIGHEST -xalias_level=basic -xprefetch=auto,explicit -xchip=ultra"
438104477Ssam      C_O_FLAG_HI="-xO4 -Wc,-Qrm-s -Wc,-Qiselect-T0"
439104477Ssam      C_O_FLAG_NORM="-xO2 -Wc,-Qrm-s -Wc,-Qiselect-T0"
440104477Ssam      C_O_FLAG_DEBUG=""
441104477Ssam      C_O_FLAG_NONE=""
442104477Ssam      CXX_O_FLAG_HIGHEST="-xO4 -Qoption cg -Qrm-s -Qoption cg -Qiselect-T0 $CC_HIGHEST -xprefetch=auto,explicit -xchip=ultra"
443104477Ssam      CXX_O_FLAG_HI="-xO4 -Qoption cg -Qrm-s -Qoption cg -Qiselect-T0"
444104477Ssam      CXX_O_FLAG_NORM="-xO2 -Qoption cg -Qrm-s -Qoption cg -Qiselect-T0"
445104477Ssam      C_O_FLAG_DEBUG=""
446104477Ssam      CXX_O_FLAG_NONE=""
447104477Ssam    fi
448104477Ssam  else
449104477Ssam    # The remaining toolchains share opt flags between CC and CXX;
450104477Ssam    # setup for C and duplicate afterwards.
451104477Ssam    if test "x$TOOLCHAIN_TYPE" = xgcc; then
452104477Ssam      if test "x$OPENJDK_TARGET_OS" = xmacosx; then
453104477Ssam        # On MacOSX we optimize for size, something
454104477Ssam        # we should do for all platforms?
455104477Ssam        C_O_FLAG_HIGHEST="-Os"
456104477Ssam        C_O_FLAG_HI="-Os"
457104477Ssam        C_O_FLAG_NORM="-Os"
458104477Ssam      else
459104477Ssam        C_O_FLAG_HIGHEST="-O3"
460104477Ssam        C_O_FLAG_HI="-O3"
461104477Ssam        C_O_FLAG_NORM="-O2"
462104477Ssam      fi
463104477Ssam      C_O_FLAG_DEBUG="-O0"
464104477Ssam      C_O_FLAG_NONE="-O0"
465104477Ssam    elif test "x$TOOLCHAIN_TYPE" = xclang; then
466104477Ssam      if test "x$OPENJDK_TARGET_OS" = xmacosx; then
467104477Ssam        # On MacOSX we optimize for size, something
468104477Ssam        # we should do for all platforms?
469104477Ssam        C_O_FLAG_HIGHEST="-Os"
470104477Ssam        C_O_FLAG_HI="-Os"
471104477Ssam        C_O_FLAG_NORM="-Os"
472104477Ssam      else
473104477Ssam        C_O_FLAG_HIGHEST="-O3"
474104477Ssam        C_O_FLAG_HI="-O3"
475104477Ssam        C_O_FLAG_NORM="-O2"
476104918Ssam      fi
477104918Ssam      C_O_FLAG_DEBUG="-O0"
478104477Ssam      C_O_FLAG_NONE="-O0"
479104477Ssam    elif test "x$TOOLCHAIN_TYPE" = xxlc; then
480104477Ssam      C_O_FLAG_HIGHEST="-O3"
481104477Ssam      C_O_FLAG_HI="-O3 -qstrict"
482104477Ssam      C_O_FLAG_NORM="-O2"
483104477Ssam      C_O_FLAG_DEBUG="-qnoopt"
484104477Ssam      C_O_FLAG_NONE="-qnoop"
485104477Ssam    elif test "x$TOOLCHAIN_TYPE" = xmicrosoft; then
486104477Ssam      C_O_FLAG_HIGHEST="-O2"
487104477Ssam      C_O_FLAG_HI="-O1"
488104477Ssam      C_O_FLAG_NORM="-O1"
489104477Ssam      C_O_FLAG_DEBUG="-Od"
490104477Ssam      C_O_FLAG_NONE="-Od"
491104477Ssam    fi
492104477Ssam    CXX_O_FLAG_HIGHEST="$C_O_FLAG_HIGHEST"
493104477Ssam    CXX_O_FLAG_HI="$C_O_FLAG_HI"
494104477Ssam    CXX_O_FLAG_NORM="$C_O_FLAG_NORM"
495104477Ssam    CXX_O_FLAG_DEBUG="$C_O_FLAG_DEBUG"
496104477Ssam    CXX_O_FLAG_NONE="$C_O_FLAG_NONE"
497104477Ssam  fi
498104477Ssam
499104477Ssam  # Adjust optimization flags according to debug level.
500104477Ssam  case $DEBUG_LEVEL in
501104477Ssam    release )
502104477Ssam      # no adjustment
503104477Ssam      ;;
504104477Ssam    fastdebug )
505104477Ssam      # Not quite so much optimization
506104477Ssam      C_O_FLAG_HI="$C_O_FLAG_NORM"
507104477Ssam      CXX_O_FLAG_HI="$CXX_O_FLAG_NORM"
508104477Ssam      ;;
509104477Ssam    slowdebug )
510104477Ssam      # Disable optimization
511104477Ssam      C_O_FLAG_HIGHEST="$C_O_FLAG_DEBUG"
512104477Ssam      C_O_FLAG_HI="$C_O_FLAG_DEBUG"
513104477Ssam      C_O_FLAG_NORM="$C_O_FLAG_DEBUG"
514104477Ssam      CXX_O_FLAG_HIGHEST="$CXX_O_FLAG_DEBUG"
515104477Ssam      CXX_O_FLAG_HI="$CXX_O_FLAG_DEBUG"
516104477Ssam      CXX_O_FLAG_NORM="$CXX_O_FLAG_DEBUG"
517104477Ssam      ;;
518104477Ssam  esac
519104477Ssam
520104477Ssam  AC_SUBST(C_O_FLAG_HIGHEST)
521104477Ssam  AC_SUBST(C_O_FLAG_HI)
522104477Ssam  AC_SUBST(C_O_FLAG_NORM)
523104477Ssam  AC_SUBST(C_O_FLAG_DEBUG)
524104477Ssam  AC_SUBST(C_O_FLAG_NONE)
525104477Ssam  AC_SUBST(CXX_O_FLAG_HIGHEST)
526104477Ssam  AC_SUBST(CXX_O_FLAG_HI)
527104477Ssam  AC_SUBST(CXX_O_FLAG_NORM)
528104477Ssam  AC_SUBST(CXX_O_FLAG_DEBUG)
529104477Ssam  AC_SUBST(CXX_O_FLAG_NONE)
530104477Ssam])
531104477Ssam
532104477SsamAC_DEFUN_ONCE([FLAGS_SETUP_COMPILER_FLAGS_FOR_JDK],
533104477Ssam[
534104477Ssam  # Special extras...
535104477Ssam  if test "x$TOOLCHAIN_TYPE" = xsolstudio; then
536104477Ssam    if test "x$OPENJDK_TARGET_CPU_ARCH" = "xsparc"; then
537104477Ssam      CFLAGS_JDKLIB_EXTRA="${CFLAGS_JDKLIB_EXTRA} -xregs=no%appl"
538104477Ssam      CXXFLAGS_JDKLIB_EXTRA="${CXXFLAGS_JDKLIB_EXTRA} -xregs=no%appl"
539104477Ssam    fi
540104477Ssam    CFLAGS_JDKLIB_EXTRA="${CFLAGS_JDKLIB_EXTRA} -errtags=yes -errfmt"
541104477Ssam    CXXFLAGS_JDKLIB_EXTRA="${CXXFLAGS_JDKLIB_EXTRA} -errtags=yes -errfmt"
542104477Ssam  elif test "x$TOOLCHAIN_TYPE" = xxlc; then
543104477Ssam    CFLAGS_JDK="${CFLAGS_JDK} -qchars=signed -qfullpath -qsaveopt"
544104477Ssam    CXXFLAGS_JDK="${CXXFLAGS_JDK} -qchars=signed -qfullpath -qsaveopt"
545104477Ssam  fi
546104477Ssam
547104477Ssam  CFLAGS_JDK="${CFLAGS_JDK} $EXTRA_CFLAGS"
548104477Ssam  CXXFLAGS_JDK="${CXXFLAGS_JDK} $EXTRA_CXXFLAGS"
549104477Ssam  LDFLAGS_JDK="${LDFLAGS_JDK} $EXTRA_LDFLAGS"
550104477Ssam
551104477Ssam  ###############################################################################
552104477Ssam  #
553104477Ssam  # Now setup the CFLAGS and LDFLAGS for the JDK build.
554104477Ssam  # Later we will also have CFLAGS and LDFLAGS for the hotspot subrepo build.
555104477Ssam  #
556104477Ssam
557104477Ssam  # Setup compiler/platform specific flags into
558104477Ssam  #    CFLAGS_JDK    - C Compiler flags
559104477Ssam  #    CXXFLAGS_JDK  - C++ Compiler flags
560104477Ssam  #    COMMON_CCXXFLAGS_JDK - common to C and C++
561104477Ssam  if test "x$TOOLCHAIN_TYPE" = xgcc; then
562104477Ssam    if test "x$OPENJDK_TARGET_CPU" = xx86; then
563104477Ssam      # Force compatibility with i586 on 32 bit intel platforms.
564104477Ssam      COMMON_CCXXFLAGS="${COMMON_CCXXFLAGS} -march=i586"
565104477Ssam    fi
566104477Ssam    COMMON_CCXXFLAGS_JDK="$COMMON_CCXXFLAGS $COMMON_CCXXFLAGS_JDK -Wall -Wextra -Wno-unused -Wno-unused-parameter -Wformat=2 \
567104477Ssam        -pipe -D_GNU_SOURCE -D_REENTRANT -D_LARGEFILE64_SOURCE"
568104477Ssam    case $OPENJDK_TARGET_CPU_ARCH in
569104477Ssam      arm )
570104477Ssam        # on arm we don't prevent gcc to omit frame pointer but do prevent strict aliasing
571104477Ssam        CFLAGS_JDK="${CFLAGS_JDK} -fno-strict-aliasing"
572104477Ssam        ;;
573104477Ssam      ppc )
574104477Ssam        # on ppc we don't prevent gcc to omit frame pointer but do prevent strict aliasing
575104477Ssam        CFLAGS_JDK="${CFLAGS_JDK} -fno-strict-aliasing"
576104477Ssam        ;;
577104477Ssam      * )
578104477Ssam        COMMON_CCXXFLAGS_JDK="$COMMON_CCXXFLAGS_JDK -fno-omit-frame-pointer"
579104477Ssam        CFLAGS_JDK="${CFLAGS_JDK} -fno-strict-aliasing"
580104477Ssam        ;;
581104477Ssam    esac
582104477Ssam  elif test "x$TOOLCHAIN_TYPE" = xclang; then
583104477Ssam    if test "x$OPENJDK_TARGET_OS" = xlinux; then
584104477Ssam	    if test "x$OPENJDK_TARGET_CPU" = xx86; then
585104477Ssam	      # Force compatibility with i586 on 32 bit intel platforms.
586104477Ssam	      COMMON_CCXXFLAGS="${COMMON_CCXXFLAGS} -march=i586"
587104477Ssam	    fi
588104477Ssam	    COMMON_CCXXFLAGS_JDK="$COMMON_CCXXFLAGS $COMMON_CCXXFLAGS_JDK -Wall -Wextra -Wno-unused -Wno-unused-parameter -Wformat=2 \
589104477Ssam	        -pipe -D_GNU_SOURCE -D_REENTRANT -D_LARGEFILE64_SOURCE"
590104477Ssam	    case $OPENJDK_TARGET_CPU_ARCH in
591104477Ssam	      ppc )
592104477Ssam	        # on ppc we don't prevent gcc to omit frame pointer but do prevent strict aliasing
593104477Ssam	        CFLAGS_JDK="${CFLAGS_JDK} -fno-strict-aliasing"
594104477Ssam	        ;;
595104477Ssam	      * )
596104477Ssam	        COMMON_CCXXFLAGS_JDK="$COMMON_CCXXFLAGS_JDK -fno-omit-frame-pointer"
597104477Ssam	        CFLAGS_JDK="${CFLAGS_JDK} -fno-strict-aliasing"
598104477Ssam	        ;;
599104477Ssam	    esac
600104477Ssam    fi
601104477Ssam  elif test "x$TOOLCHAIN_TYPE" = xsolstudio; then
602104477Ssam    COMMON_CCXXFLAGS_JDK="$COMMON_CCXXFLAGS $COMMON_CCXXFLAGS_JDK -DTRACING -DMACRO_MEMSYS_OPS -DBREAKPTS"
603104477Ssam    if test "x$OPENJDK_TARGET_CPU_ARCH" = xx86; then
604104477Ssam      COMMON_CCXXFLAGS_JDK="$COMMON_CCXXFLAGS_JDK -DcpuIntel -Di586 -D$OPENJDK_TARGET_CPU_LEGACY_LIB"
605104477Ssam    fi
606104477Ssam
607104477Ssam    CFLAGS_JDK="$CFLAGS_JDK -xc99=%none -xCC -errshort=tags -Xa -v -mt -W0,-noglobal"
608104477Ssam    CXXFLAGS_JDK="$CXXFLAGS_JDK -errtags=yes +w -mt -features=no%except -DCC_NOEX -norunpath -xnolib"
609104477Ssam  elif test "x$TOOLCHAIN_TYPE" = xxlc; then
610104477Ssam    CFLAGS_JDK="$CFLAGS_JDK -D_GNU_SOURCE -D_REENTRANT -D_LARGEFILE64_SOURCE -DSTDC"
611104477Ssam    CXXFLAGS_JDK="$CXXFLAGS_JDK -D_GNU_SOURCE -D_REENTRANT -D_LARGEFILE64_SOURCE -DSTDC"
612104477Ssam  elif test "x$TOOLCHAIN_TYPE" = xmicrosoft; then
613104477Ssam    COMMON_CCXXFLAGS_JDK="$COMMON_CCXXFLAGS $COMMON_CCXXFLAGS_JDK \
614104477Ssam        -Zi -MD -Zc:wchar_t- -W3 -wd4800 \
615104477Ssam        -DWIN32_LEAN_AND_MEAN \
616104477Ssam        -D_CRT_SECURE_NO_DEPRECATE -D_CRT_NONSTDC_NO_DEPRECATE \
617104477Ssam        -D_WINSOCK_DEPRECATED_NO_WARNINGS \
618104477Ssam        -DWIN32 -DIAL"
619104477Ssam    if test "x$OPENJDK_TARGET_CPU" = xx86_64; then
620104477Ssam      COMMON_CCXXFLAGS_JDK="$COMMON_CCXXFLAGS_JDK -D_AMD64_ -Damd64"
621104477Ssam    else
622104477Ssam      COMMON_CCXXFLAGS_JDK="$COMMON_CCXXFLAGS_JDK -D_X86_ -Dx86"
623104477Ssam    fi
624104477Ssam    # If building with Visual Studio 2010, we can still use _STATIC_CPPLIB to
625104477Ssam    # avoid bundling msvcpNNN.dll. Doesn't work with newer versions of visual
626104477Ssam    # studio.
627104477Ssam    if test "x$TOOLCHAIN_VERSION" = "x2010"; then
628104477Ssam      COMMON_CCXXFLAGS_JDK="$COMMON_CCXXFLAGS_JDK \
629104477Ssam          -D_STATIC_CPPLIB -D_DISABLE_DEPRECATE_STATIC_CPPLIB"
630104477Ssam    fi
631104477Ssam  fi
632104477Ssam
633104477Ssam  ###############################################################################
634104477Ssam
635104477Ssam  # Adjust flags according to debug level.
636104477Ssam  case $DEBUG_LEVEL in
637104477Ssam    fastdebug | slowdebug )
638104477Ssam      CFLAGS_JDK="$CFLAGS_JDK $CFLAGS_DEBUG_SYMBOLS $CFLAGS_DEBUG_OPTIONS"
639104477Ssam      CXXFLAGS_JDK="$CXXFLAGS_JDK $CXXFLAGS_DEBUG_SYMBOLS $CXXFLAGS_DEBUG_OPTIONS"
640104477Ssam      JAVAC_FLAGS="$JAVAC_FLAGS -g"
641104477Ssam      ;;
642104477Ssam    release )
643104477Ssam      ;;
644104477Ssam    * )
645104477Ssam      AC_MSG_ERROR([Unrecognized \$DEBUG_LEVEL: $DEBUG_LEVEL])
646104477Ssam      ;;
647104477Ssam  esac
648104477Ssam
649104477Ssam  # Setup LP64
650104477Ssam  COMMON_CCXXFLAGS_JDK="$COMMON_CCXXFLAGS_JDK $ADD_LP64"
651104477Ssam
652104477Ssam  # Set some common defines. These works for all compilers, but assume
653104477Ssam  # -D is universally accepted.
654104477Ssam
655104477Ssam  # Setup endianness
656104477Ssam  if test "x$OPENJDK_TARGET_CPU_ENDIAN" = xlittle; then
657104477Ssam    # The macro _LITTLE_ENDIAN needs to be defined the same to avoid the
658104477Ssam    #   Sun C compiler warning message: warning: macro redefined: _LITTLE_ENDIAN
659104477Ssam    #   (The Solaris X86 system defines this in file /usr/include/sys/isa_defs.h).
660104477Ssam    #   Note: -Dmacro         is the same as    #define macro 1
661104477Ssam    #         -Dmacro=        is the same as    #define macro
662104477Ssam    if test "x$OPENJDK_TARGET_OS" = xsolaris; then
663104477Ssam      COMMON_CCXXFLAGS_JDK="$COMMON_CCXXFLAGS_JDK -D_LITTLE_ENDIAN="
664105190Ssam    else
665105190Ssam      COMMON_CCXXFLAGS_JDK="$COMMON_CCXXFLAGS_JDK -D_LITTLE_ENDIAN"
666104477Ssam    fi
667104477Ssam  else
668104477Ssam    # Same goes for _BIG_ENDIAN. Do we really need to set *ENDIAN on Solaris if they
669104477Ssam    # are defined in the system?
670104477Ssam    if test "x$OPENJDK_TARGET_OS" = xsolaris; then
671104477Ssam      COMMON_CCXXFLAGS_JDK="$COMMON_CCXXFLAGS_JDK -D_BIG_ENDIAN="
672104477Ssam    else
673104477Ssam      COMMON_CCXXFLAGS_JDK="$COMMON_CCXXFLAGS_JDK -D_BIG_ENDIAN"
674104477Ssam    fi
675104477Ssam  fi
676104477Ssam
677104477Ssam  # Setup target OS define. Use OS target name but in upper case.
678104477Ssam  OPENJDK_TARGET_OS_UPPERCASE=`$ECHO $OPENJDK_TARGET_OS | $TR 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
679104477Ssam  COMMON_CCXXFLAGS_JDK="$COMMON_CCXXFLAGS_JDK -D$OPENJDK_TARGET_OS_UPPERCASE"
680104477Ssam
681104477Ssam  # Setup target CPU
682104477Ssam  COMMON_CCXXFLAGS_JDK="$COMMON_CCXXFLAGS_JDK -DARCH='\"$OPENJDK_TARGET_CPU_LEGACY\"' -D$OPENJDK_TARGET_CPU_LEGACY"
683104477Ssam
684104477Ssam  # Setup debug/release defines
685104477Ssam  if test "x$DEBUG_LEVEL" = xrelease; then
686104477Ssam    COMMON_CCXXFLAGS_JDK="$COMMON_CCXXFLAGS_JDK -DNDEBUG"
687104477Ssam    if test "x$OPENJDK_TARGET_OS" = xsolaris; then
688104477Ssam      COMMON_CCXXFLAGS_JDK="$COMMON_CCXXFLAGS_JDK -DTRIMMED"
689104477Ssam    fi
690104477Ssam  else
691104477Ssam    COMMON_CCXXFLAGS_JDK="$COMMON_CCXXFLAGS_JDK -DDEBUG"
692104477Ssam  fi
693104477Ssam
694104477Ssam  # Set some additional per-OS defines.
695104477Ssam  if test "x$OPENJDK_TARGET_OS" = xmacosx; then
696104477Ssam    COMMON_CCXXFLAGS_JDK="$COMMON_CCXXFLAGS_JDK -D_ALLBSD_SOURCE -D_DARWIN_UNLIMITED_SELECT"
697104477Ssam  elif test "x$OPENJDK_TARGET_OS" = xaix; then
698104477Ssam    # FIXME: PPC64 should not be here.
699104477Ssam    COMMON_CCXXFLAGS_JDK="$COMMON_CCXXFLAGS_JDK -DPPC64"
700104477Ssam  elif test "x$OPENJDK_TARGET_OS" = xbsd; then
701104477Ssam    COMMON_CCXXFLAGS_JDK="$COMMON_CCXXFLAGS_JDK -D_ALLBSD_SOURCE"
702104477Ssam  fi
703104477Ssam
704104477Ssam  # Additional macosx handling
705104477Ssam  if test "x$OPENJDK_TARGET_OS" = xmacosx; then
706104477Ssam    # Setting these parameters makes it an error to link to macosx APIs that are
707104477Ssam    # newer than the given OS version and makes the linked binaries compatible
708104477Ssam    # even if built on a newer version of the OS.
709104477Ssam    # The expected format is X.Y.Z
710104477Ssam    MACOSX_VERSION_MIN=10.7.0
711104477Ssam    AC_SUBST(MACOSX_VERSION_MIN)
712104477Ssam
713104477Ssam    # The macro takes the version with no dots, ex: 1070
714104477Ssam    # Let the flags variables get resolved in make for easier override on make
715104477Ssam    # command line.
716104477Ssam    COMMON_CCXXFLAGS_JDK="$COMMON_CCXXFLAGS_JDK -DMAC_OS_X_VERSION_MAX_ALLOWED=\$(subst .,,\$(MACOSX_VERSION_MIN)) -mmacosx-version-min=\$(MACOSX_VERSION_MIN)"
717104477Ssam    LDFLAGS_JDK="$LDFLAGS_JDK -mmacosx-version-min=\$(MACOSX_VERSION_MIN)"
718104477Ssam  fi
719104477Ssam
720104477Ssam  # Setup some hard coded includes
721104477Ssam  COMMON_CCXXFLAGS_JDK="$COMMON_CCXXFLAGS_JDK \
722104477Ssam      -I${JDK_TOPDIR}/src/java.base/share/native/include \
723104477Ssam      -I${JDK_TOPDIR}/src/java.base/$OPENJDK_TARGET_OS/native/include \
724104477Ssam      -I${JDK_TOPDIR}/src/java.base/$OPENJDK_TARGET_OS_TYPE/native/include \
725104477Ssam      -I${JDK_TOPDIR}/src/java.base/share/native/libjava \ 
726104477Ssam      -I${JDK_TOPDIR}/src/java.base/$OPENJDK_TARGET_OS_TYPE/native/libjava"
727104477Ssam
728104477Ssam  # The shared libraries are compiled using the picflag.
729104477Ssam  CFLAGS_JDKLIB="$COMMON_CCXXFLAGS_JDK $CFLAGS_JDK $PICFLAG $CFLAGS_JDKLIB_EXTRA"
730104477Ssam  CXXFLAGS_JDKLIB="$COMMON_CCXXFLAGS_JDK $CXXFLAGS_JDK $PICFLAG $CXXFLAGS_JDKLIB_EXTRA"
731104477Ssam
732104477Ssam  # Executable flags
733104477Ssam  CFLAGS_JDKEXE="$COMMON_CCXXFLAGS_JDK $CFLAGS_JDK"
734104477Ssam  CXXFLAGS_JDKEXE="$COMMON_CCXXFLAGS_JDK $CXXFLAGS_JDK"
735104477Ssam
736104477Ssam  AC_SUBST(CFLAGS_JDKLIB)
737104477Ssam  AC_SUBST(CFLAGS_JDKEXE)
738104477Ssam  AC_SUBST(CXXFLAGS_JDKLIB)
739104477Ssam  AC_SUBST(CXXFLAGS_JDKEXE)
740104477Ssam
741104477Ssam  # Flags for compiling test libraries
742104477Ssam  CFLAGS_TESTLIB="$COMMON_CCXXFLAGS_JDK $CFLAGS_JDK $PICFLAG $CFLAGS_JDKLIB_EXTRA"
743104477Ssam  CXXFLAGS_TESTLIB="$COMMON_CCXXFLAGS_JDK $CXXFLAGS_JDK $PICFLAG $CXXFLAGS_JDKLIB_EXTRA"
744104477Ssam
745104477Ssam  # Flags for compiling test executables
746104477Ssam  CFLAGS_TESTEXE="$COMMON_CCXXFLAGS_JDK $CFLAGS_JDK"
747104477Ssam  CXXFLAGS_TESTEXE="$COMMON_CCXXFLAGS_JDK $CXXFLAGS_JDK"
748104477Ssam
749104477Ssam  AC_SUBST(CFLAGS_TESTLIB)
750104477Ssam  AC_SUBST(CFLAGS_TESTEXE)
751104477Ssam  AC_SUBST(CXXFLAGS_TESTLIB)
752104477Ssam  AC_SUBST(CXXFLAGS_TESTEXE)
753104477Ssam
754104477Ssam  # Setup LDFLAGS et al.
755104477Ssam  #
756104477Ssam
757104477Ssam  # Now this is odd. The JDK native libraries have to link against libjvm.so
758104477Ssam  # On 32-bit machines there is normally two distinct libjvm.so:s, client and server.
759104477Ssam  # Which should we link to? Are we lucky enough that the binary api to the libjvm.so library
760104477Ssam  # is identical for client and server? Yes. Which is picked at runtime (client or server)?
761104477Ssam  # Neither, since the chosen libjvm.so has already been loaded by the launcher, all the following
762104477Ssam  # libraries will link to whatever is in memory. Yuck.
763104477Ssam  #
764104477Ssam  # Thus we offer the compiler to find libjvm.so first in server then in client. It works. Ugh.
765104477Ssam  if test "x$TOOLCHAIN_TYPE" = xmicrosoft; then
766104477Ssam    LDFLAGS_JDK="$LDFLAGS_JDK -nologo -opt:ref -incremental:no"
767104477Ssam    if test "x$OPENJDK_TARGET_CPU_BITS" = "x32"; then
768104477Ssam      LDFLAGS_JDK="$LDFLAGS_JDK -safeseh"
769104477Ssam    fi
770104477Ssam    # TODO: make -debug optional "--disable-full-debug-symbols"
771104477Ssam    LDFLAGS_JDK="$LDFLAGS_JDK -debug"
772104477Ssam  elif test "x$TOOLCHAIN_TYPE" = xgcc; then
773104477Ssam    # If this is a --hash-style=gnu system, use --hash-style=both, why?
774104477Ssam    # We have previously set HAS_GNU_HASH if this is the case
775104477Ssam    if test -n "$HAS_GNU_HASH"; then
776104477Ssam      LDFLAGS_JDK="${LDFLAGS_JDK} -Wl,--hash-style=both"
777104477Ssam    fi
778104477Ssam    if test "x$OPENJDK_TARGET_OS" = xlinux; then
779104477Ssam      # And since we now know that the linker is gnu, then add -z defs, to forbid
780104477Ssam      # undefined symbols in object files.
781104477Ssam      LDFLAGS_JDK="${LDFLAGS_JDK} -Wl,-z,defs"
782104477Ssam      case $DEBUG_LEVEL in
783104477Ssam        release )
784104477Ssam          # tell linker to optimize libraries.
785104477Ssam          # Should this be supplied to the OSS linker as well?
786104477Ssam          LDFLAGS_JDK="${LDFLAGS_JDK} -Wl,-O1"
787104477Ssam          ;;
788104477Ssam        slowdebug )
789104477Ssam          if test "x$HAS_LINKER_NOW" = "xtrue"; then
790104477Ssam            # do relocations at load
791104477Ssam            LDFLAGS_JDK="$LDFLAGS_JDK $LINKER_NOW_FLAG"
792104477Ssam            LDFLAGS_CXX_JDK="$LDFLAGS_CXX_JDK $LINKER_NOW_FLAG"
793104477Ssam          fi
794104477Ssam          if test "x$HAS_LINKER_RELRO" = "xtrue"; then
795104477Ssam            # mark relocations read only
796104477Ssam            LDFLAGS_JDK="$LDFLAGS_JDK $LINKER_RELRO_FLAG"
797104477Ssam            LDFLAGS_CXX_JDK="$LDFLAGS_CXX_JDK $LINKER_RELRO_FLAG"
798104477Ssam          fi
799104477Ssam          ;;
800104477Ssam        fastdebug )
801104477Ssam          if test "x$HAS_LINKER_RELRO" = "xtrue"; then
802104477Ssam            # mark relocations read only
803104477Ssam            LDFLAGS_JDK="$LDFLAGS_JDK $LINKER_RELRO_FLAG"
804104477Ssam            LDFLAGS_CXX_JDK="$LDFLAGS_CXX_JDK $LINKER_RELRO_FLAG"
805104477Ssam          fi
806104477Ssam          ;;
807104477Ssam        * )
808104477Ssam          AC_MSG_ERROR([Unrecognized \$DEBUG_LEVEL: $DEBUG_LEVEL])
809104477Ssam          ;;
810104477Ssam        esac
811104477Ssam    fi
812104477Ssam  elif test "x$TOOLCHAIN_TYPE" = xsolstudio; then
813104477Ssam    LDFLAGS_JDK="$LDFLAGS_JDK -Wl,-z,defs -xildoff -ztext"
814104477Ssam    LDFLAGS_CXX_JDK="$LDFLAGS_CXX_JDK -norunpath -xnolib"
815104477Ssam  elif test "x$TOOLCHAIN_TYPE" = xxlc; then
816104477Ssam    LDFLAGS_JDK="${LDFLAGS_JDK} -brtl -bnolibpath -bexpall -bernotok"
817104477Ssam  fi
818104477Ssam
819104477Ssam  # Customize LDFLAGS for executables
820104477Ssam
821104477Ssam  LDFLAGS_JDKEXE="${LDFLAGS_JDK}"
822104477Ssam
823104477Ssam  if test "x$TOOLCHAIN_TYPE" = xmicrosoft; then
824104477Ssam    if test "x$OPENJDK_TARGET_CPU_BITS" = "x64"; then
825104477Ssam      LDFLAGS_STACK_SIZE=1048576
826104477Ssam    else
827104477Ssam      LDFLAGS_STACK_SIZE=327680
828104477Ssam    fi
829104477Ssam    LDFLAGS_JDKEXE="${LDFLAGS_JDKEXE} /STACK:$LDFLAGS_STACK_SIZE"
830104477Ssam  elif test "x$OPENJDK_TARGET_OS" = xlinux; then
831104477Ssam    LDFLAGS_JDKEXE="$LDFLAGS_JDKEXE -Wl,--allow-shlib-undefined"
832104477Ssam  fi
833104477Ssam
834104477Ssam  # Customize LDFLAGS for libs
835104477Ssam  LDFLAGS_JDKLIB="${LDFLAGS_JDK}"
836104477Ssam
837104477Ssam  LDFLAGS_JDKLIB="${LDFLAGS_JDKLIB} ${SHARED_LIBRARY_FLAGS}"
838104477Ssam  if test "x$TOOLCHAIN_TYPE" = xmicrosoft; then
839104477Ssam    LDFLAGS_JDKLIB="${LDFLAGS_JDKLIB} \
840104477Ssam        -libpath:${OUTPUT_ROOT}/support/modules_libs/java.base"
841104477Ssam    JDKLIB_LIBS=""
842104477Ssam  else
843104477Ssam    LDFLAGS_JDKLIB="${LDFLAGS_JDKLIB} \
844104477Ssam        -L${OUTPUT_ROOT}/support/modules_libs/java.base${OPENJDK_TARGET_CPU_LIBDIR}"
845104477Ssam
846104477Ssam    # On some platforms (mac) the linker warns about non existing -L dirs.
847104477Ssam    # Add server first if available. Linking aginst client does not always produce the same results.
848104477Ssam    # Only add client dir if client is being built. Add minimal (note not minimal1) if only building minimal1.
849104477Ssam    # Default to server for other variants.
850104477Ssam    if test "x$JVM_VARIANT_SERVER" = xtrue; then
851104477Ssam      LDFLAGS_JDKLIB="${LDFLAGS_JDKLIB} -L${OUTPUT_ROOT}/support/modules_libs/java.base${OPENJDK_TARGET_CPU_LIBDIR}/server"
852104477Ssam    elif test "x$JVM_VARIANT_CLIENT" = xtrue; then
853104477Ssam      LDFLAGS_JDKLIB="${LDFLAGS_JDKLIB} -L${OUTPUT_ROOT}/support/modules_libs/java.base${OPENJDK_TARGET_CPU_LIBDIR}/client"
854104477Ssam    elif test "x$JVM_VARIANT_MINIMAL1" = xtrue; then
855104477Ssam      LDFLAGS_JDKLIB="${LDFLAGS_JDKLIB} -L${OUTPUT_ROOT}/support/modules_libs/java.base${OPENJDK_TARGET_CPU_LIBDIR}/minimal"
856104477Ssam    else
857104477Ssam      LDFLAGS_JDKLIB="${LDFLAGS_JDKLIB} -L${OUTPUT_ROOT}/support/modules_libs/java.base${OPENJDK_TARGET_CPU_LIBDIR}/server"
858104477Ssam    fi
859104477Ssam
860104477Ssam    JDKLIB_LIBS="-ljava -ljvm"
861104477Ssam    if test "x$TOOLCHAIN_TYPE" = xsolstudio; then
862104477Ssam      JDKLIB_LIBS="$JDKLIB_LIBS -lc"
863104477Ssam    fi
864104477Ssam  fi
865104477Ssam
866104477Ssam  AC_SUBST(LDFLAGS_JDKLIB)
867104477Ssam  AC_SUBST(LDFLAGS_JDKEXE)
868104477Ssam  AC_SUBST(JDKLIB_LIBS)
869104477Ssam  AC_SUBST(JDKEXE_LIBS)
870104477Ssam  AC_SUBST(LDFLAGS_CXX_JDK)
871104477Ssam
872104477Ssam  LDFLAGS_TESTLIB="$LDFLAGS_JDKLIB"
873104477Ssam  LDFLAGS_TESTEXE="$LDFLAGS_JDKEXE"
874104477Ssam
875104477Ssam  AC_SUBST(LDFLAGS_TESTLIB)
876104477Ssam  AC_SUBST(LDFLAGS_TESTEXE)
877104477Ssam])
878104477Ssam
879104477Ssam# FLAGS_COMPILER_CHECK_ARGUMENTS([ARGUMENT], [RUN-IF-TRUE],
880104477Ssam#                                   [RUN-IF-FALSE])
881104477Ssam# ------------------------------------------------------------
882104477Ssam# Check that the c and c++ compilers support an argument
883104477SsamAC_DEFUN([FLAGS_COMPILER_CHECK_ARGUMENTS],
884104477Ssam[
885104477Ssam  AC_MSG_CHECKING([if compiler supports "$1"])
886104477Ssam  supports=yes
887104477Ssam
888104477Ssam  saved_cflags="$CFLAGS"
889104477Ssam  CFLAGS="$CFLAGS $1"
890104477Ssam  AC_LANG_PUSH([C])
891104477Ssam  AC_COMPILE_IFELSE([AC_LANG_SOURCE([[int i;]])], [],
892104477Ssam      [supports=no])
893104477Ssam  AC_LANG_POP([C])
894104477Ssam  CFLAGS="$saved_cflags"
895104477Ssam
896104477Ssam  saved_cxxflags="$CXXFLAGS"
897104477Ssam  CXXFLAGS="$CXXFLAG $1"
898104477Ssam  AC_LANG_PUSH([C++])
899104477Ssam  AC_COMPILE_IFELSE([AC_LANG_SOURCE([[int i;]])], [],
900104477Ssam      [supports=no])
901104477Ssam  AC_LANG_POP([C++])
902104477Ssam  CXXFLAGS="$saved_cxxflags"
903104477Ssam
904104477Ssam  AC_MSG_RESULT([$supports])
905104477Ssam  if test "x$supports" = "xyes" ; then
906104477Ssam    m4_ifval([$2], [$2], [:])
907104477Ssam  else
908104477Ssam    m4_ifval([$3], [$3], [:])
909104477Ssam  fi
910104477Ssam])
911104477Ssam
912104477Ssam# FLAGS_LINKER_CHECK_ARGUMENTS([ARGUMENT], [RUN-IF-TRUE],
913104477Ssam#                                    [RUN-IF-FALSE])
914104477Ssam# ------------------------------------------------------------
915104477Ssam# Check that the linker support an argument
916104477SsamAC_DEFUN([FLAGS_LINKER_CHECK_ARGUMENTS],
917104477Ssam[
918104477Ssam  AC_MSG_CHECKING([if linker supports "$1"])
919104477Ssam  supports=yes
920104477Ssam
921104477Ssam  saved_ldflags="$LDFLAGS"
922104477Ssam  LDFLAGS="$LDFLAGS $1"
923104477Ssam  AC_LANG_PUSH([C])
924104477Ssam  AC_LINK_IFELSE([AC_LANG_PROGRAM([[]],[[]])],
925104477Ssam      [], [supports=no])
926104477Ssam  AC_LANG_POP([C])
927104477Ssam  LDFLAGS="$saved_ldflags"
928104477Ssam
929104477Ssam  AC_MSG_RESULT([$supports])
930104477Ssam  if test "x$supports" = "xyes" ; then
931104477Ssam    m4_ifval([$2], [$2], [:])
932104477Ssam  else
933104477Ssam    m4_ifval([$3], [$3], [:])
934104477Ssam  fi
935104477Ssam])
936104477Ssam
937104477SsamAC_DEFUN_ONCE([FLAGS_SETUP_COMPILER_FLAGS_MISC],
938104477Ssam[
939104477Ssam  # Some Zero and Shark settings.
940104477Ssam  # ZERO_ARCHFLAG tells the compiler which mode to build for
941104477Ssam  case "${OPENJDK_TARGET_CPU}" in
942104477Ssam    s390)
943104477Ssam      ZERO_ARCHFLAG="${COMPILER_TARGET_BITS_FLAG}31"
944104477Ssam      ;;
945104477Ssam    *)
946104477Ssam      ZERO_ARCHFLAG="${COMPILER_TARGET_BITS_FLAG}${OPENJDK_TARGET_CPU_BITS}"
947104477Ssam  esac
948104477Ssam  FLAGS_COMPILER_CHECK_ARGUMENTS([$ZERO_ARCHFLAG], [], [ZERO_ARCHFLAG=""])
949104477Ssam  AC_SUBST(ZERO_ARCHFLAG)
950104477Ssam
951104477Ssam  # Check that the compiler supports -mX (or -qX on AIX) flags
952104477Ssam  # Set COMPILER_SUPPORTS_TARGET_BITS_FLAG to 'true' if it does
953104477Ssam  FLAGS_COMPILER_CHECK_ARGUMENTS([${COMPILER_TARGET_BITS_FLAG}${OPENJDK_TARGET_CPU_BITS}],
954104477Ssam      [COMPILER_SUPPORTS_TARGET_BITS_FLAG=true],
955104477Ssam      [COMPILER_SUPPORTS_TARGET_BITS_FLAG=false])
956104477Ssam  AC_SUBST(COMPILER_SUPPORTS_TARGET_BITS_FLAG)
957104477Ssam
958104477Ssam  AC_ARG_ENABLE([warnings-as-errors], [AS_HELP_STRING([--disable-warnings-as-errors],
959104477Ssam      [do not consider native warnings to be an error @<:@enabled@:>@])])
960104477Ssam
961104477Ssam  AC_MSG_CHECKING([if native warnings are errors])
962104477Ssam  if test "x$enable_warnings_as_errors" = "xyes"; then
963104477Ssam    AC_MSG_RESULT([yes (explicitely set)])
964104477Ssam    WARNINGS_AS_ERRORS=true
965104477Ssam  elif test "x$enable_warnings_as_errors" = "xno"; then
966104477Ssam    AC_MSG_RESULT([no])
967104477Ssam    WARNINGS_AS_ERRORS=false
968104477Ssam  elif test "x$enable_warnings_as_errors" = "x"; then
969104477Ssam    AC_MSG_RESULT([yes (default)])
970104477Ssam    WARNINGS_AS_ERRORS=true
971104477Ssam  else
972104477Ssam    AC_MSG_ERROR([--enable-warnings-as-errors accepts no argument])
973104477Ssam  fi
974104477Ssam
975104477Ssam  if test "x$WARNINGS_AS_ERRORS" = "xfalse"; then
976104477Ssam    # Set legacy hotspot variable
977104477Ssam    HOTSPOT_SET_WARNINGS_AS_ERRORS="WARNINGS_ARE_ERRORS="
978104477Ssam  else
979104477Ssam    HOTSPOT_SET_WARNINGS_AS_ERRORS=""
980104477Ssam  fi
981104477Ssam
982104477Ssam  AC_SUBST(WARNINGS_AS_ERRORS)
983104477Ssam  AC_SUBST(HOTSPOT_SET_WARNINGS_AS_ERRORS)
984104477Ssam
985104477Ssam  case "${TOOLCHAIN_TYPE}" in
986104477Ssam    microsoft)
987104477Ssam      DISABLE_WARNING_PREFIX="-wd"
988104477Ssam      CFLAGS_WARNINGS_ARE_ERRORS="-WX"
989104477Ssam      ;;
990104477Ssam    solstudio)
991104477Ssam      DISABLE_WARNING_PREFIX="-erroff="
992104477Ssam      CFLAGS_WARNINGS_ARE_ERRORS="-errtags -errwarn=%all"
993104477Ssam      ;;
994104477Ssam    gcc)
995104477Ssam      # Prior to gcc 4.4, a -Wno-X where X is unknown for that version of gcc will cause an error
996104477Ssam      FLAGS_COMPILER_CHECK_ARGUMENTS([-Wno-this-is-a-warning-that-do-not-exist],
997104477Ssam          [GCC_CAN_DISABLE_WARNINGS=true],
998104477Ssam          [GCC_CAN_DISABLE_WARNINGS=false]
999104477Ssam      )
1000104477Ssam      if test "x$GCC_CAN_DISABLE_WARNINGS" = "xtrue"; then
1001104477Ssam        DISABLE_WARNING_PREFIX="-Wno-"
1002104477Ssam      else
1003104477Ssam        DISABLE_WARNING_PREFIX=
1004104477Ssam      fi
1005104477Ssam      CFLAGS_WARNINGS_ARE_ERRORS="-Werror"
1006104477Ssam      # Repeate the check for the BUILD_CC
1007104477Ssam      CC_OLD="$CC"
1008104477Ssam      CC="$BUILD_CC"
1009104477Ssam      FLAGS_COMPILER_CHECK_ARGUMENTS([-Wno-this-is-a-warning-that-do-not-exist],
1010104477Ssam          [BUILD_CC_CAN_DISABLE_WARNINGS=true],
1011104477Ssam          [BUILD_CC_CAN_DISABLE_WARNINGS=false]
1012104477Ssam      )
1013104477Ssam      if test "x$BUILD_CC_CAN_DISABLE_WARNINGS" = "xtrue"; then
1014104477Ssam        BUILD_CC_DISABLE_WARNING_PREFIX="-Wno-"
1015104477Ssam      else
1016104477Ssam        BUILD_CC_DISABLE_WARNING_PREFIX=
1017104477Ssam      fi
1018104477Ssam      CC="$CC_OLD"
1019104477Ssam      ;;
1020104477Ssam    clang)
1021104477Ssam      DISABLE_WARNING_PREFIX="-Wno-"
1022104477Ssam      CFLAGS_WARNINGS_ARE_ERRORS="-Werror"
1023104477Ssam      ;;
1024104477Ssam  esac
1025104477Ssam  AC_SUBST(DISABLE_WARNING_PREFIX)
1026104477Ssam  AC_SUBST(CFLAGS_WARNINGS_ARE_ERRORS)
1027104477Ssam])
1028104477Ssam