Tue, 03 Jul 2012 16:11:12 -0700
7181504: Update of latest build-infra Makefiles
Reviewed-by: ohair
1 #
2 # Copyright (c) 2011, 2012, 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 #
26 AC_DEFUN([PLATFORM_EXTRACT_TARGET_AND_BUILD_AND_LEGACY_VARS],
27 [
28 # Expects $host_os $host_cpu $build_os and $build_cpu
29 # and $with_target_bits to have been setup!
30 #
31 # Translate the standard triplet(quadruplet) definition
32 # of the target/build system into
33 # OPENJDK_TARGET_OS=aix,bsd,hpux,linux,macosx,solaris,windows
34 # OPENJDK_TARGET_OS_FAMILY=bsd,gnu,sysv,win32,wince
35 # OPENJDK_TARGET_OS_API=posix,winapi
36 #
37 # OPENJDK_TARGET_CPU=ia32,x64,sparc,sparcv9,arm,arm64,ppc,ppc64
38 # OPENJDK_TARGET_CPU_ARCH=x86,sparc,pcc,arm
39 # OPENJDK_TARGET_CPU_BITS=32,64
40 # OPENJDK_TARGET_CPU_ENDIAN=big,little
41 #
42 # The same values are setup for BUILD_...
43 #
44 # And the legacy variables, for controlling the old makefiles.
45 # LEGACY_OPENJDK_TARGET_CPU1=i586,amd64/x86_64,sparc,sparcv9,arm,arm64...
46 # LEGACY_OPENJDK_TARGET_CPU2=i386,amd64,sparc,sparcv9,arm,arm64...
47 # LEGACY_OPENJDK_TARGET_CPU3=sparcv9,amd64 (but only on solaris)
48 # LEGACY_OPENJDK_TARGET_OS_API=solaris,windows
49 #
50 # We also copy the autoconf trip/quadruplet
51 # verbatim to OPENJDK_TARGET_SYSTEM (from the autoconf "host") and OPENJDK_BUILD_SYSTEM
52 OPENJDK_TARGET_SYSTEM="$host"
53 OPENJDK_BUILD_SYSTEM="$build"
54 AC_SUBST(OPENJDK_TARGET_SYSTEM)
55 AC_SUBST(OPENJDK_BUILD_SYSTEM)
57 PLATFORM_EXTRACT_VARS_FROM_OS_TO(OPENJDK_TARGET,$host_os)
58 PLATFORM_EXTRACT_VARS_FROM_CPU_TO(OPENJDK_TARGET,$host_cpu)
60 PLATFORM_EXTRACT_VARS_FROM_OS_TO(OPENJDK_BUILD,$build_os)
61 PLATFORM_EXTRACT_VARS_FROM_CPU_TO(OPENJDK_BUILD,$build_cpu)
63 if test "x$OPENJDK_TARGET_OS" != xsolaris; then
64 LEGACY_OPENJDK_TARGET_CPU3=""
65 LEGACY_OPENJDK_BUILD_CPU3=""
66 fi
68 # On MacOSX and MacOSX only, we have a different name for the x64 CPU in ARCH (LEGACY_OPENJDK_TARGET_CPU1) ...
69 if test "x$OPENJDK_TARGET_OS" = xmacosx && test "x$OPENJDK_TARGET_CPU" = xx64; then
70 LEGACY_OPENJDK_TARGET_CPU1="x86_64"
71 fi
73 PLATFORM_SET_RELEASE_FILE_OS_VALUES
74 ])
76 AC_DEFUN([PLATFORM_EXTRACT_VARS_FROM_OS_TO],
77 [
78 PLATFORM_EXTRACT_VARS_FROM_OS($2)
79 $1_OS="$VAR_OS"
80 $1_OS_FAMILY="$VAR_OS_FAMILY"
81 $1_OS_API="$VAR_OS_API"
83 AC_SUBST($1_OS)
84 AC_SUBST($1_OS_FAMILY)
85 AC_SUBST($1_OS_API)
87 if test "x$$1_OS_API" = xposix; then
88 LEGACY_$1_OS_API="solaris"
89 fi
90 if test "x$$1_OS_API" = xwinapi; then
91 LEGACY_$1_OS_API="windows"
92 fi
93 AC_SUBST(LEGACY_$1_OS_API)
94 ])
96 AC_DEFUN([PLATFORM_EXTRACT_VARS_FROM_CPU_TO],
97 [
98 PLATFORM_EXTRACT_VARS_FROM_CPU($2)
99 $1_CPU="$VAR_CPU"
100 $1_CPU_ARCH="$VAR_CPU_ARCH"
101 $1_CPU_BITS="$VAR_CPU_BITS"
102 $1_CPU_ENDIAN="$VAR_CPU_ENDIAN"
104 AC_SUBST($1_CPU)
105 AC_SUBST($1_CPU_ARCH)
106 AC_SUBST($1_CPU_BITS)
107 AC_SUBST($1_CPU_ENDIAN)
109 # Also store the legacy naming of the cpu.
110 # Ie i586 and amd64 instead of ia32 and x64
111 LEGACY_$1_CPU1="$VAR_LEGACY_CPU"
112 AC_SUBST(LEGACY_$1_CPU1)
114 # And the second legacy naming of the cpu.
115 # Ie i386 and amd64 instead of ia32 and x64.
116 LEGACY_$1_CPU2="$LEGACY_$1_CPU1"
117 if test "x$LEGACY_$1_CPU1" = xi586; then
118 LEGACY_$1_CPU2=i386
119 fi
120 AC_SUBST(LEGACY_$1_CPU2)
122 # And the third legacy naming of the cpu.
123 # Ie only amd64 or sparcv9, used for the ISA_DIR on Solaris.
124 LEGACY_$1_CPU3=""
125 if test "x$$1_CPU" = xx64; then
126 LEGACY_$1_CPU3=amd64
127 fi
128 if test "x$$1_CPU" = xsparcv9; then
129 LEGACY_$1_CPU3=sparcv9
130 fi
131 AC_SUBST(LEGACY_$1_CPU3)
132 ])
134 AC_DEFUN([PLATFORM_EXTRACT_VARS_FROM_CPU],
135 [
136 # First argument is the cpu name from the trip/quad
137 case "$1" in
138 x86_64)
139 VAR_CPU=x64
140 VAR_CPU_ARCH=x86
141 VAR_CPU_BITS=64
142 VAR_CPU_ENDIAN=little
143 VAR_LEGACY_CPU=amd64
144 ;;
145 i?86)
146 VAR_CPU=ia32
147 VAR_CPU_ARCH=x86
148 VAR_CPU_BITS=32
149 VAR_CPU_ENDIAN=little
150 VAR_LEGACY_CPU=i586
151 ;;
152 alpha*)
153 VAR_CPU=alpha
154 VAR_CPU_ARCH=alpha
155 VAR_CPU_BITS=64
156 VAR_CPU_ENDIAN=big
157 VAR_LEGACY_CPU=alpha
158 ;;
159 arm*)
160 VAR_CPU=arm
161 VAR_CPU_ARCH=arm
162 VAR_CPU_BITS=32
163 VAR_CPU_ENDIAN=little
164 VAR_LEGACY_CPU=arm
165 ;;
166 mips)
167 VAR_CPU=mips
168 VAR_CPU_ARCH=mips
169 VAR_CPU_BITS=woot
170 VAR_CPU_ENDIAN=woot
171 VAR_LEGACY_CPU=mips
172 ;;
173 mipsel)
174 VAR_CPU=mipsel
175 VAR_CPU_ARCH=mips
176 VAR_CPU_BITS=woot
177 VAR_CPU_ENDIAN=woot
178 VAR_LEGACY_CPU=mipsel
179 ;;
180 powerpc)
181 VAR_CPU=ppc
182 VAR_CPU_ARCH=ppc
183 VAR_CPU_BITS=32
184 VAR_CPU_ENDIAN=big
185 VAR_LEGACY_CPU=ppc
186 ;;
187 powerpc64)
188 VAR_CPU=ppc64
189 VAR_CPU_ARCH=ppc
190 VAR_CPU_BITS=64
191 VAR_CPU_ENDIAN=big
192 VAR_LEGACY_CPU=ppc64
193 ;;
194 sparc)
195 VAR_CPU=sparc
196 VAR_CPU_ARCH=sparc
197 VAR_CPU_BITS=32
198 VAR_CPU_ENDIAN=big
199 VAR_LEGACY_CPU=sparc
200 ;;
201 sparc64)
202 VAR_CPU=sparcv9
203 VAR_CPU_ARCH=sparc
204 VAR_CPU_BITS=64
205 VAR_CPU_ENDIAN=big
206 VAR_LEGACY_CPU=sparcv9
207 ;;
208 s390)
209 VAR_CPU=s390
210 VAR_CPU_ARCH=s390
211 VAR_CPU_BITS=32
212 VAR_CPU_ENDIAN=woot
213 VAR_LEGACY_CPU=s390
214 VAR_LEGACY_CPU=s390
215 ;;
216 s390x)
217 VAR_CPU=s390x
218 VAR_CPU_ARCH=s390
219 VAR_CPU_BITS=64
220 VAR_CPU_ENDIAN=woot
221 VAR_LEGACY_CPU=s390x
222 ;;
223 *)
224 AC_MSG_ERROR([unsupported cpu $1])
225 ;;
226 esac
228 # Workaround cygwin not knowing about 64 bit.
229 if test "x$VAR_OS" = "xwindows"; then
230 if test "x$PROCESSOR_IDENTIFIER" != "x"; then
231 PROC_ARCH=`echo $PROCESSOR_IDENTIFIER | $CUT -f1 -d' '`
232 case "$PROC_ARCH" in
233 intel64|Intel64|INTEL64|em64t|EM64T|amd64|AMD64|8664|x86_64)
234 VAR_CPU=x64
235 VAR_CPU_BITS=64
236 VAR_LEGACY_CPU=amd64
237 ;;
238 esac
239 fi
240 fi
242 # on solaris x86...default seems to be 32-bit
243 if test "x$VAR_OS" = "xsolaris" && \
244 test "x$with_target_bits" = "x" && \
245 test "x$VAR_CPU_ARCH" = "xx86"
246 then
247 with_target_bits=32
248 fi
250 if test "x$VAR_CPU_ARCH" = "xx86"; then
251 if test "x$with_target_bits" = "x64"; then
252 VAR_CPU=x64
253 VAR_CPU_BITS=64
254 VAR_LEGACY_CPU=amd64
255 fi
256 if test "x$with_target_bits" = "x32"; then
257 VAR_CPU=ia32
258 VAR_CPU_BITS=32
259 VAR_LEGACY_CPU=i586
260 fi
261 fi
263 if test "x$VAR_CPU_ARCH" = "xsparc"; then
264 if test "x$with_target_bits" = "x64"; then
265 VAR_CPU=sparcv9
266 VAR_CPU_BITS=64
267 VAR_LEGACY_CPU=sparcv9
268 fi
269 fi
270 ])
272 AC_DEFUN([PLATFORM_EXTRACT_VARS_FROM_OS],
273 [
274 case "$1" in
275 *linux*)
276 VAR_OS=linux
277 VAR_OS_API=posix
278 VAR_OS_FAMILY=gnu
279 ;;
280 *solaris*)
281 VAR_OS=solaris
282 VAR_OS_API=posix
283 VAR_OS_FAMILY=sysv
284 ;;
285 *darwin*)
286 VAR_OS=macosx
287 VAR_OS_API=posix
288 VAR_OS_FAMILY=bsd
289 ;;
290 *bsd*)
291 VAR_OS=bsd
292 VAR_OS_API=posix
293 VAR_OS_FAMILY=bsd
294 ;;
295 *cygwin*|*windows*)
296 VAR_OS=windows
297 VAR_OS_API=winapi
298 VAR_OS_FAMILY=windows
299 ;;
300 *)
301 AC_MSG_ERROR([unsupported operating system $1])
302 ;;
303 esac
304 ])
306 AC_DEFUN([PLATFORM_SET_RELEASE_FILE_OS_VALUES],
307 [
308 if test "x$OPENJDK_TARGET_OS" = "xsolaris"; then
309 REQUIRED_OS_NAME=SunOS
310 REQUIRED_OS_VERSION=5.10
311 fi
312 if test "x$OPENJDK_TARGET_OS" = "xlinux"; then
313 REQUIRED_OS_NAME=Linux
314 REQUIRED_OS_VERSION=2.6
315 fi
316 if test "x$OPENJDK_TARGET_OS" = "xwindows"; then
317 REQUIRED_OS_NAME=Windows
318 REQUIRED_OS_VERSION=5.1
319 fi
320 if test "x$OPENJDK_TARGET_OS" = "xmacosx"; then
321 REQUIRED_OS_NAME=Darwin
322 REQUIRED_OS_VERSION=11.2
323 fi
325 AC_SUBST(REQUIRED_OS_NAME)
326 AC_SUBST(REQUIRED_OS_VERSION)
327 ])
329 #%%% Build and target systems %%%
330 AC_DEFUN_ONCE([PLATFORM_SETUP_OPENJDK_BUILD_AND_TARGET],
331 [
332 # Figure out the build and target systems. # Note that in autoconf terminology, "build" is obvious, but "target"
333 # is confusing; it assumes you are cross-compiling a cross-compiler (!) and "target" is thus the target of the
334 # product you're building. The target of this build is called "host". Since this is confusing to most people, we
335 # have not adopted that system, but use "target" as the platform we are building for. In some places though we need
336 # to use the configure naming style.
337 AC_CANONICAL_BUILD
338 AC_CANONICAL_HOST
339 AC_CANONICAL_TARGET
341 AC_ARG_WITH(target-bits, [AS_HELP_STRING([--with-target-bits],
342 [build 32-bit or 64-bit binaries (for platforms that support it), e.g. --with-target-bits=32 @<:@guessed@:>@])])
344 if test "x$with_target_bits" != x && \
345 test "x$with_target_bits" != x32 && \
346 test "x$with_target_bits" != x64 ; then
347 AC_MSG_ERROR([--with-target-bits can only be 32 or 64, you specified $with_target_bits!])
348 fi
349 # Translate the standard cpu-vendor-kernel-os quadruplets into
350 # the new TARGET_.... and BUILD_... and the legacy names used by
351 # the openjdk build.
352 # It uses $host_os $host_cpu $build_os $build_cpu and $with_target_bits
353 PLATFORM_EXTRACT_TARGET_AND_BUILD_AND_LEGACY_VARS
355 # The LEGACY_OPENJDK_TARGET_CPU3 is the setting for ISA_DIR.
356 if test "x$LEGACY_OPENJDK_TARGET_CPU3" != x; then
357 LEGACY_OPENJDK_TARGET_CPU3="/${LEGACY_OPENJDK_TARGET_CPU3}"
358 fi
360 # Now the following vars are defined.
361 # OPENJDK_TARGET_OS=aix,bsd,hpux,linux,macosx,solaris,windows
362 # OPENJDK_TARGET_OS_FAMILY=bsd,gnu,sysv,win32,wince
363 # OPENJDK_TARGET_OS_API=posix,winapi
364 #
365 # OPENJDK_TARGET_CPU=ia32,x64,sparc,sparcv9,arm,arm64,ppc,ppc64
366 # OPENJDK_TARGET_CPU_ARCH=x86,sparc,pcc,arm
367 # OPENJDK_TARGET_CPU_BITS=32,64
368 # OPENJDK_TARGET_CPU_ENDIAN=big,little
369 #
370 # There is also a:
371 # LEGACY_OPENJDK_TARGET_CPU1=i586,amd64,.... # used to set the old var ARCH
372 # LEGACY_OPENJDK_TARGET_CPU2=i386,amd64,.... # used to set the old var LIBARCH
373 # LEGACY_OPENJDK_TARGET_CPU3=only sparcv9,amd64 # used to set the ISA_DIR on Solaris
374 # There was also a BUILDARCH that had i486,amd64,... but we do not use that
375 # in the new build.
376 # LEGACY_OPENJDK_TARGET_OS_API=solaris,windows # used to select source roots
377 ])
379 AC_DEFUN_ONCE([PLATFORM_SETUP_OPENJDK_BUILD_OS_VERSION],
380 [
381 ###############################################################################
383 # Note that this is the build platform OS version!
385 OS_VERSION="`uname -r | ${SED} 's!\.! !g' | ${SED} 's!-! !g'`"
386 OS_VERSION_MAJOR="`${ECHO} ${OS_VERSION} | ${CUT} -f 1 -d ' '`"
387 OS_VERSION_MINOR="`${ECHO} ${OS_VERSION} | ${CUT} -f 2 -d ' '`"
388 OS_VERSION_MICRO="`${ECHO} ${OS_VERSION} | ${CUT} -f 3 -d ' '`"
389 AC_SUBST(OS_VERSION_MAJOR)
390 AC_SUBST(OS_VERSION_MINOR)
391 AC_SUBST(OS_VERSION_MICRO)
392 ])
394 AC_DEFUN_ONCE([PLATFORM_TEST_OPENJDK_TARGET_BITS],
395 [
396 ###############################################################################
397 #
398 # Now we check if libjvm.so will use 32 or 64 bit pointers for the C/C++ code.
399 # (The JVM can use 32 or 64 bit Java pointers but that decision
400 # is made at runtime.)
401 #
402 AC_LANG_PUSH(C++)
403 OLD_CXXFLAGS="$CXXFLAGS"
404 if test "x$OPENJDK_TARGET_OS" != xwindows && test "x$with_target_bits" != x; then
405 CXXFLAGS="-m${with_target_bits} $CXXFLAGS"
406 fi
407 AC_CHECK_SIZEOF([int *], [1111])
408 CXXFLAGS="$OLD_CXXFLAGS"
409 AC_LANG_POP(C++)
411 # keep track of c/cxx flags that we added outselves...
412 # to prevent emitting warning...
413 ADDED_CFLAGS=
414 ADDED_CXXFLAGS=
415 ADDED_LDFLAGS=
417 if test "x$ac_cv_sizeof_int_p" = x0; then
418 # The test failed, lets pick the assumed value.
419 ARCH_DATA_MODEL=$OPENJDK_TARGET_CPU_BITS
420 else
421 ARCH_DATA_MODEL=`expr 8 \* $ac_cv_sizeof_int_p`
423 if test "x$OPENJDK_TARGET_OS" != xwindows && test "x$with_target_bits" != x; then
424 ADDED_CFLAGS=" -m${with_target_bits}"
425 ADDED_CXXFLAGS=" -m${with_target_bits}"
426 ADDED_LDFLAGS=" -m${with_target_bits}"
428 CFLAGS="${CFLAGS}${ADDED_CFLAGS}"
429 CXXFLAGS="${CXXFLAGS}${ADDED_CXXFLAGS}"
430 LDFLAGS="${LDFLAGS}${ADDED_LDFLAGS}"
432 CFLAGS_JDK="${CFLAGS_JDK}${ADDED_CFLAGS}"
433 CXXFLAGS_JDK="${CXXFLAGS_JDK}${ADDED_CXXFLAGS}"
434 LDFLAGS_JDK="${LDFLAGS_JDK}${ADDED_LDFLAGS}"
435 fi
436 fi
438 if test "x$ARCH_DATA_MODEL" = x64; then
439 A_LP64="LP64:="
440 ADD_LP64="-D_LP64=1"
441 fi
442 AC_MSG_CHECKING([for target address size])
443 AC_MSG_RESULT([$ARCH_DATA_MODEL bits])
444 AC_SUBST(LP64,$A_LP64)
445 AC_SUBST(ARCH_DATA_MODEL)
447 if test "x$ARCH_DATA_MODEL" != "x$OPENJDK_TARGET_CPU_BITS"; then
448 AC_MSG_ERROR([The tested number of bits in the target ($ARCH_DATA_MODEL) differs from the number of bits expected to be found in the target ($OPENJDK_TARGET_CPU_BITS)])
449 fi
451 #
452 # NOTE: check for -mstackrealign needs to be below potential addition of -m32
453 #
454 if test "x$OPENJDK_TARGET_CPU_BITS" = x32 && test "x$OPENJDK_TARGET_OS" = xmacosx; then
455 # On 32-bit MacOSX the OS requires C-entry points to be 16 byte aligned.
456 # While waiting for a better solution, the current workaround is to use -mstackrealign.
457 CFLAGS="$CFLAGS -mstackrealign"
458 AC_MSG_CHECKING([if 32-bit compiler supports -mstackrealign])
459 AC_LINK_IFELSE([AC_LANG_SOURCE([[int main() { return 0; }]])],
460 [
461 AC_MSG_RESULT([yes])
462 ],
463 [
464 AC_MSG_RESULT([no])
465 AC_MSG_ERROR([The selected compiler $CXX does not support -mstackrealign! Try to put another compiler in the path.])
466 ])
467 fi
468 ])
470 AC_DEFUN_ONCE([PLATFORM_SETUP_OPENJDK_TARGET_ENDIANNESS],
471 [
472 ###############################################################################
473 #
474 # Is the target little of big endian?
475 #
476 AC_C_BIGENDIAN([ENDIAN="big"],[ENDIAN="little"],[ENDIAN="unknown"],[ENDIAN="universal_endianness"])
478 if test "x$ENDIAN" = xuniversal_endianness; then
479 AC_MSG_ERROR([Building with both big and little endianness is not supported])
480 fi
481 if test "x$ENDIAN" = xunknown; then
482 ENDIAN="$OPENJDK_TARGET_CPU_ENDIAN"
483 fi
484 if test "x$ENDIAN" != "x$OPENJDK_TARGET_CPU_ENDIAN"; then
485 AC_MSG_WARN([The tested endian in the target ($ENDIAN) differs from the endian expected to be found in the target ($OPENJDK_TARGET_CPU_ENDIAN)])
486 ENDIAN="$OPENJDK_TARGET_CPU_ENDIAN"
487 fi
488 AC_SUBST(ENDIAN)
489 ])
491 AC_DEFUN_ONCE([PLATFORM_SETUP_OPENJDK_TARGET_ISADIR],
492 [
493 ###############################################################################
494 #
495 # Could someone enlighten this configure script with a comment about libCrun?
496 #
497 #
498 ])