make/autoconf/flags.m4
branchihse-cflags-rewrite-branch
changeset 56150 37625ab20ec7
parent 56149 0a4dbc2c7ed1
child 56153 13a257673a61
equal deleted inserted replaced
56149:0a4dbc2c7ed1 56150:37625ab20ec7
    20 #
    20 #
    21 # Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
    21 # Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
    22 # or visit www.oracle.com if you need additional information or have any
    22 # or visit www.oracle.com if you need additional information or have any
    23 # questions.
    23 # questions.
    24 #
    24 #
       
    25 
       
    26 m4_include([flags-ldflags.m4])
    25 
    27 
    26 ################################################################################
    28 ################################################################################
    27 #
    29 #
    28 # Setup ABI profile (for arm)
    30 # Setup ABI profile (for arm)
    29 #
    31 #
   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