hotspot/make/solaris/makefiles/gcc.make
author ohair
Tue, 27 May 2008 09:47:18 -0700
changeset 584 02175b2b64e6
parent 338 5cf9f61d76f4
child 670 ddf3e9583f2f
permissions -rw-r--r--
6563752: Build and test JDK7 with Sun Studio 12 Express compilers (prep makefiles) Summary: Allows for building with SS12, no longer requires SS11, warns if not SS11 for now. Once SS12 is validated and performance measurements look ok, SS12 will be the validated compiler. Reviewed-by: sspitsyn, ikrylov
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
     1
#
489c9b5090e2 Initial load
duke
parents:
diff changeset
     2
# Copyright 1998-2007 Sun Microsystems, Inc.  All Rights Reserved.
489c9b5090e2 Initial load
duke
parents:
diff changeset
     3
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
489c9b5090e2 Initial load
duke
parents:
diff changeset
     4
#
489c9b5090e2 Initial load
duke
parents:
diff changeset
     5
# This code is free software; you can redistribute it and/or modify it
489c9b5090e2 Initial load
duke
parents:
diff changeset
     6
# under the terms of the GNU General Public License version 2 only, as
489c9b5090e2 Initial load
duke
parents:
diff changeset
     7
# published by the Free Software Foundation.
489c9b5090e2 Initial load
duke
parents:
diff changeset
     8
#
489c9b5090e2 Initial load
duke
parents:
diff changeset
     9
# This code is distributed in the hope that it will be useful, but WITHOUT
489c9b5090e2 Initial load
duke
parents:
diff changeset
    10
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
489c9b5090e2 Initial load
duke
parents:
diff changeset
    11
# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
489c9b5090e2 Initial load
duke
parents:
diff changeset
    12
# version 2 for more details (a copy is included in the LICENSE file that
489c9b5090e2 Initial load
duke
parents:
diff changeset
    13
# accompanied this code).
489c9b5090e2 Initial load
duke
parents:
diff changeset
    14
#
489c9b5090e2 Initial load
duke
parents:
diff changeset
    15
# You should have received a copy of the GNU General Public License version
489c9b5090e2 Initial load
duke
parents:
diff changeset
    16
# 2 along with this work; if not, write to the Free Software Foundation,
489c9b5090e2 Initial load
duke
parents:
diff changeset
    17
# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
489c9b5090e2 Initial load
duke
parents:
diff changeset
    18
#
489c9b5090e2 Initial load
duke
parents:
diff changeset
    19
# Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
489c9b5090e2 Initial load
duke
parents:
diff changeset
    20
# CA 95054 USA or visit www.sun.com if you need additional information or
489c9b5090e2 Initial load
duke
parents:
diff changeset
    21
# have any questions.
489c9b5090e2 Initial load
duke
parents:
diff changeset
    22
#  
489c9b5090e2 Initial load
duke
parents:
diff changeset
    23
#
489c9b5090e2 Initial load
duke
parents:
diff changeset
    24
489c9b5090e2 Initial load
duke
parents:
diff changeset
    25
#------------------------------------------------------------------------
489c9b5090e2 Initial load
duke
parents:
diff changeset
    26
# CC, CPP & AS
489c9b5090e2 Initial load
duke
parents:
diff changeset
    27
489c9b5090e2 Initial load
duke
parents:
diff changeset
    28
CPP = g++
489c9b5090e2 Initial load
duke
parents:
diff changeset
    29
CC  = gcc
489c9b5090e2 Initial load
duke
parents:
diff changeset
    30
AS  = $(CC) -c
489c9b5090e2 Initial load
duke
parents:
diff changeset
    31
489c9b5090e2 Initial load
duke
parents:
diff changeset
    32
Compiler = gcc
489c9b5090e2 Initial load
duke
parents:
diff changeset
    33
489c9b5090e2 Initial load
duke
parents:
diff changeset
    34
# -dumpversion in gcc-2.91 shows "egcs-2.91.66". In later version, it only
489c9b5090e2 Initial load
duke
parents:
diff changeset
    35
# prints the numbers (e.g. "2.95", "3.2.1")
489c9b5090e2 Initial load
duke
parents:
diff changeset
    36
CC_VER_MAJOR := $(shell $(CC) -dumpversion | sed 's/egcs-//' | cut -d'.' -f1)
489c9b5090e2 Initial load
duke
parents:
diff changeset
    37
