1#
2# Copyright (c) 2011, 2018, Oracle and/or its affiliates. All rights reserved.
3# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4#
5# This code is free software; you can redistribute it and/or modify it
6# under the terms of the GNU General Public License version 2 only, as
7# published by the Free Software Foundation.  Oracle designates this
8# particular file as subject to the "Classpath" exception as provided
9# by Oracle in the LICENSE file that accompanied this code.
10#
11# This code is distributed in the hope that it will be useful, but WITHOUT
12# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
13# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
14# version 2 for more details (a copy is included in the LICENSE file that
15# accompanied this code).
16#
17# You should have received a copy of the GNU General Public License version
18# 2 along with this work; if not, write to the Free Software Foundation,
19# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
20#
21# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
22# or visit www.oracle.com if you need additional information or have any
23# questions.
24#
25
26# Support macro for PLATFORM_EXTRACT_TARGET_AND_BUILD.
27# Converts autoconf style CPU name to OpenJDK style, into
28# VAR_CPU, VAR_CPU_ARCH, VAR_CPU_BITS and VAR_CPU_ENDIAN.
29AC_DEFUN([PLATFORM_EXTRACT_VARS_FROM_CPU],
30[
31  # First argument is the cpu name from the trip/quad
32  case "$1" in
33    amd64|x86_64)
34      VAR_CPU=x86_64
35      VAR_CPU_ARCH=x86
36      VAR_CPU_BITS=64
37      VAR_CPU_ENDIAN=little
38      ;;
39    i?86)
40      VAR_CPU=x86
41      VAR_CPU_ARCH=x86
42      VAR_CPU_BITS=32
43      VAR_CPU_ENDIAN=little
44      ;;
45    alpha*)
46      VAR_CPU=alpha
47      VAR_CPU_ARCH=alpha
48      VAR_CPU_BITS=64
49      VAR_CPU_ENDIAN=little
50      ;;
51    arm*)
52      VAR_CPU=arm
53      VAR_CPU_ARCH=arm
54      VAR_CPU_BITS=32
55      VAR_CPU_ENDIAN=little
56      ;;
57    aarch64)
58      VAR_CPU=aarch64
59      VAR_CPU_ARCH=aarch64
60      VAR_CPU_BITS=64
61      VAR_CPU_ENDIAN=little
62      ;;
63    ia64)
64      VAR_CPU=ia64
65      VAR_CPU_ARCH=ia64
66      VAR_CPU_BITS=64
67      VAR_CPU_ENDIAN=little
68      ;;
69    m68k)
70      VAR_CPU=m68k
71      VAR_CPU_ARCH=m68k
72      VAR_CPU_BITS=32
73      VAR_CPU_ENDIAN=big
74      ;;
75    mips)
76      VAR_CPU=mips
77      VAR_CPU_ARCH=mips
78      VAR_CPU_BITS=32
79      VAR_CPU_ENDIAN=big
80      ;;
81    mipsel)
82      VAR_CPU=mipsel
83      VAR_CPU_ARCH=mipsel
84      VAR_CPU_BITS=32
85      VAR_CPU_ENDIAN=little
86      ;;
87    mips64)
88      VAR_CPU=mips64
89      VAR_CPU_ARCH=mips64
90      VAR_CPU_BITS=64
91      VAR_CPU_ENDIAN=big
92      ;;
93    mips64el)
94      VAR_CPU=mips64el
95      VAR_CPU_ARCH=mips64el
96      VAR_CPU_BITS=64
97      VAR_CPU_ENDIAN=little
98      ;;
99    powerpc)
100      VAR_CPU=ppc
101      VAR_CPU_ARCH=ppc
102      VAR_CPU_BITS=32
103      VAR_CPU_ENDIAN=big
104      ;;
105    powerpc64)
106      VAR_CPU=ppc64
107      VAR_CPU_ARCH=ppc
108      VAR_CPU_BITS=64
109      VAR_CPU_ENDIAN=big
110      ;;
111    powerpc64le)
112      VAR_CPU=ppc64le
113      VAR_CPU_ARCH=ppc
114      VAR_CPU_BITS=64
115      VAR_CPU_ENDIAN=little
116      ;;
117    s390)
118      VAR_CPU=s390
119      VAR_CPU_ARCH=s390
120      VAR_CPU_BITS=32
121      VAR_CPU_ENDIAN=big
122      ;;
123    s390x)
124      VAR_CPU=s390x
125      VAR_CPU_ARCH=s390
126      VAR_CPU_BITS=64
127      VAR_CPU_ENDIAN=big
128      ;;
129    sh*eb)
130      VAR_CPU=sh
131      VAR_CPU_ARCH=sh
132      VAR_CPU_BITS=32
133      VAR_CPU_ENDIAN=big
134      ;;
135    sh*)
136      VAR_CPU=sh
137      VAR_CPU_ARCH=sh
138      VAR_CPU_BITS=32
139      VAR_CPU_ENDIAN=little
140      ;;
141    sparc)
142      VAR_CPU=sparc
143      VAR_CPU_ARCH=sparc
144      VAR_CPU_BITS=32
145      VAR_CPU_ENDIAN=big
146      ;;
147    sparcv9|sparc64)
148      VAR_CPU=sparcv9
149      VAR_CPU_ARCH=sparc
150      VAR_CPU_BITS=64
151      VAR_CPU_ENDIAN=big
152      ;;
153    *)
154      AC_MSG_ERROR([unsupported cpu $1])
155      ;;
156  esac
157])
158
159# Support macro for PLATFORM_EXTRACT_TARGET_AND_BUILD.
160# Converts autoconf style OS name to OpenJDK style, into
161# VAR_OS, VAR_OS_TYPE and VAR_OS_ENV.
162AC_DEFUN([PLATFORM_EXTRACT_VARS_FROM_OS],
163[
164  case "$1" in
165    *linux*)
166      VAR_OS=linux
167      VAR_OS_TYPE=unix
168      ;;
169    *solaris*)
170      VAR_OS=solaris
171      VAR_OS_TYPE=unix
172      ;;
173    *darwin*)
174      VAR_OS=macosx
175      VAR_OS_TYPE=unix
176      ;;
177    *bsd*|*dragonfly*)
178      VAR_OS=bsd
179      VAR_OS_TYPE=unix
180      case "$1" in
181        *freebsd*|*dragonfly*)
182          VAR_OS_ENV=bsd.freebsd ;;
183        *openbsd*)
184          VAR_OS_ENV=bsd.openbsd ;;
185        *netbsd*)
186          VAR_OS_ENV=bsd.netbsd ;;
187      esac
188      ;;
189    *cygwin*)
190      VAR_OS=windows
191      VAR_OS_ENV=windows.cygwin
192      ;;
193    *mingw*)
194      VAR_OS=windows
195      VAR_OS_ENV=windows.msys
196      ;;
197    *aix*)
198      VAR_OS=aix
199      VAR_OS_TYPE=unix
200      ;;
201    *)
202      AC_MSG_ERROR([unsupported operating system $1])
203      ;;
204  esac
205])
206
207# Support macro for PLATFORM_EXTRACT_TARGET_AND_BUILD.
208# Converts autoconf style OS name to OpenJDK style, into
209# VAR_ABI.
210AC_DEFUN([PLATFORM_EXTRACT_VARS_FROM_ABI],
211[
212  case "$1" in
213    *linux*-musl)
214      VAR_ABI=musl
215      ;;
216    *linux*-gnu)
217      VAR_ABI=gnu
218      ;;
219    *linux*-gnueabi)
220      VAR_ABI=gnueabi
221      ;;
222    *linux*-gnueabihf)
223      VAR_ABI=gnueabihf
224      ;;
225    *linux*-gnuabi64)
226      VAR_ABI=gnuabi64
227      ;;
228    *)
229      VAR_ABI=default
230      ;;
231  esac
232])
233
234# Expects $host_os $host_cpu $build_os and $build_cpu
235# and $with_target_bits to have been setup!
236#
237# Translate the standard triplet(quadruplet) definition
238# of the target/build system into OPENJDK_TARGET_OS, OPENJDK_TARGET_CPU,
239# OPENJDK_BUILD_OS, etc.
240AC_DEFUN([PLATFORM_EXTRACT_TARGET_AND_BUILD],
241[
242  # Copy the autoconf trip/quadruplet verbatim to OPENJDK_TARGET_AUTOCONF_NAME
243  # (from the autoconf "host") and OPENJDK_BUILD_AUTOCONF_NAME
244  # Note that we might later on rewrite e.g. OPENJDK_TARGET_CPU due to reduced build,
245  # but this will not change the value of OPENJDK_TARGET_AUTOCONF_NAME.
246  OPENJDK_TARGET_AUTOCONF_NAME="$host"
247  OPENJDK_BUILD_AUTOCONF_NAME="$build"
248  AC_SUBST(OPENJDK_TARGET_AUTOCONF_NAME)
249  AC_SUBST(OPENJDK_BUILD_AUTOCONF_NAME)
250
251  # Convert the autoconf OS/CPU value to our own data, into the VAR_OS/CPU variables.
252  PLATFORM_EXTRACT_VARS_FROM_OS($build_os)
253  PLATFORM_EXTRACT_VARS_FROM_CPU($build_cpu)
254  PLATFORM_EXTRACT_VARS_FROM_ABI($build_os)
255  # ..and setup our own variables. (Do this explicitly to facilitate searching)
256  OPENJDK_BUILD_OS="$VAR_OS"
257  if test "x$VAR_OS_TYPE" != x; then
258    OPENJDK_BUILD_OS_TYPE="$VAR_OS_TYPE"
259  else
260    OPENJDK_BUILD_OS_TYPE="$VAR_OS"
261  fi
262  if test "x$VAR_OS_ENV" != x; then
263    OPENJDK_BUILD_OS_ENV="$VAR_OS_ENV"
264  else
265    OPENJDK_BUILD_OS_ENV="$VAR_OS"
266  fi
267  OPENJDK_BUILD_CPU="$VAR_CPU"
268  OPENJDK_BUILD_CPU_ARCH="$VAR_CPU_ARCH"
269  OPENJDK_BUILD_CPU_BITS="$VAR_CPU_BITS"
270  OPENJDK_BUILD_CPU_ENDIAN="$VAR_CPU_ENDIAN"
271  OPENJDK_BUILD_CPU_AUTOCONF="$build_cpu"
272  OPENJDK_BUILD_ABI="$VAR_ABI"
273  AC_SUBST(OPENJDK_BUILD_OS)
274  AC_SUBST(OPENJDK_BUILD_OS_TYPE)
275  AC_SUBST(OPENJDK_BUILD_OS_ENV)
276  AC_SUBST(OPENJDK_BUILD_CPU)
277  AC_SUBST(OPENJDK_BUILD_CPU_ARCH)
278  AC_SUBST(OPENJDK_BUILD_CPU_BITS)
279  AC_SUBST(OPENJDK_BUILD_CPU_ENDIAN)
280  AC_SUBST(OPENJDK_BUILD_CPU_AUTOCONF)
281  AC_SUBST(OPENJDK_BUILD_ABI)
282
283  AC_MSG_CHECKING([openjdk-build os-cpu])
284  AC_MSG_RESULT([$OPENJDK_BUILD_OS-$OPENJDK_BUILD_CPU])
285
286  # Convert the autoconf OS/CPU value to our own data, into the VAR_OS/CPU variables.
287  PLATFORM_EXTRACT_VARS_FROM_OS($host_os)
288  PLATFORM_EXTRACT_VARS_FROM_CPU($host_cpu)
289  PLATFORM_EXTRACT_VARS_FROM_ABI($host_os)
290  # ... and setup our own variables. (Do this explicitly to facilitate searching)
291  OPENJDK_TARGET_OS="$VAR_OS"
292  if test "x$VAR_OS_TYPE" != x; then
293    OPENJDK_TARGET_OS_TYPE="$VAR_OS_TYPE"
294  else
295    OPENJDK_TARGET_OS_TYPE="$VAR_OS"
296  fi
297  if test "x$VAR_OS_ENV" != x; then
298    OPENJDK_TARGET_OS_ENV="$VAR_OS_ENV"
299  else
300    OPENJDK_TARGET_OS_ENV="$VAR_OS"
301  fi
302  OPENJDK_TARGET_CPU="$VAR_CPU"
303  OPENJDK_TARGET_CPU_ARCH="$VAR_CPU_ARCH"
304  OPENJDK_TARGET_CPU_BITS="$VAR_CPU_BITS"
305  OPENJDK_TARGET_CPU_ENDIAN="$VAR_CPU_ENDIAN"
306  OPENJDK_TARGET_CPU_AUTOCONF="$host_cpu"
307  OPENJDK_TARGET_OS_UPPERCASE=`$ECHO $OPENJDK_TARGET_OS | $TR 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
308  OPENJDK_TARGET_ABI="$VAR_ABI"
309
310  AC_SUBST(OPENJDK_TARGET_OS)
311  AC_SUBST(OPENJDK_TARGET_OS_TYPE)
312  AC_SUBST(OPENJDK_TARGET_OS_ENV)
313  AC_SUBST(OPENJDK_TARGET_OS_UPPERCASE)
314  AC_SUBST(OPENJDK_TARGET_CPU)
315  AC_SUBST(OPENJDK_TARGET_CPU_ARCH)
316  AC_SUBST(OPENJDK_TARGET_CPU_BITS)
317  AC_SUBST(OPENJDK_TARGET_CPU_ENDIAN)
318  AC_SUBST(OPENJDK_TARGET_CPU_AUTOCONF)
319  AC_SUBST(OPENJDK_TARGET_ABI)
320
321  AC_MSG_CHECKING([openjdk-target os-cpu])
322  AC_MSG_RESULT([$OPENJDK_TARGET_OS-$OPENJDK_TARGET_CPU])
323
324  if test "x$OPENJDK_TARGET_OS_ENV" != "x$OPENJDK_TARGET_OS"; then
325    AC_MSG_CHECKING([openjdk-target os-env])
326    AC_MSG_RESULT([$OPENJDK_TARGET_OS_ENV])
327  fi
328])
329
330# Check if a reduced build (32-bit on 64-bit platforms) is requested, and modify behaviour
331# accordingly. Must be done after setting up build and target system, but before
332# doing anything else with these values.
333AC_DEFUN([PLATFORM_SETUP_TARGET_CPU_BITS],
334[
335  AC_ARG_WITH(target-bits, [AS_HELP_STRING([--with-target-bits],
336       [build 32-bit or 64-bit binaries (for platforms that support it), e.g. --with-target-bits=32 @<:@guessed@:>@])])
337
338  # We have three types of compiles:
339  # native  == normal compilation, target system == build system
340  # cross   == traditional cross compilation, target system != build system; special toolchain needed
341  # reduced == using native compilers, but with special flags (e.g. -m32) to produce 32-bit builds on 64-bit machines
342  #
343  if test "x$OPENJDK_BUILD_AUTOCONF_NAME" != "x$OPENJDK_TARGET_AUTOCONF_NAME"; then
344    # We're doing a proper cross-compilation
345    COMPILE_TYPE="cross"
346  else
347    COMPILE_TYPE="native"
348  fi
349
350  if test "x$with_target_bits" != x; then
351    if test "x$COMPILE_TYPE" = "xcross"; then
352      AC_MSG_ERROR([It is not possible to combine --with-target-bits=X and proper cross-compilation. Choose either.])
353    fi
354
355    if test "x$with_target_bits" = x32 && test "x$OPENJDK_TARGET_CPU_BITS" = x64; then
356      # A reduced build is requested
357      COMPILE_TYPE="reduced"
358      OPENJDK_TARGET_CPU_BITS=32
359      if test "x$OPENJDK_TARGET_CPU_ARCH" = "xx86"; then
360        OPENJDK_TARGET_CPU=x86
361      elif test "x$OPENJDK_TARGET_CPU_ARCH" = "xsparc"; then
362        OPENJDK_TARGET_CPU=sparc
363      else
364        AC_MSG_ERROR([Reduced build (--with-target-bits=32) is only supported on x86_64 and sparcv9])
365      fi
366    elif test "x$with_target_bits" = x64 && test "x$OPENJDK_TARGET_CPU_BITS" = x32; then
367      AC_MSG_ERROR([It is not possible to use --with-target-bits=64 on a 32 bit system. Use proper cross-compilation instead.])
368    elif test "x$with_target_bits" = "x$OPENJDK_TARGET_CPU_BITS"; then
369      AC_MSG_NOTICE([--with-target-bits are set to build platform address size; argument has no meaning])
370    else
371      AC_MSG_ERROR([--with-target-bits can only be 32 or 64, you specified $with_target_bits!])
372    fi
373  fi
374  AC_SUBST(COMPILE_TYPE)
375
376  AC_MSG_CHECKING([compilation type])
377  AC_MSG_RESULT([$COMPILE_TYPE])
378])
379
380# Setup the legacy variables, for controlling the old makefiles.
381#
382AC_DEFUN([PLATFORM_SETUP_LEGACY_VARS],
383[
384  PLATFORM_SETUP_LEGACY_VARS_HELPER([TARGET])
385  PLATFORM_SETUP_LEGACY_VARS_HELPER([BUILD])
386])
387
388# $1 - Either TARGET or BUILD to setup the variables for.
389AC_DEFUN([PLATFORM_SETUP_LEGACY_VARS_HELPER],
390[
391  # Also store the legacy naming of the cpu.
392  # Ie i586 and amd64 instead of x86 and x86_64
393  OPENJDK_$1_CPU_LEGACY="$OPENJDK_$1_CPU"
394  if test "x$OPENJDK_$1_CPU" = xx86; then
395    OPENJDK_$1_CPU_LEGACY="i586"
396  elif test "x$OPENJDK_$1_OS" != xmacosx && test "x$OPENJDK_$1_CPU" = xx86_64; then
397    # On all platforms except MacOSX replace x86_64 with amd64.
398    OPENJDK_$1_CPU_LEGACY="amd64"
399  elif test "x$OPENJDK_$1_CPU" = xalpha; then
400    # Avoid name collisions with variables named alpha
401    OPENJDK_$1_CPU_LEGACY="_alpha_"
402  elif test "x$OPENJDK_$1_CPU" = xsh; then
403    # Avoid name collisions with variables named sh
404    OPENJDK_$1_CPU_LEGACY="_sh_"
405  fi
406  AC_SUBST(OPENJDK_$1_CPU_LEGACY)
407
408  # And the second legacy naming of the cpu.
409  # Ie i386 and amd64 instead of x86 and x86_64.
410  OPENJDK_$1_CPU_LEGACY_LIB="$OPENJDK_$1_CPU"
411  if test "x$OPENJDK_$1_CPU" = xx86; then
412    OPENJDK_$1_CPU_LEGACY_LIB="i386"
413  elif test "x$OPENJDK_$1_CPU" = xx86_64; then
414    OPENJDK_$1_CPU_LEGACY_LIB="amd64"
415  fi
416  AC_SUBST(OPENJDK_$1_CPU_LEGACY_LIB)
417
418  # OPENJDK_$1_CPU_ISADIR is normally empty. On 64-bit Solaris systems, it is set to
419  # /amd64 or /sparcv9. This string is appended to some library paths, like this:
420  # /usr/lib${OPENJDK_$1_CPU_ISADIR}/libexample.so
421  OPENJDK_$1_CPU_ISADIR=""
422  if test "x$OPENJDK_$1_OS" = xsolaris; then
423    if test "x$OPENJDK_$1_CPU" = xx86_64; then
424      OPENJDK_$1_CPU_ISADIR="/amd64"
425    elif test "x$OPENJDK_$1_CPU" = xsparcv9; then
426      OPENJDK_$1_CPU_ISADIR="/sparcv9"
427    fi
428  fi
429  AC_SUBST(OPENJDK_$1_CPU_ISADIR)
430
431  # Setup OPENJDK_$1_CPU_OSARCH, which is used to set the os.arch Java system property
432  OPENJDK_$1_CPU_OSARCH="$OPENJDK_$1_CPU"
433  if test "x$OPENJDK_TARGET_OS" = xbsd -o "x$OPENJDK_$1_OS" = xlinux && test "x$OPENJDK_$1_CPU" = xx86; then
434    # On linux and BSD only, we replace x86 with i386.
435    OPENJDK_$1_CPU_OSARCH="i386"
436  elif test "x$OPENJDK_$1_OS" != xmacosx && test "x$OPENJDK_$1_CPU" = xx86_64; then
437    # On all platforms except macosx, we replace x86_64 with amd64.
438    OPENJDK_$1_CPU_OSARCH="amd64"
439  fi
440  AC_SUBST(OPENJDK_$1_CPU_OSARCH)
441
442  OPENJDK_$1_CPU_JLI="$OPENJDK_$1_CPU"
443  if test "x$OPENJDK_$1_CPU" = xx86; then
444    OPENJDK_$1_CPU_JLI="i386"
445  elif test "x$OPENJDK_$1_OS" != xmacosx && test "x$OPENJDK_$1_CPU" = xx86_64; then
446    # On all platforms except macosx, we replace x86_64 with amd64.
447    OPENJDK_$1_CPU_JLI="amd64"
448  fi
449
450  # The new version string in JDK 9 also defined new naming of OS and ARCH for bundles
451  # Macosx is osx and x86_64 is x64
452  if test "x$OPENJDK_$1_OS" = xmacosx; then
453    OPENJDK_$1_OS_BUNDLE="osx"
454  else
455    OPENJDK_$1_OS_BUNDLE="$OPENJDK_TARGET_OS"
456  fi
457  if test "x$OPENJDK_$1_CPU" = xx86_64; then
458    OPENJDK_$1_CPU_BUNDLE="x64"
459  else
460    OPENJDK_$1_CPU_BUNDLE="$OPENJDK_$1_CPU"
461  fi
462  OPENJDK_$1_BUNDLE_PLATFORM="${OPENJDK_$1_OS_BUNDLE}-${OPENJDK_$1_CPU_BUNDLE}"
463  AC_SUBST(OPENJDK_$1_BUNDLE_PLATFORM)
464
465  if test "x$COMPILE_TYPE" = "xcross"; then
466    # FIXME: ... or should this include reduced builds..?
467    DEFINE_CROSS_COMPILE_ARCH="CROSS_COMPILE_ARCH:=$OPENJDK_$1_CPU_LEGACY"
468  else
469    DEFINE_CROSS_COMPILE_ARCH=""
470  fi
471  AC_SUBST(DEFINE_CROSS_COMPILE_ARCH)
472
473  # Convert openjdk platform names to hotspot names
474
475  HOTSPOT_$1_OS=${OPENJDK_$1_OS}
476  if test "x$OPENJDK_$1_OS" = xmacosx; then
477    HOTSPOT_$1_OS=bsd
478  fi
479  AC_SUBST(HOTSPOT_$1_OS)
480
481  HOTSPOT_$1_OS_TYPE=${OPENJDK_$1_OS_TYPE}
482  if test "x$OPENJDK_$1_OS_TYPE" = xunix; then
483    HOTSPOT_$1_OS_TYPE=posix
484  fi
485  AC_SUBST(HOTSPOT_$1_OS_TYPE)
486
487  HOTSPOT_$1_CPU=${OPENJDK_$1_CPU}
488  if test "x$OPENJDK_$1_CPU" = xx86; then
489    HOTSPOT_$1_CPU=x86_32
490  elif test "x$OPENJDK_$1_CPU" = xsparcv9; then
491    HOTSPOT_$1_CPU=sparc
492  elif test "x$OPENJDK_$1_CPU" = xppc64; then
493    HOTSPOT_$1_CPU=ppc_64
494  elif test "x$OPENJDK_$1_CPU" = xppc64le; then
495    HOTSPOT_$1_CPU=ppc_64
496  fi
497  AC_SUBST(HOTSPOT_$1_CPU)
498
499  # This is identical with OPENJDK_*, but define anyway for consistency.
500  HOTSPOT_$1_CPU_ARCH=${OPENJDK_$1_CPU_ARCH}
501  AC_SUBST(HOTSPOT_$1_CPU_ARCH)
502
503  # Setup HOTSPOT_$1_CPU_DEFINE
504  if test "x$OPENJDK_$1_CPU" = xx86; then
505    HOTSPOT_$1_CPU_DEFINE=IA32
506  elif test "x$OPENJDK_$1_CPU" = xx86_64; then
507    HOTSPOT_$1_CPU_DEFINE=AMD64
508  elif test "x$OPENJDK_$1_CPU" = xsparcv9; then
509    HOTSPOT_$1_CPU_DEFINE=SPARC
510  elif test "x$OPENJDK_$1_CPU" = xaarch64; then
511    HOTSPOT_$1_CPU_DEFINE=AARCH64
512  elif test "x$OPENJDK_$1_CPU" = xppc64; then
513    HOTSPOT_$1_CPU_DEFINE=PPC64
514  elif test "x$OPENJDK_$1_CPU" = xppc64le; then
515    HOTSPOT_$1_CPU_DEFINE=PPC64
516
517  # The cpu defines below are for zero, we don't support them directly.
518  elif test "x$OPENJDK_$1_CPU" = xsparc; then
519    HOTSPOT_$1_CPU_DEFINE=SPARC
520  elif test "x$OPENJDK_$1_CPU" = xppc; then
521    HOTSPOT_$1_CPU_DEFINE=PPC32
522  elif test "x$OPENJDK_$1_CPU" = xs390; then
523    HOTSPOT_$1_CPU_DEFINE=S390
524  elif test "x$OPENJDK_$1_CPU" = xs390x; then
525    HOTSPOT_$1_CPU_DEFINE=S390
526  elif test "x$OPENJDK_$1_CPU" != x; then
527    HOTSPOT_$1_CPU_DEFINE=$(echo $OPENJDK_$1_CPU | tr a-z A-Z)
528  fi
529  AC_SUBST(HOTSPOT_$1_CPU_DEFINE)
530
531  # For historical reasons, the OS include directories have odd names.
532  OPENJDK_$1_OS_INCLUDE_SUBDIR="$OPENJDK_TARGET_OS"
533  if test "x$OPENJDK_TARGET_OS" = "xwindows"; then
534    OPENJDK_$1_OS_INCLUDE_SUBDIR="win32"
535  elif test "x$OPENJDK_TARGET_OS" = "xmacosx"; then
536    OPENJDK_$1_OS_INCLUDE_SUBDIR="darwin"
537  elif test "x$OPENJDK_TARGET_OS" = "xbsd"; then
538    OPENJDK_$1_OS_INCLUDE_SUBDIR=`echo ${OPENJDK_TARGET_OS_ENV} | cut -d'.' -f2`
539  fi
540  AC_SUBST(OPENJDK_$1_OS_INCLUDE_SUBDIR)
541])
542
543AC_DEFUN([PLATFORM_SET_RELEASE_FILE_OS_VALUES],
544[
545  if test "x$OPENJDK_TARGET_OS" = "xsolaris"; then
546    RELEASE_FILE_OS_NAME=SunOS
547  fi
548  if test "x$OPENJDK_TARGET_OS" = "xlinux"; then
549    RELEASE_FILE_OS_NAME=Linux
550  fi
551  if test "x$OPENJDK_TARGET_OS" = "xwindows"; then
552    RELEASE_FILE_OS_NAME=Windows
553  fi
554  if test "x$OPENJDK_TARGET_OS" = xmacosx; then
555    RELEASE_FILE_OS_NAME="Darwin"
556  fi
557  if test "x$OPENJDK_TARGET_OS" = "xaix"; then
558    RELEASE_FILE_OS_NAME="AIX"
559  fi
560  RELEASE_FILE_OS_ARCH=${OPENJDK_TARGET_CPU}
561
562  AC_SUBST(RELEASE_FILE_OS_NAME)
563  AC_SUBST(RELEASE_FILE_OS_ARCH)
564])
565
566AC_DEFUN([PLATFORM_SET_MODULE_TARGET_OS_VALUES],
567[
568  if test "x$OPENJDK_TARGET_OS" = xmacosx; then
569    OPENJDK_MODULE_TARGET_OS_NAME="macos"
570  else
571    OPENJDK_MODULE_TARGET_OS_NAME="$OPENJDK_TARGET_OS"
572  fi
573
574  if test "x$OPENJDK_TARGET_CPU" = xx86_64; then
575    OPENJDK_MODULE_TARGET_OS_ARCH="amd64"
576  else
577    OPENJDK_MODULE_TARGET_OS_ARCH="$OPENJDK_TARGET_CPU"
578  fi
579
580  OPENJDK_MODULE_TARGET_PLATFORM="${OPENJDK_MODULE_TARGET_OS_NAME}-${OPENJDK_MODULE_TARGET_OS_ARCH}"
581  AC_SUBST(OPENJDK_MODULE_TARGET_PLATFORM)
582])
583
584#%%% Build and target systems %%%
585AC_DEFUN_ONCE([PLATFORM_SETUP_OPENJDK_BUILD_AND_TARGET],
586[
587  # Figure out the build and target systems. # Note that in autoconf terminology, "build" is obvious, but "target"
588  # is confusing; it assumes you are cross-compiling a cross-compiler (!)  and "target" is thus the target of the
589  # product you're building. The target of this build is called "host". Since this is confusing to most people, we
590  # have not adopted that system, but use "target" as the platform we are building for. In some places though we need
591  # to use the configure naming style.
592  AC_CANONICAL_BUILD
593  AC_CANONICAL_HOST
594  AC_CANONICAL_TARGET
595
596  PLATFORM_EXTRACT_TARGET_AND_BUILD
597  PLATFORM_SETUP_TARGET_CPU_BITS
598  PLATFORM_SET_MODULE_TARGET_OS_VALUES
599  PLATFORM_SET_RELEASE_FILE_OS_VALUES
600  PLATFORM_SETUP_LEGACY_VARS
601])
602
603AC_DEFUN_ONCE([PLATFORM_SETUP_OPENJDK_BUILD_OS_VERSION],
604[
605  ###############################################################################
606
607  # Note that this is the build platform OS version!
608
609  OS_VERSION="`uname -r | ${SED} 's!\.! !g' | ${SED} 's!-! !g'`"
610  OS_VERSION_MAJOR="`${ECHO} ${OS_VERSION} | ${CUT} -f 1 -d ' '`"
611  OS_VERSION_MINOR="`${ECHO} ${OS_VERSION} | ${CUT} -f 2 -d ' '`"
612  OS_VERSION_MICRO="`${ECHO} ${OS_VERSION} | ${CUT} -f 3 -d ' '`"
613  AC_SUBST(OS_VERSION_MAJOR)
614  AC_SUBST(OS_VERSION_MINOR)
615  AC_SUBST(OS_VERSION_MICRO)
616])
617
618AC_DEFUN_ONCE([PLATFORM_SETUP_OPENJDK_TARGET_BITS],
619[
620  ###############################################################################
621  #
622  # Now we check if libjvm.so will use 32 or 64 bit pointers for the C/C++ code.
623  # (The JVM can use 32 or 64 bit Java pointers but that decision
624  # is made at runtime.)
625  #
626
627  # Make compilation sanity check
628  AC_CHECK_HEADERS([stdio.h], , [
629    AC_MSG_NOTICE([Failed to compile stdio.h. This likely implies missing compile dependencies.])
630    if test "x$COMPILE_TYPE" = xreduced; then
631      HELP_MSG_MISSING_DEPENDENCY([reduced])
632      AC_MSG_NOTICE([You are doing a reduced build. Check that you have 32-bit libraries installed. $HELP_MSG])
633    elif test "x$COMPILE_TYPE" = xcross; then
634      AC_MSG_NOTICE([You are doing a cross-compilation. Check that you have all target platform libraries installed.])
635    fi
636    AC_MSG_ERROR([Cannot continue.])
637  ])
638
639  AC_CHECK_SIZEOF([int *], [1111])
640
641  # AC_CHECK_SIZEOF defines 'ac_cv_sizeof_int_p' to hold the number of bytes used by an 'int*'
642  if test "x$ac_cv_sizeof_int_p" = x; then
643    # The test failed, lets stick to the assumed value.
644    AC_MSG_WARN([The number of bits in the target could not be determined, using $OPENJDK_TARGET_CPU_BITS.])
645  else
646    TESTED_TARGET_CPU_BITS=`expr 8 \* $ac_cv_sizeof_int_p`
647
648    if test "x$TESTED_TARGET_CPU_BITS" != "x$OPENJDK_TARGET_CPU_BITS"; then
649      AC_MSG_NOTICE([The tested number of bits in the target ($TESTED_TARGET_CPU_BITS) differs from the number of bits expected to be found in the target ($OPENJDK_TARGET_CPU_BITS)])
650      if test "x$COMPILE_TYPE" = xreduced; then
651        HELP_MSG_MISSING_DEPENDENCY([reduced])
652        AC_MSG_NOTICE([You are doing a reduced build. Check that you have 32-bit libraries installed. $HELP_MSG])
653      elif test "x$COMPILE_TYPE" = xcross; then
654        AC_MSG_NOTICE([You are doing a cross-compilation. Check that you have all target platform libraries installed.])
655      fi
656      AC_MSG_ERROR([Cannot continue.])
657    fi
658  fi
659
660  AC_MSG_CHECKING([for target address size])
661  AC_MSG_RESULT([$OPENJDK_TARGET_CPU_BITS bits])
662])
663
664AC_DEFUN_ONCE([PLATFORM_SETUP_OPENJDK_TARGET_ENDIANNESS],
665[
666  ###############################################################################
667  #
668  # Is the target little of big endian?
669  #
670  AC_C_BIGENDIAN([ENDIAN="big"],[ENDIAN="little"],[ENDIAN="unknown"],[ENDIAN="universal_endianness"])
671
672  if test "x$ENDIAN" = xuniversal_endianness; then
673    AC_MSG_ERROR([Building with both big and little endianness is not supported])
674  fi
675  if test "x$ENDIAN" != "x$OPENJDK_TARGET_CPU_ENDIAN"; then
676    AC_MSG_ERROR([The tested endian in the target ($ENDIAN) differs from the endian expected to be found in the target ($OPENJDK_TARGET_CPU_ENDIAN)])
677  fi
678])
679