1 #
2 # Copyright (c) 2013, 2020, 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 $(eval $(call IncludeCustomExtension, hotspot/lib/JvmFeatures.gmk))
27
28 ################################################################################
29 # Setup CFLAGS and EXCLUDES for the libjvm compilation, depending on which
30 # jvm features are selected for this jvm variant.
31
32 ifeq ($(call check-jvm-feature, compiler1), true)
33 JVM_CFLAGS_FEATURES += -DCOMPILER1
34 else
35 JVM_EXCLUDE_PATTERNS += c1_ c1/
36 endif
37
38 ifeq ($(call check-jvm-feature, compiler2), true)
39 JVM_CFLAGS_FEATURES += -DCOMPILER2
40 JVM_SRC_DIRS += $(JVM_VARIANT_OUTPUTDIR)/gensrc/adfiles
41 else
42 JVM_EXCLUDES += opto libadt
43 JVM_EXCLUDE_FILES += bcEscapeAnalyzer.cpp ciTypeFlow.cpp
44 JVM_EXCLUDE_PATTERNS += c2_ runtime_ /c2/
45 endif
46
47 ifeq ($(call check-jvm-feature, zero), true)
48 JVM_CFLAGS_FEATURES += -DZERO -DCC_INTERP -DZERO_LIBARCH='"$(OPENJDK_TARGET_CPU_LEGACY_LIB)"' $(LIBFFI_CFLAGS)
49 JVM_LIBS_FEATURES += $(LIBFFI_LIBS)
50 ifeq ($(ENABLE_LIBFFI_BUNDLING), true)
51 JVM_LDFLAGS_FEATURES += $(call SET_EXECUTABLE_ORIGIN,/..)
52 endif
53 ifeq ($(call isTargetCpu, sparcv9), true)
54 BUILD_LIBJVM_EXTRA_FILES := $(TOPDIR)/src/hotspot/cpu/sparc/memset_with_concurrent_readers_sparc.cpp
55 endif
56 endif
57
58 ifeq ($(call check-jvm-feature, minimal), true)
59 JVM_CFLAGS_FEATURES += -DMINIMAL_JVM -DVMTYPE=\"Minimal\"
60 ifeq ($(call isTargetOs, linux), true)
61 # Override the default -g with a more liberal strip policy for the minimal JVM
62 JVM_STRIPFLAGS := --strip-unneeded
63 endif
64 endif
65
66 ifeq ($(call check-jvm-feature, dtrace), true)
67 JVM_CFLAGS_FEATURES += -DDTRACE_ENABLED
68 endif
69
70 ifeq ($(call check-jvm-feature, static-build), true)
71 JVM_CFLAGS_FEATURES += -DSTATIC_BUILD=1
72 endif
73
74 ifneq ($(call check-jvm-feature, jvmti), true)
75 JVM_CFLAGS_FEATURES += -DINCLUDE_JVMTI=0
76 JVM_EXCLUDE_FILES += jvmtiGetLoadedClasses.cpp jvmtiThreadState.cpp jvmtiExtensions.cpp \
77 jvmtiImpl.cpp jvmtiManageCapabilities.cpp jvmtiRawMonitor.cpp jvmtiUtil.cpp jvmtiTrace.cpp \
78 jvmtiCodeBlobEvents.cpp jvmtiEnv.cpp jvmtiRedefineClasses.cpp jvmtiEnvBase.cpp jvmtiEnvThreadState.cpp \
79 jvmtiTagMap.cpp jvmtiEventController.cpp evmCompat.cpp jvmtiEnter.xsl jvmtiExport.cpp \
80 jvmtiClassFileReconstituter.cpp
81 endif
82
83 ifneq ($(call check-jvm-feature, jvmci), true)
84 JVM_CFLAGS_FEATURES += -DINCLUDE_JVMCI=0
85 JVM_EXCLUDES += jvmci
86 JVM_EXCLUDE_FILES += jvmciCodeInstaller_$(HOTSPOT_TARGET_CPU_ARCH).cpp
87 endif
88
89 ifneq ($(call check-jvm-feature, vm-structs), true)
90 JVM_CFLAGS_FEATURES += -DINCLUDE_VM_STRUCTS=0
91 JVM_EXCLUDE_FILES += vmStructs.cpp
92 endif
93
94 ifneq ($(call check-jvm-feature, jni-check), true)
95 JVM_CFLAGS_FEATURES += -DINCLUDE_JNI_CHECK=0
96 JVM_EXCLUDE_FILES += jniCheck.cpp
97 endif
98
99 ifneq ($(call check-jvm-feature, services), true)
100 JVM_CFLAGS_FEATURES += -DINCLUDE_SERVICES=0
101 JVM_EXCLUDE_FILES += heapDumper.cpp heapInspection.cpp \
102 attachListener_$(HOTSPOT_TARGET_OS).cpp attachListener.cpp
103 endif
104
105 ifneq ($(call check-jvm-feature, management), true)
106 JVM_CFLAGS_FEATURES += -DINCLUDE_MANAGEMENT=0
107 endif
108
109 ifneq ($(call check-jvm-feature, cds), true)
110 JVM_CFLAGS_FEATURES += -DINCLUDE_CDS=0
111 JVM_EXCLUDE_FILES += \
112 classListParser.cpp \
113 classLoaderExt.cpp \
114 dynamicArchive.cpp \
115 filemap.cpp \
116 heapShared.cpp \
117 metaspaceShared.cpp \
118 metaspaceShared_$(HOTSPOT_TARGET_CPU).cpp \
119 metaspaceShared_$(HOTSPOT_TARGET_CPU_ARCH).cpp \
120 sharedClassUtil.cpp \
121 sharedPathsMiscInfo.cpp \
122 systemDictionaryShared.cpp \
123 #
124 endif
125
126 ifneq ($(call check-jvm-feature, nmt), true)
127 JVM_CFLAGS_FEATURES += -DINCLUDE_NMT=0
128 JVM_EXCLUDE_FILES += \
129 memBaseline.cpp memReporter.cpp mallocTracker.cpp virtualMemoryTracker.cpp nmtCommon.cpp \
130 memTracker.cpp nmtDCmd.cpp mallocSiteTable.cpp threadStackTracker.cpp
131 endif
132
133 ifneq ($(call check-jvm-feature, aot), true)
134 JVM_CFLAGS_FEATURES += -DINCLUDE_AOT=0
135 JVM_EXCLUDE_FILES += \
136 compiledIC_aot_x86_64.cpp compiledIC_aot_aarch64.cpp \
137 compilerRuntime.cpp aotCodeHeap.cpp aotCompiledMethod.cpp \
138 aotLoader.cpp compiledIC_aot.cpp
139 endif
140
141 ifneq ($(call check-jvm-feature, g1gc), true)
142 JVM_CFLAGS_FEATURES += -DINCLUDE_G1GC=0
143 JVM_EXCLUDE_PATTERNS += gc/g1
144 endif
145
146 ifneq ($(call check-jvm-feature, parallelgc), true)
147 JVM_CFLAGS_FEATURES += -DINCLUDE_PARALLELGC=0
148 JVM_EXCLUDE_PATTERNS += gc/parallel
149 endif
150
151 ifneq ($(call check-jvm-feature, serialgc), true)
152 JVM_CFLAGS_FEATURES += -DINCLUDE_SERIALGC=0
153 JVM_EXCLUDE_PATTERNS += gc/serial
154 # If serial is disabled, we cannot use serial as OldGC in parallel
155 JVM_EXCLUDE_FILES += psMarkSweep.cpp psMarkSweepDecorator.cpp
156 endif
157
158 ifneq ($(call check-jvm-feature, epsilongc), true)
159 JVM_CFLAGS_FEATURES += -DINCLUDE_EPSILONGC=0
160 JVM_EXCLUDE_PATTERNS += gc/epsilon
161 endif
162
163 ifneq ($(call check-jvm-feature, zgc), true)
164 JVM_CFLAGS_FEATURES += -DINCLUDE_ZGC=0
165 JVM_EXCLUDE_PATTERNS += gc/z
166 endif
167
168 ifneq ($(call check-jvm-feature, shenandoahgc), true)
169 JVM_CFLAGS_FEATURES += -DINCLUDE_SHENANDOAHGC=0
170 JVM_EXCLUDE_PATTERNS += gc/shenandoah
171 endif
172
173 ifneq ($(call check-jvm-feature, jfr), true)
174 JVM_CFLAGS_FEATURES += -DINCLUDE_JFR=0
175 JVM_EXCLUDE_PATTERNS += jfr
176 endif
177
178 ################################################################################
179
180 ifeq ($(call check-jvm-feature, link-time-opt), true)
181 # NOTE: Disable automatic opimization level and let the explicit cflag control
182 # optimization level instead. This activates O3 on slowdebug builds, just
183 # like the old build, but it's probably not right.
184 JVM_OPTIMIZATION :=
185 JVM_CFLAGS_FEATURES += -O3 -flto
186 JVM_LDFLAGS_FEATURES += -O3 -flto -fuse-linker-plugin -fno-strict-aliasing
187 endif
188
189 ifeq ($(call check-jvm-feature, minimal), true)
190 ifeq ($(call check-jvm-feature, link-time-opt), false)
191 JVM_OPTIMIZATION := SIZE
192 OPT_SPEED_SRC := \
193 allocation.cpp \
194 assembler.cpp \
195 barrierSet.cpp \
196 basicLock.cpp \
197 biasedLocking.cpp \
198 bytecode.cpp \
199 bytecodeInterpreter.cpp \
200 c1_Compilation.cpp \
201 c1_Compiler.cpp \
202 c1_GraphBuilder.cpp \
203 c1_LinearScan.cpp \
204 c1_LIR.cpp \
205 ciEnv.cpp \
206 ciObjectFactory.cpp \
207 codeBlob.cpp \
208 constantPool.cpp \
209 constMethod.cpp \
210 classLoader.cpp \
211 classLoaderData.cpp \
212 classFileParser.cpp \
213 classFileStream.cpp \
214 cpCache.cpp \
215 defNewGeneration.cpp \
216 frame_arm.cpp \
217 frame_aarch64.cpp \
218 frame_ppc.cpp \
219 frame_s390.cpp \
220 frame_x86.cpp \
221 genCollectedHeap.cpp \
222 generation.cpp \
223 genMarkSweep.cpp \
224 growableArray.cpp \
225 handles.cpp \
226 hashtable.cpp \
227 heap.cpp \
228 icache.cpp \
229 icache_arm.cpp \
230 icache_aarch64.cpp \
231 icache_ppc.cpp \
232 icache_s390.cpp \
233 icache_x86.cpp \
234 instanceKlass.cpp \
235 invocationCounter.cpp \
236 iterator.cpp \
237 javaCalls.cpp \
238 javaClasses.cpp \
239 jniFastGetField_arm.cpp \
240 jvm.cpp \
241 linkResolver.cpp \
242 klass.cpp \
243 klassVtable.cpp \
244 markSweep.cpp \
245 memRegion.cpp \
246 memoryPool.cpp \
247 method.cpp \
248 methodHandles.cpp \
249 methodHandles_arm.cpp \
250 methodLiveness.cpp \
251 metaspace.cpp \
252 mutex.cpp \
253 mutexLocker.cpp \
254 nativeLookup.cpp \
255 objArrayKlass.cpp \
256 os_linux.cpp \
257 os_linux_arm.cpp \
258 resourceArea.cpp \
259 rewriter.cpp \
260 sharedRuntime.cpp \
261 signature.cpp \
262 space.cpp \
263 stackMapTable.cpp \
264 symbolTable.cpp \
265 systemDictionary.cpp \
266 symbol.cpp \
267 synchronizer.cpp \
268 timer.cpp \
269 typeArrayKlass.cpp \
270 unsafe.cpp \
271 utf8.cpp \
272 vmSymbols.cpp \
273 #
274
275 $(foreach s, $(OPT_SPEED_SRC), \
276 $(eval BUILD_LIBJVM_$s_OPTIMIZATION := HIGHEST_JVM))
277
278 BUILD_LIBJVM_systemDictionary.cpp_CXXFLAGS := -fno-optimize-sibling-calls
279 endif
280 endif