1 #
   2 # Copyright 1998-2007 Sun Microsystems, Inc.  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 Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
  20 # CA 95054 USA or visit www.sun.com if you need additional information or
  21 # have any questions.
  22 #  
  23 #
  24 
  25 # Rules to build JVM and related libraries, included from vm.make in the build
  26 # directory.
  27 
  28 # Common build rules.
  29 MAKEFILES_DIR=$(GAMMADIR)/build/$(Platform_os_family)/makefiles
  30 include $(MAKEFILES_DIR)/rules.make
  31 
  32 default: build
  33 
  34 #----------------------------------------------------------------------
  35 # Defs
  36 
  37 GENERATED     = ../generated
  38 
  39 # read a generated file defining the set of .o's and the .o .h dependencies
  40 include $(GENERATED)/Dependencies
  41 
  42 # read machine-specific adjustments (%%% should do this via buildtree.make?)
  43 include $(MAKEFILES_DIR)/$(BUILDARCH).make
  44 
  45 # set VPATH so make knows where to look for source files
  46 # Src_Dirs is everything in src/share/vm/*, plus the right os/*/vm and cpu/*/vm
  47 # The incls directory contains generated header file lists for inclusion.
  48 # The adfiles directory contains ad_<arch>.[ch]pp.
  49 # The jvmtifiles directory contains jvmti*.[ch]pp
  50 Src_Dirs_V = $(GENERATED)/adfiles $(GENERATED)/jvmtifiles ${Src_Dirs} $(GENERATED)/incls
  51 VPATH    += $(Src_Dirs_V:%=%:)
  52 
  53 # set INCLUDES for C preprocessor
  54 Src_Dirs_I = $(GENERATED)/adfiles $(GENERATED)/jvmtifiles ${Src_Dirs} $(GENERATED) 
  55 INCLUDES += $(Src_Dirs_I:%=-I%)
  56 
  57 ifeq (${VERSION}, debug)
  58   SYMFLAG = -g
  59 else
  60   SYMFLAG =
  61 endif
  62 
  63 # The following variables are defined in the generated flags.make file.
  64 BUILD_VERSION = -DHOTSPOT_RELEASE_VERSION="\"$(HS_BUILD_VER)\""
  65 JRE_VERSION   = -DJRE_RELEASE_VERSION="\"$(JRE_RELEASE_VER)\""
  66 HS_LIB_ARCH   = -DHOTSPOT_LIB_ARCH=\"$(LIBARCH)\"
  67 BUILD_TARGET  = -DHOTSPOT_BUILD_TARGET="\"$(TARGET)\""
  68 BUILD_USER    = -DHOTSPOT_BUILD_USER="\"$(HOTSPOT_BUILD_USER)\""
  69 VM_DISTRO     = -DHOTSPOT_VM_DISTRO="\"$(HOTSPOT_VM_DISTRO)\""
  70 
  71 CPPFLAGS =           \
  72   ${SYSDEFS}         \
  73   ${INCLUDES}        \
  74   ${BUILD_VERSION}   \
  75   ${BUILD_TARGET}    \
  76   ${BUILD_USER}      \
  77   ${HS_LIB_ARCH}     \
  78   ${JRE_VERSION}     \
  79   ${VM_DISTRO}
  80 
  81 # CFLAGS_WARN holds compiler options to suppress/enable warnings.
  82 CFLAGS += $(CFLAGS_WARN)
  83 
  84 # Do not use C++ exception handling
  85 CFLAGS += $(CFLAGS/NOEX)
  86 
  87 # Extra flags from gnumake's invocation or environment
  88 CFLAGS += $(EXTRA_CFLAGS)
  89 
  90 # Math Library (libm.so), do not use -lm.
  91 #    There might be two versions of libm.so on the build system:
  92 #    libm.so.1 and libm.so.2, and we want libm.so.1.
  93 #    Depending on the Solaris release being used to build with,
  94 #    /usr/lib/libm.so could point at a libm.so.2, so we are
  95 #    explicit here so that the libjvm.so you have built will work on an
  96 #    older Solaris release that might not have libm.so.2.
  97 #    This is a critical factor in allowing builds on Solaris 10 or newer
  98 #    to run on Solaris 8 or 9.
  99 #
 100 LIBM=/usr/lib$(ISA_DIR)/libm.so.1
 101 
 102 ifeq ("${Platform_compiler}", "sparcWorks")
 103 # The whole megilla:
 104 ifeq ($(shell expr $(COMPILER_REV) \>= 5.5), 1)
 105 # Old Comment: List the libraries in the order the compiler was designed for
 106 # Not sure what the 'designed for' comment is referring too above.
 107 #   The order may not be too significant anymore, but I have placed this
 108 #   older libm before libCrun, just to make sure it's found and used first.
 109 LIBS += -lsocket -lsched -ldl $(LIBM) -lCrun -lthread -ldoor -lc
 110 else
 111 LIBS += -ldl -lthread -lsocket $(LIBM) -lsched -ldoor
 112 endif
 113 else
 114 LIBS += -lsocket -lsched -ldl $(LIBM) -lthread -lc
 115 endif
 116 
 117 # By default, link the *.o into the library, not the executable.
 118 LINK_INTO$(LINK_INTO) = LIBJVM
 119 
 120 JDK_LIBDIR = $(JAVA_HOME)/jre/lib/$(LIBARCH)
 121 
 122 #----------------------------------------------------------------------
 123 # jvm_db & dtrace
 124 include $(MAKEFILES_DIR)/dtrace.make
 125 
 126 #----------------------------------------------------------------------
 127 # JVM
 128 
 129 JVM    = jvm$(G_SUFFIX)
 130 LIBJVM = lib$(JVM).so
 131 
 132 JVM_OBJ_FILES = $(Obj_Files) $(DTRACE_OBJS)
 133 
 134 vm_version.o: $(filter-out vm_version.o,$(JVM_OBJ_FILES))
 135 
 136 mapfile : $(MAPFILE) $(MAPFILE_DTRACE_OPT)
 137         rm -f $@
 138         cat $^ > $@
 139 
 140 mapfile_reorder : mapfile $(MAPFILE_DTRACE_OPT) $(REORDERFILE)
 141         rm -f $@
 142         cat $^ > $@
 143 
 144 ifeq ($(LINK_INTO),AOUT)
 145   LIBJVM.o                 =
 146   LIBJVM_MAPFILE           =
 147   LIBS_VM                  = $(LIBS)
 148 else
 149   LIBJVM.o                 = $(JVM_OBJ_FILES)
 150   LIBJVM_MAPFILE$(LDNOMAP) = mapfile_reorder
 151   LFLAGS_VM$(LDNOMAP)      += $(MAPFLAG:FILENAME=$(LIBJVM_MAPFILE))
 152   LFLAGS_VM                += $(SONAMEFLAG:SONAME=$(LIBJVM))
 153 ifndef USE_GCC
 154   LIBS_VM                  = $(LIBS)
 155 else
 156   # JVM is statically linked with libgcc[_s] and libstdc++; this is needed to
 157   # get around library dependency and compatibility issues. Must use gcc not
 158   # g++ to link.
 159   LFLAGS_VM                += $(STATIC_LIBGCC)
 160   LIBS_VM                  += $(STATIC_STDCXX) $(LIBS)
 161 endif
 162 endif
 163 
 164 ifdef USE_GCC
 165 LINK_VM = $(LINK_LIB.c)
 166 else
 167 LINK_VM = $(LINK_LIB.CC)
 168 endif
 169 # making the library:
 170 $(LIBJVM): $(LIBJVM.o) $(LIBJVM_MAPFILE) 
 171         $(QUIETLY) \
 172         case "$(CFLAGS_BROWSE)" in \
 173         -sbfast|-xsbfast) \
 174             ;; \
 175         *) \
 176             echo Linking vm...;                                                  \
 177             $(LINK_LIB.CC/PRE_HOOK)                                              \
 178             $(LINK_VM) $(LFLAGS_VM) -o $@ $(LIBJVM.o) $(LIBS_VM);                \
 179             $(LINK_LIB.CC/POST_HOOK)                                             \
 180             rm -f $@.1; ln -s $@ $@.1;                                           \
 181             ;; \
 182         esac
 183 
 184 DEST_JVM = $(JDK_LIBDIR)/$(VM_SUBDIR)/$(LIBJVM)
 185 
 186 install_jvm: $(LIBJVM)
 187         @echo "Copying $(LIBJVM) to $(DEST_JVM)"
 188         $(QUIETLY) cp -f $(LIBJVM) $(DEST_JVM) && echo "Done"
 189 
 190 #----------------------------------------------------------------------
 191 # Other files
 192 
 193 # Gamma launcher
 194 include $(MAKEFILES_DIR)/launcher.make
 195 
 196 # Signal interposition library
 197 include $(MAKEFILES_DIR)/jsig.make
 198 
 199 # Serviceability agent
 200 include $(MAKEFILES_DIR)/saproc.make
 201 
 202 #----------------------------------------------------------------------
 203 
 204 build: $(LIBJVM) $(LAUNCHER) $(LIBJSIG) $(LIBJVM_DB) $(LIBJVM_DTRACE) checkAndBuildSA dtraceCheck
 205 
 206 install: install_jvm install_jsig install_saproc
 207 
 208 .PHONY: default build install install_jvm