blob: 0ef4a2890e369d117990fb0be6ac8af83a564e52 [file] [log] [blame]
duke6e45e102007-12-01 00:00:00 +00001#
ohair2283b9d2010-05-25 15:58:33 -07002# Copyright (c) 1999, 2009, 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
77#
78# Default HPI libraries. Build will build only native, unless
79# overriden at the make command line. This makes it convenient for
80# people doing, say, a pthreads port -- they can create a posix
81# directory here, and say "gnumake HPIS=posix" at the top
82# level.
83#
84HPIS = native
85
86#
87# Default optimization
88#
duke6e45e102007-12-01 00:00:00 +000089
ohair850fb252008-07-30 19:40:57 -070090ifndef OPTIMIZATION_LEVEL
91 ifeq ($(PRODUCT), java)
92 OPTIMIZATION_LEVEL = HIGHER
93 else
94 OPTIMIZATION_LEVEL = LOWER
95 endif
duke6e45e102007-12-01 00:00:00 +000096endif
ohairb99e3e32009-03-31 16:10:31 -070097ifndef FASTDEBUG_OPTIMIZATION_LEVEL
98 FASTDEBUG_OPTIMIZATION_LEVEL = LOWER
99endif
duke6e45e102007-12-01 00:00:00 +0000100
ohair850fb252008-07-30 19:40:57 -0700101CC_OPT/NONE =
102CC_OPT/LOWER = -O2
103CC_OPT/HIGHER = -O3
104CC_OPT/HIGHEST = -O3
105
106CC_OPT = $(CC_OPT/$(OPTIMIZATION_LEVEL))
107
duke6e45e102007-12-01 00:00:00 +0000108# For all platforms, do not omit the frame pointer register usage.
109# We need this frame pointer to make it easy to walk the stacks.
110# This should be the default on X86, but ia64 and amd64 may not have this
111# as the default.
112CFLAGS_REQUIRED_amd64 += -fno-omit-frame-pointer -D_LITTLE_ENDIAN
113CFLAGS_REQUIRED_i586 += -fno-omit-frame-pointer -D_LITTLE_ENDIAN
114CFLAGS_REQUIRED_ia64 += -fno-omit-frame-pointer -D_LITTLE_ENDIAN
115CFLAGS_REQUIRED_sparcv9 += -m64 -mcpu=v9
116LDFLAGS_COMMON_sparcv9 += -m64 -mcpu=v9
117CFLAGS_REQUIRED_sparc += -m32 -mcpu=v9
118LDFLAGS_COMMON_sparc += -m32 -mcpu=v9
gbenson24e3a5d2009-10-15 13:27:59 +0100119ifeq ($(ZERO_BUILD), true)
120 CFLAGS_REQUIRED = $(ZERO_ARCHFLAG)
121 ifeq ($(ZERO_ENDIANNESS), little)
122 CFLAGS_REQUIRED += -D_LITTLE_ENDIAN
123 endif
124 LDFLAGS_COMMON += $(ZERO_ARCHFLAG)
125else
126 CFLAGS_REQUIRED = $(CFLAGS_REQUIRED_$(ARCH))
127 LDFLAGS_COMMON += $(LDFLAGS_COMMON_$(ARCH))
128endif
duke6e45e102007-12-01 00:00:00 +0000129
ohair8df39292009-01-31 17:31:21 -0800130# If this is a --hash-style=gnu system, use --hash-style=both
131# The gnu .hash section won't work on some Linux systems like SuSE 10.
132_HAS_HASH_STYLE_GNU:=$(shell $(CC) -dumpspecs | $(GREP) -- '--hash-style=gnu')
133ifneq ($(_HAS_HASH_STYLE_GNU),)
134 LDFLAGS_HASH_STYLE = -Wl,--hash-style=both
135endif
136LDFLAGS_COMMON += $(LDFLAGS_HASH_STYLE)
137
duke6e45e102007-12-01 00:00:00 +0000138#
139# Selection of warning messages
140#
141GCC_INHIBIT = -Wno-unused -Wno-parentheses
142GCC_STYLE =
143GCC_WARNINGS = -W -Wall $(GCC_STYLE) $(GCC_INHIBIT)
144
145#
146# Treat compiler warnings as errors, if warnings not allowed
147#
148ifeq ($(COMPILER_WARNINGS_FATAL),true)
149 GCC_WARNINGS += -Werror
150endif
151
152#
153# Misc compiler options
154#
155ifeq ($(ARCH),ppc)
156 CFLAGS_COMMON = -fsigned-char
157else # ARCH
158 CFLAGS_COMMON = -fno-strict-aliasing
159endif # ARCH
160PIC_CODE_LARGE = -fPIC
161PIC_CODE_SMALL = -fpic
162GLOBAL_KPIC = $(PIC_CODE_LARGE)
ohairab4f1212008-07-27 18:42:57 -0700163CFLAGS_COMMON += $(GLOBAL_KPIC) $(GCC_WARNINGS)
duke6e45e102007-12-01 00:00:00 +0000164ifeq ($(ARCH), amd64)
ohairab4f1212008-07-27 18:42:57 -0700165 CFLAGS_COMMON += -pipe
duke6e45e102007-12-01 00:00:00 +0000166endif
167
168# Linux 64bit machines use Dwarf2, which can be HUGE, have fastdebug use -g1
169DEBUG_FLAG = -g
170ifeq ($(FASTDEBUG), true)
171 ifeq ($(ARCH_DATA_MODEL), 64)
172 DEBUG_FLAG = -g1
173 endif
174endif
175
aphd46bd762009-04-17 15:56:20 +0100176# DEBUG_BINARIES overrides everything, use full -g debug information
177ifeq ($(DEBUG_BINARIES), true)
178 DEBUG_FLAG = -g
179 CFLAGS_REQUIRED += $(DEBUG_FLAG)
180endif
181
ohair850fb252008-07-30 19:40:57 -0700182CFLAGS_OPT = $(CC_OPT)
duke6e45e102007-12-01 00:00:00 +0000183CFLAGS_DBG = $(DEBUG_FLAG)
184CFLAGS_COMMON += $(CFLAGS_REQUIRED)
185
186CXXFLAGS_COMMON = $(GLOBAL_KPIC) -DCC_NOEX $(GCC_WARNINGS)
ohair850fb252008-07-30 19:40:57 -0700187CXXFLAGS_OPT = $(CC_OPT)
duke6e45e102007-12-01 00:00:00 +0000188CXXFLAGS_DBG = $(DEBUG_FLAG)
189CXXFLAGS_COMMON += $(CFLAGS_REQUIRED)
190
191# FASTDEBUG: Optimize the code in the -g versions, gives us a faster debug java
192ifeq ($(FASTDEBUG), true)
ohairb99e3e32009-03-31 16:10:31 -0700193 CFLAGS_DBG += $(CC_OPT/$(FASTDEBUG_OPTIMIZATION_LEVEL))
194 CXXFLAGS_DBG += $(CC_OPT/$(FASTDEBUG_OPTIMIZATION_LEVEL))
duke6e45e102007-12-01 00:00:00 +0000195endif
196
197CPPFLAGS_COMMON = -D$(ARCH) -DARCH='"$(ARCH)"' -DLINUX $(VERSION_DEFINES) \
198 -D_LARGEFILE64_SOURCE -D_GNU_SOURCE -D_REENTRANT
199
200ifeq ($(ARCH_DATA_MODEL), 64)
201CPPFLAGS_COMMON += -D_LP64=1
202endif
203
ohair5a916662009-07-08 09:11:24 -0700204CPPFLAGS_OPT = -DNDEBUG
duke6e45e102007-12-01 00:00:00 +0000205CPPFLAGS_DBG = -DDEBUG
ohair850fb252008-07-30 19:40:57 -0700206ifneq ($(PRODUCT), java)
207 CPPFLAGS_DBG += -DLOGGING
208endif
duke6e45e102007-12-01 00:00:00 +0000209
210ifdef LIBRARY
211 # Libraries need to locate other libraries at runtime, and you can tell
212 # a library where to look by way of the dynamic runpaths (RPATH or RUNPATH)
213 # buried inside the .so. The $ORIGIN says to look relative to where
214 # the library itself is and it can be followed with relative paths from
215 # that. By default we always look in $ORIGIN, optionally we add relative
216 # paths if the Makefile sets LD_RUNPATH_EXTRAS to those relative paths.
217 # On Linux we add a flag -z origin, not sure if this is necessary, but
218 # doesn't seem to hurt.
219 # The environment variable LD_LIBRARY_PATH will over-ride these runpaths.
220 # Try: 'readelf -d lib*.so' to see these settings in a library.
221 #
222 LDFLAGS_COMMON += -Xlinker -z -Xlinker origin -Xlinker -rpath -Xlinker \$$ORIGIN
223 LDFLAGS_COMMON += $(LD_RUNPATH_EXTRAS:%=-Xlinker -z -Xlinker origin -Xlinker -rpath -Xlinker \$$ORIGIN/%)
224endif
225
226EXTRA_LIBS += -lc
227
gbenson24e3a5d2009-10-15 13:27:59 +0100228LDFLAGS_DEFS_OPTION = -Xlinker -z -Xlinker defs
duke6e45e102007-12-01 00:00:00 +0000229LDFLAGS_COMMON += $(LDFLAGS_DEFS_OPTION)
230
231#
232# -L paths for finding and -ljava
233#
234LDFLAGS_OPT = -Xlinker -O1
235LDFLAGS_COMMON += -L$(LIBDIR)/$(LIBARCH)
236LDFLAGS_COMMON += -Wl,-soname=$(LIB_PREFIX)$(LIBRARY).$(LIBRARY_SUFFIX)
237
238#
239# -static-libgcc is a gcc-3 flag to statically link libgcc, gcc-2.9x always
240# statically link libgcc but will print a warning with the flag. We don't
241# want the warning, so check gcc version first.
242#
243CC_VER_MAJOR := $(shell $(CC) -dumpversion | $(SED) 's/egcs-//' | $(CUT) -d'.' -f1)
244ifeq ("$(CC_VER_MAJOR)", "3")
245OTHER_LDFLAGS += -static-libgcc
246endif
247
248# Automatic precompiled header option to use (if COMPILE_APPROACH=batch)
249# (See Rules.gmk) The gcc 5 compiler might have an option for this?
250AUTOMATIC_PCH_OPTION =
251
252#
253# Post Processing of libraries/executables
254#
255ifeq ($(VARIANT), OPT)
256 ifneq ($(NO_STRIP), true)
aphd46bd762009-04-17 15:56:20 +0100257 ifneq ($(DEBUG_BINARIES), true)
258 # Debug 'strip -g' leaves local function Elf symbols (better stack
259 # traces)
260 POST_STRIP_PROCESS = $(STRIP) -g
261 endif
duke6e45e102007-12-01 00:00:00 +0000262 endif
263endif
264
265#
266# Use: ld $(LD_MAPFILE_FLAG) mapfile *.o
267#
268LD_MAPFILE_FLAG = -Xlinker --version-script -Xlinker
269
270#
271# Support for Quantify.
272#
273ifdef QUANTIFY
274QUANTIFY_CMD = quantify
275QUANTIFY_OPTIONS = -cache-dir=/tmp/quantify -always-use-cache-dir=yes
276LINK_PRE_CMD = $(QUANTIFY_CMD) $(QUANTIFY_OPTIONS)
277endif
278
279#
280# Path and option to link against the VM, if you have to. Note that
281# there are libraries that link against only -ljava, but they do get
282# -L to the -ljvm, this is because -ljava depends on -ljvm, whereas
283# the library itself should not.
284#
285VM_NAME = server
286JVMLIB = -L$(LIBDIR)/$(LIBARCH)/$(VM_NAME) -ljvm
287JAVALIB = -ljava $(JVMLIB)
288
289#
290# We want to privatize JVM symbols on Solaris. This is so the user can
291# write a function called FindClass and this should not override the
292# FindClass that is inside the JVM. At this point in time we are not
293# concerned with other JNI libraries because we hope that there will
294# not be as many clashes there.
295#
296PRIVATIZE_JVM_SYMBOLS = false
297
298USE_PTHREADS = true
299override ALT_CODESET_KEY = _NL_CTYPE_CODESET_NAME
300override AWT_RUNPATH =
301override HAVE_ALTZONE = false
302override HAVE_FILIOH = false
303override HAVE_GETHRTIME = false
304override HAVE_GETHRVTIME = false
305override HAVE_SIGIGNORE = true
306override LEX_LIBRARY = -lfl
307ifeq ($(STATIC_CXX),true)
308override LIBCXX = -Wl,-Bstatic -lstdc++ -lgcc -Wl,-Bdynamic
309else
310override LIBCXX = -lstdc++
311endif
312override LIBPOSIX4 =
313override LIBSOCKET =
314override LIBTHREAD =
315override MOOT_PRIORITIES = true
316override NO_INTERRUPTIBLE_IO = true
317override OPENWIN_HOME = /usr/X11R6
318ifeq ($(ARCH), amd64)
319override OPENWIN_LIB = $(OPENWIN_HOME)/lib64
320else
321override OPENWIN_LIB = $(OPENWIN_HOME)/lib
322endif
323override OTHER_M4FLAGS = -D__GLIBC__ -DGNU_ASSEMBLER
324override SUN_CMM_SUBDIR =
325override THREADS_FLAG = native
326override USE_GNU_M4 = true
327override USING_GNU_TAR = true
328override WRITE_LIBVERSION = false
329
330# USE_EXECNAME forces the launcher to look up argv[0] on $PATH, and put the
331# resulting resolved absolute name of the executable in the environment
332# variable EXECNAME. That executable name is then used that to locate the
333# installation area.
334override USE_EXECNAME = true
335
336# If your platform has DPS, it will have Type1 fonts too, in which case
337# it is best to enable DPS support until such time as 2D's rasteriser
338# can fully handle Type1 fonts in all cases. Default is "yes".
339# HAVE_DPS should only be "no" if the platform has no DPS headers or libs
340# DPS (Displayable PostScript) is available on Solaris machines
341HAVE_DPS = no
342
343#
344# Japanese manpages
345#
346JA_SOURCE_ENCODING = eucJP
347JA_TARGET_ENCODINGS = eucJP
348
349# Settings for the JDI - Serviceability Agent binding.
350HOTSPOT_SALIB_PATH = $(HOTSPOT_IMPORT_PATH)/jre/lib/$(LIBARCH)
351SALIB_NAME = $(LIB_PREFIX)saproc.$(LIBRARY_SUFFIX)
352
353# The JDI - Serviceability Agent binding is not currently supported
354# on Linux-ia64.
355ifeq ($(ARCH), ia64)
356 INCLUDE_SA = false
357else
358 INCLUDE_SA = true
359endif
360