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