315 ]) |
315 ]) |
316 |
316 |
317 |
317 |
318 AC_DEFUN([FLAGS_SETUP_COMPILER_FLAGS_FOR_JDK], |
318 AC_DEFUN([FLAGS_SETUP_COMPILER_FLAGS_FOR_JDK], |
319 [ |
319 [ |
|
320 # Additional macosx handling |
|
321 if test "x$FLAGS_OS" = xmacosx; then |
|
322 # MACOSX_VERSION_MIN specifies the lowest version of Macosx that the built |
|
323 # binaries should be compatible with, even if compiled on a newer version |
|
324 # of the OS. It currently has a hard coded value. Setting this also limits |
|
325 # exposure to API changes in header files. Bumping this is likely to |
|
326 # require code changes to build. |
|
327 MACOSX_VERSION_MIN=10.7.0 |
|
328 AC_SUBST(MACOSX_VERSION_MIN) |
|
329 |
|
330 # Setting --with-macosx-version-max=<version> makes it an error to build or |
|
331 # link to macosx APIs that are newer than the given OS version. The expected |
|
332 # format for <version> is either nn.n.n or nn.nn.nn. See /usr/include/AvailabilityMacros.h. |
|
333 AC_ARG_WITH([macosx-version-max], [AS_HELP_STRING([--with-macosx-version-max], |
|
334 [error on use of newer functionality. @<:@macosx@:>@])], |
|
335 [ |
|
336 if echo "$with_macosx_version_max" | $GREP -q "^[[0-9]][[0-9]]\.[[0-9]]\.[[0-9]]\$"; then |
|
337 MACOSX_VERSION_MAX=$with_macosx_version_max |
|
338 elif echo "$with_macosx_version_max" | $GREP -q "^[[0-9]][[0-9]]\.[[0-9]][[0-9]]\.[[0-9]][[0-9]]\$"; then |
|
339 MACOSX_VERSION_MAX=$with_macosx_version_max |
|
340 elif test "x$with_macosx_version_max" = "xno"; then |
|
341 # Use build system default |
|
342 MACOSX_VERSION_MAX= |
|
343 else |
|
344 AC_MSG_ERROR([osx version format must be nn.n.n or nn.nn.nn]) |
|
345 fi |
|
346 ], |
|
347 [MACOSX_VERSION_MAX=] |
|
348 ) |
|
349 AC_SUBST(MACOSX_VERSION_MAX) |
|
350 fi |
320 |
351 |
321 FLAGS_SETUP_ABI_PROFILE |
352 FLAGS_SETUP_ABI_PROFILE |
322 |
353 |
323 # Optional POSIX functionality needed by the JVM |
354 # Optional POSIX functionality needed by the JVM |
324 # |
355 # |
339 FLAGS_CPU_BITS=OPENJDK_TARGET_CPU_BITS |
370 FLAGS_CPU_BITS=OPENJDK_TARGET_CPU_BITS |
340 FLAGS_CPU_ENDIAN=OPENJDK_TARGET_CPU_ENDIAN |
371 FLAGS_CPU_ENDIAN=OPENJDK_TARGET_CPU_ENDIAN |
341 FLAGS_CPU_LEGACY=OPENJDK_TARGET_CPU_LEGACY |
372 FLAGS_CPU_LEGACY=OPENJDK_TARGET_CPU_LEGACY |
342 FLAGS_ADD_LP64=OPENJDK_TARGET_ADD_LP64 |
373 FLAGS_ADD_LP64=OPENJDK_TARGET_ADD_LP64 |
343 |
374 |
|
375 # On some platforms (mac) the linker warns about non existing -L dirs. |
|
376 # For any of the variants server, client or minimal, the dir matches the |
|
377 # variant name. The "main" variant should be used for linking. For the |
|
378 # rest, the dir is just server. |
|
379 if HOTSPOT_CHECK_JVM_VARIANT(server) || HOTSPOT_CHECK_JVM_VARIANT(client) \ |
|
380 || HOTSPOT_CHECK_JVM_VARIANT(minimal); then |
|
381 JVM_VARIANT_PATH=$JVM_VARIANT_MAIN |
|
382 else |
|
383 JVM_VARIANT_PATH=server |
|
384 fi |
|
385 |
344 FLAGS_SETUP_COMPILER_FLAGS_FOR_JDK_HELPER([TARGET]) |
386 FLAGS_SETUP_COMPILER_FLAGS_FOR_JDK_HELPER([TARGET]) |
345 |
387 |
346 FLAGS_OS=OPENJDK_BUILD_OS |
388 FLAGS_OS=OPENJDK_BUILD_OS |
347 FLAGS_OS_TYPE=OPENJDK_BUILD_OS_TYPE |
389 FLAGS_OS_TYPE=OPENJDK_BUILD_OS_TYPE |
348 FLAGS_CPU=OPENJDK_BUILD_CPU |
390 FLAGS_CPU=OPENJDK_BUILD_CPU |
349 FLAGS_CPU_ARCH=OPENJDK_BUILD_CPU_ARCH |
391 FLAGS_CPU_ARCH=OPENJDK_BUILD_CPU_ARCH |
350 FLAGS_CPU_BITS=OPENJDK_BUILD_CPU_BITS |
392 FLAGS_CPU_BITS=OPENJDK_BUILD_CPU_BITS |
351 FLAGS_CPU_ENDIAN=OPENJDK_BUILD_CPU_ENDIAN |
393 FLAGS_CPU_ENDIAN=OPENJDK_BUILD_CPU_ENDIAN |
352 FLAGS_CPU_LEGACY=OPENJDK_BUILD_CPU_LEGACY |
394 FLAGS_CPU_LEGACY=OPENJDK_BUILD_CPU_LEGACY |
353 FLAGS_ADD_LP64=OPENJDK_BUILD_ADD_LP64= |
395 FLAGS_ADD_LP64=OPENJDK_BUILD_ADD_LP64= |
|
396 |
|
397 # When building a buildjdk, it's always only the server variant |
|
398 OPENJDK_BUILD_JVM_VARIANT_PATH=server |
354 |
399 |
355 FLAGS_SETUP_COMPILER_FLAGS_FOR_JDK_HELPER([BUILD], [OPENJDK_BUILD_]) |
400 FLAGS_SETUP_COMPILER_FLAGS_FOR_JDK_HELPER([BUILD], [OPENJDK_BUILD_]) |
356 |
401 |
357 # Tests are only ever compiled for TARGET |
402 # Tests are only ever compiled for TARGET |
358 # Flags for compiling test libraries |
403 # Flags for compiling test libraries |
407 fi |
452 fi |
408 |
453 |
409 $2CFLAGS_JDK="${$2CFLAGS_JDK} ${$2EXTRA_CFLAGS}" |
454 $2CFLAGS_JDK="${$2CFLAGS_JDK} ${$2EXTRA_CFLAGS}" |
410 $2CXXFLAGS_JDK="${$2CXXFLAGS_JDK} ${$2EXTRA_CXXFLAGS}" |
455 $2CXXFLAGS_JDK="${$2CXXFLAGS_JDK} ${$2EXTRA_CXXFLAGS}" |
411 $2LDFLAGS_JDK="${$2LDFLAGS_JDK} ${$2EXTRA_LDFLAGS}" |
456 $2LDFLAGS_JDK="${$2LDFLAGS_JDK} ${$2EXTRA_LDFLAGS}" |
|
457 |
|
458 |
|
459 # PER TOOLCHAIN: |
|
460 # LINKER_BASIC |
|
461 # LINKER: shared-lib-special, exe-special |
|
462 # LINKER: arch/cpu-special |
|
463 # COMPILER-ARCH/CPU-special (-m, -f...) |
|
464 # COMPILER-warnings |
|
465 # COMPILER: shared-lib-special, exe-special |
|
466 |
|
467 # LINKER LDFLAGS |
|
468 |
|
469 # BASIC_LDFLAGS (per toolchain) |
|
470 if test "x$TOOLCHAIN_TYPE" = xgcc; then |
|
471 # If this is a --hash-style=gnu system, use --hash-style=both, why? |
|
472 # We have previously set HAS_GNU_HASH if this is the case |
|
473 if test -n "$HAS_GNU_HASH"; then |
|
474 BASIC_LDFLAGS="-Wl,--hash-style=both" |
|
475 LIBJSIG_HASHSTYLE_LDFLAGS="-Wl,--hash-style=both" |
|
476 AC_SUBST(LIBJSIG_HASHSTYLE_LDFLAGS) |
|
477 fi |
|
478 |
|
479 # And since we now know that the linker is gnu, then add -z defs, to forbid |
|
480 # undefined symbols in object files. |
|
481 BASIC_LDFLAGS="$BASIC_LDFLAGS -Wl,-z,defs" |
|
482 |
|
483 BASIC_LDFLAGS_JDK_ONLY= |
|
484 BASIC_LDFLAGS_JVM_ONLY="-Wl,-z,noexecstack -Wl,-O1" |
|
485 |
|
486 BASIC_LDFLAGS_JDK_LIB_ONLY="-Wl,-z,noexecstack" |
|
487 LIBJSIG_NOEXECSTACK_LDFLAGS="-Wl,-z,noexecstack" |
|
488 |
|
489 |
|
490 if test "x$HAS_LINKER_RELRO" = "xtrue"; then |
|
491 BASIC_LDFLAGS_JVM_ONLY="$BASIC_LDFLAGS_JVM_ONLY $LINKER_RELRO_FLAG" |
|
492 fi |
|
493 |
|
494 elif test "x$TOOLCHAIN_TYPE" = xclang; then |
|
495 BASIC_LDFLAGS_JVM_ONLY="-mno-omit-leaf-frame-pointer -mstack-alignment=16 -stdlib=libstdc++ -fPIC" |
|
496 elif test "x$TOOLCHAIN_TYPE" = xsolstudio; then |
|
497 BASIC_LDFLAGS="-Wl,-z,defs" |
|
498 BASIC_LDFLAGS_ONLYCXX="-norunpath" |
|
499 BASIC_LDFLAGS_ONLYCXX_JDK_ONLY="-xnolib" |
|
500 |
|
501 BASIC_LDFLAGS_JDK_ONLY="-ztext" |
|
502 BASIC_LDFLAGS_JVM_ONLY="-library=%none -mt -z noversion" |
|
503 elif test "x$TOOLCHAIN_TYPE" = xxlc; then |
|
504 BASIC_LDFLAGS="-b64 -brtl -bnolibpath -bexpall -bernotok -btextpsize:64K -bdatapsize:64K -bstackpsize:64K" |
|
505 elif test "x$TOOLCHAIN_TYPE" = xmicrosoft; then |
|
506 BASIC_LDFLAGS="-nologo -opt:ref" |
|
507 BASIC_LDFLAGS_JDK_ONLY="-incremental:no" |
|
508 BASIC_LDFLAGS_JVM_ONLY="-opt:icf,8 -subsystem:windows -base:0x8000000" |
|
509 fi |
|
510 $2LDFLAGS_JDK="${$2LDFLAGS_JDK} ${BASIC_LDFLAGS}" |
|
511 $2JVM_LDFLAGS="${$2JVM_LDFLAGS} ${BASIC_LDFLAGS} $BASIC_LDFLAGS_ONLYCXX" |
|
512 $2LDFLAGS_CXX_JDK="[$]$2LDFLAGS_CXX_JDK $BASIC_LDFLAGS_ONLYCXX" |
|
513 |
|
514 # CPU_LDFLAGS (per toolchain) |
|
515 # This can differ between TARGET and BUILD. |
|
516 if test "x$TOOLCHAIN_TYPE" = xgcc; then |
|
517 if test "x$FLAGS_CPU" = xx86; then |
|
518 $2_CPU_LDFLAGS_JVM_ONLY="-march=i586" |
|
519 fi |
|
520 elif test "x$TOOLCHAIN_TYPE" = xclang; then |
|
521 elif test "x$TOOLCHAIN_TYPE" = xsolstudio; then |
|
522 if test "x$FLAGS_CPU_ARCH" = "xsparc"; then |
|
523 $2_CPU_LDFLAGS_JVM_ONLY="-xarch=sparc" |
|
524 fi |
|
525 elif test "x$TOOLCHAIN_TYPE" = xxlc; then |
|
526 elif test "x$TOOLCHAIN_TYPE" = xmicrosoft; then |
|
527 if test "x$FLAGS_CPU" = "xx86"; then |
|
528 $2_CPU_LDFLAGS="-safeseh" |
|
529 # NOTE: Old build added -machine. Probably not needed. |
|
530 $2_CPU_LDFLAGS_JVM_ONLY="-machine:I386" |
|
531 else |
|
532 $2_CPU_LDFLAGS_JVM_ONLY="-machine:AMD64" |
|
533 fi |
|
534 fi |
|
535 fi |
|
536 $2LDFLAGS_JDK="${$2LDFLAGS_JDK} ${$2_CPU_LDFLAGS}" |
|
537 $2JVM_LDFLAGS="${$2JVM_LDFLAGS} ${$2_CPU_LDFLAGS} ${$2_CPU_LDFLAGS_JVM_ONLY}" |
|
538 |
|
539 # OS_LDFLAGS (per toolchain) |
|
540 if test "x$TOOLCHAIN_TYPE" = xclang || test "x$TOOLCHAIN_TYPE" = xgcc; then |
|
541 if test "x$FLAGS_OS" = xmacosx; then |
|
542 # Assume clang or gcc. |
|
543 # FIXME: We should really generalize SET_SHARED_LIBRARY_ORIGIN instead. |
|
544 OS_LDFLAGS_JVM_ONLY="[$]$2JVM_LDFLAGS -Wl,-rpath,@loader_path/. -Wl,-rpath,@loader_path/.." |
|
545 |
|
546 OS_LDFLAGS_JDK_ONLY="[$]$2LDFLAGS_JDK -mmacosx-version-min=\$(MACOSX_VERSION_MIN)" |
|
547 fi |
|
548 fi |
|
549 $2LDFLAGS_JDK="${$2LDFLAGS_JDK} ${$OS_LDFLAGS_JDK_ONLY}" |
|
550 $2JVM_LDFLAGS="${$2JVM_LDFLAGS} ${$OS_LDFLAGS_JVM_ONLY}" |
|
551 |
|
552 # DEBUGLEVEL_LDFLAGS (per toolchain) |
|
553 if test "x$TOOLCHAIN_TYPE" = xgcc; then |
|
554 if test "x$FLAGS_OS" = xlinux; then |
|
555 if test x$DEBUG_LEVEL = xrelease; then |
|
556 DEBUGLEVEL_LDFLAGS_JDK_ONLY="${$2LDFLAGS_JDK} -Wl,-O1" |
|
557 else |
|
558 # mark relocations read only on (fast/slow) debug builds |
|
559 if test "x$HAS_LINKER_RELRO" = "xtrue"; then |
|
560 DEBUGLEVEL_LDFLAGS_JDK_ONLY="$LINKER_RELRO_FLAG" |
|
561 fi |
|
562 fi |
|
563 if test x$DEBUG_LEVEL = xslowdebug; then |
|
564 if test "x$HAS_LINKER_NOW" = "xtrue"; then |
|
565 # do relocations at load |
|
566 DEBUGLEVEL_LDFLAGS="$LINKER_NOW_FLAG" |
|
567 fi |
|
568 fi |
|
569 fi |
|
570 elif test "x$TOOLCHAIN_TYPE" = xxlc; then |
|
571 # We need '-qminimaltoc' or '-qpic=large -bbigtoc' if the TOC overflows. |
|
572 # Hotspot now overflows its 64K TOC (currently only for debug), |
|
573 # so we build with '-qpic=large -bbigtoc'. |
|
574 if test "x$DEBUG_LEVEL" != xrelease; then |
|
575 DEBUGLEVEL_LDFLAGS_JVM_ONLY="[$]$2JVM_LDFLAGS -bbigtoc" |
|
576 fi |
|
577 fi |
|
578 |
|
579 # EXECUTABLE_LDFLAGS (per toolchain) |
|
580 if test "x$TOOLCHAIN_TYPE" = xgcc; then |
|
581 EXECUTABLE_LDFLAGS="[$]$2LDFLAGS_JDKEXE -Wl,--allow-shlib-undefined" |
|
582 elif test "x$TOOLCHAIN_TYPE" = xmicrosoft; then |
|
583 if test "x$FLAGS_CPU" = "x86_64"; then |
|
584 LDFLAGS_STACK_SIZE=1048576 |
|
585 else |
|
586 LDFLAGS_STACK_SIZE=327680 |
|
587 fi |
|
588 $2_CPU_EXECUTABLE_LDFLAGS="${$2LDFLAGS_JDKEXE} -stack:$LDFLAGS_STACK_SIZE" |
|
589 fi |
|
590 $2LDFLAGS_JDKEXE="${$2LDFLAGS_JDK}" |
|
591 $2LDFLAGS_JDKEXE="${$2LDFLAGS_JDKEXE} ${$2EXTRA_LDFLAGS_JDK}" |
|
592 |
|
593 # LIBRARY_LDFLAGS (per toolchain) |
|
594 # Customize LDFLAGS for libs |
|
595 if test "x$TOOLCHAIN_TYPE" = xmicrosoft; then |
|
596 LDFLAGS_JDK_LIBPATH="-libpath:${OUTPUTDIR}/support/modules_libs/java.base" |
|
597 else |
|
598 LDFLAGS_JDK_LIBPATH="-L\$(SUPPORT_OUTPUTDIR)/modules_libs/java.base \ |
|
599 -L\$(SUPPORT_OUTPUTDIR)/modules_libs/java.base/${$2JVM_VARIANT_PATH}" |
|
600 fi |
|
601 |
|
602 LIBRARY_LDFLAGS_JDK_ONLY="${SHARED_LIBRARY_FLAGS} ${LDFLAGS_NO_EXEC_STACK} $LDFLAGS_JDK_LIBPATH ${$2EXTRA_LDFLAGS_JDK} $BASIC_LDFLAGS_JDK_LIB_ONLY" |
|
603 $2LDFLAGS_JDKLIB="${LIBRARY_LDFLAGS_JDK_ONLY} " |
|
604 |
|
605 # PER OS? |
|
606 # LIBS: default libs |
412 |
607 |
413 ############################################################################### |
608 ############################################################################### |
414 # |
609 # |
415 # Now setup the CFLAGS and LDFLAGS for the JDK build. |
610 # Now setup the CFLAGS and LDFLAGS for the JDK build. |
416 # Later we will also have CFLAGS and LDFLAGS for the hotspot subrepo build. |
611 # Later we will also have CFLAGS and LDFLAGS for the hotspot subrepo build. |
688 -Wsign-compare -Wundef -Wunused-function -Wformat=2" |
883 -Wsign-compare -Wundef -Wunused-function -Wformat=2" |
689 fi |
884 fi |
690 |
885 |
691 # Additional macosx handling |
886 # Additional macosx handling |
692 if test "x$FLAGS_OS" = xmacosx; then |
887 if test "x$FLAGS_OS" = xmacosx; then |
693 # MACOSX_VERSION_MIN specifies the lowest version of Macosx that the built |
|
694 # binaries should be compatible with, even if compiled on a newer version |
|
695 # of the OS. It currently has a hard coded value. Setting this also limits |
|
696 # exposure to API changes in header files. Bumping this is likely to |
|
697 # require code changes to build. |
|
698 MACOSX_VERSION_MIN=10.7.0 |
|
699 AC_SUBST(MACOSX_VERSION_MIN) |
|
700 |
|
701 # Setting --with-macosx-version-max=<version> makes it an error to build or |
|
702 # link to macosx APIs that are newer than the given OS version. The expected |
|
703 # format for <version> is either nn.n.n or nn.nn.nn. See /usr/include/AvailabilityMacros.h. |
|
704 AC_ARG_WITH([macosx-version-max], [AS_HELP_STRING([--with-macosx-version-max], |
|
705 [error on use of newer functionality. @<:@macosx@:>@])], |
|
706 [ |
|
707 if echo "$with_macosx_version_max" | $GREP -q "^[[0-9]][[0-9]]\.[[0-9]]\.[[0-9]]\$"; then |
|
708 MACOSX_VERSION_MAX=$with_macosx_version_max |
|
709 elif echo "$with_macosx_version_max" | $GREP -q "^[[0-9]][[0-9]]\.[[0-9]][[0-9]]\.[[0-9]][[0-9]]\$"; then |
|
710 MACOSX_VERSION_MAX=$with_macosx_version_max |
|
711 elif test "x$with_macosx_version_max" = "xno"; then |
|
712 # Use build system default |
|
713 MACOSX_VERSION_MAX= |
|
714 else |
|
715 AC_MSG_ERROR([osx version format must be nn.n.n or nn.nn.nn]) |
|
716 fi |
|
717 ], |
|
718 [MACOSX_VERSION_MAX=] |
|
719 ) |
|
720 AC_SUBST(MACOSX_VERSION_MAX) |
|
721 |
|
722 # Let the flags variables get resolved in make for easier override on make |
888 # Let the flags variables get resolved in make for easier override on make |
723 # command line. AvailabilityMacros.h versions have no dots, ex: 1070. |
889 # command line. AvailabilityMacros.h versions have no dots, ex: 1070. |
724 $2COMMON_CCXXFLAGS_JDK="[$]$2COMMON_CCXXFLAGS_JDK \ |
890 $2COMMON_CCXXFLAGS_JDK="[$]$2COMMON_CCXXFLAGS_JDK \ |
725 -DMAC_OS_X_VERSION_MIN_REQUIRED=\$(subst .,,\$(MACOSX_VERSION_MIN)) \ |
891 -DMAC_OS_X_VERSION_MIN_REQUIRED=\$(subst .,,\$(MACOSX_VERSION_MIN)) \ |
726 -mmacosx-version-min=\$(MACOSX_VERSION_MIN)" |
892 -mmacosx-version-min=\$(MACOSX_VERSION_MIN)" |
727 $2LDFLAGS_JDK="[$]$2LDFLAGS_JDK -mmacosx-version-min=\$(MACOSX_VERSION_MIN)" |
|
728 $2JVM_CFLAGS="[$]$2JVM_CFLAGS \ |
893 $2JVM_CFLAGS="[$]$2JVM_CFLAGS \ |
729 -DMAC_OS_X_VERSION_MIN_REQUIRED=\$(subst .,,\$(MACOSX_VERSION_MIN)) \ |
894 -DMAC_OS_X_VERSION_MIN_REQUIRED=\$(subst .,,\$(MACOSX_VERSION_MIN)) \ |
730 -mmacosx-version-min=\$(MACOSX_VERSION_MIN)" |
895 -mmacosx-version-min=\$(MACOSX_VERSION_MIN)" |
731 $2ARFLAGS="$2$ARFLAGS -mmacosx-version-min=\$(MACOSX_VERSION_MIN)" |
896 $2ARFLAGS="$2$ARFLAGS -mmacosx-version-min=\$(MACOSX_VERSION_MIN)" |
732 |
897 |
761 AC_SUBST($2CFLAGS_JDKLIB) |
926 AC_SUBST($2CFLAGS_JDKLIB) |
762 AC_SUBST($2CFLAGS_JDKEXE) |
927 AC_SUBST($2CFLAGS_JDKEXE) |
763 AC_SUBST($2CXXFLAGS_JDKLIB) |
928 AC_SUBST($2CXXFLAGS_JDKLIB) |
764 AC_SUBST($2CXXFLAGS_JDKEXE) |
929 AC_SUBST($2CXXFLAGS_JDKEXE) |
765 |
930 |
766 # Setup LDFLAGS et al. |
|
767 # |
|
768 |
931 |
769 if test "x$TOOLCHAIN_TYPE" = xmicrosoft; then |
932 if test "x$TOOLCHAIN_TYPE" = xmicrosoft; then |
770 LDFLAGS_MICROSOFT="-nologo -opt:ref" |
|
771 $2LDFLAGS_JDK="[$]$2LDFLAGS_JDK $LDFLAGS_MICROSOFT -incremental:no" |
|
772 $2JVM_LDFLAGS="[$]$2JVM_LDFLAGS $LDFLAGS_MICROSOFT -opt:icf,8 -subsystem:windows -base:0x8000000" |
|
773 if test "x$FLAGS_CPU_BITS" = "x32"; then |
|
774 LDFLAGS_SAFESH="-safeseh" |
|
775 $2LDFLAGS_JDK="[$]$2LDFLAGS_JDK $LDFLAGS_SAFESH" |
|
776 $2JVM_LDFLAGS="[$]$2JVM_LDFLAGS $LDFLAGS_SAFESH" |
|
777 # NOTE: Old build added -machine. Probably not needed. |
|
778 $2JVM_LDFLAGS="[$]$2JVM_LDFLAGS -machine:I386" |
|
779 else |
|
780 $2JVM_LDFLAGS="[$]$2JVM_LDFLAGS -machine:AMD64" |
|
781 fi |
|
782 elif test "x$TOOLCHAIN_TYPE" = xclang; then |
|
783 $2JVM_LDFLAGS="[$]$2JVM_LDFLAGS -mno-omit-leaf-frame-pointer -mstack-alignment=16 -stdlib=libstdc++ -fPIC" |
|
784 if test "x$FLAGS_OS" = xmacosx; then |
|
785 # FIXME: We should really generalize SET_SHARED_LIBRARY_ORIGIN instead. |
|
786 $2JVM_LDFLAGS="[$]$2JVM_LDFLAGS -Wl,-rpath,@loader_path/. -Wl,-rpath,@loader_path/.." |
|
787 fi |
|
788 elif test "x$TOOLCHAIN_TYPE" = xgcc; then |
|
789 # If this is a --hash-style=gnu system, use --hash-style=both, why? |
|
790 # We have previously set HAS_GNU_HASH if this is the case |
|
791 if test -n "$HAS_GNU_HASH"; then |
|
792 $2LDFLAGS_HASH_STYLE="-Wl,--hash-style=both" |
|
793 $2LDFLAGS_JDK="${$2LDFLAGS_JDK} [$]$2LDFLAGS_HASH_STYLE" |
|
794 $2JVM_LDFLAGS="[$]$2JVM_LDFLAGS [$]$2LDFLAGS_HASH_STYLE" |
|
795 fi |
|
796 if test "x$FLAGS_OS" = xmacosx; then |
|
797 $2JVM_LDFLAGS="[$]$2JVM_LDFLAGS -Wl,-rpath,@loader_path/. -Wl,-rpath,@loader_path/.." |
|
798 fi |
|
799 if test "x$FLAGS_OS" = xlinux; then |
|
800 # And since we now know that the linker is gnu, then add -z defs, to forbid |
|
801 # undefined symbols in object files. |
|
802 LDFLAGS_NO_UNDEF_SYM="-Wl,-z,defs" |
|
803 $2LDFLAGS_JDK="${$2LDFLAGS_JDK} $LDFLAGS_NO_UNDEF_SYM" |
|
804 $2JVM_LDFLAGS="[$]$2JVM_LDFLAGS $LDFLAGS_NO_UNDEF_SYM" |
|
805 LDFLAGS_NO_EXEC_STACK="-Wl,-z,noexecstack" |
|
806 $2JVM_LDFLAGS="[$]$2JVM_LDFLAGS $LDFLAGS_NO_EXEC_STACK" |
|
807 if test "x$FLAGS_CPU" = xx86; then |
|
808 $2JVM_LDFLAGS="[$]$2JVM_LDFLAGS -march=i586" |
|
809 fi |
|
810 case $DEBUG_LEVEL in |
|
811 release ) |
|
812 # tell linker to optimize libraries. |
|
813 # Should this be supplied to the OSS linker as well? |
|
814 LDFLAGS_DEBUGLEVEL_release="-Wl,-O1" |
|
815 $2LDFLAGS_JDK="${$2LDFLAGS_JDK} $LDFLAGS_DEBUGLEVEL_release" |
|
816 $2JVM_LDFLAGS="[$]$2JVM_LDFLAGS $LDFLAGS_DEBUGLEVEL_release" |
|
817 if test "x$HAS_LINKER_RELRO" = "xtrue"; then |
|
818 $2JVM_LDFLAGS="[$]$2JVM_LDFLAGS $LINKER_RELRO_FLAG" |
|
819 fi |
|
820 ;; |
|
821 slowdebug ) |
|
822 # Hotspot always let the linker optimize |
|
823 $2JVM_LDFLAGS="[$]$2JVM_LDFLAGS -Wl,-O1" |
|
824 if test "x$HAS_LINKER_NOW" = "xtrue"; then |
|
825 # do relocations at load |
|
826 $2LDFLAGS_JDK="[$]$2LDFLAGS_JDK $LINKER_NOW_FLAG" |
|
827 $2LDFLAGS_CXX_JDK="[$]$2LDFLAGS_CXX_JDK $LINKER_NOW_FLAG" |
|
828 $2JVM_LDFLAGS="[$]$2JVM_LDFLAGS $LINKER_NOW_FLAG" |
|
829 fi |
|
830 if test "x$HAS_LINKER_RELRO" = "xtrue"; then |
|
831 # mark relocations read only |
|
832 $2LDFLAGS_JDK="[$]$2LDFLAGS_JDK $LINKER_RELRO_FLAG" |
|
833 $2LDFLAGS_CXX_JDK="[$]$2LDFLAGS_CXX_JDK $LINKER_RELRO_FLAG" |
|
834 $2JVM_LDFLAGS="[$]$2JVM_LDFLAGS $LINKER_RELRO_FLAG" |
|
835 fi |
|
836 ;; |
|
837 fastdebug ) |
|
838 # Hotspot always let the linker optimize |
|
839 $2JVM_LDFLAGS="[$]$2JVM_LDFLAGS -Wl,-O1" |
|
840 if test "x$HAS_LINKER_RELRO" = "xtrue"; then |
|
841 # mark relocations read only |
|
842 $2LDFLAGS_JDK="[$]$2LDFLAGS_JDK $LINKER_RELRO_FLAG" |
|
843 $2LDFLAGS_CXX_JDK="[$]$2LDFLAGS_CXX_JDK $LINKER_RELRO_FLAG" |
|
844 $2JVM_LDFLAGS="[$]$2JVM_LDFLAGS $LINKER_RELRO_FLAG" |
|
845 fi |
|
846 ;; |
|
847 * ) |
|
848 AC_MSG_ERROR([Unrecognized \$DEBUG_LEVEL: $DEBUG_LEVEL]) |
|
849 ;; |
|
850 esac |
|
851 fi |
|
852 elif test "x$TOOLCHAIN_TYPE" = xsolstudio; then |
|
853 LDFLAGS_SOLSTUDIO="-Wl,-z,defs" |
|
854 $2LDFLAGS_JDK="[$]$2LDFLAGS_JDK $LDFLAGS_SOLSTUDIO -ztext" |
|
855 LDFLAGS_CXX_SOLSTUDIO="-norunpath" |
|
856 $2LDFLAGS_CXX_JDK="[$]$2LDFLAGS_CXX_JDK $LDFLAGS_CXX_SOLSTUDIO -xnolib" |
|
857 $2JVM_LDFLAGS="[$]$2JVM_LDFLAGS $LDFLAGS_SOLSTUDIO -library=%none -mt $LDFLAGS_CXX_SOLSTUDIO -z noversion" |
|
858 if test "x$FLAGS_CPU_ARCH" = "xsparc"; then |
|
859 $2JVM_LDFLAGS="[$]$2JVM_LDFLAGS -xarch=sparc" |
|
860 fi |
|
861 elif test "x$TOOLCHAIN_TYPE" = xxlc; then |
|
862 LDFLAGS_XLC="-b64 -brtl -bnolibpath -bexpall -bernotok -btextpsize:64K -bdatapsize:64K -bstackpsize:64K" |
|
863 $2LDFLAGS_JDK="${$2LDFLAGS_JDK} $LDFLAGS_XLC" |
|
864 $2JVM_LDFLAGS="[$]$2JVM_LDFLAGS $LDFLAGS_XLC" |
|
865 # We need '-qminimaltoc' or '-qpic=large -bbigtoc' if the TOC overflows. |
|
866 # Hotspot now overflows its 64K TOC (currently only for debug), |
|
867 # so we build with '-qpic=large -bbigtoc'. |
|
868 if test "x$DEBUG_LEVEL" = xslowdebug || test "x$DEBUG_LEVEL" = xfastdebug; then |
|
869 $2JVM_LDFLAGS="[$]$2JVM_LDFLAGS -bbigtoc" |
|
870 fi |
|
871 fi |
|
872 |
|
873 # Customize LDFLAGS for executables |
|
874 |
|
875 $2LDFLAGS_JDKEXE="${$2LDFLAGS_JDK}" |
|
876 |
|
877 if test "x$TOOLCHAIN_TYPE" = xmicrosoft; then |
|
878 if test "x$FLAGS_CPU_BITS" = "x64"; then |
|
879 LDFLAGS_STACK_SIZE=1048576 |
|
880 else |
|
881 LDFLAGS_STACK_SIZE=327680 |
|
882 fi |
|
883 $2LDFLAGS_JDKEXE="${$2LDFLAGS_JDKEXE} /STACK:$LDFLAGS_STACK_SIZE" |
|
884 elif test "x$FLAGS_OS" = xlinux; then |
|
885 $2LDFLAGS_JDKEXE="[$]$2LDFLAGS_JDKEXE -Wl,--allow-shlib-undefined" |
|
886 fi |
|
887 |
|
888 $2LDFLAGS_JDKEXE="${$2LDFLAGS_JDKEXE} ${$2EXTRA_LDFLAGS_JDK}" |
|
889 |
|
890 # Customize LDFLAGS for libs |
|
891 $2LDFLAGS_JDKLIB="${$2LDFLAGS_JDK}" |
|
892 |
|
893 $2LDFLAGS_JDKLIB="${$2LDFLAGS_JDKLIB} ${SHARED_LIBRARY_FLAGS}" |
|
894 $2LDFLAGS_JDKLIB="${$2LDFLAGS_JDKLIB} ${LDFLAGS_NO_EXEC_STACK}" |
|
895 if test "x$TOOLCHAIN_TYPE" = xmicrosoft; then |
|
896 $2JAVA_BASE_LDFLAGS="${$2JAVA_BASE_LDFLAGS} \ |
|
897 -libpath:${OUTPUTDIR}/support/modules_libs/java.base" |
|
898 $2JDKLIB_LIBS="" |
933 $2JDKLIB_LIBS="" |
899 else |
934 else |
900 $2JAVA_BASE_LDFLAGS="${$2JAVA_BASE_LDFLAGS} \ |
|
901 -L\$(SUPPORT_OUTPUTDIR)/modules_libs/java.base" |
|
902 |
|
903 if test "x$1" = "xTARGET"; then |
|
904 # On some platforms (mac) the linker warns about non existing -L dirs. |
|
905 # For any of the variants server, client or minimal, the dir matches the |
|
906 # variant name. The "main" variant should be used for linking. For the |
|
907 # rest, the dir is just server. |
|
908 if HOTSPOT_CHECK_JVM_VARIANT(server) || HOTSPOT_CHECK_JVM_VARIANT(client) \ |
|
909 || HOTSPOT_CHECK_JVM_VARIANT(minimal); then |
|
910 $2JAVA_BASE_LDFLAGS="${$2JAVA_BASE_LDFLAGS} \ |
|
911 -L\$(SUPPORT_OUTPUTDIR)/modules_libs/java.base/$JVM_VARIANT_MAIN" |
|
912 else |
|
913 $2JAVA_BASE_LDFLAGS="${$2JAVA_BASE_LDFLAGS} \ |
|
914 -L\$(SUPPORT_OUTPUTDIR)/modules_libs/java.base/server" |
|
915 fi |
|
916 elif test "x$1" = "xBUILD"; then |
|
917 # When building a buildjdk, it's always only the server variant |
|
918 $2JAVA_BASE_LDFLAGS="${$2JAVA_BASE_LDFLAGS} \ |
|
919 -L\$(SUPPORT_OUTPUTDIR)/modules_libs/java.base/server" |
|
920 fi |
|
921 |
|
922 $2JDKLIB_LIBS="-ljava -ljvm" |
935 $2JDKLIB_LIBS="-ljava -ljvm" |
923 if test "x$TOOLCHAIN_TYPE" = xsolstudio; then |
936 if test "x$TOOLCHAIN_TYPE" = xsolstudio; then |
924 $2JDKLIB_LIBS="[$]$2JDKLIB_LIBS -lc" |
937 $2JDKLIB_LIBS="[$]$2JDKLIB_LIBS -lc" |
925 fi |
938 fi |
926 |
939 fi |
927 fi |
|
928 |
|
929 $2LDFLAGS_JDKLIB="${$2LDFLAGS_JDKLIB} ${$2JAVA_BASE_LDFLAGS}" |
|
930 |
940 |
931 # Set $2JVM_LIBS (per os) |
941 # Set $2JVM_LIBS (per os) |
932 if test "x$FLAGS_OS" = xlinux; then |
942 if test "x$FLAGS_OS" = xlinux; then |
933 $2JVM_LIBS="[$]$2JVM_LIBS -lm -ldl -lpthread" |
943 $2JVM_LIBS="[$]$2JVM_LIBS -lm -ldl -lpthread" |
934 elif test "x$FLAGS_OS" = xsolaris; then |
944 elif test "x$FLAGS_OS" = xsolaris; then |