Path: blob/aarch64-shenandoah-jdk8u272-b10/hotspot/make/solaris/makefiles/vm.make
32285 views
#1# Copyright (c) 1998, 2019, Oracle and/or its affiliates. All rights reserved.2# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.3#4# This code is free software; you can redistribute it and/or modify it5# under the terms of the GNU General Public License version 2 only, as6# published by the Free Software Foundation.7#8# This code is distributed in the hope that it will be useful, but WITHOUT9# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or10# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License11# version 2 for more details (a copy is included in the LICENSE file that12# accompanied this code).13#14# You should have received a copy of the GNU General Public License version15# 2 along with this work; if not, write to the Free Software Foundation,16# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.17#18# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA19# or visit www.oracle.com if you need additional information or have any20# questions.21#22#2324# Rules to build JVM and related libraries, included from vm.make in the build25# directory.2627# Common build rules.28MAKEFILES_DIR=$(GAMMADIR)/make/$(Platform_os_family)/makefiles29include $(MAKEFILES_DIR)/rules.make30include $(GAMMADIR)/make/altsrc.make3132default: build3334#----------------------------------------------------------------------35# Defs3637GENERATED = ../generated38DEP_DIR = $(GENERATED)/dependencies3940# reads the generated files defining the set of .o's and the .o .h dependencies41-include $(DEP_DIR)/*.d4243# read machine-specific adjustments (%%% should do this via buildtree.make?)44include $(MAKEFILES_DIR)/$(BUILDARCH).make4546# set VPATH so make knows where to look for source files47# Src_Dirs_V is everything in src/share/vm/*, plus the right os/*/vm and cpu/*/vm48# The adfiles directory contains ad_<arch>.[ch]pp.49# The jvmtifiles directory contains jvmti*.[ch]pp50Src_Dirs_V += $(GENERATED)/adfiles $(GENERATED)/jvmtifiles $(GENERATED)/jfrfiles51VPATH += $(Src_Dirs_V:%=%:)5253# set INCLUDES for C preprocessor54Src_Dirs_I += $(GENERATED)55INCLUDES += $(Src_Dirs_I:%=-I%)5657# SYMFLAG is used by {dtrace,jsig,saproc}.make.58ifeq ($(ENABLE_FULL_DEBUG_SYMBOLS),1)59# always build with debug info when we can create .debuginfo files60# and disable 'lazy debug info' so the .so has everything.61SYMFLAG = -g -xs62else63ifeq (${VERSION}, debug)64SYMFLAG = -g65else66SYMFLAG =67endif68endif6970# The following variables are defined in the generated flags.make file.71BUILD_VERSION = -DHOTSPOT_RELEASE_VERSION="\"$(HS_BUILD_VER)\""72JRE_VERSION = -DJRE_RELEASE_VERSION="\"$(JRE_RELEASE_VER)\""73HS_LIB_ARCH = -DHOTSPOT_LIB_ARCH=\"$(LIBARCH)\"74BUILD_TARGET = -DHOTSPOT_BUILD_TARGET="\"$(TARGET)\""75BUILD_USER = -DHOTSPOT_BUILD_USER="\"$(HOTSPOT_BUILD_USER)\""76VM_DISTRO = -DHOTSPOT_VM_DISTRO="\"$(HOTSPOT_VM_DISTRO)\""7778CXXFLAGS = \79${SYSDEFS} \80${INCLUDES} \81${BUILD_VERSION} \82${BUILD_TARGET} \83${BUILD_USER} \84${HS_LIB_ARCH} \85${VM_DISTRO}8687# This is VERY important! The version define must only be supplied to vm_version.o88# If not, ccache will not re-use the cache at all, since the version string might contain89# a time and date.90CXXFLAGS/vm_version.o += ${JRE_VERSION} ${VERSION_CFLAGS}91CXXFLAGS/arguments.o += ${VERSION_CFLAGS}9293CXXFLAGS/BYFILE = $(CXXFLAGS/$@)9495# File specific flags96CXXFLAGS += $(CXXFLAGS/BYFILE)9798# Large File Support99ifneq ($(LP64), 1)100CXXFLAGS/ostream.o += -D_FILE_OFFSET_BITS=64101endif # ifneq ($(LP64), 1)102103# CFLAGS_WARN holds compiler options to suppress/enable warnings.104CFLAGS += $(CFLAGS_WARN)105106# Do not use C++ exception handling107CFLAGS += $(CFLAGS/NOEX)108109# Extra flags from gnumake's invocation or environment110CFLAGS += $(EXTRA_CFLAGS)111ASFLAGS += $(EXTRA_ASFLAGS)112113# Math Library (libm.so), do not use -lm.114# There might be two versions of libm.so on the build system:115# libm.so.1 and libm.so.2, and we want libm.so.1.116# Depending on the Solaris release being used to build with,117# /usr/lib/libm.so could point at a libm.so.2, so we are118# explicit here so that the libjvm.so you have built will work on an119# older Solaris release that might not have libm.so.2.120# This is a critical factor in allowing builds on Solaris 10 or newer121# to run on Solaris 8 or 9.122#123LIBM=/usr/lib$(ISA_DIR)/libm.so.1124125ifeq ("${Platform_compiler}", "sparcWorks")126# The whole megilla:127ifeq ($(shell expr $(COMPILER_REV_NUMERIC) \>= 505), 1)128# Old Comment: List the libraries in the order the compiler was designed for129# Not sure what the 'designed for' comment is referring too above.130# The order may not be too significant anymore, but I have placed this131# older libm before libCrun, just to make sure it's found and used first.132LIBS += -lsocket -lsched -ldl $(LIBM) -lCrun -lthread -ldoor -lc -ldemangle133else134ifeq ($(COMPILER_REV_NUMERIC), 502)135# SC6.1 has it's own libm.so: specifying anything else provokes a name conflict.136LIBS += -ldl -lthread -lsocket -lm -lsched -ldoor -ldemangle137else138LIBS += -ldl -lthread -lsocket $(LIBM) -lsched -ldoor -ldemangle139endif # 502140endif # 505141else142LIBS += -lsocket -lsched -ldl $(LIBM) -lthread -lc -ldemangle143endif # sparcWorks144145LIBS += -lkstat146147LIBS += -lrt148149# By default, link the *.o into the library, not the executable.150LINK_INTO$(LINK_INTO) = LIBJVM151152JDK_LIBDIR = $(JAVA_HOME)/jre/lib/$(LIBARCH)153154#----------------------------------------------------------------------155# jvm_db & dtrace156include $(MAKEFILES_DIR)/dtrace.make157158#----------------------------------------------------------------------159# JVM160161JVM = jvm162LIBJVM = lib$(JVM).so163164LIBJVM_DEBUGINFO = lib$(JVM).debuginfo165LIBJVM_DIZ = lib$(JVM).diz166ifneq ($(ENABLE_JFR),true)167EXCLUDE_JFR_PATHS:= -o -name jfr -prune168endif169SPECIAL_PATHS:=adlc c1 dist gc_implementation opto shark libadt170171SOURCE_PATHS=\172$(shell find $(HS_COMMON_SRC)/share/vm/* -type d \! \173\( -name DUMMY $(foreach dir,$(SPECIAL_PATHS),-o -name $(dir)) $(EXCLUDE_JFR_PATHS) \))174SOURCE_PATHS+=$(HS_COMMON_SRC)/os/$(Platform_os_family)/vm175SOURCE_PATHS+=$(HS_COMMON_SRC)/os/posix/vm176SOURCE_PATHS+=$(HS_COMMON_SRC)/cpu/$(Platform_arch)/vm177SOURCE_PATHS+=$(HS_COMMON_SRC)/os_cpu/$(Platform_os_arch)/vm178179CORE_PATHS=$(foreach path,$(SOURCE_PATHS),$(call altsrc,$(path)) $(path))180CORE_PATHS+=$(GENERATED)/jvmtifiles $(GENERATED)/jfrfiles181182COMPILER1_PATHS := $(call altsrc,$(HS_COMMON_SRC)/share/vm/c1)183COMPILER1_PATHS += $(HS_COMMON_SRC)/share/vm/c1184185COMPILER2_PATHS := $(call altsrc,$(HS_COMMON_SRC)/share/vm/opto)186COMPILER2_PATHS += $(call altsrc,$(HS_COMMON_SRC)/share/vm/libadt)187COMPILER2_PATHS += $(HS_COMMON_SRC)/share/vm/opto188COMPILER2_PATHS += $(HS_COMMON_SRC)/share/vm/libadt189COMPILER2_PATHS += $(GENERATED)/adfiles190191# Include dirs per type.192Src_Dirs/CORE := $(CORE_PATHS)193Src_Dirs/COMPILER1 := $(CORE_PATHS) $(COMPILER1_PATHS)194Src_Dirs/COMPILER2 := $(CORE_PATHS) $(COMPILER2_PATHS)195Src_Dirs/TIERED := $(CORE_PATHS) $(COMPILER1_PATHS) $(COMPILER2_PATHS)196Src_Dirs/ZERO := $(CORE_PATHS)197Src_Dirs/SHARK := $(CORE_PATHS)198Src_Dirs := $(Src_Dirs/$(TYPE))199200COMPILER2_SPECIFIC_FILES := opto libadt bcEscapeAnalyzer.cpp c2_\* runtime_\*201COMPILER1_SPECIFIC_FILES := c1_\*202SHARK_SPECIFIC_FILES := shark203ZERO_SPECIFIC_FILES := zero204205# Always exclude these.206Src_Files_EXCLUDE += dtrace jsig.c jvmtiEnvRecommended.cpp jvmtiEnvStub.cpp207208# Exclude per type.209Src_Files_EXCLUDE/CORE := $(COMPILER1_SPECIFIC_FILES) $(COMPILER2_SPECIFIC_FILES) $(ZERO_SPECIFIC_FILES) $(SHARK_SPECIFIC_FILES) ciTypeFlow.cpp210Src_Files_EXCLUDE/COMPILER1 := $(COMPILER2_SPECIFIC_FILES) $(ZERO_SPECIFIC_FILES) $(SHARK_SPECIFIC_FILES) ciTypeFlow.cpp211Src_Files_EXCLUDE/COMPILER2 := $(COMPILER1_SPECIFIC_FILES) $(ZERO_SPECIFIC_FILES) $(SHARK_SPECIFIC_FILES)212Src_Files_EXCLUDE/TIERED := $(ZERO_SPECIFIC_FILES) $(SHARK_SPECIFIC_FILES)213Src_Files_EXCLUDE/ZERO := $(COMPILER1_SPECIFIC_FILES) $(COMPILER2_SPECIFIC_FILES) $(SHARK_SPECIFIC_FILES) ciTypeFlow.cpp214Src_Files_EXCLUDE/SHARK := $(COMPILER1_SPECIFIC_FILES) $(COMPILER2_SPECIFIC_FILES) $(ZERO_SPECIFIC_FILES)215216Src_Files_EXCLUDE += $(Src_Files_EXCLUDE/$(TYPE))217218# Special handling of arch model.219ifeq ($(Platform_arch_model), x86_32)220Src_Files_EXCLUDE += \*x86_64\*221endif222ifeq ($(Platform_arch_model), x86_64)223Src_Files_EXCLUDE += \*x86_32\*224endif225226# Locate all source files in the given directory, excluding files in Src_Files_EXCLUDE.227define findsrc228$(notdir $(shell find $(1)/. ! -name . -prune \229-a \( -name \*.c -o -name \*.cpp -o -name \*.s \) \230-a ! \( -name DUMMY $(addprefix -o -name ,$(Src_Files_EXCLUDE)) \)))231endef232233Src_Files := $(foreach e,$(Src_Dirs),$(call findsrc,$(e)))234235Obj_Files = $(sort $(addsuffix .o,$(basename $(Src_Files))))236237JVM_OBJ_FILES = $(Obj_Files) $(DTRACE_OBJS)238239vm_version.o: $(filter-out vm_version.o,$(JVM_OBJ_FILES))240241mapfile : $(MAPFILE) $(MAPFILE_DTRACE_OPT) vm.def mapfile_ext242rm -f $@243cat $(MAPFILE) $(MAPFILE_DTRACE_OPT) \244| $(NAWK) '{ \245if ($$0 ~ "INSERT VTABLE SYMBOLS HERE") { \246system ("cat mapfile_ext"); \247system ("cat vm.def"); \248} else { \249print $$0; \250} \251}' > $@252253mapfile_extended : mapfile $(MAPFILE_DTRACE_OPT)254rm -f $@255cat $^ > $@256257vm.def: $(Obj_Files)258sh $(GAMMADIR)/make/solaris/makefiles/build_vm_def.sh *.o > $@259260mapfile_ext:261rm -f $@262touch $@263if [ -f $(HS_ALT_MAKE)/solaris/makefiles/mapfile-ext ]; then \264cat $(HS_ALT_MAKE)/solaris/makefiles/mapfile-ext > $@; \265fi266267ifeq ($(LINK_INTO),AOUT)268LIBJVM.o =269LIBJVM_MAPFILE =270LIBS_VM = $(LIBS)271else272LIBJVM.o = $(JVM_OBJ_FILES)273LIBJVM_MAPFILE$(LDNOMAP) = mapfile_extended274LFLAGS_VM$(LDNOMAP) += $(MAPFLAG:FILENAME=$(LIBJVM_MAPFILE))275LFLAGS_VM += $(SONAMEFLAG:SONAME=$(LIBJVM))276ifndef USE_GCC277LIBS_VM = $(LIBS)278else279# JVM is statically linked with libgcc[_s] and libstdc++; this is needed to280# get around library dependency and compatibility issues. Must use gcc not281# g++ to link.282LFLAGS_VM += $(STATIC_LIBGCC)283LIBS_VM += $(STATIC_STDCXX) $(LIBS)284endif285endif286287ifdef USE_GCC288LINK_VM = $(LINK_LIB.CC)289else290LINK_VM = $(LINK_LIB.CXX)291endif292# making the library:293$(LIBJVM): $(LIBJVM.o) $(LIBJVM_MAPFILE)294ifeq ($(filter -sbfast -xsbfast, $(CFLAGS_BROWSE)),)295@echo Linking vm...296$(QUIETLY) $(LINK_LIB.CXX/PRE_HOOK)297$(QUIETLY) $(LINK_VM) $(LFLAGS_VM) -o $@ $(sort $(LIBJVM.o)) $(LIBS_VM)298$(QUIETLY) $(LINK_LIB.CXX/POST_HOOK)299$(QUIETLY) rm -f $@.1 && ln -s $@ $@.1300ifeq ($(ENABLE_FULL_DEBUG_SYMBOLS),1)301$(QUIETLY) $(OBJCOPY) --only-keep-debug $@ $(LIBJVM_DEBUGINFO)302$(QUIETLY) $(OBJCOPY) --add-gnu-debuglink=$(LIBJVM_DEBUGINFO) $@303ifeq ($(STRIP_POLICY),all_strip)304$(QUIETLY) $(STRIP) $@305else306ifeq ($(STRIP_POLICY),min_strip)307$(QUIETLY) $(STRIP) -x $@308# implied else here is no stripping at all309endif310endif311ifeq ($(ZIP_DEBUGINFO_FILES),1)312$(ZIPEXE) -q -y $(LIBJVM_DIZ) $(LIBJVM_DEBUGINFO)313$(RM) $(LIBJVM_DEBUGINFO)314endif315endif316endif # filter -sbfast -xsbfast317318319DEST_SUBDIR = $(JDK_LIBDIR)/$(VM_SUBDIR)320DEST_JVM = $(DEST_SUBDIR)/$(LIBJVM)321DEST_JVM_DEBUGINFO = $(DEST_SUBDIR)/$(LIBJVM_DEBUGINFO)322DEST_JVM_DIZ = $(DEST_SUBDIR)/$(LIBJVM_DIZ)323324install_jvm: $(LIBJVM)325@echo "Copying $(LIBJVM) to $(DEST_JVM)"326$(QUIETLY) test -f $(LIBJVM_DEBUGINFO) && \327cp -f $(LIBJVM_DEBUGINFO) $(DEST_JVM_DEBUGINFO)328$(QUIETLY) test -f $(LIBJVM_DIZ) && \329cp -f $(LIBJVM_DIZ) $(DEST_JVM_DIZ)330$(QUIETLY) cp -f $(LIBJVM) $(DEST_JVM) && echo "Done"331332#----------------------------------------------------------------------333# Other files334335# Signal interposition library336include $(MAKEFILES_DIR)/jsig.make337338# Serviceability agent339include $(MAKEFILES_DIR)/saproc.make340341#----------------------------------------------------------------------342343build: $(LIBJVM) $(LAUNCHER) $(LIBJSIG) $(LIBJVM_DB) $(LIBJVM_DTRACE) $(BUILDLIBSAPROC) dtraceCheck344345install: install_jvm install_jsig install_saproc346347.PHONY: default build install install_jvm348349350