flags.m4 revision 1326:39ee0ee4f890
16059Samurai# 26059Samurai# Copyright (c) 2011, 2014, Oracle and/or its affiliates. All rights reserved. 36059Samurai# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 46059Samurai# 56059Samurai# This code is free software; you can redistribute it and/or modify it 66059Samurai# under the terms of the GNU General Public License version 2 only, as 76059Samurai# published by the Free Software Foundation. Oracle designates this 86059Samurai# particular file as subject to the "Classpath" exception as provided 96059Samurai# by Oracle in the LICENSE file that accompanied this code. 106059Samurai# 116059Samurai# This code is distributed in the hope that it will be useful, but WITHOUT 126059Samurai# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 136059Samurai# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 146059Samurai# version 2 for more details (a copy is included in the LICENSE file that 156059Samurai# accompanied this code). 166059Samurai# 176059Samurai# You should have received a copy of the GNU General Public License version 186059Samurai# 2 along with this work; if not, write to the Free Software Foundation, 196059Samurai# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 2046828Sbrian# 218857Srgrimes# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 226059Samurai# or visit www.oracle.com if you need additional information or have any 236059Samurai# questions. 246059Samurai# 2528679Sbrian 2643313SbrianAC_DEFUN_ONCE([FLAGS_SETUP_INIT_FLAGS], 276059Samurai[ 286059Samurai # Option used to tell the compiler whether to create 32- or 64-bit executables 296059Samurai if test "x$TOOLCHAIN_TYPE" = xxlc; then 306059Samurai COMPILER_TARGET_BITS_FLAG="-q" 3136285Sbrian else 3230715Sbrian COMPILER_TARGET_BITS_FLAG="-m" 3330715Sbrian fi 3430715Sbrian AC_SUBST(COMPILER_TARGET_BITS_FLAG) 3536285Sbrian 3630715Sbrian # FIXME: figure out if we should select AR flags depending on OS or toolchain. 3746686Sbrian if test "x$OPENJDK_TARGET_OS" = xmacosx; then 3837009Sbrian ARFLAGS="-r" 3931343Sbrian elif test "x$OPENJDK_TARGET_OS" = xaix; then 4030715Sbrian ARFLAGS="-X64" 4130715Sbrian elif test "x$OPENJDK_TARGET_OS" = xwindows; then 426059Samurai # lib.exe is used as AR to create static libraries. 4336285Sbrian ARFLAGS="-nologo -NODEFAULTLIB:MSVCRT" 4436285Sbrian else 4536285Sbrian ARFLAGS="" 4636285Sbrian fi 4736285Sbrian AC_SUBST(ARFLAGS) 4836285Sbrian 4938557Sbrian ## Setup strip. 5038557Sbrian # FIXME: should this really be per platform, or should it be per toolchain type? 5136285Sbrian # strip is not provided by clang or solstudio; so guessing platform makes most sense. 5236285Sbrian # FIXME: we should really only export STRIPFLAGS from here, not POST_STRIP_CMD. 5336285Sbrian if test "x$OPENJDK_TARGET_OS" = xlinux; then 5436285Sbrian STRIPFLAGS="-g" 5536285Sbrian elif test "x$OPENJDK_TARGET_OS" = xsolaris; then 5636285Sbrian STRIPFLAGS="-x" 5743313Sbrian elif test "x$OPENJDK_TARGET_OS" = xmacosx; then 5843313Sbrian STRIPFLAGS="-S" 5943313Sbrian elif test "x$OPENJDK_TARGET_OS" = xaix; then 6036285Sbrian STRIPFLAGS="-X32_64" 616059Samurai fi 626059Samurai 6346828Sbrian if test "x$OPENJDK_TARGET_OS" != xwindows; then 646059Samurai POST_STRIP_CMD="$STRIP $STRIPFLAGS" 6528679Sbrian fi 6628679Sbrian AC_SUBST(POST_STRIP_CMD) 676059Samurai 6831962Sbrian if test "x$OPENJDK_TARGET_OS" = xsolaris; then 6930187Sbrian # FIXME: break out into MCSFLAGS 7028679Sbrian POST_MCS_CMD="$MCS -d -a \"JDK $FULL_VERSION\"" 7128679Sbrian fi 7228679Sbrian AC_SUBST(POST_MCS_CMD) 7330187Sbrian 7428679Sbrian if test "x$TOOLCHAIN_TYPE" = xmicrosoft; then 7528679Sbrian CC_OUT_OPTION=-Fo 7628679Sbrian EXE_OUT_OPTION=-out: 7728679Sbrian LD_OUT_OPTION=-out: 7828679Sbrian AR_OUT_OPTION=-out: 796059Samurai else 806059Samurai # The option used to specify the target .o,.a or .so file. 816059Samurai # When compiling, how to specify the to be created object file. 826059Samurai CC_OUT_OPTION='-o$(SPACE)' 8337189Sbrian # When linking, how to specify the to be created executable. 846059Samurai EXE_OUT_OPTION='-o$(SPACE)' 856059Samurai # When linking, how to specify the to be created dynamically linkable library. 866059Samurai LD_OUT_OPTION='-o$(SPACE)' 876059Samurai # When archiving, how to specify the to be create static archive for object files. 886059Samurai AR_OUT_OPTION='rcs$(SPACE)' 896059Samurai fi 906059Samurai AC_SUBST(CC_OUT_OPTION) 916059Samurai AC_SUBST(EXE_OUT_OPTION) 926059Samurai AC_SUBST(LD_OUT_OPTION) 936059Samurai AC_SUBST(AR_OUT_OPTION) 946059Samurai 956059Samurai # On Windows, we need to set RC flags. 966059Samurai if test "x$TOOLCHAIN_TYPE" = xmicrosoft; then 976059Samurai RC_FLAGS="-nologo -l0x409" 986059Samurai if test "x$VARIANT" = xOPT; then 996059Samurai RC_FLAGS="$RC_FLAGS -DNDEBUG" 1006059Samurai fi 1016059Samurai 1026059Samurai # The version variables used to create RC_FLAGS may be overridden 1036059Samurai # in a custom configure script, or possibly the command line. 1046059Samurai # Let those variables be expanded at make time in spec.gmk. 1056059Samurai # The \$ are escaped to the shell, and the $(...) variables 1066059Samurai # are evaluated by make. 1076059Samurai RC_FLAGS="$RC_FLAGS \ 1086059Samurai -D\"JDK_BUILD_ID=\$(FULL_VERSION)\" \ 1096059Samurai -D\"JDK_COMPANY=\$(COMPANY_NAME)\" \ 1106059Samurai -D\"JDK_COMPONENT=\$(PRODUCT_NAME) \$(JDK_RC_PLATFORM_NAME) binary\" \ 1116059Samurai -D\"JDK_VER=\$(JDK_MINOR_VERSION).\$(JDK_MICRO_VERSION).\$(if \$(JDK_UPDATE_VERSION),\$(JDK_UPDATE_VERSION),0).\$(COOKED_BUILD_NUMBER)\" \ 11237189Sbrian -D\"JDK_COPYRIGHT=Copyright \xA9 $COPYRIGHT_YEAR\" \ 1136059Samurai -D\"JDK_NAME=\$(PRODUCT_NAME) \$(JDK_RC_PLATFORM_NAME) \$(JDK_MINOR_VERSION) \$(JDK_UPDATE_META_TAG)\" \ 1146059Samurai -D\"JDK_FVER=\$(JDK_MINOR_VERSION),\$(JDK_MICRO_VERSION),\$(if \$(JDK_UPDATE_VERSION),\$(JDK_UPDATE_VERSION),0),\$(COOKED_BUILD_NUMBER)\"" 1156059Samurai fi 1166059Samurai AC_SUBST(RC_FLAGS) 1176059Samurai 1186059Samurai if test "x$TOOLCHAIN_TYPE" = xmicrosoft; then 1196059Samurai # silence copyright notice and other headers. 1206059Samurai COMMON_CCXXFLAGS="$COMMON_CCXXFLAGS -nologo" 12137189Sbrian fi 1226059Samurai 1236059Samurai if test "x$SYSROOT" != "x"; then 1246059Samurai if test "x$TOOLCHAIN_TYPE" = xsolstudio; then 1256059Samurai if test "x$OPENJDK_TARGET_OS" = xsolaris; then 1266059Samurai # Solaris Studio does not have a concept of sysroot. Instead we must 1276059Samurai # make sure the default include and lib dirs are appended to each 1286059Samurai # compile and link command line. 1296059Samurai SYSROOT_CFLAGS="-I$SYSROOT/usr/include" 13037189Sbrian SYSROOT_LDFLAGS="-L$SYSROOT/usr/lib$OPENJDK_TARGET_CPU_ISADIR \ 1316059Samurai -L$SYSROOT/lib$OPENJDK_TARGET_CPU_ISADIR \ 1326059Samurai -L$SYSROOT/usr/ccs/lib$OPENJDK_TARGET_CPU_ISADIR" 1336059Samurai fi 1346059Samurai elif test "x$OPENJDK_TARGET_OS" = xmacosx; then 1356059Samurai # Apple only wants -isysroot <path>, but we also need -iframework<path>/System/Library/Frameworks 13628679Sbrian SYSROOT_CFLAGS="-isysroot \"$SYSROOT\" -iframework\"$SYSROOT/System/Library/Frameworks\"" 13728679Sbrian SYSROOT_LDFLAGS=$SYSROOT_CFLAGS 13836285Sbrian elif test "x$TOOLCHAIN_TYPE" = xgcc; then 13936285Sbrian SYSROOT_CFLAGS="--sysroot=$SYSROOT" 14028679Sbrian SYSROOT_LDFLAGS="--sysroot=$SYSROOT" 1416059Samurai elif test "x$TOOLCHAIN_TYPE" = xclang; then 14228679Sbrian SYSROOT_CFLAGS="-isysroot \"$SYSROOT\"" 14328679Sbrian SYSROOT_LDFLAGS="-isysroot \"$SYSROOT\"" 14428679Sbrian fi 14528679Sbrian # Propagate the sysroot args to hotspot 14628679Sbrian LEGACY_EXTRA_CFLAGS="$LEGACY_EXTRA_CFLAGS $SYSROOT_CFLAGS" 14728679Sbrian LEGACY_EXTRA_CXXFLAGS="$LEGACY_EXTRA_CXXFLAGS $SYSROOT_CFLAGS" 14828679Sbrian LEGACY_EXTRA_LDFLAGS="$LEGACY_EXTRA_LDFLAGS $SYSROOT_LDFLAGS" 14928679Sbrian fi 1506059Samurai 15128679Sbrian # These always need to be set, or we can't find the frameworks embedded in JavaVM.framework 15228679Sbrian # set this here so it doesn't have to be peppered throughout the forest 15328679Sbrian if test "x$OPENJDK_TARGET_OS" = xmacosx; then 15428679Sbrian SYSROOT_CFLAGS="$SYSROOT_CFLAGS -F\"$SYSROOT/System/Library/Frameworks/JavaVM.framework/Frameworks\"" 15528679Sbrian SYSROOT_LDFLAGS="$SYSROOT_LDFLAGS -F\"$SYSROOT/System/Library/Frameworks/JavaVM.framework/Frameworks\"" 15628679Sbrian fi 15736285Sbrian 15828679Sbrian AC_SUBST(SYSROOT_CFLAGS) 15936285Sbrian AC_SUBST(SYSROOT_LDFLAGS) 16028679Sbrian]) 16128679Sbrian 16228679SbrianAC_DEFUN_ONCE([FLAGS_SETUP_COMPILER_FLAGS_FOR_LIBS], 16328679Sbrian[ 16436285Sbrian ############################################################################### 16536285Sbrian # 16628679Sbrian # How to compile shared libraries. 16728679Sbrian # 1686059Samurai 16928679Sbrian if test "x$TOOLCHAIN_TYPE" = xgcc; then 17028679Sbrian PICFLAG="-fPIC" 17128679Sbrian C_FLAG_REORDER='' 17228679Sbrian CXX_FLAG_REORDER='' 17328679Sbrian 17428679Sbrian if test "x$OPENJDK_TARGET_OS" = xmacosx; then 17528679Sbrian # Linking is different on MacOSX 17636285Sbrian SHARED_LIBRARY_FLAGS="-dynamiclib -compatibility_version 1.0.0 -current_version 1.0.0 $PICFLAG" 17736285Sbrian SET_EXECUTABLE_ORIGIN='-Xlinker -rpath -Xlinker @loader_path/.' 17836285Sbrian SET_SHARED_LIBRARY_ORIGIN="$SET_EXECUTABLE_ORIGIN" 17936285Sbrian SET_SHARED_LIBRARY_NAME='-Xlinker -install_name -Xlinker @rpath/[$]1' 1806059Samurai SET_SHARED_LIBRARY_MAPFILE='' 18128679Sbrian else 18228679Sbrian # Default works for linux, might work on other platforms as well. 18328679Sbrian SHARED_LIBRARY_FLAGS='-shared' 18428679Sbrian SET_EXECUTABLE_ORIGIN='-Xlinker -rpath -Xlinker \$$$$ORIGIN[$]1' 18528679Sbrian SET_SHARED_LIBRARY_ORIGIN="-Xlinker -z -Xlinker origin $SET_EXECUTABLE_ORIGIN" 18628679Sbrian SET_SHARED_LIBRARY_NAME='-Xlinker -soname=[$]1' 18728679Sbrian SET_SHARED_LIBRARY_MAPFILE='-Xlinker -version-script=[$]1' 18828679Sbrian fi 18928679Sbrian elif test "x$TOOLCHAIN_TYPE" = xclang; then 19028679Sbrian PICFLAG='' 19128679Sbrian C_FLAG_REORDER='' 19228679Sbrian CXX_FLAG_REORDER='' 1936059Samurai 19428679Sbrian if test "x$OPENJDK_TARGET_OS" = xmacosx; then 19528679Sbrian # Linking is different on MacOSX 19628679Sbrian SHARED_LIBRARY_FLAGS="-dynamiclib -compatibility_version 1.0.0 -current_version 1.0.0 $PICFLAG" 19736285Sbrian SET_EXECUTABLE_ORIGIN='-Xlinker -rpath -Xlinker @loader_path/.' 19836285Sbrian SET_SHARED_LIBRARY_ORIGIN="$SET_EXECUTABLE_ORIGIN" 19936285Sbrian SET_SHARED_LIBRARY_NAME='-Xlinker -install_name -Xlinker @rpath/[$]1' 20036285Sbrian SET_SHARED_LIBRARY_MAPFILE='' 20128679Sbrian else 20228679Sbrian # Default works for linux, might work on other platforms as well. 2036059Samurai SHARED_LIBRARY_FLAGS='-shared' 20428679Sbrian SET_EXECUTABLE_ORIGIN='-Xlinker -rpath -Xlinker \$$$$ORIGIN[$]1' 20528679Sbrian SET_SHARED_LIBRARY_ORIGIN="-Xlinker -z -Xlinker origin $SET_EXECUTABLE_ORIGIN" 20628679Sbrian SET_SHARED_LIBRARY_NAME='-Xlinker -soname=[$]1' 20728679Sbrian SET_SHARED_LIBRARY_MAPFILE='-Xlinker -version-script=[$]1' 20828679Sbrian fi 20928679Sbrian elif test "x$TOOLCHAIN_TYPE" = xsolstudio; then 21028679Sbrian PICFLAG="-KPIC" 21136285Sbrian C_FLAG_REORDER='-xF' 21228679Sbrian CXX_FLAG_REORDER='-xF' 2136059Samurai SHARED_LIBRARY_FLAGS="-G" 21428679Sbrian SET_EXECUTABLE_ORIGIN='-R\$$$$ORIGIN[$]1' 21528679Sbrian SET_SHARED_LIBRARY_ORIGIN="$SET_EXECUTABLE_ORIGIN" 21628679Sbrian SET_SHARED_LIBRARY_NAME='' 21728679Sbrian SET_SHARED_LIBRARY_MAPFILE='-M[$]1' 21828679Sbrian elif test "x$TOOLCHAIN_TYPE" = xxlc; then 2196059Samurai PICFLAG="-qpic=large" 22028679Sbrian C_FLAG_REORDER='' 2216059Samurai CXX_FLAG_REORDER='' 22228679Sbrian SHARED_LIBRARY_FLAGS="-qmkshrobj" 22328679Sbrian SET_EXECUTABLE_ORIGIN="" 22428679Sbrian SET_SHARED_LIBRARY_ORIGIN='' 22528679Sbrian SET_SHARED_LIBRARY_NAME='' 22628679Sbrian SET_SHARED_LIBRARY_MAPFILE='' 22728679Sbrian elif test "x$TOOLCHAIN_TYPE" = xmicrosoft; then 22828679Sbrian PICFLAG="" 22928679Sbrian C_FLAG_REORDER='' 23028679Sbrian CXX_FLAG_REORDER='' 23128679Sbrian SHARED_LIBRARY_FLAGS="-LD" 23228679Sbrian SET_EXECUTABLE_ORIGIN='' 2336059Samurai SET_SHARED_LIBRARY_ORIGIN='' 23428679Sbrian SET_SHARED_LIBRARY_NAME='' 23528679Sbrian SET_SHARED_LIBRARY_MAPFILE='' 23628679Sbrian fi 23728679Sbrian 23828679Sbrian AC_SUBST(C_FLAG_REORDER) 23928679Sbrian AC_SUBST(CXX_FLAG_REORDER) 24028679Sbrian AC_SUBST(SHARED_LIBRARY_FLAGS) 24128679Sbrian AC_SUBST(SET_EXECUTABLE_ORIGIN) 24228679Sbrian AC_SUBST(SET_SHARED_LIBRARY_ORIGIN) 24328679Sbrian AC_SUBST(SET_SHARED_LIBRARY_NAME) 24428679Sbrian AC_SUBST(SET_SHARED_LIBRARY_MAPFILE) 24528679Sbrian 24628679Sbrian if test "x$OPENJDK_TARGET_OS" = xsolaris; then 24728679Sbrian CFLAGS_JDK="${CFLAGS_JDK} -D__solaris__" 24828679Sbrian CXXFLAGS_JDK="${CXXFLAGS_JDK} -D__solaris__" 24928679Sbrian CFLAGS_JDKLIB_EXTRA='-xstrconst' 2506059Samurai fi 25128679Sbrian # The (cross) compiler is now configured, we can now test capabilities 25228679Sbrian # of the target platform. 25328679Sbrian]) 25428679Sbrian 25528679Sbrian# Documentation on common flags used for solstudio in HIGHEST. 25630715Sbrian# 25728679Sbrian# WARNING: Use of OPTIMIZATION_LEVEL=HIGHEST in your Makefile needs to be 25830715Sbrian# done with care, there are some assumptions below that need to 25928679Sbrian# be understood about the use of pointers, and IEEE behavior. 26028679Sbrian# 2616059Samurai# -fns: Use non-standard floating point mode (not IEEE 754) 26228679Sbrian# -fsimple: Do some simplification of floating point arithmetic (not IEEE 754) 26328679Sbrian# -fsingle: Use single precision floating point with 'float' 26428679Sbrian# -xalias_level=basic: Assume memory references via basic pointer types do not alias 26528679Sbrian# (Source with excessing pointer casting and data access with mixed 26628679Sbrian# pointer types are not recommended) 26728679Sbrian# -xbuiltin=%all: Use intrinsic or inline versions for math/std functions 26828679Sbrian# (If you expect perfect errno behavior, do not use this) 26928679Sbrian# -xdepend: Loop data dependency optimizations (need -xO3 or higher) 27028679Sbrian# -xrestrict: Pointer parameters to functions do not overlap 27128679Sbrian# (Similar to -xalias_level=basic usage, but less obvious sometimes. 2726059Samurai# If you pass in multiple pointers to the same data, do not use this) 27328679Sbrian# -xlibmil: Inline some library routines 27428679Sbrian# (If you expect perfect errno behavior, do not use this) 27528679Sbrian# -xlibmopt: Use optimized math routines (CURRENTLY DISABLED) 27628679Sbrian# (If you expect perfect errno behavior, do not use this) 27728679Sbrian# Can cause undefined external on Solaris 8 X86 on __sincos, removing for now 27828679Sbrian 27928679Sbrian # FIXME: this will never happen since sparc != sparcv9, ie 32 bit, which we don't build anymore. 28028679Sbrian # Bug? 28128679Sbrian #if test "x$OPENJDK_TARGET_CPU" = xsparc; then 28228679Sbrian # CFLAGS_JDK="${CFLAGS_JDK} -xmemalign=4s" 28328679Sbrian # CXXFLAGS_JDK="${CXXFLAGS_JDK} -xmemalign=4s" 28428679Sbrian #fi 28528679Sbrian 28628679SbrianAC_DEFUN_ONCE([FLAGS_SETUP_COMPILER_FLAGS_FOR_OPTIMIZATION], 28728679Sbrian[ 28828679Sbrian 28928679Sbrian ############################################################################### 29028679Sbrian # 29128679Sbrian # Setup the opt flags for different compilers 29228679Sbrian # and different operating systems. 29328679Sbrian # 29428679Sbrian 29528679Sbrian # FIXME: this was indirectly the old default, but just inherited. 29628679Sbrian # if test "x$TOOLCHAIN_TYPE" = xmicrosoft; then 29728679Sbrian # C_FLAG_DEPS="-MMD -MF" 29828679Sbrian # fi 29928679Sbrian 30028679Sbrian # Generate make dependency files 30128679Sbrian if test "x$TOOLCHAIN_TYPE" = xgcc; then 3026059Samurai C_FLAG_DEPS="-MMD -MF" 30328679Sbrian elif test "x$TOOLCHAIN_TYPE" = xclang; then 3046059Samurai C_FLAG_DEPS="-MMD -MF" 30528679Sbrian elif test "x$TOOLCHAIN_TYPE" = xsolstudio; then 30628679Sbrian C_FLAG_DEPS="-xMMD -xMF" 30728679Sbrian elif test "x$TOOLCHAIN_TYPE" = xxlc; then 30828679Sbrian C_FLAG_DEPS="-qmakedep=gcc -MF" 30928679Sbrian fi 31028679Sbrian CXX_FLAG_DEPS="$C_FLAG_DEPS" 31128679Sbrian AC_SUBST(C_FLAG_DEPS) 31228679Sbrian AC_SUBST(CXX_FLAG_DEPS) 31328679Sbrian 31428679Sbrian # Debug symbols 3156059Samurai if test "x$TOOLCHAIN_TYPE" = xgcc; then 31628679Sbrian if test "x$OPENJDK_TARGET_CPU_BITS" = "x64" && test "x$DEBUG_LEVEL" = "xfastdebug"; then 3176059Samurai # reduce from default "-g2" option to save space 31828679Sbrian CFLAGS_DEBUG_SYMBOLS="-g1" 31928679Sbrian CXXFLAGS_DEBUG_SYMBOLS="-g1" 3206059Samurai else 32128679Sbrian CFLAGS_DEBUG_SYMBOLS="-g" 32228679Sbrian CXXFLAGS_DEBUG_SYMBOLS="-g" 32328679Sbrian fi 32428679Sbrian elif test "x$TOOLCHAIN_TYPE" = xclang; then 32528679Sbrian CFLAGS_DEBUG_SYMBOLS="-g" 3266059Samurai CXXFLAGS_DEBUG_SYMBOLS="-g" 32728679Sbrian elif test "x$TOOLCHAIN_TYPE" = xsolstudio; then 32828679Sbrian CFLAGS_DEBUG_SYMBOLS="-g -xs" 32928679Sbrian # FIXME: likely a bug, this disables debug symbols rather than enables them 33028679Sbrian CXXFLAGS_DEBUG_SYMBOLS="-g0 -xs" 33128679Sbrian elif test "x$TOOLCHAIN_TYPE" = xxlc; then 33228679Sbrian CFLAGS_DEBUG_SYMBOLS="-g" 33328679Sbrian CXXFLAGS_DEBUG_SYMBOLS="-g" 33428679Sbrian fi 3356059Samurai AC_SUBST(CFLAGS_DEBUG_SYMBOLS) 33628679Sbrian AC_SUBST(CXXFLAGS_DEBUG_SYMBOLS) 33728679Sbrian 33828679Sbrian # bounds, memory and behavior checking options 33928679Sbrian if test "x$TOOLCHAIN_TYPE" = xgcc; then 34028679Sbrian case $DEBUG_LEVEL in 34128679Sbrian release ) 34228679Sbrian # no adjustment 34328679Sbrian ;; 3446059Samurai fastdebug ) 34528679Sbrian # no adjustment 34628679Sbrian ;; 34728679Sbrian slowdebug ) 34828679Sbrian # Add runtime stack smashing and undefined behavior checks 34928679Sbrian CFLAGS_DEBUG_OPTIONS="-fstack-protector-all --param ssp-buffer-size=1" 35028679Sbrian CXXFLAGS_DEBUG_OPTIONS="-fstack-protector-all --param ssp-buffer-size=1" 35128679Sbrian ;; 3526059Samurai esac 35328679Sbrian fi 35428679Sbrian AC_SUBST(CFLAGS_DEBUG_OPTIONS) 35528679Sbrian AC_SUBST(CXXFLAGS_DEBUG_OPTIONS) 35628679Sbrian 35728679Sbrian # Optimization levels 35830715Sbrian if test "x$TOOLCHAIN_TYPE" = xsolstudio; then 3596059Samurai CC_HIGHEST="$CC_HIGHEST -fns -fsimple -fsingle -xbuiltin=%all -xdepend -xrestrict -xlibmil" 36028679Sbrian 36128679Sbrian if test "x$OPENJDK_TARGET_CPU_ARCH" = "xx86"; then 36228679Sbrian # FIXME: seems we always set -xregs=no%frameptr; put it elsewhere more global? 36328679Sbrian C_O_FLAG_HIGHEST="-xO4 -Wu,-O4~yz $CC_HIGHEST -xalias_level=basic -xregs=no%frameptr" 36428679Sbrian C_O_FLAG_HI="-xO4 -Wu,-O4~yz -xregs=no%frameptr" 36528679Sbrian C_O_FLAG_NORM="-xO2 -Wu,-O2~yz -xregs=no%frameptr" 36628679Sbrian C_O_FLAG_DEBUG="-xregs=no%frameptr" 36728679Sbrian C_O_FLAG_NONE="-xregs=no%frameptr" 36828679Sbrian CXX_O_FLAG_HIGHEST="-xO4 -Qoption ube -O4~yz $CC_HIGHEST -xregs=no%frameptr" 36928679Sbrian CXX_O_FLAG_HI="-xO4 -Qoption ube -O4~yz -xregs=no%frameptr" 37028679Sbrian CXX_O_FLAG_NORM="-xO2 -Qoption ube -O2~yz -xregs=no%frameptr" 37128679Sbrian CXX_O_FLAG_DEBUG="-xregs=no%frameptr" 37228679Sbrian CXX_O_FLAG_NONE="-xregs=no%frameptr" 37328679Sbrian if test "x$OPENJDK_TARGET_CPU_BITS" = "x32"; then 37428679Sbrian C_O_FLAG_HIGHEST="$C_O_FLAG_HIGHEST -xchip=pentium" 37528679Sbrian CXX_O_FLAG_HIGHEST="$CXX_O_FLAG_HIGHEST -xchip=pentium" 37630187Sbrian fi 37728679Sbrian elif test "x$OPENJDK_TARGET_CPU_ARCH" = "xsparc"; then 37828679Sbrian C_O_FLAG_HIGHEST="-xO4 -Wc,-Qrm-s -Wc,-Qiselect-T0 $CC_HIGHEST -xalias_level=basic -xprefetch=auto,explicit -xchip=ultra" 37928679Sbrian C_O_FLAG_HI="-xO4 -Wc,-Qrm-s -Wc,-Qiselect-T0" 38030187Sbrian C_O_FLAG_NORM="-xO2 -Wc,-Qrm-s -Wc,-Qiselect-T0" 38128679Sbrian C_O_FLAG_DEBUG="" 38228679Sbrian C_O_FLAG_NONE="" 38328679Sbrian CXX_O_FLAG_HIGHEST="-xO4 -Qoption cg -Qrm-s -Qoption cg -Qiselect-T0 $CC_HIGHEST -xprefetch=auto,explicit -xchip=ultra" 38428679Sbrian CXX_O_FLAG_HI="-xO4 -Qoption cg -Qrm-s -Qoption cg -Qiselect-T0" 38528679Sbrian CXX_O_FLAG_NORM="-xO2 -Qoption cg -Qrm-s -Qoption cg -Qiselect-T0" 38628679Sbrian C_O_FLAG_DEBUG="" 38728679Sbrian CXX_O_FLAG_NONE="" 38828679Sbrian fi 38928679Sbrian else 39028679Sbrian # The remaining toolchains share opt flags between CC and CXX; 39130715Sbrian # setup for C and duplicate afterwards. 39236285Sbrian if test "x$TOOLCHAIN_TYPE" = xgcc; then 39336285Sbrian if test "x$OPENJDK_TARGET_OS" = xmacosx; then 3946059Samurai # On MacOSX we optimize for size, something 39528679Sbrian # we should do for all platforms? 39628679Sbrian C_O_FLAG_HIGHEST="-Os" 39728679Sbrian C_O_FLAG_HI="-Os" 39828679Sbrian C_O_FLAG_NORM="-Os" 39928679Sbrian else 4006059Samurai C_O_FLAG_HIGHEST="-O3" 40130715Sbrian C_O_FLAG_HI="-O3" 40228679Sbrian C_O_FLAG_NORM="-O2" 40328679Sbrian fi 40428679Sbrian C_O_FLAG_DEBUG="-O0" 4056059Samurai C_O_FLAG_NONE="-O0" 4066059Samurai elif test "x$TOOLCHAIN_TYPE" = xclang; then 4076059Samurai if test "x$OPENJDK_TARGET_OS" = xmacosx; then 4086059Samurai # On MacOSX we optimize for size, something 40936960Sbrian # we should do for all platforms? 41036960Sbrian C_O_FLAG_HIGHEST="-Os" 4116059Samurai C_O_FLAG_HI="-Os" 41228679Sbrian C_O_FLAG_NORM="-Os" 41328679Sbrian else 41428679Sbrian C_O_FLAG_HIGHEST="-O3" 41528679Sbrian C_O_FLAG_HI="-O3" 41628679Sbrian C_O_FLAG_NORM="-O2" 4176059Samurai fi 41828679Sbrian C_O_FLAG_DEBUG="-O0" 4196059Samurai C_O_FLAG_NONE="-O0" 42028679Sbrian elif test "x$TOOLCHAIN_TYPE" = xxlc; then 42128679Sbrian C_O_FLAG_HIGHEST="-O3" 42236960Sbrian C_O_FLAG_HI="-O3 -qstrict" 42328679Sbrian C_O_FLAG_NORM="-O2" 42428679Sbrian C_O_FLAG_DEBUG="-qnoopt" 42528679Sbrian C_O_FLAG_NONE="-qnoop" 42628679Sbrian elif test "x$TOOLCHAIN_TYPE" = xmicrosoft; then 4276059Samurai C_O_FLAG_HIGHEST="-O2" 42828679Sbrian C_O_FLAG_HI="-O1" 42928679Sbrian C_O_FLAG_NORM="-O1" 43028679Sbrian C_O_FLAG_DEBUG="-Od" 43128679Sbrian C_O_FLAG_NONE="-Od" 43228679Sbrian fi 43328679Sbrian CXX_O_FLAG_HIGHEST="$C_O_FLAG_HIGHEST" 43428679Sbrian CXX_O_FLAG_HI="$C_O_FLAG_HI" 43528679Sbrian CXX_O_FLAG_NORM="$C_O_FLAG_NORM" 43628679Sbrian CXX_O_FLAG_DEBUG="$C_O_FLAG_DEBUG" 43728679Sbrian CXX_O_FLAG_NONE="$C_O_FLAG_NONE" 43828679Sbrian fi 43930715Sbrian 44030357Sbrian # Adjust optimization flags according to debug level. 44128679Sbrian case $DEBUG_LEVEL in 44236285Sbrian release ) 44336285Sbrian # no adjustment 4446059Samurai ;; 44528679Sbrian fastdebug ) 44628679Sbrian # Not quite so much optimization 4476059Samurai C_O_FLAG_HI="$C_O_FLAG_NORM" 44828679Sbrian CXX_O_FLAG_HI="$CXX_O_FLAG_NORM" 44928679Sbrian ;; 45028679Sbrian slowdebug ) 45145138Sbrian # Disable optimization 45228679Sbrian C_O_FLAG_HIGHEST="$C_O_FLAG_DEBUG" 45336285Sbrian C_O_FLAG_HI="$C_O_FLAG_DEBUG" 45436285Sbrian C_O_FLAG_NORM="$C_O_FLAG_DEBUG" 45528679Sbrian CXX_O_FLAG_HIGHEST="$CXX_O_FLAG_DEBUG" 45636285Sbrian CXX_O_FLAG_HI="$CXX_O_FLAG_DEBUG" 45745138Sbrian CXX_O_FLAG_NORM="$CXX_O_FLAG_DEBUG" 45828679Sbrian ;; 45928679Sbrian esac 46028679Sbrian 46128679Sbrian AC_SUBST(C_O_FLAG_HIGHEST) 46228679Sbrian AC_SUBST(C_O_FLAG_HI) 46346686Sbrian AC_SUBST(C_O_FLAG_NORM) 46428679Sbrian AC_SUBST(C_O_FLAG_DEBUG) 4656059Samurai AC_SUBST(C_O_FLAG_NONE) 46628679Sbrian AC_SUBST(CXX_O_FLAG_HIGHEST) 46728679Sbrian AC_SUBST(CXX_O_FLAG_HI) 46828679Sbrian AC_SUBST(CXX_O_FLAG_NORM) 46928679Sbrian AC_SUBST(CXX_O_FLAG_DEBUG) 47028679Sbrian AC_SUBST(CXX_O_FLAG_NONE) 47128679Sbrian]) 47228679Sbrian 47328679SbrianAC_DEFUN_ONCE([FLAGS_SETUP_COMPILER_FLAGS_FOR_JDK], 47428679Sbrian[ 47536285Sbrian # Special extras... 47636285Sbrian if test "x$TOOLCHAIN_TYPE" = xsolstudio; then 47728679Sbrian if test "x$OPENJDK_TARGET_CPU_ARCH" = "xsparc"; then 47828679Sbrian CFLAGS_JDKLIB_EXTRA="${CFLAGS_JDKLIB_EXTRA} -xregs=no%appl" 47928679Sbrian CXXFLAGS_JDKLIB_EXTRA="${CXXFLAGS_JDKLIB_EXTRA} -xregs=no%appl" 48028679Sbrian fi 48128679Sbrian elif test "x$TOOLCHAIN_TYPE" = xxlc; then 48228679Sbrian LDFLAGS_JDK="${LDFLAGS_JDK} -q64 -brtl -bnolibpath -liconv -bexpall" 48328679Sbrian CFLAGS_JDK="${CFLAGS_JDK} -qchars=signed -q64 -qfullpath -qsaveopt" 48428679Sbrian CXXFLAGS_JDK="${CXXFLAGS_JDK} -qchars=signed -q64 -qfullpath -qsaveopt" 48528679Sbrian fi 48628679Sbrian 48728679Sbrian if test "x$CFLAGS" != "x${ADDED_CFLAGS}"; then 48828679Sbrian AC_MSG_WARN([Ignoring CFLAGS($CFLAGS) found in environment. Use --with-extra-cflags]) 48928679Sbrian fi 49028679Sbrian 49128679Sbrian if test "x$CXXFLAGS" != "x${ADDED_CXXFLAGS}"; then 49228679Sbrian AC_MSG_WARN([Ignoring CXXFLAGS($CXXFLAGS) found in environment. Use --with-extra-cxxflags]) 49328679Sbrian fi 49428679Sbrian 49528679Sbrian if test "x$LDFLAGS" != "x${ADDED_LDFLAGS}"; then 49628679Sbrian AC_MSG_WARN([Ignoring LDFLAGS($LDFLAGS) found in environment. Use --with-extra-ldflags]) 49728679Sbrian fi 49828679Sbrian 49928679Sbrian AC_ARG_WITH(extra-cflags, [AS_HELP_STRING([--with-extra-cflags], 50028679Sbrian [extra flags to be used when compiling jdk c-files])]) 50128679Sbrian 50228679Sbrian AC_ARG_WITH(extra-cxxflags, [AS_HELP_STRING([--with-extra-cxxflags], 50328679Sbrian [extra flags to be used when compiling jdk c++-files])]) 50428679Sbrian 50528679Sbrian AC_ARG_WITH(extra-ldflags, [AS_HELP_STRING([--with-extra-ldflags], 50628679Sbrian [extra flags to be used when linking jdk])]) 50728679Sbrian 50828679Sbrian CFLAGS_JDK="${CFLAGS_JDK} $with_extra_cflags" 50928679Sbrian CXXFLAGS_JDK="${CXXFLAGS_JDK} $with_extra_cxxflags" 51028679Sbrian LDFLAGS_JDK="${LDFLAGS_JDK} $with_extra_ldflags" 51128679Sbrian 51228679Sbrian # Hotspot needs these set in their legacy form 51328679Sbrian LEGACY_EXTRA_CFLAGS="$LEGACY_EXTRA_CFLAGS $with_extra_cflags" 51428679Sbrian LEGACY_EXTRA_CXXFLAGS="$LEGACY_EXTRA_CXXFLAGS $with_extra_cxxflags" 51536285Sbrian LEGACY_EXTRA_LDFLAGS="$LEGACY_EXTRA_LDFLAGS $with_extra_ldflags" 51628679Sbrian 51728679Sbrian AC_SUBST(LEGACY_EXTRA_CFLAGS) 5186059Samurai AC_SUBST(LEGACY_EXTRA_CXXFLAGS) 51928679Sbrian AC_SUBST(LEGACY_EXTRA_LDFLAGS) 52028679Sbrian 52128679Sbrian ############################################################################### 52228679Sbrian # 52328679Sbrian # Now setup the CFLAGS and LDFLAGS for the JDK build. 52428679Sbrian # Later we will also have CFLAGS and LDFLAGS for the hotspot subrepo build. 5256059Samurai # 52636285Sbrian 52736285Sbrian # Setup compiler/platform specific flags into 52826516Sbrian # CFLAGS_JDK - C Compiler flags 52928679Sbrian # CXXFLAGS_JDK - C++ Compiler flags 53045138Sbrian # COMMON_CCXXFLAGS_JDK - common to C and C++ 53145138Sbrian if test "x$TOOLCHAIN_TYPE" = xgcc; then 53245138Sbrian COMMON_CCXXFLAGS_JDK="$COMMON_CCXXFLAGS $COMMON_CCXXFLAGS_JDK -Wall -Wno-parentheses -Wextra -Wno-unused -Wno-unused-parameter -Wformat=2 \ 53345138Sbrian -pipe -D_GNU_SOURCE -D_REENTRANT -D_LARGEFILE64_SOURCE" 53445138Sbrian case $OPENJDK_TARGET_CPU_ARCH in 53528679Sbrian arm ) 53628679Sbrian # on arm we don't prevent gcc to omit frame pointer but do prevent strict aliasing 53728679Sbrian CFLAGS_JDK="${CFLAGS_JDK} -fno-strict-aliasing" 53828679Sbrian ;; 53928679Sbrian ppc ) 54028679Sbrian # on ppc we don't prevent gcc to omit frame pointer but do prevent strict aliasing 54128679Sbrian CFLAGS_JDK="${CFLAGS_JDK} -fno-strict-aliasing" 54228679Sbrian ;; 54328679Sbrian * ) 54428679Sbrian COMMON_CCXXFLAGS_JDK="$COMMON_CCXXFLAGS_JDK -fno-omit-frame-pointer" 54528679Sbrian CFLAGS_JDK="${CFLAGS_JDK} -fno-strict-aliasing" 54628679Sbrian ;; 54730715Sbrian esac 54828679Sbrian elif test "x$TOOLCHAIN_TYPE" = xsolstudio; then 5496059Samurai COMMON_CCXXFLAGS_JDK="$COMMON_CCXXFLAGS $COMMON_CCXXFLAGS_JDK -DTRACING -DMACRO_MEMSYS_OPS -DBREAKPTS" 55028679Sbrian if test "x$OPENJDK_TARGET_CPU_ARCH" = xx86; then 55128679Sbrian COMMON_CCXXFLAGS_JDK="$COMMON_CCXXFLAGS_JDK -DcpuIntel -Di586 -D$OPENJDK_TARGET_CPU_LEGACY_LIB" 55245188Sbrian CFLAGS_JDK="$CFLAGS_JDK -erroff=E_BAD_PRAGMA_PACK_VALUE" 55328679Sbrian fi 55428679Sbrian 55528679Sbrian CFLAGS_JDK="$CFLAGS_JDK -xc99=%none -xCC -errshort=tags -Xa -v -mt -W0,-noglobal" 55628679Sbrian CXXFLAGS_JDK="$CXXFLAGS_JDK -errtags=yes +w -mt -features=no%except -DCC_NOEX -norunpath -xnolib" 55728679Sbrian elif test "x$TOOLCHAIN_TYPE" = xxlc; then 55845185Sbrian CFLAGS_JDK="$CFLAGS_JDK -D_GNU_SOURCE -D_REENTRANT -D_LARGEFILE64_SOURCE -DSTDC" 55945185Sbrian CXXFLAGS_JDK="$CXXFLAGS_JDK -D_GNU_SOURCE -D_REENTRANT -D_LARGEFILE64_SOURCE -DSTDC" 56045185Sbrian elif test "x$TOOLCHAIN_TYPE" = xmicrosoft; then 56145185Sbrian COMMON_CCXXFLAGS_JDK="$COMMON_CCXXFLAGS $COMMON_CCXXFLAGS_JDK \ 56245185Sbrian -Zi -MD -Zc:wchar_t- -W3 -wd4800 \ 56328679Sbrian -DWIN32_LEAN_AND_MEAN \ 56428679Sbrian -D_CRT_SECURE_NO_DEPRECATE -D_CRT_NONSTDC_NO_DEPRECATE \ 5656059Samurai -DWIN32 -DIAL" 56628679Sbrian if test "x$OPENJDK_TARGET_CPU" = xx86_64; then 56736285Sbrian COMMON_CCXXFLAGS_JDK="$COMMON_CCXXFLAGS_JDK -D_AMD64_ -Damd64" 56836285Sbrian else 5696059Samurai COMMON_CCXXFLAGS_JDK="$COMMON_CCXXFLAGS_JDK -D_X86_ -Dx86" 5706059Samurai fi 5716059Samurai # If building with Visual Studio 2010, we can still use _STATIC_CPPLIB to 57236285Sbrian # avoid bundling msvcpNNN.dll. Doesn't work with newer versions of visual 5736059Samurai # studio. 57436285Sbrian if test "x$TOOLCHAIN_VERSION" = "x2010"; then 57536285Sbrian COMMON_CXXFLAGS_JDK="$COMMON_CXXFLAGS_JDK \ 57636285Sbrian -D_STATIC_CPPLIB -D_DISABLE_DEPRECATE_STATIC_CPPLIB" 57736285Sbrian fi 57836285Sbrian fi 57936285Sbrian 58036285Sbrian ############################################################################### 58136285Sbrian 58236285Sbrian # Adjust flags according to debug level. 58336285Sbrian case $DEBUG_LEVEL in 58436285Sbrian fastdebug | slowdebug ) 58536285Sbrian CFLAGS_JDK="$CFLAGS_JDK $CFLAGS_DEBUG_SYMBOLS $CFLAGS_DEBUG_OPTIONS" 58636285Sbrian CXXFLAGS_JDK="$CXXFLAGS_JDK $CXXFLAGS_DEBUG_SYMBOLS $CXXFLAGS_DEBUG_OPTIONS" 58726516Sbrian JAVAC_FLAGS="$JAVAC_FLAGS -g" 5886059Samurai ;; 589 release ) 590 ;; 591 * ) 592 AC_MSG_ERROR([Unrecognized \$DEBUG_LEVEL: $DEBUG_LEVEL]) 593 ;; 594 esac 595 596 # Setup LP64 597 COMMON_CCXXFLAGS_JDK="$COMMON_CCXXFLAGS_JDK $ADD_LP64" 598 599 # Set some common defines. These works for all compilers, but assume 600 # -D is universally accepted. 601 602 # Setup endianness 603 if test "x$OPENJDK_TARGET_CPU_ENDIAN" = xlittle; then 604 # The macro _LITTLE_ENDIAN needs to be defined the same to avoid the 605 # Sun C compiler warning message: warning: macro redefined: _LITTLE_ENDIAN 606 # (The Solaris X86 system defines this in file /usr/include/sys/isa_defs.h). 607 # Note: -Dmacro is the same as #define macro 1 608 # -Dmacro= is the same as #define macro 609 if test "x$OPENJDK_TARGET_OS" = xsolaris; then 610 COMMON_CCXXFLAGS_JDK="$COMMON_CCXXFLAGS_JDK -D_LITTLE_ENDIAN=" 611 else 612 COMMON_CCXXFLAGS_JDK="$COMMON_CCXXFLAGS_JDK -D_LITTLE_ENDIAN" 613 fi 614 else 615 # Same goes for _BIG_ENDIAN. Do we really need to set *ENDIAN on Solaris if they 616 # are defined in the system? 617 if test "x$OPENJDK_TARGET_OS" = xsolaris; then 618 COMMON_CCXXFLAGS_JDK="$COMMON_CCXXFLAGS_JDK -D_BIG_ENDIAN=" 619 else 620 COMMON_CCXXFLAGS_JDK="$COMMON_CCXXFLAGS_JDK -D_BIG_ENDIAN" 621 fi 622 fi 623 624 # Setup target OS define. Use OS target name but in upper case. 625 OPENJDK_TARGET_OS_UPPERCASE=`$ECHO $OPENJDK_TARGET_OS | $TR 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'` 626 COMMON_CCXXFLAGS_JDK="$COMMON_CCXXFLAGS_JDK -D$OPENJDK_TARGET_OS_UPPERCASE" 627 628 # Setup target CPU 629 COMMON_CCXXFLAGS_JDK="$COMMON_CCXXFLAGS_JDK -DARCH='\"$OPENJDK_TARGET_CPU_LEGACY\"' -D$OPENJDK_TARGET_CPU_LEGACY" 630 631 # Setup debug/release defines 632 if test "x$DEBUG_LEVEL" = xrelease; then 633 COMMON_CCXXFLAGS_JDK="$COMMON_CCXXFLAGS_JDK -DNDEBUG" 634 if test "x$OPENJDK_TARGET_OS" = xsolaris; then 635 COMMON_CCXXFLAGS_JDK="$COMMON_CCXXFLAGS_JDK -DTRIMMED" 636 fi 637 else 638 COMMON_CCXXFLAGS_JDK="$COMMON_CCXXFLAGS_JDK -DDEBUG" 639 fi 640 641 # Setup release name 642 COMMON_CCXXFLAGS_JDK="$COMMON_CCXXFLAGS_JDK -DRELEASE='\"\$(RELEASE)\"'" 643 644 645 # Set some additional per-OS defines. 646 if test "x$OPENJDK_TARGET_OS" = xmacosx; then 647 COMMON_CCXXFLAGS_JDK="$COMMON_CCXXFLAGS_JDK -D_ALLBSD_SOURCE -D_DARWIN_UNLIMITED_SELECT" 648 elif test "x$OPENJDK_TARGET_OS" = xaix; then 649 # FIXME: PPC64 should not be here. 650 COMMON_CCXXFLAGS_JDK="$COMMON_CCXXFLAGS_JDK -DPPC64" 651 elif test "x$OPENJDK_TARGET_OS" = xbsd; then 652 COMMON_CCXXFLAGS_JDK="$COMMON_CCXXFLAGS_JDK -D_ALLBSD_SOURCE" 653 fi 654 655 # Additional macosx handling 656 if test "x$OPENJDK_TARGET_OS" = xmacosx; then 657 # Setting these parameters makes it an error to link to macosx APIs that are 658 # newer than the given OS version and makes the linked binaries compatible 659 # even if built on a newer version of the OS. 660 # The expected format is X.Y.Z 661 MACOSX_VERSION_MIN=10.7.0 662 AC_SUBST(MACOSX_VERSION_MIN) 663 664 # The macro takes the version with no dots, ex: 1070 665 # Let the flags variables get resolved in make for easier override on make 666 # command line. 667 COMMON_CCXXFLAGS_JDK="$COMMON_CCXXFLAGS_JDK -DMAC_OS_X_VERSION_MAX_ALLOWED=\$(subst .,,\$(MACOSX_VERSION_MIN)) -mmacosx-version-min=\$(MACOSX_VERSION_MIN)" 668 LDFLAGS_JDK="$LDFLAGS_JDK -mmacosx-version-min=\$(MACOSX_VERSION_MIN)" 669 fi 670 671 # Setup some hard coded includes 672 COMMON_CCXXFLAGS_JDK="$COMMON_CCXXFLAGS_JDK \ 673 -I${JDK_TOPDIR}/src/java.base/share/native/include \ 674 -I${JDK_TOPDIR}/src/java.base/$OPENJDK_TARGET_OS/native/include \ 675 -I${JDK_TOPDIR}/src/java.base/$OPENJDK_TARGET_OS_TYPE/native/include" 676 677 # The shared libraries are compiled using the picflag. 678 CFLAGS_JDKLIB="$COMMON_CCXXFLAGS_JDK $CFLAGS_JDK $PICFLAG $CFLAGS_JDKLIB_EXTRA" 679 CXXFLAGS_JDKLIB="$COMMON_CCXXFLAGS_JDK $CXXFLAGS_JDK $PICFLAG $CXXFLAGS_JDKLIB_EXTRA " 680 681 # Executable flags 682 CFLAGS_JDKEXE="$COMMON_CCXXFLAGS_JDK $CFLAGS_JDK" 683 CXXFLAGS_JDKEXE="$COMMON_CCXXFLAGS_JDK $CXXFLAGS_JDK" 684 685 AC_SUBST(CFLAGS_JDKLIB) 686 AC_SUBST(CFLAGS_JDKEXE) 687 AC_SUBST(CXXFLAGS_JDKLIB) 688 AC_SUBST(CXXFLAGS_JDKEXE) 689 690 # Setup LDFLAGS et al. 691 # 692 693 # Now this is odd. The JDK native libraries have to link against libjvm.so 694 # On 32-bit machines there is normally two distinct libjvm.so:s, client and server. 695 # Which should we link to? Are we lucky enough that the binary api to the libjvm.so library 696 # is identical for client and server? Yes. Which is picked at runtime (client or server)? 697 # Neither, since the chosen libjvm.so has already been loaded by the launcher, all the following 698 # libraries will link to whatever is in memory. Yuck. 699 # 700 # Thus we offer the compiler to find libjvm.so first in server then in client. It works. Ugh. 701 if test "x$TOOLCHAIN_TYPE" = xmicrosoft; then 702 LDFLAGS_JDK="$LDFLAGS_JDK -nologo -opt:ref -incremental:no" 703 if test "x$OPENJDK_TARGET_CPU_BITS" = "x32"; then 704 LDFLAGS_JDK="$LDFLAGS_JDK -safeseh" 705 fi 706 # TODO: make -debug optional "--disable-full-debug-symbols" 707 LDFLAGS_JDK="$LDFLAGS_JDK -debug" 708 elif test "x$TOOLCHAIN_TYPE" = xgcc; then 709 # If this is a --hash-style=gnu system, use --hash-style=both, why? 710 # We have previously set HAS_GNU_HASH if this is the case 711 if test -n "$HAS_GNU_HASH"; then 712 LDFLAGS_JDK="${LDFLAGS_JDK} -Xlinker --hash-style=both" 713 fi 714 if test "x$OPENJDK_TARGET_OS" = xlinux; then 715 # And since we now know that the linker is gnu, then add -z defs, to forbid 716 # undefined symbols in object files. 717 LDFLAGS_JDK="${LDFLAGS_JDK} -Xlinker -z -Xlinker defs" 718 case $DEBUG_LEVEL in 719 release ) 720 # tell linker to optimize libraries. 721 # Should this be supplied to the OSS linker as well? 722 LDFLAGS_JDK="${LDFLAGS_JDK} -Xlinker -O1" 723 ;; 724 slowdebug ) 725 if test "x$HAS_LINKER_NOW" = "xtrue"; then 726 # do relocations at load 727 LDFLAGS_JDK="$LDFLAGS_JDK $LINKER_NOW_FLAG" 728 LDFLAGS_CXX_JDK="$LDFLAGS_CXX_JDK $LINKER_NOW_FLAG" 729 fi 730 if test "x$HAS_LINKER_RELRO" = "xtrue"; then 731 # mark relocations read only 732 LDFLAGS_JDK="$LDFLAGS_JDK $LINKER_RELRO_FLAG" 733 LDFLAGS_CXX_JDK="$LDFLAGS_CXX_JDK $LINKER_RELRO_FLAG" 734 fi 735 ;; 736 fastdebug ) 737 if test "x$HAS_LINKER_RELRO" = "xtrue"; then 738 # mark relocations read only 739 LDFLAGS_JDK="$LDFLAGS_JDK $LINKER_RELRO_FLAG" 740 LDFLAGS_CXX_JDK="$LDFLAGS_CXX_JDK $LINKER_RELRO_FLAG" 741 fi 742 ;; 743 * ) 744 AC_MSG_ERROR([Unrecognized \$DEBUG_LEVEL: $DEBUG_LEVEL]) 745 ;; 746 esac 747 fi 748 elif test "x$TOOLCHAIN_TYPE" = xsolstudio; then 749 LDFLAGS_JDK="$LDFLAGS_JDK -z defs -xildoff -ztext" 750 LDFLAGS_CXX_JDK="$LDFLAGS_CXX_JDK -norunpath -xnolib" 751 fi 752 753 # Customize LDFLAGS for executables 754 755 LDFLAGS_JDKEXE="${LDFLAGS_JDK}" 756 757 if test "x$TOOLCHAIN_TYPE" = xmicrosoft; then 758 if test "x$OPENJDK_TARGET_CPU_BITS" = "x64"; then 759 LDFLAGS_STACK_SIZE=1048576 760 else 761 LDFLAGS_STACK_SIZE=327680 762 fi 763 LDFLAGS_JDKEXE="${LDFLAGS_JDKEXE} /STACK:$LDFLAGS_STACK_SIZE" 764 elif test "x$OPENJDK_TARGET_OS" = xlinux; then 765 LDFLAGS_JDKEXE="$LDFLAGS_JDKEXE -Xlinker --allow-shlib-undefined" 766 fi 767 768 # Customize LDFLAGS for libs 769 LDFLAGS_JDKLIB="${LDFLAGS_JDK}" 770 771 if test "x$TOOLCHAIN_TYPE" = xmicrosoft; then 772 LDFLAGS_JDKLIB="${LDFLAGS_JDKLIB} -dll -libpath:${OUTPUT_ROOT}/support/modules_libs/java.base" 773 LDFLAGS_JDKLIB_SUFFIX="" 774 else 775 LDFLAGS_JDKLIB="${LDFLAGS_JDKLIB} ${SHARED_LIBRARY_FLAGS} \ 776 -L${OUTPUT_ROOT}/support/modules_libs/java.base${OPENJDK_TARGET_CPU_LIBDIR}" 777 778 # On some platforms (mac) the linker warns about non existing -L dirs. 779 # Add server first if available. Linking aginst client does not always produce the same results. 780 # Only add client dir if client is being built. Add minimal (note not minimal1) if only building minimal1. 781 # Default to server for other variants. 782 if test "x$JVM_VARIANT_SERVER" = xtrue; then 783 LDFLAGS_JDKLIB="${LDFLAGS_JDKLIB} -L${OUTPUT_ROOT}/support/modules_libs/java.base${OPENJDK_TARGET_CPU_LIBDIR}/server" 784 elif test "x$JVM_VARIANT_CLIENT" = xtrue; then 785 LDFLAGS_JDKLIB="${LDFLAGS_JDKLIB} -L${OUTPUT_ROOT}/support/modules_libs/java.base${OPENJDK_TARGET_CPU_LIBDIR}/client" 786 elif test "x$JVM_VARIANT_MINIMAL1" = xtrue; then 787 LDFLAGS_JDKLIB="${LDFLAGS_JDKLIB} -L${OUTPUT_ROOT}/support/modules_libs/java.base${OPENJDK_TARGET_CPU_LIBDIR}/minimal" 788 else 789 LDFLAGS_JDKLIB="${LDFLAGS_JDKLIB} -L${OUTPUT_ROOT}/support/modules_libs/java.base${OPENJDK_TARGET_CPU_LIBDIR}/server" 790 fi 791 792 LDFLAGS_JDKLIB_SUFFIX="-ljava -ljvm" 793 if test "x$TOOLCHAIN_TYPE" = xsolstudio; then 794 LDFLAGS_JDKLIB_SUFFIX="$LDFLAGS_JDKLIB_SUFFIX -lc" 795 fi 796 fi 797 798 AC_SUBST(LDFLAGS_JDKLIB) 799 AC_SUBST(LDFLAGS_JDKEXE) 800 AC_SUBST(LDFLAGS_JDKLIB_SUFFIX) 801 AC_SUBST(LDFLAGS_JDKEXE_SUFFIX) 802 AC_SUBST(LDFLAGS_CXX_JDK) 803]) 804 805# FLAGS_COMPILER_CHECK_ARGUMENTS([ARGUMENT], [RUN-IF-TRUE], 806# [RUN-IF-FALSE]) 807# ------------------------------------------------------------ 808# Check that the c and c++ compilers support an argument 809AC_DEFUN([FLAGS_COMPILER_CHECK_ARGUMENTS], 810[ 811 AC_MSG_CHECKING([if compiler supports "$1"]) 812 supports=yes 813 814 saved_cflags="$CFLAGS" 815 CFLAGS="$CFLAGS $1" 816 AC_LANG_PUSH([C]) 817 AC_COMPILE_IFELSE([AC_LANG_SOURCE([[int i;]])], [], 818 [supports=no]) 819 AC_LANG_POP([C]) 820 CFLAGS="$saved_cflags" 821 822 saved_cxxflags="$CXXFLAGS" 823 CXXFLAGS="$CXXFLAG $1" 824 AC_LANG_PUSH([C++]) 825 AC_COMPILE_IFELSE([AC_LANG_SOURCE([[int i;]])], [], 826 [supports=no]) 827 AC_LANG_POP([C++]) 828 CXXFLAGS="$saved_cxxflags" 829 830 AC_MSG_RESULT([$supports]) 831 if test "x$supports" = "xyes" ; then 832 m4_ifval([$2], [$2], [:]) 833 else 834 m4_ifval([$3], [$3], [:]) 835 fi 836]) 837 838# FLAGS_LINKER_CHECK_ARGUMENTS([ARGUMENT], [RUN-IF-TRUE], 839# [RUN-IF-FALSE]) 840# ------------------------------------------------------------ 841# Check that the linker support an argument 842AC_DEFUN([FLAGS_LINKER_CHECK_ARGUMENTS], 843[ 844 AC_MSG_CHECKING([if linker supports "$1"]) 845 supports=yes 846 847 saved_ldflags="$LDFLAGS" 848 LDFLAGS="$LDFLAGS $1" 849 AC_LANG_PUSH([C]) 850 AC_LINK_IFELSE([AC_LANG_PROGRAM([[]],[[]])], 851 [], [supports=no]) 852 AC_LANG_POP([C]) 853 LDFLAGS="$saved_ldflags" 854 855 AC_MSG_RESULT([$supports]) 856 if test "x$supports" = "xyes" ; then 857 m4_ifval([$2], [$2], [:]) 858 else 859 m4_ifval([$3], [$3], [:]) 860 fi 861]) 862 863AC_DEFUN_ONCE([FLAGS_SETUP_COMPILER_FLAGS_MISC], 864[ 865 # Some Zero and Shark settings. 866 # ZERO_ARCHFLAG tells the compiler which mode to build for 867 case "${OPENJDK_TARGET_CPU}" in 868 s390) 869 ZERO_ARCHFLAG="${COMPILER_TARGET_BITS_FLAG}31" 870 ;; 871 *) 872 ZERO_ARCHFLAG="${COMPILER_TARGET_BITS_FLAG}${OPENJDK_TARGET_CPU_BITS}" 873 esac 874 FLAGS_COMPILER_CHECK_ARGUMENTS([$ZERO_ARCHFLAG], [], [ZERO_ARCHFLAG=""]) 875 AC_SUBST(ZERO_ARCHFLAG) 876 877 # Check that the compiler supports -mX (or -qX on AIX) flags 878 # Set COMPILER_SUPPORTS_TARGET_BITS_FLAG to 'true' if it does 879 FLAGS_COMPILER_CHECK_ARGUMENTS([${COMPILER_TARGET_BITS_FLAG}${OPENJDK_TARGET_CPU_BITS}], 880 [COMPILER_SUPPORTS_TARGET_BITS_FLAG=true], 881 [COMPILER_SUPPORTS_TARGET_BITS_FLAG=false]) 882 AC_SUBST(COMPILER_SUPPORTS_TARGET_BITS_FLAG) 883 884 case "${TOOLCHAIN_TYPE}" in 885 microsoft) 886 CFLAGS_WARNINGS_ARE_ERRORS="-WX" 887 ;; 888 solstudio) 889 CFLAGS_WARNINGS_ARE_ERRORS="-errtags -errwarn=%all" 890 ;; 891 gcc) 892 CFLAGS_WARNINGS_ARE_ERRORS="-Werror" 893 ;; 894 clang) 895 CFLAGS_WARNINGS_ARE_ERRORS="-Werror" 896 ;; 897 esac 898 AC_SUBST(CFLAGS_WARNINGS_ARE_ERRORS) 899]) 900