1.1 --- a/common/autoconf/toolchain.m4 Thu Sep 06 17:27:20 2012 -0700 1.2 +++ b/common/autoconf/toolchain.m4 Tue Sep 18 11:29:16 2012 -0700 1.3 @@ -31,6 +31,19 @@ 1.4 # the set env variables into the spec file. 1.5 SETUPDEVENV="# No special vars" 1.6 if test "x$OPENJDK_BUILD_OS" = "xwindows"; then 1.7 + # Store path to cygwin link.exe to help excluding it when searching for 1.8 + # VS linker. 1.9 + AC_PATH_PROG(CYGWIN_LINK, link) 1.10 + AC_MSG_CHECKING([if the first found link.exe is actually the Cygwin link tool]) 1.11 + "$CYGWIN_LINK" --version > /dev/null 1.12 + if test $? -eq 0 ; then 1.13 + AC_MSG_RESULT([yes]) 1.14 + else 1.15 + AC_MSG_RESULT([no]) 1.16 + # This might be the VS linker. Don't exclude it later on. 1.17 + CYGWIN_LINK="" 1.18 + fi 1.19 + 1.20 # If vcvarsall.bat has been run, then VCINSTALLDIR is set. 1.21 if test "x$VCINSTALLDIR" != x; then 1.22 # No further setup is needed. The build will happen from this kind 1.23 @@ -57,12 +70,12 @@ 1.24 AC_MSG_RESULT([no]) 1.25 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.]) 1.26 fi 1.27 - case "$LEGACY_OPENJDK_TARGET_CPU1" in 1.28 - i?86) 1.29 + case "$OPENJDK_TARGET_CPU" in 1.30 + x86) 1.31 VARSBAT_ARCH=x86 1.32 ;; 1.33 - *) 1.34 - VARSBAT_ARCH=$LEGACY_OPENJDK_TARGET_CPU1 1.35 + x86_64) 1.36 + VARSBAT_ARCH=amd64 1.37 ;; 1.38 esac 1.39 # Lets extract the variables that are set by vcvarsall.bat/vsvars32.bat/vsvars64.bat 1.40 @@ -122,9 +135,6 @@ 1.41 # Configure the development tool paths and potential sysroot. 1.42 # 1.43 AC_LANG(C++) 1.44 -DEVKIT= 1.45 -SYS_ROOT=/ 1.46 -AC_SUBST(SYS_ROOT) 1.47 1.48 # The option used to specify the target .o,.a or .so file. 1.49 # When compiling, how to specify the to be created object file. 1.50 @@ -153,44 +163,28 @@ 1.51 # Setting only --host, does not seem to be really supported. 1.52 # Please set both --build and --host if you want to cross compile. 1.53 1.54 -DEFINE_CROSS_COMPILE_ARCH="" 1.55 -HOSTCC="" 1.56 -HOSTCXX="" 1.57 -HOSTLD="" 1.58 -AC_SUBST(DEFINE_CROSS_COMPILE_ARCH) 1.59 -AC_MSG_CHECKING([if this is a cross compile]) 1.60 -if test "x$OPENJDK_BUILD_SYSTEM" != "x$OPENJDK_TARGET_SYSTEM"; then 1.61 - AC_MSG_RESULT([yes, from $OPENJDK_BUILD_SYSTEM to $OPENJDK_TARGET_SYSTEM]) 1.62 - # We have detected a cross compile! 1.63 - DEFINE_CROSS_COMPILE_ARCH="CROSS_COMPILE_ARCH:=$LEGACY_OPENJDK_TARGET_CPU1" 1.64 +if test "x$COMPILE_TYPE" = "xcross"; then 1.65 # Now we to find a C/C++ compiler that can build executables for the build 1.66 # platform. We can't use the AC_PROG_CC macro, since it can only be used 1.67 - # once. 1.68 - AC_PATH_PROGS(HOSTCC, [cl cc gcc]) 1.69 - WHICHCMD(HOSTCC) 1.70 - AC_PATH_PROGS(HOSTCXX, [cl CC g++]) 1.71 - WHICHCMD(HOSTCXX) 1.72 - AC_PATH_PROG(HOSTLD, ld) 1.73 - WHICHCMD(HOSTLD) 1.74 - # Building for the build platform should be easy. Therefore 1.75 - # we do not need any linkers or assemblers etc. 1.76 -else 1.77 - AC_MSG_RESULT([no]) 1.78 + # once. Also, we need to do this before adding a tools dir to the path, 1.79 + # otherwise we might pick up cross-compilers which don't use standard naming. 1.80 + # Otherwise, we'll set the BUILD_tools to the native tools, but that'll have 1.81 + # to wait until they are properly discovered. 1.82 + AC_PATH_PROGS(BUILD_CC, [cl cc gcc]) 1.83 + SET_FULL_PATH(BUILD_CC) 1.84 + AC_PATH_PROGS(BUILD_CXX, [cl CC g++]) 1.85 + SET_FULL_PATH(BUILD_CXX) 1.86 + AC_PATH_PROG(BUILD_LD, ld) 1.87 + SET_FULL_PATH(BUILD_LD) 1.88 fi 1.89 +AC_SUBST(BUILD_CC) 1.90 +AC_SUBST(BUILD_CXX) 1.91 +AC_SUBST(BUILD_LD) 1.92 1.93 -# You can force the sys-root if the sys-root encoded into the cross compiler tools 1.94 -# is not correct. 1.95 -AC_ARG_WITH(sys-root, [AS_HELP_STRING([--with-sys-root], 1.96 - [pass this sys-root to the compilers and linker (useful if the sys-root encoded in 1.97 - the cross compiler tools is incorrect)])]) 1.98 - 1.99 -if test "x$with_sys_root" != x; then 1.100 - SYS_ROOT=$with_sys_root 1.101 -fi 1.102 - 1.103 # If a devkit is found on the builddeps server, then prepend its path to the 1.104 # PATH variable. If there are cross compilers available in the devkit, these 1.105 # will be found by AC_PROG_CC et al. 1.106 +DEVKIT= 1.107 BDEPS_CHECK_MODULE(DEVKIT, devkit, xxx, 1.108 [# Found devkit 1.109 PATH="$DEVKIT/bin:$PATH" 1.110 @@ -218,21 +212,6 @@ 1.111 ORG_CXXFLAGS="$CXXFLAGS" 1.112 ORG_OBJCFLAGS="$OBJCFLAGS" 1.113 1.114 -AC_ARG_WITH([tools-dir], [AS_HELP_STRING([--with-tools-dir], 1.115 - [search this directory for compilers and tools])], [TOOLS_DIR=$with_tools_dir]) 1.116 - 1.117 -AC_ARG_WITH([devkit], [AS_HELP_STRING([--with-devkit], 1.118 - [use this directory as base for tools-dir and sys-root])], [ 1.119 - if test "x$with_sys_root" != x; then 1.120 - AC_MSG_ERROR([Cannot specify both --with-devkit and --with-sys-root at the same time]) 1.121 - fi 1.122 - if test "x$with_tools_dir" != x; then 1.123 - AC_MSG_ERROR([Cannot specify both --with-devkit and --with-tools-dir at the same time]) 1.124 - fi 1.125 - TOOLS_DIR=$with_devkit/bin 1.126 - SYS_ROOT=$with_devkit/$host_alias/libc 1.127 - ]) 1.128 - 1.129 # autoconf magic only relies on PATH, so update it if tools dir is specified 1.130 OLD_PATH="$PATH" 1.131 if test "x$TOOLS_DIR" != x; then 1.132 @@ -251,7 +230,7 @@ 1.133 # Do not use cc on MacOSX use gcc instead. 1.134 CC="gcc" 1.135 fi 1.136 -WHICHCMD(CC) 1.137 +SET_FULL_PATH(CC) 1.138 1.139 AC_PROG_CXX([cl CC g++]) 1.140 if test "x$CXX" = xCC && test "x$OPENJDK_BUILD_OS" = xmacosx; then 1.141 @@ -259,7 +238,7 @@ 1.142 # c++ code. Override. 1.143 CXX="g++" 1.144 fi 1.145 -WHICHCMD(CXX) 1.146 +SET_FULL_PATH(CXX) 1.147 1.148 if test "x$CXX" = x || test "x$CC" = x; then 1.149 HELP_MSG_MISSING_DEPENDENCY([devkit]) 1.150 @@ -268,7 +247,7 @@ 1.151 1.152 if test "x$OPENJDK_BUILD_OS" != xwindows; then 1.153 AC_PROG_OBJC 1.154 - WHICHCMD(OBJC) 1.155 + SET_FULL_PATH(OBJC) 1.156 else 1.157 OBJC= 1.158 fi 1.159 @@ -279,19 +258,11 @@ 1.160 CXXFLAGS="$ORG_CXXFLAGS" 1.161 OBJCFLAGS="$ORG_OBJCFLAGS" 1.162 1.163 -# If we are not cross compiling, use the same compilers for 1.164 -# building the build platform executables. 1.165 -if test "x$DEFINE_CROSS_COMPILE_ARCH" = x; then 1.166 - HOSTCC="$CC" 1.167 - HOSTCXX="$CXX" 1.168 -fi 1.169 - 1.170 -AC_CHECK_TOOL(LD, ld) 1.171 -WHICHCMD(LD) 1.172 LD="$CC" 1.173 LDEXE="$CC" 1.174 LDCXX="$CXX" 1.175 LDEXECXX="$CXX" 1.176 +AC_SUBST(LD) 1.177 # LDEXE is the linker to use, when creating executables. 1.178 AC_SUBST(LDEXE) 1.179 # Linking C++ libraries. 1.180 @@ -299,8 +270,10 @@ 1.181 # Linking C++ executables. 1.182 AC_SUBST(LDEXECXX) 1.183 1.184 -AC_CHECK_TOOL(AR, ar) 1.185 -WHICHCMD(AR) 1.186 +if test "x$OPENJDK_BUILD_OS" != xwindows; then 1.187 + AC_CHECK_TOOL(AR, ar) 1.188 + SET_FULL_PATH(AR) 1.189 +fi 1.190 if test "x$OPENJDK_BUILD_OS" = xmacosx; then 1.191 ARFLAGS="-r" 1.192 else 1.193 @@ -316,25 +289,31 @@ 1.194 EXE_OUT_OPTION=-out: 1.195 LD_OUT_OPTION=-out: 1.196 AR_OUT_OPTION=-out: 1.197 - # On Windows, reject /usr/bin/link, which is a cygwin 1.198 + # On Windows, reject /usr/bin/link (as determined in CYGWIN_LINK), which is a cygwin 1.199 # program for something completely different. 1.200 - AC_CHECK_PROG([WINLD], [link],[link],,, [/usr/bin/link]) 1.201 + AC_CHECK_PROG([WINLD], [link],[link],,, [$CYGWIN_LINK]) 1.202 # Since we must ignore the first found link, WINLD will contain 1.203 # the full path to the link.exe program. 1.204 - WHICHCMD_SPACESAFE([WINLD]) 1.205 + SET_FULL_PATH_SPACESAFE([WINLD]) 1.206 + printf "Windows linker was found at $WINLD\n" 1.207 + AC_MSG_CHECKING([if the found link.exe is actually the Visual Studio linker]) 1.208 + "$WINLD" --version > /dev/null 1.209 + if test $? -eq 0 ; then 1.210 + AC_MSG_RESULT([no]) 1.211 + AC_MSG_ERROR([This is the Cygwin link tool. Please check your PATH and rerun configure.]) 1.212 + else 1.213 + AC_MSG_RESULT([yes]) 1.214 + fi 1.215 LD="$WINLD" 1.216 LDEXE="$WINLD" 1.217 LDCXX="$WINLD" 1.218 LDEXECXX="$WINLD" 1.219 - # Set HOSTLD to same as LD until we fully support cross compilation 1.220 - # on windows. 1.221 - HOSTLD="$WINLD" 1.222 1.223 AC_CHECK_PROG([MT], [mt], [mt],,, [/usr/bin/mt]) 1.224 - WHICHCMD_SPACESAFE([MT]) 1.225 + SET_FULL_PATH_SPACESAFE([MT]) 1.226 # The resource compiler 1.227 AC_CHECK_PROG([RC], [rc], [rc],,, [/usr/bin/rc]) 1.228 - WHICHCMD_SPACESAFE([RC]) 1.229 + SET_FULL_PATH_SPACESAFE([RC]) 1.230 1.231 RC_FLAGS="-nologo /l 0x409 /r" 1.232 AS_IF([test "x$VARIANT" = xOPT], [ 1.233 @@ -354,12 +333,12 @@ 1.234 1.235 # lib.exe is used to create static libraries. 1.236 AC_CHECK_PROG([WINAR], [lib],[lib],,,) 1.237 - WHICHCMD_SPACESAFE([WINAR]) 1.238 + SET_FULL_PATH_SPACESAFE([WINAR]) 1.239 AR="$WINAR" 1.240 ARFLAGS="-nologo -NODEFAULTLIB:MSVCRT" 1.241 1.242 AC_CHECK_PROG([DUMPBIN], [dumpbin], [dumpbin],,,) 1.243 - WHICHCMD_SPACESAFE([DUMPBIN]) 1.244 + SET_FULL_PATH_SPACESAFE([DUMPBIN]) 1.245 1.246 COMPILER_TYPE=CL 1.247 CCXXFLAGS="$CCXXFLAGS -nologo" 1.248 @@ -368,10 +347,20 @@ 1.249 AC_SUBST(COMPILER_TYPE) 1.250 1.251 AC_PROG_CPP 1.252 -WHICHCMD(CPP) 1.253 +SET_FULL_PATH(CPP) 1.254 1.255 AC_PROG_CXXCPP 1.256 -WHICHCMD(CXXCPP) 1.257 +SET_FULL_PATH(CXXCPP) 1.258 + 1.259 +if test "x$COMPILE_TYPE" != "xcross"; then 1.260 + # If we are not cross compiling, use the same compilers for 1.261 + # building the build platform executables. The cross-compilation 1.262 + # case needed to be done earlier, but this can only be done after 1.263 + # the native tools have been localized. 1.264 + BUILD_CC="$CC" 1.265 + BUILD_CXX="$CXX" 1.266 + BUILD_LD="$LD" 1.267 +fi 1.268 1.269 # for solaris we really need solaris tools, and not gnu equivalent 1.270 # these seems to normally reside in /usr/ccs/bin so add that to path before 1.271 @@ -386,27 +375,24 @@ 1.272 # Find the right assembler. 1.273 if test "x$OPENJDK_BUILD_OS" = xsolaris; then 1.274 AC_PATH_PROG(AS, as) 1.275 - WHICHCMD(AS) 1.276 - ASFLAGS=" " 1.277 + SET_FULL_PATH(AS) 1.278 else 1.279 AS="$CC -c" 1.280 - ASFLAGS=" " 1.281 fi 1.282 AC_SUBST(AS) 1.283 -AC_SUBST(ASFLAGS) 1.284 1.285 if test "x$OPENJDK_BUILD_OS" = xsolaris; then 1.286 - AC_PATH_PROG(NM, nm) 1.287 - WHICHCMD(NM) 1.288 + AC_PATH_PROGS(NM, [gnm nm]) 1.289 + SET_FULL_PATH(NM) 1.290 AC_PATH_PROG(STRIP, strip) 1.291 - WHICHCMD(STRIP) 1.292 + SET_FULL_PATH(STRIP) 1.293 AC_PATH_PROG(MCS, mcs) 1.294 - WHICHCMD(MCS) 1.295 -else 1.296 + SET_FULL_PATH(MCS) 1.297 +elif test "x$OPENJDK_BUILD_OS" != xwindows; then 1.298 AC_CHECK_TOOL(NM, nm) 1.299 - WHICHCMD(NM) 1.300 + SET_FULL_PATH(NM) 1.301 AC_CHECK_TOOL(STRIP, strip) 1.302 - WHICHCMD(STRIP) 1.303 + SET_FULL_PATH(STRIP) 1.304 fi 1.305 1.306 ### 1.307 @@ -421,6 +407,11 @@ 1.308 AC_PATH_TOOL(OBJCOPY, objcopy) 1.309 fi 1.310 1.311 +if test "x$OPENJDK_TARGET_OS" = "xmacosx"; then 1.312 + AC_PATH_PROG(LIPO, lipo) 1.313 + SET_FULL_PATH(LIPO) 1.314 +fi 1.315 + 1.316 # Restore old path without tools dir 1.317 PATH="$OLD_PATH" 1.318 ]) 1.319 @@ -449,15 +440,13 @@ 1.320 SET_SHARED_LIBRARY_MAPFILE='-Xlinker -version-script=[$]1' 1.321 C_FLAG_REORDER='' 1.322 CXX_FLAG_REORDER='' 1.323 - SET_SHARED_LIBRARY_ORIGIN='-Xlinker -z -Xlinker origin -Xlinker -rpath -Xlinker \$$$$ORIGIN/[$]1' 1.324 + SET_SHARED_LIBRARY_ORIGIN='-Xlinker -z -Xlinker origin -Xlinker -rpath -Xlinker \$$$$ORIGIN[$]1' 1.325 + SET_EXECUTABLE_ORIGIN='-Xlinker -rpath -Xlinker \$$$$ORIGIN[$]1' 1.326 LD="$CC" 1.327 LDEXE="$CC" 1.328 LDCXX="$CXX" 1.329 LDEXECXX="$CXX" 1.330 POST_STRIP_CMD="$STRIP -g" 1.331 - if test "x$JDK_VARIANT" = xembedded; then 1.332 - POST_STRIP_CMD="$STRIP --strip-unneeded" 1.333 - fi 1.334 1.335 # Linking is different on MacOSX 1.336 if test "x$OPENJDK_BUILD_OS" = xmacosx; then 1.337 @@ -470,6 +459,7 @@ 1.338 SET_SHARED_LIBRARY_NAME='-Xlinker -install_name -Xlinker @rpath/[$]1' 1.339 SET_SHARED_LIBRARY_MAPFILE='' 1.340 SET_SHARED_LIBRARY_ORIGIN='-Xlinker -rpath -Xlinker @loader_path/.' 1.341 + SET_EXECUTABLE_ORIGIN="$SET_SHARED_LIBRARY_ORIGIN" 1.342 POST_STRIP_CMD="$STRIP -S" 1.343 fi 1.344 else 1.345 @@ -480,7 +470,7 @@ 1.346 LIBRARY_PREFIX=lib 1.347 SHARED_LIBRARY='lib[$]1.so' 1.348 STATIC_LIBRARY='lib[$]1.a' 1.349 - SHARED_LIBRARY_FLAGS="-z defs -xildoff -ztext -G" 1.350 + SHARED_LIBRARY_FLAGS="-G" 1.351 SHARED_LIBRARY_SUFFIX='.so' 1.352 STATIC_LIBRARY_SUFFIX='.a' 1.353 OBJ_SUFFIX='.o' 1.354 @@ -489,7 +479,8 @@ 1.355 SET_SHARED_LIBRARY_MAPFILE='-M[$]1' 1.356 C_FLAG_REORDER='-xF' 1.357 CXX_FLAG_REORDER='-xF' 1.358 - SET_SHARED_LIBRARY_ORIGIN='-R \$$$$ORIGIN/[$]1' 1.359 + SET_SHARED_LIBRARY_ORIGIN='-R\$$$$ORIGIN[$]1' 1.360 + SET_EXECUTABLE_ORIGIN="$SET_SHARED_LIBRARY_ORIGIN" 1.361 CFLAGS_JDK="${CFLAGS_JDK} -D__solaris__" 1.362 CXXFLAGS_JDK="${CXXFLAGS_JDK} -D__solaris__" 1.363 CFLAGS_JDKLIB_EXTRA='-xstrconst' 1.364 @@ -511,6 +502,7 @@ 1.365 SET_SHARED_LIBRARY_NAME='' 1.366 SET_SHARED_LIBRARY_MAPFILE='' 1.367 SET_SHARED_LIBRARY_ORIGIN='' 1.368 + SET_EXECUTABLE_ORIGIN='' 1.369 fi 1.370 fi 1.371 1.372 @@ -527,6 +519,7 @@ 1.373 AC_SUBST(C_FLAG_REORDER) 1.374 AC_SUBST(CXX_FLAG_REORDER) 1.375 AC_SUBST(SET_SHARED_LIBRARY_ORIGIN) 1.376 +AC_SUBST(SET_EXECUTABLE_ORIGIN) 1.377 AC_SUBST(POST_STRIP_CMD) 1.378 AC_SUBST(POST_MCS_CMD) 1.379 1.380 @@ -542,6 +535,25 @@ 1.381 # Setup the opt flags for different compilers 1.382 # and different operating systems. 1.383 # 1.384 + 1.385 +# 1.386 +# NOTE: check for -mstackrealign needs to be below potential addition of -m32 1.387 +# 1.388 +if test "x$OPENJDK_TARGET_CPU_BITS" = x32 && test "x$OPENJDK_TARGET_OS" = xmacosx; then 1.389 + # On 32-bit MacOSX the OS requires C-entry points to be 16 byte aligned. 1.390 + # While waiting for a better solution, the current workaround is to use -mstackrealign. 1.391 + CFLAGS="$CFLAGS -mstackrealign" 1.392 + AC_MSG_CHECKING([if 32-bit compiler supports -mstackrealign]) 1.393 + AC_LINK_IFELSE([AC_LANG_SOURCE([[int main() { return 0; }]])], 1.394 + [ 1.395 + AC_MSG_RESULT([yes]) 1.396 + ], 1.397 + [ 1.398 + AC_MSG_RESULT([no]) 1.399 + AC_MSG_ERROR([The selected compiler $CXX does not support -mstackrealign! Try to put another compiler in the path.]) 1.400 + ]) 1.401 +fi 1.402 + 1.403 C_FLAG_DEPS="-MMD -MF" 1.404 CXX_FLAG_DEPS="-MMD -MF" 1.405 1.406 @@ -566,7 +578,7 @@ 1.407 CXXFLAGS_DEBUG_SYMBOLS="-g" 1.408 if test "x$OPENJDK_TARGET_CPU_BITS" = "x64" && test "x$DEBUG_LEVEL" = "xfastdebug"; then 1.409 CFLAGS_DEBUG_SYMBOLS="-g1" 1.410 - CXXFLAGS_DEBUG_SYMBOLSG="-g1" 1.411 + CXXFLAGS_DEBUG_SYMBOLS="-g1" 1.412 fi 1.413 ;; 1.414 esac 1.415 @@ -578,52 +590,56 @@ 1.416 # 1.417 # Forte has different names for this with their C++ compiler... 1.418 # 1.419 - C_FLAG_DEPS="-xMMD -xMF" 1.420 - CXX_FLAG_DEPS="-xMMD -xMF" 1.421 + C_FLAG_DEPS="-xMMD -xMF" 1.422 + CXX_FLAG_DEPS="-xMMD -xMF" 1.423 1.424 -# Extra options used with HIGHEST 1.425 -# 1.426 -# WARNING: Use of OPTIMIZATION_LEVEL=HIGHEST in your Makefile needs to be 1.427 -# done with care, there are some assumptions below that need to 1.428 -# be understood about the use of pointers, and IEEE behavior. 1.429 -# 1.430 -# Use non-standard floating point mode (not IEEE 754) 1.431 -CC_HIGHEST="$CC_HIGHEST -fns" 1.432 -# Do some simplification of floating point arithmetic (not IEEE 754) 1.433 -CC_HIGHEST="$CC_HIGHEST -fsimple" 1.434 -# Use single precision floating point with 'float' 1.435 -CC_HIGHEST="$CC_HIGHEST -fsingle" 1.436 -# Assume memory references via basic pointer types do not alias 1.437 -# (Source with excessing pointer casting and data access with mixed 1.438 -# pointer types are not recommended) 1.439 -CC_HIGHEST="$CC_HIGHEST -xalias_level=basic" 1.440 -# Use intrinsic or inline versions for math/std functions 1.441 -# (If you expect perfect errno behavior, do not use this) 1.442 -CC_HIGHEST="$CC_HIGHEST -xbuiltin=%all" 1.443 -# Loop data dependency optimizations (need -xO3 or higher) 1.444 -CC_HIGHEST="$CC_HIGHEST -xdepend" 1.445 -# Pointer parameters to functions do not overlap 1.446 -# (Similar to -xalias_level=basic usage, but less obvious sometimes. 1.447 -# If you pass in multiple pointers to the same data, do not use this) 1.448 -CC_HIGHEST="$CC_HIGHEST -xrestrict" 1.449 -# Inline some library routines 1.450 -# (If you expect perfect errno behavior, do not use this) 1.451 -CC_HIGHEST="$CC_HIGHEST -xlibmil" 1.452 -# Use optimized math routines 1.453 -# (If you expect perfect errno behavior, do not use this) 1.454 -# Can cause undefined external on Solaris 8 X86 on __sincos, removing for now 1.455 -#CC_HIGHEST="$CC_HIGHEST -xlibmopt" 1.456 + # Extra options used with HIGHEST 1.457 + # 1.458 + # WARNING: Use of OPTIMIZATION_LEVEL=HIGHEST in your Makefile needs to be 1.459 + # done with care, there are some assumptions below that need to 1.460 + # be understood about the use of pointers, and IEEE behavior. 1.461 + # 1.462 + # Use non-standard floating point mode (not IEEE 754) 1.463 + CC_HIGHEST="$CC_HIGHEST -fns" 1.464 + # Do some simplification of floating point arithmetic (not IEEE 754) 1.465 + CC_HIGHEST="$CC_HIGHEST -fsimple" 1.466 + # Use single precision floating point with 'float' 1.467 + CC_HIGHEST="$CC_HIGHEST -fsingle" 1.468 + # Assume memory references via basic pointer types do not alias 1.469 + # (Source with excessing pointer casting and data access with mixed 1.470 + # pointer types are not recommended) 1.471 + CC_HIGHEST="$CC_HIGHEST -xalias_level=basic" 1.472 + # Use intrinsic or inline versions for math/std functions 1.473 + # (If you expect perfect errno behavior, do not use this) 1.474 + CC_HIGHEST="$CC_HIGHEST -xbuiltin=%all" 1.475 + # Loop data dependency optimizations (need -xO3 or higher) 1.476 + CC_HIGHEST="$CC_HIGHEST -xdepend" 1.477 + # Pointer parameters to functions do not overlap 1.478 + # (Similar to -xalias_level=basic usage, but less obvious sometimes. 1.479 + # If you pass in multiple pointers to the same data, do not use this) 1.480 + CC_HIGHEST="$CC_HIGHEST -xrestrict" 1.481 + # Inline some library routines 1.482 + # (If you expect perfect errno behavior, do not use this) 1.483 + CC_HIGHEST="$CC_HIGHEST -xlibmil" 1.484 + # Use optimized math routines 1.485 + # (If you expect perfect errno behavior, do not use this) 1.486 + # Can cause undefined external on Solaris 8 X86 on __sincos, removing for now 1.487 + #CC_HIGHEST="$CC_HIGHEST -xlibmopt" 1.488 1.489 - case $LEGACY_OPENJDK_TARGET_CPU1 in 1.490 - i586) 1.491 - C_O_FLAG_HIGHEST="-xO4 -Wu,-O4~yz $CC_HIGHEST -xchip=pentium" 1.492 - C_O_FLAG_HI="-xO4 -Wu,-O4~yz" 1.493 - C_O_FLAG_NORM="-xO2 -Wu,-O2~yz" 1.494 - C_O_FLAG_NONE="" 1.495 - CXX_O_FLAG_HIGHEST="-xO4 -Qoption ube -O4~yz $CC_HIGHEST -xchip=pentium" 1.496 - CXX_O_FLAG_HI="-xO4 -Qoption ube -O4~yz" 1.497 - CXX_O_FLAG_NORM="-xO2 -Qoption ube -O2~yz" 1.498 - CXX_O_FLAG_NONE="" 1.499 + case $OPENJDK_TARGET_CPU_ARCH in 1.500 + x86) 1.501 + C_O_FLAG_HIGHEST="-xO4 -Wu,-O4~yz $CC_HIGHEST -xregs=no%frameptr" 1.502 + C_O_FLAG_HI="-xO4 -Wu,-O4~yz -xregs=no%frameptr" 1.503 + C_O_FLAG_NORM="-xO2 -Wu,-O2~yz -xregs=no%frameptr" 1.504 + C_O_FLAG_NONE="-xregs=no%frameptr" 1.505 + CXX_O_FLAG_HIGHEST="-xO4 -Qoption ube -O4~yz $CC_HIGHEST -xregs=no%frameptr" 1.506 + CXX_O_FLAG_HI="-xO4 -Qoption ube -O4~yz -xregs=no%frameptr" 1.507 + CXX_O_FLAG_NORM="-xO2 -Qoption ube -O2~yz -xregs=no%frameptr" 1.508 + CXX_O_FLAG_NONE="-xregs=no%frameptr" 1.509 + if test "x$OPENJDK_TARGET_CPU" = xx86; then 1.510 + C_O_FLAG_HIGHEST="$C_O_FLAG_HIGHEST -xchip=pentium" 1.511 + CXX_O_FLAG_HIGHEST="$CXX_O_FLAG_HIGHEST -xchip=pentium" 1.512 + fi 1.513 ;; 1.514 sparc) 1.515 CFLAGS_JDK="${CFLAGS_JDK} -xmemalign=4s" 1.516 @@ -647,9 +663,11 @@ 1.517 ;; 1.518 CL ) 1.519 D_FLAG= 1.520 - C_O_FLAG_HI="-O2" 1.521 + C_O_FLAG_HIGHEST="-O2" 1.522 + C_O_FLAG_HI="-O1" 1.523 C_O_FLAG_NORM="-O1" 1.524 C_O_FLAG_NONE="-Od" 1.525 + CXX_O_FLAG_HIGHEST="$C_O_FLAG_HIGHEST" 1.526 CXX_O_FLAG_HI="$C_O_FLAG_HI" 1.527 CXX_O_FLAG_NORM="$C_O_FLAG_NORM" 1.528 CXX_O_FLAG_NONE="$C_O_FLAG_NONE" 1.529 @@ -680,15 +698,15 @@ 1.530 [ 1.531 1.532 if test "x$CFLAGS" != "x${ADDED_CFLAGS}"; then 1.533 - AC_MSG_WARN([Ignoring CFLAGS($CFLAGS) found in environment. Use --with-extra-cflags"]) 1.534 + AC_MSG_WARN([Ignoring CFLAGS($CFLAGS) found in environment. Use --with-extra-cflags]) 1.535 fi 1.536 1.537 if test "x$CXXFLAGS" != "x${ADDED_CXXFLAGS}"; then 1.538 - AC_MSG_WARN([Ignoring CXXFLAGS($CXXFLAGS) found in environment. Use --with-extra-cxxflags"]) 1.539 + AC_MSG_WARN([Ignoring CXXFLAGS($CXXFLAGS) found in environment. Use --with-extra-cxxflags]) 1.540 fi 1.541 1.542 if test "x$LDFLAGS" != "x${ADDED_LDFLAGS}"; then 1.543 - AC_MSG_WARN([Ignoring LDFLAGS($LDFLAGS) found in environment. Use --with-extra-ldflags"]) 1.544 + AC_MSG_WARN([Ignoring LDFLAGS($LDFLAGS) found in environment. Use --with-extra-ldflags]) 1.545 fi 1.546 1.547 AC_ARG_WITH(extra-cflags, [AS_HELP_STRING([--with-extra-cflags], 1.548 @@ -704,6 +722,15 @@ 1.549 CXXFLAGS_JDK="${CXXFLAGS_JDK} $with_extra_cxxflags" 1.550 LDFLAGS_JDK="${LDFLAGS_JDK} $with_extra_ldflags" 1.551 1.552 +# Hotspot needs these set in their legacy form 1.553 +LEGACY_EXTRA_CFLAGS=$with_extra_cflags 1.554 +LEGACY_EXTRA_CXXFLAGS=$with_extra_cxxflags 1.555 +LEGACY_EXTRA_LDFLAGS=$with_extra_ldflags 1.556 + 1.557 +AC_SUBST(LEGACY_EXTRA_CFLAGS) 1.558 +AC_SUBST(LEGACY_EXTRA_CXXFLAGS) 1.559 +AC_SUBST(LEGACY_EXTRA_LDFLAGS) 1.560 + 1.561 ############################################################################### 1.562 # 1.563 # Now setup the CFLAGS and LDFLAGS for the JDK build. 1.564 @@ -729,19 +756,30 @@ 1.565 esac 1.566 ;; 1.567 ossc ) 1.568 - CFLAGS_JDK="$CFLAGS_JDK -xc99=%none -xCC -errshort=tags -Xa -v -mt -norunpath -xnolib" 1.569 - CXXFLAGS_JDK="$CXXFLAGS_JDK -errtags=yes +w -mt -features=no%except -DCC_NOEX" 1.570 + CCXXFLAGS_JDK="$CCXXFLAGS $CCXXFLAGS_JDK -DTRACING -DMACRO_MEMSYS_OPS -DBREAKPTS" 1.571 + case $OPENJDK_TARGET_CPU_ARCH in 1.572 + x86 ) 1.573 + CCXXFLAGS_JDK="$CCXXFLAGS_JDK -DcpuIntel -Di586 -Di386" 1.574 + CFLAGS_JDK="$CFLAGS_JDK -erroff=E_BAD_PRAGMA_PACK_VALUE" 1.575 + ;; 1.576 + esac 1.577 + 1.578 + CFLAGS_JDK="$CFLAGS_JDK -xc99=%none -xCC -errshort=tags -Xa -v -mt -W0,-noglobal" 1.579 + CXXFLAGS_JDK="$CXXFLAGS_JDK -errtags=yes +w -mt -features=no%except -DCC_NOEX -norunpath -xnolib" 1.580 + 1.581 + LDFLAGS_JDK="$LDFLAGS_JDK -z defs -xildoff -ztext" 1.582 + LDFLAGS_CXX_JDK="$LDFLAGS_CXX_JDK -norunpath -xnolib" 1.583 ;; 1.584 cl ) 1.585 CCXXFLAGS_JDK="$CCXXFLAGS $CCXXFLAGS_JDK -Zi -MD -Zc:wchar_t- -W3 -wd4800 \ 1.586 -D_STATIC_CPPLIB -D_DISABLE_DEPRECATE_STATIC_CPPLIB -DWIN32_LEAN_AND_MEAN \ 1.587 -D_CRT_SECURE_NO_DEPRECATE -D_CRT_NONSTDC_NO_DEPRECATE \ 1.588 -DWIN32 -DIAL" 1.589 - case $LEGACY_OPENJDK_TARGET_CPU1 in 1.590 - i?86 ) 1.591 + case $OPENJDK_TARGET_CPU in 1.592 + x86 ) 1.593 CCXXFLAGS_JDK="$CCXXFLAGS_JDK -D_X86_ -Dx86" 1.594 ;; 1.595 - amd64 ) 1.596 + x86_64 ) 1.597 CCXXFLAGS_JDK="$CCXXFLAGS_JDK -D_AMD64_ -Damd64" 1.598 ;; 1.599 esac 1.600 @@ -749,24 +787,6 @@ 1.601 esac 1.602 1.603 ############################################################################### 1.604 -# 1.605 -# Cross-compile arch specific flags 1.606 - 1.607 -# 1.608 -if test "x$JDK_VARIANT" = "xembedded"; then 1.609 - CCXXFLAGS_JDK="$CCXXFLAGS_JDK -DJAVASE_EMBEDDED" 1.610 -fi 1.611 - 1.612 -case $OPENJDK_TARGET_CPU_ARCH in 1.613 -arm ) 1.614 - CCXXFLAGS_JDK="$CCXXFLAGS_JDK -fsigned-char" 1.615 - ;; 1.616 -ppc ) 1.617 - CCXXFLAGS_JDK="$CCXXFLAGS_JDK -fsigned-char" 1.618 - ;; 1.619 -esac 1.620 - 1.621 -############################################################################### 1.622 1.623 CCXXFLAGS_JDK="$CCXXFLAGS_JDK $ADD_LP64" 1.624 1.625 @@ -774,11 +794,17 @@ 1.626 PACKAGE_PATH=/opt/local 1.627 AC_SUBST(PACKAGE_PATH) 1.628 1.629 -# Sometimes we use a cpu dir (.../lib/amd64/server) 1.630 -# Sometimes not (.../lib/server) 1.631 -LIBARCHDIR="$LEGACY_OPENJDK_TARGET_CPU2/" 1.632 -if test "x$ENDIAN" = xlittle; then 1.633 - CCXXFLAGS_JDK="$CCXXFLAGS_JDK -D_LITTLE_ENDIAN" 1.634 +if test "x$OPENJDK_TARGET_CPU_ENDIAN" = xlittle; then 1.635 + # The macro _LITTLE_ENDIAN needs to be defined the same to avoid the 1.636 + # Sun C compiler warning message: warning: macro redefined: _LITTLE_ENDIAN 1.637 + # (The Solaris X86 system defines this in file /usr/include/sys/isa_defs.h). 1.638 + # Note: -Dmacro is the same as #define macro 1 1.639 + # -Dmacro= is the same as #define macro 1.640 + if test "x$OPENJDK_TARGET_OS" = xsolaris; then 1.641 + CCXXFLAGS_JDK="$CCXXFLAGS_JDK -D_LITTLE_ENDIAN=" 1.642 + else 1.643 + CCXXFLAGS_JDK="$CCXXFLAGS_JDK -D_LITTLE_ENDIAN" 1.644 + fi 1.645 else 1.646 CCXXFLAGS_JDK="$CCXXFLAGS_JDK -D_BIG_ENDIAN" 1.647 fi 1.648 @@ -793,27 +819,29 @@ 1.649 fi 1.650 if test "x$OPENJDK_TARGET_OS" = xmacosx; then 1.651 CCXXFLAGS_JDK="$CCXXFLAGS_JDK -DMACOSX -D_ALLBSD_SOURCE" 1.652 - LIBARCHDIR="" 1.653 fi 1.654 if test "x$OPENJDK_TARGET_OS" = xbsd; then 1.655 CCXXFLAGS_JDK="$CCXXFLAGS_JDK -DBSD -D_ALLBSD_SOURCE" 1.656 fi 1.657 if test "x$DEBUG_LEVEL" = xrelease; then 1.658 CCXXFLAGS_JDK="$CCXXFLAGS_JDK -DNDEBUG" 1.659 + if test "x$OPENJDK_TARGET_OS" = xsolaris; then 1.660 + CCXXFLAGS_JDK="$CCXXFLAGS_JDK -DTRIMMED" 1.661 + fi 1.662 else 1.663 CCXXFLAGS_JDK="$CCXXFLAGS_JDK -DDEBUG" 1.664 fi 1.665 1.666 -CCXXFLAGS_JDK="$CCXXFLAGS_JDK -DARCH='\"$LEGACY_OPENJDK_TARGET_CPU1\"' -D$LEGACY_OPENJDK_TARGET_CPU1" 1.667 +CCXXFLAGS_JDK="$CCXXFLAGS_JDK -DARCH='\"$OPENJDK_TARGET_CPU_LEGACY\"' -D$OPENJDK_TARGET_CPU_LEGACY" 1.668 CCXXFLAGS_JDK="$CCXXFLAGS_JDK -DRELEASE='\"$RELEASE\"'" 1.669 1.670 CCXXFLAGS_JDK="$CCXXFLAGS_JDK \ 1.671 -I${JDK_OUTPUTDIR}/include \ 1.672 -I${JDK_OUTPUTDIR}/include/$OPENJDK_TARGET_OS \ 1.673 -I${JDK_TOPDIR}/src/share/javavm/export \ 1.674 - -I${JDK_TOPDIR}/src/$LEGACY_OPENJDK_TARGET_OS_API/javavm/export \ 1.675 + -I${JDK_TOPDIR}/src/$OPENJDK_TARGET_OS_API_DIR/javavm/export \ 1.676 -I${JDK_TOPDIR}/src/share/native/common \ 1.677 - -I${JDK_TOPDIR}/src/$LEGACY_OPENJDK_TARGET_OS_API/native/common" 1.678 + -I${JDK_TOPDIR}/src/$OPENJDK_TARGET_OS_API_DIR/native/common" 1.679 1.680 # The shared libraries are compiled using the picflag. 1.681 CFLAGS_JDKLIB="$CCXXFLAGS_JDK $CFLAGS_JDK $PICFLAG $CFLAGS_JDKLIB_EXTRA" 1.682 @@ -833,7 +861,7 @@ 1.683 # Thus we offer the compiler to find libjvm.so first in server then in client. It works. Ugh. 1.684 if test "x$COMPILER_TYPE" = xCL; then 1.685 LDFLAGS_JDK="$LDFLAGS_JDK -nologo -opt:ref -incremental:no" 1.686 - if test "x$LEGACY_OPENJDK_TARGET_CPU1" = xi586; then 1.687 + if test "x$OPENJDK_TARGET_CPU" = xx86; then 1.688 LDFLAGS_JDK="$LDFLAGS_JDK -safeseh" 1.689 fi 1.690 # TODO: make -debug optional "--disable-full-debug-symbols" 1.691 @@ -861,20 +889,18 @@ 1.692 fi 1.693 1.694 LDFLAGS_JDKLIB="${LDFLAGS_JDK} $SHARED_LIBRARY_FLAGS \ 1.695 - -L${JDK_OUTPUTDIR}/lib/${LIBARCHDIR}server \ 1.696 - -L${JDK_OUTPUTDIR}/lib/${LIBARCHDIR}client \ 1.697 - -L${JDK_OUTPUTDIR}/lib/${LIBARCHDIR}" 1.698 - LDFLAGS_JDKLIB_SUFFIX="-ljvm -ljava" 1.699 + -L${JDK_OUTPUTDIR}/lib${OPENJDK_TARGET_CPU_LIBDIR}/server \ 1.700 + -L${JDK_OUTPUTDIR}/lib${OPENJDK_TARGET_CPU_LIBDIR}/client \ 1.701 + -L${JDK_OUTPUTDIR}/lib${OPENJDK_TARGET_CPU_LIBDIR}" 1.702 + 1.703 + LDFLAGS_JDKLIB_SUFFIX="-ljava -ljvm" 1.704 if test "x$COMPILER_NAME" = xossc; then 1.705 LDFLAGS_JDKLIB_SUFFIX="$LDFLAGS_JDKLIB_SUFFIX -lc" 1.706 fi 1.707 1.708 - # Only the jli library is explicitly linked when the launchers are built. 1.709 - # The libjvm is then dynamically loaded/linked by the launcher. 1.710 LDFLAGS_JDKEXE="${LDFLAGS_JDK}" 1.711 - if test "x$OPENJDK_TARGET_OS" != "xmacosx"; then 1.712 - LDFLAGS_JDKEXE="$LDFLAGS_JDKEXE -L${JDK_OUTPUTDIR}/lib/${LIBARCHDIR}jli" 1.713 - LDFLAGS_JDKEXE_SUFFIX="-ljli" 1.714 + if test "x$OPENJDK_TARGET_OS" = xlinux; then 1.715 + LDFLAGS_JDKEXE="$LDFLAGS_JDKEXE -Xlinker --allow-shlib-undefined" 1.716 fi 1.717 fi 1.718 1.719 @@ -905,4 +931,5 @@ 1.720 AC_SUBST(LDFLAGS_JDKEXE) 1.721 AC_SUBST(LDFLAGS_JDKLIB_SUFFIX) 1.722 AC_SUBST(LDFLAGS_JDKEXE_SUFFIX) 1.723 +AC_SUBST(LDFLAGS_CXX_JDK) 1.724 ])