kevinw@2206: # kevinw@2206: # Copyright (c) 2011, 2018, Oracle and/or its affiliates. All rights reserved. kevinw@2206: # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. kevinw@2206: # kevinw@2206: # This code is free software; you can redistribute it and/or modify it kevinw@2206: # under the terms of the GNU General Public License version 2 only, as kevinw@2206: # published by the Free Software Foundation. Oracle designates this kevinw@2206: # particular file as subject to the "Classpath" exception as provided kevinw@2206: # by Oracle in the LICENSE file that accompanied this code. kevinw@2206: # kevinw@2206: # This code is distributed in the hope that it will be useful, but WITHOUT kevinw@2206: # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or kevinw@2206: # FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License kevinw@2206: # version 2 for more details (a copy is included in the LICENSE file that kevinw@2206: # accompanied this code). kevinw@2206: # kevinw@2206: # You should have received a copy of the GNU General Public License version kevinw@2206: # 2 along with this work; if not, write to the Free Software Foundation, kevinw@2206: # Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. kevinw@2206: # kevinw@2206: # Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA kevinw@2206: # or visit www.oracle.com if you need additional information or have any kevinw@2206: # questions. kevinw@2206: # kevinw@2206: kevinw@2206: AC_DEFUN_ONCE([FLAGS_SETUP_INIT_FLAGS], kevinw@2206: [ kevinw@2206: # Option used to tell the compiler whether to create 32- or 64-bit executables kevinw@2206: if test "x$TOOLCHAIN_TYPE" = xxlc; then kevinw@2206: COMPILER_TARGET_BITS_FLAG="-q" kevinw@2206: else kevinw@2206: COMPILER_TARGET_BITS_FLAG="-m" kevinw@2206: fi kevinw@2206: AC_SUBST(COMPILER_TARGET_BITS_FLAG) kevinw@2206: kevinw@2206: # FIXME: figure out if we should select AR flags depending on OS or toolchain. kevinw@2206: if test "x$OPENJDK_TARGET_OS" = xmacosx; then kevinw@2206: ARFLAGS="-r" kevinw@2206: elif test "x$OPENJDK_TARGET_OS" = xaix; then kevinw@2206: ARFLAGS="-X64" kevinw@2206: elif test "x$OPENJDK_TARGET_OS" = xwindows; then kevinw@2206: # lib.exe is used as AR to create static libraries. kevinw@2206: ARFLAGS="-nologo -NODEFAULTLIB:MSVCRT" kevinw@2206: else kevinw@2206: ARFLAGS="" kevinw@2206: fi kevinw@2206: AC_SUBST(ARFLAGS) kevinw@2206: kevinw@2206: ## Setup strip. kevinw@2206: # FIXME: should this really be per platform, or should it be per toolchain type? kevinw@2206: # strip is not provided by clang or solstudio; so guessing platform makes most sense. kevinw@2206: # FIXME: we should really only export STRIPFLAGS from here, not POST_STRIP_CMD. kevinw@2206: if test "x$OPENJDK_TARGET_OS" = xlinux; then kevinw@2206: STRIPFLAGS="-g" kevinw@2206: elif test "x$OPENJDK_TARGET_OS" = xsolaris; then kevinw@2206: STRIPFLAGS="-x" kevinw@2206: elif test "x$OPENJDK_TARGET_OS" = xmacosx; then kevinw@2206: STRIPFLAGS="-S" kevinw@2206: elif test "x$OPENJDK_TARGET_OS" = xaix; then kevinw@2206: STRIPFLAGS="-X32_64" kevinw@2206: fi kevinw@2206: kevinw@2206: if test "x$OPENJDK_TARGET_OS" != xwindows; then kevinw@2206: POST_STRIP_CMD="$STRIP $STRIPFLAGS" kevinw@2206: fi kevinw@2206: AC_SUBST(POST_STRIP_CMD) kevinw@2206: kevinw@2206: if test "x$OPENJDK_TARGET_OS" = xsolaris; then kevinw@2206: # FIXME: break out into MCSFLAGS kevinw@2206: POST_MCS_CMD="$MCS -d -a \"JDK $FULL_VERSION\"" kevinw@2206: fi kevinw@2206: AC_SUBST(POST_MCS_CMD) kevinw@2206: kevinw@2206: if test "x$TOOLCHAIN_TYPE" = xmicrosoft; then kevinw@2206: CC_OUT_OPTION=-Fo kevinw@2206: EXE_OUT_OPTION=-out: kevinw@2206: LD_OUT_OPTION=-out: kevinw@2206: AR_OUT_OPTION=-out: kevinw@2206: else kevinw@2206: # The option used to specify the target .o,.a or .so file. kevinw@2206: # When compiling, how to specify the to be created object file. kevinw@2206: CC_OUT_OPTION='-o$(SPACE)' kevinw@2206: # When linking, how to specify the to be created executable. kevinw@2206: EXE_OUT_OPTION='-o$(SPACE)' kevinw@2206: # When linking, how to specify the to be created dynamically linkable library. kevinw@2206: LD_OUT_OPTION='-o$(SPACE)' kevinw@2206: # When archiving, how to specify the to be create static archive for object files. kevinw@2206: AR_OUT_OPTION='rcs$(SPACE)' kevinw@2206: fi kevinw@2206: AC_SUBST(CC_OUT_OPTION) kevinw@2206: AC_SUBST(EXE_OUT_OPTION) kevinw@2206: AC_SUBST(LD_OUT_OPTION) kevinw@2206: AC_SUBST(AR_OUT_OPTION) kevinw@2206: kevinw@2206: # On Windows, we need to set RC flags. kevinw@2206: if test "x$TOOLCHAIN_TYPE" = xmicrosoft; then kevinw@2206: RC_FLAGS="-nologo -l 0x409 -r" kevinw@2206: if test "x$VARIANT" = xOPT; then kevinw@2206: RC_FLAGS="$RC_FLAGS -d NDEBUG" kevinw@2206: fi kevinw@2206: kevinw@2206: # The version variables used to create RC_FLAGS may be overridden kevinw@2206: # in a custom configure script, or possibly the command line. kevinw@2206: # Let those variables be expanded at make time in spec.gmk. kevinw@2206: # The \$ are escaped to the shell, and the $(...) variables kevinw@2206: # are evaluated by make. kevinw@2206: RC_FLAGS="$RC_FLAGS \ kevinw@2206: -d \"JDK_BUILD_ID=\$(FULL_VERSION)\" \ kevinw@2206: -d \"JDK_COMPANY=\$(COMPANY_NAME)\" \ kevinw@2206: -d \"JDK_COMPONENT=\$(PRODUCT_NAME) \$(JDK_RC_PLATFORM_NAME) binary\" \ kevinw@2298: -d \"JDK_VER=\$(JDK_MINOR_VERSION).\$(JDK_MICRO_VERSION).\$(COOKED_JDK_UPDATE_VERSION).\$(COOKED_BUILD_NUMBER)\" \ kevinw@2206: -d \"JDK_COPYRIGHT=Copyright \xA9 $COPYRIGHT_YEAR\" \ kevinw@2206: -d \"JDK_NAME=\$(PRODUCT_NAME) \$(JDK_RC_PLATFORM_NAME) \$(JDK_MINOR_VERSION) \$(JDK_UPDATE_META_TAG)\" \ kevinw@2401: -d \"JDK_FVER=\$(JDK_MINOR_VERSION),\$(JDK_MICRO_VERSION),\$(if \$(COOKED_JDK_UPDATE_VERSION),\$(COOKED_JDK_UPDATE_VERSION),0),\$(COOKED_BUILD_NUMBER)\"" kevinw@2206: fi kevinw@2206: AC_SUBST(RC_FLAGS) kevinw@2206: kevinw@2206: if test "x$TOOLCHAIN_TYPE" = xmicrosoft; then kevinw@2206: # FIXME: likely bug, should be CCXXFLAGS_JDK? or one for C or CXX. kevinw@2206: CCXXFLAGS="$CCXXFLAGS -nologo" kevinw@2206: fi kevinw@2215: kevinw@2215: if test "x$SYSROOT" != "x"; then kevinw@2215: if test "x$TOOLCHAIN_TYPE" = xsolstudio; then kevinw@2215: if test "x$OPENJDK_TARGET_OS" = xsolaris; then kevinw@2215: # Solaris Studio does not have a concept of sysroot. Instead we must kevinw@2215: # make sure the default include and lib dirs are appended to each kevinw@2215: # compile and link command line. kevinw@2215: SYSROOT_CFLAGS="-I$SYSROOT/usr/include" kevinw@2215: SYSROOT_LDFLAGS="-L$SYSROOT/usr/lib$OPENJDK_TARGET_CPU_ISADIR \ kevinw@2215: -L$SYSROOT/lib$OPENJDK_TARGET_CPU_ISADIR \ kevinw@2215: -L$SYSROOT/usr/ccs/lib$OPENJDK_TARGET_CPU_ISADIR" kevinw@2215: fi kevinw@2215: elif test "x$TOOLCHAIN_TYPE" = xgcc; then kevinw@2215: SYSROOT_CFLAGS="--sysroot=\"$SYSROOT\"" kevinw@2215: SYSROOT_LDFLAGS="--sysroot=\"$SYSROOT\"" kevinw@2215: elif test "x$TOOLCHAIN_TYPE" = xclang; then kevinw@2215: SYSROOT_CFLAGS="-isysroot \"$SYSROOT\"" kevinw@2215: SYSROOT_LDFLAGS="-isysroot \"$SYSROOT\"" kevinw@2215: fi kevinw@2215: # Propagate the sysroot args to hotspot kevinw@2215: LEGACY_EXTRA_CFLAGS="$LEGACY_EXTRA_CFLAGS $SYSROOT_CFLAGS" kevinw@2215: LEGACY_EXTRA_CXXFLAGS="$LEGACY_EXTRA_CXXFLAGS $SYSROOT_CFLAGS" kevinw@2215: LEGACY_EXTRA_LDFLAGS="$LEGACY_EXTRA_LDFLAGS $SYSROOT_LDFLAGS" kevinw@2215: fi kevinw@2215: AC_SUBST(SYSROOT_CFLAGS) kevinw@2215: AC_SUBST(SYSROOT_LDFLAGS) kevinw@2206: ]) kevinw@2206: kevinw@2206: AC_DEFUN_ONCE([FLAGS_SETUP_COMPILER_FLAGS_FOR_LIBS], kevinw@2206: [ kevinw@2206: ############################################################################### kevinw@2206: # kevinw@2206: # How to compile shared libraries. kevinw@2206: # kevinw@2206: kevinw@2206: if test "x$TOOLCHAIN_TYPE" = xgcc; then kevinw@2206: PICFLAG="-fPIC" alvdavi@2496: PIEFLAG="-fPIE" kevinw@2206: C_FLAG_REORDER='' kevinw@2206: CXX_FLAG_REORDER='' kevinw@2206: kevinw@2206: if test "x$OPENJDK_TARGET_OS" = xmacosx; then kevinw@2206: # Linking is different on MacOSX kevinw@2206: SHARED_LIBRARY_FLAGS="-dynamiclib -compatibility_version 1.0.0 -current_version 1.0.0 $PICFLAG" kevinw@2206: SET_EXECUTABLE_ORIGIN='-Xlinker -rpath -Xlinker @loader_path/.' kevinw@2206: SET_SHARED_LIBRARY_ORIGIN="$SET_EXECUTABLE_ORIGIN" kevinw@2206: SET_SHARED_LIBRARY_NAME='-Xlinker -install_name -Xlinker @rpath/[$]1' kevinw@2206: SET_SHARED_LIBRARY_MAPFILE='' kevinw@2206: else kevinw@2206: # Default works for linux, might work on other platforms as well. kevinw@2206: SHARED_LIBRARY_FLAGS='-shared' kevinw@2206: SET_EXECUTABLE_ORIGIN='-Xlinker -rpath -Xlinker \$$$$ORIGIN[$]1' kevinw@2206: SET_SHARED_LIBRARY_ORIGIN="-Xlinker -z -Xlinker origin $SET_EXECUTABLE_ORIGIN" kevinw@2206: SET_SHARED_LIBRARY_NAME='-Xlinker -soname=[$]1' kevinw@2206: SET_SHARED_LIBRARY_MAPFILE='-Xlinker -version-script=[$]1' kevinw@2206: fi kevinw@2206: elif test "x$TOOLCHAIN_TYPE" = xsolstudio; then kevinw@2206: PICFLAG="-KPIC" alvdavi@2496: PIEFLAG="" kevinw@2206: C_FLAG_REORDER='-xF' kevinw@2206: CXX_FLAG_REORDER='-xF' kevinw@2206: SHARED_LIBRARY_FLAGS="-G" kevinw@2206: SET_EXECUTABLE_ORIGIN='-R\$$$$ORIGIN[$]1' kevinw@2206: SET_SHARED_LIBRARY_ORIGIN="$SET_EXECUTABLE_ORIGIN" kevinw@2206: SET_SHARED_LIBRARY_NAME='' kevinw@2206: SET_SHARED_LIBRARY_MAPFILE='-M[$]1' kevinw@2206: elif test "x$TOOLCHAIN_TYPE" = xxlc; then kevinw@2206: PICFLAG="-qpic=large" alvdavi@2496: PIEFLAG="" kevinw@2206: C_FLAG_REORDER='' kevinw@2206: CXX_FLAG_REORDER='' kevinw@2206: SHARED_LIBRARY_FLAGS="-qmkshrobj" kevinw@2206: SET_EXECUTABLE_ORIGIN="" kevinw@2206: SET_SHARED_LIBRARY_ORIGIN='' kevinw@2206: SET_SHARED_LIBRARY_NAME='' kevinw@2206: SET_SHARED_LIBRARY_MAPFILE='' kevinw@2206: elif test "x$TOOLCHAIN_TYPE" = xmicrosoft; then kevinw@2206: PICFLAG="" alvdavi@2496: PIEFLAG="" kevinw@2206: C_FLAG_REORDER='' kevinw@2206: CXX_FLAG_REORDER='' kevinw@2206: SHARED_LIBRARY_FLAGS="-LD" kevinw@2206: SET_EXECUTABLE_ORIGIN='' kevinw@2206: SET_SHARED_LIBRARY_ORIGIN='' kevinw@2206: SET_SHARED_LIBRARY_NAME='' kevinw@2206: SET_SHARED_LIBRARY_MAPFILE='' kevinw@2206: fi kevinw@2206: kevinw@2206: AC_SUBST(C_FLAG_REORDER) kevinw@2206: AC_SUBST(CXX_FLAG_REORDER) kevinw@2206: AC_SUBST(SHARED_LIBRARY_FLAGS) kevinw@2206: AC_SUBST(SET_EXECUTABLE_ORIGIN) kevinw@2206: AC_SUBST(SET_SHARED_LIBRARY_ORIGIN) kevinw@2206: AC_SUBST(SET_SHARED_LIBRARY_NAME) kevinw@2206: AC_SUBST(SET_SHARED_LIBRARY_MAPFILE) kevinw@2206: kevinw@2206: if test "x$OPENJDK_TARGET_OS" = xsolaris; then kevinw@2206: CFLAGS_JDK="${CFLAGS_JDK} -D__solaris__" kevinw@2206: CXXFLAGS_JDK="${CXXFLAGS_JDK} -D__solaris__" kevinw@2206: CFLAGS_JDKLIB_EXTRA='-xstrconst' kevinw@2206: fi kevinw@2206: # The (cross) compiler is now configured, we can now test capabilities kevinw@2206: # of the target platform. kevinw@2206: ]) kevinw@2206: kevinw@2206: # Documentation on common flags used for solstudio in HIGHEST. kevinw@2206: # kevinw@2206: # WARNING: Use of OPTIMIZATION_LEVEL=HIGHEST in your Makefile needs to be kevinw@2206: # done with care, there are some assumptions below that need to kevinw@2206: # be understood about the use of pointers, and IEEE behavior. kevinw@2206: # kevinw@2206: # -fns: Use non-standard floating point mode (not IEEE 754) kevinw@2206: # -fsimple: Do some simplification of floating point arithmetic (not IEEE 754) kevinw@2206: # -fsingle: Use single precision floating point with 'float' kevinw@2206: # -xalias_level=basic: Assume memory references via basic pointer types do not alias kevinw@2206: # (Source with excessing pointer casting and data access with mixed kevinw@2206: # pointer types are not recommended) kevinw@2206: # -xbuiltin=%all: Use intrinsic or inline versions for math/std functions kevinw@2206: # (If you expect perfect errno behavior, do not use this) kevinw@2206: # -xdepend: Loop data dependency optimizations (need -xO3 or higher) kevinw@2206: # -xrestrict: Pointer parameters to functions do not overlap kevinw@2206: # (Similar to -xalias_level=basic usage, but less obvious sometimes. kevinw@2206: # If you pass in multiple pointers to the same data, do not use this) kevinw@2206: # -xlibmil: Inline some library routines kevinw@2206: # (If you expect perfect errno behavior, do not use this) kevinw@2206: # -xlibmopt: Use optimized math routines (CURRENTLY DISABLED) kevinw@2206: # (If you expect perfect errno behavior, do not use this) kevinw@2206: # Can cause undefined external on Solaris 8 X86 on __sincos, removing for now kevinw@2206: kevinw@2206: # FIXME: this will never happen since sparc != sparcv9, ie 32 bit, which we don't build anymore. kevinw@2206: # Bug? kevinw@2206: #if test "x$OPENJDK_TARGET_CPU" = xsparc; then kevinw@2206: # CFLAGS_JDK="${CFLAGS_JDK} -xmemalign=4s" kevinw@2206: # CXXFLAGS_JDK="${CXXFLAGS_JDK} -xmemalign=4s" kevinw@2206: #fi kevinw@2206: kevinw@2206: AC_DEFUN_ONCE([FLAGS_SETUP_COMPILER_FLAGS_FOR_OPTIMIZATION], kevinw@2206: [ kevinw@2206: kevinw@2206: ############################################################################### kevinw@2206: # kevinw@2206: # Setup the opt flags for different compilers kevinw@2206: # and different operating systems. kevinw@2206: # kevinw@2206: kevinw@2206: # FIXME: this was indirectly the old default, but just inherited. kevinw@2206: # if test "x$TOOLCHAIN_TYPE" = xmicrosoft; then kevinw@2206: # C_FLAG_DEPS="-MMD -MF" kevinw@2206: # fi kevinw@2206: kevinw@2206: # Generate make dependency files kevinw@2206: if test "x$TOOLCHAIN_TYPE" = xgcc; then kevinw@2206: C_FLAG_DEPS="-MMD -MF" kevinw@2206: elif test "x$TOOLCHAIN_TYPE" = xsolstudio; then kevinw@2206: C_FLAG_DEPS="-xMMD -xMF" kevinw@2206: elif test "x$TOOLCHAIN_TYPE" = xxlc; then kevinw@2206: C_FLAG_DEPS="-qmakedep=gcc -MF" kevinw@2206: fi kevinw@2206: CXX_FLAG_DEPS="$C_FLAG_DEPS" kevinw@2206: AC_SUBST(C_FLAG_DEPS) kevinw@2206: AC_SUBST(CXX_FLAG_DEPS) kevinw@2206: kevinw@2206: # Debug symbols sgehwolf@2322: # sgehwolf@2322: # By default don't set any specific assembler debug sgehwolf@2322: # info flags for toolchains unless we know they work. sgehwolf@2322: # See JDK-8207057. sgehwolf@2322: ASFLAGS_DEBUG_SYMBOLS="" kevinw@2206: if test "x$TOOLCHAIN_TYPE" = xgcc; then kevinw@2206: if test "x$OPENJDK_TARGET_CPU_BITS" = "x64" && test "x$DEBUG_LEVEL" = "xfastdebug"; then kevinw@2206: CFLAGS_DEBUG_SYMBOLS="-g1" kevinw@2206: CXXFLAGS_DEBUG_SYMBOLS="-g1" kevinw@2206: else kevinw@2206: CFLAGS_DEBUG_SYMBOLS="-g" kevinw@2206: CXXFLAGS_DEBUG_SYMBOLS="-g" kevinw@2206: fi sgehwolf@2322: ASFLAGS_DEBUG_SYMBOLS="-g" kevinw@2206: elif test "x$TOOLCHAIN_TYPE" = xsolstudio; then kevinw@2206: CFLAGS_DEBUG_SYMBOLS="-g -xs" kevinw@2206: CXXFLAGS_DEBUG_SYMBOLS="-g0 -xs" kevinw@2206: elif test "x$TOOLCHAIN_TYPE" = xxlc; then kevinw@2206: CFLAGS_DEBUG_SYMBOLS="-g" kevinw@2206: CXXFLAGS_DEBUG_SYMBOLS="-g" kevinw@2206: fi sgehwolf@2322: AC_SUBST(ASFLAGS_DEBUG_SYMBOLS) kevinw@2206: AC_SUBST(CFLAGS_DEBUG_SYMBOLS) kevinw@2206: AC_SUBST(CXXFLAGS_DEBUG_SYMBOLS) kevinw@2206: kevinw@2206: # Optimization levels kevinw@2206: if test "x$TOOLCHAIN_TYPE" = xsolstudio; then kevinw@2206: CC_HIGHEST="$CC_HIGHEST -fns -fsimple -fsingle -xalias_level=basic -xbuiltin=%all -xdepend -xrestrict -xlibmil" kevinw@2206: kevinw@2206: if test "x$OPENJDK_TARGET_CPU_ARCH" = "xx86"; then kevinw@2206: # FIXME: seems we always set -xregs=no%frameptr; put it elsewhere more global? kevinw@2206: C_O_FLAG_HIGHEST="-xO4 -Wu,-O4~yz $CC_HIGHEST -xregs=no%frameptr" kevinw@2206: C_O_FLAG_HI="-xO4 -Wu,-O4~yz -xregs=no%frameptr" kevinw@2206: C_O_FLAG_NORM="-xO2 -Wu,-O2~yz -xregs=no%frameptr" kevinw@2206: C_O_FLAG_NONE="-xregs=no%frameptr" kevinw@2206: CXX_O_FLAG_HIGHEST="-xO4 -Qoption ube -O4~yz $CC_HIGHEST -xregs=no%frameptr" kevinw@2206: CXX_O_FLAG_HI="-xO4 -Qoption ube -O4~yz -xregs=no%frameptr" kevinw@2206: CXX_O_FLAG_NORM="-xO2 -Qoption ube -O2~yz -xregs=no%frameptr" kevinw@2206: CXX_O_FLAG_NONE="-xregs=no%frameptr" kevinw@2206: if test "x$OPENJDK_TARGET_CPU_BITS" = "x32"; then kevinw@2206: C_O_FLAG_HIGHEST="$C_O_FLAG_HIGHEST -xchip=pentium" kevinw@2206: CXX_O_FLAG_HIGHEST="$CXX_O_FLAG_HIGHEST -xchip=pentium" kevinw@2206: fi kevinw@2206: elif test "x$OPENJDK_TARGET_CPU_ARCH" = "xsparc"; then kevinw@2206: C_O_FLAG_HIGHEST="-xO4 -Wc,-Qrm-s -Wc,-Qiselect-T0 $CC_HIGHEST -xprefetch=auto,explicit -xchip=ultra" kevinw@2206: C_O_FLAG_HI="-xO4 -Wc,-Qrm-s -Wc,-Qiselect-T0" kevinw@2206: C_O_FLAG_NORM="-xO2 -Wc,-Qrm-s -Wc,-Qiselect-T0" kevinw@2206: C_O_FLAG_NONE="" kevinw@2206: CXX_O_FLAG_HIGHEST="-xO4 -Qoption cg -Qrm-s -Qoption cg -Qiselect-T0 $CC_HIGHEST -xprefetch=auto,explicit -xchip=ultra" kevinw@2206: CXX_O_FLAG_HI="-xO4 -Qoption cg -Qrm-s -Qoption cg -Qiselect-T0" kevinw@2206: CXX_O_FLAG_NORM="-xO2 -Qoption cg -Qrm-s -Qoption cg -Qiselect-T0" kevinw@2206: CXX_O_FLAG_NONE="" kevinw@2206: fi kevinw@2206: else kevinw@2206: # The remaining toolchains share opt flags between CC and CXX; kevinw@2206: # setup for C and duplicate afterwards. kevinw@2206: if test "x$TOOLCHAIN_TYPE" = xgcc; then kevinw@2206: if test "x$OPENJDK_TARGET_OS" = xmacosx; then kevinw@2206: # On MacOSX we optimize for size, something kevinw@2206: # we should do for all platforms? kevinw@2206: C_O_FLAG_HIGHEST="-Os" kevinw@2206: C_O_FLAG_HI="-Os" kevinw@2206: C_O_FLAG_NORM="-Os" kevinw@2206: C_O_FLAG_NONE="" kevinw@2206: else kevinw@2206: C_O_FLAG_HIGHEST="-O3" kevinw@2206: C_O_FLAG_HI="-O3" kevinw@2206: C_O_FLAG_NORM="-O2" kevinw@2206: C_O_FLAG_NONE="-O0" kevinw@2206: fi kevinw@2206: elif test "x$TOOLCHAIN_TYPE" = xxlc; then kevinw@2206: C_O_FLAG_HIGHEST="-O3" kevinw@2206: C_O_FLAG_HI="-O3 -qstrict" kevinw@2206: C_O_FLAG_NORM="-O2" kevinw@2206: C_O_FLAG_NONE="" kevinw@2206: elif test "x$TOOLCHAIN_TYPE" = xmicrosoft; then kevinw@2206: C_O_FLAG_HIGHEST="-O2" kevinw@2206: C_O_FLAG_HI="-O1" kevinw@2206: C_O_FLAG_NORM="-O1" kevinw@2206: C_O_FLAG_NONE="-Od" kevinw@2206: fi kevinw@2206: CXX_O_FLAG_HIGHEST="$C_O_FLAG_HIGHEST" kevinw@2206: CXX_O_FLAG_HI="$C_O_FLAG_HI" kevinw@2206: CXX_O_FLAG_NORM="$C_O_FLAG_NORM" kevinw@2206: CXX_O_FLAG_NONE="$C_O_FLAG_NONE" kevinw@2206: fi kevinw@2206: kevinw@2206: AC_SUBST(C_O_FLAG_HIGHEST) kevinw@2206: AC_SUBST(C_O_FLAG_HI) kevinw@2206: AC_SUBST(C_O_FLAG_NORM) kevinw@2206: AC_SUBST(C_O_FLAG_NONE) kevinw@2206: AC_SUBST(CXX_O_FLAG_HIGHEST) kevinw@2206: AC_SUBST(CXX_O_FLAG_HI) kevinw@2206: AC_SUBST(CXX_O_FLAG_NORM) kevinw@2206: AC_SUBST(CXX_O_FLAG_NONE) kevinw@2206: ]) kevinw@2206: kevinw@2206: AC_DEFUN_ONCE([FLAGS_SETUP_COMPILER_FLAGS_FOR_JDK], kevinw@2206: [ kevinw@2206: # Special extras... kevinw@2206: if test "x$TOOLCHAIN_TYPE" = xsolstudio; then kevinw@2206: if test "x$OPENJDK_TARGET_CPU_ARCH" = "xsparc"; then kevinw@2206: CFLAGS_JDKLIB_EXTRA="${CFLAGS_JDKLIB_EXTRA} -xregs=no%appl" kevinw@2206: CXXFLAGS_JDKLIB_EXTRA="${CXXFLAGS_JDKLIB_EXTRA} -xregs=no%appl" kevinw@2206: fi kevinw@2206: elif test "x$TOOLCHAIN_TYPE" = xxlc; then kevinw@2206: LDFLAGS_JDK="${LDFLAGS_JDK} -q64 -brtl -bnolibpath -liconv -bexpall" kevinw@2206: CFLAGS_JDK="${CFLAGS_JDK} -qchars=signed -q64 -qfullpath -qsaveopt" kevinw@2206: CXXFLAGS_JDK="${CXXFLAGS_JDK} -qchars=signed -q64 -qfullpath -qsaveopt" kevinw@2206: elif test "x$TOOLCHAIN_TYPE" = xgcc; then andrew@2445: LEGACY_EXTRA_CFLAGS="$LEGACY_EXTRA_CFLAGS -fstack-protector" andrew@2445: LEGACY_EXTRA_CXXFLAGS="$LEGACY_EXTRA_CXXFLAGS -fstack-protector" kevinw@2373: if test "x$OPENJDK_TARGET_OS" != xmacosx; then kevinw@2373: LDFLAGS_JDK="$LDFLAGS_JDK -Wl,-z,relro" kevinw@2373: LEGACY_EXTRA_LDFLAGS="$LEGACY_EXTRA_LDFLAGS -Wl,-z,relro" kevinw@2373: fi kevinw@2206: $2CXXSTD_CXXFLAG="-std=gnu++98" kevinw@2206: FLAGS_CXX_COMPILER_CHECK_ARGUMENTS([[$]$2CXXSTD_CXXFLAG -Werror], kevinw@2206: [], [$2CXXSTD_CXXFLAG=""]) kevinw@2206: $2CXXFLAGS_JDK="${$2CXXFLAGS_JDK} ${$2CXXSTD_CXXFLAG}" kevinw@2206: $2JVM_CFLAGS="${$2JVM_CFLAGS} ${$2CXXSTD_CXXFLAG}" kevinw@2206: AC_SUBST($2CXXSTD_CXXFLAG) kevinw@2206: fi kevinw@2206: kevinw@2206: if test "x$CFLAGS" != "x${ADDED_CFLAGS}"; then kevinw@2206: AC_MSG_WARN([Ignoring CFLAGS($CFLAGS) found in environment. Use --with-extra-cflags]) kevinw@2206: fi kevinw@2206: kevinw@2206: if test "x$CXXFLAGS" != "x${ADDED_CXXFLAGS}"; then kevinw@2206: AC_MSG_WARN([Ignoring CXXFLAGS($CXXFLAGS) found in environment. Use --with-extra-cxxflags]) kevinw@2206: fi kevinw@2206: kevinw@2206: if test "x$LDFLAGS" != "x${ADDED_LDFLAGS}"; then kevinw@2206: AC_MSG_WARN([Ignoring LDFLAGS($LDFLAGS) found in environment. Use --with-extra-ldflags]) kevinw@2206: fi kevinw@2206: sgehwolf@2482: sgehwolf@2482: if test "x$ASFLAGS" != "x"; then sgehwolf@2482: AC_MSG_WARN([Ignoring ASFLAGS($ASFLAGS) found in environment. Use --with-extra-asflags]) sgehwolf@2482: fi sgehwolf@2482: kevinw@2206: AC_ARG_WITH(extra-cflags, [AS_HELP_STRING([--with-extra-cflags], kevinw@2206: [extra flags to be used when compiling jdk c-files])]) kevinw@2206: kevinw@2206: AC_ARG_WITH(extra-cxxflags, [AS_HELP_STRING([--with-extra-cxxflags], kevinw@2206: [extra flags to be used when compiling jdk c++-files])]) kevinw@2206: kevinw@2206: AC_ARG_WITH(extra-ldflags, [AS_HELP_STRING([--with-extra-ldflags], kevinw@2206: [extra flags to be used when linking jdk])]) kevinw@2206: sgehwolf@2482: AC_ARG_WITH(extra-asflags, [AS_HELP_STRING([--with-extra-asflags], sgehwolf@2482: [extra flags to be passed to the assembler])]) sgehwolf@2482: kevinw@2206: CFLAGS_JDK="${CFLAGS_JDK} $with_extra_cflags" kevinw@2206: CXXFLAGS_JDK="${CXXFLAGS_JDK} $with_extra_cxxflags" kevinw@2206: LDFLAGS_JDK="${LDFLAGS_JDK} $with_extra_ldflags" kevinw@2206: kevinw@2206: # Hotspot needs these set in their legacy form kevinw@2215: LEGACY_EXTRA_CFLAGS="$LEGACY_EXTRA_CFLAGS $with_extra_cflags" kevinw@2215: LEGACY_EXTRA_CXXFLAGS="$LEGACY_EXTRA_CXXFLAGS $with_extra_cxxflags" kevinw@2215: LEGACY_EXTRA_LDFLAGS="$LEGACY_EXTRA_LDFLAGS $with_extra_ldflags" sgehwolf@2482: LEGACY_EXTRA_ASFLAGS="$with_extra_asflags" kevinw@2206: kevinw@2206: AC_SUBST(LEGACY_EXTRA_CFLAGS) kevinw@2206: AC_SUBST(LEGACY_EXTRA_CXXFLAGS) kevinw@2206: AC_SUBST(LEGACY_EXTRA_LDFLAGS) sgehwolf@2482: AC_SUBST(LEGACY_EXTRA_ASFLAGS) kevinw@2206: kevinw@2206: ############################################################################### kevinw@2206: # kevinw@2206: # Now setup the CFLAGS and LDFLAGS for the JDK build. kevinw@2206: # Later we will also have CFLAGS and LDFLAGS for the hotspot subrepo build. kevinw@2206: # kevinw@2206: sgehwolf@2424: FDLIBM_CFLAGS="" kevinw@2206: # Setup compiler/platform specific flags to CFLAGS_JDK, kevinw@2206: # CXXFLAGS_JDK and CCXXFLAGS_JDK (common to C and CXX?) kevinw@2206: if test "x$TOOLCHAIN_TYPE" = xgcc; then kevinw@2206: # these options are used for both C and C++ compiles kevinw@2206: CCXXFLAGS_JDK="$CCXXFLAGS $CCXXFLAGS_JDK -Wall -Wno-parentheses -Wextra -Wno-unused -Wno-unused-parameter -Wformat=2 \ andrew@2445: -pipe -fstack-protector -D_GNU_SOURCE -D_REENTRANT -D_LARGEFILE64_SOURCE" kevinw@2206: case $OPENJDK_TARGET_CPU_ARCH in kevinw@2206: arm ) kevinw@2206: # on arm we don't prevent gcc to omit frame pointer but do prevent strict aliasing kevinw@2206: CFLAGS_JDK="${CFLAGS_JDK} -fno-strict-aliasing" kevinw@2206: ;; kevinw@2206: ppc ) kevinw@2206: # on ppc we don't prevent gcc to omit frame pointer nor strict-aliasing kevinw@2206: ;; kevinw@2206: * ) kevinw@2206: CCXXFLAGS_JDK="$CCXXFLAGS_JDK -fno-omit-frame-pointer" kevinw@2206: CFLAGS_JDK="${CFLAGS_JDK} -fno-strict-aliasing" kevinw@2206: ;; kevinw@2206: esac kevinw@2206: TOOLCHAIN_CHECK_COMPILER_VERSION(6, FLAGS_SETUP_GCC6_COMPILER_FLAGS) sgehwolf@2424: sgehwolf@2424: # Check that the compiler supports -ffp-contract=off flag sgehwolf@2424: # Set FDLIBM_CFLAGS to -ffp-contract=off if it does. sgehwolf@2424: # For GCC < 4.6, on x86, x86_64 and ppc check for sgehwolf@2424: # -mno-fused-madd and -fno-strict-aliasing. If they exist, sgehwolf@2424: # use them as a substitute for -ffp-contract=off. sgehwolf@2424: # sgehwolf@2424: # These flags are required for GCC-based builds of sgehwolf@2424: # fdlibm with optimization without losing precision. sgehwolf@2424: # Notably, -ffp-contract=off needs to be added for GCC >= 4.6, sgehwolf@2424: # -mno-fused-madd -fno-strict-aliasing for GCC < 4.6 sgehwolf@2424: COMPILER_FP_CONTRACT_OFF_FLAG="-ffp-contract=off" sgehwolf@2424: FLAGS_CXX_COMPILER_CHECK_ARGUMENTS([[$]COMPILER_FP_CONTRACT_OFF_FLAG -Werror], sgehwolf@2424: [], [COMPILER_FP_CONTRACT_OFF_FLAG=""]) sgehwolf@2424: if test "x$COMPILER_FP_CONTRACT_OFF_FLAG" = x; then sgehwolf@2424: if test "$OPENJDK_TARGET_CPU_ARCH" = "x86" || sgehwolf@2424: test "$OPENJDK_TARGET_CPU_ARCH" = "x86_64" || sgehwolf@2424: test "$OPENJDK_TARGET_CPU_ARCH" = "ppc"; then sgehwolf@2424: M_NO_FUSED_ADD_FLAG="-mno-fused-madd" sgehwolf@2424: FLAGS_CXX_COMPILER_CHECK_ARGUMENTS([[$]M_NO_FUSED_ADD_FLAG -Werror], sgehwolf@2424: [], [M_NO_FUSED_ADD_FLAG=""]) sgehwolf@2424: NO_STRICT_ALIASING_FLAG="-fno-strict-aliasing" sgehwolf@2424: FLAGS_CXX_COMPILER_CHECK_ARGUMENTS([[$]NO_STRICT_ALIASING_FLAG -Werror], sgehwolf@2424: [], [NO_STRICT_ALIASING_FLAG=""]) sgehwolf@2424: if test "x$M_NO_FUSED_ADD_FLAG" != "x" && test "x$NO_STRICT_ALIASING_FLAG" != "x"; then sgehwolf@2424: FDLIBM_CFLAGS="$M_NO_FUSED_ADD_FLAG $NO_STRICT_ALIASING_FLAG" sgehwolf@2424: fi sgehwolf@2424: fi sgehwolf@2424: else sgehwolf@2424: FDLIBM_CFLAGS="$COMPILER_FP_CONTRACT_OFF_FLAG" sgehwolf@2424: fi kevinw@2206: elif test "x$TOOLCHAIN_TYPE" = xsolstudio; then kevinw@2206: CCXXFLAGS_JDK="$CCXXFLAGS $CCXXFLAGS_JDK -DTRACING -DMACRO_MEMSYS_OPS -DBREAKPTS" kevinw@2206: if test "x$OPENJDK_TARGET_CPU_ARCH" = xx86; then kevinw@2206: CCXXFLAGS_JDK="$CCXXFLAGS_JDK -DcpuIntel -Di586 -D$OPENJDK_TARGET_CPU_LEGACY_LIB" kevinw@2206: CFLAGS_JDK="$CFLAGS_JDK -erroff=E_BAD_PRAGMA_PACK_VALUE" kevinw@2206: fi kevinw@2206: kevinw@2206: CFLAGS_JDK="$CFLAGS_JDK -xc99=%none -xCC -errshort=tags -Xa -v -mt -W0,-noglobal" kevinw@2206: CXXFLAGS_JDK="$CXXFLAGS_JDK -errtags=yes +w -mt -features=no%except -DCC_NOEX -norunpath -xnolib" kevinw@2206: elif test "x$TOOLCHAIN_TYPE" = xxlc; then kevinw@2206: CFLAGS_JDK="$CFLAGS_JDK -D_GNU_SOURCE -D_REENTRANT -D_LARGEFILE64_SOURCE -DSTDC" kevinw@2206: CXXFLAGS_JDK="$CXXFLAGS_JDK -D_GNU_SOURCE -D_REENTRANT -D_LARGEFILE64_SOURCE -DSTDC" kevinw@2206: elif test "x$TOOLCHAIN_TYPE" = xmicrosoft; then kevinw@2223: CCXXFLAGS_JDK="$CCXXFLAGS $CCXXFLAGS_JDK \ kevinw@2223: -Zi -MD -Zc:wchar_t- -W3 -wd4800 \ kevinw@2223: -DWIN32_LEAN_AND_MEAN \ kevinw@2223: -D_CRT_SECURE_NO_DEPRECATE -D_CRT_NONSTDC_NO_DEPRECATE \ kevinw@2223: -DWIN32 -DIAL" kevinw@2206: if test "x$OPENJDK_TARGET_CPU" = xx86_64; then kevinw@2206: CCXXFLAGS_JDK="$CCXXFLAGS_JDK -D_AMD64_ -Damd64" kevinw@2206: else kevinw@2206: CCXXFLAGS_JDK="$CCXXFLAGS_JDK -D_X86_ -Dx86" kevinw@2206: fi kevinw@2223: # If building with Visual Studio 2010, we can still use _STATIC_CPPLIB to kevinw@2223: # avoid bundling msvcpNNN.dll. Doesn't work with newer versions of visual kevinw@2223: # studio. kevinw@2223: if test "x$TOOLCHAIN_VERSION" = "x2010"; then aivanov@2225: CCXXFLAGS_JDK="$CCXXFLAGS_JDK \ kevinw@2223: -D_STATIC_CPPLIB -D_DISABLE_DEPRECATE_STATIC_CPPLIB" kevinw@2223: fi kevinw@2206: fi sgehwolf@2424: AC_SUBST(FDLIBM_CFLAGS) kevinw@2206: kevinw@2206: ############################################################################### kevinw@2206: kevinw@2206: # Adjust flags according to debug level. kevinw@2206: case $DEBUG_LEVEL in kevinw@2206: fastdebug ) kevinw@2206: CFLAGS_JDK="$CFLAGS_JDK $CFLAGS_DEBUG_SYMBOLS" kevinw@2206: CXXFLAGS_JDK="$CXXFLAGS_JDK $CXXFLAGS_DEBUG_SYMBOLS" kevinw@2206: C_O_FLAG_HI="$C_O_FLAG_NORM" kevinw@2206: C_O_FLAG_NORM="$C_O_FLAG_NORM" kevinw@2206: CXX_O_FLAG_HI="$CXX_O_FLAG_NORM" kevinw@2206: CXX_O_FLAG_NORM="$CXX_O_FLAG_NORM" kevinw@2206: JAVAC_FLAGS="$JAVAC_FLAGS -g" kevinw@2206: ;; kevinw@2206: slowdebug ) kevinw@2206: CFLAGS_JDK="$CFLAGS_JDK $CFLAGS_DEBUG_SYMBOLS" kevinw@2206: CXXFLAGS_JDK="$CXXFLAGS_JDK $CXXFLAGS_DEBUG_SYMBOLS" kevinw@2206: C_O_FLAG_HI="$C_O_FLAG_NONE" kevinw@2206: C_O_FLAG_NORM="$C_O_FLAG_NONE" kevinw@2206: CXX_O_FLAG_HI="$CXX_O_FLAG_NONE" kevinw@2206: CXX_O_FLAG_NORM="$CXX_O_FLAG_NONE" kevinw@2206: JAVAC_FLAGS="$JAVAC_FLAGS -g" kevinw@2206: ;; kevinw@2206: esac kevinw@2206: kevinw@2206: # Setup LP64 kevinw@2206: CCXXFLAGS_JDK="$CCXXFLAGS_JDK $ADD_LP64" kevinw@2206: kevinw@2206: # Set some common defines. These works for all compilers, but assume kevinw@2206: # -D is universally accepted. kevinw@2206: kevinw@2206: # Setup endianness kevinw@2206: if test "x$OPENJDK_TARGET_CPU_ENDIAN" = xlittle; then kevinw@2206: # The macro _LITTLE_ENDIAN needs to be defined the same to avoid the kevinw@2206: # Sun C compiler warning message: warning: macro redefined: _LITTLE_ENDIAN kevinw@2206: # (The Solaris X86 system defines this in file /usr/include/sys/isa_defs.h). kevinw@2206: # Note: -Dmacro is the same as #define macro 1 kevinw@2206: # -Dmacro= is the same as #define macro kevinw@2206: if test "x$OPENJDK_TARGET_OS" = xsolaris; then kevinw@2206: CCXXFLAGS_JDK="$CCXXFLAGS_JDK -D_LITTLE_ENDIAN=" kevinw@2206: else kevinw@2206: CCXXFLAGS_JDK="$CCXXFLAGS_JDK -D_LITTLE_ENDIAN" kevinw@2206: fi kevinw@2206: else kevinw@2215: # Same goes for _BIG_ENDIAN. Do we really need to set *ENDIAN on Solaris if they kevinw@2215: # are defined in the system? kevinw@2215: if test "x$OPENJDK_TARGET_OS" = xsolaris; then kevinw@2215: CCXXFLAGS_JDK="$CCXXFLAGS_JDK -D_BIG_ENDIAN=" kevinw@2215: else kevinw@2215: CCXXFLAGS_JDK="$CCXXFLAGS_JDK -D_BIG_ENDIAN" kevinw@2215: fi kevinw@2206: fi sgehwolf@2325: if test "x$OPENJDK_TARGET_CPU" = xppc64le; then sgehwolf@2325: CCXXFLAGS_JDK="$CCXXFLAGS_JDK -DABI_ELFv2" sgehwolf@2325: fi kevinw@2206: kevinw@2206: # Setup target OS define. Use OS target name but in upper case. kevinw@2206: OPENJDK_TARGET_OS_UPPERCASE=`$ECHO $OPENJDK_TARGET_OS | $TR 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'` kevinw@2206: CCXXFLAGS_JDK="$CCXXFLAGS_JDK -D$OPENJDK_TARGET_OS_UPPERCASE" kevinw@2206: kevinw@2206: # Setup target CPU kevinw@2206: CCXXFLAGS_JDK="$CCXXFLAGS_JDK -DARCH='\"$OPENJDK_TARGET_CPU_LEGACY\"' -D$OPENJDK_TARGET_CPU_LEGACY" kevinw@2206: kevinw@2206: # Setup debug/release defines kevinw@2206: if test "x$DEBUG_LEVEL" = xrelease; then kevinw@2206: CCXXFLAGS_JDK="$CCXXFLAGS_JDK -DNDEBUG" kevinw@2206: if test "x$OPENJDK_TARGET_OS" = xsolaris; then kevinw@2206: CCXXFLAGS_JDK="$CCXXFLAGS_JDK -DTRIMMED" kevinw@2206: fi kevinw@2206: else kevinw@2206: CCXXFLAGS_JDK="$CCXXFLAGS_JDK -DDEBUG" kevinw@2206: fi kevinw@2206: kevinw@2206: # Setup release name kevinw@2206: CCXXFLAGS_JDK="$CCXXFLAGS_JDK -DRELEASE='\"\$(RELEASE)\"'" kevinw@2206: kevinw@2206: kevinw@2206: # Set some additional per-OS defines. kevinw@2206: if test "x$OPENJDK_TARGET_OS" = xmacosx; then kevinw@2206: CCXXFLAGS_JDK="$CCXXFLAGS_JDK -D_ALLBSD_SOURCE -D_DARWIN_UNLIMITED_SELECT" kevinw@2206: elif test "x$OPENJDK_TARGET_OS" = xaix; then kevinw@2206: # FIXME: PPC64 should not be here. kevinw@2206: CCXXFLAGS_JDK="$CCXXFLAGS_JDK -DPPC64" kevinw@2206: elif test "x$OPENJDK_TARGET_OS" = xbsd; then kevinw@2206: CCXXFLAGS_JDK="$CCXXFLAGS_JDK -D_ALLBSD_SOURCE" kevinw@2206: fi kevinw@2206: kevinw@2206: # Additional macosx handling kevinw@2206: if test "x$OPENJDK_TARGET_OS" = xmacosx; then kevinw@2206: if test "x$TOOLCHAIN_TYPE" = xgcc; then kevinw@2206: # FIXME: This needs to be exported in spec.gmk due to closed legacy code. kevinw@2206: # FIXME: clean this up, and/or move it elsewhere. kevinw@2206: kevinw@2206: # Setting these parameters makes it an error to link to macosx APIs that are kevinw@2206: # newer than the given OS version and makes the linked binaries compatible kevinw@2206: # even if built on a newer version of the OS. kevinw@2206: # The expected format is X.Y.Z kevinw@2206: MACOSX_VERSION_MIN=10.7.0 kevinw@2206: AC_SUBST(MACOSX_VERSION_MIN) kevinw@2206: kevinw@2206: # The macro takes the version with no dots, ex: 1070 kevinw@2206: # Let the flags variables get resolved in make for easier override on make kevinw@2206: # command line. kevinw@2206: CCXXFLAGS_JDK="$CCXXFLAGS_JDK -DMAC_OS_X_VERSION_MAX_ALLOWED=\$(subst .,,\$(MACOSX_VERSION_MIN)) -mmacosx-version-min=\$(MACOSX_VERSION_MIN)" kevinw@2206: LDFLAGS_JDK="$LDFLAGS_JDK -mmacosx-version-min=\$(MACOSX_VERSION_MIN)" kevinw@2206: fi kevinw@2206: fi kevinw@2206: kevinw@2206: # Setup some hard coded includes kevinw@2206: CCXXFLAGS_JDK="$CCXXFLAGS_JDK \ kevinw@2206: -I${JDK_OUTPUTDIR}/include \ kevinw@2206: -I${JDK_OUTPUTDIR}/include/$OPENJDK_TARGET_OS \ kevinw@2206: -I${JDK_TOPDIR}/src/share/javavm/export \ kevinw@2206: -I${JDK_TOPDIR}/src/$OPENJDK_TARGET_OS_EXPORT_DIR/javavm/export \ kevinw@2206: -I${JDK_TOPDIR}/src/share/native/common \ kevinw@2206: -I${JDK_TOPDIR}/src/$OPENJDK_TARGET_OS_API_DIR/native/common" kevinw@2206: kevinw@2206: # The shared libraries are compiled using the picflag. kevinw@2206: CFLAGS_JDKLIB="$CCXXFLAGS_JDK $CFLAGS_JDK $PICFLAG $CFLAGS_JDKLIB_EXTRA" kevinw@2206: CXXFLAGS_JDKLIB="$CCXXFLAGS_JDK $CXXFLAGS_JDK $PICFLAG $CXXFLAGS_JDKLIB_EXTRA " kevinw@2206: kevinw@2206: # Executable flags alvdavi@2496: CFLAGS_JDKEXE="$CCXXFLAGS_JDK $CFLAGS_JDK $PIEFLAG" alvdavi@2496: CXXFLAGS_JDKEXE="$CCXXFLAGS_JDK $CXXFLAGS_JDK $PIEFLAG" kevinw@2206: kevinw@2206: AC_SUBST(CFLAGS_JDKLIB) kevinw@2206: AC_SUBST(CFLAGS_JDKEXE) kevinw@2206: AC_SUBST(CXXFLAGS_JDKLIB) kevinw@2206: AC_SUBST(CXXFLAGS_JDKEXE) kevinw@2206: kevinw@2206: # Setup LDFLAGS et al. kevinw@2206: # kevinw@2206: # Now this is odd. The JDK native libraries have to link against libjvm.so kevinw@2206: # On 32-bit machines there is normally two distinct libjvm.so:s, client and server. kevinw@2206: # Which should we link to? Are we lucky enough that the binary api to the libjvm.so library kevinw@2206: # is identical for client and server? Yes. Which is picked at runtime (client or server)? kevinw@2206: # Neither, since the chosen libjvm.so has already been loaded by the launcher, all the following kevinw@2206: # libraries will link to whatever is in memory. Yuck. kevinw@2206: # kevinw@2206: # Thus we offer the compiler to find libjvm.so first in server then in client. It works. Ugh. kevinw@2206: if test "x$TOOLCHAIN_TYPE" = xmicrosoft; then kevinw@2206: LDFLAGS_JDK="$LDFLAGS_JDK -nologo -opt:ref -incremental:no" kevinw@2206: if test "x$OPENJDK_TARGET_CPU_BITS" = "x32"; then kevinw@2206: LDFLAGS_JDK="$LDFLAGS_JDK -safeseh" kevinw@2206: fi kevinw@2206: # TODO: make -debug optional "--disable-full-debug-symbols" kevinw@2206: LDFLAGS_JDK="$LDFLAGS_JDK -debug" kevinw@2206: LDFLAGS_JDKLIB="${LDFLAGS_JDK} -dll -libpath:${JDK_OUTPUTDIR}/lib" kevinw@2206: LDFLAGS_JDKLIB_SUFFIX="" kevinw@2206: if test "x$OPENJDK_TARGET_CPU_BITS" = "x64"; then kevinw@2206: LDFLAGS_STACK_SIZE=1048576 kevinw@2206: else kevinw@2206: LDFLAGS_STACK_SIZE=327680 kevinw@2206: fi kevinw@2206: LDFLAGS_JDKEXE="${LDFLAGS_JDK} /STACK:$LDFLAGS_STACK_SIZE" kevinw@2206: else kevinw@2206: if test "x$TOOLCHAIN_TYPE" = xgcc; then kevinw@2206: # If this is a --hash-style=gnu system, use --hash-style=both, why? kevinw@2206: # We have previously set HAS_GNU_HASH if this is the case kevinw@2206: if test -n "$HAS_GNU_HASH"; then kevinw@2206: LDFLAGS_JDK="${LDFLAGS_JDK} -Xlinker --hash-style=both " kevinw@2206: fi kevinw@2206: if test "x$OPENJDK_TARGET_OS" = xlinux; then dbuck@2226: # And since we now know that the linker is gnu, then add: dbuck@2226: # -z defs, to forbid undefined symbols in object files dbuck@2226: # -z noexecstack, to mark stack regions as non-executable dbuck@2226: LDFLAGS_JDK="${LDFLAGS_JDK} -Xlinker -z -Xlinker defs -Xlinker -z -Xlinker noexecstack" kevinw@2206: if test "x$DEBUG_LEVEL" = "xrelease"; then kevinw@2206: # When building release libraries, tell the linker optimize them. kevinw@2206: # Should this be supplied to the OSS linker as well? kevinw@2206: LDFLAGS_JDK="${LDFLAGS_JDK} -Xlinker -O1" kevinw@2206: fi kevinw@2206: fi kevinw@2206: fi kevinw@2206: kevinw@2206: if test "x$TOOLCHAIN_TYPE" = xsolstudio; then kevinw@2206: LDFLAGS_JDK="$LDFLAGS_JDK -z defs -xildoff -ztext" kevinw@2206: LDFLAGS_CXX_JDK="$LDFLAGS_CXX_JDK -norunpath -xnolib" kevinw@2206: fi kevinw@2206: kevinw@2206: LDFLAGS_JDKLIB="${LDFLAGS_JDK} $SHARED_LIBRARY_FLAGS \ kevinw@2206: -L${JDK_OUTPUTDIR}/lib${OPENJDK_TARGET_CPU_LIBDIR}" kevinw@2206: kevinw@2206: # On some platforms (mac) the linker warns about non existing -L dirs. kevinw@2206: # Add server first if available. Linking aginst client does not always produce the same results. kevinw@2206: # Only add client dir if client is being built. Add minimal (note not minimal1) if only building minimal1. kevinw@2206: # Default to server for other variants. kevinw@2206: if test "x$JVM_VARIANT_SERVER" = xtrue; then kevinw@2206: LDFLAGS_JDKLIB="${LDFLAGS_JDKLIB} -L${JDK_OUTPUTDIR}/lib${OPENJDK_TARGET_CPU_LIBDIR}/server" kevinw@2206: elif test "x$JVM_VARIANT_CLIENT" = xtrue; then kevinw@2206: LDFLAGS_JDKLIB="${LDFLAGS_JDKLIB} -L${JDK_OUTPUTDIR}/lib${OPENJDK_TARGET_CPU_LIBDIR}/client" kevinw@2206: elif test "x$JVM_VARIANT_MINIMAL1" = xtrue; then kevinw@2206: LDFLAGS_JDKLIB="${LDFLAGS_JDKLIB} -L${JDK_OUTPUTDIR}/lib${OPENJDK_TARGET_CPU_LIBDIR}/minimal" kevinw@2206: else kevinw@2206: LDFLAGS_JDKLIB="${LDFLAGS_JDKLIB} -L${JDK_OUTPUTDIR}/lib${OPENJDK_TARGET_CPU_LIBDIR}/server" kevinw@2206: fi kevinw@2206: kevinw@2206: LDFLAGS_JDKLIB_SUFFIX="-ljava -ljvm" kevinw@2206: if test "x$TOOLCHAIN_TYPE" = xsolstudio; then kevinw@2206: LDFLAGS_JDKLIB_SUFFIX="$LDFLAGS_JDKLIB_SUFFIX -lc" kevinw@2206: fi kevinw@2206: kevinw@2206: LDFLAGS_JDKEXE="${LDFLAGS_JDK}" kevinw@2206: if test "x$OPENJDK_TARGET_OS" = xlinux; then kevinw@2206: LDFLAGS_JDKEXE="$LDFLAGS_JDKEXE -Xlinker --allow-shlib-undefined" kevinw@2206: fi alvdavi@2496: if test "x$TOOLCHAIN_TYPE" = xgcc; then alvdavi@2497: # Enabling pie on 32 bit builds prevents the JVM from allocating a continuous alvdavi@2497: # java heap. alvdavi@2497: if test "x$OPENJDK_TARGET_CPU_BITS" != "x32"; then alvdavi@2497: LDFLAGS_JDKEXE="$LDFLAGS_JDKEXE -pie" alvdavi@2497: fi alvdavi@2496: fi kevinw@2206: fi kevinw@2206: AC_SUBST(LDFLAGS_JDKLIB) kevinw@2206: AC_SUBST(LDFLAGS_JDKEXE) kevinw@2206: AC_SUBST(LDFLAGS_JDKLIB_SUFFIX) kevinw@2206: AC_SUBST(LDFLAGS_JDKEXE_SUFFIX) kevinw@2206: AC_SUBST(LDFLAGS_CXX_JDK) kevinw@2206: ]) kevinw@2206: kevinw@2206: kevinw@2206: # FLAGS_C_COMPILER_CHECK_ARGUMENTS([ARGUMENT], [RUN-IF-TRUE], kevinw@2206: # [RUN-IF-FALSE]) kevinw@2206: # ------------------------------------------------------------ kevinw@2206: # Check that the C compiler supports an argument kevinw@2206: AC_DEFUN([FLAGS_C_COMPILER_CHECK_ARGUMENTS], kevinw@2206: [ kevinw@2206: AC_MSG_CHECKING([if the C compiler supports "$1"]) kevinw@2206: supports=yes kevinw@2206: kevinw@2206: saved_cflags="$CFLAGS" kevinw@2206: CFLAGS="$CFLAGS $1" kevinw@2206: AC_LANG_PUSH([C]) kevinw@2206: AC_COMPILE_IFELSE([AC_LANG_SOURCE([[int i;]])], [], kevinw@2206: [supports=no]) kevinw@2206: AC_LANG_POP([C]) kevinw@2206: CFLAGS="$saved_cflags" kevinw@2206: kevinw@2206: AC_MSG_RESULT([$supports]) kevinw@2206: if test "x$supports" = "xyes" ; then kevinw@2206: m4_ifval([$2], [$2], [:]) kevinw@2206: else kevinw@2206: m4_ifval([$3], [$3], [:]) kevinw@2206: fi kevinw@2206: ]) kevinw@2206: kevinw@2206: # FLAGS_CXX_COMPILER_CHECK_ARGUMENTS([ARGUMENT], [RUN-IF-TRUE], kevinw@2206: # [RUN-IF-FALSE]) kevinw@2206: # ------------------------------------------------------------ kevinw@2206: # Check that the C++ compiler supports an argument kevinw@2206: AC_DEFUN([FLAGS_CXX_COMPILER_CHECK_ARGUMENTS], kevinw@2206: [ kevinw@2206: AC_MSG_CHECKING([if the C++ compiler supports "$1"]) kevinw@2206: supports=yes kevinw@2206: kevinw@2206: saved_cxxflags="$CXXFLAGS" kevinw@2206: CXXFLAGS="$CXXFLAG $1" kevinw@2206: AC_LANG_PUSH([C++]) kevinw@2206: AC_COMPILE_IFELSE([AC_LANG_SOURCE([[int i;]])], [], kevinw@2206: [supports=no]) kevinw@2206: AC_LANG_POP([C++]) kevinw@2206: CXXFLAGS="$saved_cxxflags" kevinw@2206: kevinw@2206: AC_MSG_RESULT([$supports]) kevinw@2206: if test "x$supports" = "xyes" ; then kevinw@2206: m4_ifval([$2], [$2], [:]) kevinw@2206: else kevinw@2206: m4_ifval([$3], [$3], [:]) kevinw@2206: fi kevinw@2206: ]) kevinw@2206: kevinw@2206: # FLAGS_COMPILER_CHECK_ARGUMENTS([ARGUMENT], [RUN-IF-TRUE], kevinw@2206: # [RUN-IF-FALSE]) kevinw@2206: # ------------------------------------------------------------ kevinw@2206: # Check that the C and C++ compilers support an argument kevinw@2206: AC_DEFUN([FLAGS_COMPILER_CHECK_ARGUMENTS], kevinw@2206: [ kevinw@2206: FLAGS_C_COMPILER_CHECK_ARGUMENTS([$1], kevinw@2206: [C_COMP_SUPPORTS="yes"], kevinw@2206: [C_COMP_SUPPORTS="no"]) kevinw@2206: FLAGS_CXX_COMPILER_CHECK_ARGUMENTS([$1], kevinw@2206: [CXX_COMP_SUPPORTS="yes"], kevinw@2206: [CXX_COMP_SUPPORTS="no"]) kevinw@2206: kevinw@2206: AC_MSG_CHECKING([if both compilers support "$1"]) kevinw@2206: supports=no kevinw@2206: if test "x$C_COMP_SUPPORTS" = "xyes" -a "x$CXX_COMP_SUPPORTS" = "xyes"; then supports=yes; fi kevinw@2206: kevinw@2206: AC_MSG_RESULT([$supports]) kevinw@2206: if test "x$supports" = "xyes" ; then kevinw@2206: m4_ifval([$2], [$2], [:]) kevinw@2206: else kevinw@2206: m4_ifval([$3], [$3], [:]) kevinw@2206: fi kevinw@2206: ]) kevinw@2206: kevinw@2206: AC_DEFUN_ONCE([FLAGS_SETUP_COMPILER_FLAGS_MISC], kevinw@2206: [ kevinw@2206: # Some Zero and Shark settings. kevinw@2206: # ZERO_ARCHFLAG tells the compiler which mode to build for kevinw@2206: case "${OPENJDK_TARGET_CPU}" in kevinw@2206: s390) kevinw@2206: ZERO_ARCHFLAG="${COMPILER_TARGET_BITS_FLAG}31" kevinw@2206: ;; kevinw@2206: *) kevinw@2206: ZERO_ARCHFLAG="${COMPILER_TARGET_BITS_FLAG}${OPENJDK_TARGET_CPU_BITS}" kevinw@2206: esac kevinw@2206: FLAGS_COMPILER_CHECK_ARGUMENTS([$ZERO_ARCHFLAG], [], [ZERO_ARCHFLAG=""]) kevinw@2206: AC_SUBST(ZERO_ARCHFLAG) kevinw@2206: kevinw@2206: # Check that the compiler supports -mX (or -qX on AIX) flags kevinw@2206: # Set COMPILER_SUPPORTS_TARGET_BITS_FLAG to 'true' if it does kevinw@2206: FLAGS_COMPILER_CHECK_ARGUMENTS([${COMPILER_TARGET_BITS_FLAG}${OPENJDK_TARGET_CPU_BITS}], kevinw@2206: [COMPILER_SUPPORTS_TARGET_BITS_FLAG=true], kevinw@2206: [COMPILER_SUPPORTS_TARGET_BITS_FLAG=false]) kevinw@2206: AC_SUBST(COMPILER_SUPPORTS_TARGET_BITS_FLAG) kevinw@2206: ]) kevinw@2206: kevinw@2206: AC_DEFUN_ONCE([FLAGS_SETUP_GCC6_COMPILER_FLAGS], kevinw@2206: [ kevinw@2206: # These flags are required for GCC 6 builds as undefined behaviour in OpenJDK code kevinw@2206: # runs afoul of the more aggressive versions of these optimisations. kevinw@2206: # Notably, value range propagation now assumes that the this pointer of C++ kevinw@2206: # member functions is non-null. kevinw@2206: NO_DELETE_NULL_POINTER_CHECKS_CFLAG="-fno-delete-null-pointer-checks" kevinw@2206: FLAGS_COMPILER_CHECK_ARGUMENTS([$NO_DELETE_NULL_POINTER_CHECKS_CFLAG -Werror], kevinw@2206: [], [NO_DELETE_NULL_POINTER_CHECKS_CFLAG=""]) kevinw@2206: AC_SUBST([NO_DELETE_NULL_POINTER_CHECKS_CFLAG]) kevinw@2206: NO_LIFETIME_DSE_CFLAG="-fno-lifetime-dse" kevinw@2206: FLAGS_COMPILER_CHECK_ARGUMENTS([$NO_LIFETIME_DSE_CFLAG -Werror], kevinw@2206: [], [NO_LIFETIME_DSE_CFLAG=""]) kevinw@2206: CFLAGS_JDK="${CFLAGS_JDK} ${NO_DELETE_NULL_POINTER_CHECKS_CFLAG} ${NO_LIFETIME_DSE_CFLAG}" kevinw@2206: AC_SUBST([NO_LIFETIME_DSE_CFLAG]) kevinw@2206: ]) kevinw@2206: