269 LFLAGS_VM += $(STATIC_LIBGCC) 270 LIBS_VM += $(STATIC_STDCXX) 271 else 272 LIBS_VM += -lstdc++ 273 endif 274 275 LIBS_VM += $(LIBS) 276 endif 277 ifeq ($(JVM_VARIANT_ZERO), true) 278 LIBS_VM += $(LIBFFI_LIBS) 279 endif 280 ifeq ($(JVM_VARIANT_ZEROSHARK), true) 281 LIBS_VM += $(LIBFFI_LIBS) $(LLVM_LIBS) 282 LFLAGS_VM += $(LLVM_LDFLAGS) 283 endif 284 285 LINK_VM = $(LINK_LIB.CC) 286 287 # rule for building precompiled header 288 $(PRECOMPILED_HEADER): 289 $(QUIETLY) echo Generating precompiled header $@ 290 $(QUIETLY) mkdir -p $(PRECOMPILED_HEADER_DIR) 291 $(QUIETLY) rm -f $@ 292 $(QUIETLY) $(COMPILE.CXX) $(DEPFLAGS) -x c++-header $(PRECOMPILED_HEADER_SRC) -o $@ $(COMPILE_DONE) 293 294 # making the library: 295 296 ifneq ($(JVM_BASE_ADDR),) 297 # By default shared library is linked at base address == 0. Modify the 298 # linker script if JVM prefers a different base location. It can also be 299 # implemented with 'prelink -r'. But 'prelink' is not (yet) available on 300 # our build platform (AS-2.1). 301 LD_SCRIPT = libjvm.so.lds 302 $(LD_SCRIPT): $(LIBJVM_MAPFILE) 303 $(QUIETLY) { \ 304 rm -rf $@; \ 305 $(LINK_VM) -Wl,--verbose $(LFLAGS_VM) 2>&1 | \ 306 sed -e '/^======/,/^======/!d' \ 307 -e '/^======/d' \ 308 -e 's/0\( + SIZEOF_HEADERS\)/$(JVM_BASE_ADDR)\1/' \ 309 > $@; \ 310 } 311 LD_SCRIPT_FLAG = -Wl,-T,$(LD_SCRIPT) 312 endif 313 314 # With more recent Redhat releases (or the cutting edge version Fedora), if 315 # SELinux is configured to be enabled, the runtime linker will fail to apply 316 # the text relocation to libjvm.so considering that it is built as a non-PIC 317 # DSO. To workaround that, we run chcon to libjvm.so after it is built. See 318 # details in bug 6538311. 319 $(LIBJVM): $(LIBJVM.o) $(LIBJVM_MAPFILE) $(LD_SCRIPT) 320 $(QUIETLY) { \ 321 echo Linking vm...; \ 322 $(LINK_LIB.CXX/PRE_HOOK) \ 323 $(LINK_VM) $(LD_SCRIPT_FLAG) \ 324 $(LFLAGS_VM) -o $@ $(sort $(LIBJVM.o)) $(LIBS_VM); \ 325 $(LINK_LIB.CXX/POST_HOOK) \ 326 rm -f $@.1; ln -s $@ $@.1; \ 327 if [ \"$(CROSS_COMPILE_ARCH)\" = \"\" ] ; then \ 328 if [ -x /usr/sbin/selinuxenabled ] ; then \ 329 /usr/sbin/selinuxenabled; \ 330 if [ $$? = 0 ] ; then \ 331 /usr/bin/chcon -t textrel_shlib_t $@; \ 332 if [ $$? != 0 ]; then \ 333 echo "ERROR: Cannot chcon $@"; \ 334 fi \ 335 fi \ 336 fi \ 337 fi \ 338 } 339 340 ifeq ($(ENABLE_FULL_DEBUG_SYMBOLS),1) 341 $(QUIETLY) $(OBJCOPY) --only-keep-debug $@ $(LIBJVM_DEBUGINFO) | 269 LFLAGS_VM += $(STATIC_LIBGCC) 270 LIBS_VM += $(STATIC_STDCXX) 271 else 272 LIBS_VM += -lstdc++ 273 endif 274 275 LIBS_VM += $(LIBS) 276 endif 277 ifeq ($(JVM_VARIANT_ZERO), true) 278 LIBS_VM += $(LIBFFI_LIBS) 279 endif 280 ifeq ($(JVM_VARIANT_ZEROSHARK), true) 281 LIBS_VM += $(LIBFFI_LIBS) $(LLVM_LIBS) 282 LFLAGS_VM += $(LLVM_LDFLAGS) 283 endif 284 285 LINK_VM = $(LINK_LIB.CC) 286 287 # rule for building precompiled header 288 $(PRECOMPILED_HEADER): 289 $(QUIETLY) echo $(LOG_INFO) Generating precompiled header $@ 290 $(QUIETLY) mkdir -p $(PRECOMPILED_HEADER_DIR) 291 $(QUIETLY) rm -f $@ 292 $(QUIETLY) $(COMPILE.CXX) $(DEPFLAGS) -x c++-header $(PRECOMPILED_HEADER_SRC) -o $@ $(COMPILE_DONE) 293 294 # making the library: 295 296 ifneq ($(JVM_BASE_ADDR),) 297 # By default shared library is linked at base address == 0. Modify the 298 # linker script if JVM prefers a different base location. It can also be 299 # implemented with 'prelink -r'. But 'prelink' is not (yet) available on 300 # our build platform (AS-2.1). 301 LD_SCRIPT = libjvm.so.lds 302 $(LD_SCRIPT): $(LIBJVM_MAPFILE) 303 $(QUIETLY) { \ 304 rm -rf $@; \ 305 $(LINK_VM) -Wl,--verbose $(LFLAGS_VM) 2>&1 | \ 306 sed -e '/^======/,/^======/!d' \ 307 -e '/^======/d' \ 308 -e 's/0\( + SIZEOF_HEADERS\)/$(JVM_BASE_ADDR)\1/' \ 309 > $@; \ 310 } 311 LD_SCRIPT_FLAG = -Wl,-T,$(LD_SCRIPT) 312 endif 313 314 # With more recent Redhat releases (or the cutting edge version Fedora), if 315 # SELinux is configured to be enabled, the runtime linker will fail to apply 316 # the text relocation to libjvm.so considering that it is built as a non-PIC 317 # DSO. To workaround that, we run chcon to libjvm.so after it is built. See 318 # details in bug 6538311. 319 $(LIBJVM): $(LIBJVM.o) $(LIBJVM_MAPFILE) $(LD_SCRIPT) 320 $(QUIETLY) { \ 321 echo $(LOG_INFO) Linking vm...; \ 322 $(LINK_LIB.CXX/PRE_HOOK) \ 323 $(LINK_VM) $(LD_SCRIPT_FLAG) \ 324 $(LFLAGS_VM) -o $@ $(sort $(LIBJVM.o)) $(LIBS_VM); \ 325 $(LINK_LIB.CXX/POST_HOOK) \ 326 rm -f $@.1; ln -s $@ $@.1; \ 327 if [ \"$(CROSS_COMPILE_ARCH)\" = \"\" ] ; then \ 328 if [ -x /usr/sbin/selinuxenabled ] ; then \ 329 /usr/sbin/selinuxenabled; \ 330 if [ $$? = 0 ] ; then \ 331 /usr/bin/chcon -t textrel_shlib_t $@; \ 332 if [ $$? != 0 ]; then \ 333 echo "ERROR: Cannot chcon $@"; \ 334 fi \ 335 fi \ 336 fi \ 337 fi \ 338 } 339 340 ifeq ($(ENABLE_FULL_DEBUG_SYMBOLS),1) 341 $(QUIETLY) $(OBJCOPY) --only-keep-debug $@ $(LIBJVM_DEBUGINFO) |