blob: d4a27e3b6c6d472fc85a76810ce29f85b441497d [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)
119 JAVACFLAGS += -Xlint:all
120endif
121ifeq ($(JAVAC_WARNINGS_FATAL), true)
duke6e45e102007-12-01 00:00:00 +0000122 JAVACFLAGS += -Werror
123endif
124
wetmore0b4d7dc2011-02-23 22:54:47 -0800125#
126# Some licensees do not get the Security Source bundles. We will
127# fall back on the prebuilt jce.jar so that we can do a best
128# attempt at building. If sources exist, we always want to
129# build/use the most recent source instead of an older jce.jar, whether
130# built implicitly/explicitly.
131#
132ifeq ($(wildcard $(SHARE_SRC)/classes/javax/crypto/Cipher.java),)
133 JCEFLAGS = $(CLASSPATH_SEPARATOR)$(LIBDIR)/jce.jar
134endif
135
jjg84511fd2009-07-27 15:19:55 -0700136# Add the source level
137SOURCE_LANGUAGE_VERSION = 7
jjg92637bb2009-05-20 13:55:50 -0700138LANGUAGE_VERSION = -source $(SOURCE_LANGUAGE_VERSION)
duke6e45e102007-12-01 00:00:00 +0000139JAVACFLAGS += $(LANGUAGE_VERSION)
140
jjg84511fd2009-07-27 15:19:55 -0700141# Add the class version we want
142TARGET_CLASS_VERSION = 7
duke6e45e102007-12-01 00:00:00 +0000143CLASS_VERSION = -target $(TARGET_CLASS_VERSION)
144JAVACFLAGS += $(CLASS_VERSION)
145JAVACFLAGS += -encoding ascii
wetmore0b4d7dc2011-02-23 22:54:47 -0800146JAVACFLAGS += "-Xbootclasspath:$(CLASSBINDIR)$(JCEFLAGS)"
duke6e45e102007-12-01 00:00:00 +0000147JAVACFLAGS += $(OTHER_JAVACFLAGS)
148
149# Needed for javah
wetmore0b4d7dc2011-02-23 22:54:47 -0800150JAVAHFLAGS += -bootclasspath "$(CLASSBINDIR)$(JCEFLAGS)"
duke6e45e102007-12-01 00:00:00 +0000151
andrew8f72ed72010-01-29 02:38:22 +0000152# Needed for javadoc to ensure it builds documentation
153# against the newly built classes
154JAVADOCFLAGS += -bootclasspath $(CLASSBINDIR)
155
jjg8dd29a52009-02-26 18:51:57 -0800156# Needed for JAVADOC and BOOT_JAVACFLAGS
157NO_PROPRIETARY_API_WARNINGS = -XDignore.symbol.file=true
158
duke6e45e102007-12-01 00:00:00 +0000159# Langtools
160ifdef LANGTOOLS_DIST
161 JAVAC_JAR = $(LANGTOOLS_DIST)/bootstrap/lib/javac.jar
162 JAVAH_JAR = $(LANGTOOLS_DIST)/bootstrap/lib/javah.jar
163 JAVADOC_JAR = $(LANGTOOLS_DIST)/bootstrap/lib/javadoc.jar
164 DOCLETS_JAR = $(LANGTOOLS_DIST)/bootstrap/lib/doclets.jar
165 JAVAC_CMD = $(BOOT_JAVA_CMD) \
166 "-Xbootclasspath/p:$(JAVAC_JAR)" \
167 -jar $(JAVAC_JAR) $(JAVACFLAGS)
168 JAVAH_CMD = $(BOOT_JAVA_CMD) \
jjgb2d91b42011-01-06 14:32:00 -0800169 "-Xbootclasspath/p:$(JAVAH_JAR)$(CLASSPATH_SEPARATOR)$(JAVAC_JAR)" \
duke6e45e102007-12-01 00:00:00 +0000170 -jar $(JAVAH_JAR) $(JAVAHFLAGS)
171 JAVADOC_CMD = $(BOOT_JAVA_CMD) \
172 "-Xbootclasspath/p:$(JAVADOC_JAR)$(CLASSPATH_SEPARATOR)$(JAVAC_JAR)$(CLASSPATH_SEPARATOR)$(DOCLETS_JAR)" \
andrew8f72ed72010-01-29 02:38:22 +0000173 -jar $(JAVADOC_JAR) $(JAVADOCFLAGS)
duke6e45e102007-12-01 00:00:00 +0000174else
175 # If no explicit tools, use boot tools (add VM flags in this case)
176 JAVAC_CMD = $(JAVA_TOOLS_DIR)/javac $(JAVAC_JVM_FLAGS) \
177 $(JAVACFLAGS)
178 JAVAH_CMD = $(JAVA_TOOLS_DIR)/javah \
179 $(JAVAHFLAGS)
andrew8f72ed72010-01-29 02:38:22 +0000180 JAVADOC_CMD = $(JAVA_TOOLS_DIR)/javadoc $(JAVA_TOOLS_FLAGS:%=-J%) \
181 $(JAVADOCFLAGS)
duke6e45e102007-12-01 00:00:00 +0000182endif
183
184# Override of what javac to use (see deploy workspace)
185ifdef JAVAC
186 JAVAC_CMD = $(JAVAC)
187endif
188
189#
190# The bootstrap java compiler (defined as the javac in the ALT_BOOTDIR jdk).
191# Will be used to compile java code used to build the jdk, e.g. class files
192# created by this compiler will NOT become part of this built jdk, but just
193# used to build this jdk, e.g. run with the java in the ALT_BOOTDIR jdk.
194#
195# The javac supplied with the LANGTOOLS_DIST should be used to build the
196# classes that will be put into the built jdk. But note that this javac
197# will use the ALT_BOOTDIR java runtime. Any classes created by the
198# LANGTOOLS_DIST javac should not be run during this jdk build and indeed
199# may not even run with the ALT_BOOTDIR jdk because they may be a newer
200# class file version that the ALT_BOOTDIR jdk doesn't understand.
201#
202# The important observation here is that the built jdk is NOT run during
203# the build. If the built jdk needs to be verified that it can build this
204# same jdk, then it should be supplied to the build process as the ALT_BOOTDIR
205# jdk, and this resulting built jdk should be compared to the first one.
206# (They should be the same). Re-using this built jdk as the ALT_BOOTDIR
207# jdk will be the only way and the recommeneded way to verify the built jdk
208# can bootstrap itself.
209#
210
211# The javac options supplied to the boot javac is limited. This compiler
212# should only be used to build the 'make/tools' sources, which are not
213# class files that end up in the classes directory.
ohairab4f1212008-07-27 18:42:57 -0700214ifeq ($(JAVAC_MAX_WARNINGS), true)
215 BOOT_JAVACFLAGS += -Xlint:all
216endif
217ifeq ($(JAVAC_WARNINGS_FATAL), true)
duke6e45e102007-12-01 00:00:00 +0000218 BOOT_JAVACFLAGS += -Werror
219endif
andrewf0b06d82009-08-18 19:50:12 +0100220
221BOOT_SOURCE_LANGUAGE_VERSION = 6
222BOOT_TARGET_CLASS_VERSION = 6
223BOOT_JAVACFLAGS += -encoding ascii -source $(BOOT_SOURCE_LANGUAGE_VERSION) -target $(BOOT_TARGET_CLASS_VERSION)
ohaireb0a9eb2008-08-06 15:02:15 -0700224BOOT_JAR_JFLAGS += $(JAR_JFLAGS)
duke6e45e102007-12-01 00:00:00 +0000225
jjg8dd29a52009-02-26 18:51:57 -0800226BOOT_JAVACFLAGS += $(NO_PROPRIETARY_API_WARNINGS)
227
duke6e45e102007-12-01 00:00:00 +0000228BOOT_JAVA_CMD = $(BOOTDIR)/bin/java $(JAVA_TOOLS_FLAGS)
229BOOT_JAVAC_CMD = $(BOOTDIR)/bin/javac $(JAVAC_JVM_FLAGS) $(BOOT_JAVACFLAGS)
230BOOT_JAR_CMD = $(BOOTDIR)/bin/jar
231BOOT_JARSIGNER_CMD = $(BOOTDIR)/bin/jarsigner
232
233# Various tools we need to run (FIXUP: Are these the right ones?)
234NATIVE2ASCII = $(BOOTDIR)/bin/native2ascii $(JAVA_TOOLS_FLAGS:%=-J%)
235RMIC = $(BOOTDIR)/bin/rmic $(JAVA_TOOLS_FLAGS:%=-J%)
236IDLJ = $(BOOTDIR)/bin/idlj $(JAVA_TOOLS_FLAGS:%=-J%)
237
238# Should not be used
239JAVA = /should/not/be/used
240