125 LIBS += -lm 126 127 ifeq ($(USE_CLANG),) 128 LIBS += -pthread 129 endif 130 131 # By default, link the *.o into the library, not the executable. 132 LINK_INTO$(LINK_INTO) = LIBJVM 133 134 JDK_LIBDIR = $(JAVA_HOME)/lib/$(LIBARCH) 135 136 #---------------------------------------------------------------------- 137 # jvm_db & dtrace 138 include $(MAKEFILES_DIR)/dtrace.make 139 140 #---------------------------------------------------------------------- 141 # JVM 142 143 JVM = jvm 144 ifeq ($(OS_VENDOR), Darwin) 145 LIBJVM = lib$(JVM).dylib 146 CFLAGS += -D_XOPEN_SOURCE -D_DARWIN_C_SOURCE 147 148 LIBJVM_DEBUGINFO = lib$(JVM).dylib.dSYM 149 LIBJVM_DIZ = lib$(JVM).diz 150 else 151 LIBJVM = lib$(JVM).so 152 153 LIBJVM_DEBUGINFO = lib$(JVM).debuginfo 154 LIBJVM_DIZ = lib$(JVM).diz 155 endif 156 157 SPECIAL_PATHS:=adlc c1 gc opto shark libadt 158 159 SOURCE_PATHS=\ 160 $(shell find $(HS_COMMON_SRC)/share/vm/* -type d \! \ 161 \( -name DUMMY $(foreach dir,$(SPECIAL_PATHS),-o -name $(dir)) \)) 162 SOURCE_PATHS+=$(HS_COMMON_SRC)/os/$(Platform_os_family)/vm 163 SOURCE_PATHS+=$(HS_COMMON_SRC)/os/posix/vm 164 SOURCE_PATHS+=$(HS_COMMON_SRC)/cpu/$(Platform_arch)/vm 165 SOURCE_PATHS+=$(HS_COMMON_SRC)/os_cpu/$(Platform_os_arch)/vm 166 167 CORE_PATHS=$(foreach path,$(SOURCE_PATHS),$(call altsrc,$(path)) $(path)) 168 CORE_PATHS+=$(GENERATED)/jvmtifiles $(GENERATED)/tracefiles 244 # For Darwin: add _ prefix and remove trailing ; 245 mapfile_extra: $(MAPFILE_SHARE) $(MAPFILE_EXT) 246 rm -f $@ 247 ifeq ($(OS_VENDOR), Darwin) 248 cat $(MAPFILE_SHARE) $(MAPFILE_EXT) | \ 249 sed -e 's/#.*//g' -e 's/[ ]*//g' -e 's/;//g' | \ 250 awk '{ if ($$0 ~ ".") { print "\t\t_" $$0 } }' \ 251 > $@ 252 else 253 cat $(MAPFILE_SHARE) $(MAPFILE_EXT) > $@ 254 endif 255 256 mapfile : $(MAPFILE) mapfile_extra vm.def 257 rm -f $@ 258 awk '{ if ($$0 ~ "INSERT VTABLE SYMBOLS HERE") \ 259 { system ("cat mapfile_extra vm.def"); } \ 260 else \ 261 { print $$0 } \ 262 }' > $@ < $(MAPFILE) 263 264 mapfile_reorder : mapfile $(REORDERFILE) 265 rm -f $@ 266 cat $^ > $@ 267 268 vm.def: $(Res_Files) $(Obj_Files) 269 sh $(GAMMADIR)/make/bsd/makefiles/build_vm_def.sh *.o > $@ 270 271 mapfile_ext: 272 rm -f $@ 273 touch $@ 274 if [ -f $(HS_ALT_MAKE)/bsd/makefiles/mapfile-ext ]; then \ 275 cat $(HS_ALT_MAKE)/bsd/makefiles/mapfile-ext > $@; \ 276 fi 277 278 STATIC_CXX = false 279 280 ifeq ($(LINK_INTO),AOUT) 281 LIBJVM.o = 282 LIBJVM_MAPFILE = 283 LIBS_VM = $(LIBS) 284 else 285 LIBJVM.o = $(JVM_OBJ_FILES) 286 LIBJVM_MAPFILE$(LDNOMAP) = mapfile_reorder 287 LFLAGS_VM$(LDNOMAP) += $(MAPFLAG:FILENAME=$(LIBJVM_MAPFILE)) 288 LFLAGS_VM += $(SONAMEFLAG:SONAME=$(LIBJVM)) 289 290 ifeq ($(OS_VENDOR), Darwin) 291 LFLAGS_VM += -Xlinker -rpath -Xlinker @loader_path/. 292 LFLAGS_VM += -Xlinker -rpath -Xlinker @loader_path/.. 293 LFLAGS_VM += -Xlinker -install_name -Xlinker @rpath/$(@F) 294 else 295 LFLAGS_VM += -Wl,-z,defs 296 endif 297 298 # JVM is statically linked with libgcc[_s] and libstdc++; this is needed to 299 # get around library dependency and compatibility issues. Must use gcc not 300 # g++ to link. 301 ifeq ($(STATIC_CXX), true) 302 LFLAGS_VM += $(STATIC_LIBGCC) 303 LIBS_VM += $(STATIC_STDCXX) 304 LINK_VM = $(LINK_LIB.CC) 305 else 306 LINK_VM = $(LINK_LIB.CXX) 307 endif 308 309 LIBS_VM += $(LIBS) 310 endif 311 ifeq ($(JVM_VARIANT_ZERO), true) 312 LIBS_VM += $(LIBFFI_LIBS) 313 endif 328 329 ifneq ($(JVM_BASE_ADDR),) 330 # By default shared library is linked at base address == 0. Modify the 331 # linker script if JVM prefers a different base location. It can also be 332 # implemented with 'prelink -r'. But 'prelink' is not (yet) available on 333 # our build platform (AS-2.1). 334 LD_SCRIPT = libjvm.so.lds 335 $(LD_SCRIPT): $(LIBJVM_MAPFILE) 336 $(QUIETLY) { \ 337 rm -rf $@; \ 338 $(LINK_VM) -Wl,--verbose $(LFLAGS_VM) 2>&1 | \ 339 sed -e '/^======/,/^======/!d' \ 340 -e '/^======/d' \ 341 -e 's/0\( + SIZEOF_HEADERS\)/$(JVM_BASE_ADDR)\1/' \ 342 > $@; \ 343 } 344 LD_SCRIPT_FLAG = -Wl,-T,$(LD_SCRIPT) 345 endif 346 347 $(LIBJVM): $(LIBJVM.o) $(LIBJVM_MAPFILE) $(LD_SCRIPT) 348 $(QUIETLY) { \ 349 echo $(LOG_INFO) Linking vm...; \ 350 $(LINK_LIB.CXX/PRE_HOOK) \ 351 $(LINK_VM) $(LD_SCRIPT_FLAG) \ 352 $(LFLAGS_VM) -o $@ $(sort $(LIBJVM.o)) $(LIBS_VM); \ 353 $(LINK_LIB.CXX/POST_HOOK) \ 354 rm -f $@.1; ln -s $@ $@.1; \ 355 } 356 357 ifeq ($(ENABLE_FULL_DEBUG_SYMBOLS),1) 358 ifeq ($(OS_VENDOR), Darwin) 359 $(DSYMUTIL) $@ 360 ifeq ($(ZIP_DEBUGINFO_FILES),1) 361 $(ZIPEXE) -q -r -y $(LIBJVM_DIZ) $(LIBJVM_DEBUGINFO) 362 $(RM) -r $(LIBJVM_DEBUGINFO) 363 endif 364 else 365 $(QUIETLY) $(OBJCOPY) --only-keep-debug $@ $(LIBJVM_DEBUGINFO) 366 $(QUIETLY) $(OBJCOPY) --add-gnu-debuglink=$(LIBJVM_DEBUGINFO) $@ 367 ifeq ($(STRIP_POLICY),all_strip) 368 $(QUIETLY) $(STRIP) $@ 369 else 370 ifeq ($(STRIP_POLICY),min_strip) 371 $(QUIETLY) $(STRIP) -g $@ 372 # implied else here is no stripping at all 373 endif 374 endif 375 ifeq ($(ZIP_DEBUGINFO_FILES),1) 376 $(ZIPEXE) -q -y $(LIBJVM_DIZ) $(LIBJVM_DEBUGINFO) 393 $(QUIETLY) test ! -f $(LIBJVM_DEBUGINFO) || \ 394 $(CP) -f $(LIBJVM_DEBUGINFO) $(DEST_JVM_DEBUGINFO) 395 endif 396 $(QUIETLY) test ! -f $(LIBJVM_DIZ) || \ 397 $(CP) -f $(LIBJVM_DIZ) $(DEST_JVM_DIZ) 398 $(QUIETLY) $(CP) -f $(LIBJVM) $(DEST_JVM) && echo "Done" 399 400 #---------------------------------------------------------------------- 401 # Other files 402 403 # Signal interposition library 404 include $(MAKEFILES_DIR)/jsig.make 405 406 # Serviceability agent 407 include $(MAKEFILES_DIR)/saproc.make 408 409 #---------------------------------------------------------------------- 410 411 ifeq ($(OS_VENDOR), Darwin) 412 # no libjvm_db for macosx 413 build: $(LIBJVM) $(LAUNCHER) $(LIBJSIG) $(BUILDLIBSAPROC) dtraceCheck 414 echo "Doing vm.make build:" 415 else 416 build: $(LIBJVM) $(LAUNCHER) $(LIBJSIG) $(LIBJVM_DB) $(BUILDLIBSAPROC) 417 endif 418 419 install: install_jvm install_jsig install_saproc 420 421 .PHONY: default build install install_jvm | 125 LIBS += -lm 126 127 ifeq ($(USE_CLANG),) 128 LIBS += -pthread 129 endif 130 131 # By default, link the *.o into the library, not the executable. 132 LINK_INTO$(LINK_INTO) = LIBJVM 133 134 JDK_LIBDIR = $(JAVA_HOME)/lib/$(LIBARCH) 135 136 #---------------------------------------------------------------------- 137 # jvm_db & dtrace 138 include $(MAKEFILES_DIR)/dtrace.make 139 140 #---------------------------------------------------------------------- 141 # JVM 142 143 JVM = jvm 144 ifeq ($(OS_VENDOR), Darwin) 145 LIBJVM = lib$(JVM).$(LIBRARY_SUFFIX) 146 CFLAGS += -D_XOPEN_SOURCE -D_DARWIN_C_SOURCE 147 148 LIBJVM_DEBUGINFO = lib$(JVM).$(LIBRARY_SUFFIX).dSYM 149 LIBJVM_DIZ = lib$(JVM).diz 150 else 151 LIBJVM = lib$(JVM).so 152 153 LIBJVM_DEBUGINFO = lib$(JVM).debuginfo 154 LIBJVM_DIZ = lib$(JVM).diz 155 endif 156 157 SPECIAL_PATHS:=adlc c1 gc opto shark libadt 158 159 SOURCE_PATHS=\ 160 $(shell find $(HS_COMMON_SRC)/share/vm/* -type d \! \ 161 \( -name DUMMY $(foreach dir,$(SPECIAL_PATHS),-o -name $(dir)) \)) 162 SOURCE_PATHS+=$(HS_COMMON_SRC)/os/$(Platform_os_family)/vm 163 SOURCE_PATHS+=$(HS_COMMON_SRC)/os/posix/vm 164 SOURCE_PATHS+=$(HS_COMMON_SRC)/cpu/$(Platform_arch)/vm 165 SOURCE_PATHS+=$(HS_COMMON_SRC)/os_cpu/$(Platform_os_arch)/vm 166 167 CORE_PATHS=$(foreach path,$(SOURCE_PATHS),$(call altsrc,$(path)) $(path)) 168 CORE_PATHS+=$(GENERATED)/jvmtifiles $(GENERATED)/tracefiles 244 # For Darwin: add _ prefix and remove trailing ; 245 mapfile_extra: $(MAPFILE_SHARE) $(MAPFILE_EXT) 246 rm -f $@ 247 ifeq ($(OS_VENDOR), Darwin) 248 cat $(MAPFILE_SHARE) $(MAPFILE_EXT) | \ 249 sed -e 's/#.*//g' -e 's/[ ]*//g' -e 's/;//g' | \ 250 awk '{ if ($$0 ~ ".") { print "\t\t_" $$0 } }' \ 251 > $@ 252 else 253 cat $(MAPFILE_SHARE) $(MAPFILE_EXT) > $@ 254 endif 255 256 mapfile : $(MAPFILE) mapfile_extra vm.def 257 rm -f $@ 258 awk '{ if ($$0 ~ "INSERT VTABLE SYMBOLS HERE") \ 259 { system ("cat mapfile_extra vm.def"); } \ 260 else \ 261 { print $$0 } \ 262 }' > $@ < $(MAPFILE) 263 264 ifeq ($(BUILD_STATIC),true) 265 EXPORTED_SYMBOLS = libjvm.symbols 266 267 libjvm.symbols : mapfile 268 $(CP) mapfile libjvm.symbols 269 270 else 271 EXPORTED_SYMBOLS = 272 endif 273 274 mapfile_reorder : mapfile $(REORDERFILE) 275 rm -f $@ 276 cat $^ > $@ 277 278 vm.def: $(Res_Files) $(Obj_Files) 279 sh $(GAMMADIR)/make/bsd/makefiles/build_vm_def.sh *.o > $@ 280 281 mapfile_ext: 282 rm -f $@ 283 touch $@ 284 if [ -f $(HS_ALT_MAKE)/bsd/makefiles/mapfile-ext ]; then \ 285 cat $(HS_ALT_MAKE)/bsd/makefiles/mapfile-ext > $@; \ 286 fi 287 288 STATIC_CXX = false 289 290 ifeq ($(LINK_INTO),AOUT) 291 LIBJVM.o = 292 LIBJVM_MAPFILE = 293 LIBS_VM = $(LIBS) 294 else 295 LIBJVM.o = $(JVM_OBJ_FILES) 296 LIBJVM_MAPFILE$(LDNOMAP) = mapfile_reorder 297 LFLAGS_VM$(LDNOMAP) += $(MAPFLAG:FILENAME=$(LIBJVM_MAPFILE)) 298 LFLAGS_VM += $(SONAMEFLAG:SONAME=$(LIBJVM)) 299 300 ifeq ($(OS_VENDOR), Darwin) 301 ifneq ($(BUILD_STATIC),true) 302 LFLAGS_VM += -Xlinker -rpath -Xlinker @loader_path/. 303 LFLAGS_VM += -Xlinker -rpath -Xlinker @loader_path/.. 304 LFLAGS_VM += -Xlinker -install_name -Xlinker @rpath/$(@F) 305 endif 306 else 307 LFLAGS_VM += -Wl,-z,defs 308 endif 309 310 # JVM is statically linked with libgcc[_s] and libstdc++; this is needed to 311 # get around library dependency and compatibility issues. Must use gcc not 312 # g++ to link. 313 ifeq ($(STATIC_CXX), true) 314 LFLAGS_VM += $(STATIC_LIBGCC) 315 LIBS_VM += $(STATIC_STDCXX) 316 LINK_VM = $(LINK_LIB.CC) 317 else 318 LINK_VM = $(LINK_LIB.CXX) 319 endif 320 321 LIBS_VM += $(LIBS) 322 endif 323 ifeq ($(JVM_VARIANT_ZERO), true) 324 LIBS_VM += $(LIBFFI_LIBS) 325 endif 340 341 ifneq ($(JVM_BASE_ADDR),) 342 # By default shared library is linked at base address == 0. Modify the 343 # linker script if JVM prefers a different base location. It can also be 344 # implemented with 'prelink -r'. But 'prelink' is not (yet) available on 345 # our build platform (AS-2.1). 346 LD_SCRIPT = libjvm.so.lds 347 $(LD_SCRIPT): $(LIBJVM_MAPFILE) 348 $(QUIETLY) { \ 349 rm -rf $@; \ 350 $(LINK_VM) -Wl,--verbose $(LFLAGS_VM) 2>&1 | \ 351 sed -e '/^======/,/^======/!d' \ 352 -e '/^======/d' \ 353 -e 's/0\( + SIZEOF_HEADERS\)/$(JVM_BASE_ADDR)\1/' \ 354 > $@; \ 355 } 356 LD_SCRIPT_FLAG = -Wl,-T,$(LD_SCRIPT) 357 endif 358 359 $(LIBJVM): $(LIBJVM.o) $(LIBJVM_MAPFILE) $(LD_SCRIPT) 360 ifeq ($(BUILD_STATIC),true) 361 echo Linking static vm...; 362 $(LINK_LIB.CC) $@ $(LIBJVM.o) 363 else 364 $(QUIETLY) { \ 365 echo $(LOG_INFO) Linking vm...; \ 366 $(LINK_LIB.CXX/PRE_HOOK) \ 367 $(LINK_VM) $(LD_SCRIPT_FLAG) \ 368 $(LFLAGS_VM) -o $@ $(sort $(LIBJVM.o)) $(LIBS_VM); \ 369 $(LINK_LIB.CXX/POST_HOOK) \ 370 rm -f $@.1; ln -s $@ $@.1; \ 371 } 372 373 endif 374 375 ifeq ($(ENABLE_FULL_DEBUG_SYMBOLS),1) 376 ifeq ($(OS_VENDOR), Darwin) 377 $(DSYMUTIL) $@ 378 ifeq ($(ZIP_DEBUGINFO_FILES),1) 379 $(ZIPEXE) -q -r -y $(LIBJVM_DIZ) $(LIBJVM_DEBUGINFO) 380 $(RM) -r $(LIBJVM_DEBUGINFO) 381 endif 382 else 383 $(QUIETLY) $(OBJCOPY) --only-keep-debug $@ $(LIBJVM_DEBUGINFO) 384 $(QUIETLY) $(OBJCOPY) --add-gnu-debuglink=$(LIBJVM_DEBUGINFO) $@ 385 ifeq ($(STRIP_POLICY),all_strip) 386 $(QUIETLY) $(STRIP) $@ 387 else 388 ifeq ($(STRIP_POLICY),min_strip) 389 $(QUIETLY) $(STRIP) -g $@ 390 # implied else here is no stripping at all 391 endif 392 endif 393 ifeq ($(ZIP_DEBUGINFO_FILES),1) 394 $(ZIPEXE) -q -y $(LIBJVM_DIZ) $(LIBJVM_DEBUGINFO) 411 $(QUIETLY) test ! -f $(LIBJVM_DEBUGINFO) || \ 412 $(CP) -f $(LIBJVM_DEBUGINFO) $(DEST_JVM_DEBUGINFO) 413 endif 414 $(QUIETLY) test ! -f $(LIBJVM_DIZ) || \ 415 $(CP) -f $(LIBJVM_DIZ) $(DEST_JVM_DIZ) 416 $(QUIETLY) $(CP) -f $(LIBJVM) $(DEST_JVM) && echo "Done" 417 418 #---------------------------------------------------------------------- 419 # Other files 420 421 # Signal interposition library 422 include $(MAKEFILES_DIR)/jsig.make 423 424 # Serviceability agent 425 include $(MAKEFILES_DIR)/saproc.make 426 427 #---------------------------------------------------------------------- 428 429 ifeq ($(OS_VENDOR), Darwin) 430 # no libjvm_db for macosx 431 build: $(LIBJVM) $(LAUNCHER) $(LIBJSIG) $(BUILDLIBSAPROC) dtraceCheck $(EXPORTED_SYMBOLS) 432 echo "Doing vm.make build:" 433 else 434 build: $(LIBJVM) $(LAUNCHER) $(LIBJSIG) $(LIBJVM_DB) $(BUILDLIBSAPROC) $(EXPORTED_SYMBOLS) 435 endif 436 437 install: install_jvm install_jsig install_saproc 438 439 .PHONY: default build install install_jvm |