1 # 2 # Copyright (c) 1999, 2012, 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 # 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 44 include $(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 49 CC_DEPEND = -MM 50 CC_DEPEND_FILTER = $(SED) -e 's!$*\.$(OBJECT_SUFFIX)!$(dir $@)& $(dir $@)$*.$(DEPEND_SUFFIX)!g' 51 52 ifndef PLATFORM_SRC 53 PLATFORM_SRC = $(BUILDDIR)/../src/solaris 54 endif # PLATFORM_SRC 55 56 # Platform specific closed sources 57 ifndef OPENJDK 58 ifndef CLOSED_PLATFORM_SRC 59 CLOSED_PLATFORM_SRC = $(BUILDDIR)/../src/closed/solaris 60 endif 61 endif 62 63 # platform specific include files 64 PLATFORM_INCLUDE_NAME = $(PLATFORM) 65 PLATFORM_INCLUDE = $(INCLUDEDIR)/$(PLATFORM_INCLUDE_NAME) 66 67 # suffix used for make dependencies files. 68 DEPEND_SUFFIX = d 69 # The suffix applied to the library name for FDLIBM 70 FDDLIBM_SUFFIX = a 71 # The suffix applied to scripts (.bat for windows, nothing for unix) 72 SCRIPT_SUFFIX = 73 # CC compiler object code output directive flag value 74 CC_OBJECT_OUTPUT_FLAG = -o #trailing blank required! 75 76 ENABLE_FULL_DEBUG_SYMBOLS ?= 1 77 # since objcopy is optional, we set ZIP_DEBUGINFO_FILES later 78 79 ifeq ($(ENABLE_FULL_DEBUG_SYMBOLS),1) 80 # Default OBJCOPY comes from GNU Binutils on Linux: 81 DEF_OBJCOPY=/usr/bin/objcopy 82 ifdef CROSS_COMPILE_ARCH 83 # don't try to generate .debuginfo files when cross compiling 84 _JUNK_ := $(shell \ 85 echo >&2 "INFO: cross compiling for ARCH $(CROSS_COMPILE_ARCH)," \ 86 "skipping .debuginfo generation.") 87 OBJCOPY= 88 else 89 OBJCOPY=$(shell test -x $(DEF_OBJCOPY) && echo $(DEF_OBJCOPY)) 90 ifneq ($(ALT_OBJCOPY),) 91 _JUNK_ := $(shell echo >&2 "INFO: ALT_OBJCOPY=$(ALT_OBJCOPY)") 92 # disable .debuginfo support by setting ALT_OBJCOPY to a non-existent path 93 OBJCOPY=$(shell test -x $(ALT_OBJCOPY) && echo $(ALT_OBJCOPY)) 94 endif 95 endif 96 97 # Setting ENABLE_FULL_DEBUG_SYMBOLS=1 (and OBJCOPY) above enables the 98 # JDK build to import .debuginfo or .diz files from the HotSpot build. 99 # However, adding FDS support to the JDK build will occur in phases 100 # so a different make variable (LIBRARY_SUPPORTS_FULL_DEBUG_SYMBOLS) 101 # is used to indicate that a particular library supports FDS. 102 103 ifeq ($(OBJCOPY),) 104 _JUNK_ := $(shell \ 105 echo >&2 "INFO: no objcopy cmd found so cannot create .debuginfo files.") 106 ENABLE_FULL_DEBUG_SYMBOLS=0 107 else 108 _JUNK_ := $(shell \ 109 echo >&2 "INFO: $(OBJCOPY) cmd found so will create .debuginfo files.") 110 111 # Library stripping policies for .debuginfo configs: 112 # all_strip - strips everything from the library 113 # min_strip - strips most stuff from the library; leaves minimum symbols 114 # no_strip - does not strip the library at all 115 # 116 # Oracle security policy requires "all_strip". A waiver was granted on 117 # 2011.09.01 that permits using "min_strip" in the Java JDK and Java JRE. 118 # 119 # Currently, STRIP_POLICY is only used when Full Debug Symbols is enabled. 120 STRIP_POLICY ?= min_strip 121 122 _JUNK_ := $(shell \ 123 echo >&2 "INFO: STRIP_POLICY=$(STRIP_POLICY)") 124 125 ZIP_DEBUGINFO_FILES ?= 1 126 127 _JUNK_ := $(shell \ 128 echo >&2 "INFO: ZIP_DEBUGINFO_FILES=$(ZIP_DEBUGINFO_FILES)") 129 endif 130 endif 131 132 # 133 # Default optimization 134 # 135 136 ifndef OPTIMIZATION_LEVEL 137 ifeq ($(PRODUCT), java) 138 OPTIMIZATION_LEVEL = HIGHER 139 else 140 OPTIMIZATION_LEVEL = LOWER 141 endif 142 endif 143 ifndef FASTDEBUG_OPTIMIZATION_LEVEL 144 FASTDEBUG_OPTIMIZATION_LEVEL = LOWER 145 endif 146 147 CC_OPT/NONE = 148 CC_OPT/LOWER = -O2 149 CC_OPT/HIGHER = -O3 150 CC_OPT/HIGHEST = -O3 151 152 CC_OPT = $(CC_OPT/$(OPTIMIZATION_LEVEL)) 153 154 # For all platforms, do not omit the frame pointer register usage. 155 # We need this frame pointer to make it easy to walk the stacks. 156 # This should be the default on X86, but ia64 and amd64 may not have this 157 # as the default. 158 CFLAGS_REQUIRED_amd64 += -fno-omit-frame-pointer -D_LITTLE_ENDIAN 159 CFLAGS_REQUIRED_i586 += -fno-omit-frame-pointer -D_LITTLE_ENDIAN 160 CFLAGS_REQUIRED_ia64 += -fno-omit-frame-pointer -D_LITTLE_ENDIAN 161 CFLAGS_REQUIRED_sparcv9 += -m64 -mcpu=v9 162 LDFLAGS_COMMON_sparcv9 += -m64 -mcpu=v9 163 CFLAGS_REQUIRED_sparc += -m32 -mcpu=v9 164 LDFLAGS_COMMON_sparc += -m32 -mcpu=v9 165 CFLAGS_REQUIRED_arm += -fsigned-char -D_LITTLE_ENDIAN 166 CFLAGS_REQUIRED_ppc += -fsigned-char -D_BIG_ENDIAN 167 ifeq ($(ZERO_BUILD), true) 168 CFLAGS_REQUIRED = $(ZERO_ARCHFLAG) 169 ifeq ($(ZERO_ENDIANNESS), little) 170 CFLAGS_REQUIRED += -D_LITTLE_ENDIAN 171 endif 172 LDFLAGS_COMMON += $(ZERO_ARCHFLAG) 173 else 174 CFLAGS_REQUIRED = $(CFLAGS_REQUIRED_$(ARCH)) 175 LDFLAGS_COMMON += $(LDFLAGS_COMMON_$(ARCH)) 176 endif 177 178 # If this is a --hash-style=gnu system, use --hash-style=both 179 # The gnu .hash section won't work on some Linux systems like SuSE 10. 180 _HAS_HASH_STYLE_GNU:=$(shell $(CC) -dumpspecs | $(GREP) -- '--hash-style=gnu') 181 ifneq ($(_HAS_HASH_STYLE_GNU),) 182 LDFLAGS_HASH_STYLE = -Wl,--hash-style=both 183 endif 184 LDFLAGS_COMMON += $(LDFLAGS_HASH_STYLE) 185 186 # 187 # Selection of warning messages 188 # 189 GCC_INHIBIT = -Wno-unused -Wno-parentheses 190 GCC_STYLE = 191 GCC_WARNINGS = -W -Wall $(GCC_STYLE) $(GCC_INHIBIT) 192 193 # 194 # Treat compiler warnings as errors, if warnings not allowed 195 # 196 ifeq ($(COMPILER_WARNINGS_FATAL),true) 197 GCC_WARNINGS += -Werror 198 endif 199 200 # 201 # Misc compiler options 202 # 203 ifneq ($(ARCH),ppc) 204 CFLAGS_COMMON = -fno-strict-aliasing 205 endif 206 PIC_CODE_LARGE = -fPIC 207 PIC_CODE_SMALL = -fpic 208 GLOBAL_KPIC = $(PIC_CODE_LARGE) 209 CFLAGS_COMMON += $(GLOBAL_KPIC) $(GCC_WARNINGS) 210 ifeq ($(ARCH), amd64) 211 CFLAGS_COMMON += -pipe 212 endif 213 214 # Linux 64bit machines use Dwarf2, which can be HUGE, have fastdebug use -g1 215 DEBUG_FLAG = -g 216 ifeq ($(FASTDEBUG), true) 217 ifeq ($(ARCH_DATA_MODEL), 64) 218 DEBUG_FLAG = -g1 219 endif 220 endif 221 222 # DEBUG_BINARIES overrides everything, use full -g debug information 223 ifeq ($(DEBUG_BINARIES), true) 224 DEBUG_FLAG = -g 225 CFLAGS_REQUIRED += $(DEBUG_FLAG) 226 endif 227 228 CFLAGS_OPT = $(CC_OPT) 229 CFLAGS_DBG = $(DEBUG_FLAG) 230 CFLAGS_COMMON += $(CFLAGS_REQUIRED) 231 232 CXXFLAGS_COMMON = $(GLOBAL_KPIC) -DCC_NOEX $(GCC_WARNINGS) 233 CXXFLAGS_OPT = $(CC_OPT) 234 CXXFLAGS_DBG = $(DEBUG_FLAG) 235 CXXFLAGS_COMMON += $(CFLAGS_REQUIRED) 236 237 # FASTDEBUG: Optimize the code in the -g versions, gives us a faster debug java 238 ifeq ($(FASTDEBUG), true) 239 CFLAGS_DBG += $(CC_OPT/$(FASTDEBUG_OPTIMIZATION_LEVEL)) 240 CXXFLAGS_DBG += $(CC_OPT/$(FASTDEBUG_OPTIMIZATION_LEVEL)) 241 endif 242 243 CPP_ARCH_FLAGS = -DARCH='"$(ARCH)"' 244 245 # Alpha arch does not like "alpha" defined (potential general arch cleanup issue here) 246 ifneq ($(ARCH),alpha) 247 CPP_ARCH_FLAGS += -D$(ARCH) 248 else 249 CPP_ARCH_FLAGS += -D_$(ARCH)_ 250 endif 251 252 CPPFLAGS_COMMON = $(CPP_ARCH_FLAGS) -DLINUX $(VERSION_DEFINES) \ 253 -D_LARGEFILE64_SOURCE -D_GNU_SOURCE -D_REENTRANT 254 255 ifeq ($(ARCH_DATA_MODEL), 64) 256 CPPFLAGS_COMMON += -D_LP64=1 257 endif 258 259 CPPFLAGS_OPT = -DNDEBUG 260 CPPFLAGS_DBG = -DDEBUG 261 ifneq ($(PRODUCT), java) 262 CPPFLAGS_DBG += -DLOGGING 263 endif 264 265 ifdef LIBRARY 266 # Libraries need to locate other libraries at runtime, and you can tell 267 # a library where to look by way of the dynamic runpaths (RPATH or RUNPATH) 268 # buried inside the .so. The $ORIGIN says to look relative to where 269 # the library itself is and it can be followed with relative paths from 270 # that. By default we always look in $ORIGIN, optionally we add relative 271 # paths if the Makefile sets LD_RUNPATH_EXTRAS to those relative paths. 272 # On Linux we add a flag -z origin, not sure if this is necessary, but 273 # doesn't seem to hurt. 274 # The environment variable LD_LIBRARY_PATH will over-ride these runpaths. 275 # Try: 'readelf -d lib*.so' to see these settings in a library. 276 # 277 Z_ORIGIN_FLAG/sparc = -Xlinker -z -Xlinker origin 278 Z_ORIGIN_FLAG/i586 = -Xlinker -z -Xlinker origin 279 Z_ORIGIN_FLAG/amd64 = -Xlinker -z -Xlinker origin 280 Z_ORIGIN_FLAG/ia64 = -Xlinker -z -Xlinker origin 281 Z_ORIGIN_FLAG/arm = 282 Z_ORIGIN_FLAG/ppc = 283 Z_ORIGIN_FLAG/zero = -Xlinker -z -Xlinker origin 284 285 LDFLAG_Z_ORIGIN = $(Z_ORIGIN_FLAG/$(ARCH_FAMILY)) 286 287 LDFLAGS_COMMON += $(LDFLAG_Z_ORIGIN) -Xlinker -rpath -Xlinker \$$ORIGIN 288 LDFLAGS_COMMON += $(LD_RUNPATH_EXTRAS:%=$(LDFLAG_Z_ORIGIN) -Xlinker -rpath -Xlinker \$$ORIGIN/%) 289 290 endif 291 292 EXTRA_LIBS += -lc 293 294 LDFLAGS_DEFS_OPTION = -Xlinker -z -Xlinker defs 295 LDFLAGS_COMMON += $(LDFLAGS_DEFS_OPTION) 296 297 # 298 # -L paths for finding and -ljava 299 # 300 LDFLAGS_OPT = -Xlinker -O1 301 LDFLAGS_COMMON += -L$(LIBDIR)/$(LIBARCH) 302 LDFLAGS_COMMON += -Wl,-soname=$(LIB_PREFIX)$(LIBRARY).$(LIBRARY_SUFFIX) 303 304 # 305 # -static-libgcc is a gcc-3 flag to statically link libgcc, gcc-2.9x always 306 # statically link libgcc but will print a warning with the flag. We don't 307 # want the warning, so check gcc version first. 308 # 309 ifeq ($(CC_MAJORVER),3) 310 OTHER_LDFLAGS += -static-libgcc 311 endif 312 313 # Automatic precompiled header option to use (if COMPILE_APPROACH=batch) 314 # (See Rules.gmk) The gcc 5 compiler might have an option for this? 315 AUTOMATIC_PCH_OPTION = 316 317 # 318 # Post Processing of libraries/executables 319 # 320 ifeq ($(VARIANT), OPT) 321 ifneq ($(NO_STRIP), true) 322 ifneq ($(DEBUG_BINARIES), true) 323 # Debug 'strip -g' leaves local function Elf symbols (better stack 324 # traces) 325 POST_STRIP_PROCESS = $(STRIP) -g 326 endif 327 endif 328 endif 329 330 # 331 # Use: ld $(LD_MAPFILE_FLAG) mapfile *.o 332 # 333 LD_MAPFILE_FLAG = -Xlinker --version-script -Xlinker 334 335 # 336 # Support for Quantify. 337 # 338 ifdef QUANTIFY 339 QUANTIFY_CMD = quantify 340 QUANTIFY_OPTIONS = -cache-dir=/tmp/quantify -always-use-cache-dir=yes 341 LINK_PRE_CMD = $(QUANTIFY_CMD) $(QUANTIFY_OPTIONS) 342 endif 343 344 # 345 # Path and option to link against the VM, if you have to. Note that 346 # there are libraries that link against only -ljava, but they do get 347 # -L to the -ljvm, this is because -ljava depends on -ljvm, whereas 348 # the library itself should not. 349 # 350 VM_NAME = server 351 JVMLIB = -L$(LIBDIR)/$(LIBARCH)/$(VM_NAME) -ljvm 352 JAVALIB = -ljava $(JVMLIB) 353 354 # 355 # We want to privatize JVM symbols on Solaris. This is so the user can 356 # write a function called FindClass and this should not override the 357 # FindClass that is inside the JVM. At this point in time we are not 358 # concerned with other JNI libraries because we hope that there will 359 # not be as many clashes there. 360 # 361 PRIVATIZE_JVM_SYMBOLS = false 362 363 USE_PTHREADS = true 364 override ALT_CODESET_KEY = _NL_CTYPE_CODESET_NAME 365 override AWT_RUNPATH = 366 override HAVE_ALTZONE = false 367 override HAVE_FILIOH = false 368 override HAVE_GETHRTIME = false 369 override HAVE_GETHRVTIME = false 370 override HAVE_SIGIGNORE = true 371 override LEX_LIBRARY = -lfl 372 ifeq ($(STATIC_CXX),true) 373 override LIBCXX = -Wl,-Bstatic -lstdc++ -lgcc -Wl,-Bdynamic 374 else 375 override LIBCXX = -lstdc++ 376 endif 377 override LIBPOSIX4 = 378 override LIBSOCKET = 379 override LIBNSL = 380 override LIBSCF = 381 override LIBTHREAD = 382 override LIBDL = -ldl 383 override MOOT_PRIORITIES = true 384 override NO_INTERRUPTIBLE_IO = true 385 ifeq ($(ARCH), amd64) 386 override OPENWIN_LIB = $(OPENWIN_HOME)/lib64 387 else 388 override OPENWIN_LIB = $(OPENWIN_HOME)/lib 389 endif 390 override OTHER_M4FLAGS = -D__GLIBC__ -DGNU_ASSEMBLER 391 override SUN_CMM_SUBDIR = 392 override THREADS_FLAG = native 393 override USE_GNU_M4 = true 394 override USING_GNU_TAR = true 395 override WRITE_LIBVERSION = false 396 397 # USE_EXECNAME forces the launcher to look up argv[0] on $PATH, and put the 398 # resulting resolved absolute name of the executable in the environment 399 # variable EXECNAME. That executable name is then used that to locate the 400 # installation area. 401 override USE_EXECNAME = true 402 403 # If your platform has DPS, it will have Type1 fonts too, in which case 404 # it is best to enable DPS support until such time as 2D's rasteriser 405 # can fully handle Type1 fonts in all cases. Default is "yes". 406 # HAVE_DPS should only be "no" if the platform has no DPS headers or libs 407 # DPS (Displayable PostScript) is available on Solaris machines 408 HAVE_DPS = no 409 410 # 411 # Japanese manpages 412 # 413 JA_SOURCE_ENCODING = eucJP 414 JA_TARGET_ENCODINGS = UTF-8 415 416 # Settings for the JDI - Serviceability Agent binding. 417 HOTSPOT_SALIB_PATH = $(HOTSPOT_IMPORT_PATH)/jre/lib/$(LIBARCH) 418 SALIB_NAME = $(LIB_PREFIX)saproc.$(LIBRARY_SUFFIX) 419 SA_DEBUGINFO_NAME = $(LIB_PREFIX)saproc.debuginfo 420 SA_DIZ_NAME = $(LIB_PREFIX)saproc.diz 421 422 # The JDI - Serviceability Agent binding is not currently supported 423 # on Linux-ia64. 424 ifeq ($(ARCH), ia64) 425 INCLUDE_SA = false 426 else 427 INCLUDE_SA = true 428 endif 429 430 ifdef CROSS_COMPILE_ARCH 431 # X11 headers are not under /usr/include 432 OTHER_CFLAGS += -I$(OPENWIN_HOME)/include 433 OTHER_CXXFLAGS += -I$(OPENWIN_HOME)/include 434 OTHER_CPPFLAGS += -I$(OPENWIN_HOME)/include 435 endif