blob: b3e0270278344d09bc8b686d2448e7c03910d056 [file] [log] [blame]
J. Duke319a3b92007-12-01 00:00:00 +00001#
2# Copyright 2007 Sun Microsystems, Inc. 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. Sun designates this
8# particular file as subject to the "Classpath" exception as provided
9# by Sun 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 Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
22# CA 95054 USA or visit www.sun.com if you need additional information or
23# have any questions.
24#
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
62JAVA_JVM_FLAGS =
63ifeq ($(ADD_CLIENT_VM_OPTION), true)
64 JAVA_JVM_FLAGS += -client
65endif
66ifdef USE_HOTSPOT_INTERPRETER_MODE
67 JAVA_JVM_FLAGS += -Xint
68endif
69
70# Various VM flags
71JAVA_TOOLS_FLAGS = $(JAVA_JVM_FLAGS) $(JAVA_MEM_FLAGS)
72
73# The VM flags for javac
74JAVAC_JVM_FLAGS =
75
76# 64-bit builds require a larger thread stack size.
77ifeq ($(ARCH_DATA_MODEL), 32)
78 JAVAC_JVM_FLAGS += -J-XX:ThreadStackSize=768
79else
80 JAVAC_JVM_FLAGS += -J-XX:ThreadStackSize=1536
81endif
82JAVAC_JVM_FLAGS += $(JAVA_TOOLS_FLAGS:%=-J%)
83
84# The jar -J options are special, must be added at the end of the command line
85JAR_JFLAGS = $(JAVA_TOOLS_FLAGS:%=-J%)
86
87# JAVA_TOOLS_DIR is the default location to find Java tools to run, if
88# langtools is not available.
89# This should be the latest promoted JDK javac.
90ifndef JAVA_TOOLS_DIR
91 JAVA_TOOLS_DIR = $(JDK_IMPORT_PATH)/bin
92endif
93
94#
95# Invoking the Java compiler. In leaf makefiles, choose as follows:
96# -- Use JAVAC if you want to take full control of what options get
97# passed to javac.
98# -- Use JAVAC_CMD if you want to take the defaults given to you.
99#
100
101ifndef DEBUG_CLASSFILES
102 ifeq ($(VARIANT), DBG)
103 DEBUG_CLASSFILES = true
104 endif
105endif
106JAVACFLAGS =
107ifeq ($(DEBUG_CLASSFILES),true)
108 JAVACFLAGS += -g
109endif
110ifeq ($(COMPILER_WARNINGS_FATAL), true)
111 JAVACFLAGS += -Werror
112endif
113
114# Add the source level (currently all source is 1.5, should this be 1.6?)
115LANGUAGE_VERSION = -source 1.5
116JAVACFLAGS += $(LANGUAGE_VERSION)
117
118# Add the class version we want (currently this is 5, should it be 6 or even 7?)
119TARGET_CLASS_VERSION = 5
120CLASS_VERSION = -target $(TARGET_CLASS_VERSION)
121JAVACFLAGS += $(CLASS_VERSION)
122JAVACFLAGS += -encoding ascii
123JAVACFLAGS += "-Xbootclasspath:$(CLASSBINDIR)"
124JAVACFLAGS += $(OTHER_JAVACFLAGS)
125
126# Needed for javah
127JAVAHFLAGS += -bootclasspath $(CLASSBINDIR)
128
129# Langtools
130ifdef LANGTOOLS_DIST
131 JAVAC_JAR = $(LANGTOOLS_DIST)/bootstrap/lib/javac.jar
132 JAVAH_JAR = $(LANGTOOLS_DIST)/bootstrap/lib/javah.jar
133 JAVADOC_JAR = $(LANGTOOLS_DIST)/bootstrap/lib/javadoc.jar
134 DOCLETS_JAR = $(LANGTOOLS_DIST)/bootstrap/lib/doclets.jar
135 JAVAC_CMD = $(BOOT_JAVA_CMD) \
136 "-Xbootclasspath/p:$(JAVAC_JAR)" \
137 -jar $(JAVAC_JAR) $(JAVACFLAGS)
138 JAVAH_CMD = $(BOOT_JAVA_CMD) \
139 "-Xbootclasspath/p:$(JAVAH_JAR)$(CLASSPATH_SEPARATOR)$(JAVADOC_JAR)$(CLASSPATH_SEPARATOR)$(JAVAC_JAR)" \
140 -jar $(JAVAH_JAR) $(JAVAHFLAGS)
141 JAVADOC_CMD = $(BOOT_JAVA_CMD) \
142 "-Xbootclasspath/p:$(JAVADOC_JAR)$(CLASSPATH_SEPARATOR)$(JAVAC_JAR)$(CLASSPATH_SEPARATOR)$(DOCLETS_JAR)" \
143 -jar $(JAVADOC_JAR)
144else
145 # If no explicit tools, use boot tools (add VM flags in this case)
146 JAVAC_CMD = $(JAVA_TOOLS_DIR)/javac $(JAVAC_JVM_FLAGS) \
147 $(JAVACFLAGS)
148 JAVAH_CMD = $(JAVA_TOOLS_DIR)/javah \
149 $(JAVAHFLAGS)
150 JAVADOC_CMD = $(JAVA_TOOLS_DIR)/javadoc $(JAVA_TOOLS_FLAGS:%=-J%)
151endif
152
153# Override of what javac to use (see deploy workspace)
154ifdef JAVAC
155 JAVAC_CMD = $(JAVAC)
156endif
157
158#
159# The bootstrap java compiler (defined as the javac in the ALT_BOOTDIR jdk).
160# Will be used to compile java code used to build the jdk, e.g. class files
161# created by this compiler will NOT become part of this built jdk, but just
162# used to build this jdk, e.g. run with the java in the ALT_BOOTDIR jdk.
163#
164# The javac supplied with the LANGTOOLS_DIST should be used to build the
165# classes that will be put into the built jdk. But note that this javac
166# will use the ALT_BOOTDIR java runtime. Any classes created by the
167# LANGTOOLS_DIST javac should not be run during this jdk build and indeed
168# may not even run with the ALT_BOOTDIR jdk because they may be a newer
169# class file version that the ALT_BOOTDIR jdk doesn't understand.
170#
171# The important observation here is that the built jdk is NOT run during
172# the build. If the built jdk needs to be verified that it can build this
173# same jdk, then it should be supplied to the build process as the ALT_BOOTDIR
174# jdk, and this resulting built jdk should be compared to the first one.
175# (They should be the same). Re-using this built jdk as the ALT_BOOTDIR
176# jdk will be the only way and the recommeneded way to verify the built jdk
177# can bootstrap itself.
178#
179
180# The javac options supplied to the boot javac is limited. This compiler
181# should only be used to build the 'make/tools' sources, which are not
182# class files that end up in the classes directory.
183ifeq ($(COMPILER_WARNINGS_FATAL), true)
184 BOOT_JAVACFLAGS += -Werror
185endif
186BOOT_JAVACFLAGS += -encoding ascii
187
188BOOT_JAVA_CMD = $(BOOTDIR)/bin/java $(JAVA_TOOLS_FLAGS)
189BOOT_JAVAC_CMD = $(BOOTDIR)/bin/javac $(JAVAC_JVM_FLAGS) $(BOOT_JAVACFLAGS)
190BOOT_JAR_CMD = $(BOOTDIR)/bin/jar
191BOOT_JARSIGNER_CMD = $(BOOTDIR)/bin/jarsigner
192
193# Various tools we need to run (FIXUP: Are these the right ones?)
194NATIVE2ASCII = $(BOOTDIR)/bin/native2ascii $(JAVA_TOOLS_FLAGS:%=-J%)
195RMIC = $(BOOTDIR)/bin/rmic $(JAVA_TOOLS_FLAGS:%=-J%)
196IDLJ = $(BOOTDIR)/bin/idlj $(JAVA_TOOLS_FLAGS:%=-J%)
197
198# Should not be used
199JAVA = /should/not/be/used
200