erikj@459: # erikj@459: # Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved. erikj@459: # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. erikj@459: # erikj@459: # This code is free software; you can redistribute it and/or modify it erikj@459: # under the terms of the GNU General Public License version 2 only, as erikj@459: # published by the Free Software Foundation. Oracle designates this erikj@459: # particular file as subject to the "Classpath" exception as provided erikj@459: # by Oracle in the LICENSE file that accompanied this code. erikj@459: # erikj@459: # This code is distributed in the hope that it will be useful, but WITHOUT erikj@459: # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or erikj@459: # FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License erikj@459: # version 2 for more details (a copy is included in the LICENSE file that erikj@459: # accompanied this code). erikj@459: # erikj@459: # You should have received a copy of the GNU General Public License version erikj@459: # 2 along with this work; if not, write to the Free Software Foundation, erikj@459: # Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. erikj@459: # erikj@459: # Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA erikj@459: # or visit www.oracle.com if you need additional information or have any erikj@459: # questions. erikj@459: # erikj@459: erikj@459: AC_DEFUN_ONCE([TOOLCHAIN_SETUP_VISUAL_STUDIO_ENV], erikj@459: [ erikj@459: erikj@459: # Check if the VS env variables were setup prior to running configure. erikj@459: # If not, then find vcvarsall.bat and run it automatically, and integrate erikj@459: # the set env variables into the spec file. erikj@459: SETUPDEVENV="# No special vars" erikj@459: if test "x$OPENJDK_BUILD_OS" = "xwindows"; then erikj@459: # If vcvarsall.bat has been run, then VCINSTALLDIR is set. erikj@459: if test "x$VCINSTALLDIR" != x; then erikj@459: # No further setup is needed. The build will happen from this kind erikj@459: # of shell. erikj@459: SETUPDEVENV="# This spec file expects that you are running bash from within a VS command prompt." erikj@459: # Make sure to remind you, if you forget to run make from a cygwin bash shell erikj@459: # that is spawned "bash -l" from a VS command prompt. erikj@459: CHECK_FOR_VCINSTALLDIR=yes erikj@459: AC_MSG_CHECKING([if you are running from within a VS command prompt]) erikj@459: AC_MSG_RESULT([yes]) erikj@459: else erikj@459: # Ah, we have not yet run vcvarsall.bat/vsvars32.bat/vsvars64.bat. Lets do that. First find it. erikj@459: if test "x$VS100COMNTOOLS" != x; then erikj@459: VARSBAT=`find "$VS100COMNTOOLS/../.." -name vcvarsall.bat` erikj@459: SEARCH_ROOT="$VS100COMNTOOLS" erikj@459: else erikj@459: VARSBAT=`find "$PROGRAMFILES" -name vcvarsall.bat` erikj@459: SEARCH_ROOT="$PROGRAMFILES" erikj@459: fi erikj@459: VCPATH=`dirname "$VARSBAT"` erikj@459: VCPATH=`cygpath -w "$VCPATH"` erikj@459: if test "x$VARSBAT" = x || test ! -d "$VCPATH"; then erikj@459: AC_MSG_CHECKING([if we can find the VS installation]) erikj@459: AC_MSG_RESULT([no]) erikj@459: AC_MSG_ERROR([Tried to find a VS installation using both $SEARCH_ROOT but failed. Please run "c:\\cygwin\\bin\\bash.exe -l" from a VS command prompt and then run configure/make from there.]) erikj@459: fi erikj@459: case "$LEGACY_OPENJDK_TARGET_CPU1" in erikj@459: i?86) erikj@459: VARSBAT_ARCH=x86 erikj@459: ;; erikj@459: *) erikj@459: VARSBAT_ARCH=$LEGACY_OPENJDK_TARGET_CPU1 erikj@459: ;; erikj@459: esac erikj@459: # Lets extract the variables that are set by vcvarsall.bat/vsvars32.bat/vsvars64.bat erikj@459: cd $OUTPUT_ROOT erikj@459: bash $SRC_ROOT/common/bin/extractvcvars.sh "$VARSBAT" "$VARSBAT_ARCH" erikj@459: cd $CURDIR erikj@459: if test ! -s $OUTPUT_ROOT/localdevenv.sh || test ! -s $OUTPUT_ROOT/localdevenv.gmk; then erikj@459: AC_MSG_CHECKING([if we can extract the needed env variables]) erikj@459: AC_MSG_RESULT([no]) erikj@459: AC_MSG_ERROR([Could not succesfully extract the env variables needed for the VS setup. Please run "c:\\cygwin\\bin\\bash.exe -l" from a VS command prompt and then run configure/make from there.]) erikj@459: fi erikj@459: # Now set all paths and other env variables. This will allow the rest of erikj@459: # the configure script to find and run the compiler in the proper way. erikj@459: . $OUTPUT_ROOT/localdevenv.sh erikj@459: AC_MSG_CHECKING([if we can find the VS installation]) erikj@459: if test "x$VCINSTALLDIR" != x; then erikj@459: AC_MSG_RESULT([$VCINSTALLDIR]) erikj@459: else erikj@459: AC_MSG_RESULT([no]) erikj@459: AC_MSG_ERROR([Could not find VS installation. Please install. If you are sure you have installed VS, then please run "c:\\cygwin\\bin\\bash.exe -l" from a VS command prompt and then run configure/make from there.]) erikj@459: fi erikj@459: CHECK_FOR_VCINSTALLDIR=no erikj@459: SETUPDEVENV="include $OUTPUT_ROOT/localdevenv.gmk" erikj@459: erikj@459: AC_MSG_CHECKING([for msvcr100.dll]) erikj@459: AC_ARG_WITH(msvcr100dll, [AS_HELP_STRING([--with-msvcr100dll], erikj@459: [copy this msvcr100.dll into the built JDK])]) erikj@459: if test "x$with_msvcr100dll" != x; then erikj@459: MSVCR100DLL="$with_msvcr100dll" erikj@459: else erikj@459: if test "x$OPENJDK_TARGET_CPU_BITS" = x64; then erikj@459: MSVCR100DLL=`find "$VCINSTALLDIR/.." -name msvcr100.dll | grep x64 | head --lines 1` erikj@459: else erikj@459: MSVCR100DLL=`find "$VCINSTALLDIR/.." -name msvcr100.dll | grep x86 | grep -v ia64 | grep -v x64 | head --lines 1` erikj@459: if test "x$MSVCR100DLL" = x; then erikj@459: MSVCR100DLL=`find "$VCINSTALLDIR/.." -name msvcr100.dll | head --lines 1` erikj@459: fi erikj@459: fi erikj@459: fi erikj@459: if test "x$MSVCR100DLL" = x; then erikj@459: AC_MSG_RESULT([no]) erikj@459: AC_MSG_ERROR([Could not find msvcr100.dll !]) erikj@459: fi erikj@459: AC_MSG_RESULT([$MSVCR100DLL]) erikj@459: SPACESAFE(MSVCR100DLL,[the path to msvcr100.dll]) erikj@459: fi erikj@459: fi erikj@459: AC_SUBST(SETUPDEVENV) erikj@459: AC_SUBST(CHECK_FOR_VCINSTALLDIR) erikj@459: AC_SUBST(MSVCR100DLL) erikj@459: ]) erikj@459: erikj@459: AC_DEFUN_ONCE([TOOLCHAIN_SETUP_SYSROOT_AND_OUT_OPTIONS], erikj@459: [ erikj@459: ############################################################################### erikj@459: # erikj@459: # Configure the development tool paths and potential sysroot. erikj@459: # erikj@459: AC_LANG(C++) erikj@459: DEVKIT= erikj@459: SYS_ROOT=/ erikj@459: AC_SUBST(SYS_ROOT) erikj@459: erikj@459: # The option used to specify the target .o,.a or .so file. erikj@459: # When compiling, how to specify the to be created object file. erikj@459: CC_OUT_OPTION='-o$(SPACE)' erikj@459: # When linking, how to specify the to be created executable. erikj@459: EXE_OUT_OPTION='-o$(SPACE)' erikj@459: # When linking, how to specify the to be created dynamically linkable library. erikj@459: LD_OUT_OPTION='-o$(SPACE)' erikj@459: # When archiving, how to specify the to be create static archive for object files. erikj@459: AR_OUT_OPTION='rcs$(SPACE)' erikj@459: AC_SUBST(CC_OUT_OPTION) erikj@459: AC_SUBST(EXE_OUT_OPTION) erikj@459: AC_SUBST(LD_OUT_OPTION) erikj@459: AC_SUBST(AR_OUT_OPTION) erikj@459: ]) erikj@459: erikj@459: AC_DEFUN_ONCE([TOOLCHAIN_SETUP_PATHS], erikj@459: [ erikj@459: # If --build AND --host is set, then the configure script will find any erikj@459: # cross compilation tools in the PATH. Cross compilation tools erikj@459: # follows the cross compilation standard where they are prefixed with ${host}. erikj@459: # For example the binary i686-sun-solaris2.10-gcc erikj@459: # will cross compile for i686-sun-solaris2.10 erikj@459: # If neither of build and host is not set, then build=host and the erikj@459: # default compiler found in the path will be used. erikj@459: # Setting only --host, does not seem to be really supported. erikj@459: # Please set both --build and --host if you want to cross compile. erikj@459: erikj@459: DEFINE_CROSS_COMPILE_ARCH="" erikj@459: HOSTCC="" erikj@459: HOSTCXX="" erikj@459: HOSTLD="" erikj@459: AC_SUBST(DEFINE_CROSS_COMPILE_ARCH) erikj@459: AC_MSG_CHECKING([if this is a cross compile]) erikj@459: if test "x$OPENJDK_BUILD_SYSTEM" != "x$OPENJDK_TARGET_SYSTEM"; then erikj@459: AC_MSG_RESULT([yes, from $OPENJDK_BUILD_SYSTEM to $OPENJDK_TARGET_SYSTEM]) erikj@459: # We have detected a cross compile! erikj@459: DEFINE_CROSS_COMPILE_ARCH="CROSS_COMPILE_ARCH:=$LEGACY_OPENJDK_TARGET_CPU1" erikj@459: # Now we to find a C/C++ compiler that can build executables for the build erikj@459: # platform. We can't use the AC_PROG_CC macro, since it can only be used erikj@459: # once. erikj@459: AC_PATH_PROGS(HOSTCC, [cl cc gcc]) erikj@459: WHICHCMD(HOSTCC) erikj@459: AC_PATH_PROGS(HOSTCXX, [cl CC g++]) erikj@459: WHICHCMD(HOSTCXX) erikj@459: AC_PATH_PROG(HOSTLD, ld) erikj@459: WHICHCMD(HOSTLD) erikj@459: # Building for the build platform should be easy. Therefore erikj@459: # we do not need any linkers or assemblers etc. erikj@459: else erikj@459: AC_MSG_RESULT([no]) erikj@459: fi erikj@459: erikj@459: # You can force the sys-root if the sys-root encoded into the cross compiler tools erikj@459: # is not correct. erikj@459: AC_ARG_WITH(sys-root, [AS_HELP_STRING([--with-sys-root], erikj@459: [pass this sys-root to the compilers and linker (useful if the sys-root encoded in erikj@459: the cross compiler tools is incorrect)])]) erikj@459: erikj@459: if test "x$with_sys_root" != x; then erikj@459: SYS_ROOT=$with_sys_root erikj@459: fi erikj@459: erikj@459: # If a devkit is found on the builddeps server, then prepend its path to the erikj@459: # PATH variable. If there are cross compilers available in the devkit, these erikj@459: # will be found by AC_PROG_CC et al. erikj@459: BDEPS_CHECK_MODULE(DEVKIT, devkit, xxx, erikj@459: [# Found devkit erikj@459: PATH="$DEVKIT/bin:$PATH" erikj@459: SYS_ROOT="$DEVKIT/${rewritten_target}/sys-root" erikj@459: if test "x$x_includes" = "xNONE"; then erikj@459: x_includes="$SYS_ROOT/usr/include/X11" erikj@459: fi erikj@459: if test "x$x_libraries" = "xNONE"; then erikj@459: x_libraries="$SYS_ROOT/usr/lib" erikj@459: fi erikj@459: ], erikj@459: []) erikj@459: erikj@459: if test "x$SYS_ROOT" != "x/" ; then erikj@459: CFLAGS="--sysroot=$SYS_ROOT $CFLAGS" erikj@459: CXXFLAGS="--sysroot=$SYS_ROOT $CXXFLAGS" erikj@459: OBJCFLAGS="--sysroot=$SYS_ROOT $OBJCFLAGS" erikj@459: OBJCXXFLAGS="--sysroot=$SYS_ROOT $OBJCFLAGS" erikj@459: CPPFLAGS="--sysroot=$SYS_ROOT $CPPFLAGS" erikj@459: LDFLAGS="--sysroot=$SYS_ROOT $LDFLAGS" erikj@459: fi erikj@459: erikj@459: # Store the CFLAGS etal passed to the configure script. erikj@459: ORG_CFLAGS="$CFLAGS" erikj@459: ORG_CXXFLAGS="$CXXFLAGS" erikj@459: ORG_OBJCFLAGS="$OBJCFLAGS" erikj@459: erikj@459: AC_ARG_WITH([tools-dir], [AS_HELP_STRING([--with-tools-dir], erikj@459: [search this directory for compilers and tools])], [TOOLS_DIR=$with_tools_dir]) erikj@459: erikj@459: AC_ARG_WITH([devkit], [AS_HELP_STRING([--with-devkit], erikj@459: [use this directory as base for tools-dir and sys-root])], [ erikj@459: if test "x$with_sys_root" != x; then erikj@459: AC_MSG_ERROR([Cannot specify both --with-devkit and --with-sys-root at the same time]) erikj@459: fi erikj@459: if test "x$with_tools_dir" != x; then erikj@459: AC_MSG_ERROR([Cannot specify both --with-devkit and --with-tools-dir at the same time]) erikj@459: fi erikj@459: TOOLS_DIR=$with_devkit/bin erikj@459: SYS_ROOT=$with_devkit/$host_alias/libc erikj@459: ]) erikj@459: erikj@459: # autoconf magic only relies on PATH, so update it if tools dir is specified erikj@459: OLD_PATH="$PATH" erikj@459: if test "x$TOOLS_DIR" != x; then erikj@459: PATH=$TOOLS_DIR:$PATH erikj@459: fi erikj@459: erikj@459: # gcc is almost always present, but on Windows we erikj@459: # prefer cl.exe and on Solaris we prefer CC. erikj@459: # Thus test for them in this order. erikj@459: AC_PROG_CC([cl cc gcc]) erikj@459: if test "x$CC" = x; then erikj@459: HELP_MSG_MISSING_DEPENDENCY([devkit]) erikj@459: AC_MSG_ERROR([Could not find a compiler. $HELP_MSG]) erikj@459: fi erikj@459: if test "x$CC" = xcc && test "x$OPENJDK_BUILD_OS" = xmacosx; then erikj@459: # Do not use cc on MacOSX use gcc instead. erikj@459: CC="gcc" erikj@459: fi erikj@459: WHICHCMD(CC) erikj@459: erikj@459: AC_PROG_CXX([cl CC g++]) erikj@459: if test "x$CXX" = xCC && test "x$OPENJDK_BUILD_OS" = xmacosx; then erikj@459: # The found CC, even though it seems to be a g++ derivate, cannot compile erikj@459: # c++ code. Override. erikj@459: CXX="g++" erikj@459: fi erikj@459: WHICHCMD(CXX) erikj@459: erikj@459: if test "x$CXX" = x || test "x$CC" = x; then erikj@459: HELP_MSG_MISSING_DEPENDENCY([devkit]) erikj@459: AC_MSG_ERROR([Could not find the needed compilers! $HELP_MSG ]) erikj@459: fi erikj@459: erikj@459: if test "x$OPENJDK_BUILD_OS" != xwindows; then erikj@459: AC_PROG_OBJC erikj@459: WHICHCMD(OBJC) erikj@459: else erikj@459: OBJC= erikj@459: fi erikj@459: erikj@459: # Restore the flags to the user specified values. erikj@459: # This is necessary since AC_PROG_CC defaults CFLAGS to "-g -O2" erikj@459: CFLAGS="$ORG_CFLAGS" erikj@459: CXXFLAGS="$ORG_CXXFLAGS" erikj@459: OBJCFLAGS="$ORG_OBJCFLAGS" erikj@459: erikj@459: # If we are not cross compiling, use the same compilers for erikj@459: # building the build platform executables. erikj@459: if test "x$DEFINE_CROSS_COMPILE_ARCH" = x; then erikj@459: HOSTCC="$CC" erikj@459: HOSTCXX="$CXX" erikj@459: fi erikj@459: erikj@459: AC_CHECK_TOOL(LD, ld) erikj@459: WHICHCMD(LD) erikj@459: LD="$CC" erikj@459: LDEXE="$CC" erikj@459: LDCXX="$CXX" erikj@459: LDEXECXX="$CXX" erikj@459: # LDEXE is the linker to use, when creating executables. erikj@459: AC_SUBST(LDEXE) erikj@459: # Linking C++ libraries. erikj@459: AC_SUBST(LDCXX) erikj@459: # Linking C++ executables. erikj@459: AC_SUBST(LDEXECXX) erikj@459: erikj@459: AC_CHECK_TOOL(AR, ar) erikj@459: WHICHCMD(AR) erikj@459: if test "x$OPENJDK_BUILD_OS" = xmacosx; then erikj@459: ARFLAGS="-r" erikj@459: else erikj@459: ARFLAGS="" erikj@459: fi erikj@459: AC_SUBST(ARFLAGS) erikj@459: erikj@459: COMPILER_NAME=gcc erikj@459: COMPILER_TYPE=CC erikj@459: AS_IF([test "x$OPENJDK_BUILD_OS" = xwindows], [ erikj@459: # For now, assume that we are always compiling using cl.exe. erikj@459: CC_OUT_OPTION=-Fo erikj@459: EXE_OUT_OPTION=-out: erikj@459: LD_OUT_OPTION=-out: erikj@459: AR_OUT_OPTION=-out: erikj@459: # On Windows, reject /usr/bin/link, which is a cygwin erikj@459: # program for something completely different. erikj@459: AC_CHECK_PROG([WINLD], [link],[link],,, [/usr/bin/link]) erikj@459: # Since we must ignore the first found link, WINLD will contain erikj@459: # the full path to the link.exe program. erikj@459: WHICHCMD_SPACESAFE([WINLD]) erikj@459: LD="$WINLD" erikj@459: LDEXE="$WINLD" erikj@459: LDCXX="$WINLD" erikj@459: LDEXECXX="$WINLD" erikj@459: # Set HOSTLD to same as LD until we fully support cross compilation erikj@459: # on windows. erikj@459: HOSTLD="$WINLD" erikj@459: erikj@459: AC_CHECK_PROG([MT], [mt], [mt],,, [/usr/bin/mt]) erikj@459: WHICHCMD_SPACESAFE([MT]) erikj@459: # The resource compiler erikj@459: AC_CHECK_PROG([RC], [rc], [rc],,, [/usr/bin/rc]) erikj@459: WHICHCMD_SPACESAFE([RC]) erikj@459: erikj@459: RC_FLAGS="-nologo /l 0x409 /r" erikj@459: AS_IF([test "x$VARIANT" = xOPT], [ erikj@459: RC_FLAGS="$RC_FLAGS -d NDEBUG" erikj@459: ]) erikj@459: JDK_UPDATE_VERSION_NOTNULL=$JDK_UPDATE_VERSION erikj@459: AS_IF([test "x$JDK_UPDATE_VERSION" = x], [ erikj@459: JDK_UPDATE_VERSION_NOTNULL=0 erikj@459: ]) erikj@459: RC_FLAGS="$RC_FLAGS -d \"JDK_BUILD_ID=$FULL_VERSION\"" erikj@459: RC_FLAGS="$RC_FLAGS -d \"JDK_COMPANY=$COMPANY_NAME\"" erikj@459: RC_FLAGS="$RC_FLAGS -d \"JDK_COMPONENT=$PRODUCT_NAME $JDK_RC_PLATFORM_NAME binary\"" erikj@459: RC_FLAGS="$RC_FLAGS -d \"JDK_VER=$JDK_MINOR_VERSION.$JDK_MICRO_VERSION.$JDK_UPDATE_VERSION_NOTNULL.$COOKED_BUILD_NUMBER\"" erikj@459: RC_FLAGS="$RC_FLAGS -d \"JDK_COPYRIGHT=Copyright \xA9 $COPYRIGHT_YEAR\"" erikj@459: RC_FLAGS="$RC_FLAGS -d \"JDK_NAME=$PRODUCT_NAME $JDK_RC_PLATFORM_NAME $JDK_MINOR_VERSION $JDK_UPDATE_META_TAG\"" erikj@459: RC_FLAGS="$RC_FLAGS -d \"JDK_FVER=$JDK_MINOR_VERSION,$JDK_MICRO_VERSION,$JDK_UPDATE_VERSION_NOTNULL,$COOKED_BUILD_NUMBER\"" erikj@459: erikj@459: # lib.exe is used to create static libraries. erikj@459: AC_CHECK_PROG([WINAR], [lib],[lib],,,) erikj@459: WHICHCMD_SPACESAFE([WINAR]) erikj@459: AR="$WINAR" erikj@459: ARFLAGS="-nologo -NODEFAULTLIB:MSVCRT" erikj@459: erikj@459: AC_CHECK_PROG([DUMPBIN], [dumpbin], [dumpbin],,,) erikj@459: WHICHCMD_SPACESAFE([DUMPBIN]) erikj@459: erikj@459: COMPILER_TYPE=CL erikj@459: CCXXFLAGS="$CCXXFLAGS -nologo" erikj@459: ]) erikj@459: AC_SUBST(RC_FLAGS) erikj@459: AC_SUBST(COMPILER_TYPE) erikj@459: erikj@459: AC_PROG_CPP erikj@459: WHICHCMD(CPP) erikj@459: erikj@459: AC_PROG_CXXCPP erikj@459: WHICHCMD(CXXCPP) erikj@459: erikj@459: # for solaris we really need solaris tools, and not gnu equivalent erikj@459: # these seems to normally reside in /usr/ccs/bin so add that to path before erikj@459: # starting to probe erikj@459: # erikj@459: # NOTE: I add this /usr/ccs/bin after TOOLS but before OLD_PATH erikj@459: # so that it can be overriden --with-tools-dir erikj@459: if test "x$OPENJDK_BUILD_OS" = xsolaris; then erikj@459: PATH="${TOOLS_DIR}:/usr/ccs/bin:${OLD_PATH}" erikj@459: fi erikj@459: erikj@459: # Find the right assembler. erikj@459: if test "x$OPENJDK_BUILD_OS" = xsolaris; then erikj@459: AC_PATH_PROG(AS, as) erikj@459: WHICHCMD(AS) erikj@459: ASFLAGS=" " erikj@459: else erikj@459: AS="$CC -c" erikj@459: ASFLAGS=" " erikj@459: fi erikj@459: AC_SUBST(AS) erikj@459: AC_SUBST(ASFLAGS) erikj@459: erikj@459: if test "x$OPENJDK_BUILD_OS" = xsolaris; then erikj@459: AC_PATH_PROG(NM, nm) erikj@459: WHICHCMD(NM) erikj@459: AC_PATH_PROG(STRIP, strip) erikj@459: WHICHCMD(STRIP) erikj@459: AC_PATH_PROG(MCS, mcs) erikj@459: WHICHCMD(MCS) erikj@459: else erikj@459: AC_CHECK_TOOL(NM, nm) erikj@459: WHICHCMD(NM) erikj@459: AC_CHECK_TOOL(STRIP, strip) erikj@459: WHICHCMD(STRIP) erikj@459: fi erikj@459: erikj@459: ### erikj@459: # erikj@459: # Check for objcopy erikj@459: # erikj@459: # but search for gobjcopy first... erikj@459: # since I on solaris found a broken objcopy...buhh erikj@459: # erikj@459: AC_PATH_TOOL(OBJCOPY, gobjcopy) erikj@459: if test "x$OBJCOPY" = x; then erikj@459: AC_PATH_TOOL(OBJCOPY, objcopy) erikj@459: fi erikj@459: erikj@459: # Restore old path without tools dir erikj@459: PATH="$OLD_PATH" erikj@459: ]) erikj@459: erikj@459: erikj@459: AC_DEFUN_ONCE([TOOLCHAIN_SETUP_COMPILER_FLAGS_FOR_LIBS], erikj@459: [ erikj@459: erikj@459: ############################################################################### erikj@459: # erikj@459: # How to compile shared libraries. erikj@459: # erikj@459: erikj@459: if test "x$GCC" = xyes; then erikj@459: COMPILER_NAME=gcc erikj@459: PICFLAG="-fPIC" erikj@459: LIBRARY_PREFIX=lib erikj@459: SHARED_LIBRARY='lib[$]1.so' erikj@459: STATIC_LIBRARY='lib[$]1.a' erikj@459: SHARED_LIBRARY_FLAGS="-shared" erikj@459: SHARED_LIBRARY_SUFFIX='.so' erikj@459: STATIC_LIBRARY_SUFFIX='.a' erikj@459: OBJ_SUFFIX='.o' erikj@459: EXE_SUFFIX='' erikj@459: SET_SHARED_LIBRARY_NAME='-Xlinker -soname=[$]1' erikj@459: SET_SHARED_LIBRARY_MAPFILE='-Xlinker -version-script=[$]1' erikj@459: C_FLAG_REORDER='' erikj@459: CXX_FLAG_REORDER='' erikj@459: SET_SHARED_LIBRARY_ORIGIN='-Xlinker -z -Xlinker origin -Xlinker -rpath -Xlinker \$$$$ORIGIN/[$]1' erikj@459: LD="$CC" erikj@459: LDEXE="$CC" erikj@459: LDCXX="$CXX" erikj@459: LDEXECXX="$CXX" erikj@459: POST_STRIP_CMD="$STRIP -g" erikj@459: if test "x$JDK_VARIANT" = xembedded; then erikj@459: POST_STRIP_CMD="$STRIP --strip-unneeded" erikj@459: fi erikj@459: erikj@459: # Linking is different on MacOSX erikj@459: if test "x$OPENJDK_BUILD_OS" = xmacosx; then erikj@459: # Might change in the future to clang. erikj@459: COMPILER_NAME=gcc erikj@459: SHARED_LIBRARY='lib[$]1.dylib' erikj@459: SHARED_LIBRARY_FLAGS="-dynamiclib -compatibility_version 1.0.0 -current_version 1.0.0 $PICFLAG" erikj@459: SHARED_LIBRARY_SUFFIX='.dylib' erikj@459: EXE_SUFFIX='' erikj@459: SET_SHARED_LIBRARY_NAME='-Xlinker -install_name -Xlinker @rpath/[$]1' erikj@459: SET_SHARED_LIBRARY_MAPFILE='' erikj@459: SET_SHARED_LIBRARY_ORIGIN='-Xlinker -rpath -Xlinker @loader_path/.' erikj@459: POST_STRIP_CMD="$STRIP -S" erikj@459: fi erikj@459: else erikj@459: if test "x$OPENJDK_BUILD_OS" = xsolaris; then erikj@459: # If it is not gcc, then assume it is the Oracle Solaris Studio Compiler erikj@459: COMPILER_NAME=ossc erikj@459: PICFLAG="-KPIC" erikj@459: LIBRARY_PREFIX=lib erikj@459: SHARED_LIBRARY='lib[$]1.so' erikj@459: STATIC_LIBRARY='lib[$]1.a' erikj@459: SHARED_LIBRARY_FLAGS="-z defs -xildoff -ztext -G" erikj@459: SHARED_LIBRARY_SUFFIX='.so' erikj@459: STATIC_LIBRARY_SUFFIX='.a' erikj@459: OBJ_SUFFIX='.o' erikj@459: EXE_SUFFIX='' erikj@459: SET_SHARED_LIBRARY_NAME='' erikj@459: SET_SHARED_LIBRARY_MAPFILE='-M[$]1' erikj@459: C_FLAG_REORDER='-xF' erikj@459: CXX_FLAG_REORDER='-xF' erikj@459: SET_SHARED_LIBRARY_ORIGIN='-R \$$$$ORIGIN/[$]1' erikj@459: CFLAGS_JDK="${CFLAGS_JDK} -D__solaris__" erikj@459: CXXFLAGS_JDK="${CXXFLAGS_JDK} -D__solaris__" erikj@459: CFLAGS_JDKLIB_EXTRA='-xstrconst' erikj@459: POST_STRIP_CMD="$STRIP -x" erikj@459: POST_MCS_CMD="$MCS -d -a \"JDK $FULL_VERSION\"" erikj@459: fi erikj@459: if test "x$OPENJDK_BUILD_OS" = xwindows; then erikj@459: # If it is not gcc, then assume it is the MS Visual Studio compiler erikj@459: COMPILER_NAME=cl erikj@459: PICFLAG="" erikj@459: LIBRARY_PREFIX= erikj@459: SHARED_LIBRARY='[$]1.dll' erikj@459: STATIC_LIBRARY='[$]1.lib' erikj@459: SHARED_LIBRARY_FLAGS="-LD" erikj@459: SHARED_LIBRARY_SUFFIX='.dll' erikj@459: STATIC_LIBRARY_SUFFIX='.lib' erikj@459: OBJ_SUFFIX='.obj' erikj@459: EXE_SUFFIX='.exe' erikj@459: SET_SHARED_LIBRARY_NAME='' erikj@459: SET_SHARED_LIBRARY_MAPFILE='' erikj@459: SET_SHARED_LIBRARY_ORIGIN='' erikj@459: fi erikj@459: fi erikj@459: erikj@459: AC_SUBST(OBJ_SUFFIX) erikj@459: AC_SUBST(SHARED_LIBRARY) erikj@459: AC_SUBST(STATIC_LIBRARY) erikj@459: AC_SUBST(LIBRARY_PREFIX) erikj@459: AC_SUBST(SHARED_LIBRARY_SUFFIX) erikj@459: AC_SUBST(STATIC_LIBRARY_SUFFIX) erikj@459: AC_SUBST(EXE_SUFFIX) erikj@459: AC_SUBST(SHARED_LIBRARY_FLAGS) erikj@459: AC_SUBST(SET_SHARED_LIBRARY_NAME) erikj@459: AC_SUBST(SET_SHARED_LIBRARY_MAPFILE) erikj@459: AC_SUBST(C_FLAG_REORDER) erikj@459: AC_SUBST(CXX_FLAG_REORDER) erikj@459: AC_SUBST(SET_SHARED_LIBRARY_ORIGIN) erikj@459: AC_SUBST(POST_STRIP_CMD) erikj@459: AC_SUBST(POST_MCS_CMD) erikj@459: erikj@459: # The (cross) compiler is now configured, we can now test capabilities erikj@459: # of the target platform. erikj@459: ]) erikj@459: erikj@459: AC_DEFUN_ONCE([TOOLCHAIN_SETUP_COMPILER_FLAGS_FOR_OPTIMIZATION], erikj@459: [ erikj@459: erikj@459: ############################################################################### erikj@459: # erikj@459: # Setup the opt flags for different compilers erikj@459: # and different operating systems. erikj@459: # erikj@459: C_FLAG_DEPS="-MMD -MF" erikj@459: CXX_FLAG_DEPS="-MMD -MF" erikj@459: erikj@459: case $COMPILER_TYPE in erikj@459: CC ) erikj@459: D_FLAG="-g" erikj@459: case $COMPILER_NAME in erikj@459: gcc ) erikj@459: case $OPENJDK_TARGET_OS in erikj@459: macosx ) erikj@459: # On MacOSX we optimize for size, something erikj@459: # we should do for all platforms? erikj@459: C_O_FLAG_HI="-Os" erikj@459: C_O_FLAG_NORM="-Os" erikj@459: C_O_FLAG_NONE="" erikj@459: ;; erikj@459: *) erikj@459: C_O_FLAG_HI="-O3" erikj@459: C_O_FLAG_NORM="-O2" erikj@459: C_O_FLAG_NONE="-O0" erikj@459: CFLAGS_DEBUG_SYMBOLS="-g" erikj@459: CXXFLAGS_DEBUG_SYMBOLS="-g" erikj@459: if test "x$OPENJDK_TARGET_CPU_BITS" = "x64" && test "x$DEBUG_LEVEL" = "xfastdebug"; then erikj@459: CFLAGS_DEBUG_SYMBOLS="-g1" erikj@459: CXXFLAGS_DEBUG_SYMBOLSG="-g1" erikj@459: fi erikj@459: ;; erikj@459: esac erikj@459: CXX_O_FLAG_HI="$C_O_FLAG_HI" erikj@459: CXX_O_FLAG_NORM="$C_O_FLAG_NORM" erikj@459: CXX_O_FLAG_NONE="$C_O_FLAG_NONE" erikj@459: ;; erikj@459: ossc ) erikj@459: # erikj@459: # Forte has different names for this with their C++ compiler... erikj@459: # erikj@459: C_FLAG_DEPS="-xMMD -xMF" erikj@459: CXX_FLAG_DEPS="-xMMD -xMF" erikj@459: erikj@459: # Extra options used with HIGHEST erikj@459: # erikj@459: # WARNING: Use of OPTIMIZATION_LEVEL=HIGHEST in your Makefile needs to be erikj@459: # done with care, there are some assumptions below that need to erikj@459: # be understood about the use of pointers, and IEEE behavior. erikj@459: # erikj@459: # Use non-standard floating point mode (not IEEE 754) erikj@459: CC_HIGHEST="$CC_HIGHEST -fns" erikj@459: # Do some simplification of floating point arithmetic (not IEEE 754) erikj@459: CC_HIGHEST="$CC_HIGHEST -fsimple" erikj@459: # Use single precision floating point with 'float' erikj@459: CC_HIGHEST="$CC_HIGHEST -fsingle" erikj@459: # Assume memory references via basic pointer types do not alias erikj@459: # (Source with excessing pointer casting and data access with mixed erikj@459: # pointer types are not recommended) erikj@459: CC_HIGHEST="$CC_HIGHEST -xalias_level=basic" erikj@459: # Use intrinsic or inline versions for math/std functions erikj@459: # (If you expect perfect errno behavior, do not use this) erikj@459: CC_HIGHEST="$CC_HIGHEST -xbuiltin=%all" erikj@459: # Loop data dependency optimizations (need -xO3 or higher) erikj@459: CC_HIGHEST="$CC_HIGHEST -xdepend" erikj@459: # Pointer parameters to functions do not overlap erikj@459: # (Similar to -xalias_level=basic usage, but less obvious sometimes. erikj@459: # If you pass in multiple pointers to the same data, do not use this) erikj@459: CC_HIGHEST="$CC_HIGHEST -xrestrict" erikj@459: # Inline some library routines erikj@459: # (If you expect perfect errno behavior, do not use this) erikj@459: CC_HIGHEST="$CC_HIGHEST -xlibmil" erikj@459: # Use optimized math routines erikj@459: # (If you expect perfect errno behavior, do not use this) erikj@459: # Can cause undefined external on Solaris 8 X86 on __sincos, removing for now erikj@459: #CC_HIGHEST="$CC_HIGHEST -xlibmopt" erikj@459: erikj@459: case $LEGACY_OPENJDK_TARGET_CPU1 in erikj@459: i586) erikj@459: C_O_FLAG_HIGHEST="-xO4 -Wu,-O4~yz $CC_HIGHEST -xchip=pentium" erikj@459: C_O_FLAG_HI="-xO4 -Wu,-O4~yz" erikj@459: C_O_FLAG_NORM="-xO2 -Wu,-O2~yz" erikj@459: C_O_FLAG_NONE="" erikj@459: CXX_O_FLAG_HIGHEST="-xO4 -Qoption ube -O4~yz $CC_HIGHEST -xchip=pentium" erikj@459: CXX_O_FLAG_HI="-xO4 -Qoption ube -O4~yz" erikj@459: CXX_O_FLAG_NORM="-xO2 -Qoption ube -O2~yz" erikj@459: CXX_O_FLAG_NONE="" erikj@459: ;; erikj@459: sparc) erikj@459: CFLAGS_JDK="${CFLAGS_JDK} -xmemalign=4s" erikj@459: CXXFLAGS_JDK="${CXXFLAGS_JDK} -xmemalign=4s" erikj@459: CFLAGS_JDKLIB_EXTRA="${CFLAGS_JDKLIB_EXTRA} -xregs=no%appl" erikj@459: CXXFLAGS_JDKLIB_EXTRA="${CXXFLAGS_JDKLIB_EXTRA} -xregs=no%appl" erikj@459: C_O_FLAG_HIGHEST="-xO4 -Wc,-Qrm-s -Wc,-Qiselect-T0 $CC_HIGHEST -xprefetch=auto,explicit -xchip=ultra" erikj@459: C_O_FLAG_HI="-xO4 -Wc,-Qrm-s -Wc,-Qiselect-T0" erikj@459: C_O_FLAG_NORM="-xO2 -Wc,-Qrm-s -Wc,-Qiselect-T0" erikj@459: C_O_FLAG_NONE="" erikj@459: CXX_O_FLAG_HIGHEST="-xO4 -Qoption cg -Qrm-s -Qoption cg -Qiselect-T0 $CC_HIGHEST -xprefetch=auto,explicit -xchip=ultra" erikj@459: CXX_O_FLAG_HI="-xO4 -Qoption cg -Qrm-s -Qoption cg -Qiselect-T0" erikj@459: CXX_O_FLAG_NORM="-xO2 -Qoption cg -Qrm-s -Qoption cg -Qiselect-T0" erikj@459: CXX_O_FLAG_NONE="" erikj@459: ;; erikj@459: esac erikj@459: erikj@459: CFLAGS_DEBUG_SYMBOLS="-g -xs" erikj@459: CXXFLAGS_DEBUG_SYMBOLS="-g0 -xs" erikj@459: esac erikj@459: ;; erikj@459: CL ) erikj@459: D_FLAG= erikj@459: C_O_FLAG_HI="-O2" erikj@459: C_O_FLAG_NORM="-O1" erikj@459: C_O_FLAG_NONE="-Od" erikj@459: CXX_O_FLAG_HI="$C_O_FLAG_HI" erikj@459: CXX_O_FLAG_NORM="$C_O_FLAG_NORM" erikj@459: CXX_O_FLAG_NONE="$C_O_FLAG_NONE" erikj@459: ;; erikj@459: esac erikj@459: erikj@459: if test -z "$C_O_FLAG_HIGHEST"; then erikj@459: C_O_FLAG_HIGHEST="$C_O_FLAG_HI" erikj@459: fi erikj@459: erikj@459: if test -z "$CXX_O_FLAG_HIGHEST"; then erikj@459: CXX_O_FLAG_HIGHEST="$CXX_O_FLAG_HI" erikj@459: fi erikj@459: erikj@459: AC_SUBST(C_O_FLAG_HIGHEST) erikj@459: AC_SUBST(C_O_FLAG_HI) erikj@459: AC_SUBST(C_O_FLAG_NORM) erikj@459: AC_SUBST(C_O_FLAG_NONE) erikj@459: AC_SUBST(CXX_O_FLAG_HIGHEST) erikj@459: AC_SUBST(CXX_O_FLAG_HI) erikj@459: AC_SUBST(CXX_O_FLAG_NORM) erikj@459: AC_SUBST(CXX_O_FLAG_NONE) erikj@459: AC_SUBST(C_FLAG_DEPS) erikj@459: AC_SUBST(CXX_FLAG_DEPS) erikj@459: ]) erikj@459: erikj@459: AC_DEFUN_ONCE([TOOLCHAIN_SETUP_COMPILER_FLAGS_FOR_JDK], erikj@459: [ erikj@459: erikj@459: if test "x$CFLAGS" != "x${ADDED_CFLAGS}"; then erikj@459: AC_MSG_WARN([Ignoring CFLAGS($CFLAGS) found in environment. Use --with-extra-cflags"]) erikj@459: fi erikj@459: erikj@459: if test "x$CXXFLAGS" != "x${ADDED_CXXFLAGS}"; then erikj@459: AC_MSG_WARN([Ignoring CXXFLAGS($CXXFLAGS) found in environment. Use --with-extra-cxxflags"]) erikj@459: fi erikj@459: erikj@459: if test "x$LDFLAGS" != "x${ADDED_LDFLAGS}"; then erikj@459: AC_MSG_WARN([Ignoring LDFLAGS($LDFLAGS) found in environment. Use --with-extra-ldflags"]) erikj@459: fi erikj@459: erikj@459: AC_ARG_WITH(extra-cflags, [AS_HELP_STRING([--with-extra-cflags], erikj@459: [extra flags to be used when compiling jdk c-files])]) erikj@459: erikj@459: AC_ARG_WITH(extra-cxxflags, [AS_HELP_STRING([--with-extra-cxxflags], erikj@459: [extra flags to be used when compiling jdk c++-files])]) erikj@459: erikj@459: AC_ARG_WITH(extra-ldflags, [AS_HELP_STRING([--with-extra-ldflags], erikj@459: [extra flags to be used when linking jdk])]) erikj@459: erikj@459: CFLAGS_JDK="${CFLAGS_JDK} $with_extra_cflags" erikj@459: CXXFLAGS_JDK="${CXXFLAGS_JDK} $with_extra_cxxflags" erikj@459: LDFLAGS_JDK="${LDFLAGS_JDK} $with_extra_ldflags" erikj@459: erikj@459: ############################################################################### erikj@459: # erikj@459: # Now setup the CFLAGS and LDFLAGS for the JDK build. erikj@459: # Later we will also have CFLAGS and LDFLAGS for the hotspot subrepo build. erikj@459: # erikj@459: case $COMPILER_NAME in erikj@459: gcc ) erikj@459: CCXXFLAGS_JDK="$CCXXFLAGS $CCXXFLAGS_JDK -W -Wall -Wno-unused -Wno-parentheses \ erikj@459: -pipe \ erikj@459: -D_GNU_SOURCE -D_REENTRANT -D_LARGEFILE64_SOURCE" erikj@459: case $OPENJDK_TARGET_CPU_ARCH in erikj@459: arm ) erikj@459: # on arm we don't prevent gcc to omit frame pointer but do prevent strict aliasing erikj@459: CFLAGS_JDK="${CFLAGS_JDK} -fno-strict-aliasing" erikj@459: ;; erikj@459: ppc ) erikj@459: # on ppc we don't prevent gcc to omit frame pointer nor strict-aliasing erikj@459: ;; erikj@459: * ) erikj@459: CCXXFLAGS_JDK="$CCXXFLAGS_JDK -fno-omit-frame-pointer" erikj@459: CFLAGS_JDK="${CFLAGS_JDK} -fno-strict-aliasing" erikj@459: ;; erikj@459: esac erikj@459: ;; erikj@459: ossc ) erikj@459: CFLAGS_JDK="$CFLAGS_JDK -xc99=%none -xCC -errshort=tags -Xa -v -mt -norunpath -xnolib" erikj@459: CXXFLAGS_JDK="$CXXFLAGS_JDK -errtags=yes +w -mt -features=no%except -DCC_NOEX" erikj@459: ;; erikj@459: cl ) erikj@459: CCXXFLAGS_JDK="$CCXXFLAGS $CCXXFLAGS_JDK -Zi -MD -Zc:wchar_t- -W3 -wd4800 \ erikj@459: -D_STATIC_CPPLIB -D_DISABLE_DEPRECATE_STATIC_CPPLIB -DWIN32_LEAN_AND_MEAN \ erikj@459: -D_CRT_SECURE_NO_DEPRECATE -D_CRT_NONSTDC_NO_DEPRECATE \ erikj@459: -DWIN32 -DIAL" erikj@459: case $LEGACY_OPENJDK_TARGET_CPU1 in erikj@459: i?86 ) erikj@459: CCXXFLAGS_JDK="$CCXXFLAGS_JDK -D_X86_ -Dx86" erikj@459: ;; erikj@459: amd64 ) erikj@459: CCXXFLAGS_JDK="$CCXXFLAGS_JDK -D_AMD64_ -Damd64" erikj@459: ;; erikj@459: esac erikj@459: ;; erikj@459: esac erikj@459: erikj@459: ############################################################################### erikj@459: # erikj@459: # Cross-compile arch specific flags erikj@459: erikj@459: # erikj@459: if test "x$JDK_VARIANT" = "xembedded"; then erikj@459: CCXXFLAGS_JDK="$CCXXFLAGS_JDK -DJAVASE_EMBEDDED" erikj@459: fi erikj@459: erikj@459: case $OPENJDK_TARGET_CPU_ARCH in erikj@459: arm ) erikj@459: CCXXFLAGS_JDK="$CCXXFLAGS_JDK -fsigned-char" erikj@459: ;; erikj@459: ppc ) erikj@459: CCXXFLAGS_JDK="$CCXXFLAGS_JDK -fsigned-char" erikj@459: ;; erikj@459: esac erikj@459: erikj@459: ############################################################################### erikj@459: erikj@459: CCXXFLAGS_JDK="$CCXXFLAGS_JDK $ADD_LP64" erikj@459: erikj@459: # The package path is used only on macosx? erikj@459: PACKAGE_PATH=/opt/local erikj@459: AC_SUBST(PACKAGE_PATH) erikj@459: erikj@459: # Sometimes we use a cpu dir (.../lib/amd64/server) erikj@459: # Sometimes not (.../lib/server) erikj@459: LIBARCHDIR="$LEGACY_OPENJDK_TARGET_CPU2/" erikj@459: if test "x$ENDIAN" = xlittle; then erikj@459: CCXXFLAGS_JDK="$CCXXFLAGS_JDK -D_LITTLE_ENDIAN" erikj@459: else erikj@459: CCXXFLAGS_JDK="$CCXXFLAGS_JDK -D_BIG_ENDIAN" erikj@459: fi erikj@459: if test "x$OPENJDK_TARGET_OS" = xlinux; then erikj@459: CCXXFLAGS_JDK="$CCXXFLAGS_JDK -DLINUX" erikj@459: fi erikj@459: if test "x$OPENJDK_TARGET_OS" = xwindows; then erikj@459: CCXXFLAGS_JDK="$CCXXFLAGS_JDK -DWINDOWS" erikj@459: fi erikj@459: if test "x$OPENJDK_TARGET_OS" = xsolaris; then erikj@459: CCXXFLAGS_JDK="$CCXXFLAGS_JDK -DSOLARIS" erikj@459: fi erikj@459: if test "x$OPENJDK_TARGET_OS" = xmacosx; then erikj@459: CCXXFLAGS_JDK="$CCXXFLAGS_JDK -DMACOSX -D_ALLBSD_SOURCE" erikj@459: LIBARCHDIR="" erikj@459: fi erikj@459: if test "x$OPENJDK_TARGET_OS" = xbsd; then erikj@459: CCXXFLAGS_JDK="$CCXXFLAGS_JDK -DBSD -D_ALLBSD_SOURCE" erikj@459: fi erikj@459: if test "x$DEBUG_LEVEL" = xrelease; then erikj@459: CCXXFLAGS_JDK="$CCXXFLAGS_JDK -DNDEBUG" erikj@459: else erikj@459: CCXXFLAGS_JDK="$CCXXFLAGS_JDK -DDEBUG" erikj@459: fi erikj@459: erikj@459: CCXXFLAGS_JDK="$CCXXFLAGS_JDK -DARCH='\"$LEGACY_OPENJDK_TARGET_CPU1\"' -D$LEGACY_OPENJDK_TARGET_CPU1" erikj@459: CCXXFLAGS_JDK="$CCXXFLAGS_JDK -DRELEASE='\"$RELEASE\"'" erikj@459: erikj@459: CCXXFLAGS_JDK="$CCXXFLAGS_JDK \ erikj@459: -I${JDK_OUTPUTDIR}/include \ erikj@459: -I${JDK_OUTPUTDIR}/include/$OPENJDK_TARGET_OS \ erikj@459: -I${JDK_TOPDIR}/src/share/javavm/export \ erikj@459: -I${JDK_TOPDIR}/src/$LEGACY_OPENJDK_TARGET_OS_API/javavm/export \ erikj@459: -I${JDK_TOPDIR}/src/share/native/common \ erikj@459: -I${JDK_TOPDIR}/src/$LEGACY_OPENJDK_TARGET_OS_API/native/common" erikj@459: erikj@459: # The shared libraries are compiled using the picflag. erikj@459: CFLAGS_JDKLIB="$CCXXFLAGS_JDK $CFLAGS_JDK $PICFLAG $CFLAGS_JDKLIB_EXTRA" erikj@459: CXXFLAGS_JDKLIB="$CCXXFLAGS_JDK $CXXFLAGS_JDK $PICFLAG $CXXFLAGS_JDKLIB_EXTRA " erikj@459: erikj@459: # Executable flags erikj@459: CFLAGS_JDKEXE="$CCXXFLAGS_JDK $CFLAGS_JDK" erikj@459: CXXFLAGS_JDKEXE="$CCXXFLAGS_JDK $CXXFLAGS_JDK" erikj@459: erikj@459: # Now this is odd. The JDK native libraries have to link against libjvm.so erikj@459: # On 32-bit machines there is normally two distinct libjvm.so:s, client and server. erikj@459: # Which should we link to? Are we lucky enough that the binary api to the libjvm.so library erikj@459: # is identical for client and server? Yes. Which is picked at runtime (client or server)? erikj@459: # Neither, since the chosen libjvm.so has already been loaded by the launcher, all the following erikj@459: # libraries will link to whatever is in memory. Yuck. erikj@459: # erikj@459: # Thus we offer the compiler to find libjvm.so first in server then in client. It works. Ugh. erikj@459: if test "x$COMPILER_TYPE" = xCL; then erikj@459: LDFLAGS_JDK="$LDFLAGS_JDK -nologo -opt:ref -incremental:no" erikj@459: if test "x$LEGACY_OPENJDK_TARGET_CPU1" = xi586; then erikj@459: LDFLAGS_JDK="$LDFLAGS_JDK -safeseh" erikj@459: fi erikj@459: # TODO: make -debug optional "--disable-full-debug-symbols" erikj@459: LDFLAGS_JDK="$LDFLAGS_JDK -debug" erikj@459: LDFLAGS_JDKLIB="${LDFLAGS_JDK} -dll -libpath:${JDK_OUTPUTDIR}/lib" erikj@459: LDFLAGS_JDKLIB_SUFFIX="" erikj@459: if test "x$OPENJDK_TARGET_CPU_BITS" = "x64"; then erikj@459: LDFLAGS_STACK_SIZE=1048576 erikj@459: else erikj@459: LDFLAGS_STACK_SIZE=327680 erikj@459: fi erikj@459: LDFLAGS_JDKEXE="${LDFLAGS_JDK} /STACK:$LDFLAGS_STACK_SIZE" erikj@459: else erikj@459: # If this is a --hash-style=gnu system, use --hash-style=both, why? erikj@459: HAS_GNU_HASH=`$CC -dumpspecs 2>/dev/null | $GREP 'hash-style=gnu'` erikj@459: if test -n "$HAS_GNU_HASH"; then erikj@459: # And since we now know that the linker is gnu, then add -z defs, to forbid erikj@459: # undefined symbols in object files. erikj@459: LDFLAGS_JDK="${LDFLAGS_JDK} -Xlinker --hash-style=both -Xlinker -z -Xlinker defs" erikj@459: if test "x$DEBUG_LEVEL" == "xrelease"; then erikj@459: # When building release libraries, tell the linker optimize them. erikj@459: # Should this be supplied to the OSS linker as well? erikj@459: LDFLAGS_JDK="${LDFLAGS_JDK} -Xlinker -O1" erikj@459: fi erikj@459: fi erikj@459: erikj@459: LDFLAGS_JDKLIB="${LDFLAGS_JDK} $SHARED_LIBRARY_FLAGS \ erikj@459: -L${JDK_OUTPUTDIR}/lib/${LIBARCHDIR}server \ erikj@459: -L${JDK_OUTPUTDIR}/lib/${LIBARCHDIR}client \ erikj@459: -L${JDK_OUTPUTDIR}/lib/${LIBARCHDIR}" erikj@459: LDFLAGS_JDKLIB_SUFFIX="-ljvm -ljava" erikj@459: if test "x$COMPILER_NAME" = xossc; then erikj@459: LDFLAGS_JDKLIB_SUFFIX="$LDFLAGS_JDKLIB_SUFFIX -lc" erikj@459: fi erikj@459: erikj@459: # Only the jli library is explicitly linked when the launchers are built. erikj@459: # The libjvm is then dynamically loaded/linked by the launcher. erikj@459: LDFLAGS_JDKEXE="${LDFLAGS_JDK}" erikj@459: if test "x$OPENJDK_TARGET_OS" != "xmacosx"; then erikj@459: LDFLAGS_JDKEXE="$LDFLAGS_JDKEXE -L${JDK_OUTPUTDIR}/lib/${LIBARCHDIR}jli" erikj@459: LDFLAGS_JDKEXE_SUFFIX="-ljli" erikj@459: fi erikj@459: fi erikj@459: erikj@459: # Adjust flags according to debug level. erikj@459: case $DEBUG_LEVEL in erikj@459: fastdebug ) erikj@459: CFLAGS="$CFLAGS $D_FLAG" erikj@459: JAVAC_FLAGS="$JAVAC_FLAGS -g" erikj@459: ;; erikj@459: slowdebug ) erikj@459: CFLAGS="$CFLAGS $D_FLAG" erikj@459: C_O_FLAG_HI="$C_O_FLAG_NONE" erikj@459: C_O_FLAG_NORM="$C_O_FLAG_NONE" erikj@459: CXX_O_FLAG_HI="$CXX_O_FLAG_NONE" erikj@459: CXX_O_FLAG_NORM="$CXX_O_FLAG_NONE" erikj@459: JAVAC_FLAGS="$JAVAC_FLAGS -g" erikj@459: ;; erikj@459: esac erikj@459: erikj@459: erikj@459: AC_SUBST(CFLAGS_JDKLIB) erikj@459: AC_SUBST(CFLAGS_JDKEXE) erikj@459: erikj@459: AC_SUBST(CXXFLAGS_JDKLIB) erikj@459: AC_SUBST(CXXFLAGS_JDKEXE) erikj@459: erikj@459: AC_SUBST(LDFLAGS_JDKLIB) erikj@459: AC_SUBST(LDFLAGS_JDKEXE) erikj@459: AC_SUBST(LDFLAGS_JDKLIB_SUFFIX) erikj@459: AC_SUBST(LDFLAGS_JDKEXE_SUFFIX) erikj@459: ])