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