blob: c6026d90b277fb4d75e0bb9097d42ddb675614cd [file] [log] [blame]
duke6e45e102007-12-01 00:00:00 +00001#
ohairf5857212010-12-28 15:53:50 -08002# Copyright (c) 2007, 2010, 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
48#
49# 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)
119 JAVACFLAGS += -Xlint:all
120endif
121ifeq ($(JAVAC_WARNINGS_FATAL), true)
duke6e45e102007-12-01 00:00:00 +0000122 JAVACFLAGS += -Werror
123endif
124
jjg84511fd2009-07-27 15:19:55 -0700125# Add the source level
126SOURCE_LANGUAGE_VERSION = 7
jjg92637bb2009-05-20 13:55:50 -0700127LANGUAGE_VERSION = -source $(SOURCE_LANGUAGE_VERSION)
duke6e45e102007-12-01 00:00:00 +0000128JAVACFLAGS += $(LANGUAGE_VERSION)
129
jjg84511fd2009-07-27 15:19:55 -0700130# Add the class version we want
131TARGET_CLASS_VERSION = 7
duke6e45e102007-12-01 00:00:00 +0000132CLASS_VERSION = -target $(TARGET_CLASS_VERSION)
133JAVACFLAGS += $(CLASS_VERSION)
134JAVACFLAGS += -encoding ascii
135JAVACFLAGS += "-Xbootclasspath:$(CLASSBINDIR)"
136JAVACFLAGS += $(OTHER_JAVACFLAGS)
137
138# Needed for javah
139JAVAHFLAGS += -bootclasspath $(CLASSBINDIR)
140
andrew8f72ed72010-01-29 02:38:22 +0000141# Needed for javadoc to ensure it builds documentation
142# against the newly built classes
143JAVADOCFLAGS += -bootclasspath $(CLASSBINDIR)
144
jjg8dd29a52009-02-26 18:51:57 -0800145# Needed for JAVADOC and BOOT_JAVACFLAGS
146NO_PROPRIETARY_API_WARNINGS = -XDignore.symbol.file=true
147
duke6e45e102007-12-01 00:00:00 +0000148# Langtools
149ifdef LANGTOOLS_DIST
150 JAVAC_JAR = $(LANGTOOLS_DIST)/bootstrap/lib/javac.jar
151 JAVAH_JAR = $(LANGTOOLS_DIST)/bootstrap/lib/javah.jar
152 JAVADOC_JAR = $(LANGTOOLS_DIST)/bootstrap/lib/javadoc.jar
153 DOCLETS_JAR = $(LANGTOOLS_DIST)/bootstrap/lib/doclets.jar
154 JAVAC_CMD = $(BOOT_JAVA_CMD) \
155 "-Xbootclasspath/p:$(JAVAC_JAR)" \
156 -jar $(JAVAC_JAR) $(JAVACFLAGS)
157 JAVAH_CMD = $(BOOT_JAVA_CMD) \
158 "-Xbootclasspath/p:$(JAVAH_JAR)$(CLASSPATH_SEPARATOR)$(JAVADOC_JAR)$(CLASSPATH_SEPARATOR)$(JAVAC_JAR)" \
159 -jar $(JAVAH_JAR) $(JAVAHFLAGS)
160 JAVADOC_CMD = $(BOOT_JAVA_CMD) \
161 "-Xbootclasspath/p:$(JAVADOC_JAR)$(CLASSPATH_SEPARATOR)$(JAVAC_JAR)$(CLASSPATH_SEPARATOR)$(DOCLETS_JAR)" \
andrew8f72ed72010-01-29 02:38:22 +0000162 -jar $(JAVADOC_JAR) $(JAVADOCFLAGS)
duke6e45e102007-12-01 00:00:00 +0000163else
164 # If no explicit tools, use boot tools (add VM flags in this case)
165 JAVAC_CMD = $(JAVA_TOOLS_DIR)/javac $(JAVAC_JVM_FLAGS) \
166 $(JAVACFLAGS)
167 JAVAH_CMD = $(JAVA_TOOLS_DIR)/javah \
168 $(JAVAHFLAGS)
andrew8f72ed72010-01-29 02:38:22 +0000169 JAVADOC_CMD = $(JAVA_TOOLS_DIR)/javadoc $(JAVA_TOOLS_FLAGS:%=-J%) \
170 $(JAVADOCFLAGS)
duke6e45e102007-12-01 00:00:00 +0000171endif
172
173# Override of what javac to use (see deploy workspace)
174ifdef JAVAC
175 JAVAC_CMD = $(JAVAC)
176endif
177
178#
179# The bootstrap java compiler (defined as the javac in the ALT_BOOTDIR jdk).
180# Will be used to compile java code used to build the jdk, e.g. class files
181# created by this compiler will NOT become part of this built jdk, but just
182# used to build this jdk, e.g. run with the java in the ALT_BOOTDIR jdk.
183#
184# The javac supplied with the LANGTOOLS_DIST should be used to build the
185# classes that will be put into the built jdk. But note that this javac
186# will use the ALT_BOOTDIR java runtime. Any classes created by the
187# LANGTOOLS_DIST javac should not be run during this jdk build and indeed
188# may not even run with the ALT_BOOTDIR jdk because they may be a newer
189# class file version that the ALT_BOOTDIR jdk doesn't understand.
190#
191# The important observation here is that the built jdk is NOT run during
192# the build. If the built jdk needs to be verified that it can build this
193# same jdk, then it should be supplied to the build process as the ALT_BOOTDIR
194# jdk, and this resulting built jdk should be compared to the first one.
195# (They should be the same). Re-using this built jdk as the ALT_BOOTDIR
196# jdk will be the only way and the recommeneded way to verify the built jdk
197# can bootstrap itself.
198#
199
200# The javac options supplied to the boot javac is limited. This compiler
201# should only be used to build the 'make/tools' sources, which are not
202# class files that end up in the classes directory.
ohairab4f1212008-07-27 18:42:57 -0700203ifeq ($(JAVAC_MAX_WARNINGS), true)
204 BOOT_JAVACFLAGS += -Xlint:all
205endif
206ifeq ($(JAVAC_WARNINGS_FATAL), true)
duke6e45e102007-12-01 00:00:00 +0000207 BOOT_JAVACFLAGS += -Werror
208endif
andrewf0b06d82009-08-18 19:50:12 +0100209
210BOOT_SOURCE_LANGUAGE_VERSION = 6
211BOOT_TARGET_CLASS_VERSION = 6
212BOOT_JAVACFLAGS += -encoding ascii -source $(BOOT_SOURCE_LANGUAGE_VERSION) -target $(BOOT_TARGET_CLASS_VERSION)
ohaireb0a9eb2008-08-06 15:02:15 -0700213BOOT_JAR_JFLAGS += $(JAR_JFLAGS)
duke6e45e102007-12-01 00:00:00 +0000214
jjg8dd29a52009-02-26 18:51:57 -0800215BOOT_JAVACFLAGS += $(NO_PROPRIETARY_API_WARNINGS)
216
duke6e45e102007-12-01 00:00:00 +0000217BOOT_JAVA_CMD = $(BOOTDIR)/bin/java $(JAVA_TOOLS_FLAGS)
218BOOT_JAVAC_CMD = $(BOOTDIR)/bin/javac $(JAVAC_JVM_FLAGS) $(BOOT_JAVACFLAGS)
219BOOT_JAR_CMD = $(BOOTDIR)/bin/jar
220BOOT_JARSIGNER_CMD = $(BOOTDIR)/bin/jarsigner
221
222# Various tools we need to run (FIXUP: Are these the right ones?)
223NATIVE2ASCII = $(BOOTDIR)/bin/native2ascii $(JAVA_TOOLS_FLAGS:%=-J%)
224RMIC = $(BOOTDIR)/bin/rmic $(JAVA_TOOLS_FLAGS:%=-J%)
225IDLJ = $(BOOTDIR)/bin/idlj $(JAVA_TOOLS_FLAGS:%=-J%)
226
227# Should not be used
228JAVA = /should/not/be/used
229