# # 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 macroAssembler_common.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