1# 2# Copyright (c) 2013, 2018, 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/JvmOverrideFiles.gmk)) 27 28################################################################################ 29# This file contains explicit overrides of CFLAGS and/or precompiled header 30# status for individual files on specific platforms. 31 32ifeq ($(TOOLCHAIN_TYPE), gcc) 33 BUILD_LIBJVM_vmStructs.cpp_CXXFLAGS := -fno-var-tracking-assignments 34 BUILD_LIBJVM_jvmciCompilerToVM.cpp_CXXFLAGS := -fno-var-tracking-assignments 35 BUILD_LIBJVM_jvmciCompilerToVMInit.cpp_CXXFLAGS := -fno-var-tracking-assignments 36 BUILD_LIBJVM_assembler_x86.cpp_CXXFLAGS := -Wno-maybe-uninitialized 37 BUILD_LIBJVM_cardTableBarrierSetAssembler_x86.cpp_CXXFLAGS := -Wno-maybe-uninitialized 38 BUILD_LIBJVM_interp_masm_x86.cpp_CXXFLAGS := -Wno-uninitialized 39 BUILD_LIBJVM_os_bsd.cpp_CXXFLAGS := -Wno-error=narrowing 40 ifeq ($(DEBUG_LEVEL), release) 41 # Need extra inlining to collapse all marking code into the hot marking loop 42 BUILD_LIBJVM_shenandoahConcurrentMark.cpp_CXXFLAGS := --param inline-unit-growth=1000 43 BUILD_LIBJVM_shenandoahTraversalGC.cpp_CXXFLAGS := --param inline-unit-growth=1000 44 endif 45endif 46 47LIBJVM_FDLIBM_COPY_OPT_FLAG := $(CXX_O_FLAG_NONE) 48# If the FDLIBM_CFLAGS variable is non-empty we know 49# that the fdlibm-fork in hotspot can get optimized 50# by using -ffp-contract=off on GCC/Clang platforms. 51ifneq ($(FDLIBM_CFLAGS), ) 52 LIBJVM_FDLIBM_COPY_OPT_FLAG := $(CXX_O_FLAG_NORM) 53endif 54 55ifeq ($(OPENJDK_TARGET_OS), linux) 56 BUILD_LIBJVM_ostream.cpp_CXXFLAGS := -D_FILE_OFFSET_BITS=64 57 BUILD_LIBJVM_logFileOutput.cpp_CXXFLAGS := -D_FILE_OFFSET_BITS=64 58 59 BUILD_LIBJVM_sharedRuntimeTrig.cpp_CXXFLAGS := -DNO_PCH $(FDLIBM_CFLAGS) $(LIBJVM_FDLIBM_COPY_OPT_FLAG) 60 BUILD_LIBJVM_sharedRuntimeTrans.cpp_CXXFLAGS := -DNO_PCH $(FDLIBM_CFLAGS) $(LIBJVM_FDLIBM_COPY_OPT_FLAG) 61 62 ifeq ($(TOOLCHAIN_TYPE), clang) 63 JVM_PRECOMPILED_HEADER_EXCLUDE := \ 64 sharedRuntimeTrig.cpp \ 65 sharedRuntimeTrans.cpp \ 66 # 67 endif 68 69 ifeq ($(OPENJDK_TARGET_CPU), x86) 70 # Performance measurements show that by compiling GC related code, we could 71 # significantly reduce the GC pause time on 32 bit Linux/Unix platforms by 72 # compiling without the PIC flag (-fPIC on linux). 73 # See 6454213 for more details. 74 ALL_SRC := $(filter %.cpp, $(call CacheFind, $(TOPDIR)/src/hotspot/share)) 75 NONPIC_FILTER := $(addsuffix %, $(addprefix $(TOPDIR)/src/hotspot/share/, \ 76 memory oops gc)) 77 # Due to what looks like a bug in the old build implementation of this, add a 78 # couple of more files that were accidentally matched as substrings of GC related 79 # files. 80 NONPIC_SRC := $(filter $(NONPIC_FILTER), $(ALL_SRC)) globals.cpp location.cpp 81 # Declare variables for each source file that needs the pic flag like this: 82 # BUILD_JVM_<srcfile>_CXXFLAGS := -fno-PIC 83 # This will get implicitly picked up by SetupNativeCompilation below. 84 $(foreach s, $(NONPIC_SRC), $(eval BUILD_LIBJVM_$(notdir $s)_CXXFLAGS := -fno-PIC)) 85 endif 86 87else ifeq ($(OPENJDK_TARGET_OS), solaris) 88 ifneq ($(DEBUG_LEVEL), slowdebug) 89 # dev studio 12.6 workaround 90 BUILD_LIBJVM_arguments.cpp_OPTIMIZATION := LOW 91 # Workaround for a bug in dtrace. If ciEnv::post_compiled_method_load_event() 92 # is inlined, the resulting dtrace object file needs a reference to this 93 # function, whose symbol name is too long for dtrace. So disable inlining 94 # for this method for now. (fix this when dtrace bug 6258412 is fixed) 95 BUILD_LIBJVM_ciEnv.cpp_CXXFLAGS := \ 96 -xinline=no%__1cFciEnvbFpost_compiled_method_load_event6MpnHnmethod__v_ 97 # dtrace cannot handle tail call optimization (6672627, 6693876) 98 BUILD_LIBJVM_jni.cpp_CXXFLAGS := -Qoption ube -O~yz 99 BUILD_LIBJVM_stubGenerator_$(HOTSPOT_TARGET_CPU).cpp_CXXFLAGS := -xspace 100 101 ifeq ($(OPENJDK_TARGET_CPU), x86_64) 102 # Temporary until SS10 C++ compiler is fixed 103 BUILD_LIBJVM_generateOptoStub.cpp_CXXFLAGS := -xO2 104 # Temporary util SS12u1 C++ compiler is fixed 105 BUILD_LIBJVM_c1_LinearScan.cpp_CXXFLAGS := -xO2 106 endif 107 endif 108 109 # Need extra inlining to get oop_ps_push_contents functions to perform well enough. 110 ifeq ($(DEBUG_LEVEL),release) 111 BUILD_LIBJVM_psPromotionManager.cpp_CXXFLAGS := -W2,-Ainline:inc=1000 112 endif 113 114 ifeq ($(DEBUG_LEVEL), fastdebug) 115 # this hangs in iropt now (7113504) 116 BUILD_LIBJVM_compileBroker.cpp_CXXFLAGS := -xO2 117 118 # Frame size > 100k if we allow inlining via -g0! 119 BUILD_LIBJVM_bytecodeInterpreter.cpp_CXXFLAGS := +d 120 BUILD_LIBJVM_bytecodeInterpreterWithChecks.cpp_CXXFLAGS := +d 121 122 ifeq ($(OPENJDK_TARGET_CPU_ARCH), x86) 123 # ube explodes on x86 124 BUILD_LIBJVM_bytecodeInterpreter.cpp_CXXFLAGS += -xO1 125 BUILD_LIBJVM_bytecodeInterpreterWithChecks.cpp_CXXFLAGS += -xO1 126 endif 127 128 endif 129 130 # Workaround for jvmciCompilerToVM.cpp long compilation time 131 BUILD_LIBJVM_jvmciCompilerToVMInit.cpp_OPTIMIZATION := NONE 132 133else ifeq ($(OPENJDK_TARGET_OS), macosx) 134 JVM_EXCLUDE_FILES += decoder_bsd.cpp 135 # The copied fdlibm routines in these files must not be optimized 136 BUILD_LIBJVM_sharedRuntimeTrig.cpp_CXXFLAGS := $(FDLIBM_CFLAGS) $(LIBJVM_FDLIBM_COPY_OPT_FLAG) 137 BUILD_LIBJVM_sharedRuntimeTrans.cpp_CXXFLAGS := $(FDLIBM_CFLAGS) $(LIBJVM_FDLIBM_COPY_OPT_FLAG) 138 ifeq ($(TOOLCHAIN_TYPE), clang) 139 # NOTE: The old build tested clang version to make sure this workaround 140 # for the clang bug was still needed. 141 BUILD_LIBJVM_loopTransform.cpp_CXXFLAGS := $(CXX_O_FLAG_NONE) 142 ifneq ($(DEBUG_LEVEL), slowdebug) 143 BUILD_LIBJVM_unsafe.cpp_CXXFLAGS := -O1 144 endif 145 146 # The following files are compiled at various optimization 147 # levels due to optimization issues encountered at the 148 # default level. The Clang compiler issues a compile 149 # time error if there is an optimization level specification 150 # skew between the PCH file and the C++ file. Especially if the 151 # PCH file is compiled at a higher optimization level than 152 # the C++ file. One solution might be to prepare extra optimization 153 # level specific PCH files for the opt build and use them here, but 154 # it's probably not worth the effort as long as only a few files 155 # need this special handling. 156 JVM_PRECOMPILED_HEADER_EXCLUDE := \ 157 sharedRuntimeTrig.cpp \ 158 sharedRuntimeTrans.cpp \ 159 loopTransform.cpp \ 160 unsafe.cpp \ 161 jvmciCompilerToVM.cpp \ 162 # 163 endif 164 165else ifeq ($(OPENJDK_TARGET_OS), aix) 166 BUILD_LIBJVM_synchronizer.cpp_CXXFLAGS := -qnoinline 167 BUILD_LIBJVM_sharedRuntimeTrans.cpp_CXXFLAGS := $(CXX_O_FLAG_NONE) 168 # Disable aggressive optimizations for functions in sharedRuntimeTrig.cpp 169 # and sharedRuntimeTrans.cpp on ppc64. 170 # -qstrict turns off the following optimizations: 171 # * Performing code motion and scheduling on computations such as loads 172 # and floating-point computations that may trigger an exception. 173 # * Relaxing conformance to IEEE rules. 174 # * Reassociating floating-point expressions. 175 # When using '-qstrict' there still remains one problem 176 # in javasoft.sqe.tests.api.java.lang.Math.sin5Tests when run in compile-all 177 # mode, so don't optimize sharedRuntimeTrig.cpp at all. 178 BUILD_LIBJVM_sharedRuntimeTrig.cpp_CXXFLAGS := $(CXX_O_FLAG_NONE) 179 180 ifneq ($(DEBUG_LEVEL),slowdebug) 181 # Compiling jvmtiEnterTrace.cpp with full optimization needs more than 30min 182 # (mostly because of '-qhot=level=1' and the more than 1300 'log_trace' calls 183 # which cause a lot of template expansion). 184 BUILD_LIBJVM_jvmtiEnterTrace.cpp_OPTIMIZATION := LOW 185 endif 186 187 # Disable ELF decoder on AIX (AIX uses XCOFF). 188 JVM_EXCLUDE_PATTERNS += elf 189 190else ifeq ($(OPENJDK_TARGET_OS), windows) 191 JVM_PRECOMPILED_HEADER_EXCLUDE := \ 192 bytecodeInterpreter.cpp \ 193 bytecodeInterpreterWithChecks.cpp \ 194 opcodes.cpp \ 195 os_windows.cpp \ 196 os_windows_x86.cpp \ 197 osThread_windows.cpp \ 198 jvmciCompilerToVMInit.cpp \ 199 # 200 201 # Workaround for jvmciCompilerToVM.cpp long compilation time 202 BUILD_LIBJVM_jvmciCompilerToVMInit.cpp_OPTIMIZATION := NONE 203 204else ifeq ($(OPENJDK_TARGET_OS), bsd) 205 JVM_EXCLUDE_FILES += decoder_mach0.cpp 206 BUILD_LIBJVM_sharedRuntimeTrig.cpp_CXXFLAGS := -DNO_PCH $(FDLIBM_CFLAGS) $(LIBJVM_FDLIBM_COPY_OPT_FLAG) 207 BUILD_LIBJVM_sharedRuntimeTrans.cpp_CXXFLAGS := -DNO_PCH $(FDLIBM_CFLAGS) $(LIBJVM_FDLIBM_COPY_OPT_FLAG) 208 209 BUILD_LIBJVM_loopTransform.cpp_CXXFLAGS := $(CXX_O_FLAG_NONE) 210 ifneq ($(DEBUG_LEVEL), slowdebug) 211 BUILD_LIBJVM_unsafe.cpp_CXXFLAGS := -O1 212 endif 213 214 ifeq ($(TOOLCHAIN_TYPE), gcc) 215 BUILD_LIBJVM_unsafe.cpp_CXXFLAGS += -Wno-maybe-uninitialized 216 endif 217 218 ifeq ($(TOOLCHAIN_TYPE), clang) 219 ifeq ($(OPENJDK_TARGET_CPU), x86) 220 ifneq ($(DEBUG_LEVEL), slowdebug) 221 # hotspot/jtreg/compiler/c2/Test8062950.java test fails on x86 222 # with clang when parse2.cpp is optimized above -O1 223 BUILD_LIBJVM_parse2.cpp_CXXFLAGS := -O1 224 endif 225 endif 226 227 # The following files are compiled at various optimization 228 # levels due to optimization issues encountered at the 229 # default level. The Clang compiler issues a compile 230 # time error if there is an optimization level specification 231 # skew between the PCH file and the C++ file. Especially if the 232 # PCH file is compiled at a higher optimization level than 233 # the C++ file. One solution might be to prepare extra optimization 234 # level specific PCH files for the opt build and use them here, but 235 # it's probably not worth the effort as long as only a few files 236 # need this special handling. 237 JVM_PRECOMPILED_HEADER_EXCLUDE := \ 238 sharedRuntimeTrig.cpp \ 239 sharedRuntimeTrans.cpp \ 240 loopTransform.cpp \ 241 unsafe.cpp \ 242 parse2.cpp \ 243 # 244 245 ifeq ($(OPENJDK_TARGET_CPU), aarch64) 246 JVM_PRECOMPILED_HEADER_EXCLUDE += \ 247 memnode.cpp 248 # 249 BUILD_LIBJVM_memnode.cpp_CXXFLAGS := -O0 250 endif 251 endif 252 253endif 254