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 $(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 32 ifeq ($(TOOLCHAIN_TYPE), gcc) 33 BUILD_LIBJVM_vmStructs.cpp_CXXFLAGS := -fno-var-tracking-assignments -O0 34 BUILD_LIBJVM_jvmciCompilerToVM.cpp_CXXFLAGS := -fno-var-tracking-assignments 35 BUILD_LIBJVM_assembler_x86.cpp_CXXFLAGS := -Wno-maybe-uninitialized 36 BUILD_LIBJVM_interp_masm_x86.cpp_CXXFLAGS := -Wno-uninitialized 37 endif 38 39 ifeq ($(OPENJDK_TARGET_OS), linux) 40 BUILD_LIBJVM_ostream.cpp_CXXFLAGS := -D_FILE_OFFSET_BITS=64 41 BUILD_LIBJVM_logFileOutput.cpp_CXXFLAGS := -D_FILE_OFFSET_BITS=64 42 43 ifeq ($(OPENJDK_TARGET_CPU_ARCH), x86) 44 BUILD_LIBJVM_sharedRuntimeTrig.cpp_CXXFLAGS := -DNO_PCH $(CXX_O_FLAG_NONE) 45 BUILD_LIBJVM_sharedRuntimeTrans.cpp_CXXFLAGS := -DNO_PCH $(CXX_O_FLAG_NONE) 46 47 ifeq ($(TOOLCHAIN_TYPE), clang) 48 JVM_PRECOMPILED_HEADER_EXCLUDE := \ 49 sharedRuntimeTrig.cpp \ 50 sharedRuntimeTrans.cpp \ 51 # 52 endif 53 endif 54 55 ifeq ($(OPENJDK_TARGET_CPU), x86) 56 # Performance measurements show that by compiling GC related code, we could 57 # significantly reduce the GC pause time on 32 bit Linux/Unix platforms by 58 # compiling without the PIC flag (-fPIC on linux). 59 # See 6454213 for more details. 60 ALL_SRC := $(filter %.cpp, $(call CacheFind, $(TOPDIR)/src/hotspot/share)) 61 NONPIC_FILTER := $(addsuffix %, $(addprefix $(TOPDIR)/src/hotspot/share/, \ 62 memory oops gc)) 63 # Due to what looks like a bug in the old build implementation of this, add a 64 # couple of more files that were accidentally matched as substrings of GC related 65 # files. 66 NONPIC_SRC := $(filter $(NONPIC_FILTER), $(ALL_SRC)) globals.cpp location.cpp 67 # Declare variables for each source file that needs the pic flag like this: 68 # BUILD_JVM_<srcfile>_CXXFLAGS := -fno-PIC 69 # This will get implicitly picked up by SetupNativeCompilation below. 70 $(foreach s, $(NONPIC_SRC), $(eval BUILD_LIBJVM_$(notdir $s)_CXXFLAGS := -fno-PIC)) 71 endif 72 73 else ifeq ($(OPENJDK_TARGET_OS), solaris) 74 ifneq ($(DEBUG_LEVEL), slowdebug) 75 # Workaround for a bug in dtrace. If ciEnv::post_compiled_method_load_event() 76 # is inlined, the resulting dtrace object file needs a reference to this 77 # function, whose symbol name is too long for dtrace. So disable inlining 78 # for this method for now. (fix this when dtrace bug 6258412 is fixed) 79 BUILD_LIBJVM_ciEnv.cpp_CXXFLAGS := \ 80 -xinline=no%__1cFciEnvbFpost_compiled_method_load_event6MpnHnmethod__v_ 81 # dtrace cannot handle tail call optimization (6672627, 6693876) 82 BUILD_LIBJVM_jni.cpp_CXXFLAGS := -Qoption ube -O~yz 83 BUILD_LIBJVM_stubGenerator_$(HOTSPOT_TARGET_CPU).cpp_CXXFLAGS := -xspace 84 85 ifeq ($(OPENJDK_TARGET_CPU), x86_64) 86 # Temporary until SS10 C++ compiler is fixed 87 BUILD_LIBJVM_generateOptoStub.cpp_CXXFLAGS := -xO2 88 # Temporary util SS12u1 C++ compiler is fixed 89 BUILD_LIBJVM_c1_LinearScan.cpp_CXXFLAGS := -xO2 90 endif 91 endif 92 93 # Need extra inlining to get oop_ps_push_contents functions to perform well enough. 94 ifeq ($(DEBUG_LEVEL),release) 95 BUILD_LIBJVM_psPromotionManager.cpp_CXXFLAGS := -W2,-Ainline:inc=1000 96 endif 97 98 ifeq ($(DEBUG_LEVEL), fastdebug) 99 # this hangs in iropt now (7113504) 100 BUILD_LIBJVM_compileBroker.cpp_CXXFLAGS := -xO2 101 102 # Frame size > 100k if we allow inlining via -g0! 103 BUILD_LIBJVM_bytecodeInterpreter.cpp_CXXFLAGS := +d 104 BUILD_LIBJVM_bytecodeInterpreterWithChecks.cpp_CXXFLAGS := +d 105 106 ifeq ($(OPENJDK_TARGET_CPU_ARCH), x86) 107 # ube explodes on x86 108 BUILD_LIBJVM_bytecodeInterpreter.cpp_CXXFLAGS += -xO1 109 BUILD_LIBJVM_bytecodeInterpreterWithChecks.cpp_CXXFLAGS += -xO1 110 endif 111 112 endif 113 114 else ifeq ($(OPENJDK_TARGET_OS), macosx) 115 # The copied fdlibm routines in these files must not be optimized 116 BUILD_LIBJVM_sharedRuntimeTrans.cpp_CXXFLAGS := $(CXX_O_FLAG_NONE) 117 BUILD_LIBJVM_sharedRuntimeTrig.cpp_CXXFLAGS := $(CXX_O_FLAG_NONE) 118 ifeq ($(TOOLCHAIN_TYPE), clang) 119 # NOTE: The old build tested clang version to make sure this workaround 120 # for the clang bug was still needed. 121 BUILD_LIBJVM_loopTransform.cpp_CXXFLAGS := $(CXX_O_FLAG_NONE) 122 ifneq ($(DEBUG_LEVEL), slowdebug) 123 BUILD_LIBJVM_unsafe.cpp_CXXFLAGS := -O1 124 endif 125 126 # The following files are compiled at various optimization 127 # levels due to optimization issues encountered at the 128 # default level. The Clang compiler issues a compile 129 # time error if there is an optimization level specification 130 # skew between the PCH file and the C++ file. Especially if the 131 # PCH file is compiled at a higher optimization level than 132 # the C++ file. One solution might be to prepare extra optimization 133 # level specific PCH files for the opt build and use them here, but 134 # it's probably not worth the effort as long as only a few files 135 # need this special handling. 136 JVM_PRECOMPILED_HEADER_EXCLUDE := \ 137 sharedRuntimeTrig.cpp \ 138 sharedRuntimeTrans.cpp \ 139 loopTransform.cpp \ 140 unsafe.cpp \ 141 jvmciCompilerToVM.cpp \ 142 # 143 endif 144 145 else ifeq ($(OPENJDK_TARGET_OS), aix) 146 BUILD_LIBJVM_synchronizer.cpp_CXXFLAGS := -qnoinline 147 BUILD_LIBJVM_sharedRuntimeTrans.cpp_CXXFLAGS := $(CXX_O_FLAG_NONE) 148 # Disable aggressive optimizations for functions in sharedRuntimeTrig.cpp 149 # and sharedRuntimeTrans.cpp on ppc64. 150 # -qstrict turns off the following optimizations: 151 # * Performing code motion and scheduling on computations such as loads 152 # and floating-point computations that may trigger an exception. 153 # * Relaxing conformance to IEEE rules. 154 # * Reassociating floating-point expressions. 155 # When using '-qstrict' there still remains one problem 156 # in javasoft.sqe.tests.api.java.lang.Math.sin5Tests when run in compile-all 157 # mode, so don't optimize sharedRuntimeTrig.cpp at all. 158 BUILD_LIBJVM_sharedRuntimeTrig.cpp_CXXFLAGS := $(CXX_O_FLAG_NONE) 159 160 ifneq ($(DEBUG_LEVEL),slowdebug) 161 # Compiling jvmtiEnterTrace.cpp with full optimization needs more than 30min 162 # (mostly because of '-qhot=level=1' and the more than 1300 'log_trace' calls 163 # which cause a lot of template expansion). 164 BUILD_LIBJVM_jvmtiEnterTrace.cpp_OPTIMIZATION := LOW 165 endif 166 167 # Disable ELF decoder on AIX (AIX uses XCOFF). 168 JVM_EXCLUDE_PATTERNS += elf 169 170 else ifeq ($(OPENJDK_TARGET_OS), windows) 171 JVM_PRECOMPILED_HEADER_EXCLUDE := \ 172 bytecodeInterpreter.cpp \ 173 bytecodeInterpreterWithChecks.cpp \ 174 opcodes.cpp \ 175 os_windows.cpp \ 176 os_windows_x86.cpp \ 177 osThread_windows.cpp \ 178 # 179 endif