CC_VER_MINOR := $(shell $(CC) -dumpversion | sed 's/egcs-//' | cut -d'.' -f2)
489c9b5090e2 Initial load
duke
parents:
diff changeset
    38
489c9b5090e2 Initial load
duke
parents:
diff changeset
    39
# Check for the versions of C++ and C compilers ($CPP and $CC) used. 
489c9b5090e2 Initial load
duke
parents:
diff changeset
    40
489c9b5090e2 Initial load
duke
parents:
diff changeset
    41
# Get the last thing on the line that looks like x.x+ (x is a digit).
489c9b5090e2 Initial load
duke
parents:
diff changeset
    42
COMPILER_REV := \
489c9b5090e2 Initial load
duke
parents:
diff changeset
    43
$(shell $(CPP) -dumpversion | sed 's/egcs-//' | cut -d'.' -f1)
489c9b5090e2 Initial load
duke
parents:
diff changeset
    44
C_COMPILER_REV := \
489c9b5090e2 Initial load
duke
parents:
diff changeset
    45
$(shell $(CC) -dumpversion | sed 's/egcs-//' | cut -d'.' -f2)
489c9b5090e2 Initial load
duke
parents:
diff changeset
    46
489c9b5090e2 Initial load
duke
parents:
diff changeset
    47
489c9b5090e2 Initial load
duke
parents:
diff changeset
    48
# check for precompiled headers support
489c9b5090e2 Initial load
duke
parents:
diff changeset
    49
ifneq "$(shell expr \( $(CC_VER_MAJOR) \> 3 \) \| \( \( $(CC_VER_MAJOR) = 3 \) \& \( $(CC_VER_MINOR) \>= 4 \) \))" "0"
489c9b5090e2 Initial load
duke
parents:
diff changeset
    50
USE_PRECOMPILED_HEADER=1
489c9b5090e2 Initial load
duke
parents:
diff changeset
    51
PRECOMPILED_HEADER_DIR=.
489c9b5090e2 Initial load
duke
parents:
diff changeset
    52
PRECOMPILED_HEADER=$(PRECOMPILED_HEADER_DIR)/incls/_precompiled.incl.gch
489c9b5090e2 Initial load
duke
parents:
diff changeset
    53
endif
489c9b5090e2 Initial load
duke
parents:
diff changeset
    54
489c9b5090e2 Initial load
duke
parents:
diff changeset
    55
489c9b5090e2 Initial load
duke
parents:
diff changeset
    56
#------------------------------------------------------------------------
489c9b5090e2 Initial load
duke
parents:
diff changeset
    57
# Compiler flags
489c9b5090e2 Initial load
duke
parents:
diff changeset
    58
489c9b5090e2 Initial load
duke
parents:
diff changeset
    59
# position-independent code
489c9b5090e2 Initial load
duke
parents:
diff changeset
    60
PICFLAG = -fPIC
489c9b5090e2 Initial load
duke
parents:
diff changeset
    61
489c9b5090e2 Initial load
duke
parents:
diff changeset
    62
VM_PICFLAG/LIBJVM = $(PICFLAG)
489c9b5090e2 Initial load
duke
parents:
diff changeset
    63
VM_PICFLAG/AOUT   =
489c9b5090e2 Initial load
duke
parents:
diff changeset
    64
VM_PICFLAG        = $(VM_PICFLAG/$(LINK_INTO))
489c9b5090e2 Initial load
duke
parents:
diff changeset
    65
489c9b5090e2 Initial load
duke
parents:
diff changeset
    66
CFLAGS += $(VM_PICFLAG)
489c9b5090e2 Initial load
duke
parents:
diff changeset
    67
CFLAGS += -fno-rtti
489c9b5090e2 Initial load
duke
parents:
diff changeset
    68
CFLAGS += -fno-exceptions
489c9b5090e2 Initial load
duke
parents:
diff changeset
    69
CFLAGS += -D_REENTRANT
489c9b5090e2 Initial load
duke
parents:
diff changeset
    70
CFLAGS += -fcheck-new
489c9b5090e2 Initial load
duke
parents:
diff changeset
    71
489c9b5090e2 Initial load
duke
parents:
diff changeset
    72
