37437
|
1 |
#
|
|
2 |
# Copyright (c) 2013, 2016, Oracle and/or its affiliates. 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. Oracle designates this
|
|
8 |
# particular file as subject to the "Classpath" exception as provided
|
|
9 |
# by Oracle 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 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.
|
|
24 |
#
|
|
25 |
|
|
26 |
# Include support files that will setup compiler flags due to the selected
|
|
27 |
# jvm feature set, and specific file overrides.
|
|
28 |
include lib/JvmFeatures.gmk
|
|
29 |
include lib/JvmOverrideFiles.gmk
|
|
30 |
|
|
31 |
$(eval $(call IncludeCustomExtension, hotspot, lib/CompileJvm.gmk))
|
|
32 |
|
|
33 |
################################################################################
|
|
34 |
# Setup compilation of the main Hotspot native library (libjvm).
|
|
35 |
|
|
36 |
JVM_OUTPUTDIR := $(JVM_VARIANT_OUTPUTDIR)/libjvm
|
|
37 |
JVM_MAPFILE := $(JVM_OUTPUTDIR)/mapfile
|
|
38 |
|
|
39 |
################################################################################
|
|
40 |
# Platform independent setup
|
|
41 |
|
|
42 |
# This variable may be added to by a custom extension
|
|
43 |
JVM_SRC_ROOTS += $(HOTSPOT_TOPDIR)/src
|
|
44 |
|
|
45 |
JVM_SRC_DIRS += $(call uniq, $(wildcard $(foreach d, $(JVM_SRC_ROOTS), \
|
|
46 |
$d/share/vm \
|
|
47 |
$d/os/$(HOTSPOT_TARGET_OS)/vm \
|
|
48 |
$d/os/$(HOTSPOT_TARGET_OS_TYPE)/vm \
|
|
49 |
$d/cpu/$(HOTSPOT_TARGET_CPU_ARCH)/vm \
|
|
50 |
$d/os_cpu/$(HOTSPOT_TARGET_OS)_$(HOTSPOT_TARGET_CPU_ARCH)/vm \
|
|
51 |
))) \
|
|
52 |
$(JVM_VARIANT_OUTPUTDIR)/gensrc/jvmtifiles \
|
|
53 |
$(JVM_VARIANT_OUTPUTDIR)/gensrc/tracefiles \
|
|
54 |
#
|
|
55 |
|
|
56 |
JVM_CFLAGS_INCLUDES += \
|
|
57 |
$(patsubst %,-I%,$(filter-out $(JVM_VARIANT_OUTPUTDIR)/gensrc/%, $(JVM_SRC_DIRS))) \
|
|
58 |
-I$(JVM_VARIANT_OUTPUTDIR)/gensrc \
|
|
59 |
-I$(HOTSPOT_TOPDIR)/src/share/vm/precompiled \
|
|
60 |
-I$(HOTSPOT_TOPDIR)/src/share/vm/prims \
|
|
61 |
#
|
|
62 |
|
40010
|
63 |
# INCLUDE_SUFFIX_* is only meant for including the proper
|
|
64 |
# platform files. Don't use it to guard code. Use the value of
|
|
65 |
# HOTSPOT_TARGET_CPU_DEFINE etc. instead.
|
|
66 |
# Remaining TARGET_ARCH_* is needed to distinguish closed and open
|
|
67 |
# 64-bit ARM ports (also called AARCH64).
|
37437
|
68 |
JVM_CFLAGS_TARGET_DEFINES += \
|
|
69 |
-DTARGET_ARCH_$(HOTSPOT_TARGET_CPU_ARCH) \
|
40010
|
70 |
-DINCLUDE_SUFFIX_OS=_$(HOTSPOT_TARGET_OS) \
|
|
71 |
-DINCLUDE_SUFFIX_CPU=_$(HOTSPOT_TARGET_CPU_ARCH) \
|
37437
|
72 |
-DTARGET_COMPILER_$(HOTSPOT_TOOLCHAIN_TYPE) \
|
|
73 |
-D$(HOTSPOT_TARGET_CPU_DEFINE) \
|
|
74 |
-DHOTSPOT_LIB_ARCH='"$(OPENJDK_TARGET_CPU_LEGACY_LIB)"' \
|
|
75 |
#
|
|
76 |
|
|
77 |
ifeq ($(DEBUG_LEVEL), release)
|
|
78 |
# For hotspot, release builds differ internally between "optimized" and "product"
|
|
79 |
# in that "optimize" does not define PRODUCT.
|
|
80 |
ifneq ($(HOTSPOT_DEBUG_LEVEL), optimized)
|
|
81 |
JVM_CFLAGS_DEBUGLEVEL := -DPRODUCT
|
|
82 |
endif
|
|
83 |
else ifeq ($(DEBUG_LEVEL), fastdebug)
|
|
84 |
JVM_CFLAGS_DEBUGLEVEL := -DASSERT
|
|
85 |
ifeq ($(filter $(OPENJDK_TARGET_OS), windows aix), )
|
|
86 |
# NOTE: Old build did not define CHECK_UNHANDLED_OOPS on Windows and AIX.
|
|
87 |
JVM_CFLAGS_DEBUGLEVEL += -DCHECK_UNHANDLED_OOPS
|
|
88 |
endif
|
|
89 |
else ifeq ($(DEBUG_LEVEL), slowdebug)
|
|
90 |
# _NMT_NOINLINE_ informs NMT that no inlining is done by the compiler
|
|
91 |
JVM_CFLAGS_DEBUGLEVEL := -DASSERT -D_NMT_NOINLINE_
|
|
92 |
endif
|
|
93 |
|
|
94 |
JVM_CFLAGS += \
|
|
95 |
$(JVM_CFLAGS_DEBUGLEVEL) \
|
|
96 |
$(JVM_CFLAGS_TARGET_DEFINES) \
|
|
97 |
$(JVM_CFLAGS_FEATURES) \
|
|
98 |
$(JVM_CFLAGS_INCLUDES) \
|
|
99 |
$(EXTRA_CFLAGS) \
|
|
100 |
#
|
|
101 |
|
|
102 |
JVM_LDFLAGS += \
|
|
103 |
$(SHARED_LIBRARY_FLAGS) \
|
|
104 |
$(JVM_LDFLAGS_FEATURES) \
|
|
105 |
$(EXTRA_LDFLAGS) \
|
|
106 |
#
|
|
107 |
|
|
108 |
JVM_LIBS += \
|
|
109 |
$(JVM_LIBS_FEATURES) \
|
|
110 |
#
|
|
111 |
|
|
112 |
# These files and directories are always excluded
|
|
113 |
JVM_EXCLUDE_FILES += jsig.c jvmtiEnvRecommended.cpp jvmtiEnvStub.cpp args.cc
|
|
114 |
JVM_EXCLUDES += adlc
|
|
115 |
|
|
116 |
# Needed by vm_version.cpp
|
|
117 |
ifeq ($(OPENJDK_TARGET_CPU), x86_64)
|
|
118 |
OPENJDK_TARGET_CPU_VM_VERSION := amd64
|
|
119 |
else ifeq ($(OPENJDK_TARGET_CPU), sparcv9)
|
|
120 |
OPENJDK_TARGET_CPU_VM_VERSION := sparc
|
|
121 |
else
|
|
122 |
OPENJDK_TARGET_CPU_VM_VERSION := $(OPENJDK_TARGET_CPU)
|
|
123 |
endif
|
|
124 |
|
|
125 |
CFLAGS_VM_VERSION := \
|
|
126 |
$(VERSION_CFLAGS) \
|
|
127 |
-DHOTSPOT_VERSION_STRING='"$(VERSION_STRING)"' \
|
|
128 |
-DDEBUG_LEVEL='"$(DEBUG_LEVEL)"' \
|
|
129 |
-DHOTSPOT_BUILD_USER='"$(USERNAME)"' \
|
|
130 |
-DHOTSPOT_VM_DISTRO='"$(HOTSPOT_VM_DISTRO)"' \
|
|
131 |
-DCPU='"$(OPENJDK_TARGET_CPU_VM_VERSION)"' \
|
|
132 |
#
|
|
133 |
|
|
134 |
# -DDONT_USE_PRECOMPILED_HEADER will exclude all includes in precompiled.hpp.
|
|
135 |
ifeq ($(USE_PRECOMPILED_HEADER), 0)
|
|
136 |
JVM_CFLAGS += -DDONT_USE_PRECOMPILED_HEADER
|
|
137 |
endif
|
|
138 |
|
|
139 |
################################################################################
|
|
140 |
# Platform specific setup
|
|
141 |
|
|
142 |
ifneq ($(filter $(OPENJDK_TARGET_OS), linux macosx windows), )
|
|
143 |
JVM_PRECOMPILED_HEADER := $(HOTSPOT_TOPDIR)/src/share/vm/precompiled/precompiled.hpp
|
|
144 |
endif
|
|
145 |
|
|
146 |
ifneq ($(filter $(OPENJDK_TARGET_OS), macosx aix solaris), )
|
|
147 |
# On macosx, aix and solaris we have to link with the C++ compiler
|
|
148 |
JVM_TOOLCHAIN := TOOLCHAIN_LINK_CXX
|
|
149 |
else
|
|
150 |
JVM_TOOLCHAIN := TOOLCHAIN_DEFAULT
|
|
151 |
endif
|
|
152 |
|
|
153 |
ifeq ($(OPENJDK_TARGET_CPU), x86)
|
|
154 |
JVM_EXCLUDE_PATTERNS += x86_64
|
|
155 |
else ifeq ($(OPENJDK_TARGET_CPU), x86_64)
|
|
156 |
JVM_EXCLUDE_PATTERNS += x86_32
|
|
157 |
endif
|
|
158 |
|
|
159 |
# Inline assembly for solaris
|
|
160 |
ifeq ($(OPENJDK_TARGET_OS), solaris)
|
|
161 |
ifeq ($(OPENJDK_TARGET_CPU), x86_64)
|
|
162 |
JVM_CFLAGS += $(HOTSPOT_TOPDIR)/src/os_cpu/solaris_x86/vm/solaris_x86_64.il
|
|
163 |
else ifeq ($(OPENJDK_TARGET_CPU), sparcv9)
|
|
164 |
JVM_CFLAGS += $(HOTSPOT_TOPDIR)/src/os_cpu/solaris_sparc/vm/solaris_sparc.il
|
|
165 |
endif
|
|
166 |
endif
|
|
167 |
|
|
168 |
ifeq ($(OPENJDK_TARGET_OS)-$(OPENJDK_TARGET_CPU), solaris-sparcv9)
|
|
169 |
ifeq ($(COMPILE_WITH_DEBUG_SYMBOLS), false)
|
|
170 |
# NOTE: In the old build, we weirdly enough set -g/-g0 always, regardless
|
|
171 |
# of if debug symbols were needed. Without it, compilation fails on
|
|
172 |
# sparc! :-(
|
|
173 |
JVM_CFLAGS += -g0
|
|
174 |
endif
|
|
175 |
endif
|
|
176 |
|
|
177 |
ifeq ($(OPENJDK_TARGET_OS), windows)
|
|
178 |
ifeq ($(OPENJDK_TARGET_CPU_BITS), 64)
|
|
179 |
RC_DESC := 64-Bit$(SPACE)
|
|
180 |
endif
|
|
181 |
JVM_RCFLAGS += -D"HS_FILEDESC=$(HOTSPOT_VM_DISTRO) $(RC_DESC)$(JVM_VARIANT) VM"
|
|
182 |
endif
|
|
183 |
|
|
184 |
ifeq ($(OPENJDK_TARGET_OS), macosx)
|
|
185 |
# NOTE: The old build did not strip binaries on macosx.
|
|
186 |
JVM_STRIP_SYMBOLS := false
|
|
187 |
else
|
|
188 |
JVM_STRIP_SYMBOLS := true
|
|
189 |
endif
|
|
190 |
|
|
191 |
JVM_OPTIMIZATION ?= HIGHEST_JVM
|
|
192 |
|
|
193 |
################################################################################
|
|
194 |
# Now set up the actual compilation of the main hotspot native library
|
|
195 |
|
|
196 |
$(eval $(call SetupNativeCompilation, BUILD_LIBJVM, \
|
|
197 |
TOOLCHAIN := $(JVM_TOOLCHAIN), \
|
|
198 |
LIBRARY := jvm, \
|
|
199 |
OUTPUT_DIR := $(JVM_OUTPUTDIR), \
|
|
200 |
SRC := $(JVM_SRC_DIRS), \
|
|
201 |
EXCLUDES := $(JVM_EXCLUDES), \
|
|
202 |
EXCLUDE_FILES := $(JVM_EXCLUDE_FILES), \
|
|
203 |
EXCLUDE_PATTERNS := $(JVM_EXCLUDE_PATTERNS), \
|
|
204 |
EXTRA_OBJECT_FILES := $(DTRACE_EXTRA_OBJECT_FILES), \
|
|
205 |
CFLAGS := $(JVM_CFLAGS), \
|
|
206 |
CFLAGS_DEBUG_SYMBOLS := $(JVM_CFLAGS_SYMBOLS), \
|
|
207 |
CXXFLAGS_DEBUG_SYMBOLS := $(JVM_CFLAGS_SYMBOLS), \
|
|
208 |
vm_version.cpp_CXXFLAGS := $(CFLAGS_VM_VERSION), \
|
|
209 |
DISABLED_WARNINGS_clang := delete-non-virtual-dtor dynamic-class-memaccess \
|
|
210 |
empty-body format logical-op-parentheses parentheses \
|
|
211 |
parentheses-equality switch tautological-compare, \
|
|
212 |
DISABLED_WARNINGS_xlc := 1540-0216 1540-0198 1540-1090 1540-1639 \
|
|
213 |
1540-1088 1500-010, \
|
|
214 |
ASFLAGS := $(JVM_ASFLAGS), \
|
|
215 |
LDFLAGS := $(JVM_LDFLAGS), \
|
|
216 |
LIBS := $(JVM_LIBS), \
|
|
217 |
OPTIMIZATION := $(JVM_OPTIMIZATION), \
|
|
218 |
OBJECT_DIR := $(JVM_OUTPUTDIR)/objs, \
|
|
219 |
MAPFILE := $(JVM_MAPFILE), \
|
|
220 |
USE_MAPFILE_FOR_SYMBOLS := true, \
|
|
221 |
STRIP_SYMBOLS := $(JVM_STRIP_SYMBOLS), \
|
|
222 |
EMBED_MANIFEST := true, \
|
|
223 |
RC_FLAGS := $(JVM_RCFLAGS), \
|
|
224 |
VERSIONINFO_RESOURCE := $(HOTSPOT_TOPDIR)/src/os/windows/vm/version.rc, \
|
|
225 |
PRECOMPILED_HEADER := $(JVM_PRECOMPILED_HEADER), \
|
|
226 |
PRECOMPILED_HEADER_EXCLUDE := $(JVM_PRECOMPILED_HEADER_EXCLUDE), \
|
|
227 |
))
|
|
228 |
|
|
229 |
# AIX warning explanation:
|
|
230 |
# 1500-010 : (W) WARNING in ...: Infinite loop. Program may not stop.
|
|
231 |
# There are several infinite loops in the vm, so better suppress.
|
|
232 |
# 1540-0198 : (W) The omitted keyword "private" is assumed for base class "...".
|
|
233 |
# 1540-0216 : (W) An expression of type .. cannot be converted to type ..
|
|
234 |
# In hotspot this fires for functionpointer to pointer conversions
|
|
235 |
# 1540-1088 : (W) The exception specification is being ignored.
|
|
236 |
# In hotspot this is caused by throw() in declaration of new() in nmethod.hpp.
|
|
237 |
# 1540-1090 : (I) The destructor of "..." might not be called.
|
|
238 |
# 1540-1639 : (I) The behavior of long type bit fields has changed ...
|
|
239 |
|
|
240 |
# Include mapfile generation. It relies on BUILD_LIBJVM_ALL_OBJS which is only
|
|
241 |
# defined after the above call to BUILD_LIBJVM. Mapfile will be generated
|
|
242 |
# after all object files are built, but before the jvm library is linked.
|
|
243 |
include lib/JvmMapfile.gmk
|
|
244 |
|
|
245 |
TARGETS += $(BUILD_LIBJVM)
|