blob: d20efc9718029416d52d3412cb96db37bcb6ce85 [file] [log] [blame]
duke6e45e102007-12-01 00:00:00 +00001#
dholmes70a4d1a2011-03-16 18:54:50 -04002# Copyright (c) 1999, 2011, Oracle and/or its affiliates. All rights reserved.
duke6e45e102007-12-01 00:00:00 +00003# 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
ohair2283b9d2010-05-25 15:58:33 -07007# published by the Free Software Foundation. Oracle designates this
duke6e45e102007-12-01 00:00:00 +00008# particular file as subject to the "Classpath" exception as provided
ohair2283b9d2010-05-25 15:58:33 -07009# by Oracle in the LICENSE file that accompanied this code.
duke6e45e102007-12-01 00:00:00 +000010#
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#
ohair2283b9d2010-05-25 15:58:33 -070021# 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.
duke6e45e102007-12-01 00:00:00 +000024#
25
26#
27# Makefile to specify compiler flags for programs and libraries
28# targeted to Linux. Should not contain any rules.
29#
30# WARNING: This file is shared with other workspaces.
31# So when it includes other files, it must use JDK_TOPDIR.
32#
33
34# Warning: the following variables are overriden by Defs.gmk. Set
35# values will be silently ignored:
36# CFLAGS (set $(OTHER_CFLAGS) instead)
37# CPPFLAGS (set $(OTHER_CPPFLAGS) instead)
38# CXXFLAGS (set $(OTHER_CXXFLAGS) instead)
39# LDFLAGS (set $(OTHER_LDFAGS) instead)
40# LDLIBS (set $(EXTRA_LIBS) instead)
41# LDLIBS_COMMON (set $(EXTRA_LIBS) instead)
42
43# Get shared JDK settings
44include $(JDK_MAKE_SHARED_DIR)/Defs.gmk
45
46# Part of INCREMENTAL_BUILD mechanism.
47# Compiler emits things like: path/file.o: file.h
48# We want something like: relative_path/file.o relative_path/file.d: file.h
49CC_DEPEND = -MM
50CC_DEPEND_FILTER = $(SED) -e 's!$*\.$(OBJECT_SUFFIX)!$(dir $@)& $(dir $@)$*.$(DEPEND_SUFFIX)!g'
51
52ifndef PLATFORM_SRC
ohair26e0af62008-03-04 09:52:54 -080053 PLATFORM_SRC = $(BUILDDIR)/../src/solaris
duke6e45e102007-12-01 00:00:00 +000054endif # PLATFORM_SRC
55
56# Platform specific closed sources
57ifndef OPENJDK
58 ifndef CLOSED_PLATFORM_SRC
ohair26e0af62008-03-04 09:52:54 -080059 CLOSED_PLATFORM_SRC = $(BUILDDIR)/../src/closed/solaris
duke6e45e102007-12-01 00:00:00 +000060 endif
61endif
62
63# platform specific include files
64PLATFORM_INCLUDE_NAME = $(PLATFORM)
65PLATFORM_INCLUDE = $(INCLUDEDIR)/$(PLATFORM_INCLUDE_NAME)
66
67# suffix used for make dependencies files.
68DEPEND_SUFFIX = d
69# The suffix applied to the library name for FDLIBM
70FDDLIBM_SUFFIX = a
71# The suffix applied to scripts (.bat for windows, nothing for unix)
72SCRIPT_SUFFIX =
73# CC compiler object code output directive flag value
74CC_OBJECT_OUTPUT_FLAG = -o #trailing blank required!
75CC_PROGRAM_OUTPUT_FLAG = -o #trailing blank required!
76
dcubed46b99222011-09-20 19:16:21 -070077# Default OBJCOPY comes from GNU Binutils on Linux:
78DEF_OBJCOPY=/usr/bin/objcopy
79ifdef CROSS_COMPILE_ARCH
80 # don't try to generate .debuginfo files when cross compiling
81 _JUNK_ := $(shell \
82 echo >&2 "INFO: cross compiling for ARCH $(CROSS_COMPILE_ARCH)," \
83 "skipping .debuginfo generation.")
84 OBJCOPY=
85else
86 OBJCOPY=$(shell test -x $(DEF_OBJCOPY) && echo $(DEF_OBJCOPY))
87 ifneq ($(ALT_OBJCOPY),)
88 _JUNK_ := $(shell echo >&2 "INFO: ALT_OBJCOPY=$(ALT_OBJCOPY)")
89 # disable .debuginfo support by setting ALT_OBJCOPY to a non-existent path
90 OBJCOPY=$(shell test -x $(ALT_OBJCOPY) && echo $(ALT_OBJCOPY))
91 endif
92endif
93
94ifdef LIBRARY_SUPPORTS_FULL_DEBUG_SYMBOLS
95# The setting of OBJCOPY above enables the JDK build to import
96# .debuginfo files from the HotSpot build. However, adding FDS
97# support to the JDK build will occur in phases so a different
98# make variable is used to indicate that a particular library
99# supports FDS.
100
101ifeq ($(OBJCOPY),)
102 _JUNK_ := $(shell \
103 echo >&2 "INFO: no objcopy cmd found so cannot create .debuginfo files.")
104else
105 _JUNK_ := $(shell \
106 echo >&2 "INFO: $(OBJCOPY) cmd found so will create .debuginfo files.")
107
108 # Library stripping policies for .debuginfo configs:
109 # all_strip - strips everything from the library
110 # min_strip - strips most stuff from the library; leaves minimum symbols
111 # no_strip - does not strip the library at all
112 #
113 # Oracle security policy requires "all_strip". A waiver was granted on
114 # 2011.09.01 that permits using "min_strip" in the Java JDK and Java JRE.
115 #
116 DEF_STRIP_POLICY="min_strip"
117 ifeq ($(ALT_STRIP_POLICY),)
118 STRIP_POLICY=$(DEF_STRIP_POLICY)
119 else
120 STRIP_POLICY=$(ALT_STRIP_POLICY)
121 endif
122
123 _JUNK_ := $(shell \
124 echo >&2 "INFO: STRIP_POLICY=$(STRIP_POLICY)")
125endif
126endif
127
duke6e45e102007-12-01 00:00:00 +0000128#
duke6e45e102007-12-01 00:00:00 +0000129# Default optimization
130#
duke6e45e102007-12-01 00:00:00 +0000131
ohair850fb252008-07-30 19:40:57 -0700132ifndef OPTIMIZATION_LEVEL
133 ifeq ($(PRODUCT), java)
134 OPTIMIZATION_LEVEL = HIGHER
135 else
136 OPTIMIZATION_LEVEL = LOWER
137 endif
duke6e45e102007-12-01 00:00:00 +0000138endif
ohairb99e3e32009-03-31 16:10:31 -0700139ifndef FASTDEBUG_OPTIMIZATION_LEVEL
140 FASTDEBUG_OPTIMIZATION_LEVEL = LOWER
141endif
duke6e45e102007-12-01 00:00:00 +0000142
ohair850fb252008-07-30 19:40:57 -0700143CC_OPT/NONE =
144CC_OPT/LOWER = -O2
145CC_OPT/HIGHER = -O3
146CC_OPT/HIGHEST = -O3
147
148CC_OPT = $(CC_OPT/$(OPTIMIZATION_LEVEL))
149
duke6e45e102007-12-01 00:00:00 +0000150# For all platforms, do not omit the frame pointer register usage.
151# We need this frame pointer to make it easy to walk the stacks.
152# This should be the default on X86, but ia64 and amd64 may not have this
153# as the default.
154CFLAGS_REQUIRED_amd64 += -fno-omit-frame-pointer -D_LITTLE_ENDIAN
155CFLAGS_REQUIRED_i586 += -fno-omit-frame-pointer -D_LITTLE_ENDIAN
156CFLAGS_REQUIRED_ia64 += -fno-omit-frame-pointer -D_LITTLE_ENDIAN
157CFLAGS_REQUIRED_sparcv9 += -m64 -mcpu=v9
158LDFLAGS_COMMON_sparcv9 += -m64 -mcpu=v9
159CFLAGS_REQUIRED_sparc += -m32 -mcpu=v9
160LDFLAGS_COMMON_sparc += -m32 -mcpu=v9
dholmes70a4d1a2011-03-16 18:54:50 -0400161CFLAGS_REQUIRED_arm += -fsigned-char -D_LITTLE_ENDIAN
162CFLAGS_REQUIRED_ppc += -fsigned-char -D_BIG_ENDIAN
gbenson24e3a5d2009-10-15 13:27:59 +0100163ifeq ($(ZERO_BUILD), true)
164 CFLAGS_REQUIRED = $(ZERO_ARCHFLAG)
165 ifeq ($(ZERO_ENDIANNESS), little)
166 CFLAGS_REQUIRED += -D_LITTLE_ENDIAN
167 endif
168 LDFLAGS_COMMON += $(ZERO_ARCHFLAG)
169else
170 CFLAGS_REQUIRED = $(CFLAGS_REQUIRED_$(ARCH))
171 LDFLAGS_COMMON += $(LDFLAGS_COMMON_$(ARCH))
172endif
duke6e45e102007-12-01 00:00:00 +0000173
ohair8df39292009-01-31 17:31:21 -0800174# If this is a --hash-style=gnu system, use --hash-style=both
175# The gnu .hash section won't work on some Linux systems like SuSE 10.
176_HAS_HASH_STYLE_GNU:=$(shell $(CC) -dumpspecs | $(GREP) -- '--hash-style=gnu')
177ifneq ($(_HAS_HASH_STYLE_GNU),)
178 LDFLAGS_HASH_STYLE = -Wl,--hash-style=both
179endif
180LDFLAGS_COMMON += $(LDFLAGS_HASH_STYLE)
181
duke6e45e102007-12-01 00:00:00 +0000182#
183# Selection of warning messages
184#
185GCC_INHIBIT = -Wno-unused -Wno-parentheses
186GCC_STYLE =
187GCC_WARNINGS = -W -Wall $(GCC_STYLE) $(GCC_INHIBIT)
188
189#
190# Treat compiler warnings as errors, if warnings not allowed
191#
192ifeq ($(COMPILER_WARNINGS_FATAL),true)
193 GCC_WARNINGS += -Werror
194endif
195
196#
197# Misc compiler options
198#
dholmes70a4d1a2011-03-16 18:54:50 -0400199ifneq ($(ARCH),ppc)
duke6e45e102007-12-01 00:00:00 +0000200 CFLAGS_COMMON = -fno-strict-aliasing
dholmes70a4d1a2011-03-16 18:54:50 -0400201endif
duke6e45e102007-12-01 00:00:00 +0000202PIC_CODE_LARGE = -fPIC
203PIC_CODE_SMALL = -fpic
204GLOBAL_KPIC = $(PIC_CODE_LARGE)
ohairab4f1212008-07-27 18:42:57 -0700205CFLAGS_COMMON += $(GLOBAL_KPIC) $(GCC_WARNINGS)
duke6e45e102007-12-01 00:00:00 +0000206ifeq ($(ARCH), amd64)
ohairab4f1212008-07-27 18:42:57 -0700207 CFLAGS_COMMON += -pipe
duke6e45e102007-12-01 00:00:00 +0000208endif
209
210# Linux 64bit machines use Dwarf2, which can be HUGE, have fastdebug use -g1
211DEBUG_FLAG = -g
212ifeq ($(FASTDEBUG), true)
213 ifeq ($(ARCH_DATA_MODEL), 64)
214 DEBUG_FLAG = -g1
215 endif
216endif
217
aphd46bd762009-04-17 15:56:20 +0100218# DEBUG_BINARIES overrides everything, use full -g debug information
219ifeq ($(DEBUG_BINARIES), true)
220 DEBUG_FLAG = -g
221 CFLAGS_REQUIRED += $(DEBUG_FLAG)
222endif
223
ohair850fb252008-07-30 19:40:57 -0700224CFLAGS_OPT = $(CC_OPT)
duke6e45e102007-12-01 00:00:00 +0000225CFLAGS_DBG = $(DEBUG_FLAG)
226CFLAGS_COMMON += $(CFLAGS_REQUIRED)
227
228CXXFLAGS_COMMON = $(GLOBAL_KPIC) -DCC_NOEX $(GCC_WARNINGS)
ohair850fb252008-07-30 19:40:57 -0700229CXXFLAGS_OPT = $(CC_OPT)
duke6e45e102007-12-01 00:00:00 +0000230CXXFLAGS_DBG = $(DEBUG_FLAG)
231CXXFLAGS_COMMON += $(CFLAGS_REQUIRED)
232
233# FASTDEBUG: Optimize the code in the -g versions, gives us a faster debug java
234ifeq ($(FASTDEBUG), true)
ohairb99e3e32009-03-31 16:10:31 -0700235 CFLAGS_DBG += $(CC_OPT/$(FASTDEBUG_OPTIMIZATION_LEVEL))
236 CXXFLAGS_DBG += $(CC_OPT/$(FASTDEBUG_OPTIMIZATION_LEVEL))
duke6e45e102007-12-01 00:00:00 +0000237endif
238
andrew2ed7e052010-06-03 18:49:35 +0100239CPP_ARCH_FLAGS = -DARCH='"$(ARCH)"'
240
241# Alpha arch does not like "alpha" defined (potential general arch cleanup issue here)
242ifneq ($(ARCH),alpha)
243 CPP_ARCH_FLAGS += -D$(ARCH)
244else
245 CPP_ARCH_FLAGS += -D_$(ARCH)_
246endif
247
248CPPFLAGS_COMMON = $(CPP_ARCH_FLAGS) -DLINUX $(VERSION_DEFINES) \
duke6e45e102007-12-01 00:00:00 +0000249 -D_LARGEFILE64_SOURCE -D_GNU_SOURCE -D_REENTRANT
250
251ifeq ($(ARCH_DATA_MODEL), 64)
252CPPFLAGS_COMMON += -D_LP64=1
253endif
254
ohair5a916662009-07-08 09:11:24 -0700255CPPFLAGS_OPT = -DNDEBUG
duke6e45e102007-12-01 00:00:00 +0000256CPPFLAGS_DBG = -DDEBUG
ohair850fb252008-07-30 19:40:57 -0700257ifneq ($(PRODUCT), java)
258 CPPFLAGS_DBG += -DLOGGING
259endif
duke6e45e102007-12-01 00:00:00 +0000260
261ifdef LIBRARY
262 # Libraries need to locate other libraries at runtime, and you can tell
263 # a library where to look by way of the dynamic runpaths (RPATH or RUNPATH)
264 # buried inside the .so. The $ORIGIN says to look relative to where
265 # the library itself is and it can be followed with relative paths from
266 # that. By default we always look in $ORIGIN, optionally we add relative
267 # paths if the Makefile sets LD_RUNPATH_EXTRAS to those relative paths.
268 # On Linux we add a flag -z origin, not sure if this is necessary, but
269 # doesn't seem to hurt.
270 # The environment variable LD_LIBRARY_PATH will over-ride these runpaths.
271 # Try: 'readelf -d lib*.so' to see these settings in a library.
272 #
dholmes70a4d1a2011-03-16 18:54:50 -0400273 Z_ORIGIN_FLAG/sparc = -Xlinker -z -Xlinker origin
274 Z_ORIGIN_FLAG/i586 = -Xlinker -z -Xlinker origin
275 Z_ORIGIN_FLAG/amd64 = -Xlinker -z -Xlinker origin
276 Z_ORIGIN_FLAG/ia64 = -Xlinker -z -Xlinker origin
277 Z_ORIGIN_FLAG/arm =
278 Z_ORIGIN_FLAG/ppc =
279 Z_ORIGIN_FLAG/zero = -Xlinker -z -Xlinker origin
280
281 LDFLAG_Z_ORIGIN = $(Z_ORIGIN_FLAG/$(ARCH_FAMILY))
282
283 LDFLAGS_COMMON += $(LDFLAG_Z_ORIGIN) -Xlinker -rpath -Xlinker \$$ORIGIN
284 LDFLAGS_COMMON += $(LD_RUNPATH_EXTRAS:%=$(LDFLAG_Z_ORIGIN) -Xlinker -rpath -Xlinker \$$ORIGIN/%)
285
duke6e45e102007-12-01 00:00:00 +0000286endif
287
288EXTRA_LIBS += -lc
289
gbenson24e3a5d2009-10-15 13:27:59 +0100290LDFLAGS_DEFS_OPTION = -Xlinker -z -Xlinker defs
duke6e45e102007-12-01 00:00:00 +0000291LDFLAGS_COMMON += $(LDFLAGS_DEFS_OPTION)
292
293#
294# -L paths for finding and -ljava
295#
296LDFLAGS_OPT = -Xlinker -O1
297LDFLAGS_COMMON += -L$(LIBDIR)/$(LIBARCH)
298LDFLAGS_COMMON += -Wl,-soname=$(LIB_PREFIX)$(LIBRARY).$(LIBRARY_SUFFIX)
299
300#
301# -static-libgcc is a gcc-3 flag to statically link libgcc, gcc-2.9x always
302# statically link libgcc but will print a warning with the flag. We don't
303# want the warning, so check gcc version first.
304#
ohaire74b8592011-04-21 18:26:04 -0700305ifeq ($(CC_MAJORVER),3)
306 OTHER_LDFLAGS += -static-libgcc
duke6e45e102007-12-01 00:00:00 +0000307endif
308
309# Automatic precompiled header option to use (if COMPILE_APPROACH=batch)
310# (See Rules.gmk) The gcc 5 compiler might have an option for this?
311AUTOMATIC_PCH_OPTION =
312
313#
314# Post Processing of libraries/executables
315#
316ifeq ($(VARIANT), OPT)
317 ifneq ($(NO_STRIP), true)
aphd46bd762009-04-17 15:56:20 +0100318 ifneq ($(DEBUG_BINARIES), true)
319 # Debug 'strip -g' leaves local function Elf symbols (better stack
320 # traces)
321 POST_STRIP_PROCESS = $(STRIP) -g
322 endif
duke6e45e102007-12-01 00:00:00 +0000323 endif
324endif
325
326#
327# Use: ld $(LD_MAPFILE_FLAG) mapfile *.o
328#
329LD_MAPFILE_FLAG = -Xlinker --version-script -Xlinker
330
331#
332# Support for Quantify.
333#
334ifdef QUANTIFY
335QUANTIFY_CMD = quantify
336QUANTIFY_OPTIONS = -cache-dir=/tmp/quantify -always-use-cache-dir=yes
337LINK_PRE_CMD = $(QUANTIFY_CMD) $(QUANTIFY_OPTIONS)
338endif
339
340#
341# Path and option to link against the VM, if you have to. Note that
342# there are libraries that link against only -ljava, but they do get
343# -L to the -ljvm, this is because -ljava depends on -ljvm, whereas
344# the library itself should not.
345#
346VM_NAME = server
347JVMLIB = -L$(LIBDIR)/$(LIBARCH)/$(VM_NAME) -ljvm
348JAVALIB = -ljava $(JVMLIB)
349
350#
351# We want to privatize JVM symbols on Solaris. This is so the user can
352# write a function called FindClass and this should not override the
353# FindClass that is inside the JVM. At this point in time we are not
354# concerned with other JNI libraries because we hope that there will
355# not be as many clashes there.
356#
357PRIVATIZE_JVM_SYMBOLS = false
358
359USE_PTHREADS = true
360override ALT_CODESET_KEY = _NL_CTYPE_CODESET_NAME
361override AWT_RUNPATH =
362override HAVE_ALTZONE = false
363override HAVE_FILIOH = false
364override HAVE_GETHRTIME = false
365override HAVE_GETHRVTIME = false
366override HAVE_SIGIGNORE = true
367override LEX_LIBRARY = -lfl
368ifeq ($(STATIC_CXX),true)
369override LIBCXX = -Wl,-Bstatic -lstdc++ -lgcc -Wl,-Bdynamic
370else
371override LIBCXX = -lstdc++
372endif
373override LIBPOSIX4 =
374override LIBSOCKET =
martind5089e02010-06-10 15:54:25 -0700375override LIBNSL =
okutsu953b5b22011-10-05 15:13:40 +0900376override LIBSCF =
duke6e45e102007-12-01 00:00:00 +0000377override LIBTHREAD =
378override MOOT_PRIORITIES = true
379override NO_INTERRUPTIBLE_IO = true
duke6e45e102007-12-01 00:00:00 +0000380ifeq ($(ARCH), amd64)
381override OPENWIN_LIB = $(OPENWIN_HOME)/lib64
382else
383override OPENWIN_LIB = $(OPENWIN_HOME)/lib
384endif
385override OTHER_M4FLAGS = -D__GLIBC__ -DGNU_ASSEMBLER
386override SUN_CMM_SUBDIR =
387override THREADS_FLAG = native
388override USE_GNU_M4 = true
389override USING_GNU_TAR = true
390override WRITE_LIBVERSION = false
391
392# USE_EXECNAME forces the launcher to look up argv[0] on $PATH, and put the
393# resulting resolved absolute name of the executable in the environment
394# variable EXECNAME. That executable name is then used that to locate the
395# installation area.
396override USE_EXECNAME = true
397
398# If your platform has DPS, it will have Type1 fonts too, in which case
399# it is best to enable DPS support until such time as 2D's rasteriser
400# can fully handle Type1 fonts in all cases. Default is "yes".
401# HAVE_DPS should only be "no" if the platform has no DPS headers or libs
402# DPS (Displayable PostScript) is available on Solaris machines
403HAVE_DPS = no
404
405#
406# Japanese manpages
407#
408JA_SOURCE_ENCODING = eucJP
ogino55ad4162011-04-26 21:46:20 -0700409JA_TARGET_ENCODINGS = UTF-8
duke6e45e102007-12-01 00:00:00 +0000410
411# Settings for the JDI - Serviceability Agent binding.
412HOTSPOT_SALIB_PATH = $(HOTSPOT_IMPORT_PATH)/jre/lib/$(LIBARCH)
413SALIB_NAME = $(LIB_PREFIX)saproc.$(LIBRARY_SUFFIX)
dcubed46b99222011-09-20 19:16:21 -0700414SA_DEBUGINFO_NAME = $(LIB_PREFIX)saproc.debuginfo
duke6e45e102007-12-01 00:00:00 +0000415
416# The JDI - Serviceability Agent binding is not currently supported
417# on Linux-ia64.
418ifeq ($(ARCH), ia64)
419 INCLUDE_SA = false
420else
421 INCLUDE_SA = true
422endif
423
dholmes70a4d1a2011-03-16 18:54:50 -0400424ifdef CROSS_COMPILE_ARCH
425 # X11 headers are not under /usr/include
426 OTHER_CFLAGS += -I$(OPENWIN_HOME)/include
427 OTHER_CXXFLAGS += -I$(OPENWIN_HOME)/include
428 OTHER_CPPFLAGS += -I$(OPENWIN_HOME)/include
429endif