ARCHFLAG = $(ARCHFLAG/$(BUILDARCH))
489c9b5090e2 Initial load
duke
parents:
diff changeset
    73
489c9b5090e2 Initial load
duke
parents:
diff changeset
    74
ARCHFLAG/sparc   = -m32 -mcpu=v9
489c9b5090e2 Initial load
duke
parents:
diff changeset
    75
ARCHFLAG/sparcv9 = -m64 -mcpu=v9
489c9b5090e2 Initial load
duke
parents:
diff changeset
    76
ARCHFLAG/i486    = -m32 -march=i586
489c9b5090e2 Initial load
duke
parents:
diff changeset
    77
ARCHFLAG/amd64   = -m64 -march=k8
489c9b5090e2 Initial load
duke
parents:
diff changeset
    78
489c9b5090e2 Initial load
duke
parents:
diff changeset
    79
489c9b5090e2 Initial load
duke
parents:
diff changeset
    80
# Optional sub-directory in /usr/lib where BUILDARCH libraries are kept.
489c9b5090e2 Initial load
duke
parents:
diff changeset
    81
ISA_DIR=$(ISA_DIR/$(BUILDARCH))
489c9b5090e2 Initial load
duke
parents:
diff changeset
    82
ISA_DIR/amd64=/amd64
489c9b5090e2 Initial load
duke
parents:
diff changeset
    83
ISA_DIR/i486=
489c9b5090e2 Initial load
duke
parents:
diff changeset
    84
ISA_DIR/sparcv9=/64
489c9b5090e2 Initial load
duke
parents:
diff changeset
    85
489c9b5090e2 Initial load
duke
parents:
diff changeset
    86
489c9b5090e2 Initial load
duke
parents:
diff changeset
    87
CFLAGS     += $(ARCHFLAG)
489c9b5090e2 Initial load
duke
parents:
diff changeset
    88
AOUT_FLAGS += $(ARCHFLAG)
489c9b5090e2 Initial load
duke
parents:
diff changeset
    89
LFLAGS     += $(ARCHFLAG)
489c9b5090e2 Initial load
duke
parents:
diff changeset
    90
ASFLAGS    += $(ARCHFLAG)
489c9b5090e2 Initial load
duke
parents:
diff changeset
    91
489c9b5090e2 Initial load
duke
parents:
diff changeset
    92
ifeq ($(BUILDARCH), amd64)
489c9b5090e2 Initial load
duke
parents:
diff changeset
    93
ASFLAGS += -march=k8  -march=amd64
489c9b5090e2 Initial load
duke
parents:
diff changeset
    94
LFLAGS += -march=k8 
489c9b5090e2 Initial load
duke
parents:
diff changeset
    95
endif
489c9b5090e2 Initial load
duke
parents:
diff changeset
    96
489c9b5090e2 Initial load
duke
parents:
diff changeset
    97
489c9b5090e2 Initial load
duke
parents:
diff changeset
    98
# Use C++ Interpreter
489c9b5090e2 Initial load
duke
parents:
diff changeset
    99
ifdef CC_INTERP
489c9b5090e2 Initial load
duke
parents:
diff changeset
   100
  CFLAGS += -DCC_INTERP
489c9b5090e2 Initial load
duke
parents:
diff changeset
   101
endif
489c9b5090e2 Initial load
duke
parents:
diff changeset
   102
489c9b5090e2 Initial load
duke
parents:
diff changeset
   103
# Keep temporary files (.ii, .s)
489c9b5090e2 Initial load
duke
parents:
diff changeset
   104
ifdef NEED_ASM
489c9b5090e2 Initial load
duke
parents:
diff changeset
   105
  CFLAGS += -save-temps
489c9b5090e2 Initial load
duke
parents:
diff changeset
   106
else
489c9b5090e2 Initial load
duke
parents:
diff changeset
   107
  CFLAGS += -pipe
489c9b5090e2 Initial load
duke
parents:
diff changeset
   108
endif
489c9b5090e2 Initial load
duke
parents:
diff changeset
   109
489c9b5090e2 Initial load
duke
parents:
diff changeset
   110
489c9b5090e2 Initial load
duke
parents:
diff changeset
   111
# Compiler warnings are treated as errors 
489c9b5090e2 Initial load
duke
parents:
diff changeset
   112
