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