1#
2# Copyright (c) 2006, 2014, 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.
8#
9# This code is distributed in the hope that it will be useful, but WITHOUT
10# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
12# version 2 for more details (a copy is included in the LICENSE file that
13# accompanied this code).
14#
15# You should have received a copy of the GNU General Public License version
16# 2 along with this work; if not, write to the Free Software Foundation,
17# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
18#
19# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
20# or visit www.oracle.com if you need additional information or have any
21# questions.
22#
23#
24
25# The common definitions for hotspot solaris builds.
26# Include the top level defs.make under make directory instead of this one.
27# This file is included into make/defs.make.
28
29# Need PLATFORM (os-arch combo names) for jdk and hotspot, plus libarch name
30SLASH_JAVA ?= /java
31ARCH:=$(shell uname -p)
32PATH_SEP = :
33ifeq ($(LP64), 1)
34  ARCH_DATA_MODEL=64
35else
36  ARCH_DATA_MODEL=32
37endif
38
39ifeq ($(ARCH),sparc)
40  ifeq ($(ARCH_DATA_MODEL), 64)
41    MAKE_ARGS += LP64=1
42    PLATFORM=solaris-sparcv9
43    VM_PLATFORM=solaris_sparcv9
44  else
45    PLATFORM=solaris-sparc
46    VM_PLATFORM=solaris_sparc
47  endif
48  HS_ARCH=sparc
49else
50  ifeq ($(ARCH_DATA_MODEL), 64)
51    MAKE_ARGS += LP64=1
52    PLATFORM=solaris-amd64
53    VM_PLATFORM=solaris_amd64
54    HS_ARCH=x86
55  else
56    PLATFORM=solaris-i586
57    VM_PLATFORM=solaris_i486
58    HS_ARCH=x86
59  endif
60endif
61
62# On 32 bit solaris we build server and client, on 64 bit just server.
63ifeq ($(JVM_VARIANTS),)
64  ifeq ($(ARCH_DATA_MODEL), 32)
65    JVM_VARIANTS:=client,server
66    JVM_VARIANT_CLIENT:=true
67    JVM_VARIANT_SERVER:=true
68  else
69    JVM_VARIANTS:=server
70    JVM_VARIANT_SERVER:=true
71  endif
72endif
73
74# determine if HotSpot is being built in JDK6 or earlier version
75JDK6_OR_EARLIER=0
76ifeq "$(shell expr \( '$(JDK_MAJOR_VERSION)' != '' \& '$(JDK_MINOR_VERSION)' != '' \& '$(JDK_MICRO_VERSION)' != '' \))" "1"
77  # if the longer variable names (newer build style) are set, then check those
78  ifeq "$(shell expr \( $(JDK_MAJOR_VERSION) = 1 \& $(JDK_MINOR_VERSION) \< 7 \))" "1"
79    JDK6_OR_EARLIER=1
80  endif
81else
82  # the longer variables aren't set so check the shorter variable names
83  ifeq "$(shell expr \( '$(JDK_MAJOR_VER)' = 1 \& '$(JDK_MINOR_VER)' \< 7 \))" "1"
84    JDK6_OR_EARLIER=1
85  endif
86endif
87
88ifeq ($(JDK6_OR_EARLIER),0)
89  # Full Debug Symbols is supported on JDK7 or newer.
90  # The Full Debug Symbols (FDS) default for BUILD_FLAVOR == product
91  # builds is enabled with debug info files ZIP'ed to save space. For
92  # BUILD_FLAVOR != product builds, FDS is always enabled, after all a
93  # debug build without debug info isn't very useful.
94  # The ZIP_DEBUGINFO_FILES option only has meaning when FDS is enabled.
95  #
96  # If you invoke a build with FULL_DEBUG_SYMBOLS=0, then FDS will be
97  # disabled for a BUILD_FLAVOR == product build.
98  #
99  # Note: Use of a different variable name for the FDS override option
100  # versus the FDS enabled check is intentional (FULL_DEBUG_SYMBOLS
101  # versus ENABLE_FULL_DEBUG_SYMBOLS). For auto build systems that pass
102  # in options via environment variables, use of distinct variables
103  # prevents strange behaviours. For example, in a BUILD_FLAVOR !=
104  # product build, the FULL_DEBUG_SYMBOLS environment variable will be
105  # 0, but the ENABLE_FULL_DEBUG_SYMBOLS make variable will be 1. If
106  # the same variable name is used, then different values can be picked
107  # up by different parts of the build. Just to be clear, we only need
108  # two variable names because the incoming option value can be
109  # overridden in some situations, e.g., a BUILD_FLAVOR != product
110  # build.
111
112  # Due to the multiple sub-make processes that occur this logic gets
113  # executed multiple times. We reduce the noise by at least checking that
114  # BUILD_FLAVOR has been set.
115  ifneq ($(BUILD_FLAVOR),)
116    ifeq ($(BUILD_FLAVOR), product)
117      FULL_DEBUG_SYMBOLS ?= 1
118      ENABLE_FULL_DEBUG_SYMBOLS = $(FULL_DEBUG_SYMBOLS)
119    else
120      # debug variants always get Full Debug Symbols (if available)
121      ENABLE_FULL_DEBUG_SYMBOLS = 1
122    endif
123    _JUNK_ := $(shell \
124      echo >&2 "INFO: ENABLE_FULL_DEBUG_SYMBOLS=$(ENABLE_FULL_DEBUG_SYMBOLS)")
125    # since objcopy is optional, we set ZIP_DEBUGINFO_FILES later
126
127    ifeq ($(ENABLE_FULL_DEBUG_SYMBOLS),1)
128      # Default OBJCOPY comes from the SUNWbinutils package:
129      DEF_OBJCOPY=/usr/sfw/bin/gobjcopy
130      OBJCOPY=$(shell test -x $(DEF_OBJCOPY) && echo $(DEF_OBJCOPY))
131      ifneq ($(ALT_OBJCOPY),)
132        _JUNK_ := $(shell echo >&2 "INFO: ALT_OBJCOPY=$(ALT_OBJCOPY)")
133        OBJCOPY=$(shell test -x $(ALT_OBJCOPY) && echo $(ALT_OBJCOPY))
134      endif
135
136      ifneq ($(OBJCOPY),)
137        # OBJCOPY version check:
138        # - version number is last blank separate word on first line
139        # - version number formats that have been seen:
140        #   - <major>.<minor>
141        #   - <major>.<minor>.<micro>
142        #
143        # Full Debug Symbols on Solaris needs version 2.21.1 or newer.
144        #
145        OBJCOPY_VERS_CHK := $(shell \
146          $(OBJCOPY) --version \
147            | sed -n \
148                  -e 's/.* //' \
149                  -e '/^[01]\./b bad' \
150                  -e '/^2\./{' \
151                  -e '  s/^2\.//' \
152                  -e '  /^[0-9]$$/b bad' \
153                  -e '  /^[0-9]\./b bad' \
154                  -e '  /^1[0-9]$$/b bad' \
155                  -e '  /^1[0-9]\./b bad' \
156                  -e '  /^20\./b bad' \
157                  -e '  /^21\.0$$/b bad' \
158                  -e '  /^21\.0\./b bad' \
159                  -e '}' \
160                  -e ':good' \
161                  -e 's/.*/VALID_VERSION/p' \
162                  -e 'q' \
163                  -e ':bad' \
164                  -e 's/.*/BAD_VERSION/p' \
165                  -e 'q' \
166          )
167        ifeq ($(OBJCOPY_VERS_CHK),BAD_VERSION)
168          _JUNK_ := $(shell \
169            echo >&2 "WARNING: $(OBJCOPY) --version info:"; \
170            $(OBJCOPY) --version | sed -n -e 's/^/WARNING: /p' -e 'q' >&2; \
171            echo >&2 "WARNING: an objcopy version of 2.21.1 or newer" \
172              "is needed to create valid .debuginfo files."; \
173            echo >&2 "WARNING: ignoring above objcopy command."; \
174            echo >&2 "WARNING: patch 149063-01 or newer contains the" \
175              "correct Solaris 10 SPARC version."; \
176            echo >&2 "WARNING: patch 149064-01 or newer contains the" \
177              "correct Solaris 10 X86 version."; \
178            echo >&2 "WARNING: Solaris 11 Update 1 contains the" \
179              "correct version."; \
180            )
181          OBJCOPY=
182        endif
183      endif
184
185      ifeq ($(OBJCOPY),)
186        _JUNK_ := $(shell \
187          echo >&2 "INFO: no objcopy cmd found so cannot create .debuginfo files.")
188        ENABLE_FULL_DEBUG_SYMBOLS=0
189        _JUNK_ := $(shell \
190          echo >&2 "INFO: ENABLE_FULL_DEBUG_SYMBOLS=$(ENABLE_FULL_DEBUG_SYMBOLS)")
191      else
192        _JUNK_ := $(shell \
193          echo >&2 "INFO: $(OBJCOPY) cmd found so will create .debuginfo files.")
194
195        # Library stripping policies for .debuginfo configs:
196        #   all_strip - strips everything from the library
197        #   min_strip - strips most stuff from the library; leaves minimum symbols
198        #   no_strip  - does not strip the library at all
199        #
200        # Oracle security policy requires "all_strip". A waiver was granted on
201        # 2011.09.01 that permits using "min_strip" in the Java JDK and Java JRE.
202        #
203        # Currently, STRIP_POLICY is only used when Full Debug Symbols is enabled.
204        #
205        STRIP_POLICY ?= min_strip
206
207        _JUNK_ := $(shell \
208          echo >&2 "INFO: STRIP_POLICY=$(STRIP_POLICY)")
209
210        ZIP_DEBUGINFO_FILES ?= 1
211
212        _JUNK_ := $(shell \
213          echo >&2 "INFO: ZIP_DEBUGINFO_FILES=$(ZIP_DEBUGINFO_FILES)")
214      endif
215    endif # ENABLE_FULL_DEBUG_SYMBOLS=1
216  endif # BUILD_FLAVOR
217endif # JDK_6_OR_EARLIER
218
219JDK_INCLUDE_SUBDIR=solaris
220
221# Library suffix
222LIBRARY_SUFFIX=so
223
224EXPORT_LIST += $(EXPORT_DOCS_DIR)/platform/jvmti/jvmti.html
225
226# client and server subdirectories have symbolic links to ../libjsig.$(LIBRARY_SUFFIX)
227EXPORT_LIST += $(EXPORT_JRE_LIB_ARCH_DIR)/libjsig.$(LIBRARY_SUFFIX)
228ifeq ($(ENABLE_FULL_DEBUG_SYMBOLS),1)
229  ifeq ($(ZIP_DEBUGINFO_FILES),1)
230    EXPORT_LIST += $(EXPORT_JRE_LIB_ARCH_DIR)/libjsig.diz
231  else
232    EXPORT_LIST += $(EXPORT_JRE_LIB_ARCH_DIR)/libjsig.debuginfo
233  endif
234endif
235
236EXPORT_SERVER_DIR = $(EXPORT_JRE_LIB_ARCH_DIR)/server
237EXPORT_CLIENT_DIR = $(EXPORT_JRE_LIB_ARCH_DIR)/client
238
239ifeq ($(JVM_VARIANT_SERVER),true)
240  EXPORT_LIST += $(EXPORT_SERVER_DIR)/Xusage.txt
241  EXPORT_LIST += $(EXPORT_SERVER_DIR)/libjvm.$(LIBRARY_SUFFIX)
242  EXPORT_LIST += $(EXPORT_SERVER_DIR)/libjvm_db.$(LIBRARY_SUFFIX)
243  EXPORT_LIST += $(EXPORT_SERVER_DIR)/libjvm_dtrace.$(LIBRARY_SUFFIX)
244  ifeq ($(ARCH_DATA_MODEL),32)
245    EXPORT_LIST += $(EXPORT_SERVER_DIR)/64/libjvm_db.$(LIBRARY_SUFFIX)
246    EXPORT_LIST += $(EXPORT_SERVER_DIR)/64/libjvm_dtrace.$(LIBRARY_SUFFIX)
247  endif
248  ifeq ($(ENABLE_FULL_DEBUG_SYMBOLS),1)
249    ifeq ($(ZIP_DEBUGINFO_FILES),1)
250      EXPORT_LIST += $(EXPORT_SERVER_DIR)/libjvm.diz
251      EXPORT_LIST += $(EXPORT_SERVER_DIR)/libjvm_db.diz
252      EXPORT_LIST += $(EXPORT_SERVER_DIR)/libjvm_dtrace.diz
253      ifeq ($(ARCH_DATA_MODEL),32)
254        EXPORT_LIST += $(EXPORT_SERVER_DIR)/64/libjvm_db.diz
255        EXPORT_LIST += $(EXPORT_SERVER_DIR)/64/libjvm_dtrace.diz
256      endif
257    else
258      EXPORT_LIST += $(EXPORT_SERVER_DIR)/libjvm.debuginfo
259      EXPORT_LIST += $(EXPORT_SERVER_DIR)/libjvm_db.debuginfo
260      EXPORT_LIST += $(EXPORT_SERVER_DIR)/libjvm_dtrace.debuginfo
261      ifeq ($(ARCH_DATA_MODEL),32)
262        EXPORT_LIST += $(EXPORT_SERVER_DIR)/64/libjvm_db.debuginfo
263        EXPORT_LIST += $(EXPORT_SERVER_DIR)/64/libjvm_dtrace.debuginfo
264      endif
265    endif
266  endif
267endif
268ifeq ($(JVM_VARIANT_CLIENT),true)
269  EXPORT_LIST += $(EXPORT_CLIENT_DIR)/Xusage.txt
270  EXPORT_LIST += $(EXPORT_CLIENT_DIR)/libjvm.$(LIBRARY_SUFFIX)
271  EXPORT_LIST += $(EXPORT_CLIENT_DIR)/libjvm_db.$(LIBRARY_SUFFIX)
272  EXPORT_LIST += $(EXPORT_CLIENT_DIR)/libjvm_dtrace.$(LIBRARY_SUFFIX)
273  ifeq ($(ARCH_DATA_MODEL),32)
274    EXPORT_LIST += $(EXPORT_CLIENT_DIR)/64/libjvm_db.$(LIBRARY_SUFFIX)
275    EXPORT_LIST += $(EXPORT_CLIENT_DIR)/64/libjvm_dtrace.$(LIBRARY_SUFFIX)
276  endif
277  ifeq ($(ENABLE_FULL_DEBUG_SYMBOLS),1)
278    ifeq ($(ZIP_DEBUGINFO_FILES),1)
279      EXPORT_LIST += $(EXPORT_CLIENT_DIR)/libjvm.diz
280      EXPORT_LIST += $(EXPORT_CLIENT_DIR)/libjvm_db.diz
281      EXPORT_LIST += $(EXPORT_CLIENT_DIR)/libjvm_dtrace.diz
282      ifeq ($(ARCH_DATA_MODEL),32)
283        EXPORT_LIST += $(EXPORT_CLIENT_DIR)/64/libjvm_db.diz
284        EXPORT_LIST += $(EXPORT_CLIENT_DIR)/64/libjvm_dtrace.diz
285      endif
286    else
287      EXPORT_LIST += $(EXPORT_CLIENT_DIR)/libjvm.debuginfo
288      EXPORT_LIST += $(EXPORT_CLIENT_DIR)/libjvm_db.debuginfo
289      EXPORT_LIST += $(EXPORT_CLIENT_DIR)/libjvm_dtrace.debuginfo
290      ifeq ($(ARCH_DATA_MODEL),32)
291        EXPORT_LIST += $(EXPORT_CLIENT_DIR)/64/libjvm_db.debuginfo
292        EXPORT_LIST += $(EXPORT_CLIENT_DIR)/64/libjvm_dtrace.debuginfo
293      endif
294    endif
295  endif
296endif
297
298EXPORT_LIST += $(EXPORT_JRE_LIB_ARCH_DIR)/libsaproc.$(LIBRARY_SUFFIX)
299ifeq ($(ENABLE_FULL_DEBUG_SYMBOLS),1)
300  ifeq ($(ZIP_DEBUGINFO_FILES),1)
301    EXPORT_LIST += $(EXPORT_JRE_LIB_ARCH_DIR)/libsaproc.diz
302  else
303    EXPORT_LIST += $(EXPORT_JRE_LIB_ARCH_DIR)/libsaproc.debuginfo
304  endif
305endif
306EXPORT_LIST += $(EXPORT_LIB_DIR)/sa-jdi.jar
307