blob: 4363a1b710e634b70445578db6ebf4dee85a9bce [file] [log] [blame]
duke6e45e102007-12-01 00:00:00 +00001#!/bin/sh
2
3#
ohair2283b9d2010-05-25 15:58:33 -07004# Copyright (c) 2007, 2008, Oracle and/or its affiliates. All rights reserved.
duke6e45e102007-12-01 00:00:00 +00005# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
6#
7# This code is free software; you can redistribute it and/or modify it
8# under the terms of the GNU General Public License version 2 only, as
ohair2283b9d2010-05-25 15:58:33 -07009# published by the Free Software Foundation. Oracle designates this
duke6e45e102007-12-01 00:00:00 +000010# particular file as subject to the "Classpath" exception as provided
ohair2283b9d2010-05-25 15:58:33 -070011# by Oracle in the LICENSE file that accompanied this code.
duke6e45e102007-12-01 00:00:00 +000012#
13# This code is distributed in the hope that it will be useful, but WITHOUT
14# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
15# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
16# version 2 for more details (a copy is included in the LICENSE file that
17# accompanied this code).
18#
19# You should have received a copy of the GNU General Public License version
20# 2 along with this work; if not, write to the Free Software Foundation,
21# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
22#
ohair2283b9d2010-05-25 15:58:33 -070023# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
24# or visit www.oracle.com if you need additional information or have any
25# questions.
duke6e45e102007-12-01 00:00:00 +000026#
27
28
29#############################################################################
30#
31# Generic build profile.sh for all platforms, works in bash, sh, and ksh.
32#
33# Copy this file to your own area, and edit it to suit your needs.
34#
35# Ideally you either won't need to set the ALT_* variables because the
36# build system will find what it needs through system provided paths
37# or environment variables, or you have installed the component in the
38# recommended default path.
39#
40# If you find yourself forced to set an ALT_* environment variable and
41# suspect we could have figured it out automatically, please let us know.
42#
43# Most ALT_* directory defaults are based on being in the parent directory in
44# ALT_SLASH_JAVA, so it's possible to create for example a "C:/jdk6"
45# directory, assign that to ALT_SLASH_JAVA, and place all the components
46# in that directory. This could also minimize the ALT_* environment
47# variables you need to set.
48#
49########
50#
51# Assumes basic unix utilities are in the PATH already (uname, hostname, etc.).
52#
53# On Windows, assumes PROCESSOR_IDENTIFIER, VS71COMNTOOLS,
54# SYSTEMROOT (or SystemRoot), COMPUTERNAME (or hostname works), and
55# USERNAME is defined in the environment.
56# This profile does not rely on using vcvars32.bat and 64bit Setup.bat.
57# Uses CYGWIN cygpath to make sure paths are space-free.
58#
59# The JDK Makefiles may change in the future, making some of these
60# settings unnecessary or redundant.
61#
62# This is a working example, but may or may not work on all systems.
63#
64#############################################################################
65#
66# WARNING: This file will clobber the value of some environment variables.
67#
68# Sets up these environment variables for doing JDK builds:
69# USERNAME
70# COMPUTERNAME
71# PATH
72# Windows Only:
73# LIB
74# INCLUDE
75# PS1
76# SHELL
77#
78# Attempts to set these variables for the JDK builds:
79# ALT_COMPILER_PATH
80# ALT_BOOTDIR
81# ALT_BINARY_PLUGS_PATH
82# ALT_CLOSED_JDK_IMPORT_PATH
83# Windows Only:
84# ALT_UNIXCOMMAND_PATH
85# ALT_MSDEVTOOLS_PATH
86# ALT_DXSDK_PATH
87# ALT_MSVCRT_DLL_PATH
88# ALT_MSVCR71_DLL_PATH
89#
90#############################################################################
91#
92# Keep in mind that at this point, we are running in some kind of shell
93# (sh, ksh, or bash). We don't know if it's solaris, linux, or windows
94# CYGWIN. We need to figure that out.
95
96# Find user name
97if [ "${USERNAME}" = "" ] ; then
98 USERNAME="${LOGNAME}"
99fi
100if [ "${USERNAME}" = "" ] ; then
101 USERNAME="${USER}"
102fi
103export USERNAME
104
105# Find machine name
106if [ "${COMPUTERNAME}" = "" ] ; then
107 COMPUTERNAME="$(hostname)"
108fi
109export COMPUTERNAME
110
111# Boot jdk
112bootjdk=jdk1.6.0
113importjdk=jdk1.7.0
114
115# Uses 'uname -s', but only expect SunOS or Linux, assume Windows otherwise.
116osname=$(uname -s)
117if [ "${osname}" = SunOS ] ; then
118
119 # System place where JDK installed images are stored?
120 jdk_instances=/usr/jdk/instances
121
ohair3f083862008-06-04 09:38:18 -0700122 # Get the Sun Studio compilers (and latest patches for them too)
duke6e45e102007-12-01 00:00:00 +0000123 if [ "${ALT_COMPILER_PATH}" = "" ] ; then
124 ALT_COMPILER_PATH=/opt/SUNWspro/bin
125 export ALT_COMPILER_PATH
126 fi
127 if [ ! -d ${ALT_COMPILER_PATH} ] ; then
128 echo "WARNING: Cannot access ALT_COMPILER_PATH=${ALT_COMPILER_PATH}"
129 fi
130
131 # Place compiler path early in PATH to avoid 'cc' conflicts.
132 path4sdk=${ALT_COMPILER_PATH}:/usr/ccs/bin:/usr/ccs/lib:/usr/bin:/bin:/usr/sfw/bin
133
134 # Make sure these are unset
135 unset JAVA_HOME
136 unset LD_LIBRARY_PATH
137
138 # Build in C locale
139 LANG=C
140 export LANG
141 LC_ALL=C
142 export LC_ALL
143
144 umask 002
145
146elif [ "${osname}" = Linux ] ; then
147
148 # System place where JDK installed images are stored?
149 jdk_instances=/opt/java
150
151 # Use compilers from /usr/bin
152 path4sdk=/usr/bin:/bin:/usr/sbin:/sbin
153
154 # Make sure these are unset
155 unset JAVA_HOME
156 unset LD_LIBRARY_PATH
157
158 # Build in C locale
159 LANG=C
160 export LANG
161 LC_ALL=C
162 export LC_ALL
163
164 umask 002
165
166else
167
168 # System place where JDK installed images are stored?
169 jdk_instances="C:"
170
171 # Windows: Differs on CYGWIN and the compiler available.
172 # Also, blanks in pathnames gives make headaches, so anything placed
173 # in any ALT_* variable should be the short windows DOS names.
174
175 # Check CYGWIN (should have already been done)
176 # Assumption here is that you are in a shell window via cygwin.
ohaire2a87ec2010-06-07 12:22:21 -0700177 proc_arch=`echo "${PROCESSOR_IDENTIFIER}" | expand | cut -d' ' -f1 | sed -e 's@x86@X86@g' -e 's@Intel64@X64@g' -e 's@em64t@X64@g' -e 's@EM64T@X64@g' -e 's@amd64@X64@g' -e 's@AMD64@X64@g' -e 's@ia64@IA64@g'`
ohair1e16de92009-03-26 16:52:00 -0700178 if [ "${proc_arch}" = "X64" ] ; then
duke6e45e102007-12-01 00:00:00 +0000179 windows_arch=amd64
180 else
181 windows_arch=i586
182 fi
183 # We need to check if we are running a CYGWIN shell
184 if [ "$(uname -a | fgrep Cygwin)" != "" -a -f /bin/cygpath ] ; then
185 # For CYGWIN, uname will have "Cygwin" in it, and /bin/cygpath should exist
186 # Utility to convert to short pathnames without spaces
187 cygpath="/usr/bin/cygpath -a -m -s"
188 # Most unix utilities are in the /usr/bin
189 unixcommand_path="/usr/bin"
190 # Make the prompt tell you CYGWIN
191 export PS1="CYGWIN:${COMPUTERNAME}:${USERNAME}[\!] "
192 else
193 echo "ERROR: Cannot find CYGWIN on this machine"
194 exit 1
195 fi
196 if [ "${ALT_UNIXCOMMAND_PATH}" != "" ] ; then
197 unixcommand_path=${ALT_UNIXCOMMAND_PATH}
198 fi
199
200 # Default shell
201 export SHELL="${unixcommand_path}/sh"
202
203 # Setup path system (verify this is right)
204 if [ "${SystemRoot}" != "" ] ; then
205 sys_root=$(${cygpath} "${SystemRoot}")
206 elif [ "${SYSTEMROOT}" != "" ] ; then
207 sys_root=$(${cygpath} "${SYSTEMROOT}")
208 else
209 sys_root=$(${cygpath} "C:/WINNT")
210 fi
211 path4sdk="${unixcommand_path};${sys_root}/system32;${sys_root};${sys_root}/System32/Wbem"
212 if [ ! -d "${sys_root}" ] ; then
213 echo "WARNING: No system root found at: ${sys_root}"
214 fi
215
216 # Compiler setup (nasty part)
217 # NOTE: You can use vcvars32.bat to set PATH, LIB, and INCLUDE.
218 # NOTE: CYGWIN has a link.exe too, make sure the compilers are first
219 if [ "${windows_arch}" = i586 ] ; then
220 # 32bit Windows compiler settings
221 # VisualStudio .NET 2003 VC++ 7.1 (VS71COMNTOOLS should be defined)
222 vs_root=$(${cygpath} "${VS71COMNTOOLS}/../..")
223 # Fill in PATH, LIB, and INCLUDE (unset all others to make sure)
224 msdev_root="${vs_root}/Common7/Tools"
225 msdevtools_path="${msdev_root}/bin"
226 vc7_root="${vs_root}/Vc7"
227 compiler_path="${vc7_root}/bin"
228 platform_sdk="${vc7_root}/PlatformSDK"
229
230 # LIB and INCLUDE must use ; as a separator
231 include4sdk="${vc7_root}/atlmfc/include"
232 include4sdk="${include4sdk};${vc7_root}/include"
233 include4sdk="${include4sdk};${platform_sdk}/include/prerelease"
234 include4sdk="${include4sdk};${platform_sdk}/include"
235 include4sdk="${include4sdk};${vs_root}/SDK/v1.1/include"
236 lib4sdk="${lib4sdk};${vc7_root}/lib"
237 lib4sdk="${lib4sdk};${platform_sdk}/lib/prerelease"
238 lib4sdk="${lib4sdk};${platform_sdk}/lib"
239 lib4sdk="${lib4sdk};${vs_root}/SDK/v1.1/lib"
240 # Search path and DLL locating path
241 # WARNING: CYGWIN has a link.exe too, make sure compilers are first
242 path4sdk="${vs_root}/Common7/Tools/bin;${path4sdk}"
243 path4sdk="${vs_root}/SDK/v1.1/bin;${path4sdk}"
244 path4sdk="${vs_root}/Common7/Tools;${path4sdk}"
245 path4sdk="${vs_root}/Common7/Tools/bin/prerelease;${path4sdk}"
246 path4sdk="${vs_root}/Common7/IDE;${path4sdk}"
247 path4sdk="${compiler_path};${path4sdk}"
248 elif [ "${windows_arch}" = amd64 ] ; then
249 # AMD64 64bit Windows compiler settings
250 if [ "${ALT_DEPLOY_MSSDK}" != "" ] ; then
251 platform_sdk=${ALT_DEPLOY_MSSDK}
252 else
253 platform_sdk=$(${cygpath} "C:/Program Files/Microsoft Platform SDK/")
254 fi
255 if [ "${ALT_COMPILER_PATH}" != "" ] ; then
256 compiler_path=${ALT_COMPILER_PATH}
257 if [ "${ALT_DEPLOY_MSSDK}" = "" ] ; then
258 platform_sdk=${ALT_COMPILER_PATH}/../../../..
259 fi
260 else
261 compiler_path="${platform_sdk}/Bin/win64/x86/AMD64"
262 fi
263 if [ "${ALT_MSDEVTOOLS_PATH}" != "" ] ; then
264 msdevtools_path=${ALT_MSDEVTOOLS_PATH}
265 else
266 msdevtools_path="${platform_sdk}/Bin/win64/x86/AMD64"
267 fi
268 msdevtools_path="${compiler_path}"
269 # LIB and INCLUDE must use ; as a separator
270 include4sdk="${platform_sdk}/Include"
271 include4sdk="${include4sdk};${platform_sdk}/Include/crt/sys"
272 include4sdk="${include4sdk};${platform_sdk}/Include/mfc"
273 include4sdk="${include4sdk};${platform_sdk}/Include/atl"
274 include4sdk="${include4sdk};${platform_sdk}/Include/crt"
275 lib4sdk="${platform_sdk}/Lib/AMD64"
276 lib4sdk="${lib4sdk};${platform_sdk}/Lib/AMD64/atlmfc"
277 # Search path and DLL locating path
278 # WARNING: CYGWIN has a link.exe too, make sure compilers are first
279 path4sdk="${platform_sdk}/bin;${path4sdk}"
280 path4sdk="${compiler_path};${path4sdk}"
281 fi
282 # Export LIB and INCLUDE
283 unset lib
284 unset Lib
285 LIB="${lib4sdk}"
286 export LIB
287 unset include
288 unset Include
289 INCLUDE="${include4sdk}"
290 export INCLUDE
291
292 # Turn all \\ into /, remove duplicates and trailing /
293 slash_path="$(echo ${path4sdk} | sed -e 's@\\\\@/@g' -e 's@//@/@g' -e 's@/$@@' -e 's@/;@;@g')"
294 path4sdk="${slash_path}"
295
296 # Convert path4sdk to cygwin style
297 path4sdk="$(/usr/bin/cygpath -p ${path4sdk})"
298
299fi
300
301# Get the previous JDK to be used to bootstrap the build
302if [ "${ALT_BOOTDIR}" = "" ] ; then
303 ALT_BOOTDIR=${jdk_instances}/${bootjdk}
304 export ALT_BOOTDIR
305fi
306if [ ! -d ${ALT_BOOTDIR} ] ; then
307 echo "WARNING: Cannot access ALT_BOOTDIR=${ALT_BOOTDIR}"
308fi
309
310# Get the import JDK to be used to get hotspot VM if not built
311if [ "${ALT_JDK_IMPORT_PATH}" = "" -a -d ${jdk_instances}/${importjdk} ] ; then
312 ALT_JDK_IMPORT_PATH=${jdk_instances}/${importjdk}
313 export ALT_JDK_IMPORT_PATH
314fi
315
316# Get the latest JDK binary plugs or build to import pre-built binaries
317if [ "${ALT_BINARY_PLUGS_PATH}" = "" ] ; then
318 binplugs=${jdk_instances}/openjdk-binary-plugs
319 jdkplugs=${jdk_instances}/${importjdk}
320 if [ -d ${binplugs} ] ; then
321 ALT_BINARY_PLUGS_PATH=${binplugs}
322 export ALT_BINARY_PLUGS_PATH
323 elif [ "${ALT_CLOSED_JDK_IMPORT_PATH}" = "" -a -d ${jdkplugs} ] ; then
324 ALT_CLOSED_JDK_IMPORT_PATH=${jdkplugs}
325 export ALT_CLOSED_JDK_IMPORT_PATH
326 fi
327 if [ "${ALT_BINARY_PLUGS_PATH}" = "" ] ; then
328 echo "WARNING: Missing ALT_BINARY_PLUGS_PATH: ${binplugs}"
329 fi
330fi
331if [ "${ALT_BINARY_PLUGS_PATH}" != "" -a ! -d "${ALT_BINARY_PLUGS_PATH}" ] ; then
332 echo "WARNING: Cannot access ALT_BINARY_PLUGS_PATH=${ALT_BINARY_PLUGS_PATH}"
333fi
334if [ "${ALT_CLOSED_JDK_IMPORT_PATH}" != "" -a ! -d "${ALT_CLOSED_JDK_IMPORT_PATH}" ] ; then
335 echo "WARNING: Cannot access ALT_CLOSED_JDK_IMPORT_PATH=${ALT_CLOSED_JDK_IMPORT_PATH}"
336fi
337
338# Export PATH setting
339PATH="${path4sdk}"
340export PATH
341
gbenson24e3a5d2009-10-15 13:27:59 +0100342# Export variables required for Zero
gbensond05acae2010-08-13 22:26:27 +0100343if [ "${SHARK_BUILD}" = true ] ; then
344 ZERO_BUILD=true
345 export ZERO_BUILD
346fi
gbenson24e3a5d2009-10-15 13:27:59 +0100347if [ "${ZERO_BUILD}" = true ] ; then
348 # ZERO_LIBARCH is the name of the architecture-specific
349 # subdirectory under $JAVA_HOME/jre/lib
350 arch=$(uname -m)
351 case "${arch}" in
352 x86_64) ZERO_LIBARCH=amd64 ;;
353 i?86) ZERO_LIBARCH=i386 ;;
354 sparc64) ZERO_LIBARCH=sparcv9 ;;
355 arm*) ZERO_LIBARCH=arm ;;
356 *) ZERO_LIBARCH="$(arch)"
357 esac
358 export ZERO_LIBARCH
359
360 # ARCH_DATA_MODEL is the number of bits in a pointer
361 case "${ZERO_LIBARCH}" in
362 i386|ppc|s390|sparc|arm)
363 ARCH_DATA_MODEL=32
364 ;;
365 amd64|ppc64|s390x|sparcv9|ia64|alpha)
366 ARCH_DATA_MODEL=64
367 ;;
368 *)
369 echo "ERROR: Unable to determine ARCH_DATA_MODEL for ${ZERO_LIBARCH}"
370 exit 1
371 esac
372 export ARCH_DATA_MODEL
373
374 # ZERO_ENDIANNESS is the endianness of the processor
375 case "${ZERO_LIBARCH}" in
376 i386|amd64|ia64)
377 ZERO_ENDIANNESS=little
378 ;;
379 ppc*|s390*|sparc*|alpha)
380 ZERO_ENDIANNESS=big
381 ;;
382 *)
383 echo "ERROR: Unable to determine ZERO_ENDIANNESS for ${ZERO_LIBARCH}"
384 exit 1
385 esac
386 export ZERO_ENDIANNESS
387
388 # ZERO_ARCHDEF is used to enable architecture-specific code
389 case "${ZERO_LIBARCH}" in
390 i386) ZERO_ARCHDEF=IA32 ;;
391 ppc*) ZERO_ARCHDEF=PPC ;;
392 s390*) ZERO_ARCHDEF=S390 ;;
393 sparc*) ZERO_ARCHDEF=SPARC ;;
394 *) ZERO_ARCHDEF=$(echo "${ZERO_LIBARCH}" | tr a-z A-Z)
395 esac
396 export ZERO_ARCHDEF
397
398 # ZERO_ARCHFLAG tells the compiler which mode to build for
399 case "${ZERO_LIBARCH}" in
400 s390)
401 ZERO_ARCHFLAG="-m31"
402 ;;
403 *)
404 ZERO_ARCHFLAG="-m${ARCH_DATA_MODEL}"
405 esac
406 export ZERO_ARCHFLAG
407
408 # LIBFFI_CFLAGS and LIBFFI_LIBS tell the compiler how to compile and
409 # link against libffi
410 pkgconfig=$(which pkg-config 2>/dev/null)
411 if [ -x "${pkgconfig}" ] ; then
412 if [ "${LIBFFI_CFLAGS}" = "" ] ; then
413 LIBFFI_CFLAGS=$("${pkgconfig}" --cflags libffi)
414 fi
415 if [ "${LIBFFI_LIBS}" = "" ] ; then
416 LIBFFI_LIBS=$("${pkgconfig}" --libs libffi)
417 fi
418 fi
419 if [ "${LIBFFI_LIBS}" = "" ] ; then
420 LIBFFI_LIBS="-lffi"
421 fi
422 export LIBFFI_CFLAGS
423 export LIBFFI_LIBS
gbensond05acae2010-08-13 22:26:27 +0100424
425 # LLVM_CFLAGS, LLVM_LDFLAGS and LLVM_LIBS tell the compiler how to
426 # compile and link against LLVM
427 if [ "${SHARK_BUILD}" = true ] ; then
428 if [ "${LLVM_CONFIG}" = "" ] ; then
429 LLVM_CONFIG=$(which llvm-config 2>/dev/null)
430 fi
431 if [ ! -x "${LLVM_CONFIG}" ] ; then
432 echo "ERROR: Unable to locate llvm-config"
433 exit 1
434 fi
435 llvm_components="jit engine nativecodegen"
436
437 unset LLVM_CFLAGS
438 for flag in $("${LLVM_CONFIG}" --cxxflags $llvm_components); do
439 if echo "${flag}" | grep -q '^-[ID]'; then
440 if [ "${flag}" != "-D_DEBUG" ] ; then
441 if [ "${LLVM_CFLAGS}" != "" ] ; then
442 LLVM_CFLAGS="${LLVM_CFLAGS} "
443 fi
444 LLVM_CFLAGS="${LLVM_CFLAGS}${flag}"
445 fi
446 fi
447 done
448 llvm_version=$("${LLVM_CONFIG}" --version | sed 's/\.//; s/svn.*//')
449 LLVM_CFLAGS="${LLVM_CFLAGS} -DSHARK_LLVM_VERSION=${llvm_version}"
450
451 unset LLVM_LDFLAGS
452 for flag in $("${LLVM_CONFIG}" --ldflags $llvm_components); do
453 if echo "${flag}" | grep -q '^-L'; then
454 if [ "${LLVM_LDFLAGS}" != "" ] ; then
455 LLVM_LDFLAGS="${LLVM_LDFLAGS} "
456 fi
457 LLVM_LDFLAGS="${LLVM_LDFLAGS}${flag}"
458 fi
459 done
460
461 unset LLVM_LIBS
462 for flag in $("${LLVM_CONFIG}" --libs $llvm_components); do
463 if echo "${flag}" | grep -q '^-l'; then
464 if [ "${LLVM_LIBS}" != "" ] ; then
465 LLVM_LIBS="${LLVM_LIBS} "
466 fi
467 LLVM_LIBS="${LLVM_LIBS}${flag}"
468 fi
469 done
470
471 export LLVM_CFLAGS
472 export LLVM_LDFLAGS
473 export LLVM_LIBS
474 fi
gbenson24e3a5d2009-10-15 13:27:59 +0100475fi