blob: d98a87c0d2e3f41a6e8bcf641a4fbc3d88ef906b [file] [log] [blame]
duke6e45e102007-12-01 00:00:00 +00001#
wetmore0b4d7dc2011-02-23 22:54:47 -08002# Copyright (c) 2007, 2011, Oracle and/or its affiliates. All rights reserved.
duke6e45e102007-12-01 00:00:00 +00003# 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
ohair2283b9d2010-05-25 15:58:33 -07007# published by the Free Software Foundation. Oracle designates this
duke6e45e102007-12-01 00:00:00 +00008# particular file as subject to the "Classpath" exception as provided
ohair2283b9d2010-05-25 15:58:33 -07009# by Oracle in the LICENSE file that accompanied this code.
duke6e45e102007-12-01 00:00:00 +000010#
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#
ohair2283b9d2010-05-25 15:58:33 -070021# 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.
duke6e45e102007-12-01 00:00:00 +000024#
25
26#
27# Common java/javac/jdk variables used by all the Java makefiles.
28# This file should not contain rules.
29#
30
31# WARNING: This file is shared with other workspaces.
32# So when it includes other files, it must use JDK_TOPDIR.
33#
34
35#
36# Memory related -J flags that all uses of java tools should use.
37#
38JAVA_MEM_FLAGS = -Xmx$(MAX_VM_MEMORY)m
39ifeq ($(ARCH), ia64)
40 # Special flags for javac on ia64 to work around a VM problem with
41 # bad code generation during inlining (what version had this problem?):
42 # Suspect this may not be needed anymore.
43 JAVA_MEM_FLAGS += -Xms$(MAX_VM_MEMORY)m -XX:-Inline
44else
45 JAVA_MEM_FLAGS += -Xms$(MIN_VM_MEMORY)m -XX:PermSize=32m -XX:MaxPermSize=160m
46endif
47
wetmore0b4d7dc2011-02-23 22:54:47 -080048#
duke6e45e102007-12-01 00:00:00 +000049# All java tools (javac, javah, and javadoc) run faster with certain java
50# options, this macro should be used with all these tools.
51# In particular, the client VM makes these tools run faster when
52# it's available.
53#
54ADD_CLIENT_VM_OPTION = false
55ifeq ($(PLATFORM), solaris)
56 ADD_CLIENT_VM_OPTION = true
57else
58 ifeq ($(ARCH_DATA_MODEL), 32)
59 ADD_CLIENT_VM_OPTION = true
60 endif
61endif
ohairbeeb2ab2009-03-31 16:11:09 -070062
63# Options for hotspot to turn off printing of options with fastdebug version
64# and creating the hotspot.log file.
65JAVA_HOTSPOT_DISABLE_PRINT_VMOPTIONS = \
66 -XX:-PrintVMOptions -XX:+UnlockDiagnosticVMOptions -XX:-LogVMOutput
67
68# JVM options
69JAVA_JVM_FLAGS = $(JAVA_HOTSPOT_DISABLE_PRINT_VMOPTIONS)
70
duke6e45e102007-12-01 00:00:00 +000071ifeq ($(ADD_CLIENT_VM_OPTION), true)
72 JAVA_JVM_FLAGS += -client
73endif
74ifdef USE_HOTSPOT_INTERPRETER_MODE
75 JAVA_JVM_FLAGS += -Xint
76endif
77
78# Various VM flags
79JAVA_TOOLS_FLAGS = $(JAVA_JVM_FLAGS) $(JAVA_MEM_FLAGS)
80
81# The VM flags for javac
82JAVAC_JVM_FLAGS =
83
84# 64-bit builds require a larger thread stack size.
85ifeq ($(ARCH_DATA_MODEL), 32)
86 JAVAC_JVM_FLAGS += -J-XX:ThreadStackSize=768
87else
88 JAVAC_JVM_FLAGS += -J-XX:ThreadStackSize=1536
89endif
90JAVAC_JVM_FLAGS += $(JAVA_TOOLS_FLAGS:%=-J%)
91
92# The jar -J options are special, must be added at the end of the command line
93JAR_JFLAGS = $(JAVA_TOOLS_FLAGS:%=-J%)
94
95# JAVA_TOOLS_DIR is the default location to find Java tools to run, if
96# langtools is not available.
97# This should be the latest promoted JDK javac.
98ifndef JAVA_TOOLS_DIR
99 JAVA_TOOLS_DIR = $(JDK_IMPORT_PATH)/bin
100endif
101
102#
103# Invoking the Java compiler. In leaf makefiles, choose as follows:
104# -- Use JAVAC if you want to take full control of what options get
105# passed to javac.
106# -- Use JAVAC_CMD if you want to take the defaults given to you.
107#
108
109ifndef DEBUG_CLASSFILES
110 ifeq ($(VARIANT), DBG)
111 DEBUG_CLASSFILES = true
112 endif
113endif
114JAVACFLAGS =
115ifeq ($(DEBUG_CLASSFILES),true)
116 JAVACFLAGS += -g
117endif
ohairab4f1212008-07-27 18:42:57 -0700118ifeq ($(JAVAC_MAX_WARNINGS), true)
ksrinie1db03b2011-07-08 10:25:57 -0700119 JAVAC_LINT_OPTIONS += -Xlint:all
ohairab4f1212008-07-27 18:42:57 -0700120endif
121ifeq ($(JAVAC_WARNINGS_FATAL), true)
duke6e45e102007-12-01 00:00:00 +0000122 JAVACFLAGS += -Werror
123endif
124
ksrinie1db03b2011-07-08 10:25:57 -0700125# TODO: Workaround for CR 7063027. Remove -path eventually.
126JAVAC_LINT_OPTIONS += -Xlint:-path
127
128JAVACFLAGS += $(JAVAC_LINT_OPTIONS)
129
wetmore0b4d7dc2011-02-23 22:54:47 -0800130#
131# Some licensees do not get the Security Source bundles. We will
132# fall back on the prebuilt jce.jar so that we can do a best
133# attempt at building. If sources exist, we always want to
134# build/use the most recent source instead of an older jce.jar, whether
135# built implicitly/explicitly.
136#
137ifeq ($(wildcard $(SHARE_SRC)/classes/javax/crypto/Cipher.java),)
138 JCEFLAGS = $(CLASSPATH_SEPARATOR)$(LIBDIR)/jce.jar
139endif
140
jjg84511fd2009-07-27 15:19:55 -0700141# Add the source level
142SOURCE_LANGUAGE_VERSION = 7
jjg92637bb2009-05-20 13:55:50 -0700143LANGUAGE_VERSION = -source $(SOURCE_LANGUAGE_VERSION)
duke6e45e102007-12-01 00:00:00 +0000144JAVACFLAGS += $(LANGUAGE_VERSION)
145
jjg84511fd2009-07-27 15:19:55 -0700146# Add the class version we want
147TARGET_CLASS_VERSION = 7
duke6e45e102007-12-01 00:00:00 +0000148CLASS_VERSION = -target $(TARGET_CLASS_VERSION)
149JAVACFLAGS += $(CLASS_VERSION)
150JAVACFLAGS += -encoding ascii
wetmore0b4d7dc2011-02-23 22:54:47 -0800151JAVACFLAGS += "-Xbootclasspath:$(CLASSBINDIR)$(JCEFLAGS)"
duke6e45e102007-12-01 00:00:00 +0000152JAVACFLAGS += $(OTHER_JAVACFLAGS)
153
154# Needed for javah
wetmore0b4d7dc2011-02-23 22:54:47 -0800155JAVAHFLAGS += -bootclasspath "$(CLASSBINDIR)$(JCEFLAGS)"
duke6e45e102007-12-01 00:00:00 +0000156
andrew8f72ed72010-01-29 02:38:22 +0000157# Needed for javadoc to ensure it builds documentation
158# against the newly built classes
159JAVADOCFLAGS += -bootclasspath $(CLASSBINDIR)
160
jjg8dd29a52009-02-26 18:51:57 -0800161# Needed for JAVADOC and BOOT_JAVACFLAGS
162NO_PROPRIETARY_API_WARNINGS = -XDignore.symbol.file=true
163
duke6e45e102007-12-01 00:00:00 +0000164# Langtools
165ifdef LANGTOOLS_DIST
166 JAVAC_JAR = $(LANGTOOLS_DIST)/bootstrap/lib/javac.jar
167 JAVAH_JAR = $(LANGTOOLS_DIST)/bootstrap/lib/javah.jar
168 JAVADOC_JAR = $(LANGTOOLS_DIST)/bootstrap/lib/javadoc.jar
169 DOCLETS_JAR = $(LANGTOOLS_DIST)/bootstrap/lib/doclets.jar
170 JAVAC_CMD = $(BOOT_JAVA_CMD) \
171 "-Xbootclasspath/p:$(JAVAC_JAR)" \
172 -jar $(JAVAC_JAR) $(JAVACFLAGS)
173 JAVAH_CMD = $(BOOT_JAVA_CMD) \
jjgb2d91b42011-01-06 14:32:00 -0800174 "-Xbootclasspath/p:$(JAVAH_JAR)$(CLASSPATH_SEPARATOR)$(JAVAC_JAR)" \
duke6e45e102007-12-01 00:00:00 +0000175 -jar $(JAVAH_JAR) $(JAVAHFLAGS)
176 JAVADOC_CMD = $(BOOT_JAVA_CMD) \
177 "-Xbootclasspath/p:$(JAVADOC_JAR)$(CLASSPATH_SEPARATOR)$(JAVAC_JAR)$(CLASSPATH_SEPARATOR)$(DOCLETS_JAR)" \
andrew8f72ed72010-01-29 02:38:22 +0000178 -jar $(JAVADOC_JAR) $(JAVADOCFLAGS)
duke6e45e102007-12-01 00:00:00 +0000179else
180 # If no explicit tools, use boot tools (add VM flags in this case)
181 JAVAC_CMD = $(JAVA_TOOLS_DIR)/javac $(JAVAC_JVM_FLAGS) \
182 $(JAVACFLAGS)
183 JAVAH_CMD = $(JAVA_TOOLS_DIR)/javah \
184 $(JAVAHFLAGS)
andrew8f72ed72010-01-29 02:38:22 +0000185 JAVADOC_CMD = $(JAVA_TOOLS_DIR)/javadoc $(JAVA_TOOLS_FLAGS:%=-J%) \
186 $(JAVADOCFLAGS)
duke6e45e102007-12-01 00:00:00 +0000187endif
188
189# Override of what javac to use (see deploy workspace)
190ifdef JAVAC
191 JAVAC_CMD = $(JAVAC)
192endif
193
194#
195# The bootstrap java compiler (defined as the javac in the ALT_BOOTDIR jdk).
196# Will be used to compile java code used to build the jdk, e.g. class files
197# created by this compiler will NOT become part of this built jdk, but just
198# used to build this jdk, e.g. run with the java in the ALT_BOOTDIR jdk.
199#
200# The javac supplied with the LANGTOOLS_DIST should be used to build the
201# classes that will be put into the built jdk. But note that this javac
202# will use the ALT_BOOTDIR java runtime. Any classes created by the
203# LANGTOOLS_DIST javac should not be run during this jdk build and indeed
204# may not even run with the ALT_BOOTDIR jdk because they may be a newer
205# class file version that the ALT_BOOTDIR jdk doesn't understand.
206#
207# The important observation here is that the built jdk is NOT run during
208# the build. If the built jdk needs to be verified that it can build this
209# same jdk, then it should be supplied to the build process as the ALT_BOOTDIR
210# jdk, and this resulting built jdk should be compared to the first one.
211# (They should be the same). Re-using this built jdk as the ALT_BOOTDIR
212# jdk will be the only way and the recommeneded way to verify the built jdk
213# can bootstrap itself.
214#
215
216# The javac options supplied to the boot javac is limited. This compiler
217# should only be used to build the 'make/tools' sources, which are not
218# class files that end up in the classes directory.
ksrinie1db03b2011-07-08 10:25:57 -0700219BOOT_JAVACFLAGS += $(JAVAC_LINT_OPTIONS)
ohairab4f1212008-07-27 18:42:57 -0700220ifeq ($(JAVAC_WARNINGS_FATAL), true)
duke6e45e102007-12-01 00:00:00 +0000221 BOOT_JAVACFLAGS += -Werror
222endif
andrewf0b06d82009-08-18 19:50:12 +0100223
jjge79c5122011-06-30 16:50:34 -0700224BOOT_JAVACFLAGS += -encoding ascii
ohaireb0a9eb2008-08-06 15:02:15 -0700225BOOT_JAR_JFLAGS += $(JAR_JFLAGS)
duke6e45e102007-12-01 00:00:00 +0000226
jjg8dd29a52009-02-26 18:51:57 -0800227BOOT_JAVACFLAGS += $(NO_PROPRIETARY_API_WARNINGS)
228
duke6e45e102007-12-01 00:00:00 +0000229BOOT_JAVA_CMD = $(BOOTDIR)/bin/java $(JAVA_TOOLS_FLAGS)
230BOOT_JAVAC_CMD = $(BOOTDIR)/bin/javac $(JAVAC_JVM_FLAGS) $(BOOT_JAVACFLAGS)
231BOOT_JAR_CMD = $(BOOTDIR)/bin/jar
232BOOT_JARSIGNER_CMD = $(BOOTDIR)/bin/jarsigner
233
234# Various tools we need to run (FIXUP: Are these the right ones?)
235NATIVE2ASCII = $(BOOTDIR)/bin/native2ascii $(JAVA_TOOLS_FLAGS:%=-J%)
236RMIC = $(BOOTDIR)/bin/rmic $(JAVA_TOOLS_FLAGS:%=-J%)
237IDLJ = $(BOOTDIR)/bin/idlj $(JAVA_TOOLS_FLAGS:%=-J%)
238
239# Should not be used
240JAVA = /should/not/be/used
241