WARNINGS_ARE_ERRORS = -Werror 
489c9b5090e2 Initial load
duke
parents:
diff changeset
   113
# Enable these warnings. See 'info gcc' about details on these options
489c9b5090e2 Initial load
duke
parents:
diff changeset
   114
ADDITIONAL_WARNINGS = -Wpointer-arith -Wconversion -Wsign-compare 
489c9b5090e2 Initial load
duke
parents:
diff changeset
   115
CFLAGS_WARN/DEFAULT = $(WARNINGS_ARE_ERRORS) $(ADDITIONAL_WARNINGS) 
489c9b5090e2 Initial load
duke
parents:
diff changeset
   116
# Special cases 
489c9b5090e2 Initial load
duke
parents:
diff changeset
   117
CFLAGS_WARN/BYFILE = $(CFLAGS_WARN/$@)$(CFLAGS_WARN/DEFAULT$(CFLAGS_WARN/$@))  
489c9b5090e2 Initial load
duke
parents:
diff changeset
   118
489c9b5090e2 Initial load
duke
parents:
diff changeset
   119
# The flags to use for an Optimized g++ build
489c9b5090e2 Initial load
duke
parents:
diff changeset
   120
OPT_CFLAGS += -O3
489c9b5090e2 Initial load
duke
parents:
diff changeset
   121
489c9b5090e2 Initial load
duke
parents:
diff changeset
   122
# Hotspot uses very unstrict aliasing turn this optimization off
489c9b5090e2 Initial load
duke
parents:
diff changeset
   123
OPT_CFLAGS += -fno-strict-aliasing
489c9b5090e2 Initial load
duke
parents:
diff changeset
   124
489c9b5090e2 Initial load
duke
parents:
diff changeset
   125
# The gcc compiler segv's on ia64 when compiling bytecodeInterpreter.cpp 
489c9b5090e2 Initial load
duke
parents:
diff changeset
   126
# if we use expensive-optimizations
489c9b5090e2 Initial load
duke
parents:
diff changeset
   127
# Note: all ia64 setting reflect the ones for linux
489c9b5090e2 Initial load
duke
parents:
diff changeset
   128
# No actial testing was performed: there is no Solaris on ia64 presently
489c9b5090e2 Initial load
duke
parents:
diff changeset
   129
ifeq ($(BUILDARCH), ia64)
489c9b5090e2 Initial load
duke
parents:
diff changeset
   130
OPT_CFLAGS/bytecodeInterpreter.o += -fno-expensive-optimizations
489c9b5090e2 Initial load
duke
parents:
diff changeset
   131
endif
489c9b5090e2 Initial load
duke
parents:
diff changeset
   132
489c9b5090e2 Initial load
duke
parents:
diff changeset
   133
OPT_CFLAGS/NOOPT=-O0
489c9b5090e2 Initial load
duke
parents:
diff changeset
   134
#------------------------------------------------------------------------
489c9b5090e2 Initial load
duke
parents:
diff changeset
   135
# Linker flags
489c9b5090e2 Initial load
duke
parents:
diff changeset
   136
489c9b5090e2 Initial load
duke
parents:
diff changeset
   137
# statically link libstdc++.so, work with gcc but ignored by g++
489c9b5090e2 Initial load
duke
parents:
diff changeset
   138
STATIC_STDCXX = -Wl,-Bstatic -lstdc++ -Wl,-Bdynamic
489c9b5090e2 Initial load
duke
parents:
diff changeset
   139
489c9b5090e2 Initial load
duke
parents:
diff changeset
   140
# statically link libgcc and/or libgcc_s, libgcc does not exist before gcc-3.x.
489c9b5090e2 Initial load
duke
parents:
diff changeset
   141
ifneq ("${CC_VER_MAJOR}", "2")
489c9b5090e2 Initial load
duke
parents:
diff changeset
   142
STATIC_LIBGCC += -static-libgcc
489c9b5090e2 Initial load
duke
parents:
diff changeset
   143
endif
489c9b5090e2 Initial load
duke
parents:
diff changeset
   144
489c9b5090e2 Initial load
duke
parents:
diff changeset
   145
ifeq ($(BUILDARCH), ia64)
489c9b5090e2 Initial load
duke
parents:
diff changeset
   146
