37437
|
1 |
#
|
|
2 |
# Copyright (c) 2013, 2016, 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 |
# Copy the generated output into well-defined places in the dist directory.
|
|
28 |
|
|
29 |
# This must be the first rule
|
|
30 |
default: all
|
|
31 |
|
|
32 |
include $(SPEC)
|
|
33 |
include MakeBase.gmk
|
|
34 |
|
|
35 |
$(eval $(call IncludeCustomExtension, hotspot, Dist.gmk))
|
|
36 |
|
|
37 |
DIST_OUTPUTDIR := $(HOTSPOT_OUTPUTDIR)/dist
|
|
38 |
|
|
39 |
# Unfortunately, all platforms have different target subdirs.
|
|
40 |
ifeq ($(OPENJDK_TARGET_OS), windows)
|
|
41 |
LIB_SUBDIR := bin
|
|
42 |
else ifeq ($(OPENJDK_TARGET_OS), macosx)
|
|
43 |
LIB_SUBDIR := lib
|
|
44 |
else
|
|
45 |
LIB_SUBDIR := lib$(OPENJDK_TARGET_CPU_LIBDIR)
|
|
46 |
endif
|
|
47 |
|
|
48 |
################################################################################
|
|
49 |
# Functions to setup copying of files for variants
|
|
50 |
|
|
51 |
# Support macro for SetupDistLibFile
|
|
52 |
define macosx_universalize
|
|
53 |
$(MKDIR) -p $(@D)
|
|
54 |
$(LIPO) -create -output $@ $<
|
|
55 |
endef
|
|
56 |
|
|
57 |
################################################################################
|
|
58 |
# Setup make rules to copy a native library and associated data.
|
|
59 |
#
|
|
60 |
# Parameter 1 is the name of the rule. This name is used as variable prefix,
|
|
61 |
# and the targets generated are listed in a variable by that name.
|
|
62 |
#
|
|
63 |
# Remaining parameters are named arguments. These include:
|
|
64 |
# NAME -- The base name of the native library (e.g. 'jvm')
|
|
65 |
# VARIANT -- The variant to copy from
|
|
66 |
# VARIANT_TARGET_DIR -- The variant target sub dir, with trailing slash, optional
|
|
67 |
SetupDistLibFile = $(NamedParamsMacroTemplate)
|
|
68 |
define SetupDistLibFileBody
|
|
69 |
ifneq ($$($1_VARIANT), )
|
|
70 |
$1_SRC_DIR := $$(HOTSPOT_OUTPUTDIR)/variant-$$($1_VARIANT)/lib$$($1_NAME)
|
|
71 |
else
|
|
72 |
$1_SRC_DIR := $$(HOTSPOT_OUTPUTDIR)/lib$$($1_NAME)
|
|
73 |
endif
|
|
74 |
$1_LIB_NAME := $(LIBRARY_PREFIX)$$($1_NAME)
|
|
75 |
$1_TARGET_DIR := $$(DIST_OUTPUTDIR)/$$(LIB_SUBDIR)/$$($1_VARIANT_TARGET_DIR)
|
|
76 |
|
|
77 |
ifeq ($(OPENJDK_TARGET_OS), macosx)
|
|
78 |
# We must use the 'universalize' macro to run lipo on shared libraries, at
|
|
79 |
# least until JDK-8069540 is fixed.
|
|
80 |
$1_MACRO := macosx_universalize
|
|
81 |
endif
|
|
82 |
|
|
83 |
# Copy the the native library.
|
|
84 |
$$(eval $$(call SetupCopyFiles, $1_COPY_LIB, \
|
|
85 |
DEST := $$($1_TARGET_DIR), \
|
|
86 |
MACRO := $$($1_MACRO), \
|
|
87 |
FILES := $$(wildcard \
|
|
88 |
$$($1_SRC_DIR)/$$($1_LIB_NAME)$(SHARED_LIBRARY_SUFFIX)), \
|
|
89 |
))
|
|
90 |
|
|
91 |
TARGETS += $$($1_COPY_LIB)
|
|
92 |
|
|
93 |
# Copy related data (debug symbols, static-build symbols file etc)
|
|
94 |
$$(eval $$(call SetupCopyFiles, $1_COPY_FILES, \
|
|
95 |
DEST := $$($1_TARGET_DIR), \
|
|
96 |
FILES := $$(wildcard \
|
|
97 |
$$(addprefix $$($1_SRC_DIR)/$$($1_LIB_NAME), \
|
|
98 |
.diz .debuginfo .pdb .map .symbols)), \
|
|
99 |
))
|
|
100 |
|
|
101 |
TARGETS += $$($1_COPY_FILES)
|
|
102 |
|
|
103 |
ifeq ($(OPENJDK_TARGET_OS), macosx)
|
|
104 |
# Debug symbols on macosx is a directory, not a single file, per library.
|
|
105 |
$1_DSYM_SRC := $$($1_SRC_DIR)/$$($1_LIB_NAME)$(SHARED_LIBRARY_SUFFIX).dSYM)
|
|
106 |
ifneq ($$(wildcard $$($1_DSYM_SRC)), )
|
|
107 |
$$(eval $$(call SetupCopyFiles, $1_COPY_DSYM_DIR, \
|
|
108 |
DEST := $$($1_TARGET_DIR), \
|
|
109 |
SRC := $$($1_SRC_DIR), \
|
|
110 |
FILES := $$(shell $(FIND) $$($1_DSYM_SRC) -type f), \
|
|
111 |
))
|
|
112 |
TARGETS += $$($1_COPY_DSYM_DIR)
|
|
113 |
endif
|
|
114 |
endif
|
|
115 |
endef
|
|
116 |
|
|
117 |
################################################################################
|
|
118 |
# Copy common files, which are independent on the jvm variant(s) being built.
|
|
119 |
# For files that were generated during the build, we assume all versions of
|
|
120 |
# these files are identical, and just pick one arbitrarily to use as source.
|
|
121 |
|
|
122 |
ANY_JVM_VARIANT := $(firstword $(JVM_VARIANTS))
|
|
123 |
JVM_VARIANT_OUTPUTDIR := $(HOTSPOT_OUTPUTDIR)/variant-$(ANY_JVM_VARIANT)
|
|
124 |
|
|
125 |
### Copy platform-independent .h files
|
|
126 |
INCLUDE_FILES_SRC_DIR := $(HOTSPOT_TOPDIR)/src/share/vm
|
|
127 |
$(eval $(call SetupCopyFiles, COPY_INCLUDE, \
|
|
128 |
SRC := $(INCLUDE_FILES_SRC_DIR), \
|
|
129 |
DEST := $(DIST_OUTPUTDIR)/include, \
|
|
130 |
FLATTEN := true, \
|
|
131 |
FILES := $(INCLUDE_FILES_SRC_DIR)/prims/jni.h \
|
|
132 |
$(INCLUDE_FILES_SRC_DIR)/code/jvmticmlr.h \
|
|
133 |
$(INCLUDE_FILES_SRC_DIR)/services/jmm.h))
|
|
134 |
|
|
135 |
TARGETS += $(COPY_INCLUDE)
|
|
136 |
|
|
137 |
### Copy jni_md.h
|
|
138 |
|
|
139 |
# This might have been defined in a custom extension
|
|
140 |
ifeq ($(JNI_MD_H_SRC), )
|
|
141 |
JNI_MD_H_SRC := $(HOTSPOT_TOPDIR)/src/cpu/$(HOTSPOT_TARGET_CPU_ARCH)/vm/jni_$(HOTSPOT_TARGET_CPU_ARCH).h
|
|
142 |
endif
|
|
143 |
|
|
144 |
ifeq ($(OPENJDK_TARGET_OS), macosx)
|
|
145 |
# NOTE: This should most likely be darwin, but the old hotspot build uses bsd
|
|
146 |
JNI_MD_SUBDIR := bsd
|
|
147 |
else ifeq ($(OPENJDK_TARGET_OS), windows)
|
|
148 |
JNI_MD_SUBDIR := win32
|
|
149 |
else
|
|
150 |
JNI_MD_SUBDIR := $(OPENJDK_TARGET_OS)
|
|
151 |
endif
|
|
152 |
|
|
153 |
# SetupCopyFiles is not used here since it's non-trivial to copy a single
|
|
154 |
# file with a different target name.
|
|
155 |
$(DIST_OUTPUTDIR)/include/$(JNI_MD_SUBDIR)/jni_md.h: $(JNI_MD_H_SRC)
|
|
156 |
$(call LogInfo, Copying hotspot/dist/include/$(JNI_MD_SUBDIR)/jni_md.h)
|
|
157 |
$(install-file)
|
|
158 |
|
|
159 |
TARGETS += $(DIST_OUTPUTDIR)/include/$(JNI_MD_SUBDIR)/jni_md.h
|
|
160 |
|
|
161 |
$(eval $(call SetupCopyFiles, COPY_JVMTI_H, \
|
|
162 |
DEST := $(DIST_OUTPUTDIR)/include, \
|
|
163 |
FLATTEN := true, \
|
|
164 |
FILES := $(JVM_VARIANT_OUTPUTDIR)/gensrc/jvmtifiles/jvmti.h))
|
|
165 |
|
|
166 |
TARGETS += $(COPY_JVMTI_H)
|
|
167 |
|
|
168 |
# NOTE: In the old build, this file was not copied on Windows.
|
|
169 |
ifneq ($(OPENJDK_TARGET_OS), windows)
|
|
170 |
$(eval $(call SetupCopyFiles, COPY_JVMTI_HTML, \
|
|
171 |
DEST := $(DIST_OUTPUTDIR)/docs/platform/jvmti, \
|
|
172 |
FILES := $(JVM_VARIANT_OUTPUTDIR)/gensrc/jvmtifiles/jvmti.html))
|
|
173 |
endif
|
|
174 |
|
|
175 |
TARGETS += $(COPY_JVMTI_HTML)
|
|
176 |
|
|
177 |
ifeq ($(OPENJDK_TARGET_OS), windows)
|
|
178 |
$(eval $(call SetupCopyFiles, COPY_JVM_LIB, \
|
|
179 |
DEST := $(DIST_OUTPUTDIR)/lib, \
|
|
180 |
FILES :=$(JVM_VARIANT_OUTPUTDIR)/libjvm/objs/jvm.lib))
|
|
181 |
|
|
182 |
TARGETS += $(COPY_JVM_LIB)
|
|
183 |
endif
|
|
184 |
|
|
185 |
# Copy libjsig, if it exists
|
|
186 |
$(eval $(call SetupDistLibFile, DIST_jsig, \
|
|
187 |
NAME := jsig, \
|
|
188 |
))
|
|
189 |
|
|
190 |
################################################################################
|
|
191 |
# Copy variant-specific files
|
|
192 |
|
|
193 |
# Setup make rules to copy a single variant to dist.
|
|
194 |
# $1: The name of the variant
|
|
195 |
define SetupDistForVariant
|
|
196 |
ifneq ($$(filter client minimal, $1), )
|
|
197 |
VARIANT_TARGET_DIR := $1
|
|
198 |
else
|
|
199 |
# Use 'server' as default target directory name for all other variants.
|
|
200 |
VARIANT_TARGET_DIR := server
|
|
201 |
endif
|
|
202 |
|
|
203 |
$$(eval $$(call SetupDistLibFile, DIST_$(strip $1)_jvm, \
|
|
204 |
NAME := jvm, \
|
|
205 |
VARIANT := $1, \
|
|
206 |
VARIANT_TARGET_DIR := $$(VARIANT_TARGET_DIR)/, \
|
|
207 |
))
|
|
208 |
|
|
209 |
# Copy the dtrace libraries, if they exist
|
|
210 |
$$(eval $$(call SetupDistLibFile, DIST_$(strip $1)_jvm_db, \
|
|
211 |
NAME := jvm_db, \
|
|
212 |
VARIANT := $1, \
|
|
213 |
VARIANT_TARGET_DIR := $$(VARIANT_TARGET_DIR)/, \
|
|
214 |
))
|
|
215 |
|
|
216 |
$$(eval $$(call SetupDistLibFile, DIST_$(strip $1)_jvm_dtrace, \
|
|
217 |
NAME := jvm_dtrace, \
|
|
218 |
VARIANT := $1, \
|
|
219 |
VARIANT_TARGET_DIR := $$(VARIANT_TARGET_DIR)/, \
|
|
220 |
))
|
|
221 |
|
|
222 |
# Copy the Xusage.txt file
|
|
223 |
$$(eval $$(call SetupCopyFiles, DIST_$(strip $1)_Xusage, \
|
|
224 |
DEST := $$(DIST_OUTPUTDIR)/$$(LIB_SUBDIR)/$(strip $1), \
|
|
225 |
FILES := $$(HOTSPOT_OUTPUTDIR)/variant-$(strip $1)/support/misc/Xusage.txt, \
|
|
226 |
))
|
|
227 |
|
|
228 |
TARGETS += $$(DIST_$(strip $1)_Xusage)
|
|
229 |
endef
|
|
230 |
|
|
231 |
$(foreach variant, $(JVM_VARIANTS), \
|
|
232 |
$(eval $(call SetupDistForVariant, $(variant))) \
|
|
233 |
)
|
|
234 |
|
|
235 |
################################################################################
|
|
236 |
|
|
237 |
all: $(TARGETS)
|
|
238 |
|
|
239 |
.PHONY: all
|