1 # 2 # Copyright 1999-2007 Sun Microsystems, Inc. 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. Sun designates this 8 # particular file as subject to the "Classpath" exception as provided 9 # by Sun 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 Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, 22 # CA 95054 USA or visit www.sun.com if you need additional information or 23 # have any 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 31 # Warning: the following variables are overriden by Defs.gmk. Set 32 # values will be silently ignored: 33 # CFLAGS (set $(OTHER_CFLAGS) instead) 34 # CPPFLAGS (set $(OTHER_CPPFLAGS) instead) 35 # CXXFLAGS (set $(OTHER_CXXFLAGS) instead) 36 # LDFLAGS (set $(OTHER_LDFAGS) instead) 37 # LDLIBS (set $(EXTRA_LIBS) instead) 38 # LDLIBS_COMMON (set $(EXTRA_LIBS) instead) 39 40 # Get shared JDK settings 41 include $(BUILDDIR)/common/shared/Defs.gmk 42 43 # Part of INCREMENTAL_BUILD mechanism. 44 # Compiler emits things like: path/file.o: file.h 45 # We want something like: relative_path/file.o relative_path/file.d: file.h 46 CC_DEPEND = -MM 47 CC_DEPEND_FILTER = $(SED) -e 's!$*\.$(OBJECT_SUFFIX)!$(dir $@)& $(dir $@)$*.$(DEPEND_SUFFIX)!g' 48 49 ifndef PLATFORM_SRC 50 PLATFORM_SRC = $(TOPDIR)/src/solaris 51 endif # PLATFORM_SRC 52 53 # platform specific include files 54 PLATFORM_INCLUDE_NAME = $(PLATFORM) 55 PLATFORM_INCLUDE = $(INCLUDEDIR)/$(PLATFORM_INCLUDE_NAME) 56 57 # suffix used for make dependencies files. 58 DEPEND_SUFFIX = d 59 # The suffix applied to the library name for FDLIBM 60 FDDLIBM_SUFFIX = a 61 # The suffix applied to scripts (.bat for windows, nothing for unix) 62 SCRIPT_SUFFIX = 63 # CC compiler object code output directive flag value 64 CC_OBJECT_OUTPUT_FLAG = -o #trailing blank required! 65 CC_PROGRAM_OUTPUT_FLAG = -o #trailing blank required! 66 67 # 68 # Default HPI libraries. Build will build only native, unless 69 # overriden at the make command line. This makes it convenient for 70 # people doing, say, a pthreads port -- they can create a posix 71 # directory here, and say "gnumake HPIS=posix" at the top 72 # level. 73 # 74 HPIS = native 75 76 # 77 # Default optimization 78 # 79 CC_HIGHEST_OPT = -O3 80 CC_HIGHER_OPT = -O3 81 CC_LOWER_OPT = -O2 82 CC_NO_OPT = 83 84 ifeq ($(PRODUCT), java) 85 _OPT = $(CC_HIGHER_OPT) 86 else 87 _OPT = $(CC_LOWER_OPT) 88 CPPFLAGS_DBG += -DLOGGING 89 endif 90 91 # For all platforms, do not omit the frame pointer register usage. 92 # We need this frame pointer to make it easy to walk the stacks. 93 # This should be the default on X86, but ia64 and amd64 may not have this 94 # as the default. 95 CFLAGS_REQUIRED_amd64 += -fno-omit-frame-pointer -D_LITTLE_ENDIAN 96 CFLAGS_REQUIRED_i586 += -fno-omit-frame-pointer -D_LITTLE_ENDIAN 97 CFLAGS_REQUIRED_ia64 += -fno-omit-frame-pointer -D_LITTLE_ENDIAN 98 CFLAGS_REQUIRED_sparcv9 += -m64 -mcpu=v9 99 LDFLAGS_COMMON_sparcv9 += -m64 -mcpu=v9 100 CFLAGS_REQUIRED_sparc += -m32 -mcpu=v9 101 LDFLAGS_COMMON_sparc += -m32 -mcpu=v9 102 ifeq ($(ZERO_BUILD), true) 103 CFLAGS_REQUIRED = $(ZERO_ARCHFLAG) 104 ifeq ($(ZERO_ENDIANNESS), little) 105 CFLAGS_REQUIRED += -D_LITTLE_ENDIAN 106 endif 107 LDFLAGS_COMMON += $(ZERO_ARCHFLAG) 108 else 109 CFLAGS_REQUIRED = $(CFLAGS_REQUIRED_$(ARCH)) 110 LDFLAGS_COMMON += $(LDFLAGS_COMMON_$(ARCH)) 111 endif 112 113 # Add in platform specific optimizations for all opt levels 114 CC_HIGHEST_OPT += $(_OPT_$(ARCH)) 115 CC_HIGHER_OPT += $(_OPT_$(ARCH)) 116 CC_LOWER_OPT += $(_OPT_$(ARCH)) 117 118 # If NO_OPTIMIZATIONS is defined in the environment, turn all optimzations off 119 ifdef NO_OPTIMIZATIONS 120 CC_HIGHEST_OPT = $(CC_NO_OPT) 121 CC_HIGHER_OPT = $(CC_NO_OPT) 122 CC_LOWER_OPT = $(CC_NO_OPT) 123 endif 124 125 # 126 # Selection of warning messages 127 # 128 GCC_INHIBIT = -Wno-unused -Wno-parentheses 129 GCC_STYLE = 130 GCC_WARNINGS = -W -Wall $(GCC_STYLE) $(GCC_INHIBIT) 131 132 # 133 # Treat compiler warnings as errors, if warnings not allowed 134 # 135 ifeq ($(COMPILER_WARNINGS_FATAL),true) 136 GCC_WARNINGS += -Werror 137 endif 138 139 # 140 # Misc compiler options 141 # 142 ifeq ($(ARCH),ppc) 143 CFLAGS_COMMON = -fsigned-char 144 else # ARCH 145 CFLAGS_COMMON = -fno-strict-aliasing 146 endif # ARCH 147 PIC_CODE_LARGE = -fPIC 148 PIC_CODE_SMALL = -fpic 149 GLOBAL_KPIC = $(PIC_CODE_LARGE) 150 ifeq ($(ARCH), amd64) 151 CFLAGS_COMMON += $(GLOBAL_KPIC) $(GCC_WARNINGS) -pipe 152 else 153 CFLAGS_COMMON += $(GLOBAL_KPIC) $(GCC_WARNINGS) 154 endif 155 156 # Linux 64bit machines use Dwarf2, which can be HUGE, have fastdebug use -g1 157 DEBUG_FLAG = -g 158 ifeq ($(FASTDEBUG), true) 159 ifeq ($(ARCH_DATA_MODEL), 64) 160 DEBUG_FLAG = -g1 161 endif 162 endif 163 164 CFLAGS_OPT = $(POPT) 165 CFLAGS_DBG = $(DEBUG_FLAG) 166 CFLAGS_COMMON += $(CFLAGS_REQUIRED) 167 168 CXXFLAGS_COMMON = $(GLOBAL_KPIC) -DCC_NOEX $(GCC_WARNINGS) 169 CXXFLAGS_OPT = $(POPT) 170 CXXFLAGS_DBG = $(DEBUG_FLAG) 171 CXXFLAGS_COMMON += $(CFLAGS_REQUIRED) 172 173 # FASTDEBUG: Optimize the code in the -g versions, gives us a faster debug java 174 ifeq ($(FASTDEBUG), true) 175 CFLAGS_DBG += $(CC_LOWER_OPT) 176 CXXFLAGS_DBG += $(CC_LOWER_OPT) 177 endif 178 179 CPPFLAGS_COMMON = -D$(ARCH) -DARCH='"$(ARCH)"' -DLINUX $(VERSION_DEFINES) \ 180 -D_LARGEFILE64_SOURCE -D_GNU_SOURCE -D_REENTRANT 181 182 ifeq ($(ARCH_DATA_MODEL), 64) 183 CPPFLAGS_COMMON += -D_LP64=1 184 endif 185 186 CPPFLAGS_OPT = 187 CPPFLAGS_DBG = -DDEBUG 188 189 ifdef LIBRARY 190 # Libraries need to locate other libraries at runtime, and you can tell 191 # a library where to look by way of the dynamic runpaths (RPATH or RUNPATH) 192 # buried inside the .so. The $ORIGIN says to look relative to where 193 # the library itself is and it can be followed with relative paths from 194 # that. By default we always look in $ORIGIN, optionally we add relative 195 # paths if the Makefile sets LD_RUNPATH_EXTRAS to those relative paths. 196 # On Linux we add a flag -z origin, not sure if this is necessary, but 197 # doesn't seem to hurt. 198 # The environment variable LD_LIBRARY_PATH will over-ride these runpaths. 199 # Try: 'readelf -d lib*.so' to see these settings in a library. 200 # 201 LDFLAGS_COMMON += -Xlinker -z -Xlinker origin -Xlinker -rpath -Xlinker \$$ORIGIN 202 LDFLAGS_COMMON += $(LD_RUNPATH_EXTRAS:%=-Xlinker -z -Xlinker origin -Xlinker -rpath -Xlinker \$$ORIGIN/%) 203 endif 204 205 EXTRA_LIBS += -lc 206 207 LDFLAGS_DEFS_OPTION = -Xlinker -z -Xlinker defs 208 LDFLAGS_COMMON += $(LDFLAGS_DEFS_OPTION) 209 210 # 211 # -L paths for finding and -ljava 212 # 213 LDFLAGS_OPT = -Xlinker -O1 214 LDFLAGS_COMMON += -L$(LIBDIR)/$(LIBARCH) 215 LDFLAGS_COMMON += -Wl,-soname=$(LIB_PREFIX)$(LIBRARY).$(LIBRARY_SUFFIX) 216 217 # 218 # -static-libgcc is a gcc-3 flag to statically link libgcc, gcc-2.9x always 219 # statically link libgcc but will print a warning with the flag. We don't 220 # want the warning, so check gcc version first. 221 # 222 CC_VER_MAJOR := $(shell $(CC) -dumpversion | $(SED) 's/egcs-//' | $(CUT) -d'.' -f1) 223 ifeq ("$(CC_VER_MAJOR)", "3") 224 OTHER_LDFLAGS += -static-libgcc 225 endif 226 227 # Automatic precompiled header option to use (if COMPILE_APPROACH=batch) 228 # (See Rules.gmk) The gcc 5 compiler might have an option for this? 229 AUTOMATIC_PCH_OPTION = 230 231 # 232 # Post Processing of libraries/executables 233 # 234 ifeq ($(VARIANT), OPT) 235 ifneq ($(NO_STRIP), true) 236 # Debug 'strip -g' leaves local function Elf symbols (better stack traces) 237 POST_STRIP_PROCESS = $(STRIP) -g 238 endif 239 endif 240 241 # 242 # Use: ld $(LD_MAPFILE_FLAG) mapfile *.o 243 # 244 LD_MAPFILE_FLAG = -Xlinker --version-script -Xlinker 245 246 # 247 # Support for Quantify. 248 # 249 ifdef QUANTIFY 250 QUANTIFY_CMD = quantify 251 QUANTIFY_OPTIONS = -cache-dir=/tmp/quantify -always-use-cache-dir=yes 252 LINK_PRE_CMD = $(QUANTIFY_CMD) $(QUANTIFY_OPTIONS) 253 endif 254 255 # 256 # Path and option to link against the VM, if you have to. Note that 257 # there are libraries that link against only -ljava, but they do get 258 # -L to the -ljvm, this is because -ljava depends on -ljvm, whereas 259 # the library itself should not. 260 # 261 VM_NAME = server 262 JVMLIB = -L$(BOOTDIR)/jre/lib/$(LIBARCH)/$(VM_NAME) -ljvm 263 JAVALIB = -L$(BOOTDIR)/jre/lib/$(LIBARCH) -ljava $(JVMLIB) 264 265 # 266 # We want to privatize JVM symbols on Solaris. This is so the user can 267 # write a function called FindClass and this should not override the 268 # FindClass that is inside the JVM. At this point in time we are not 269 # concerned with other JNI libraries because we hope that there will 270 # not be as many clashes there. 271 # 272 PRIVATIZE_JVM_SYMBOLS = false 273 274 USE_PTHREADS = true 275 override ALT_CODESET_KEY = _NL_CTYPE_CODESET_NAME 276 override AWT_RUNPATH = 277 override HAVE_ALTZONE = false 278 override HAVE_FILIOH = false 279 override HAVE_GETHRTIME = false 280 override HAVE_GETHRVTIME = false 281 override HAVE_SIGIGNORE = true 282 override LEX_LIBRARY = -lfl 283 ifeq ($(STATIC_CXX),true) 284 override LIBCXX = -Wl,-Bstatic -lstdc++ -lgcc -Wl,-Bdynamic 285 else 286 override LIBCXX = -lstdc++ 287 endif 288 override LIBPOSIX4 = 289 override LIBSOCKET = 290 override LIBTHREAD = 291 override MOOT_PRIORITIES = true 292 override NO_INTERRUPTIBLE_IO = true 293 override OPENWIN_HOME = /usr/X11R6 294 ifeq ($(ARCH), amd64) 295 override OPENWIN_LIB = $(OPENWIN_HOME)/lib64 296 else 297 override OPENWIN_LIB = $(OPENWIN_HOME)/lib 298 endif 299 override OTHER_M4FLAGS = -D__GLIBC__ -DGNU_ASSEMBLER 300 override SUN_CMM_SUBDIR = 301 override THREADS_FLAG = native 302 override USE_GNU_M4 = true 303 override USING_GNU_TAR = true 304 override WRITE_LIBVERSION = false 305 306 # USE_EXECNAME forces the launcher to look up argv[0] on $PATH, and put the 307 # resulting resolved absolute name of the executable in the environment 308 # variable EXECNAME. That executable name is then used that to locate the 309 # installation area. 310 override USE_EXECNAME = true 311 312 # If your platform has DPS, it will have Type1 fonts too, in which case 313 # it is best to enable DPS support until such time as 2D's rasteriser 314 # can fully handle Type1 fonts in all cases. Default is "yes". 315 # HAVE_DPS should only be "no" if the platform has no DPS headers or libs 316 # DPS (Displayable PostScript) is available on Solaris machines 317 HAVE_DPS = no 318 319 # 320 # Japanese manpages 321 # 322 JA_SOURCE_ENCODING = eucJP 323 JA_TARGET_ENCODINGS = eucJP 324