# Note: all ia64 setting reflect the ones for linux
489c9b5090e2 Initial load
duke
parents:
diff changeset
   147
# No actial testing was performed: there is no Solaris on ia64 presently
489c9b5090e2 Initial load
duke
parents:
diff changeset
   148
LFLAGS += -Wl,-relax
489c9b5090e2 Initial load
duke
parents:
diff changeset
   149
endif
489c9b5090e2 Initial load
duke
parents:
diff changeset
   150
489c9b5090e2 Initial load
duke
parents:
diff changeset
   151
ifdef USE_GNULD
489c9b5090e2 Initial load
duke
parents:
diff changeset
   152
# Enable linker optimization
489c9b5090e2 Initial load
duke
parents:
diff changeset
   153
LFLAGS += -Xlinker -O1
489c9b5090e2 Initial load
duke
parents:
diff changeset
   154
489c9b5090e2 Initial load
duke
parents:
diff changeset
   155
# Use $(MAPFLAG:FILENAME=real_file_name) to specify a map file.
489c9b5090e2 Initial load
duke
parents:
diff changeset
   156
MAPFLAG = -Xlinker --version-script=FILENAME 
489c9b5090e2 Initial load
duke
parents:
diff changeset
   157
else 
489c9b5090e2 Initial load
duke
parents:
diff changeset
   158
MAPFLAG = -Xlinker -M -Xlinker FILENAME 
489c9b5090e2 Initial load
duke
parents:
diff changeset
   159
endif 
489c9b5090e2 Initial load
duke
parents:
diff changeset
   160
489c9b5090e2 Initial load
duke
parents:
diff changeset
   161
# Use $(SONAMEFLAG:SONAME=soname) to specify the intrinsic name of a shared obj
489c9b5090e2 Initial load
duke
parents:
diff changeset
   162
SONAMEFLAG = -Xlinker -soname=SONAME
489c9b5090e2 Initial load
duke
parents:
diff changeset
   163
489c9b5090e2 Initial load
duke
parents:
diff changeset
   164
# Build shared library
489c9b5090e2 Initial load
duke
parents:
diff changeset
   165
SHARED_FLAG = -shared
489c9b5090e2 Initial load
duke
parents:
diff changeset
   166
489c9b5090e2 Initial load
duke
parents:
diff changeset
   167
#------------------------------------------------------------------------
489c9b5090e2 Initial load
duke
parents:
diff changeset
   168
# Debug flags
489c9b5090e2 Initial load
duke
parents:
diff changeset
   169
489c9b5090e2 Initial load
duke
parents:
diff changeset
   170
# Use the stabs format for debugging information (this is the default 
489c9b5090e2 Initial load
duke
parents:
diff changeset
   171
# on gcc-2.91). It's good enough, has all the information about line 
489c9b5090e2 Initial load
duke
parents:
diff changeset
   172
# numbers and local variables, and libjvm_g.so is only about 16M. 
489c9b5090e2 Initial load
duke
parents:
diff changeset
   173
# Change this back to "-g" if you want the most expressive format. 
489c9b5090e2 Initial load
duke
parents:
diff changeset
   174
# (warning: that could easily inflate libjvm_g.so to 150M!) 
489c9b5090e2 Initial load
duke
parents:
diff changeset
   175
# Note: The Itanium gcc compiler crashes when using -gstabs. 
489c9b5090e2 Initial load
duke
parents:
diff changeset
   176
DEBUG_CFLAGS/ia64  = -g 
489c9b5090e2 Initial load
duke
parents:
diff changeset
   177
DEBUG_CFLAGS/amd64 = -g 
489c9b5090e2 Initial load
duke
parents:
diff changeset
   178
DEBUG_CFLAGS += $(DEBUG_CFLAGS/$(BUILDARCH)) 
489c9b5090e2 Initial load
duke
parents:
diff changeset
   179
ifeq ($(DEBUG_CFLAGS/$(BUILDARCH)),) 
489c9b5090e2 Initial load
duke
parents:
diff changeset
   180
DEBUG_CFLAGS += -gstabs 
489c9b5090e2 Initial load
duke
parents:
diff changeset
   181
endif 
489c9b5090e2 Initial load
duke
parents:
diff changeset
   182
489c9b5090e2 Initial load
duke
parents:
diff changeset
   183
MCS = /usr/ccs/bin/mcs