365 if test "x$LIBS" = "x-lrt "; then |
367 if test "x$LIBS" = "x-lrt "; then |
366 CLOCK_GETTIME_IN_LIBRT=true |
368 CLOCK_GETTIME_IN_LIBRT=true |
367 fi |
369 fi |
368 LIBS="$save_LIBS" |
370 LIBS="$save_LIBS" |
369 |
371 |
370 ### LINKER |
372 FLAGS_SETUP_LINKER_FLAGS_FOR_JDK |
371 ### COMMON LINKER FLAGS |
|
372 FLAGS_SETUP_LINKER_FLAGS_FOR_JDK_HELPER |
|
373 |
|
374 # TARGET CHAIN |
|
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 TARGET_JVM_VARIANT_PATH=$JVM_VARIANT_MAIN |
|
382 else |
|
383 TARGET_JVM_VARIANT_PATH=server |
|
384 fi |
|
385 FLAGS_SETUP_LINKER_FLAGS_FOR_JDK_CPU_DEP([TARGET]) |
|
386 |
|
387 # BUILD CHAIN |
|
388 |
|
389 # When building a buildjdk, it's always only the server variant |
|
390 BUILD_JVM_VARIANT_PATH=server |
|
391 |
|
392 FLAGS_SETUP_LINKER_FLAGS_FOR_JDK_CPU_DEP([BUILD], [OPENJDK_BUILD_]) |
|
393 |
|
394 LDFLAGS_TESTLIB="$LDFLAGS_JDKLIB" |
|
395 LDFLAGS_TESTEXE="$LDFLAGS_JDKEXE ${TARGET_LDFLAGS_JDK_LIBPATH}" |
|
396 AC_SUBST(LDFLAGS_TESTLIB) |
|
397 AC_SUBST(LDFLAGS_TESTEXE) |
|
398 |
|
399 |
|
400 |
373 |
401 ### CFLAGS |
374 ### CFLAGS |
402 |
375 |
403 FLAGS_OS=OPENJDK_TARGET_OS |
376 FLAGS_OS=OPENJDK_TARGET_OS |
404 FLAGS_OS_TYPE=OPENJDK_TARGET_OS_TYPE |
377 FLAGS_OS_TYPE=OPENJDK_TARGET_OS_TYPE |
853 AC_SUBST($2JDKLIB_LIBS) |
826 AC_SUBST($2JDKLIB_LIBS) |
854 AC_SUBST($2JDKEXE_LIBS) |
827 AC_SUBST($2JDKEXE_LIBS) |
855 AC_SUBST($2JVM_LIBS) |
828 AC_SUBST($2JVM_LIBS) |
856 |
829 |
857 ]) |
830 ]) |
858 |
|
859 ############## LINKER ############################ |
|
860 |
|
861 # CPU independent |
|
862 AC_DEFUN([FLAGS_SETUP_LINKER_FLAGS_FOR_JDK_HELPER], |
|
863 [ |
|
864 # BASIC_LDFLAGS (per toolchain) |
|
865 if test "x$TOOLCHAIN_TYPE" = xgcc; then |
|
866 # If this is a --hash-style=gnu system, use --hash-style=both, why? |
|
867 # We have previously set HAS_GNU_HASH if this is the case |
|
868 if test -n "$HAS_GNU_HASH"; then |
|
869 BASIC_LDFLAGS="-Wl,--hash-style=both" |
|
870 LIBJSIG_HASHSTYLE_LDFLAGS="-Wl,--hash-style=both" |
|
871 fi |
|
872 |
|
873 # And since we now know that the linker is gnu, then add -z defs, to forbid |
|
874 # undefined symbols in object files. |
|
875 BASIC_LDFLAGS="$BASIC_LDFLAGS -Wl,-z,defs" |
|
876 |
|
877 BASIC_LDFLAGS_JVM_ONLY="-Wl,-z,noexecstack -Wl,-O1" |
|
878 |
|
879 BASIC_LDFLAGS_JDK_LIB_ONLY="-Wl,-z,noexecstack" |
|
880 LIBJSIG_NOEXECSTACK_LDFLAGS="-Wl,-z,noexecstack" |
|
881 |
|
882 |
|
883 if test "x$HAS_LINKER_RELRO" = "xtrue"; then |
|
884 BASIC_LDFLAGS_JVM_ONLY="$BASIC_LDFLAGS_JVM_ONLY $LINKER_RELRO_FLAG" |
|
885 fi |
|
886 |
|
887 elif test "x$TOOLCHAIN_TYPE" = xclang; then |
|
888 BASIC_LDFLAGS_JVM_ONLY="-mno-omit-leaf-frame-pointer -mstack-alignment=16 -stdlib=libstdc++ -fPIC" |
|
889 elif test "x$TOOLCHAIN_TYPE" = xsolstudio; then |
|
890 BASIC_LDFLAGS="-Wl,-z,defs" |
|
891 BASIC_LDFLAGS_ONLYCXX="-norunpath" |
|
892 BASIC_LDFLAGS_ONLYCXX_JDK_ONLY="-xnolib" |
|
893 |
|
894 BASIC_LDFLAGS_JDK_ONLY="-ztext" |
|
895 BASIC_LDFLAGS_JVM_ONLY="-library=%none -mt -z noversion" |
|
896 elif test "x$TOOLCHAIN_TYPE" = xxlc; then |
|
897 BASIC_LDFLAGS="-b64 -brtl -bnolibpath -bexpall -bernotok -btextpsize:64K -bdatapsize:64K -bstackpsize:64K" |
|
898 BASIC_LDFLAGS_JVM_ONLY="-Wl,-lC_r" |
|
899 elif test "x$TOOLCHAIN_TYPE" = xmicrosoft; then |
|
900 BASIC_LDFLAGS="-nologo -opt:ref" |
|
901 BASIC_LDFLAGS_JDK_ONLY="-incremental:no" |
|
902 BASIC_LDFLAGS_JVM_ONLY="-opt:icf,8 -subsystem:windows -base:0x8000000" |
|
903 fi |
|
904 |
|
905 # OS_LDFLAGS (per toolchain) |
|
906 if test "x$TOOLCHAIN_TYPE" = xclang || test "x$TOOLCHAIN_TYPE" = xgcc; then |
|
907 if test "x$OPENJDK_TARGET_OS" = xmacosx; then |
|
908 # Assume clang or gcc. |
|
909 # FIXME: We should really generalize SET_SHARED_LIBRARY_ORIGIN instead. |
|
910 OS_LDFLAGS_JVM_ONLY="-Wl,-rpath,@loader_path/. -Wl,-rpath,@loader_path/.." |
|
911 OS_LDFLAGS_JDK_ONLY="-mmacosx-version-min=\$(MACOSX_VERSION_MIN)" |
|
912 fi |
|
913 fi |
|
914 |
|
915 # DEBUGLEVEL_LDFLAGS (per toolchain) |
|
916 if test "x$TOOLCHAIN_TYPE" = xgcc; then |
|
917 if test "x$OPENJDK_TARGET_OS" = xlinux; then |
|
918 if test x$DEBUG_LEVEL = xrelease; then |
|
919 DEBUGLEVEL_LDFLAGS_JDK_ONLY="$DEBUGLEVEL_LDFLAGS_JDK_ONLY -Wl,-O1" |
|
920 else |
|
921 # mark relocations read only on (fast/slow) debug builds |
|
922 if test "x$HAS_LINKER_RELRO" = "xtrue"; then |
|
923 DEBUGLEVEL_LDFLAGS_JDK_ONLY="$LINKER_RELRO_FLAG" |
|
924 fi |
|
925 fi |
|
926 if test x$DEBUG_LEVEL = xslowdebug; then |
|
927 if test "x$HAS_LINKER_NOW" = "xtrue"; then |
|
928 # do relocations at load |
|
929 DEBUGLEVEL_LDFLAGS="$LINKER_NOW_FLAG" |
|
930 fi |
|
931 fi |
|
932 fi |
|
933 elif test "x$TOOLCHAIN_TYPE" = xxlc; then |
|
934 # We need '-qminimaltoc' or '-qpic=large -bbigtoc' if the TOC overflows. |
|
935 # Hotspot now overflows its 64K TOC (currently only for debug), |
|
936 # so we build with '-qpic=large -bbigtoc'. |
|
937 if test "x$DEBUG_LEVEL" != xrelease; then |
|
938 DEBUGLEVEL_LDFLAGS_JVM_ONLY="$DEBUGLEVEL_LDFLAGS_JVM_ONLY -bbigtoc" |
|
939 fi |
|
940 fi |
|
941 |
|
942 # EXECUTABLE_LDFLAGS (per toolchain) |
|
943 if test "x$TOOLCHAIN_TYPE" = xgcc; then |
|
944 EXECUTABLE_LDFLAGS="$EXECUTABLE_LDFLAGS -Wl,--allow-shlib-undefined" |
|
945 fi |
|
946 |
|
947 # EXPORT to old api |
|
948 LDFLAGS_CXX_JDK="$BASIC_LDFLAGS_ONLYCXX $BASIC_LDFLAGS_ONLYCXX_JDK_ONLY" |
|
949 AC_SUBST(LDFLAGS_CXX_JDK) |
|
950 AC_SUBST(LIBJSIG_HASHSTYLE_LDFLAGS) |
|
951 AC_SUBST(LIBJSIG_NOEXECSTACK_LDFLAGS) |
|
952 ]) |
|
953 |
|
954 ################################################################################ |
|
955 # $1 - Either BUILD or TARGET to pick the correct OS/CPU variables to check |
|
956 # conditionals against. |
|
957 # $2 - Optional prefix for each variable defined. |
|
958 AC_DEFUN([FLAGS_SETUP_LINKER_FLAGS_FOR_JDK_CPU_DEP], |
|
959 [ |
|
960 # CPU_LDFLAGS (per toolchain) |
|
961 # These can differ between TARGET and BUILD. |
|
962 if test "x$TOOLCHAIN_TYPE" = xgcc; then |
|
963 if test "x${OPENJDK_$1_CPU}" = xx86; then |
|
964 $1_CPU_LDFLAGS_JVM_ONLY="-march=i586" |
|
965 fi |
|
966 elif test "x$TOOLCHAIN_TYPE" = xsolstudio; then |
|
967 if test "x${OPENJDK_$1_CPU}" = "xsparcv9"; then |
|
968 $1_CPU_LDFLAGS_JVM_ONLY="-xarch=sparc" |
|
969 fi |
|
970 elif test "x$TOOLCHAIN_TYPE" = xmicrosoft; then |
|
971 if test "x${OPENJDK_$1_CPU}" = "xx86"; then |
|
972 $1_CPU_LDFLAGS="-safeseh" |
|
973 # NOTE: Old build added -machine. Probably not needed. |
|
974 $1_CPU_LDFLAGS_JVM_ONLY="-machine:I386" |
|
975 LDFLAGS_STACK_SIZE=327680 |
|
976 else |
|
977 $1_CPU_LDFLAGS_JVM_ONLY="-machine:AMD64" |
|
978 LDFLAGS_STACK_SIZE=1048576 |
|
979 fi |
|
980 $1_CPU_EXECUTABLE_LDFLAGS="-stack:$LDFLAGS_STACK_SIZE" |
|
981 fi |
|
982 |
|
983 # JVM_VARIANT_PATH depends on if this is build or target... |
|
984 if test "x$TOOLCHAIN_TYPE" = xmicrosoft; then |
|
985 $1_LDFLAGS_JDK_LIBPATH="-libpath:${OUTPUTDIR}/support/modules_libs/java.base" |
|
986 else |
|
987 $1_LDFLAGS_JDK_LIBPATH="-L\$(SUPPORT_OUTPUTDIR)/modules_libs/java.base \ |
|
988 -L\$(SUPPORT_OUTPUTDIR)/modules_libs/java.base/${$1_JVM_VARIANT_PATH}" |
|
989 fi |
|
990 |
|
991 # Export to old API, prefix with $2 if present |
|
992 LDFLAGS_JDK_COMMON="$BASIC_LDFLAGS $BASIC_LDFLAGS_JDK_ONLY $OS_LDFLAGS_JDK_ONLY $DEBUGLEVEL_LDFLAGS_JDK_ONLY" |
|
993 $2LDFLAGS_JDKLIB="$LDFLAGS_JDK_COMMON $BASIC_LDFLAGS_JDK_LIB_ONLY ${$1_LDFLAGS_JDK_LIBPATH}" |
|
994 $2LDFLAGS_JDKEXE="$LDFLAGS_JDK_COMMON $EXECUTABLE_LDFLAGS ${$1_CPU_EXECUTABLE_LDFLAGS}" |
|
995 |
|
996 $2JVM_LDFLAGS="$BASIC_LDFLAGS $BASIC_LDFLAGS_JVM_ONLY $OS_LDFLAGS_JVM_ONLY \ |
|
997 $DEBUGLEVEL_LDFLAGS $DEBUGLEVEL_LDFLAGS_JVM_ONLY $BASIC_LDFLAGS_ONLYCXX \ |
|
998 ${$1_CPU_LDFLAGS} ${$1_CPU_LDFLAGS_JVM_ONLY}" |
|
999 |
|
1000 AC_SUBST($2LDFLAGS_JDKLIB) |
|
1001 AC_SUBST($2LDFLAGS_JDKEXE) |
|
1002 |
|
1003 AC_SUBST($2JVM_LDFLAGS) |
|
1004 ]) |
|
1005 |
|
1006 |
831 |
1007 # FLAGS_C_COMPILER_CHECK_ARGUMENTS(ARGUMENT: [ARGUMENT], IF_TRUE: [RUN-IF-TRUE], |
832 # FLAGS_C_COMPILER_CHECK_ARGUMENTS(ARGUMENT: [ARGUMENT], IF_TRUE: [RUN-IF-TRUE], |
1008 # IF_FALSE: [RUN-IF-FALSE]) |
833 # IF_FALSE: [RUN-IF-FALSE]) |
1009 # ------------------------------------------------------------ |
834 # ------------------------------------------------------------ |
1010 # Check that the C compiler supports an argument |
835 # Check that the C compiler supports an argument |