| # |
| # Copyright (c) 2013, 2022, Oracle and/or its affiliates. All rights reserved. |
| # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. |
| # |
| # This code is free software; you can redistribute it and/or modify it |
| # under the terms of the GNU General Public License version 2 only, as |
| # published by the Free Software Foundation. Oracle designates this |
| # particular file as subject to the "Classpath" exception as provided |
| # by Oracle in the LICENSE file that accompanied this code. |
| # |
| # This code is distributed in the hope that it will be useful, but WITHOUT |
| # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or |
| # FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License |
| # version 2 for more details (a copy is included in the LICENSE file that |
| # accompanied this code). |
| # |
| # You should have received a copy of the GNU General Public License version |
| # 2 along with this work; if not, write to the Free Software Foundation, |
| # Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. |
| # |
| # Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA |
| # or visit www.oracle.com if you need additional information or have any |
| # questions. |
| # |
| |
| $(eval $(call IncludeCustomExtension, hotspot/lib/JvmFeatures.gmk)) |
| |
| ################################################################################ |
| # Setup CFLAGS and EXCLUDES for the libjvm compilation, depending on which |
| # jvm features are selected for this jvm variant. |
| |
| ifeq ($(call check-jvm-feature, compiler1), true) |
| JVM_CFLAGS_FEATURES += -DCOMPILER1 |
| else |
| JVM_EXCLUDE_PATTERNS += c1_ c1/ |
| endif |
| |
| ifeq ($(call check-jvm-feature, compiler2), true) |
| JVM_CFLAGS_FEATURES += -DCOMPILER2 |
| JVM_SRC_DIRS += $(JVM_VARIANT_OUTPUTDIR)/gensrc/adfiles |
| else |
| JVM_EXCLUDES += opto libadt |
| JVM_EXCLUDE_FILES += bcEscapeAnalyzer.cpp ciTypeFlow.cpp |
| JVM_EXCLUDE_PATTERNS += c2_ runtime_ /c2/ |
| endif |
| |
| ifeq ($(call check-jvm-feature, zero), true) |
| JVM_EXCLUDES += opto libadt |
| JVM_EXCLUDE_PATTERNS += c1_ c1/ c2_ runtime_ /c2/ |
| JVM_EXCLUDE_FILES += templateInterpreter.cpp templateInterpreterGenerator.cpp \ |
| bcEscapeAnalyzer.cpp ciTypeFlow.cpp |
| JVM_CFLAGS_FEATURES += -DZERO -DZERO_LIBARCH='"$(OPENJDK_TARGET_CPU_LEGACY_LIB)"' $(LIBFFI_CFLAGS) |
| JVM_LIBS_FEATURES += $(LIBFFI_LIBS) |
| ifeq ($(ENABLE_LIBFFI_BUNDLING), true) |
| JVM_LDFLAGS_FEATURES += $(call SET_EXECUTABLE_ORIGIN,/..) |
| endif |
| else |
| JVM_EXCLUDE_PATTERNS += /zero/ |
| endif |
| |
| ifeq ($(JVM_VARIANT), core) |
| JVM_CFLAGS_FEATURES += -DVMTYPE=\"Core\" |
| endif |
| |
| ifeq ($(JVM_VARIANT), custom) |
| JVM_CFLAGS_FEATURES += -DVMTYPE=\"Custom\" |
| endif |
| |
| ifeq ($(call check-jvm-feature, minimal), true) |
| JVM_CFLAGS_FEATURES += -DMINIMAL_JVM -DVMTYPE=\"Minimal\" |
| ifeq ($(call isTargetOs, linux), true) |
| # Override the default -g with a more liberal strip policy for the minimal JVM |
| JVM_STRIPFLAGS := --strip-unneeded |
| endif |
| endif |
| |
| ifeq ($(call check-jvm-feature, dtrace), true) |
| JVM_CFLAGS_FEATURES += -DDTRACE_ENABLED |
| endif |
| |
| ifeq ($(call check-jvm-feature, static-build), true) |
| JVM_CFLAGS_FEATURES += -DSTATIC_BUILD=1 |
| endif |
| |
| ifneq ($(call check-jvm-feature, jvmti), true) |
| JVM_CFLAGS_FEATURES += -DINCLUDE_JVMTI=0 |
| JVM_EXCLUDE_FILES += jvmtiGetLoadedClasses.cpp jvmtiThreadState.cpp jvmtiExtensions.cpp \ |
| jvmtiImpl.cpp jvmtiManageCapabilities.cpp jvmtiRawMonitor.cpp jvmtiUtil.cpp jvmtiTrace.cpp \ |
| jvmtiCodeBlobEvents.cpp jvmtiEnv.cpp jvmtiRedefineClasses.cpp jvmtiEnvBase.cpp jvmtiEnvThreadState.cpp \ |
| jvmtiTagMap.cpp jvmtiEventController.cpp evmCompat.cpp jvmtiEnter.xsl jvmtiExport.cpp \ |
| jvmtiClassFileReconstituter.cpp jvmtiTagMapTable.cpp jvmtiAgent.cpp jvmtiAgentList.cpp |
| endif |
| |
| ifneq ($(call check-jvm-feature, jvmci), true) |
| JVM_CFLAGS_FEATURES += -DINCLUDE_JVMCI=0 |
| JVM_EXCLUDES += jvmci |
| JVM_EXCLUDE_FILES += jvmciCodeInstaller_$(HOTSPOT_TARGET_CPU_ARCH).cpp |
| endif |
| |
| ifneq ($(call check-jvm-feature, vm-structs), true) |
| JVM_CFLAGS_FEATURES += -DINCLUDE_VM_STRUCTS=0 |
| JVM_EXCLUDE_FILES += vmStructs.cpp |
| endif |
| |
| ifneq ($(call check-jvm-feature, jni-check), true) |
| JVM_CFLAGS_FEATURES += -DINCLUDE_JNI_CHECK=0 |
| JVM_EXCLUDE_FILES += jniCheck.cpp |
| endif |
| |
| ifneq ($(call check-jvm-feature, services), true) |
| JVM_CFLAGS_FEATURES += -DINCLUDE_SERVICES=0 |
| JVM_EXCLUDE_FILES += heapDumper.cpp heapInspection.cpp \ |
| attachListener_$(HOTSPOT_TARGET_OS).cpp attachListener.cpp |
| endif |
| |
| ifneq ($(call check-jvm-feature, management), true) |
| JVM_CFLAGS_FEATURES += -DINCLUDE_MANAGEMENT=0 |
| endif |
| |
| ifneq ($(call check-jvm-feature, cds), true) |
| JVM_CFLAGS_FEATURES += -DINCLUDE_CDS=0 |
| JVM_EXCLUDE_FILES += \ |
| classLoaderDataShared.cpp \ |
| classLoaderExt.cpp \ |
| systemDictionaryShared.cpp |
| JVM_EXCLUDE_PATTERNS += cds/ |
| endif |
| |
| ifneq ($(call check-jvm-feature, g1gc), true) |
| JVM_CFLAGS_FEATURES += -DINCLUDE_G1GC=0 |
| JVM_EXCLUDE_PATTERNS += gc/g1 |
| endif |
| |
| ifneq ($(call check-jvm-feature, parallelgc), true) |
| JVM_CFLAGS_FEATURES += -DINCLUDE_PARALLELGC=0 |
| JVM_EXCLUDE_PATTERNS += gc/parallel |
| endif |
| |
| ifneq ($(call check-jvm-feature, serialgc), true) |
| JVM_CFLAGS_FEATURES += -DINCLUDE_SERIALGC=0 |
| JVM_EXCLUDE_PATTERNS += gc/serial |
| endif |
| |
| ifneq ($(call check-jvm-feature, epsilongc), true) |
| JVM_CFLAGS_FEATURES += -DINCLUDE_EPSILONGC=0 |
| JVM_EXCLUDE_PATTERNS += gc/epsilon |
| endif |
| |
| ifneq ($(call check-jvm-feature, zgc), true) |
| JVM_CFLAGS_FEATURES += -DINCLUDE_ZGC=0 |
| JVM_EXCLUDE_PATTERNS += gc/z |
| JVM_EXCLUDE_PATTERNS += gc/x |
| endif |
| |
| ifneq ($(call check-jvm-feature, shenandoahgc), true) |
| JVM_CFLAGS_FEATURES += -DINCLUDE_SHENANDOAHGC=0 |
| JVM_EXCLUDE_PATTERNS += gc/shenandoah |
| endif |
| |
| ifneq ($(call check-jvm-feature, jfr), true) |
| JVM_CFLAGS_FEATURES += -DINCLUDE_JFR=0 |
| JVM_EXCLUDE_PATTERNS += jfr |
| JVM_EXCLUDE_FILES += compilerEvent.cpp |
| endif |
| |
| ################################################################################ |
| |
| ifeq ($(call check-jvm-feature, link-time-opt), true) |
| # Set JVM_OPTIMIZATION directly so other jvm-feature flags can override it |
| # later on if desired |
| JVM_OPTIMIZATION := HIGHEST_JVM |
| ifeq ($(call isCompiler, gcc), true) |
| JVM_CFLAGS_FEATURES += -flto=auto -fuse-linker-plugin -fno-strict-aliasing -fno-fat-lto-objects |
| JVM_LDFLAGS_FEATURES += $(CXX_O_FLAG_HIGHEST_JVM) -flto=auto -fuse-linker-plugin -fno-strict-aliasing |
| else ifeq ($(call isCompiler, microsoft), true) |
| JVM_CFLAGS_FEATURES += -GL |
| JVM_LDFLAGS_FEATURES += -LTCG:INCREMENTAL |
| endif |
| else |
| ifeq ($(call isCompiler, gcc), true) |
| JVM_LDFLAGS_FEATURES += -O1 |
| endif |
| endif |
| |
| ifeq ($(call check-jvm-feature, opt-size), true) |
| JVM_OPTIMIZATION := SIZE |
| OPT_SPEED_SRC := \ |
| allocation.cpp \ |
| assembler.cpp \ |
| barrierSet.cpp \ |
| basicLock.cpp \ |
| bytecode.cpp \ |
| bytecodeInterpreter.cpp \ |
| c1_Compilation.cpp \ |
| c1_Compiler.cpp \ |
| c1_GraphBuilder.cpp \ |
| c1_LinearScan.cpp \ |
| c1_LIR.cpp \ |
| ciEnv.cpp \ |
| ciObjectFactory.cpp \ |
| codeBlob.cpp \ |
| constantPool.cpp \ |
| constMethod.cpp \ |
| classLoader.cpp \ |
| classLoaderData.cpp \ |
| classFileParser.cpp \ |
| classFileStream.cpp \ |
| cpCache.cpp \ |
| defNewGeneration.cpp \ |
| frame_arm.cpp \ |
| frame_aarch64.cpp \ |
| frame_ppc.cpp \ |
| frame_s390.cpp \ |
| frame_x86.cpp \ |
| genCollectedHeap.cpp \ |
| generation.cpp \ |
| genMarkSweep.cpp \ |
| growableArray.cpp \ |
| handles.cpp \ |
| hashtable.cpp \ |
| heap.cpp \ |
| icache.cpp \ |
| icache_arm.cpp \ |
| icache_aarch64.cpp \ |
| icache_ppc.cpp \ |
| icache_s390.cpp \ |
| icache_x86.cpp \ |
| instanceKlass.cpp \ |
| invocationCounter.cpp \ |
| iterator.cpp \ |
| javaCalls.cpp \ |
| javaClasses.cpp \ |
| jniFastGetField_arm.cpp \ |
| jvm.cpp \ |
| linkResolver.cpp \ |
| klass.cpp \ |
| klassVtable.cpp \ |
| markSweep.cpp \ |
| memRegion.cpp \ |
| memoryPool.cpp \ |
| method.cpp \ |
| methodHandles.cpp \ |
| methodHandles_arm.cpp \ |
| methodLiveness.cpp \ |
| metaspace.cpp \ |
| mutex.cpp \ |
| mutexLocker.cpp \ |
| nativeLookup.cpp \ |
| objArrayKlass.cpp \ |
| os_linux.cpp \ |
| os_linux_arm.cpp \ |
| resourceArea.cpp \ |
| rewriter.cpp \ |
| sharedRuntime.cpp \ |
| signature.cpp \ |
| space.cpp \ |
| stackMapTable.cpp \ |
| symbolTable.cpp \ |
| systemDictionary.cpp \ |
| symbol.cpp \ |
| synchronizer.cpp \ |
| timer.cpp \ |
| typeArrayKlass.cpp \ |
| unsafe.cpp \ |
| utf8.cpp \ |
| vmSymbols.cpp \ |
| # |
| |
| $(foreach s, $(OPT_SPEED_SRC), \ |
| $(eval BUILD_LIBJVM_$s_OPTIMIZATION := HIGHEST_JVM)) |
| |
| ifneq ($(filter $(TOOLCHAIN_TYPE), gcc clang), ) |
| BUILD_LIBJVM_systemDictionary.cpp_CXXFLAGS := -fno-optimize-sibling-calls |
| endif |
| endif |