This commit is contained in:
Zhengyu Gu 2012-07-19 06:24:46 -07:00
commit b5b29845bd
266 changed files with 31478 additions and 39871 deletions

View File

@ -167,3 +167,5 @@ c029c972396cea042a0dc67c0f7ccf2fe68007d4 jdk8-b41
69d8a827cdf9236be9694a46d75c710d71dac7d7 jdk8-b43
7e981cb0ad6a194f1fa859f9ad47586db461f269 jdk8-b44
9b19b2302c28f4da6d4078f66234abecfed5688a jdk8-b45
600c9a1feb01633cbcf2341a43d1d21e6497ecd0 jdk8-b46
b820143a6f1ce993c6e6f31db4d64de990f42654 jdk8-b47

View File

@ -167,3 +167,5 @@ a2b2d435f1d275fa8010774c653197c64e326d3a jdk8-b40
661c9aae602bbd9766d12590800c90f1edd1d8dd jdk8-b43
e4f81a817447c3a4f6868f083c81c2fb1b15d44c jdk8-b44
633f2378c904c92bb922a6e19e9f62fe8eac14af jdk8-b45
27fa766a2298ba8347dc198f0cf85ba6618e17db jdk8-b46
1dcb4b7b9373e64e135c12fe1f8699f1f80e51e8 jdk8-b47

View File

@ -22,5 +22,19 @@
# questions.
#
autoconf -W all configure.ac > configure
rm -rf config.status config.log autom4te.cache
script_dir=`dirname $0`
closed_script_dir="$script_dir/../../jdk/make/closed/autoconf"
# Create a timestamp as seconds since epoch
TIMESTAMP=`date +%s`
cat $script_dir/configure.ac | sed -e "s|@DATE_WHEN_GENERATED@|$TIMESTAMP|" | autoconf -W all -I$script_dir - > $script_dir/generated-configure.sh
rm -rf autom4te.cache
if test -e $closed_script_dir/closed-hook.m4; then
# We have closed sources available; also generate configure script
# with closed hooks compiled in.
cat $script_dir/configure.ac | sed -e "s|@DATE_WHEN_GENERATED@|$TIMESTAMP|" | \
sed -e "s|AC_DEFUN_ONCE(\[CLOSED_HOOK\])|m4_include([$closed_script_dir/closed-hook.m4])|" | autoconf -W all -I$script_dir - > $closed_script_dir/generated-configure.sh
rm -rf autom4te.cache
fi

485
common/autoconf/basics.m4 Normal file
View File

@ -0,0 +1,485 @@
#
# Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved.
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
#
# This code is free software; you can redistribute it and/or modify it
# under the terms of the GNU General Public License version 2 only, as
# published by the Free Software Foundation. Oracle designates this
# particular file as subject to the "Classpath" exception as provided
# by Oracle in the LICENSE file that accompanied this code.
#
# This code is distributed in the hope that it will be useful, but WITHOUT
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
# version 2 for more details (a copy is included in the LICENSE file that
# accompanied this code).
#
# You should have received a copy of the GNU General Public License version
# 2 along with this work; if not, write to the Free Software Foundation,
# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
#
# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
# or visit www.oracle.com if you need additional information or have any
# questions.
#
AC_DEFUN([ADD_JVM_ARG_IF_OK],
[
# Test if $1 is a valid argument to $3 (often is $JAVA passed as $3)
# If so, then append $1 to $2
FOUND_WARN=`$3 $1 -version 2>&1 | grep -i warn`
FOUND_VERSION=`$3 $1 -version 2>&1 | grep " version \""`
if test "x$FOUND_VERSION" != x && test "x$FOUND_WARN" = x; then
$2="[$]$2 $1"
fi
])
AC_DEFUN([WHICHCMD],
[
# Translate "gcc -E" into "`which gcc` -E" ie
# extract the full path to the binary and at the
# same time maintain any arguments passed to it.
# The command MUST exist in the path, or else!
tmp="[$]$1"
car="${tmp%% *}"
tmp="[$]$1 EOL"
cdr="${tmp#* }"
# On windows we want paths without spaces.
if test "x$OPENJDK_BUILD_OS" = "xwindows"; then
WHICHCMD_SPACESAFE(car)
else
# "which" is not portable, but is used here
# because we know that the command exists!
car=`which $car`
fi
if test "x$cdr" != xEOL; then
$1="$car ${cdr% *}"
else
$1="$car"
fi
])
AC_DEFUN([SPACESAFE],
[
# Fail with message $2 if var $1 contains a path with no spaces in it.
# Unless on Windows, where we can rewrite the path.
HAS_SPACE=`echo "[$]$1" | grep " "`
if test "x$HAS_SPACE" != x; then
if test "x$OPENJDK_BUILD_OS" = "xwindows"; then
$1=`$CYGPATH -s -m -a "[$]$1"`
$1=`$CYGPATH -u "[$]$1"`
else
AC_MSG_ERROR([You cannot have spaces in $2! "[$]$1"])
fi
fi
])
AC_DEFUN([WHICHCMD_SPACESAFE],
[
# Translate long cygdrive or C:\sdfsf path
# into a short mixed mode path that has no
# spaces in it.
tmp="[$]$1"
if test "x$OPENJDK_BUILD_OS" = "xwindows"; then
tmp=`$CYGPATH -u "[$]$1"`
tmp=`which "$tmp"`
# If file exists with .exe appended, that's the real filename
# and cygpath needs that to convert to short style path.
if test -f "${tmp}.exe"; then
tmp="${tmp}.exe"
elif test -f "${tmp}.cmd"; then
tmp="${tmp}.cmd"
fi
# Convert to C:/ mixed style path without spaces.
tmp=`$CYGPATH -s -m "$tmp"`
fi
$1="$tmp"
])
AC_DEFUN([REMOVE_SYMBOLIC_LINKS],
[
if test "x$OPENJDK_BUILD_OS" != xwindows; then
# Follow a chain of symbolic links. Use readlink
# where it exists, else fall back to horribly
# complicated shell code.
AC_PATH_PROG(READLINK, readlink)
if test "x$READLINK_TESTED" != yes; then
# On MacOSX there is a readlink tool with a different
# purpose than the GNU readlink tool. Check the found readlink.
ISGNU=`$READLINK --help 2>&1 | grep GNU`
if test "x$ISGNU" = x; then
# A readlink that we do not know how to use.
# Are there other non-GNU readlinks out there?
READLINK_TESTED=yes
READLINK=
fi
fi
if test "x$READLINK" != x; then
$1=`$READLINK -f [$]$1`
else
STARTDIR=$PWD
COUNTER=0
DIR=`dirname [$]$1`
FIL=`basename [$]$1`
while test $COUNTER -lt 20; do
ISLINK=`ls -l $DIR/$FIL | grep '\->' | sed -e 's/.*-> \(.*\)/\1/'`
if test "x$ISLINK" == x; then
# This is not a symbolic link! We are done!
break
fi
# The link might be relative! We have to use cd to travel safely.
cd $DIR
cd `dirname $ISLINK`
DIR=`pwd`
FIL=`basename $ISLINK`
let COUNTER=COUNTER+1
done
cd $STARTDIR
$1=$DIR/$FIL
fi
fi
])
AC_DEFUN_ONCE([BASIC_INIT],
[
# Save the original command line. This is passed to us by the wrapper configure script.
AC_SUBST(CONFIGURE_COMMAND_LINE)
DATE_WHEN_CONFIGURED=`LANG=C date`
AC_SUBST(DATE_WHEN_CONFIGURED)
# Locate the directory of this script.
SCRIPT="[$]0"
REMOVE_SYMBOLIC_LINKS(SCRIPT)
AUTOCONF_DIR=`dirname [$]0`
])
AC_DEFUN_ONCE([BASIC_SETUP_PATHS],
[
# Where is the source? It is located two levels above the configure script.
CURDIR="$PWD"
cd "$AUTOCONF_DIR/../.."
SRC_ROOT="`pwd`"
if test "x$OPENJDK_BUILD_OS" = "xwindows"; then
SRC_ROOT_LENGTH=`pwd|wc -m`
if test $SRC_ROOT_LENGTH -gt 100; then
AC_MSG_ERROR([Your base path is too long. It is $SRC_ROOT_LENGTH characters long, but only 100 is supported])
fi
fi
AC_SUBST(SRC_ROOT)
cd "$CURDIR"
SPACESAFE(SRC_ROOT,[the path to the source root])
SPACESAFE(CURDIR,[the path to the current directory])
])
AC_DEFUN_ONCE([BASIC_SETUP_SEARCHPATH],
[
if test "x$OPENJDK_BUILD_OS" = "xsolaris"; then
# Add extra search paths on solaris for utilities like ar and as etc...
PATH="$PATH:/usr/ccs/bin:/usr/sfw/bin:/opt/csw/bin"
fi
])
AC_DEFUN_ONCE([BASIC_SETUP_PATH_SEP],
[
# For cygwin we need cygpath first, since it is used everywhere.
AC_PATH_PROG(CYGPATH, cygpath)
PATH_SEP=":"
if test "x$OPENJDK_BUILD_OS" = "xwindows"; then
if test "x$CYGPATH" = x; then
AC_MSG_ERROR([Something is wrong with your cygwin installation since I cannot find cygpath.exe in your path])
fi
PATH_SEP=";"
fi
AC_SUBST(PATH_SEP)
])
AC_DEFUN_ONCE([BASIC_SETUP_OUTPUT_DIR],
[
AC_ARG_WITH(conf-name, [AS_HELP_STRING([--with-conf-name],
[use this as the name of the configuration, overriding the generated default])],
[ CONF_NAME=${with_conf_name} ])
# Test from where we are running configure, in or outside of src root.
if test "x$CURDIR" = "x$SRC_ROOT" || test "x$CURDIR" = "x$SRC_ROOT/common" || test "x$CURDIR" = "x$SRC_ROOT/common/autoconf" || test "x$CURDIR" = "x$SRC_ROOT/common/makefiles" ; then
# We are running configure from the src root.
# Create a default ./build/target-variant-debuglevel output root.
if test "x${CONF_NAME}" = x; then
CONF_NAME="${OPENJDK_TARGET_OS}-${OPENJDK_TARGET_CPU}-${JDK_VARIANT}-${ANDED_JVM_VARIANTS}-${DEBUG_LEVEL}"
fi
OUTPUT_ROOT="$SRC_ROOT/build/${CONF_NAME}"
mkdir -p "$OUTPUT_ROOT"
if test ! -d "$OUTPUT_ROOT"; then
AC_MSG_ERROR([Could not create build directory $OUTPUT_ROOT])
fi
else
# We are running configure from outside of the src dir.
# Then use the current directory as output dir!
# If configuration is situated in normal build directory, just use the build
# directory name as configuration name, otherwise use the complete path.
if test "x${CONF_NAME}" = x; then
CONF_NAME=`$ECHO $CURDIR | $SED -e "s!^${SRC_ROOT}/build/!!"`
fi
OUTPUT_ROOT="$CURDIR"
fi
SPACESAFE(OUTPUT_ROOT,[the path to the output root])
AC_SUBST(SPEC, $OUTPUT_ROOT/spec.gmk)
AC_SUBST(CONF_NAME, $CONF_NAME)
AC_SUBST(OUTPUT_ROOT, $OUTPUT_ROOT)
# Most of the probed defines are put into config.h
AC_CONFIG_HEADERS([$OUTPUT_ROOT/config.h:$AUTOCONF_DIR/config.h.in])
# The spec.gmk file contains all variables for the make system.
AC_CONFIG_FILES([$OUTPUT_ROOT/spec.gmk:$AUTOCONF_DIR/spec.gmk.in])
# The spec.sh file contains variables for compare{images|-objects}.sh scrips.
AC_CONFIG_FILES([$OUTPUT_ROOT/spec.sh:$AUTOCONF_DIR/spec.sh.in])
# The generated Makefile knows where the spec.gmk is and where the source is.
# You can run make from the OUTPUT_ROOT, or from the top-level Makefile
# which will look for generated configurations
AC_CONFIG_FILES([$OUTPUT_ROOT/Makefile:$AUTOCONF_DIR/Makefile.in])
# Save the arguments given to us
echo "$CONFIGURE_COMMAND_LINE" > $OUTPUT_ROOT/configure-arguments
])
AC_DEFUN_ONCE([BASIC_SETUP_LOGGING],
[
# Setup default logging of stdout and stderr to build.log in the output root.
BUILD_LOG='$(OUTPUT_ROOT)/build.log'
BUILD_LOG_PREVIOUS='$(OUTPUT_ROOT)/build.log.old'
BUILD_LOG_WRAPPER='$(SH) $(SRC_ROOT)/common/bin/logger.sh $(BUILD_LOG)'
AC_SUBST(BUILD_LOG)
AC_SUBST(BUILD_LOG_PREVIOUS)
AC_SUBST(BUILD_LOG_WRAPPER)
])
#%%% Simple tools %%%
AC_DEFUN([BASIC_CHECK_FIND_DELETE],
[
# Test if find supports -delete
AC_MSG_CHECKING([if find supports -delete])
FIND_DELETE="-delete"
DELETEDIR=`mktemp -d tmp.XXXXXXXXXX` || (echo Could not create temporary directory!; exit $?)
echo Hejsan > $DELETEDIR/TestIfFindSupportsDelete
TEST_DELETE=`$FIND "$DELETEDIR" -name TestIfFindSupportsDelete $FIND_DELETE 2>&1`
if test -f $DELETEDIR/TestIfFindSupportsDelete; then
# No, it does not.
rm $DELETEDIR/TestIfFindSupportsDelete
FIND_DELETE="-exec rm \{\} \+"
AC_MSG_RESULT([no])
else
AC_MSG_RESULT([yes])
fi
rmdir $DELETEDIR
])
AC_DEFUN([CHECK_NONEMPTY],
[
# Test that variable $1 is not empty.
if test "" = "[$]$1"; then AC_MSG_ERROR(Could not find translit($1,A-Z,a-z) !); fi
])
AC_DEFUN_ONCE([BASIC_SETUP_TOOLS],
[
# Start with tools that do not need have cross compilation support
# and can be expected to be found in the default PATH. These tools are
# used by configure. Nor are these tools expected to be found in the
# devkit from the builddeps server either, since they are
# needed to download the devkit.
AC_PROG_AWK
CHECK_NONEMPTY(AWK)
AC_PATH_PROG(CAT, cat)
CHECK_NONEMPTY(CAT)
AC_PATH_PROG(CHMOD, chmod)
CHECK_NONEMPTY(CHMOD)
AC_PATH_PROG(CP, cp)
CHECK_NONEMPTY(CP)
AC_PATH_PROG(CPIO, cpio)
CHECK_NONEMPTY(CPIO)
AC_PATH_PROG(CUT, cut)
CHECK_NONEMPTY(CUT)
AC_PATH_PROG(DATE, date)
CHECK_NONEMPTY(DATE)
AC_PATH_PROG(DF, df)
CHECK_NONEMPTY(DF)
AC_PATH_PROG(DIFF, diff)
CHECK_NONEMPTY(DIFF)
# Warning echo is really, really unportable!!!!! Different
# behaviour in bash and dash and in a lot of other shells!
# Use printf for serious work!
AC_PATH_PROG(ECHO, echo)
CHECK_NONEMPTY(ECHO)
AC_PROG_EGREP
CHECK_NONEMPTY(EGREP)
AC_PROG_FGREP
CHECK_NONEMPTY(FGREP)
AC_PATH_PROG(FIND, find)
CHECK_NONEMPTY(FIND)
BASIC_CHECK_FIND_DELETE
AC_SUBST(FIND_DELETE)
AC_PROG_GREP
CHECK_NONEMPTY(GREP)
AC_PATH_PROG(HEAD, head)
CHECK_NONEMPTY(HEAD)
AC_PATH_PROG(LN, ln)
CHECK_NONEMPTY(LN)
AC_PATH_PROG(LS, ls)
CHECK_NONEMPTY(LS)
AC_PATH_PROGS(MAKE, [gmake make])
CHECK_NONEMPTY(MAKE)
MAKE_VERSION=`$MAKE --version | head -n 1 | grep '3.8[[12346789]]'`
if test "x$MAKE_VERSION" = x; then
AC_MSG_ERROR([You must use GNU make 3.81 or newer! Please put it in the path, or add e.g. MAKE=/opt/gmake3.81/make as argument to configure.])
fi
AC_PATH_PROG(MKDIR, mkdir)
CHECK_NONEMPTY(MKDIR)
AC_PATH_PROG(MV, mv)
CHECK_NONEMPTY(MV)
AC_PATH_PROGS(NAWK, [nawk gawk awk])
CHECK_NONEMPTY(NAWK)
AC_PATH_PROG(PRINTF, printf)
CHECK_NONEMPTY(PRINTF)
AC_PATH_PROG(THEPWDCMD, pwd)
AC_PATH_PROG(RM, rm)
CHECK_NONEMPTY(RM)
RM="$RM -f"
AC_PROG_SED
CHECK_NONEMPTY(SED)
AC_PATH_PROG(SH, sh)
CHECK_NONEMPTY(SH)
AC_PATH_PROG(SORT, sort)
CHECK_NONEMPTY(SORT)
AC_PATH_PROG(TAR, tar)
CHECK_NONEMPTY(TAR)
AC_PATH_PROG(TAIL, tail)
CHECK_NONEMPTY(TAIL)
AC_PATH_PROG(TEE, tee)
CHECK_NONEMPTY(TEE)
AC_PATH_PROG(TR, tr)
CHECK_NONEMPTY(TR)
AC_PATH_PROG(TOUCH, touch)
CHECK_NONEMPTY(TOUCH)
AC_PATH_PROG(WC, wc)
CHECK_NONEMPTY(WC)
AC_PATH_PROG(XARGS, xargs)
CHECK_NONEMPTY(XARGS)
AC_PATH_PROG(ZIP, zip)
CHECK_NONEMPTY(ZIP)
AC_PATH_PROG(UNZIP, unzip)
CHECK_NONEMPTY(UNZIP)
AC_PATH_PROG(LDD, ldd)
if test "x$LDD" = "x"; then
# List shared lib dependencies is used for
# debug output and checking for forbidden dependencies.
# We can build without it.
LDD="true"
fi
AC_PATH_PROG(OTOOL, otool)
if test "x$OTOOL" = "x"; then
OTOOL="true"
fi
AC_PATH_PROG(READELF, readelf)
AC_PATH_PROG(EXPR, expr)
CHECK_NONEMPTY(EXPR)
AC_PATH_PROG(FILE, file)
CHECK_NONEMPTY(FILE)
AC_PATH_PROG(HG, hg)
])
AC_DEFUN_ONCE([BASIC_COMPILE_UNCYGDRIVE],
[
# When using cygwin, we need a wrapper binary that renames
# /cygdrive/c/ arguments into c:/ arguments and peeks into
# @files and rewrites these too! This wrapper binary is
# called uncygdrive.exe.
UNCYGDRIVE=
if test "x$OPENJDK_BUILD_OS" = xwindows; then
AC_MSG_CHECKING([if uncygdrive can be created])
UNCYGDRIVE_SRC=`$CYGPATH -m $SRC_ROOT/common/src/uncygdrive.c`
rm -f $OUTPUT_ROOT/uncygdrive*
UNCYGDRIVE=`$CYGPATH -m $OUTPUT_ROOT/uncygdrive.exe`
cd $OUTPUT_ROOT
$CC $UNCYGDRIVE_SRC /Fe$UNCYGDRIVE > $OUTPUT_ROOT/uncygdrive1.log 2>&1
cd $CURDIR
if test ! -x $OUTPUT_ROOT/uncygdrive.exe; then
AC_MSG_RESULT([no])
cat $OUTPUT_ROOT/uncygdrive1.log
AC_MSG_ERROR([Could not create $OUTPUT_ROOT/uncygdrive.exe])
fi
AC_MSG_RESULT([$UNCYGDRIVE])
AC_MSG_CHECKING([if uncygdrive.exe works])
cd $OUTPUT_ROOT
$UNCYGDRIVE $CC $SRC_ROOT/common/src/uncygdrive.c /Fe$OUTPUT_ROOT/uncygdrive2.exe > $OUTPUT_ROOT/uncygdrive2.log 2>&1
cd $CURDIR
if test ! -x $OUTPUT_ROOT/uncygdrive2.exe; then
AC_MSG_RESULT([no])
cat $OUTPUT_ROOT/uncygdrive2.log
AC_MSG_ERROR([Uncygdrive did not work!])
fi
AC_MSG_RESULT([yes])
rm -f $OUTPUT_ROOT/uncygdrive?.??? $OUTPUT_ROOT/uncygdrive.obj
fi
AC_SUBST(UNCYGDRIVE)
])
# Check if build directory is on local disk.
# Argument 1: directory to test
# Argument 2: what to do if it is on local disk
# Argument 3: what to do otherwise (remote disk or failure)
AC_DEFUN([BASIC_CHECK_DIR_ON_LOCAL_DISK],
[
# df -l lists only local disks; if the given directory is not found then
# a non-zero exit code is given
if $DF -l $1 > /dev/null 2>&1; then
$2
else
$3
fi
])
AC_DEFUN_ONCE([BASIC_TEST_USABILITY_ISSUES],
[
AC_MSG_CHECKING([if build directory is on local disk])
BASIC_CHECK_DIR_ON_LOCAL_DISK($OUTPUT_ROOT,
[OUTPUT_DIR_IS_LOCAL="yes"],
[OUTPUT_DIR_IS_LOCAL="no"])
AC_MSG_RESULT($OUTPUT_DIR_IS_LOCAL)
# Check if the user has any old-style ALT_ variables set.
FOUND_ALT_VARIABLES=`env | grep ^ALT_`
# Before generating output files, test if they exist. If they do, this is a reconfigure.
# Since we can't properly handle the dependencies for this, warn the user about the situation
if test -e $OUTPUT_ROOT/spec.gmk; then
IS_RECONFIGURE=yes
else
IS_RECONFIGURE=no
fi
if test -e $SRC_ROOT/build/.hide-configure-performance-hints; then
HIDE_PERFORMANCE_HINTS=yes
else
HIDE_PERFORMANCE_HINTS=no
# Hide it the next time around...
$TOUCH $SRC_ROOT/build/.hide-configure-performance-hints > /dev/null 2>&1
fi
])

295
common/autoconf/boot-jdk.m4 Normal file
View File

@ -0,0 +1,295 @@
#
# Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved.
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
#
# This code is free software; you can redistribute it and/or modify it
# under the terms of the GNU General Public License version 2 only, as
# published by the Free Software Foundation. Oracle designates this
# particular file as subject to the "Classpath" exception as provided
# by Oracle in the LICENSE file that accompanied this code.
#
# This code is distributed in the hope that it will be useful, but WITHOUT
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
# version 2 for more details (a copy is included in the LICENSE file that
# accompanied this code).
#
# You should have received a copy of the GNU General Public License version
# 2 along with this work; if not, write to the Free Software Foundation,
# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
#
# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
# or visit www.oracle.com if you need additional information or have any
# questions.
#
# Fixes paths on windows to be mixed mode short.
AC_DEFUN([BOOTJDK_WIN_FIX_PATH],
[
if test "x$OPENJDK_BUILD_OS" = "xwindows"; then
AC_PATH_PROG(CYGPATH, cygpath)
tmp="[$]$1"
# Convert to C:/ mixed style path without spaces.
tmp=`$CYGPATH -s -m "$tmp"`
$1="$tmp"
fi
])
AC_DEFUN([BOOTJDK_MISSING_ERROR],
[
AC_MSG_NOTICE([This might be fixed by explicitely setting --with-boot-jdk])
AC_MSG_ERROR([Cannot continue])
])
###############################################################################
#
# We need a Boot JDK to bootstrap the build.
#
AC_DEFUN_ONCE([BOOTJDK_SETUP_BOOT_JDK],
[
BOOT_JDK_FOUND=no
AC_ARG_WITH(boot-jdk, [AS_HELP_STRING([--with-boot-jdk],
[path to Boot JDK (used to bootstrap build) @<:@probed@:>@])])
if test "x$with_boot_jdk" != x; then
BOOT_JDK=$with_boot_jdk
BOOT_JDK_FOUND=yes
fi
if test "x$BOOT_JDK_FOUND" = xno; then
BDEPS_CHECK_MODULE(BOOT_JDK, boot-jdk, xxx, [BOOT_JDK_FOUND=yes], [BOOT_JDK_FOUND=no])
fi
if test "x$BOOT_JDK_FOUND" = xno; then
if test "x$JAVA_HOME" != x; then
if test ! -d "$JAVA_HOME"; then
AC_MSG_NOTICE([Your JAVA_HOME points to a non-existing directory!])
BOOTJDK_MISSING_ERROR
fi
# Aha, the user has set a JAVA_HOME
# let us use that as the Boot JDK.
BOOT_JDK="$JAVA_HOME"
BOOT_JDK_FOUND=yes
# To be on the safe side, lets check that it is a JDK.
if test -x "$BOOT_JDK/bin/javac" && test -x "$BOOT_JDK/bin/java"; then
JAVAC="$BOOT_JDK/bin/javac"
JAVA="$BOOT_JDK/bin/java"
BOOT_JDK_FOUND=yes
else
AC_MSG_NOTICE([Your JAVA_HOME points to a JRE! The build needs a JDK! Please point JAVA_HOME to a JDK. JAVA_HOME=[$]JAVA_HOME])
BOOTJDK_MISSING_ERROR
fi
fi
fi
if test "x$BOOT_JDK_FOUND" = xno; then
AC_PATH_PROG(JAVAC_CHECK, javac)
AC_PATH_PROG(JAVA_CHECK, java)
BINARY="$JAVAC_CHECK"
if test "x$JAVAC_CHECK" = x; then
BINARY="$JAVA_CHECK"
fi
if test "x$BINARY" != x; then
# So there is a java(c) binary, it might be part of a JDK.
# Lets find the JDK/JRE directory by following symbolic links.
# Linux/GNU systems often have links from /usr/bin/java to
# /etc/alternatives/java to the real JDK binary.
WHICHCMD_SPACESAFE(BINARY,[path to javac])
REMOVE_SYMBOLIC_LINKS(BINARY)
BOOT_JDK=`dirname $BINARY`
BOOT_JDK=`cd $BOOT_JDK/..; pwd`
if test -x $BOOT_JDK/bin/javac && test -x $BOOT_JDK/bin/java; then
JAVAC=$BOOT_JDK/bin/javac
JAVA=$BOOT_JDK/bin/java
BOOT_JDK_FOUND=yes
fi
fi
fi
if test "x$BOOT_JDK_FOUND" = xno; then
# Try the MacOSX way.
if test -x /usr/libexec/java_home; then
BOOT_JDK=`/usr/libexec/java_home`
if test -x $BOOT_JDK/bin/javac && test -x $BOOT_JDK/bin/java; then
JAVAC=$BOOT_JDK/bin/javac
JAVA=$BOOT_JDK/bin/java
BOOT_JDK_FOUND=yes
fi
fi
fi
if test "x$BOOT_JDK_FOUND" = xno; then
AC_PATH_PROG(JAVA_CHECK, java)
if test "x$JAVA_CHECK" != x; then
# There is a java in the path. But apparently we have not found a javac
# in the path, since that would have been tested earlier.
if test "x$OPENJDK_TARGET_OS" = xwindows; then
# Now if this is a windows platform. The default installation of a JDK
# actually puts the JRE in the path and keeps the JDK out of the path!
# Go look in the default installation location.
BOOT_JDK=/cygdrive/c/Program\ Files/Java/`ls /cygdrive/c/Program\ Files/Java | grep jdk | sort -r | head --lines 1`
if test -d "$BOOT_JDK"; then
BOOT_JDK_FOUND=yes
fi
fi
if test "x$BOOT_JDK_FOUND" = xno; then
HELP_MSG_MISSING_DEPENDENCY([openjdk])
AC_MSG_NOTICE([Found a JRE, not not a JDK! Please remove the JRE from your path and put a JDK there instead. $HELP_MSG])
BOOTJDK_MISSING_ERROR
fi
else
HELP_MSG_MISSING_DEPENDENCY([openjdk])
AC_MSG_NOTICE([Could not find a JDK. $HELP_MSG])
BOOTJDK_MISSING_ERROR
fi
fi
BOOTJDK_WIN_FIX_PATH(BOOT_JDK)
# Now see if we can find the rt.jar, or its nearest equivalent.
BOOT_RTJAR="$BOOT_JDK/jre/lib/rt.jar"
SPACESAFE(BOOT_RTJAR,[the path to the Boot JDK rt.jar (or nearest equivalent)])
BOOT_TOOLSJAR="$BOOT_JDK/lib/tools.jar"
SPACESAFE(BOOT_TOOLSJAR,[the path to the Boot JDK tools.jar (or nearest equivalent)])
if test ! -f $BOOT_RTJAR; then
# On MacOSX it is called classes.jar
BOOT_RTJAR=$BOOT_JDK/../Classes/classes.jar
if test ! -f $BOOT_RTJAR; then
AC_MSG_NOTICE([Cannot find the rt.jar or its equivalent!])
AC_MSG_NOTICE([This typically means that configure failed to automatically find a suitable Boot JDK])
BOOTJDK_MISSING_ERROR
fi
# Remove the ..
BOOT_RTJAR="`cd ${BOOT_RTJAR%/*} && pwd`/${BOOT_RTJAR##*/}"
# The tools.jar is part of classes.jar
BOOT_TOOLSJAR="$BOOT_RTJAR"
fi
AC_SUBST(BOOT_JDK)
AC_SUBST(BOOT_RTJAR)
AC_SUBST(BOOT_TOOLSJAR)
AC_MSG_CHECKING([for Boot JDK])
AC_MSG_RESULT([$BOOT_JDK])
AC_MSG_CHECKING([for Boot rt.jar])
AC_MSG_RESULT([$BOOT_RTJAR])
AC_MSG_CHECKING([for Boot tools.jar])
AC_MSG_RESULT([$BOOT_TOOLSJAR])
# Use the java tool from the Boot JDK.
AC_MSG_CHECKING([for java in Boot JDK])
JAVA=$BOOT_JDK/bin/java
if test ! -x $JAVA; then
AC_MSG_NOTICE([Could not find a working java])
BOOTJDK_MISSING_ERROR
fi
BOOT_JDK_VERSION=`$JAVA -version 2>&1 | head -n 1`
AC_MSG_RESULT([yes $BOOT_JDK_VERSION])
AC_SUBST(JAVA)
# Extra M4 quote needed to protect [] in grep expression.
[FOUND_VERSION_78=`echo $BOOT_JDK_VERSION | grep '\"1\.[78]\.'`]
if test "x$FOUND_VERSION_78" = x; then
HELP_MSG_MISSING_DEPENDENCY([openjdk])
AC_MSG_NOTICE([Your boot-jdk must be version 7 or 8. $HELP_MSG])
BOOTJDK_MISSING_ERROR
fi
# When compiling code to be executed by the Boot JDK, force jdk7 compatibility.
BOOT_JDK_SOURCETARGET="-source 7 -target 7"
AC_SUBST(BOOT_JDK_SOURCETARGET)
# Use the javac tool from the Boot JDK.
AC_MSG_CHECKING([for javac in Boot JDK])
JAVAC=$BOOT_JDK/bin/javac
if test ! -x $JAVAC; then
AC_MSG_ERROR([Could not find a working javac])
fi
AC_MSG_RESULT(yes)
AC_SUBST(JAVAC)
AC_SUBST(JAVAC_FLAGS)
# Use the javah tool from the Boot JDK.
AC_MSG_CHECKING([for javah in Boot JDK])
JAVAH=$BOOT_JDK/bin/javah
if test ! -x $JAVAH; then
AC_MSG_NOTICE([Could not find a working javah])
BOOTJDK_MISSING_ERROR
fi
AC_MSG_RESULT(yes)
AC_SUBST(JAVAH)
# Use the jar tool from the Boot JDK.
AC_MSG_CHECKING([for jar in Boot JDK])
JAR=$BOOT_JDK/bin/jar
if test ! -x $JAR; then
AC_MSG_NOTICE([Could not find a working jar])
BOOTJDK_MISSING_ERROR
fi
AC_SUBST(JAR)
AC_MSG_RESULT(yes)
# Use the rmic tool from the Boot JDK.
AC_MSG_CHECKING([for rmic in Boot JDK])
RMIC=$BOOT_JDK/bin/rmic
if test ! -x $RMIC; then
AC_MSG_NOTICE([Could not find a working rmic])
BOOTJDK_MISSING_ERROR
fi
AC_SUBST(RMIC)
AC_MSG_RESULT(yes)
# Use the native2ascii tool from the Boot JDK.
AC_MSG_CHECKING([for native2ascii in Boot JDK])
NATIVE2ASCII=$BOOT_JDK/bin/native2ascii
if test ! -x $NATIVE2ASCII; then
AC_MSG_NOTICE([Could not find a working native2ascii])
BOOTJDK_MISSING_ERROR
fi
AC_MSG_RESULT(yes)
AC_SUBST(NATIVE2ASCII)
])
AC_DEFUN_ONCE([BOOTJDK_SETUP_BOOT_JDK_ARGUMENTS],
[
##############################################################################
#
# Specify options for anything that is run with the Boot JDK.
#
AC_ARG_WITH(boot-jdk-jvmargs, [AS_HELP_STRING([--with-boot-jdk-jvmargs],
[specify JVM arguments to be passed to all invocations of the Boot JDK, overriding the default values,
e.g --with-boot-jdk-jvmargs="-Xmx8G -enableassertions"])])
if test "x$with_boot_jdk_jvmargs" = x; then
# Not all JVM:s accept the same arguments on the command line.
# OpenJDK specific increase in thread stack for JDK build,
# well more specifically, when running javac.
if test "x$BUILD_NUM_BITS" = x32; then
STACK_SIZE=768
else
# Running Javac on a JVM on a 64-bit machine, the stack takes more space
# since 64-bit pointers are pushed on the stach. Apparently, we need
# to increase the stack space when javacing the JDK....
STACK_SIZE=1536
fi
# Minimum amount of heap memory.
ADD_JVM_ARG_IF_OK([-Xms64M],boot_jdk_jvmargs,[$JAVA])
if test "x$OPENJDK_TARGET_OS" = "xmacosx"; then
# Why does macosx need more heap? Its the huge JDK batch.
ADD_JVM_ARG_IF_OK([-Xmx1600M],boot_jdk_jvmargs,[$JAVA])
else
ADD_JVM_ARG_IF_OK([-Xmx1100M],boot_jdk_jvmargs,[$JAVA])
fi
# When is adding -client something that speeds up the JVM?
# ADD_JVM_ARG_IF_OK([-client],boot_jdk_jvmargs,[$JAVA])
ADD_JVM_ARG_IF_OK([-XX:PermSize=32m],boot_jdk_jvmargs,[$JAVA])
ADD_JVM_ARG_IF_OK([-XX:MaxPermSize=160m],boot_jdk_jvmargs,[$JAVA])
ADD_JVM_ARG_IF_OK([-XX:ThreadStackSize=$STACK_SIZE],boot_jdk_jvmargs,[$JAVA])
# Disable special log output when a debug build is used as Boot JDK...
ADD_JVM_ARG_IF_OK([-XX:-PrintVMOptions -XX:-UnlockDiagnosticVMOptions -XX:-LogVMOutput],boot_jdk_jvmargs,[$JAVA])
fi
AC_SUBST(BOOT_JDK_JVMARGS, $boot_jdk_jvmargs)
])

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,378 @@
#
# Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved.
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
#
# This code is free software; you can redistribute it and/or modify it
# under the terms of the GNU General Public License version 2 only, as
# published by the Free Software Foundation. Oracle designates this
# particular file as subject to the "Classpath" exception as provided
# by Oracle in the LICENSE file that accompanied this code.
#
# This code is distributed in the hope that it will be useful, but WITHOUT
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
# version 2 for more details (a copy is included in the LICENSE file that
# accompanied this code).
#
# You should have received a copy of the GNU General Public License version
# 2 along with this work; if not, write to the Free Software Foundation,
# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
#
# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
# or visit www.oracle.com if you need additional information or have any
# questions.
#
AC_DEFUN([BPERF_CHECK_CORES],
[
AC_MSG_CHECKING([for number of cores])
NUM_CORES=1
FOUND_CORES=no
if test -f /proc/cpuinfo; then
# Looks like a Linux system
NUM_CORES=`cat /proc/cpuinfo | grep -c processor`
FOUND_CORES=yes
fi
if test -x /usr/sbin/psrinfo; then
# Looks like a Solaris system
NUM_CORES=`LC_MESSAGES=C /usr/sbin/psrinfo -v | grep -c on-line`
FOUND_CORES=yes
fi
if test -x /usr/sbin/system_profiler; then
# Looks like a MacOSX system
NUM_CORES=`/usr/sbin/system_profiler -detailLevel full SPHardwareDataType | grep 'Cores' | awk '{print [$]5}'`
FOUND_CORES=yes
fi
if test "x$build_os" = xwindows; then
NUM_CORES=4
fi
# For c/c++ code we run twice as many concurrent build
# jobs than we have cores, otherwise we will stall on io.
CONCURRENT_BUILD_JOBS=`expr $NUM_CORES \* 2`
if test "x$FOUND_CORES" = xyes; then
AC_MSG_RESULT([$NUM_CORES])
else
AC_MSG_RESULT([could not detect number of cores, defaulting to 1!])
fi
])
AC_DEFUN([BPERF_CHECK_MEMORY_SIZE],
[
AC_MSG_CHECKING([for memory size])
# Default to 1024MB
MEMORY_SIZE=1024
FOUND_MEM=no
if test -f /proc/cpuinfo; then
# Looks like a Linux system
MEMORY_SIZE=`cat /proc/meminfo | grep MemTotal | awk '{print [$]2}'`
MEMORY_SIZE=`expr $MEMORY_SIZE / 1024`
FOUND_MEM=yes
fi
if test -x /usr/sbin/prtconf; then
# Looks like a Solaris system
MEMORY_SIZE=`/usr/sbin/prtconf | grep "Memory size" | awk '{ print [$]3 }'`
FOUND_MEM=yes
fi
if test -x /usr/sbin/system_profiler; then
# Looks like a MacOSX system
MEMORY_SIZE=`/usr/sbin/system_profiler -detailLevel full SPHardwareDataType | grep 'Memory' | awk '{print [$]2}'`
MEMORY_SIZE=`expr $MEMORY_SIZE \* 1024`
FOUND_MEM=yes
fi
if test "x$build_os" = xwindows; then
MEMORY_SIZE=`systeminfo | grep 'Total Physical Memory:' | awk '{ print [$]4 }' | sed 's/,//'`
FOUND_MEM=yes
fi
if test "x$FOUND_MEM" = xyes; then
AC_MSG_RESULT([$MEMORY_SIZE MB])
else
AC_MSG_RESULT([could not detect memory size defaulting to 1024MB!])
fi
])
AC_DEFUN_ONCE([BPERF_SETUP_BUILD_CORES],
[
# How many cores do we have on this build system?
AC_ARG_WITH(num-cores, [AS_HELP_STRING([--with-num-cores],
[number of cores in the build system, e.g. --with-num-cores=8 @<:@probed@:>@])])
if test "x$with_num_cores" = x; then
# The number of cores were not specified, try to probe them.
BPERF_CHECK_CORES
else
NUM_CORES=$with_num_cores
CONCURRENT_BUILD_JOBS=`expr $NUM_CORES \* 2`
fi
AC_SUBST(NUM_CORES)
AC_SUBST(CONCURRENT_BUILD_JOBS)
])
AC_DEFUN_ONCE([BPERF_SETUP_BUILD_MEMORY],
[
# How much memory do we have on this build system?
AC_ARG_WITH(memory-size, [AS_HELP_STRING([--with-memory-size],
[memory (in MB) available in the build system, e.g. --with-memory-size=1024 @<:@probed@:>@])])
if test "x$with_memory_size" = x; then
# The memory size was not specified, try to probe it.
BPERF_CHECK_MEMORY_SIZE
else
MEMORY_SIZE=$with_memory_size
fi
AC_SUBST(MEMORY_SIZE)
])
AC_DEFUN([BPERF_SETUP_CCACHE],
[
AC_ARG_ENABLE([ccache],
[AS_HELP_STRING([--disable-ccache],
[use ccache to speed up recompilations @<:@enabled@:>@])],
[ENABLE_CCACHE=${enable_ccache}], [ENABLE_CCACHE=yes])
if test "x$ENABLE_CCACHE" = xyes; then
AC_PATH_PROG(CCACHE, ccache)
else
AC_MSG_CHECKING([for ccache])
AC_MSG_RESULT([explicitly disabled])
CCACHE=
fi
AC_SUBST(CCACHE)
AC_ARG_WITH([ccache-dir],
[AS_HELP_STRING([--with-ccache-dir],
[where to store ccache files @<:@~/.ccache@:>@])])
if test "x$with_ccache_dir" != x; then
# When using a non home ccache directory, assume the use is to share ccache files
# with other users. Thus change the umask.
SET_CCACHE_DIR="CCACHE_DIR=$with_ccache_dir CCACHE_UMASK=002"
fi
CCACHE_FOUND=""
if test "x$CCACHE" != x; then
BPERF_SETUP_CCACHE_USAGE
fi
])
AC_DEFUN([BPERF_SETUP_CCACHE_USAGE],
[
if test "x$CCACHE" != x; then
CCACHE_FOUND="true"
# Only use ccache if it is 3.1.4 or later, which supports
# precompiled headers.
AC_MSG_CHECKING([if ccache supports precompiled headers])
HAS_GOOD_CCACHE=`($CCACHE --version | head -n 1 | grep -E 3.1.@<:@456789@:>@) 2> /dev/null`
if test "x$HAS_GOOD_CCACHE" = x; then
AC_MSG_RESULT([no, disabling ccache])
CCACHE=
else
AC_MSG_RESULT([yes])
AC_MSG_CHECKING([if C-compiler supports ccache precompiled headers])
PUSHED_FLAGS="$CXXFLAGS"
CXXFLAGS="-fpch-preprocess $CXXFLAGS"
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([], [])], [CC_KNOWS_CCACHE_TRICK=yes], [CC_KNOWS_CCACHE_TRICK=no])
CXXFLAGS="$PUSHED_FLAGS"
if test "x$CC_KNOWS_CCACHE_TRICK" = xyes; then
AC_MSG_RESULT([yes])
else
AC_MSG_RESULT([no, disabling ccaching of precompiled headers])
CCACHE=
fi
fi
fi
if test "x$CCACHE" != x; then
CCACHE_SLOPPINESS=time_macros
CCACHE="CCACHE_COMPRESS=1 $SET_CCACHE_DIR CCACHE_SLOPPINESS=$CCACHE_SLOPPINESS $CCACHE"
CCACHE_FLAGS=-fpch-preprocess
if test "x$SET_CCACHE_DIR" != x; then
mkdir -p $CCACHE_DIR > /dev/null 2>&1
chmod a+rwxs $CCACHE_DIR > /dev/null 2>&1
fi
fi
])
AC_DEFUN_ONCE([BPERF_SETUP_PRECOMPILED_HEADERS],
[
###############################################################################
#
# Can the C/C++ compiler use precompiled headers?
#
AC_ARG_ENABLE([precompiled-headers], [AS_HELP_STRING([--disable-precompiled-headers],
[use precompiled headers when compiling C++ @<:@enabled@:>@])],
[ENABLE_PRECOMPH=${enable_precompiled-headers}], [ENABLE_PRECOMPH=yes])
USE_PRECOMPILED_HEADER=1
if test "x$ENABLE_PRECOMPH" = xno; then
USE_PRECOMPILED_HEADER=0
fi
if test "x$ENABLE_PRECOMPH" = xyes; then
# Check that the compiler actually supports precomp headers.
if test "x$GCC" = xyes; then
AC_MSG_CHECKING([that precompiled headers work])
echo "int alfa();" > conftest.h
$CXX -x c++-header conftest.h -o conftest.hpp.gch
if test ! -f conftest.hpp.gch; then
echo Precompiled header is not working!
USE_PRECOMPILED_HEADER=0
AC_MSG_RESULT([no])
else
AC_MSG_RESULT([yes])
fi
rm -f conftest.h
fi
fi
AC_SUBST(USE_PRECOMPILED_HEADER)
])
AC_DEFUN_ONCE([BPERF_SETUP_SMART_JAVAC],
[
AC_ARG_WITH(server-java, [AS_HELP_STRING([--with-server-java],
[use this java binary for running the javac background server and other long running java tasks in the build process,
e.g. ---with-server-java="/opt/jrockit/bin/java -server"])])
if test "x$with_server_java" != x; then
SERVER_JAVA="$with_server_java"
FOUND_VERSION=`$SERVER_JAVA -version 2>&1 | grep " version \""`
if test "x$FOUND_VERSION" = x; then
AC_MSG_ERROR([Could not execute server java: $SERVER_JAVA])
fi
else
SERVER_JAVA=""
# Hotspot specific options.
ADD_JVM_ARG_IF_OK([-XX:+UseParallelOldGC],SERVER_JAVA,[$JAVA])
ADD_JVM_ARG_IF_OK([-verbosegc],SERVER_JAVA,[$JAVA])
# JRockit specific options.
ADD_JVM_ARG_IF_OK([-Xverbose:gc],SERVER_JAVA,[$JAVA])
SERVER_JAVA="$JAVA $SERVER_JAVA"
fi
AC_SUBST(SERVER_JAVA)
AC_MSG_CHECKING([whether to use shared server for javac])
AC_ARG_ENABLE([javac-server], [AS_HELP_STRING([--enable-javac-server],
[enable the shared javac server during the build process @<:@disabled@:>@])],
[ENABLE_JAVAC_SERVER="${enableval}"], [ENABLE_JAVAC_SERVER='no'])
AC_MSG_RESULT([$ENABLE_JAVAC_SERVER])
if test "x$ENABLE_JAVAC_SERVER" = xyes; then
JAVAC_USE_REMOTE=true
JAVAC_SERVERS="$OUTPUT_ROOT/javacservers"
else
JAVAC_USE_REMOTE=false
JAVAC_SERVERS=
fi
AC_SUBST(JAVAC_USE_REMOTE)
AC_SUBST(JAVAC_SERVERS)
AC_ARG_WITH(javac-server-cores, [AS_HELP_STRING([--with-javac-server-cores],
[use at most this number of concurrent threads on the javac server @<:@probed@:>@])])
if test "x$with_javac_server_cores" != x; then
JAVAC_SERVER_CORES="$with_javac_server_cores"
else
if test "$NUM_CORES" -gt 16; then
# We set this arbitrary limit because we want to limit the heap
# size of the javac server.
# In the future we will make the javac compilers in the server
# share more and more state, thus enabling us to use more and
# more concurrent threads in the server.
JAVAC_SERVER_CORES="16"
else
JAVAC_SERVER_CORES="$NUM_CORES"
fi
if test "$MEMORY_SIZE" -gt "17000"; then
MAX_HEAP_MEM=10000
ADD_JVM_ARG_IF_OK([-d64],SERVER_JAVA,[$SERVER_JAVA])
ADD_JVM_ARG_IF_OK([-Xms10G -Xmx10G],SERVER_JAVA,[$SERVER_JAVA])
ADD_JVM_ARG_IF_OK([-Xmn2G],SERVER_JAVA,[$SERVER_JAVA])
elif test "$MEMORY_SIZE" -gt "10000"; then
MAX_HEAP_MEM=6000
ADD_JVM_ARG_IF_OK([-d64],SERVER_JAVA,[$SERVER_JAVA])
ADD_JVM_ARG_IF_OK([-Xms6G -Xmx6G],SERVER_JAVA,[$SERVER_JAVA])
ADD_JVM_ARG_IF_OK([-Xmn1G],SERVER_JAVA,[$SERVER_JAVA])
elif test "$MEMORY_SIZE" -gt "5000"; then
MAX_HEAP_MEM=3000
ADD_JVM_ARG_IF_OK([-d64],SERVER_JAVA,[$SERVER_JAVA])
ADD_JVM_ARG_IF_OK([-Xms1G -Xmx3G],SERVER_JAVA,[$SERVER_JAVA])
ADD_JVM_ARG_IF_OK([-Xmn256M],SERVER_JAVA,[$SERVER_JAVA])
elif test "$MEMORY_SIZE" -gt "3800"; then
MAX_HEAP_MEM=2500
ADD_JVM_ARG_IF_OK([-Xms1G -Xmx2500M],SERVER_JAVA,[$SERVER_JAVA])
ADD_JVM_ARG_IF_OK([-Xmn256M],SERVER_JAVA,[$SERVER_JAVA])
elif test "$MEMORY_SIZE" -gt "1900"; then
MAX_HEAP_MEM=1200
ADD_JVM_ARG_IF_OK([-Xms700M -Xmx1200M],SERVER_JAVA,[$SERVER_JAVA])
ADD_JVM_ARG_IF_OK([-Xmn256M],SERVER_JAVA,[$SERVER_JAVA])
elif test "$MEMORY_SIZE" -gt "1000"; then
MAX_HEAP_MEM=900
ADD_JVM_ARG_IF_OK([-Xms400M -Xmx900M],SERVER_JAVA,[$SERVER_JAVA])
ADD_JVM_ARG_IF_OK([-Xmn128M],SERVER_JAVA,[$SERVER_JAVA])
else
MAX_HEAP_MEM=512
ADD_JVM_ARG_IF_OK([-Xms256M -Xmx512M],SERVER_JAVA,[$SERVER_JAVA])
ADD_JVM_ARG_IF_OK([-Xmn128M],SERVER_JAVA,[$SERVER_JAVA])
fi
MAX_COMPILERS_IN_HEAP=`expr $MAX_HEAP_MEM / 501`
if test "$JAVAC_SERVER_CORES" -gt "$MAX_COMPILERS_IN_HEAP"; then
AC_MSG_CHECKING([if number of server cores must be reduced])
JAVAC_SERVER_CORES="$MAX_COMPILERS_IN_HEAP"
AC_MSG_RESULT([yes, to $JAVAC_SERVER_CORES with max heap size $MAX_HEAP_MEM MB])
fi
fi
AC_SUBST(JAVAC_SERVER_CORES)
AC_MSG_CHECKING([whether to track dependencies between Java packages])
AC_ARG_ENABLE([javac-deps], [AS_HELP_STRING([--enable-javac-deps],
[enable the dependency tracking between Java packages @<:@disabled@:>@])],
[ENABLE_JAVAC_DEPS="${enableval}"], [ENABLE_JAVAC_DEPS='no'])
AC_MSG_RESULT([$ENABLE_JAVAC_DEPS])
if test "x$ENABLE_JAVAC_DEPS" = xyes; then
JAVAC_USE_DEPS=true
else
JAVAC_USE_DEPS=false
fi
AC_SUBST(JAVAC_USE_DEPS)
AC_MSG_CHECKING([whether to use multiple cores for javac compilation])
AC_ARG_ENABLE([javac-multi-core], [AS_HELP_STRING([--enable-javac-multi-core],
[compile Java packages concurrently @<:@disabled@:>@])],
[ENABLE_JAVAC_MULTICORE="${enableval}"], [ENABLE_JAVAC_MULTICORE='no'])
AC_MSG_RESULT([$ENABLE_JAVAC_MULTICORE])
if test "x$ENABLE_JAVAC_MULTICORE" = xyes; then
JAVAC_USE_MODE=MULTI_CORE_CONCURRENT
else
JAVAC_USE_MODE=SINGLE_THREADED_BATCH
if test "x$ENABLE_JAVAC_DEPS" = xyes; then
AC_MSG_WARN([Dependency tracking is not supported with single threaded batch compiles of Java source roots. Please add --disable-javac-deps to your configure options.])
AC_MSG_WARN([Disabling dependency tracking for you now.])
JAVAC_USE_DEPS=false
fi
if test "x$ENABLE_JAVAC_SERVER" = xyes; then
AC_MSG_WARN([The javac server will not be used since single threaded batch compiles are run within their own JVM. Please add --disable-javac-server to your configure options.])
AC_MSG_WARN([Disabling javac server for you now.])
JAVAC_USE_REMOTE=false
fi
fi
AC_SUBST(JAVAC_USE_MODE)
AC_MSG_CHECKING([whether to use sjavac])
AC_ARG_ENABLE([sjavac], [AS_HELP_STRING([--enable-sjavac],
[use sjavac to do fast incremental compiles @<:@disabled@:>@])],
[ENABLE_SJAVAC="${enableval}"], [ENABLE_SJAVAC='no'])
AC_MSG_RESULT([$ENABLE_SJAVAC])
AC_SUBST(ENABLE_SJAVAC)
])

View File

@ -31,11 +31,11 @@
# Translate a configuration triplet/quadruplet into something
# known by this configuration file.
# If no rewrite was found, then rewritten_host=${host}
# If no rewrite was found, then rewritten_target=${OPENJDK_TARGET_SYSTEM}
REWRITE_i686_pc_linux_gnu=i686-unknown-linux-gnu
REWRITE_i386_pc_solaris2_10=i686-sun-solaris2_10
# The needed cups builddeps are host independent header files.
# The needed cups builddeps are platform independent header files.
# I.e. they need not be part of the devkit.
builddep_cups=lib/cups_1_3_9.zip
builddep_cups_CFLAGS=-I${depdir}
@ -44,10 +44,10 @@ builddep_cups_CFLAGS=-I${depdir}
# for the build platform.
builddep_devkit=sdk/sdk-${rewritten_build}-20110921.tar.gz
# The freetype dependency is partyl host dependent.
# The freetype dependency is partly platform dependent.
# It is stored inside the sys-root.
builddep_freetype2=sdk/sdk-${rewritten_build}-20110921.tar.gz
builddep_freetype2_CFLAGS=-I${depdir}/${rewritten_host}/sys-root/usr/include/freetype2
builddep_freetype2_CFLAGS=-I${depdir}/${rewritten_target}/sys-root/usr/include/freetype2
builddep_freetype2_LIBS=-lfreetype
# There are many other build dependencies, but they are implicitly

View File

@ -23,7 +23,7 @@
# questions.
#
AC_DEFUN([BDEPS_SCAN_FOR_BUILDDEPS],
AC_DEFUN_ONCE([BDEPS_SCAN_FOR_BUILDDEPS],
[
define(LIST_OF_BUILD_DEPENDENCIES,)
if test "x$with_builddeps_server" != x || test "x$with_builddeps_conf" != x; then
@ -50,27 +50,27 @@ AC_DEFUN([BDEPS_SCAN_FOR_BUILDDEPS],
AC_MSG_ERROR([Could not find any builddeps.conf at all!])
fi
fi
# Create build and host names that use _ instead of "-" and ".".
# Create build and target names that use _ instead of "-" and ".".
# This is necessary to use them in variable names.
build_var=`echo ${build} | tr '-' '_' | tr '.' '_'`
host_var=`echo ${host} | tr '-' '_' | tr '.' '_'`
# Extract rewrite information for build and host
build_var=`echo ${OPENJDK_BUILD_SYSTEM} | tr '-' '_' | tr '.' '_'`
target_var=`echo ${OPENJDK_TARGET_SYSTEM} | tr '-' '_' | tr '.' '_'`
# Extract rewrite information for build and target
eval rewritten_build=\${REWRITE_${build_var}}
if test "x$rewritten_build" = x; then
rewritten_build=${build}
rewritten_build=${OPENJDK_BUILD_SYSTEM}
echo Build stays the same $rewritten_build
else
echo Rewriting build for builddeps into $rewritten_build
fi
eval rewritten_host=\${REWRITE_${host_var}}
if test "x$rewritten_host" = x; then
rewritten_host=${host}
echo Host stays the same $rewritten_host
eval rewritten_target=\${REWRITE_${target_var}}
if test "x$rewritten_target" = x; then
rewritten_target=${OPENJDK_TARGET_SYSTEM}
echo Target stays the same $rewritten_target
else
echo Rewriting host for builddeps into $rewritten_host
echo Rewriting target for builddeps into $rewritten_target
fi
rewritten_build_var=`echo ${rewritten_build} | tr '-' '_' | tr '.' '_'`
rewritten_host_var=`echo ${rewritten_host} | tr '-' '_' | tr '.' '_'`
rewritten_target_var=`echo ${rewritten_target} | tr '-' '_' | tr '.' '_'`
fi
AC_CHECK_PROGS(BDEPS_UNZIP, [7z unzip])
if test "x$BDEPS_UNZIP" = x7z; then
@ -127,11 +127,11 @@ AC_DEFUN([BDEPS_CHECK_MODULE],
if test "x$with_builddeps_server" != x || test "x$with_builddeps_conf" != x; then
# Source the builddeps file again, to make sure it uses the latest variables!
. $builddepsfile
# Look for a host and build machine specific resource!
eval resource=\${builddep_$2_BUILD_${rewritten_build_var}_HOST_${rewritten_host_var}}
# Look for a target and build machine specific resource!
eval resource=\${builddep_$2_BUILD_${rewritten_build_var}_TARGET_${rewritten_target_var}}
if test "x$resource" = x; then
# Ok, lets instead look for a host specific resource
eval resource=\${builddep_$2_HOST_${rewritten_host_var}}
# Ok, lets instead look for a target specific resource
eval resource=\${builddep_$2_TARGET_${rewritten_target_var}}
fi
if test "x$resource" = x; then
# Ok, lets instead look for a build specific resource
@ -228,3 +228,33 @@ AC_DEFUN([BDEPS_FETCH],
$5=$installdir
fi
])
AC_DEFUN_ONCE([BDEPS_CONFIGURE_BUILDDEPS],
[
AC_ARG_WITH(builddeps-conf, [AS_HELP_STRING([--with-builddeps-conf],
[use this configuration file for the builddeps])])
AC_ARG_WITH(builddeps-server, [AS_HELP_STRING([--with-builddeps-server],
[download and use build dependencies from this server url, e.g. --with-builddeps-server=ftp://example.com/dir])])
AC_ARG_WITH(builddeps-dir, [AS_HELP_STRING([--with-builddeps-dir],
[store downloaded build dependencies here @<:@d/localhome/builddeps@:>@])],
[],
[with_builddeps_dir=/localhome/builddeps])
AC_ARG_WITH(builddeps-group, [AS_HELP_STRING([--with-builddeps-group],
[chgrp the downloaded build dependencies to this group])])
AC_ARG_ENABLE([list-builddeps], [AS_HELP_STRING([--enable-list-builddeps],
[list all build dependencies known to the configure script])],
[LIST_BUILDDEPS="${enableval}"], [LIST_BUILDDEPS='no'])
if test "x$LIST_BUILDDEPS" = xyes; then
echo
echo List of build dependencies known to the configure script,
echo that can be used in builddeps.conf files:
cat $AUTOCONF_DIR/*.ac $AUTOCONF_DIR/*.m4 | grep BDEPS_CHECK_MODUL[E]\( | cut -f 2 -d ',' | tr -d ' ' | sort
echo
exit 1
fi
])

16836
common/autoconf/configure vendored

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -1,103 +0,0 @@
#
# Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved.
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
#
# This code is free software; you can redistribute it and/or modify it
# under the terms of the GNU General Public License version 2 only, as
# published by the Free Software Foundation. Oracle designates this
# particular file as subject to the "Classpath" exception as provided
# by Oracle in the LICENSE file that accompanied this code.
#
# This code is distributed in the hope that it will be useful, but WITHOUT
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
# version 2 for more details (a copy is included in the LICENSE file that
# accompanied this code).
#
# You should have received a copy of the GNU General Public License version
# 2 along with this work; if not, write to the Free Software Foundation,
# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
#
# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
# or visit www.oracle.com if you need additional information or have any
# questions.
#
AC_DEFUN([CHECK_CORES],
[
AC_MSG_CHECKING([for number of cores])
NUM_CORES=1
FOUND_CORES=no
if test -f /proc/cpuinfo; then
# Looks like a Linux system
NUM_CORES=`cat /proc/cpuinfo | grep -c processor`
FOUND_CORES=yes
fi
if test -x /usr/sbin/psrinfo; then
# Looks like a Solaris system
NUM_CORES=`LC_MESSAGES=C /usr/sbin/psrinfo -v | grep -c on-line`
FOUND_CORES=yes
fi
if test -x /usr/sbin/system_profiler; then
# Looks like a MacOSX system
NUM_CORES=`/usr/sbin/system_profiler -detailLevel full SPHardwareDataType | grep 'Cores' | awk '{print [$]5}'`
FOUND_CORES=yes
fi
if test "x$build_os" = xwindows; then
NUM_CORES=4
fi
# For c/c++ code we run twice as many concurrent build
# jobs than we have cores, otherwise we will stall on io.
CONCURRENT_BUILD_JOBS=`expr $NUM_CORES \* 2`
if test "x$FOUND_CORES" = xyes; then
AC_MSG_RESULT([$NUM_CORES])
else
AC_MSG_RESULT([could not detect number of cores, defaulting to 1!])
fi
])
AC_DEFUN([CHECK_MEMORY_SIZE],
[
AC_MSG_CHECKING([for memory size])
# Default to 1024MB
MEMORY_SIZE=1024
FOUND_MEM=no
if test -f /proc/cpuinfo; then
# Looks like a Linux system
MEMORY_SIZE=`cat /proc/meminfo | grep MemTotal | awk '{print [$]2}'`
MEMORY_SIZE=`expr $MEMORY_SIZE / 1024`
FOUND_MEM=yes
fi
if test -x /usr/sbin/prtconf; then
# Looks like a Solaris system
MEMORY_SIZE=`/usr/sbin/prtconf | grep "Memory size" | awk '{ print [$]3 }'`
FOUND_MEM=yes
fi
if test -x /usr/sbin/system_profiler; then
# Looks like a MacOSX system
MEMORY_SIZE=`/usr/sbin/system_profiler -detailLevel full SPHardwareDataType | grep 'Memory' | awk '{print [$]2}'`
MEMORY_SIZE=`expr $MEMORY_SIZE \* 1024`
FOUND_MEM=yes
fi
if test "x$build_os" = xwindows; then
MEMORY_SIZE=`systeminfo | grep 'Total Physical Memory:' | awk '{ print [$]4 }' | sed 's/,//'`
FOUND_MEM=yes
fi
if test "x$FOUND_MEM" = xyes; then
AC_MSG_RESULT([$MEMORY_SIZE MB])
else
AC_MSG_RESULT([could not detect memory size defaulting to 1024MB!])
fi
])

File diff suppressed because it is too large Load Diff

View File

@ -23,11 +23,13 @@
# questions.
#
function prepare_help_system {
AC_DEFUN_ONCE([HELP_SETUP_DEPENDENCY_HELP],
[
AC_CHECK_PROGS(PKGHANDLER, apt-get yum port pkgutil pkgadd)
}
function help_on_build_dependency {
])
AC_DEFUN([HELP_MSG_MISSING_DEPENDENCY],
[
# Print a helpful message on how to acquire the necessary build dependency.
# $1 is the help tag: freetyp2, cups, pulse, alsa etc
MISSING_DEPENDENCY=$1
@ -51,9 +53,9 @@ function help_on_build_dependency {
if test "x$PKGHANDLER_COMMAND" != x; then
HELP_MSG="You might be able to fix this by running '$PKGHANDLER_COMMAND'."
fi
}
])
function apt_help {
apt_help() {
case $1 in
devkit)
PKGHANDLER_COMMAND="sudo apt-get install build-essential" ;;
@ -76,7 +78,7 @@ function apt_help {
esac
}
function yum_help {
yum_help() {
case $1 in
devkit)
PKGHANDLER_COMMAND="sudo yum groupinstall \"Development Tools\"" ;;
@ -99,14 +101,97 @@ function yum_help {
esac
}
function port_help {
port_help() {
PKGHANDLER_COMMAND=""
}
function pkgutil_help {
pkgutil_help() {
PKGHANDLER_COMMAND=""
}
function pkgadd_help {
pkgadd_help() {
PKGHANDLER_COMMAND=""
}
AC_DEFUN_ONCE([HELP_PRINT_SUMMARY_AND_WARNINGS],
[
# Finally output some useful information to the user
if test "x$CCACHE_FOUND" != x; then
if test "x$HAS_GOOD_CCACHE" = x; then
CCACHE_STATUS="installed, but disabled (version older than 3.1.4)"
CCACHE_HELP_MSG="You have ccache installed, but it is a version prior to 3.1.4. Try upgrading."
else
CCACHE_STATUS="installed and in use"
fi
else
if test "x$GCC" = xyes; then
CCACHE_STATUS="not installed (consider installing)"
CCACHE_HELP_MSG="You do not have ccache installed. Try installing it."
else
CCACHE_STATUS="not available for your system"
fi
fi
printf "\n"
printf "====================================================\n"
printf "A new configuration has been successfully created in\n"
printf "$OUTPUT_ROOT\n"
if test "x$CONFIGURE_COMMAND_LINE" != x; then
printf "using configure arguments '$CONFIGURE_COMMAND_LINE'.\n"
else
printf "using default settings.\n"
fi
printf "\n"
printf "Configuration summary:\n"
printf "* Debug level: $DEBUG_LEVEL\n"
printf "* JDK variant: $JDK_VARIANT\n"
printf "* JVM variants: $with_jvm_variants\n"
printf "* OpenJDK target: OS: $OPENJDK_TARGET_OS, CPU architecture: $OPENJDK_TARGET_CPU_ARCH, address length: $OPENJDK_TARGET_CPU_BITS\n"
printf "* Boot JDK: $BOOT_JDK\n"
printf "\n"
printf "Build performance summary:\n"
printf "* Cores to use: $NUM_CORES\n"
printf "* Memory limit: $MEMORY_SIZE MB\n"
printf "* ccache status: $CCACHE_STATUS\n"
printf "\n"
if test "x$CCACHE_HELP_MSG" != x && test "x$HIDE_PERFORMANCE_HINTS" = "xno"; then
printf "Build performance tip: ccache gives a tremendous speedup for C++ recompilations.\n"
printf "$CCACHE_HELP_MSG\n"
HELP_MSG_MISSING_DEPENDENCY([ccache])
printf "$HELP_MSG\n"
printf "\n"
fi
if test "x$BUILDING_MULTIPLE_JVM_VARIANTS" = "xyes"; then
printf "NOTE: You have requested to build more than one version of the JVM, which\n"
printf "will result in longer build times.\n"
printf "\n"
fi
if test "x$FOUND_ALT_VARIABLES" != "x"; then
printf "WARNING: You have old-style ALT_ environment variables set.\n"
printf "These are not respected, and will be ignored. It is recommended\n"
printf "that you clean your environment. The following variables are set:\n"
printf "$FOUND_ALT_VARIABLES\n"
printf "\n"
fi
if test "x$OUTPUT_DIR_IS_LOCAL" != "xyes"; then
printf "WARNING: Your build output directory is not on a local disk.\n"
printf "This will severely degrade build performance!\n"
printf "It is recommended that you create an output directory on a local disk,\n"
printf "and run the configure script again from that directory.\n"
printf "\n"
fi
if test "x$IS_RECONFIGURE" = "xyes"; then
printf "WARNING: The result of this configuration has overridden an older\n"
printf "configuration. You *should* run 'make clean' to make sure you get a\n"
printf "proper build. Failure to do so might result in strange build problems.\n"
printf "\n"
fi
])

View File

@ -0,0 +1,551 @@
#
# Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved.
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
#
# This code is free software; you can redistribute it and/or modify it
# under the terms of the GNU General Public License version 2 only, as
# published by the Free Software Foundation. Oracle designates this
# particular file as subject to the "Classpath" exception as provided
# by Oracle in the LICENSE file that accompanied this code.
#
# This code is distributed in the hope that it will be useful, but WITHOUT
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
# version 2 for more details (a copy is included in the LICENSE file that
# accompanied this code).
#
# You should have received a copy of the GNU General Public License version
# 2 along with this work; if not, write to the Free Software Foundation,
# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
#
# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
# or visit www.oracle.com if you need additional information or have any
# questions.
#
AC_DEFUN_ONCE([JDKOPT_SETUP_JDK_VARIANT],
[
###############################################################################
#
# Check which variant of the JDK that we want to build.
# Currently we have:
# normal: standard edition
# embedded: cut down to a smaller footprint
#
# Effectively the JDK variant gives a name to a specific set of
# modules to compile into the JDK. In the future, these modules
# might even be Jigsaw modules.
#
AC_MSG_CHECKING([which variant of the JDK to build])
AC_ARG_WITH([jdk-variant], [AS_HELP_STRING([--with-jdk-variant],
[JDK variant to build (normal, embedded) @<:@normal@:>@])])
if test "x$with_jdk_variant" = xnormal || test "x$with_jdk_variant" = x; then
JAVASE_EMBEDDED=""
MINIMIZE_RAM_USAGE=""
JDK_VARIANT="normal"
elif test "x$with_jdk_variant" = xembedded; then
JAVASE_EMBEDDED="JAVASE_EMBEDDED:=true"
MINIMIZE_RAM_USAGE="MINIMIZE_RAM_USAGE:=true"
JDK_VARIANT="embedded"
else
AC_MSG_ERROR([The available JDK variants are: normal, embedded])
fi
AC_SUBST(JAVASE_EMBEDDED)
AC_SUBST(MINIMIZE_RAM_USAGE)
AC_SUBST(JDK_VARIANT)
AC_MSG_RESULT([$JDK_VARIANT])
])
AC_DEFUN_ONCE([JDKOPT_SETUP_JVM_VARIANTS],
[
###############################################################################
#
# Check which variants of the JVM that we want to build.
# Currently we have:
# server: normal interpreter and a tiered C1/C2 compiler
# client: normal interpreter and C1 (no C2 compiler) (only 32-bit platforms)
# kernel: kernel footprint JVM that passes the TCK without major performance problems,
# ie normal interpreter and C1, only the serial GC, kernel jvmti etc
# zero: no machine code interpreter, no compiler
# zeroshark: zero interpreter and shark/llvm compiler backend
AC_MSG_CHECKING([which variants of the JVM that should be built])
AC_ARG_WITH([jvm-variants], [AS_HELP_STRING([--with-jvm-variants],
[JVM variants (separated by commas) to build (server, client, kernel, zero, zeroshark) @<:@server@:>@])])
if test "x$with_jvm_variants" = x; then
if test "x$JDK_VARIANT" = xembedded; then
with_jvm_variants="client"
else
with_jvm_variants="server"
fi
fi
JVM_VARIANTS=",$with_jvm_variants,"
TEST_VARIANTS=`$ECHO "$JVM_VARIANTS" | $SED -e 's/server,//' -e 's/client,//' -e 's/kernel,//' -e 's/zero,//' -e 's/zeroshark,//'`
if test "x$TEST_VARIANTS" != "x,"; then
AC_MSG_ERROR([The available JVM variants are: server, client, kernel, zero, zeroshark])
fi
AC_MSG_RESULT([$with_jvm_variants])
JVM_VARIANT_SERVER=`$ECHO "$JVM_VARIANTS" | $SED -e '/,server,/!s/.*/false/g' -e '/,server,/s/.*/true/g'`
JVM_VARIANT_CLIENT=`$ECHO "$JVM_VARIANTS" | $SED -e '/,client,/!s/.*/false/g' -e '/,client,/s/.*/true/g'`
JVM_VARIANT_KERNEL=`$ECHO "$JVM_VARIANTS" | $SED -e '/,kernel,/!s/.*/false/g' -e '/,kernel,/s/.*/true/g'`
JVM_VARIANT_ZERO=`$ECHO "$JVM_VARIANTS" | $SED -e '/,zero,/!s/.*/false/g' -e '/,zero,/s/.*/true/g'`
JVM_VARIANT_ZEROSHARK=`$ECHO "$JVM_VARIANTS" | $SED -e '/,zeroshark,/!s/.*/false/g' -e '/,zeroshark,/s/.*/true/g'`
if test "x$JVM_VARIANT_CLIENT" = xtrue; then
if test "x$OPENJDK_TARGET_CPU_BITS" = x64; then
AC_MSG_ERROR([You cannot build a client JVM for a 64-bit machine.])
fi
fi
if test "x$JVM_VARIANT_KERNEL" = xtrue; then
if test "x$OPENJDK_TARGET_CPU_BITS" = x64; then
AC_MSG_ERROR([You cannot build a kernel JVM for a 64-bit machine.])
fi
fi
# Replace the commas with AND for use in the build directory name.
ANDED_JVM_VARIANTS=`$ECHO "$JVM_VARIANTS" | $SED -e 's/^,//' -e 's/,$//' -e 's/,/AND/'`
COUNT_VARIANTS=`$ECHO "$JVM_VARIANTS" | $SED -e 's/server,/1/' -e 's/client,/1/' -e 's/kernel,/1/' -e 's/zero,/1/' -e 's/zeroshark,/1/'`
if test "x$COUNT_VARIANTS" != "x,1"; then
BUILDING_MULTIPLE_JVM_VARIANTS=yes
else
BUILDING_MULTIPLE_JVM_VARIANTS=no
fi
AC_SUBST(JVM_VARIANTS)
AC_SUBST(JVM_VARIANT_SERVER)
AC_SUBST(JVM_VARIANT_CLIENT)
AC_SUBST(JVM_VARIANT_KERNEL)
AC_SUBST(JVM_VARIANT_ZERO)
AC_SUBST(JVM_VARIANT_ZEROSHARK)
])
AC_DEFUN_ONCE([JDKOPT_SETUP_DEBUG_LEVEL],
[
###############################################################################
#
# Set the debug level
# release: no debug information, all optimizations, no asserts.
# fastdebug: debug information (-g), all optimizations, all asserts
# slowdebug: debug information (-g), no optimizations, all asserts
#
DEBUG_LEVEL="release"
AC_MSG_CHECKING([which debug level to use])
AC_ARG_ENABLE([debug], [AS_HELP_STRING([--enable-debug],
[set the debug level to fastdebug (shorthand for --with-debug-level=fastdebug) @<:@disabled@:>@])],
[
ENABLE_DEBUG="${enableval}"
DEBUG_LEVEL="fastdebug"
], [ENABLE_DEBUG="no"])
AC_ARG_WITH([debug-level], [AS_HELP_STRING([--with-debug-level],
[set the debug level (release, fastdebug, slowdebug) @<:@release@:>@])],
[
DEBUG_LEVEL="${withval}"
if test "x$ENABLE_DEBUG" = xyes; then
AC_MSG_ERROR([You cannot use both --enable-debug and --with-debug-level at the same time.])
fi
])
AC_MSG_RESULT([$DEBUG_LEVEL])
if test "x$DEBUG_LEVEL" != xrelease && \
test "x$DEBUG_LEVEL" != xfastdebug && \
test "x$DEBUG_LEVEL" != xslowdebug; then
AC_MSG_ERROR([Allowed debug levels are: release, fastdebug and slowdebug])
fi
###############################################################################
#
# Setup legacy vars/targets and new vars to deal with different debug levels.
#
case $DEBUG_LEVEL in
release )
VARIANT="OPT"
FASTDEBUG="false"
DEBUG_CLASSFILES="false"
BUILD_VARIANT_RELEASE=""
HOTSPOT_DEBUG_LEVEL="product"
HOTSPOT_EXPORT="product"
;;
fastdebug )
VARIANT="DBG"
FASTDEBUG="true"
DEBUG_CLASSFILES="true"
BUILD_VARIANT_RELEASE="-fastdebug"
HOTSPOT_DEBUG_LEVEL="fastdebug"
HOTSPOT_EXPORT="fastdebug"
;;
slowdebug )
VARIANT="DBG"
FASTDEBUG="false"
DEBUG_CLASSFILES="true"
BUILD_VARIANT_RELEASE="-debug"
HOTSPOT_DEBUG_LEVEL="jvmg"
HOTSPOT_EXPORT="debug"
;;
esac
#####
# Generate the legacy makefile targets for hotspot.
# The hotspot api for selecting the build artifacts, really, needs to be improved.
#
HOTSPOT_TARGET=""
if test "x$JVM_VARIANT_SERVER" = xtrue; then
HOTSPOT_TARGET="$HOTSPOT_TARGET${HOTSPOT_DEBUG_LEVEL} "
fi
if test "x$JVM_VARIANT_CLIENT" = xtrue; then
HOTSPOT_TARGET="$HOTSPOT_TARGET${HOTSPOT_DEBUG_LEVEL}1 "
fi
if test "x$JVM_VARIANT_KERNEL" = xtrue; then
HOTSPOT_TARGET="$HOTSPOT_TARGET${HOTSPOT_DEBUG_LEVEL}kernel "
fi
if test "x$JVM_VARIANT_ZERO" = xtrue; then
HOTSPOT_TARGET="$HOTSPOT_TARGET${HOTSPOT_DEBUG_LEVEL}zero "
fi
if test "x$JVM_VARIANT_ZEROSHARK" = xtrue; then
HOTSPOT_TARGET="$HOTSPOT_TARGET${HOTSPOT_DEBUG_LEVEL}shark "
fi
HOTSPOT_TARGET="$HOTSPOT_TARGET docs export_$HOTSPOT_EXPORT"
#####
AC_SUBST(DEBUG_LEVEL)
AC_SUBST(VARIANT)
AC_SUBST(FASTDEBUG)
AC_SUBST(DEBUG_CLASSFILES)
AC_SUBST(BUILD_VARIANT_RELEASE)
])
AC_DEFUN_ONCE([JDKOPT_SETUP_JDK_OPTIONS],
[
###############################################################################
#
# Should we build only OpenJDK even if closed sources are present?
#
AC_ARG_ENABLE([openjdk-only], [AS_HELP_STRING([--enable-openjdk-only],
[build OpenJDK regardless of the presence of closed repositories @<:@disabled@:>@])],,)
if test "x$enable_openjdk_only" = "xyes"; then
OPENJDK=true
elif test "x$enable_openjdk_only" = "xno"; then
OPENJDK=false
elif test -d "$SRC_ROOT/jdk/src/closed"; then
OPENJDK=false
else
OPENJDK=true
fi
if test "x$OPENJDK" = "xtrue"; then
SET_OPENJDK=OPENJDK=true
fi
AC_SUBST(SET_OPENJDK)
###############################################################################
#
# JIGSAW or not. The JIGSAW variable is used during the intermediate
# stage when we are building both the old style JDK and the new style modularized JDK.
# When the modularized JDK is finalized, this option will go away.
#
AC_ARG_ENABLE([jigsaw], [AS_HELP_STRING([--enable-jigsaw],
[build Jigsaw images (not yet available) @<:@disabled@:>@])],,)
if test "x$enable_jigsaw" = "xyes"; then
JIGSAW=true
else
JIGSAW=false
fi
AC_SUBST(JIGSAW)
###############################################################################
#
# Should we build a JDK/JVM with headful support (ie a graphical ui)?
# We always build headless support.
#
AC_MSG_CHECKING([headful support])
AC_ARG_ENABLE([headful], [AS_HELP_STRING([--disable-headful],
[build headful support (graphical UI support) @<:@enabled@:>@])],
[SUPPORT_HEADFUL=${enable_headful}], [SUPPORT_HEADFUL=yes])
SUPPORT_HEADLESS=yes
BUILD_HEADLESS="BUILD_HEADLESS:=true"
if test "x$SUPPORT_HEADFUL" = xyes; then
# We are building both headful and headless.
BUILD_HEADLESS_ONLY=""
headful_msg="inlude support for both headful and headless"
fi
if test "x$SUPPORT_HEADFUL" = xno; then
# Thus we are building headless only.
BUILD_HEADLESS="BUILD_HEADLESS:=true"
BUILD_HEADLESS_ONLY="BUILD_HEADLESS_ONLY:=true"
headful_msg="headless only"
fi
AC_MSG_RESULT([$headful_msg])
AC_SUBST(SUPPORT_HEADLESS)
AC_SUBST(SUPPORT_HEADFUL)
AC_SUBST(BUILD_HEADLESS)
AC_SUBST(BUILD_HEADLESS_ONLY)
###############################################################################
#
# Should we run the painfully slow javadoc tool?
#
AC_MSG_CHECKING([whether to build documentation])
AC_ARG_ENABLE([docs], [AS_HELP_STRING([--enable-docs],
[enable generation of Javadoc documentation @<:@disabled@:>@])],
[ENABLE_DOCS="${enableval}"], [ENABLE_DOCS='no'])
AC_MSG_RESULT([$ENABLE_DOCS])
AC_SUBST(ENABLE_DOCS)
GENERATE_DOCS=false
if test "x$ENABLE_DOCS" = xyes; then
GENERATE_DOCS=true
fi
AC_SUBST(GENERATE_DOCS)
###############################################################################
#
# Should we compile nimbus swing L&F? We can probably remove this option
# since nimbus is officially part of javax now.
#
AC_MSG_CHECKING([whether to build nimbus L&F])
AC_ARG_ENABLE([nimbus], [AS_HELP_STRING([--disable-nimbus],
[disable Nimbus L&F @<:@enabled@:>@])],
[ENABLE_NIMBUS="${enableval}"], [ENABLE_NIMBUS='yes'])
AC_MSG_RESULT([$ENABLE_NIMBUS])
DISABLE_NIMBUS=
if test "x$ENABLE_NIMBUS" = xno; then
DISABLE_NIMBUS=true
fi
AC_SUBST(DISABLE_NIMBUS)
# Control wether Hotspot runs Queens test after build.
AC_ARG_ENABLE([hotspot-test-in-build], [AS_HELP_STRING([--enable-hotspot-test-in-build],
[enable running of Queens test after Hotspot build (not yet available) @<:@disabled@:>@])],,
[enable_hotspot_test_in_build=no])
if test "x$enable_hotspot_test_in_build" = "xyes"; then
TEST_IN_BUILD=true
else
TEST_IN_BUILD=false
fi
AC_SUBST(TEST_IN_BUILD)
###############################################################################
#
# Choose cacerts source file
#
AC_ARG_WITH(cacerts-file, [AS_HELP_STRING([--with-cacerts-file],
[specify alternative cacerts file])])
if test "x$with_cacerts_file" != x; then
CACERTS_FILE=$with_cacerts_file
else
if test "x$OPENJDK" = "xtrue"; then
CACERTS_FILE=${SRC_ROOT}/jdk/src/share/lib/security/cacerts
else
CACERTS_FILE=${SRC_ROOT}/jdk/src/closed/share/lib/security/cacerts.internal
fi
fi
AC_SUBST(CACERTS_FILE)
###############################################################################
#
# Compress jars
#
COMPRESS_JARS=false
# default for embedded is yes...
if test "x$JDK_VARIANT" = "xembedded"; then
COMPRESS_JARS=true
fi
AC_SUBST(COMPRESS_JARS)
###############################################################################
#
# Should we compile JFR
# default no, except for on closed-jdk and !embedded
#
ENABLE_JFR=no
# Is the JFR source present
#
# For closed && !embedded default is yes if the source is present
#
if test "x${OPENJDK}" != "xtrue" && test "x$JDK_VARIANT" != "xembedded" && test -d "$SRC_ROOT/jdk/src/closed/share/native/oracle/jfr"; then
ENABLE_JFR=yes
fi
AC_MSG_CHECKING([whether to build jfr])
AC_ARG_ENABLE([jfr], [AS_HELP_STRING([--enable-jfr],
[enable jfr (default is no)])]
[ENABLE_JFR="${enableval}"])
AC_MSG_RESULT([${ENABLE_JFR}])
if test "x$ENABLE_JFR" = "xyes"; then
ENABLE_JFR=true
elif test "x$ENABLE_JFR" = "xno"; then
ENABLE_JFR=false
else
AC_MSG_ERROR([Invalid argument to --enable-jfr])
fi
AC_SUBST(ENABLE_JFR)
])
AC_DEFUN_ONCE([JDKOPT_SETUP_JDK_VERSION_NUMBERS],
[
# Source the version numbers
. $AUTOCONF_DIR/version.numbers
if test "x$OPENJDK" = "xfalse"; then
. $AUTOCONF_DIR/closed.version.numbers
fi
# Now set the JDK version, milestone, build number etc.
AC_SUBST(JDK_MAJOR_VERSION)
AC_SUBST(JDK_MINOR_VERSION)
AC_SUBST(JDK_MICRO_VERSION)
AC_SUBST(JDK_UPDATE_VERSION)
AC_SUBST(JDK_BUILD_NUMBER)
AC_SUBST(MILESTONE)
AC_SUBST(LAUNCHER_NAME)
AC_SUBST(PRODUCT_NAME)
AC_SUBST(PRODUCT_SUFFIX)
AC_SUBST(JDK_RC_PLATFORM_NAME)
AC_SUBST(COMPANY_NAME)
COPYRIGHT_YEAR=`date +'%Y'`
AC_SUBST(COPYRIGHT_YEAR)
RUNTIME_NAME="$PRODUCT_NAME $PRODUCT_SUFFIX"
AC_SUBST(RUNTIME_NAME)
if test "x$JDK_UPDATE_VERSION" != x; then
JDK_VERSION="${JDK_MAJOR_VERSION}.${JDK_MINOR_VERSION}.${JDK_MICRO_VERSION}_${JDK_UPDATE_VERSION}"
else
JDK_VERSION="${JDK_MAJOR_VERSION}.${JDK_MINOR_VERSION}.${JDK_MICRO_VERSION}"
fi
AC_SUBST(JDK_VERSION)
if test "x$MILESTONE" != x; then
RELEASE="${JDK_VERSION}-${MILESTONE}${BUILD_VARIANT_RELEASE}"
else
RELEASE="${JDK_VERSION}${BUILD_VARIANT_RELEASE}"
fi
AC_SUBST(RELEASE)
if test "x$JDK_BUILD_NUMBER" != x; then
FULL_VERSION="${RELEASE}-${JDK_BUILD_NUMBER}"
else
JDK_BUILD_NUMBER=b00
BUILD_DATE=`date '+%Y_%m_%d_%H_%M'`
# Avoid [:alnum:] since it depends on the locale.
CLEAN_USERNAME=`echo "$USER" | $TR -d -c 'abcdefghijklmnopqrstuvqxyz0123456789'`
USER_RELEASE_SUFFIX=`echo "${CLEAN_USERNAME}_${BUILD_DATE}" | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvqxyz'`
FULL_VERSION="${RELEASE}-${USER_RELEASE_SUFFIX}-${JDK_BUILD_NUMBER}"
fi
AC_SUBST(FULL_VERSION)
COOKED_BUILD_NUMBER=`$ECHO $JDK_BUILD_NUMBER | $SED -e 's/^b//' -e 's/^0//'`
AC_SUBST(COOKED_BUILD_NUMBER)
])
AC_DEFUN_ONCE([JDKOPT_SETUP_BUILD_TWEAKS],
[
HOTSPOT_MAKE_ARGS="ALT_OUTPUTDIR=$HOTSPOT_OUTPUTDIR ALT_EXPORT_PATH=$HOTSPOT_DIST $HOTSPOT_TARGET"
AC_SUBST(HOTSPOT_MAKE_ARGS)
# The name of the Service Agent jar.
SALIB_NAME="${LIBRARY_PREFIX}saproc${SHARED_LIBRARY_SUFFIX}"
if test "x$OPENJDK_TARGET_OS" = "xwindows"; then
SALIB_NAME="${LIBRARY_PREFIX}sawindbg${SHARED_LIBRARY_SUFFIX}"
fi
AC_SUBST(SALIB_NAME)
])
AC_DEFUN_ONCE([JDKOPT_SETUP_DEBUG_SYMBOLS],
[
#
# ENABLE_DEBUG_SYMBOLS
# This must be done after the toolchain is setup, since we're looking at objcopy.
#
ENABLE_DEBUG_SYMBOLS=default
# default on macosx is no...
if test "x$OPENJDK_TARGET_OS" = xmacosx; then
ENABLE_DEBUG_SYMBOLS=no
fi
# default for embedded is no...
if test "x$JDK_VARIANT" = "xembedded"; then
ENABLE_DEBUG_SYMBOLS=no
fi
AC_ARG_ENABLE([debug-symbols],
[AS_HELP_STRING([--disable-debug-symbols],[disable generation of debug symbols (@<:@enabled@:>@)])],
[ENABLE_DEBUG_SYMBOLS=${enable_debug_symbols}],
)
AC_MSG_CHECKING([if we should generate debug symbols])
if test "x$ENABLE_DEBUG_SYMBOLS" = "xyes" && test "x$OBJCOPY" = x; then
# explicit enabling of enable-debug-symbols and can't find objcopy
# this is an error
AC_MSG_ERROR([Unable to find objcopy, cannot enable debug-symbols])
fi
if test "x$ENABLE_DEBUG_SYMBOLS" = "xdefault"; then
# Default is on if objcopy is found, otherwise off
if test "x$OBJCOPY" != x; then
ENABLE_DEBUG_SYMBOLS=yes
else
ENABLE_DEBUG_SYMBOLS=no
fi
fi
AC_MSG_RESULT([$ENABLE_DEBUG_SYMBOLS])
#
# ZIP_DEBUGINFO_FILES
#
ZIP_DEBUGINFO_FILES=yes
AC_ARG_ENABLE([zip-debug-info],
[AS_HELP_STRING([--disable-zip-debug-info],[don't zip debug-info files (@<:@enabled@:@)])],
[ZIP_DEBUGINFO_FILES=${enable_zip_debug_info}],
)
AC_MSG_CHECKING([if we should zip debug-info files])
AC_MSG_RESULT([$ZIP_DEBUGINFO_FILES])
# Hotspot wants ZIP_DEBUGINFO_FILES to be 1 for yes
# use that...
if test "x$ZIP_DEBUGINFO_FILES" = "xyes"; then
ZIP_DEBUGINFO_FILES=1
else
ZIP_DEBUGINFO_FILES=0
fi
AC_SUBST(ENABLE_DEBUG_SYMBOLS)
AC_SUBST(ZIP_DEBUGINFO_FILES)
AC_SUBST(CFLAGS_DEBUG_SYMBOLS)
AC_SUBST(CXXFLAGS_DEBUG_SYMBOLS)
])

View File

@ -0,0 +1,642 @@
#
# Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved.
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
#
# This code is free software; you can redistribute it and/or modify it
# under the terms of the GNU General Public License version 2 only, as
# published by the Free Software Foundation. Oracle designates this
# particular file as subject to the "Classpath" exception as provided
# by Oracle in the LICENSE file that accompanied this code.
#
# This code is distributed in the hope that it will be useful, but WITHOUT
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
# version 2 for more details (a copy is included in the LICENSE file that
# accompanied this code).
#
# You should have received a copy of the GNU General Public License version
# 2 along with this work; if not, write to the Free Software Foundation,
# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
#
# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
# or visit www.oracle.com if you need additional information or have any
# questions.
#
AC_DEFUN_ONCE([LIB_SETUP_INIT],
[
###############################################################################
#
# OS specific settings that we never will need to probe.
#
if test "x$OPENJDK_TARGET_OS" = xlinux; then
AC_MSG_CHECKING([what is not needed on Linux?])
PULSE_NOT_NEEDED=yes
AC_MSG_RESULT([pulse])
fi
if test "x$OPENJDK_TARGET_OS" = xsolaris; then
AC_MSG_CHECKING([what is not needed on Solaris?])
ALSA_NOT_NEEDED=yes
PULSE_NOT_NEEDED=yes
AC_MSG_RESULT([alsa pulse])
fi
if test "x$OPENJDK_TARGET_OS" = xwindows; then
AC_MSG_CHECKING([what is not needed on Windows?])
CUPS_NOT_NEEDED=yes
ALSA_NOT_NEEDED=yes
PULSE_NOT_NEEDED=yes
X11_NOT_NEEDED=yes
AC_MSG_RESULT([alsa cups pulse x11])
fi
if test "x$OPENJDK_TARGET_OS" = xmacosx; then
AC_MSG_CHECKING([what is not needed on MacOSX?])
ALSA_NOT_NEEDED=yes
PULSE_NOT_NEEDED=yes
X11_NOT_NEEDED=yes
FREETYPE2_NOT_NEEDED=yes
# If the java runtime framework is disabled, then we need X11.
# This will be adjusted below.
AC_MSG_RESULT([alsa pulse x11])
fi
if test "x$OPENJDK_TARGET_OS" = xbsd; then
AC_MSG_CHECKING([what is not needed on bsd?])
ALSA_NOT_NEEDED=yes
AC_MSG_RESULT([alsa])
fi
if test "x$OPENJDK" = "xfalse"; then
FREETYPE2_NOT_NEEDED=yes
fi
###############################################################################
#
# Check for MacOSX support for OpenJDK. If this exists, try to build a JVM
# that uses this API.
#
AC_ARG_ENABLE([macosx-runtime-support], [AS_HELP_STRING([--disable-macosx-runtime-support],
[disable the use of MacOSX Java runtime support framework @<:@enabled@:>@])],
[MACOSX_RUNTIME_SUPPORT="${enableval}"],[MACOSX_RUNTIME_SUPPORT="no"])
USE_MACOSX_RUNTIME_SUPPORT=no
AC_MSG_CHECKING([for explicit Java runtime support in the OS])
if test -f /System/Library/Frameworks/JavaVM.framework/Frameworks/JavaRuntimeSupport.framework/Headers/JavaRuntimeSupport.h; then
if test "x$MACOSX_RUNTIME_SUPPORT" != xno; then
MACOSX_RUNTIME_SUPPORT=yes
USE_MACOSX_RUNTIME_SUPPORT=yes
AC_MSG_RESULT([yes, does not need alsa freetype2 pulse and X11])
else
AC_MSG_RESULT([yes, but explicitly disabled.])
fi
else
AC_MSG_RESULT([no])
fi
if test "x$OPENJDK_TARGET_OS" = xmacosx && test "x$USE_MACOSX_RUNTIME_SUPPORT" = xno; then
AC_MSG_CHECKING([what is not needed on an X11 build on MacOSX?])
X11_NOT_NEEDED=
FREETYPE2_NOT_NEEDED=
AC_MSG_RESULT([alsa pulse])
fi
])
AC_DEFUN_ONCE([LIB_SETUP_X11],
[
###############################################################################
#
# Check for X Windows
#
# Check if the user has specified sysroot, but not --x-includes or --x-libraries.
# Make a simple check for the libraries at the sysroot, and setup --x-includes and
# --x-libraries for the sysroot, if that seems to be correct.
if test "x$SYS_ROOT" != "x/"; then
if test "x$x_includes" = xNONE; then
if test -f "$SYS_ROOT/usr/X11R6/include/X11/Xlib.h"; then
x_includes="$SYS_ROOT/usr/X11R6/include"
fi
fi
if test "x$x_libraries" = xNONE; then
if test -f "$SYS_ROOT/usr/X11R6/lib/libX11.so"; then
x_libraries="$SYS_ROOT/usr/X11R6/lib"
fi
fi
fi
# Now let autoconf do it's magic
AC_PATH_X
AC_PATH_XTRA
if test "x$no_x" = xyes && test "x$X11_NOT_NEEDED" != xyes; then
HELP_MSG_MISSING_DEPENDENCY([x11])
AC_MSG_ERROR([Could not find X11 libraries. $HELP_MSG])
fi
# Some of the old makefiles require a setting of OPENWIN_HOME
# Since the X11R6 directory has disappeared on later Linuxes,
# we need to probe for it.
if test "x$OPENJDK_TARGET_OS" = xlinux; then
if test -d "$SYS_ROOT/usr/X11R6"; then
OPENWIN_HOME="$SYS_ROOT/usr/X11R6"
fi
if test -d "$SYS_ROOT/usr/include/X11"; then
OPENWIN_HOME="$SYS_ROOT/usr"
fi
fi
if test "x$OPENJDK_TARGET_OS" = xsolaris; then
OPENWIN_HOME="/usr/openwin"
fi
AC_SUBST(OPENWIN_HOME)
#
# Weird Sol10 something check...TODO change to try compile
#
if test "x${OPENJDK_TARGET_OS}" = xsolaris; then
if test "`uname -r`" = "5.10"; then
if test "`${EGREP} -c XLinearGradient ${OPENWIN_HOME}/share/include/X11/extensions/Xrender.h`" = "0"; then
X_CFLAGS="${X_CFLAGS} -DSOLARIS10_NO_XRENDER_STRUCTS"
fi
fi
fi
AC_LANG_PUSH(C)
OLD_CFLAGS="$CFLAGS"
CFLAGS="$CFLAGS $X_CFLAGS"
AC_CHECK_HEADERS([X11/extensions/shape.h X11/extensions/Xrender.h X11/extensions/XTest.h],
[X11_A_OK=yes],
[X11_A_OK=no])
CFLAGS="$OLD_CFLAGS"
AC_LANG_POP(C)
if test "x$X11_A_OK" = xno && test "x$X11_NOT_NEEDED" != xyes; then
HELP_MSG_MISSING_DEPENDENCY([x11])
AC_MSG_ERROR([Could not find all X11 headers (shape.h Xrender.h XTest.h). $HELP_MSG])
fi
AC_SUBST(X_CFLAGS)
AC_SUBST(X_LIBS)
])
AC_DEFUN_ONCE([LIB_SETUP_CUPS],
[
###############################################################################
#
# The common unix printing system cups is used to print from java.
#
AC_ARG_WITH(cups, [AS_HELP_STRING([--with-cups],
[specify prefix directory for the cups package
(expecting the libraries under PATH/lib and the headers under PATH/include)])])
AC_ARG_WITH(cups-include, [AS_HELP_STRING([--with-cups-include],
[specify directory for the cups include files])])
AC_ARG_WITH(cups-lib, [AS_HELP_STRING([--with-cups-lib],
[specify directory for the cups library])])
if test "x$CUPS_NOT_NEEDED" = xyes; then
if test "x${with_cups}" != x || test "x${with_cups_include}" != x || test "x${with_cups_lib}" != x; then
AC_MSG_WARN([cups not used, so --with-cups is ignored])
fi
CUPS_CFLAGS=
CUPS_LIBS=
else
CUPS_FOUND=no
if test "x${with_cups}" = xno || test "x${with_cups_include}" = xno || test "x${with_cups_lib}" = xno; then
AC_MSG_ERROR([It is not possible to disable the use of cups. Remove the --without-cups option.])
fi
if test "x${with_cups}" != x; then
CUPS_LIBS="-L${with_cups}/lib -lcups"
CUPS_CFLAGS="-I${with_cups}/include"
CUPS_FOUND=yes
fi
if test "x${with_cups_include}" != x; then
CUPS_CFLAGS="-I${with_cups_include}"
CUPS_FOUND=yes
fi
if test "x${with_cups_lib}" != x; then
CUPS_LIBS="-L${with_cups_lib} -lcups"
CUPS_FOUND=yes
fi
if test "x$CUPS_FOUND" = xno; then
BDEPS_CHECK_MODULE(CUPS, cups, xxx, [CUPS_FOUND=yes])
fi
if test "x$CUPS_FOUND" = xno; then
# Are the cups headers installed in the default /usr/include location?
AC_CHECK_HEADERS([cups/cups.h cups/ppd.h],
[CUPS_FOUND=yes
CUPS_CFLAGS=
CUPS_LIBS="-lcups"
DEFAULT_CUPS=yes])
fi
if test "x$CUPS_FOUND" = xno; then
# Getting nervous now? Lets poke around for standard Solaris third-party
# package installation locations.
AC_MSG_CHECKING([for cups headers and libs])
if test -s /opt/sfw/cups/include/cups/cups.h; then
# An SFW package seems to be installed!
CUPS_FOUND=yes
CUPS_CFLAGS="-I/opt/sfw/cups/include"
CUPS_LIBS="-L/opt/sfw/cups/lib -lcups"
elif test -s /opt/csw/include/cups/cups.h; then
# A CSW package seems to be installed!
CUPS_FOUND=yes
CUPS_CFLAGS="-I/opt/csw/include"
CUPS_LIBS="-L/opt/csw/lib -lcups"
fi
AC_MSG_RESULT([$CUPS_FOUND])
fi
if test "x$CUPS_FOUND" = xno; then
HELP_MSG_MISSING_DEPENDENCY([cups])
AC_MSG_ERROR([Could not find cups! $HELP_MSG ])
fi
fi
AC_SUBST(CUPS_CFLAGS)
AC_SUBST(CUPS_LIBS)
])
AC_DEFUN_ONCE([LIB_SETUP_FREETYPE],
[
###############################################################################
#
# The ubiquitous freetype2 library is used to render fonts.
#
AC_ARG_WITH(freetype, [AS_HELP_STRING([--with-freetype],
[specify prefix directory for the freetype2 package
(expecting the libraries under PATH/lib and the headers under PATH/include)])])
# If we are using the OS installed system lib for freetype, then we do not need to copy it to the build tree
USING_SYSTEM_FT_LIB=false
if test "x$FREETYPE2_NOT_NEEDED" = xyes; then
if test "x$with_freetype" != x || test "x$with_freetype_include" != x || test "x$with_freetype_lib" != x; then
AC_MSG_WARN([freetype not used, so --with-freetype is ignored])
fi
FREETYPE2_CFLAGS=
FREETYPE2_LIBS=
FREETYPE2_LIB_PATH=
else
FREETYPE2_FOUND=no
if test "x$with_freetype" != x; then
SPACESAFE(with_freetype,[the path to freetype])
FREETYPE2_LIBS="-L$with_freetype/lib -lfreetype"
if test "x$OPENJDK_TARGET_OS" = xwindows; then
FREETYPE2_LIBS="$with_freetype/lib/freetype.lib"
fi
FREETYPE2_LIB_PATH="$with_freetype/lib"
FREETYPE2_CFLAGS="-I$with_freetype/include"
if test -s $with_freetype/include/ft2build.h && test -d $with_freetype/include/freetype2/freetype; then
FREETYPE2_CFLAGS="-I$with_freetype/include/freetype2 -I$with_freetype/include"
fi
FREETYPE2_FOUND=yes
if test "x$FREETYPE2_FOUND" = xyes; then
# Verify that the directories exist
if ! test -d "$with_freetype/lib" || ! test -d "$with_freetype/include"; then
AC_MSG_ERROR([Could not find the expected directories $with_freetype/lib and $with_freetype/include])
fi
# List the contents of the lib.
FREETYPELIB=`ls $with_freetype/lib/libfreetype.so $with_freetype/lib/freetype.dll 2> /dev/null`
if test "x$FREETYPELIB" = x; then
AC_MSG_ERROR([Could not find libfreetype.se nor freetype.dll in $with_freetype/lib])
fi
# Check one h-file
if ! test -s "$with_freetype/include/ft2build.h"; then
AC_MSG_ERROR([Could not find $with_freetype/include/ft2build.h])
fi
fi
fi
if test "x$FREETYPE2_FOUND" = xno; then
BDEPS_CHECK_MODULE(FREETYPE2, freetype2, xxx, [FREETYPE2_FOUND=yes], [FREETYPE2_FOUND=no])
USING_SYSTEM_FT_LIB=true
fi
if test "x$FREETYPE2_FOUND" = xno; then
PKG_CHECK_MODULES(FREETYPE2, freetype2, [FREETYPE2_FOUND=yes], [FREETYPE2_FOUND=no])
USING_SYSTEM_FT_LIB=true
fi
if test "x$FREETYPE2_FOUND" = xno; then
AC_MSG_CHECKING([for freetype in some standard locations])
if test -s /usr/X11/include/ft2build.h && test -d /usr/X11/include/freetype2/freetype; then
DEFAULT_FREETYPE_CFLAGS="-I/usr/X11/include/freetype2 -I/usr/X11/include"
DEFAULT_FREETYPE_LIBS="-L/usr/X11/lib -lfreetype"
fi
if test -s /usr/include/ft2build.h && test -d /usr/include/freetype2/freetype; then
DEFAULT_FREETYPE_CFLAGS="-I/usr/include/freetype2"
DEFAULT_FREETYPE_LIBS="-lfreetype"
fi
PREV_CXXCFLAGS="$CXXFLAGS"
PREV_LDFLAGS="$LDFLAGS"
CXXFLAGS="$CXXFLAGS $DEFAULT_FREETYPE_CFLAGS"
LDFLAGS="$LDFLAGS $DEFAULT_FREETYPE_LIBS"
AC_LINK_IFELSE([AC_LANG_SOURCE([[#include<ft2build.h>
#include FT_FREETYPE_H
int main() { return 0; }
]])],
[
# Yes, the default cflags and libs did the trick.
FREETYPE2_FOUND=yes
FREETYPE2_CFLAGS="$DEFAULT_FREETYPE_CFLAGS"
FREETYPE2_LIBS="$DEFAULT_FREETYPE_LIBS"
],
[
FREETYPE2_FOUND=no
])
CXXCFLAGS="$PREV_CXXFLAGS"
LDFLAGS="$PREV_LDFLAGS"
AC_MSG_RESULT([$FREETYPE2_FOUND])
USING_SYSTEM_FT_LIB=true
fi
if test "x$FREETYPE2_FOUND" = xno; then
HELP_MSG_MISSING_DEPENDENCY([freetype2])
AC_MSG_ERROR([Could not find freetype2! $HELP_MSG ])
fi
fi
AC_SUBST(USING_SYSTEM_FT_LIB)
AC_SUBST(FREETYPE2_LIB_PATH)
AC_SUBST(FREETYPE2_CFLAGS)
AC_SUBST(FREETYPE2_LIBS)
])
AC_DEFUN_ONCE([LIB_SETUP_ALSA],
[
###############################################################################
#
# Check for alsa headers and libraries. Used on Linux/GNU systems.
#
AC_ARG_WITH(alsa, [AS_HELP_STRING([--with-alsa],
[specify prefix directory for the alsa package
(expecting the libraries under PATH/lib and the headers under PATH/include)])])
AC_ARG_WITH(alsa-include, [AS_HELP_STRING([--with-alsa-include],
[specify directory for the alsa include files])])
AC_ARG_WITH(alsa-lib, [AS_HELP_STRING([--with-alsa-lib],
[specify directory for the alsa library])])
if test "x$ALSA_NOT_NEEDED" = xyes; then
if test "x${with_alsa}" != x || test "x${with_alsa_include}" != x || test "x${with_alsa_lib}" != x; then
AC_MSG_WARN([alsa not used, so --with-alsa is ignored])
fi
ALSA_CFLAGS=
ALSA_LIBS=
else
ALSA_FOUND=no
if test "x${with_alsa}" = xno || test "x${with_alsa_include}" = xno || test "x${with_alsa_lib}" = xno; then
AC_MSG_ERROR([It is not possible to disable the use of alsa. Remove the --without-alsa option.])
fi
if test "x${with_alsa}" != x; then
ALSA_LIBS="-L${with_alsa}/lib -lalsa"
ALSA_CFLAGS="-I${with_alsa}/include"
ALSA_FOUND=yes
fi
if test "x${with_alsa_include}" != x; then
ALSA_CFLAGS="-I${with_alsa_include}"
ALSA_FOUND=yes
fi
if test "x${with_alsa_lib}" != x; then
ALSA_LIBS="-L${with_alsa_lib} -lalsa"
ALSA_FOUND=yes
fi
if test "x$ALSA_FOUND" = xno; then
BDEPS_CHECK_MODULE(ALSA, alsa, xxx, [ALSA_FOUND=yes], [ALSA_FOUND=no])
fi
if test "x$ALSA_FOUND" = xno; then
PKG_CHECK_MODULES(ALSA, alsa, [ALSA_FOUND=yes], [ALSA_FOUND=no])
fi
if test "x$ALSA_FOUND" = xno; then
AC_CHECK_HEADERS([alsa/asoundlib.h],
[ALSA_FOUND=yes
ALSA_CFLAGS=-Iignoreme
ALSA_LIBS=-lasound
DEFAULT_ALSA=yes],
[ALSA_FOUND=no])
fi
if test "x$ALSA_FOUND" = xno; then
HELP_MSG_MISSING_DEPENDENCY([alsa])
AC_MSG_ERROR([Could not find alsa! $HELP_MSG ])
fi
fi
AC_SUBST(ALSA_CFLAGS)
AC_SUBST(ALSA_LIBS)
])
AC_DEFUN_ONCE([LIB_SETUP_MISC_LIBS],
[
###############################################################################
#
# Check for the jpeg library
#
USE_EXTERNAL_LIBJPEG=true
AC_CHECK_LIB(jpeg, main, [],
[ USE_EXTERNAL_LIBJPEG=false
AC_MSG_NOTICE([Will use jpeg decoder bundled with the OpenJDK source])
])
AC_SUBST(USE_EXTERNAL_LIBJPEG)
###############################################################################
#
# Check for the gif library
#
USE_EXTERNAL_LIBJPEG=true
AC_CHECK_LIB(gif, main, [],
[ USE_EXTERNAL_LIBGIF=false
AC_MSG_NOTICE([Will use gif decoder bundled with the OpenJDK source])
])
AC_SUBST(USE_EXTERNAL_LIBGIF)
###############################################################################
#
# Check for the zlib library
#
AC_ARG_WITH(zlib, [AS_HELP_STRING([--with-zlib],
[use zlib from build system or OpenJDK source (system, bundled) @<:@bundled@:>@])])
AC_CHECK_LIB(z, compress,
[ ZLIB_FOUND=yes ],
[ ZLIB_FOUND=no ])
AC_MSG_CHECKING([for which zlib to use])
DEFAULT_ZLIB=bundled
if test "x$OPENJDK_TARGET_OS" = xmacosx; then
#
# On macosx default is system...on others default is
#
DEFAULT_ZLIB=system
fi
if test "x${ZLIB_FOUND}" != "xyes"; then
#
# If we don't find any system...set default to bundled
#
DEFAULT_ZLIB=bundled
fi
#
# If user didn't specify, use DEFAULT_ZLIB
#
if test "x${with_zlib}" = "x"; then
with_zlib=${DEFAULT_ZLIB}
fi
if test "x${with_zlib}" = "xbundled"; then
USE_EXTERNAL_LIBZ=false
AC_MSG_RESULT([bundled])
elif test "x${with_zlib}" = "xsystem"; then
if test "x${ZLIB_FOUND}" = "xyes"; then
USE_EXTERNAL_LIBZ=true
AC_MSG_RESULT([system])
else
AC_MSG_RESULT([system not found])
AC_MSG_ERROR([--with-zlib=system specified, but no zlib found!])
fi
else
AC_MSG_ERROR([Invalid value for --with-zlib: ${with_zlib}, use 'system' or 'bundled'])
fi
AC_SUBST(USE_EXTERNAL_LIBZ)
###############################################################################
LIBZIP_CAN_USE_MMAP=true
if test "x$JDK_VARIANT" = "xembedded"; then
LIBZIP_CAN_USE_MMAP=false
fi
AC_SUBST(LIBZIP_CAN_USE_MMAP)
###############################################################################
#
# Check if altzone exists in time.h
#
AC_LINK_IFELSE([AC_LANG_PROGRAM([#include <time.h>], [return (int)altzone;])],
[has_altzone=yes],
[has_altzone=no])
if test "x$has_altzone" = xyes; then
AC_DEFINE([HAVE_ALTZONE], 1, [Define if you have the external 'altzone' variable in time.h])
fi
###############################################################################
#
# Check the maths library
#
AC_CHECK_LIB(m, cos, [],
[
AC_MSG_NOTICE([Maths library was not found])
])
AC_SUBST(LIBM)
###############################################################################
#
# Check for libdl.so
save_LIBS="$LIBS"
LIBS=""
AC_CHECK_LIB(dl,dlopen)
LIBDL="$LIBS"
AC_SUBST(LIBDL)
LIBS="$save_LIBS"
])
AC_DEFUN_ONCE([LIB_SETUP_STATIC_LINK_LIBSTDCPP],
[
###############################################################################
#
# statically link libstdc++ before C++ ABI is stablized on Linux unless
# dynamic build is configured on command line.
#
AC_ARG_ENABLE([static-link-stdc++], [AS_HELP_STRING([--disable-static-link-stdc++],
[disable static linking of the C++ runtime on Linux @<:@enabled@:>@])],,
[
enable_static_link_stdc__=yes
])
if test "x$OPENJDK_TARGET_OS" = xlinux; then
# Test if -lstdc++ works.
AC_MSG_CHECKING([if dynamic link of stdc++ is possible])
AC_LANG_PUSH(C++)
OLD_CXXFLAGS="$CXXFLAGS"
CXXFLAGS="$CXXFLAGS -lstdc++"
AC_LINK_IFELSE([AC_LANG_PROGRAM([], [return 0;])],
[has_dynamic_libstdcxx=yes],
[has_dynamic_libstdcxx=no])
CXXFLAGS="$OLD_CXXFLAGS"
AC_LANG_POP(C++)
AC_MSG_RESULT([$has_dynamic_libstdcxx])
# Test if stdc++ can be linked statically.
AC_MSG_CHECKING([if static link of stdc++ is possible])
STATIC_STDCXX_FLAGS="-Wl,-Bstatic -lstdc++ -lgcc -Wl,-Bdynamic"
AC_LANG_PUSH(C++)
OLD_LIBS="$LIBS"
OLD_CXX="$CXX"
LIBS="$STATIC_STDCXX_FLAGS"
CXX="$CC"
AC_LINK_IFELSE([AC_LANG_PROGRAM([], [return 0;])],
[has_static_libstdcxx=yes],
[has_static_libstdcxx=no])
LIBS="$OLD_LIBS"
CXX="$OLD_CXX"
AC_LANG_POP(C++)
AC_MSG_RESULT([$has_static_libstdcxx])
if test "x$has_static_libcxx" = xno && test "x$has_dynamic_libcxx" = xno; then
AC_MSG_ERROR([I cannot link to stdc++! Neither dynamically nor statically.])
fi
if test "x$enable_static_link_stdc__" = xyes && test "x$has_static_libstdcxx" = xno; then
AC_MSG_NOTICE([Static linking of libstdc++ was not possible reverting to dynamic linking.])
enable_static_link_stdc__=no
fi
if test "x$enable_static_link_stdc__" = xno && test "x$has_dynamic_libstdcxx" = xno; then
AC_MSG_NOTICE([Dynamic linking of libstdc++ was not possible reverting to static linking.])
enable_static_link_stdc__=yes
fi
AC_MSG_CHECKING([how to link with libstdc++])
if test "x$enable_static_link_stdc__" = xyes; then
LIBCXX="$LIBCXX $STATIC_STDCXX_FLAGS"
LDCXX="$CC"
AC_MSG_RESULT([static])
else
LIBCXX="$LIBCXX -lstdc++"
LDCXX="$CXX"
AC_MSG_RESULT([dynamic])
fi
fi
# libCrun is the c++ runtime-library with SunStudio (roughly the equivalent of gcc's libstdc++.so)
if test "x$OPENJDK_TARGET_OS" = xsolaris && test "x$LIBCXX" = x; then
LIBCXX="/usr/lib${LEGACY_OPENJDK_TARGET_CPU3}/libCrun.so.1"
fi
# TODO better (platform agnostic) test
if test "x$OPENJDK_TARGET_OS" = xmacosx && test "x$LIBCXX" = x && test "x$GCC" = xyes; then
LIBCXX="-lstdc++"
fi
AC_SUBST(LIBCXX)
])

View File

@ -23,272 +23,59 @@
# questions.
#
AC_DEFUN([CHECK_FIND_DELETE],
[
# Test if find supports -delete
AC_MSG_CHECKING([if find supports -delete])
FIND_DELETE="-delete"
DELETEDIR=`mktemp -d tmp.XXXXXXXXXX` || (echo Could not create temporary directory!; exit $?)
echo Hejsan > $DELETEDIR/TestIfFindSupportsDelete
TEST_DELETE=`$FIND "$DELETEDIR" -name TestIfFindSupportsDelete $FIND_DELETE 2>&1`
if test -f $DELETEDIR/TestIfFindSupportsDelete; then
# No, it does not.
rm $DELETEDIR/TestIfFindSupportsDelete
FIND_DELETE="-exec rm \{\} \+"
AC_MSG_RESULT([no])
else
AC_MSG_RESULT([yes])
fi
rmdir $DELETEDIR
])
AC_DEFUN([CHECK_NONEMPTY],
[
# Test that variable $1 is not empty.
if test "" = "[$]$1"; then AC_MSG_ERROR(Could not find translit($1,A-Z,a-z) !); fi
])
AC_DEFUN([ADD_JVM_ARG_IF_OK],
[
# Test if $1 is a valid argument to $3 (often is $JAVA passed as $3)
# If so, then append $1 to $2
FOUND_WARN=`$3 $1 -version 2>&1 | grep -i warn`
FOUND_VERSION=`$3 $1 -version 2>&1 | grep " version \""`
if test "x$FOUND_VERSION" != x && test "x$FOUND_WARN" = x; then
$2="[$]$2 $1"
fi
])
AC_DEFUN([WHICHCMD],
[
# Translate "gcc -E" into "`which gcc` -E" ie
# extract the full path to the binary and at the
# same time maintain any arguments passed to it.
# The command MUST exist in the path, or else!
tmp="[$]$1"
car="${tmp%% *}"
tmp="[$]$1 EOL"
cdr="${tmp#* }"
# On windows we want paths without spaces.
if test "x$BUILD_OS" = "xwindows"; then
WHICHCMD_SPACESAFE(car)
else
# "which" is not portable, but is used here
# because we know that the command exists!
car=`which $car`
fi
if test "x$cdr" != xEOL; then
$1="$car ${cdr% *}"
else
$1="$car"
fi
])
AC_DEFUN([SPACESAFE],
[
# Fail with message $2 if var $1 contains a path with no spaces in it.
# Unless on Windows, where we can rewrite the path.
HAS_SPACE=`echo "[$]$1" | grep " "`
if test "x$HAS_SPACE" != x; then
if test "x$BUILD_OS" = "xwindows"; then
$1=`$CYGPATH -s -m -a "[$]$1"`
$1=`$CYGPATH -u "[$]$1"`
else
AC_MSG_ERROR([You cannot have spaces in $2! "[$]$1"])
fi
fi
])
AC_DEFUN([WHICHCMD_SPACESAFE],
[
# Translate long cygdrive or C:\sdfsf path
# into a short mixed mode path that has no
# spaces in it.
tmp="[$]$1"
if test "x$BUILD_OS" = "xwindows"; then
tmp=`$CYGPATH -u "[$]$1"`
tmp=`which "$tmp"`
# If file exists with .exe appended, that's the real filename
# and cygpath needs that to convert to short style path.
if test -f "${tmp}.exe"; then
tmp="${tmp}.exe"
elif test -f "${tmp}.cmd"; then
tmp="${tmp}.cmd"
fi
# Convert to C:/ mixed style path without spaces.
tmp=`$CYGPATH -s -m "$tmp"`
fi
$1="$tmp"
])
AC_DEFUN([REMOVE_SYMBOLIC_LINKS],
[
if test "x$BUILD_OS" != xwindows; then
# Follow a chain of symbolic links. Use readlink
# where it exists, else fall back to horribly
# complicated shell code.
AC_PATH_PROG(READLINK, readlink)
if test "x$READLINK_TESTED" != yes; then
# On MacOSX there is a readlink tool with a different
# purpose than the GNU readlink tool. Check the found readlink.
ISGNU=`$READLINK --help 2>&1 | grep GNU`
if test "x$ISGNU" = x; then
# A readlink that we do not know how to use.
# Are there other non-GNU readlinks out there?
READLINK_TESTED=yes
READLINK=
fi
fi
if test "x$READLINK" != x; then
$1=`$READLINK -f [$]$1`
else
STARTDIR=$PWD
COUNTER=0
DIR=`dirname [$]$1`
FIL=`basename [$]$1`
while test $COUNTER -lt 20; do
ISLINK=`ls -l $DIR/$FIL | grep '\->' | sed -e 's/.*-> \(.*\)/\1/'`
if test "x$ISLINK" == x; then
# This is not a symbolic link! We are done!
break
fi
# The link might be relative! We have to use cd to travel safely.
cd $DIR
cd `dirname $ISLINK`
DIR=`pwd`
FIL=`basename $ISLINK`
let COUNTER=COUNTER+1
done
cd $STARTDIR
$1=$DIR/$FIL
fi
fi
])
AC_DEFUN([TESTFOR_PROG_CCACHE],
[
AC_ARG_ENABLE([ccache],
[AS_HELP_STRING([--disable-ccache],
[use ccache to speed up recompilations @<:@enabled@:>@])],
[ENABLE_CCACHE=${enable_ccache}], [ENABLE_CCACHE=yes])
if test "x$ENABLE_CCACHE" = xyes; then
AC_PATH_PROG(CCACHE, ccache)
else
AC_MSG_CHECKING([for ccache])
AC_MSG_RESULT([explicitly disabled])
CCACHE=
fi
AC_SUBST(CCACHE)
AC_ARG_WITH([ccache-dir],
[AS_HELP_STRING([--with-ccache-dir],
[where to store ccache files @<:@~/.ccache@:>@])])
if test "x$with_ccache_dir" != x; then
# When using a non home ccache directory, assume the use is to share ccache files
# with other users. Thus change the umask.
SET_CCACHE_DIR="CCACHE_DIR=$with_ccache_dir CCACHE_UMASK=002"
fi
CCACHE_FOUND=""
if test "x$CCACHE" != x; then
SETUP_CCACHE_USAGE
fi
])
AC_DEFUN([SETUP_CCACHE_USAGE],
[
if test "x$CCACHE" != x; then
CCACHE_FOUND="true"
# Only use ccache if it is 3.1.4 or later, which supports
# precompiled headers.
AC_MSG_CHECKING([if ccache supports precompiled headers])
HAS_GOOD_CCACHE=`($CCACHE --version | head -n 1 | grep -E 3.1.@<:@456789@:>@) 2> /dev/null`
if test "x$HAS_GOOD_CCACHE" = x; then
AC_MSG_RESULT([no, disabling ccache])
CCACHE=
else
AC_MSG_RESULT([yes])
AC_MSG_CHECKING([if C-compiler supports ccache precompiled headers])
PUSHED_FLAGS="$CXXFLAGS"
CXXFLAGS="-fpch-preprocess $CXXFLAGS"
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([], [])], [CC_KNOWS_CCACHE_TRICK=yes], [CC_KNOWS_CCACHE_TRICK=no])
CXXFLAGS="$PUSHED_FLAGS"
if test "x$CC_KNOWS_CCACHE_TRICK" = xyes; then
AC_MSG_RESULT([yes])
else
AC_MSG_RESULT([no, disabling ccaching of precompiled headers])
CCACHE=
fi
fi
fi
if test "x$CCACHE" != x; then
CCACHE_SLOPPINESS=time_macros
CCACHE="CCACHE_COMPRESS=1 $SET_CCACHE_DIR CCACHE_SLOPPINESS=$CCACHE_SLOPPINESS $CCACHE"
CCACHE_FLAGS=-fpch-preprocess
if test "x$SET_CCACHE_DIR" != x; then
mkdir -p $CCACHE_DIR > /dev/null 2>&1
chmod a+rwxs $CCACHE_DIR > /dev/null 2>&1
fi
fi
])
AC_DEFUN([EXTRACT_HOST_AND_BUILD_AND_LEGACY_VARS],
AC_DEFUN([PLATFORM_EXTRACT_TARGET_AND_BUILD_AND_LEGACY_VARS],
[
# Expects $host_os $host_cpu $build_os and $build_cpu
# and $with_data_model to have been setup!
# and $with_target_bits to have been setup!
#
# Translate the standard triplet(quadruplet) definition
# of the host/build system into
# HOST_OS=aix,bsd,hpux,linux,macosx,solaris,windows
# HOST_OS_FAMILY=bsd,gnu,sysv,win32,wince
# HOST_OS_API=posix,winapi
# of the target/build system into
# OPENJDK_TARGET_OS=aix,bsd,hpux,linux,macosx,solaris,windows
# OPENJDK_TARGET_OS_FAMILY=bsd,gnu,sysv,win32,wince
# OPENJDK_TARGET_OS_API=posix,winapi
#
# HOST_CPU=ia32,x64,sparc,sparcv9,arm,arm64,ppc,ppc64
# HOST_CPU_ARCH=x86,sparc,pcc,arm
# HOST_CPU_BITS=32,64
# HOST_CPU_ENDIAN=big,little
# OPENJDK_TARGET_CPU=ia32,x64,sparc,sparcv9,arm,arm64,ppc,ppc64
# OPENJDK_TARGET_CPU_ARCH=x86,sparc,pcc,arm
# OPENJDK_TARGET_CPU_BITS=32,64
# OPENJDK_TARGET_CPU_ENDIAN=big,little
#
# The same values are setup for BUILD_...
#
# And the legacy variables, for controlling the old makefiles.
# LEGACY_HOST_CPU1=i586,amd64/x86_64,sparc,sparcv9,arm,arm64...
# LEGACY_HOST_CPU2=i386,amd64,sparc,sparcv9,arm,arm64...
# LEGACY_HOST_CPU3=sparcv9,amd64 (but only on solaris)
# LEGACY_HOST_OS_API=solaris,windows
# LEGACY_OPENJDK_TARGET_CPU1=i586,amd64/x86_64,sparc,sparcv9,arm,arm64...
# LEGACY_OPENJDK_TARGET_CPU2=i386,amd64,sparc,sparcv9,arm,arm64...
# LEGACY_OPENJDK_TARGET_CPU3=sparcv9,amd64 (but only on solaris)
# LEGACY_OPENJDK_TARGET_OS_API=solaris,windows
#
# We also copy the autoconf trip/quadruplet
# verbatim to HOST and BUILD
AC_SUBST(HOST, ${host})
AC_SUBST(BUILD, ${build})
# verbatim to OPENJDK_TARGET_SYSTEM (from the autoconf "host") and OPENJDK_BUILD_SYSTEM
OPENJDK_TARGET_SYSTEM="$host"
OPENJDK_BUILD_SYSTEM="$build"
AC_SUBST(OPENJDK_TARGET_SYSTEM)
AC_SUBST(OPENJDK_BUILD_SYSTEM)
EXTRACT_VARS_FROM_OS_TO(HOST,$host_os)
EXTRACT_VARS_FROM_CPU_TO(HOST,$host_cpu)
PLATFORM_EXTRACT_VARS_FROM_OS_TO(OPENJDK_TARGET,$host_os)
PLATFORM_EXTRACT_VARS_FROM_CPU_TO(OPENJDK_TARGET,$host_cpu)
EXTRACT_VARS_FROM_OS_TO(BUILD,$build_os)
EXTRACT_VARS_FROM_CPU_TO(BUILD,$build_cpu)
PLATFORM_EXTRACT_VARS_FROM_OS_TO(OPENJDK_BUILD,$build_os)
PLATFORM_EXTRACT_VARS_FROM_CPU_TO(OPENJDK_BUILD,$build_cpu)
if test "x$HOST_OS" != xsolaris; then
LEGACY_HOST_CPU3=""
LEGACY_BUILD_CPU3=""
if test "x$OPENJDK_TARGET_OS" != xsolaris; then
LEGACY_OPENJDK_TARGET_CPU3=""
LEGACY_OPENJDK_BUILD_CPU3=""
fi
# On MacOSX and MacOSX only, we have a different name for the x64 CPU in ARCH (LEGACY_HOST_CPU1) ...
if test "x$HOST_OS" = xmacosx && test "x$HOST_CPU" = xx64; then
LEGACY_HOST_CPU1="x86_64"
# On MacOSX and MacOSX only, we have a different name for the x64 CPU in ARCH (LEGACY_OPENJDK_TARGET_CPU1) ...
if test "x$OPENJDK_TARGET_OS" = xmacosx && test "x$OPENJDK_TARGET_CPU" = xx64; then
LEGACY_OPENJDK_TARGET_CPU1="x86_64"
fi
SET_RELEASE_FILE_OS_VALUES()
PLATFORM_SET_RELEASE_FILE_OS_VALUES
])
AC_DEFUN([EXTRACT_VARS_FROM_OS_TO],
AC_DEFUN([PLATFORM_EXTRACT_VARS_FROM_OS_TO],
[
EXTRACT_VARS_FROM_OS($2)
PLATFORM_EXTRACT_VARS_FROM_OS($2)
$1_OS="$VAR_OS"
$1_OS_FAMILY="$VAR_OS_FAMILY"
$1_OS_API="$VAR_OS_API"
@ -306,9 +93,9 @@ AC_DEFUN([EXTRACT_VARS_FROM_OS_TO],
AC_SUBST(LEGACY_$1_OS_API)
])
AC_DEFUN([EXTRACT_VARS_FROM_CPU_TO],
AC_DEFUN([PLATFORM_EXTRACT_VARS_FROM_CPU_TO],
[
EXTRACT_VARS_FROM_CPU($2)
PLATFORM_EXTRACT_VARS_FROM_CPU($2)
$1_CPU="$VAR_CPU"
$1_CPU_ARCH="$VAR_CPU_ARCH"
$1_CPU_BITS="$VAR_CPU_BITS"
@ -339,12 +126,12 @@ AC_DEFUN([EXTRACT_VARS_FROM_CPU_TO],
LEGACY_$1_CPU3=amd64
fi
if test "x$$1_CPU" = xsparcv9; then
LEGACY_$1_CPU3=sparvc9
LEGACY_$1_CPU3=sparcv9
fi
AC_SUBST(LEGACY_$1_CPU3)
])
AC_DEFUN([EXTRACT_VARS_FROM_CPU],
AC_DEFUN([PLATFORM_EXTRACT_VARS_FROM_CPU],
[
# First argument is the cpu name from the trip/quad
case "$1" in
@ -372,8 +159,8 @@ AC_DEFUN([EXTRACT_VARS_FROM_CPU],
arm*)
VAR_CPU=arm
VAR_CPU_ARCH=arm
VAR_CPU_BITS=3264
VAR_CPU_ENDIAN=big
VAR_CPU_BITS=32
VAR_CPU_ENDIAN=little
VAR_LEGACY_CPU=arm
;;
mips)
@ -401,7 +188,7 @@ AC_DEFUN([EXTRACT_VARS_FROM_CPU],
VAR_CPU=ppc64
VAR_CPU_ARCH=ppc
VAR_CPU_BITS=64
VAR_CPU_ENDIAN=32
VAR_CPU_ENDIAN=big
VAR_LEGACY_CPU=ppc64
;;
sparc)
@ -416,7 +203,7 @@ AC_DEFUN([EXTRACT_VARS_FROM_CPU],
VAR_CPU_ARCH=sparc
VAR_CPU_BITS=64
VAR_CPU_ENDIAN=big
VAR_LEGACY_CPU=sparc_sparcv9
VAR_LEGACY_CPU=sparcv9
;;
s390)
VAR_CPU=s390
@ -452,21 +239,37 @@ AC_DEFUN([EXTRACT_VARS_FROM_CPU],
fi
fi
# on solaris x86...default seems to be 32-bit
if test "x$VAR_OS" = "xsolaris" && \
test "x$with_target_bits" = "x" && \
test "x$VAR_CPU_ARCH" = "xx86"
then
with_target_bits=32
fi
if test "x$VAR_CPU_ARCH" = "xx86"; then
if test "x$with_data_model" = "x64"; then
if test "x$with_target_bits" = "x64"; then
VAR_CPU=x64
VAR_CPU_BITS=64
VAR_LEGACY_CPU=amd64
fi
if test "x$with_data_model" = "x32"; then
if test "x$with_target_bits" = "x32"; then
VAR_CPU=ia32
VAR_CPU_BITS=32
VAR_LEGACY_CPU=i586
fi
fi
if test "x$VAR_CPU_ARCH" = "xsparc"; then
if test "x$with_target_bits" = "x64"; then
VAR_CPU=sparcv9
VAR_CPU_BITS=64
VAR_LEGACY_CPU=sparcv9
fi
fi
])
AC_DEFUN([EXTRACT_VARS_FROM_OS],
AC_DEFUN([PLATFORM_EXTRACT_VARS_FROM_OS],
[
case "$1" in
*linux*)
@ -495,49 +298,26 @@ AC_DEFUN([EXTRACT_VARS_FROM_OS],
VAR_OS_FAMILY=windows
;;
*)
AC_MSG_ERROR([unsupported host operating system $1])
AC_MSG_ERROR([unsupported operating system $1])
;;
esac
])
AC_DEFUN([CHECK_COMPILER_VERSION],
AC_DEFUN([PLATFORM_SET_RELEASE_FILE_OS_VALUES],
[
# Test the compilers that their versions are new enough.
# AC_MSG_CHECKING([version of GCC])
gcc_ver=`${CC} -dumpversion`
gcc_major_ver=`echo ${gcc_ver}|cut -d'.' -f1`
gcc_minor_ver=`echo ${gcc_ver}|cut -d'.' -f2`
# AM_CONDITIONAL(GCC_OLD, test ! ${gcc_major_ver} -ge 4 -a ${gcc_minor_ver} -ge 3)
# AC_MSG_RESULT([${gcc_ver} (major version ${gcc_major_ver}, minor version ${gcc_minor_ver})])
])
# Fixes paths on windows hosts to be mixed mode short.
AC_DEFUN([WIN_FIX_PATH],
[
if test "x$BUILD_OS" = "xwindows"; then
AC_PATH_PROG(CYGPATH, cygpath)
tmp="[$]$1"
# Convert to C:/ mixed style path without spaces.
tmp=`$CYGPATH -s -m "$tmp"`
$1="$tmp"
fi
])
AC_DEFUN([SET_RELEASE_FILE_OS_VALUES],
[
if test "x$HOST_OS" = "xsolaris"; then
if test "x$OPENJDK_TARGET_OS" = "xsolaris"; then
REQUIRED_OS_NAME=SunOS
REQUIRED_OS_VERSION=5.10
fi
if test "x$HOST_OS" = "xlinux"; then
if test "x$OPENJDK_TARGET_OS" = "xlinux"; then
REQUIRED_OS_NAME=Linux
REQUIRED_OS_VERSION=2.6
fi
if test "x$HOST_OS" = "xwindows"; then
if test "x$OPENJDK_TARGET_OS" = "xwindows"; then
REQUIRED_OS_NAME=Windows
REQUIRED_OS_VERSION=5.1
fi
if test "x$HOST_OS" = "xmacosx"; then
if test "x$OPENJDK_TARGET_OS" = "xmacosx"; then
REQUIRED_OS_NAME=Darwin
REQUIRED_OS_VERSION=11.2
fi
@ -545,3 +325,174 @@ AC_DEFUN([SET_RELEASE_FILE_OS_VALUES],
AC_SUBST(REQUIRED_OS_NAME)
AC_SUBST(REQUIRED_OS_VERSION)
])
#%%% Build and target systems %%%
AC_DEFUN_ONCE([PLATFORM_SETUP_OPENJDK_BUILD_AND_TARGET],
[
# Figure out the build and target systems. # Note that in autoconf terminology, "build" is obvious, but "target"
# is confusing; it assumes you are cross-compiling a cross-compiler (!) and "target" is thus the target of the
# product you're building. The target of this build is called "host". Since this is confusing to most people, we
# have not adopted that system, but use "target" as the platform we are building for. In some places though we need
# to use the configure naming style.
AC_CANONICAL_BUILD
AC_CANONICAL_HOST
AC_CANONICAL_TARGET
AC_ARG_WITH(target-bits, [AS_HELP_STRING([--with-target-bits],
[build 32-bit or 64-bit binaries (for platforms that support it), e.g. --with-target-bits=32 @<:@guessed@:>@])])
if test "x$with_target_bits" != x && \
test "x$with_target_bits" != x32 && \
test "x$with_target_bits" != x64 ; then
AC_MSG_ERROR([--with-target-bits can only be 32 or 64, you specified $with_target_bits!])
fi
# Translate the standard cpu-vendor-kernel-os quadruplets into
# the new TARGET_.... and BUILD_... and the legacy names used by
# the openjdk build.
# It uses $host_os $host_cpu $build_os $build_cpu and $with_target_bits
PLATFORM_EXTRACT_TARGET_AND_BUILD_AND_LEGACY_VARS
# The LEGACY_OPENJDK_TARGET_CPU3 is the setting for ISA_DIR.
if test "x$LEGACY_OPENJDK_TARGET_CPU3" != x; then
LEGACY_OPENJDK_TARGET_CPU3="/${LEGACY_OPENJDK_TARGET_CPU3}"
fi
# Now the following vars are defined.
# OPENJDK_TARGET_OS=aix,bsd,hpux,linux,macosx,solaris,windows
# OPENJDK_TARGET_OS_FAMILY=bsd,gnu,sysv,win32,wince
# OPENJDK_TARGET_OS_API=posix,winapi
#
# OPENJDK_TARGET_CPU=ia32,x64,sparc,sparcv9,arm,arm64,ppc,ppc64
# OPENJDK_TARGET_CPU_ARCH=x86,sparc,pcc,arm
# OPENJDK_TARGET_CPU_BITS=32,64
# OPENJDK_TARGET_CPU_ENDIAN=big,little
#
# There is also a:
# LEGACY_OPENJDK_TARGET_CPU1=i586,amd64,.... # used to set the old var ARCH
# LEGACY_OPENJDK_TARGET_CPU2=i386,amd64,.... # used to set the old var LIBARCH
# LEGACY_OPENJDK_TARGET_CPU3=only sparcv9,amd64 # used to set the ISA_DIR on Solaris
# There was also a BUILDARCH that had i486,amd64,... but we do not use that
# in the new build.
# LEGACY_OPENJDK_TARGET_OS_API=solaris,windows # used to select source roots
])
AC_DEFUN_ONCE([PLATFORM_SETUP_OPENJDK_BUILD_OS_VERSION],
[
###############################################################################
# Note that this is the build platform OS version!
OS_VERSION="`uname -r | ${SED} 's!\.! !g' | ${SED} 's!-! !g'`"
OS_VERSION_MAJOR="`${ECHO} ${OS_VERSION} | ${CUT} -f 1 -d ' '`"
OS_VERSION_MINOR="`${ECHO} ${OS_VERSION} | ${CUT} -f 2 -d ' '`"
OS_VERSION_MICRO="`${ECHO} ${OS_VERSION} | ${CUT} -f 3 -d ' '`"
AC_SUBST(OS_VERSION_MAJOR)
AC_SUBST(OS_VERSION_MINOR)
AC_SUBST(OS_VERSION_MICRO)
])
AC_DEFUN_ONCE([PLATFORM_TEST_OPENJDK_TARGET_BITS],
[
###############################################################################
#
# Now we check if libjvm.so will use 32 or 64 bit pointers for the C/C++ code.
# (The JVM can use 32 or 64 bit Java pointers but that decision
# is made at runtime.)
#
AC_LANG_PUSH(C++)
OLD_CXXFLAGS="$CXXFLAGS"
if test "x$OPENJDK_TARGET_OS" != xwindows && test "x$with_target_bits" != x; then
CXXFLAGS="-m${with_target_bits} $CXXFLAGS"
fi
AC_CHECK_SIZEOF([int *], [1111])
CXXFLAGS="$OLD_CXXFLAGS"
AC_LANG_POP(C++)
# keep track of c/cxx flags that we added outselves...
# to prevent emitting warning...
ADDED_CFLAGS=
ADDED_CXXFLAGS=
ADDED_LDFLAGS=
if test "x$ac_cv_sizeof_int_p" = x0; then
# The test failed, lets pick the assumed value.
ARCH_DATA_MODEL=$OPENJDK_TARGET_CPU_BITS
else
ARCH_DATA_MODEL=`expr 8 \* $ac_cv_sizeof_int_p`
if test "x$OPENJDK_TARGET_OS" != xwindows && test "x$with_target_bits" != x; then
ADDED_CFLAGS=" -m${with_target_bits}"
ADDED_CXXFLAGS=" -m${with_target_bits}"
ADDED_LDFLAGS=" -m${with_target_bits}"
CFLAGS="${CFLAGS}${ADDED_CFLAGS}"
CXXFLAGS="${CXXFLAGS}${ADDED_CXXFLAGS}"
LDFLAGS="${LDFLAGS}${ADDED_LDFLAGS}"
CFLAGS_JDK="${CFLAGS_JDK}${ADDED_CFLAGS}"
CXXFLAGS_JDK="${CXXFLAGS_JDK}${ADDED_CXXFLAGS}"
LDFLAGS_JDK="${LDFLAGS_JDK}${ADDED_LDFLAGS}"
fi
fi
if test "x$ARCH_DATA_MODEL" = x64; then
A_LP64="LP64:="
ADD_LP64="-D_LP64=1"
fi
AC_MSG_CHECKING([for target address size])
AC_MSG_RESULT([$ARCH_DATA_MODEL bits])
AC_SUBST(LP64,$A_LP64)
AC_SUBST(ARCH_DATA_MODEL)
if test "x$ARCH_DATA_MODEL" != "x$OPENJDK_TARGET_CPU_BITS"; then
AC_MSG_ERROR([The tested number of bits in the target ($ARCH_DATA_MODEL) differs from the number of bits expected to be found in the target ($OPENJDK_TARGET_CPU_BITS)])
fi
#
# NOTE: check for -mstackrealign needs to be below potential addition of -m32
#
if test "x$OPENJDK_TARGET_CPU_BITS" = x32 && test "x$OPENJDK_TARGET_OS" = xmacosx; then
# On 32-bit MacOSX the OS requires C-entry points to be 16 byte aligned.
# While waiting for a better solution, the current workaround is to use -mstackrealign.
CFLAGS="$CFLAGS -mstackrealign"
AC_MSG_CHECKING([if 32-bit compiler supports -mstackrealign])
AC_LINK_IFELSE([AC_LANG_SOURCE([[int main() { return 0; }]])],
[
AC_MSG_RESULT([yes])
],
[
AC_MSG_RESULT([no])
AC_MSG_ERROR([The selected compiler $CXX does not support -mstackrealign! Try to put another compiler in the path.])
])
fi
])
AC_DEFUN_ONCE([PLATFORM_SETUP_OPENJDK_TARGET_ENDIANNESS],
[
###############################################################################
#
# Is the target little of big endian?
#
AC_C_BIGENDIAN([ENDIAN="big"],[ENDIAN="little"],[ENDIAN="unknown"],[ENDIAN="universal_endianness"])
if test "x$ENDIAN" = xuniversal_endianness; then
AC_MSG_ERROR([Building with both big and little endianness is not supported])
fi
if test "x$ENDIAN" = xunknown; then
ENDIAN="$OPENJDK_TARGET_CPU_ENDIAN"
fi
if test "x$ENDIAN" != "x$OPENJDK_TARGET_CPU_ENDIAN"; then
AC_MSG_WARN([The tested endian in the target ($ENDIAN) differs from the endian expected to be found in the target ($OPENJDK_TARGET_CPU_ENDIAN)])
ENDIAN="$OPENJDK_TARGET_CPU_ENDIAN"
fi
AC_SUBST(ENDIAN)
])
AC_DEFUN_ONCE([PLATFORM_SETUP_OPENJDK_TARGET_ISADIR],
[
###############################################################################
#
# Could someone enlighten this configure script with a comment about libCrun?
#
#
])

View File

@ -0,0 +1,280 @@
#
# Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved.
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
#
# This code is free software; you can redistribute it and/or modify it
# under the terms of the GNU General Public License version 2 only, as
# published by the Free Software Foundation. Oracle designates this
# particular file as subject to the "Classpath" exception as provided
# by Oracle in the LICENSE file that accompanied this code.
#
# This code is distributed in the hope that it will be useful, but WITHOUT
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
# version 2 for more details (a copy is included in the LICENSE file that
# accompanied this code).
#
# You should have received a copy of the GNU General Public License version
# 2 along with this work; if not, write to the Free Software Foundation,
# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
#
# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
# or visit www.oracle.com if you need additional information or have any
# questions.
#
AC_DEFUN_ONCE([SRCDIRS_SETUP_TOPDIRS],
[
# Where are the sources. Any of these can be overridden
# using --with-override-corba and the likes.
LANGTOOLS_TOPDIR="$SRC_ROOT/langtools"
CORBA_TOPDIR="$SRC_ROOT/corba"
JAXP_TOPDIR="$SRC_ROOT/jaxp"
JAXWS_TOPDIR="$SRC_ROOT/jaxws"
HOTSPOT_TOPDIR="$SRC_ROOT/hotspot"
JDK_TOPDIR="$SRC_ROOT/jdk"
AC_SUBST(LANGTOOLS_TOPDIR)
AC_SUBST(CORBA_TOPDIR)
AC_SUBST(JAXP_TOPDIR)
AC_SUBST(JAXWS_TOPDIR)
AC_SUBST(HOTSPOT_TOPDIR)
AC_SUBST(JDK_TOPDIR)
])
AC_DEFUN_ONCE([SRCDIRS_SETUP_ALTERNATIVE_TOPDIRS],
[
###############################################################################
#
# Pickup additional source for a component from outside of the source root
# or override source for a component.
#
AC_ARG_WITH(add-source-root, [AS_HELP_STRING([--with-add-source-root],
[for each and every source directory, look in this additional source root for
the same directory; if it exists and have files in it, include it in the build])])
AC_ARG_WITH(override-source-root, [AS_HELP_STRING([--with-override-source-root],
[for each and every source directory, look in this override source root for
the same directory; if it exists, use that directory instead and
ignore the directory in the original source root])])
AC_ARG_WITH(adds-and-overrides, [AS_HELP_STRING([--with-adds-and-overrides],
[use the subdirs 'adds' and 'overrides' in the specified directory as
add-source-root and override-source-root])])
if test "x$with_adds_and_overrides" != x; then
with_add_source_root="$with_adds_and_overrides/adds"
with_override_source_root="$with_adds_and_overrides/overrides"
fi
if test "x$with_add_source_root" != x; then
if ! test -d $with_add_source_root; then
AC_MSG_ERROR([Trying to use a non-existant add-source-root $with_add_source_root])
fi
CURDIR="$PWD"
cd "$with_add_source_root"
ADD_SRC_ROOT="`pwd`"
cd "$CURDIR"
# Verify that the addon source root does not have any root makefiles.
# If it does, then it is usually an error, prevent this.
if test -f $with_add_source_root/langtools/makefiles/Makefile || \
test -f $with_add_source_root/langtools/make/Makefile; then
AC_MSG_ERROR([Your add source root seems to contain a full langtools repo! An add source root should only contain additional sources.])
fi
if test -f $with_add_source_root/corba/makefiles/Makefile || \
test -f $with_add_source_root/corba/make/Makefile; then
AC_MSG_ERROR([Your add source root seems to contain a full corba repo! An add source root should only contain additional sources.])
fi
if test -f $with_add_source_root/jaxp/makefiles/Makefile || \
test -f $with_add_source_root/jaxp/make/Makefile; then
AC_MSG_ERROR([Your add source root seems to contain a full jaxp repo! An add source root should only contain additional sources.])
fi
if test -f $with_add_source_root/jaxws/makefiles/Makefile || \
test -f $with_add_source_root/jaxws/make/Makefile; then
AC_MSG_ERROR([Your add source root seems to contain a full jaxws repo! An add source root should only contain additional sources.])
fi
if test -f $with_add_source_root/hotspot/makefiles/Makefile || \
test -f $with_add_source_root/hotspot/make/Makefile; then
AC_MSG_ERROR([Your add source root seems to contain a full hotspot repo! An add source root should only contain additional sources.])
fi
if test -f $with_add_source_root/jdk/makefiles/Makefile || \
test -f $with_add_source_root/jdk/make/Makefile; then
AC_MSG_ERROR([Your add source root seems to contain a full JDK repo! An add source root should only contain additional sources.])
fi
fi
AC_SUBST(ADD_SRC_ROOT)
if test "x$with_override_source_root" != x; then
if ! test -d $with_override_source_root; then
AC_MSG_ERROR([Trying to use a non-existant override-source-root $with_override_source_root])
fi
CURDIR="$PWD"
cd "$with_override_source_root"
OVERRIDE_SRC_ROOT="`pwd`"
cd "$CURDIR"
if test -f $with_override_source_root/langtools/makefiles/Makefile || \
test -f $with_override_source_root/langtools/make/Makefile; then
AC_MSG_ERROR([Your override source root seems to contain a full langtools repo! An override source root should only contain sources that override.])
fi
if test -f $with_override_source_root/corba/makefiles/Makefile || \
test -f $with_override_source_root/corba/make/Makefile; then
AC_MSG_ERROR([Your override source root seems to contain a full corba repo! An override source root should only contain sources that override.])
fi
if test -f $with_override_source_root/jaxp/makefiles/Makefile || \
test -f $with_override_source_root/jaxp/make/Makefile; then
AC_MSG_ERROR([Your override source root seems to contain a full jaxp repo! An override source root should only contain sources that override.])
fi
if test -f $with_override_source_root/jaxws/makefiles/Makefile || \
test -f $with_override_source_root/jaxws/make/Makefile; then
AC_MSG_ERROR([Your override source root seems to contain a full jaxws repo! An override source root should only contain sources that override.])
fi
if test -f $with_override_source_root/hotspot/makefiles/Makefile || \
test -f $with_override_source_root/hotspot/make/Makefile; then
AC_MSG_ERROR([Your override source root seems to contain a full hotspot repo! An override source root should only contain sources that override.])
fi
if test -f $with_override_source_root/jdk/makefiles/Makefile || \
test -f $with_override_source_root/jdk/make/Makefile; then
AC_MSG_ERROR([Your override source root seems to contain a full JDK repo! An override source root should only contain sources that override.])
fi
fi
AC_SUBST(OVERRIDE_SRC_ROOT)
###############################################################################
#
# Override a repo completely, this is used for example when you have 3 small
# development sandboxes of the langtools sources and want to avoid having 3 full
# OpenJDK sources checked out on disk.
#
# Assuming that the 3 langtools sandboxes are located here:
# /home/fredrik/sandbox1/langtools
# /home/fredrik/sandbox2/langtools
# /home/fredrik/sandbox3/langtools
#
# From the source root you create build subdirs manually:
# mkdir -p build1 build2 build3
# in each build directory run:
# (cd build1 && ../configure --with-override-langtools=/home/fredrik/sandbox1 && make)
# (cd build2 && ../configure --with-override-langtools=/home/fredrik/sandbox2 && make)
# (cd build3 && ../configure --with-override-langtools=/home/fredrik/sandbox3 && make)
#
AC_ARG_WITH(override-langtools, [AS_HELP_STRING([--with-override-langtools],
[use this langtools dir for the build])])
AC_ARG_WITH(override-corba, [AS_HELP_STRING([--with-override-corba],
[use this corba dir for the build])])
AC_ARG_WITH(override-jaxp, [AS_HELP_STRING([--with-override-jaxp],
[use this jaxp dir for the build])])
AC_ARG_WITH(override-jaxws, [AS_HELP_STRING([--with-override-jaxws],
[use this jaxws dir for the build])])
AC_ARG_WITH(override-hotspot, [AS_HELP_STRING([--with-override-hotspot],
[use this hotspot dir for the build])])
AC_ARG_WITH(override-jdk, [AS_HELP_STRING([--with-override-jdk],
[use this jdk dir for the build])])
if test "x$with_override_langtools" != x; then
CURDIR="$PWD"
cd "$with_override_langtools"
LANGTOOLS_TOPDIR="`pwd`"
cd "$CURDIR"
if ! test -f $LANGTOOLS_TOPDIR/makefiles/Makefile; then
AC_MSG_ERROR([You have to override langtools with a full langtools repo!])
fi
AC_MSG_CHECKING([if langtools should be overridden])
AC_MSG_RESULT([yes with $LANGTOOLS_TOPDIR])
fi
if test "x$with_override_corba" != x; then
CURDIR="$PWD"
cd "$with_override_corba"
CORBA_TOPDIR="`pwd`"
cd "$CURDIR"
if ! test -f $CORBA_TOPDIR/makefiles/Makefile; then
AC_MSG_ERROR([You have to override corba with a full corba repo!])
fi
AC_MSG_CHECKING([if corba should be overridden])
AC_MSG_RESULT([yes with $CORBA_TOPDIR])
fi
if test "x$with_override_jaxp" != x; then
CURDIR="$PWD"
cd "$with_override_jaxp"
JAXP_TOPDIR="`pwd`"
cd "$CURDIR"
if ! test -f $JAXP_TOPDIR/makefiles/Makefile; then
AC_MSG_ERROR([You have to override jaxp with a full jaxp repo!])
fi
AC_MSG_CHECKING([if jaxp should be overridden])
AC_MSG_RESULT([yes with $JAXP_TOPDIR])
fi
if test "x$with_override_jaxws" != x; then
CURDIR="$PWD"
cd "$with_override_jaxws"
JAXWS_TOPDIR="`pwd`"
cd "$CURDIR"
if ! test -f $JAXWS_TOPDIR/makefiles/Makefile; then
AC_MSG_ERROR([You have to override jaxws with a full jaxws repo!])
fi
AC_MSG_CHECKING([if jaxws should be overridden])
AC_MSG_RESULT([yes with $JAXWS_TOPDIR])
fi
if test "x$with_override_hotspot" != x; then
CURDIR="$PWD"
cd "$with_override_hotspot"
HOTSPOT_TOPDIR="`pwd`"
cd "$CURDIR"
if ! test -f $HOTSPOT_TOPDIR/make/Makefile && \
! test -f $HOTSPOT_TOPDIR/makefiles/Makefile; then
AC_MSG_ERROR([You have to override hotspot with a full hotspot repo!])
fi
AC_MSG_CHECKING([if hotspot should be overridden])
AC_MSG_RESULT([yes with $HOTSPOT_TOPDIR])
fi
if test "x$with_override_jdk" != x; then
CURDIR="$PWD"
cd "$with_override_jdk"
JDK_TOPDIR="`pwd`"
cd "$CURDIR"
if ! test -f $JDK_TOPDIR/makefiles/Makefile; then
AC_MSG_ERROR([You have to override JDK with a full JDK repo!])
fi
AC_MSG_CHECKING([if JDK should be overridden])
AC_MSG_RESULT([yes with $JDK_TOPDIR])
fi
])
AC_DEFUN_ONCE([SRCDIRS_SETUP_OUTPUT_DIRS],
[
LANGTOOLS_OUTPUTDIR="$OUTPUT_ROOT/langtools"
CORBA_OUTPUTDIR="$OUTPUT_ROOT/corba"
JAXP_OUTPUTDIR="$OUTPUT_ROOT/jaxp"
JAXWS_OUTPUTDIR="$OUTPUT_ROOT/jaxws"
HOTSPOT_OUTPUTDIR="$OUTPUT_ROOT/hotspot"
JDK_OUTPUTDIR="$OUTPUT_ROOT/jdk"
IMAGES_OUTPUTDIR="$OUTPUT_ROOT/images"
AC_SUBST(LANGTOOLS_OUTPUTDIR)
AC_SUBST(CORBA_OUTPUTDIR)
AC_SUBST(JAXP_OUTPUTDIR)
AC_SUBST(JAXWS_OUTPUTDIR)
AC_SUBST(HOTSPOT_OUTPUTDIR)
AC_SUBST(JDK_OUTPUTDIR)
AC_SUBST(IMAGES_OUTPUTDIR)
LANGTOOLS_DIST="$OUTPUT_ROOT/langtools/dist"
CORBA_DIST="$OUTPUT_ROOT/corba/dist"
JAXP_DIST="$OUTPUT_ROOT/jaxp/dist"
JAXWS_DIST="$OUTPUT_ROOT/jaxws/dist"
HOTSPOT_DIST="$OUTPUT_ROOT/hotspot/dist"
AC_SUBST(LANGTOOLS_DIST)
AC_SUBST(CORBA_DIST)
AC_SUBST(JAXP_DIST)
AC_SUBST(JAXWS_DIST)
AC_SUBST(HOTSPOT_DIST)
])

View File

@ -23,8 +23,8 @@
# questions.
#
# Configured @DATE_WHEN_CONFIGURED@ to build for a @HOST@ system,
# using ./configure @CONFIGURE_COMMAND_LINE@
# Configured @DATE_WHEN_CONFIGURED@ to build for a @OPENJDK_TARGET_SYSTEM@ system,
# using 'configure @CONFIGURE_COMMAND_LINE@'
# When calling macros, the spaces between arguments are
# often semantically important! Sometimes we need to subst
@ -67,48 +67,50 @@ SPEC:=@SPEC@
# The "human readable" name of this configuration
CONF_NAME:=@CONF_NAME@
# The built jdk will run in this host system.
HOST:=@HOST@
HOST_OS:=@HOST_OS@
HOST_OS_FAMILY:=@HOST_OS_FAMILY@
HOST_OS_API:=@HOST_OS_API@
# The built jdk will run in this target system.
OPENJDK_TARGET_SYSTEM:=@OPENJDK_TARGET_SYSTEM@
HOST_CPU:=@HOST_CPU@
HOST_CPU_ARCH:=@HOST_CPU_ARCH@
HOST_CPU_BITS:=@HOST_CPU_BITS@
HOST_CPU_ENDIAN:=@HOST_CPU_ENDIAN@
OPENJDK_TARGET_OS:=@OPENJDK_TARGET_OS@
OPENJDK_TARGET_OS_FAMILY:=@OPENJDK_TARGET_OS_FAMILY@
OPENJDK_TARGET_OS_API:=@OPENJDK_TARGET_OS_API@
OPENJDK_TARGET_CPU:=@OPENJDK_TARGET_CPU@
OPENJDK_TARGET_CPU_ARCH:=@OPENJDK_TARGET_CPU_ARCH@
OPENJDK_TARGET_CPU_BITS:=@OPENJDK_TARGET_CPU_BITS@
OPENJDK_TARGET_CPU_ENDIAN:=@OPENJDK_TARGET_CPU_ENDIAN@
# We are building on this build system.
# When not cross-compiling, it is the same as the host.
BUILD:=@BUILD@
BUILD_OS:=@BUILD_OS@
BUILD_OS_FAMILY:=@BUILD_OS_FAMILY@
BUILD_OS_API:=@BUILD_OS_API@
# When not cross-compiling, it is the same as the target.
OPENJDK_BUILD_SYSTEM:=@OPENJDK_BUILD_SYSTEM@
BUILD_CPU:=@BUILD_CPU@
BUILD_CPU_ARCH:=@BUILD_CPU_ARCH@
BUILD_CPU_BITS:=@BUILD_CPU_BITS@
BUILD_CPU_ENDIAN:=@BUILD_CPU_ENDIAN@
OPENJDK_BUILD_OS:=@OPENJDK_BUILD_OS@
OPENJDK_BUILD_OS_FAMILY:=@OPENJDK_BUILD_OS_FAMILY@
OPENJDK_BUILD_OS_API:=@OPENJDK_BUILD_OS_API@
OPENJDK_BUILD_CPU:=@OPENJDK_BUILD_CPU@
OPENJDK_BUILD_CPU_ARCH:=@OPENJDK_BUILD_CPU_ARCH@
OPENJDK_BUILD_CPU_BITS:=@OPENJDK_BUILD_CPU_BITS@
OPENJDK_BUILD_CPU_ENDIAN:=@OPENJDK_BUILD_CPU_ENDIAN@
# Legacy OS values for use in release file.
REQUIRED_OS_NAME:=@REQUIRED_OS_NAME@
REQUIRED_OS_VERSION:=@REQUIRED_OS_VERSION@
# Old name for HOST_OS (aix,bsd,hpux,linux,macosx,solaris,windows etc)
PLATFORM:=@HOST_OS@
# Old name for HOST_CPU, uses i586 and amd64, instead of ia32 and x64.
ARCH:=@LEGACY_HOST_CPU1@
# Old name for OPENJDK_TARGET_OS (aix,bsd,hpux,linux,macosx,solaris,windows etc)
PLATFORM:=@OPENJDK_TARGET_OS@
# Old name for OPENJDK_TARGET_CPU, uses i586 and amd64, instead of ia32 and x64.
ARCH:=@LEGACY_OPENJDK_TARGET_CPU1@
# Yet another name for arch used for an extra subdir below the jvm lib.
# Uses i386 and amd64, instead of ia32 and x64.
LIBARCH:=@LEGACY_HOST_CPU2@
LIBARCH:=@LEGACY_OPENJDK_TARGET_CPU2@
# Use to switch between solaris and windows subdirs in the jdk.
LEGACY_HOST_OS_API:=@LEGACY_HOST_OS_API@
LEGACY_OPENJDK_TARGET_OS_API:=@LEGACY_OPENJDK_TARGET_OS_API@
# 32 or 64 bit
ARCH_DATA_MODEL:=@HOST_CPU_BITS@
ARCH_DATA_MODEL:=@OPENJDK_TARGET_CPU_BITS@
# Legacy setting for building for a 64 bit machine.
# If yes then this expands to _LP64:=1
@LP64@
ENDIAN:=@HOST_CPU_ENDIAN@
ENDIAN:=@OPENJDK_TARGET_CPU_ENDIAN@
@SET_OPENJDK@
JIGSAW:=@JIGSAW@
LIBM:=-lm
@ -185,7 +187,6 @@ SUPPORT_HEADLESS:=@SUPPORT_HEADLESS@
# The java launcher uses the default.
# The other can be selected by specifying -client -server -kernel -zero or -zeroshark
# on the java launcher command line.
DEFAULT_JVM_VARIANT:=@DEFAULT_JVM_VARIANT@
JVM_VARIANTS:=@JVM_VARIANTS@
JVM_VARIANT_SERVER:=@JVM_VARIANT_SERVER@
JVM_VARIANT_CLIENT:=@JVM_VARIANT_CLIENT@
@ -202,53 +203,42 @@ DEBUG_CLASSFILES:=@DEBUG_CLASSFILES@
# Legacy setting: -debug or -fastdebug
BUILD_VARIANT_RELEASE:=@BUILD_VARIANT_RELEASE@
LANGTOOLS_OUTPUTDIR:=@OUTPUT_ROOT@/langtools
LANGTOOLS_DIST:=@OUTPUT_ROOT@/langtools/dist
LANGTOOLS_MAKE_ARGS:=@LANGTOOLS_MAKE_ARGS@
CORBA_OUTPUTDIR:=@OUTPUT_ROOT@/corba
CORBA_DIST:=@OUTPUT_ROOT@/corba/dist
CORBA_MAKE_ARGS:=@CORBA_MAKE_ARGS@
JAXP_OUTPUTDIR:=@OUTPUT_ROOT@/jaxp
JAXP_DIST:=@OUTPUT_ROOT@/jaxp/dist
JAXP_MAKE_ARGS:=@JAXP_MAKE_ARGS@
JAXWS_OUTPUTDIR:=@OUTPUT_ROOT@/jaxws
JAXWS_DIST:=@OUTPUT_ROOT@/jaxws/dist
JAXWS_MAKE_ARGS:=@JAXWS_MAKE_ARGS@
HOTSPOT_OUTPUTDIR:=@OUTPUT_ROOT@/hotspot
HOTSPOT_DIST:=@OUTPUT_ROOT@/hotspot/dist
HOTSPOT_MAKE_ARGS:=@HOTSPOT_MAKE_ARGS@
LANGTOOLS_OUTPUTDIR:=@LANGTOOLS_OUTPUTDIR@
CORBA_OUTPUTDIR:=@CORBA_OUTPUTDIR@
JAXP_OUTPUTDIR:=@JAXP_OUTPUTDIR@
JAXWS_OUTPUTDIR:=@JAXWS_OUTPUTDIR@
HOTSPOT_OUTPUTDIR:=@HOTSPOT_OUTPUTDIR@
# This where a working jvm is built.
# You can run $(JDK_OUTPUTDIR)/bin/java
# Though the layout of the contents of $(JDK_OUTPUTDIR) is not
# yet the same as a default installation.
HOTSPOT_IMPORT_PATH:=@OUTPUT_ROOT@/hotspot/dist
JDK_OUTPUTDIR:=@OUTPUT_ROOT@/jdk
JDK_MAKE_ARGS:=@JDK_MAKE_ARGS@
# When you run "make install" it will create the standardized
# layout for the jdk and the jre inside the images subdir.
# Then it will copy the contents of the jdk into the installation
# directory.
IMAGES_OUTPUTDIR:=@OUTPUT_ROOT@/images
IMAGES_MAKE_ARGS:=@IMAGES_MAKE_ARGS@
LANGTOOLS_DIST:=@LANGTOOLS_DIST@
CORBA_DIST:=@CORBA_DIST@
JAXP_DIST:=@JAXP_DIST@
JAXWS_DIST:=@JAXWS_DIST@
HOTSPOT_DIST:=@HOTSPOT_DIST@
# Legacy variables used by Release.gmk
JDK_IMAGE_DIR:=$(IMAGES_OUTPUTDIR)/j2sdk-image
JRE_IMAGE_DIR:=$(IMAGES_OUTPUTDIR)/j2re-image
# Can be /sparcv9 or /amd64 on Solaris
ISA_DIR:=@LEGACY_HOST_CPU3@
ISA_DIR:=@LEGACY_OPENJDK_TARGET_CPU3@
BINDIR:=$(JDK_OUTPUTDIR)/bin$(ISA_DIR)
# The boot jdk to use
ALT_BOOTDIR:=@BOOT_JDK@
BOOT_JDK:=@BOOT_JDK@
BOOT_JDK_JVMARGS:=@BOOT_JDK_JVMARGS@
BOOT_JAVAC_ARGS:=@BOOT_JAVAC_ARGS@
BOOT_RTJAR:=@BOOT_RTJAR@
BOOT_TOOLSJAR:=@BOOT_TOOLSJAR@
@ -258,8 +248,6 @@ BOOT_JDK_SOURCETARGET:=@BOOT_JDK_SOURCETARGET@
# Information about the build system
NUM_CORES:=@NUM_CORES@
# This is used from the libjvm build for C/C++ code.
HOTSPOT_BUILD_JOBS:=@CONCURRENT_BUILD_JOBS@
# This is used from the jdk build for C/C++ code.
PARALLEL_COMPILE_JOBS:=@CONCURRENT_BUILD_JOBS@
# Store javac server synchronization files here, and
@ -282,6 +270,8 @@ JAVAC_SERVER_CORES:=@JAVAC_SERVER_CORES@
JAVAC_USE_DEPS:=@JAVAC_USE_DEPS@
# We can invoke javac: SINGLE_THREADED_BATCH or MULTI_CORE_CONCURRENT
JAVAC_USE_MODE:=@JAVAC_USE_MODE@
# Enable not yet complete sjavac support.
ENABLE_SJAVAC:=@ENABLE_SJAVAC@
# The OpenJDK makefiles should be changed to using the standard
# configure output ..._CFLAGS and ..._LIBS. In the meantime we
@ -375,22 +365,24 @@ LDEXECXX:=@UNCYGDRIVE@ @LDEXECXX@
@DEFINE_CROSS_COMPILE_ARCH@
# The HOSTCC should really be named BUILDCC, ie build executable for
# the build platform. Same as CC when not cross compiling.
HOSTCC:=@HOSTCC@
HOSTCXX:=@HOSTCXX@
HOSTCC:=@UNCYGDRIVE@ @HOSTCC@
HOSTCXX:=@UNCYGDRIVE@ @HOSTCXX@
# And of course, the jdk spells HOSTCC as NIO_CC/HOST_CC
HOST_CC:=@HOSTCC@
NIO_CC:=@HOSTCC@
HOST_CC:=@UNCYGDRIVE@ @HOSTCC@
NIO_CC:=@UNCYGDRIVE@ @HOSTCC@
AS:=@AS@
HOST_LD:=@UNCYGDRIVE@ @HOSTLD@
AS:=@UNCYGDRIVE@ @AS@
ASFLAGS:=@ASFLAGS@
# AR is used to create a static library (is ar in posix, lib.exe in winapi)
AR:=@UNCYGDRIVE@ @AR@
ARFLAGS:=@ARFLAGS@
NM:=@NM@
STRIP:=@STRIP@
MCS:=@MCS@
NM:=@UNCYGDRIVE@ @NM@
STRIP:=@UNCYGDRIVE@ @STRIP@
MCS:=@UNCYGDRIVE@ @MCS@
# Command to create a shared library
SHARED_LIBRARY_FLAGS:=@SHARED_LIBRARY_FLAGS@
@ -404,6 +396,17 @@ SET_SHARED_LIBRARY_MAPFILE=@SET_SHARED_LIBRARY_MAPFILE@
C_FLAG_REORDER:=@C_FLAG_REORDER@
CXX_FLAG_REORDER:=@CXX_FLAG_REORDER@
#
# Options for generating debug symbols
ENABLE_DEBUG_SYMBOLS:=@ENABLE_DEBUG_SYMBOLS@
CFLAGS_DEBUG_SYMBOLS:=@CFLAGS_DEBUG_SYMBOLS@
CXXFLAGS_DEBUG_SYMBOLS:=@CXXFLAGS_DEBUG_SYMBOLS@
ZIP_DEBUGINFO_FILES:=@ZIP_DEBUGINFO_FILES@
#
# Compress (or not) jars
COMPRESS_JARS=@COMPRESS_JARS@
# Options to linker to specify the library name.
# (Note absence of := assignment, because we do not want to evaluate the macro body here)
SET_SHARED_LIBRARY_NAME=@SET_SHARED_LIBRARY_NAME@
@ -507,23 +510,28 @@ READELF:=@READELF@
EXPR:=@EXPR@
FILE:=@FILE@
HG:=@HG@
OBJCOPY:=@OBJCOPY@
UNCYGDRIVE:=@UNCYGDRIVE@
# Where the build output is stored for your convenience.
BUILD_LOG:=@BUILD_LOG@
BUILD_LOG_PREVIOUS:=@BUILD_LOG_PREVIOUS@
BUILD_LOG_WRAPPER:=@BUILD_LOG_WRAPPER@
# Build setup
ENABLE_DOCS:=@ENABLE_DOCS@
GENERATE_DOCS:=@ENABLE_DOCS@
DISABLE_NIMBUS:=@DISABLE_NIMBUS@
ENABLE_JFR=@ENABLE_JFR@
USE_EXTERNAL_LIBJPEG:=@USE_EXTERNAL_LIBJPEG@
USE_EXTERNAL_LIBGIF:=@USE_EXTERNAL_LIBGIF@
USE_EXTERNAL_LIBZ:=@USE_EXTERNAL_LIBZ@
LIBZIP_CAN_USE_MMAP:=@LIBZIP_CAN_USE_MMAP@
CHECK_FOR_VCINSTALLDIR=@CHECK_FOR_VCINSTALLDIR@
MSVCRNN_DLL:=@MSVCR100DLL@
# ADD_SRCS takes a single argument with source roots
# and appends any corresponding source roots found
# below --with-add-source-root and below
@ -551,6 +559,17 @@ else
OVR_SRCS:=
endif
####################################################
#
# Legacy Hotspot support
HOTSPOT_DIST:=@HOTSPOT_DIST@
HOTSPOT_MAKE_ARGS:=@HOTSPOT_MAKE_ARGS@
# This is used from the libjvm build for C/C++ code.
HOTSPOT_BUILD_JOBS:=@CONCURRENT_BUILD_JOBS@
# Control wether Hotspot runs Queens test after building
TEST_IN_BUILD=@TEST_IN_BUILD@
####################################################
#
# INSTALLATION
@ -611,10 +630,9 @@ INSTALL_SYSCONFDIR=@sysconfdir@
# Name of Service Agent library
SALIB_NAME=@SALIB_NAME@
# Control wether Hotspot runs Queens test after building
TEST_IN_BUILD=@TEST_IN_BUILD@
OS_VERSION_MAJOR:=@OS_VERSION_MAJOR@
OS_VERSION_MINOR:=@OS_VERSION_MINOR@
OS_VERSION_MICRO:=@OS_VERSION_MICRO@
# Include the closed-spec.gmk file if it exists
-include $(dir @SPEC@)/closed-spec.gmk

527
common/autoconf/spec.sh.in Normal file
View File

@ -0,0 +1,527 @@
#
# Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved.
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
#
# This code is free software; you can redistribute it and/or modify it
# under the terms of the GNU General Public License version 2 only, as
# published by the Free Software Foundation. Oracle designates this
# particular file as subject to the "Classpath" exception as provided
# by Oracle in the LICENSE file that accompanied this code.
#
# This code is distributed in the hope that it will be useful, but WITHOUT
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
# version 2 for more details (a copy is included in the LICENSE file that
# accompanied this code).
#
# You should have received a copy of the GNU General Public License version
# 2 along with this work; if not, write to the Free Software Foundation,
# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
#
# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
# or visit www.oracle.com if you need additional information or have any
# questions.
#
# Configured"@DATE_WHEN_CONFIGURED@ to build for a @OPENJDK_TARGET_SYSTEM@ system,
# using 'configure @CONFIGURE_COMMAND_LINE@'
# The "human readable" name of this configuration
CONF_NAME="@CONF_NAME@"
# The built jdk will run in this target system.
OPENJDK_TARGET_SYSTEM="@OPENJDK_TARGET_SYSTEM@"
OPENJDK_TARGET_OS="@OPENJDK_TARGET_OS@"
OPENJDK_TARGET_OS_FAMILY="@OPENJDK_TARGET_OS_FAMILY@"
OPENJDK_TARGET_OS_API="@OPENJDK_TARGET_OS_API@"
OPENJDK_TARGET_CPU="@OPENJDK_TARGET_CPU@"
OPENJDK_TARGET_CPU_ARCH="@OPENJDK_TARGET_CPU_ARCH@"
OPENJDK_TARGET_CPU_BITS="@OPENJDK_TARGET_CPU_BITS@"
OPENJDK_TARGET_CPU_ENDIAN="@OPENJDK_TARGET_CPU_ENDIAN@"
# We are building on this build system.
# When not cross-compiling, it is the same as the target.
OPENJDK_BUILD_SYSTEM="@OPENJDK_BUILD_SYSTEM@"
OPENJDK_BUILD_OS="@OPENJDK_BUILD_OS@"
OPENJDK_BUILD_OS_FAMILY="@OPENJDK_BUILD_OS_FAMILY@"
OPENJDK_BUILD_OS_API="@OPENJDK_BUILD_OS_API@"
OPENJDK_BUILD_CPU="@OPENJDK_BUILD_CPU@"
OPENJDK_BUILD_CPU_ARCH="@OPENJDK_BUILD_CPU_ARCH@"
OPENJDK_BUILD_CPU_BITS="@OPENJDK_BUILD_CPU_BITS@"
OPENJDK_BUILD_CPU_ENDIAN="@OPENJDK_BUILD_CPU_ENDIAN@"
# Legacy OS values for use in release file.
REQUIRED_OS_NAME="@REQUIRED_OS_NAME@"
REQUIRED_OS_VERSION="@REQUIRED_OS_VERSION@"
# Old name for OPENJDK_TARGET_OS (aix,bsd,hpux,linux,macosx,solaris,windows etc)
PLATFORM="@OPENJDK_TARGET_OS@"
# Old name for OPENJDK_TARGET_CPU, uses i586 and amd64, instead of ia32 and x64.
ARCH="@LEGACY_OPENJDK_TARGET_CPU1@"
# Yet another name for arch used for an extra subdir below the jvm lib.
# Uses i386 and amd64, instead of ia32 and x64.
LIBARCH="@LEGACY_OPENJDK_TARGET_CPU2@"
# Use to switch between solaris and windows subdirs in the jdk.
LEGACY_OPENJDK_TARGET_OS_API="@LEGACY_OPENJDK_TARGET_OS_API@"
# 32 or 64 bit
ARCH_DATA_MODEL="@OPENJDK_TARGET_CPU_BITS@"
# Legacy setting for building for a 64 bit machine.
# If yes then this expands to _LP64=1
ENDIAN="@OPENJDK_TARGET_CPU_ENDIAN@"
JIGSAW="@JIGSAW@"
LIBM=-lm
LIBDL="@LIBDL@"
# colon or semicolon
PATH_SEP="@PATH_SEP@"
# The sys root where standard headers and libraries are found.
# Usually not needed since the configure script should have
# taken it into account already when setting CFLAGS et al.
SYS_ROOT="@SYS_ROOT@"
# Paths to the source code
SRC_ROOT="@SRC_ROOT@"
ADD_SRC_ROOT="@ADD_SRC_ROOT@"
OVERRIDE_SRC_ROOT="@OVERRIDE_SRC_ROOT@"
TOPDIR="@SRC_ROOT@"
OUTPUT_ROOT="@OUTPUT_ROOT@"
JDK_MAKE_SHARED_DIR="@JDK_TOPDIR@"/makefiles/common/shared
JDK_TOPDIR="@JDK_TOPDIR@"
LANGTOOLS_TOPDIR="@LANGTOOLS_TOPDIR@"
CORBA_TOPDIR="@CORBA_TOPDIR@"
JAXP_TOPDIR="@JAXP_TOPDIR@"
JAXWS_TOPDIR="@JAXWS_TOPDIR@"
HOTSPOT_TOPDIR="@HOTSPOT_TOPDIR@"
COPYRIGHT_YEAR="@COPYRIGHT_YEAR@"
# Information gathered from the version.numbers file.
JDK_MAJOR_VERSION="@JDK_MAJOR_VERSION@"
JDK_MINOR_VERSION="@JDK_MINOR_VERSION@"
JDK_MICRO_VERSION="@JDK_MICRO_VERSION@"
JDK_UPDATE_VERSION="@JDK_UPDATE_VERSION@"
JDK_BUILD_NUMBER="@JDK_BUILD_NUMBER@"
MILESTONE="@MILESTONE@"
LAUNCHER_NAME="@LAUNCHER_NAME@"
PRODUCT_NAME="@PRODUCT_NAME@"
PRODUCT_SUFFIX="@PRODUCT_SUFFIX@"
JDK_RC_PLATFORM_NAME="@JDK_RC_PLATFORM_NAME@"
COMPANY_NAME="@COMPANY_NAME@"
# Different version strings generated from the above information.
JDK_VERSION="@JDK_VERSION@"
RUNTIME_NAME="@RUNTIME_NAME@"
FULL_VERSION="@FULL_VERSION@"
JRE_RELEASE_VERSION="@FULL_VERSION@"
RELEASE="@RELEASE@"
COOKED_BUILD_NUMBER="@COOKED_BUILD_NUMBER@"
# How to compile the code: release, fastdebug or slowdebug
DEBUG_LEVEL="@DEBUG_LEVEL@"
# This is the JDK variant to build.
# The JDK variant is a name for a specific set of modules to be compiled for the JDK.
JDK_VARIANT="@JDK_VARIANT@"
# Should we compile support for running with a graphical UI? (ie headful)
# Should we compile support for running without? (ie headless)
SUPPORT_HEADFUL="@SUPPORT_HEADFUL@"
SUPPORT_HEADLESS="@SUPPORT_HEADLESS@"
# These are the libjvms that we want to build.
# The java launcher uses the default.
# The other can be selected by specifying -client -server -kernel -zero or -zeroshark
# on the java launcher command line.
JVM_VARIANTS="@JVM_VARIANTS@"
JVM_VARIANT_SERVER="@JVM_VARIANT_SERVER@"
JVM_VARIANT_CLIENT="@JVM_VARIANT_CLIENT@"
JVM_VARIANT_KERNEL="@JVM_VARIANT_KERNEL@"
JVM_VARIANT_ZERO="@JVM_VARIANT_ZERO@"
JVM_VARIANT_ZEROSHARK="@JVM_VARIANT_ZEROSHARK@"
# Legacy setting: OPT or DBG
VARIANT="@VARIANT@"
# Legacy setting: true or false
FASTDEBUG="@FASTDEBUG@"
# Legacy setting: debugging the class files?
DEBUG_CLASSFILES="@DEBUG_CLASSFILES@"
# Legacy setting: -debug or -fastdebug
BUILD_VARIANT_RELEASE="@BUILD_VARIANT_RELEASE@"
LANGTOOLS_OUTPUTDIR="@LANGTOOLS_OUTPUTDIR@"
CORBA_OUTPUTDIR="@CORBA_OUTPUTDIR@"
JAXP_OUTPUTDIR="@JAXP_OUTPUTDIR@"
JAXWS_OUTPUTDIR="@JAXWS_OUTPUTDIR@"
HOTSPOT_OUTPUTDIR="@HOTSPOT_OUTPUTDIR@"
# This where a working jvm is built.
# You can run ${JDK_OUTPUTDIR}/bin/java
# Though the layout of the contents of ${JDK_OUTPUTDIR} is not
# yet the same as a default installation.
JDK_OUTPUTDIR="@OUTPUT_ROOT@"/jdk
# When you run "make install" it will create the standardized
# layout for the jdk and the jre inside the images subdir.
# Then it will copy the contents of the jdk into the installation
# directory.
IMAGES_OUTPUTDIR="@OUTPUT_ROOT@"/images
LANGTOOLS_DIST="@LANGTOOLS_DIST@"
CORBA_DIST="@CORBA_DIST@"
JAXP_DIST="@JAXP_DIST@"
JAXWS_DIST="@JAXWS_DIST@"
HOTSPOT_DIST="@HOTSPOT_DIST@"
# Legacy variables used by Release.gmk
JDK_IMAGE_DIR=${IMAGES_OUTPUTDIR}/j2sdk-image
JRE_IMAGE_DIR=${IMAGES_OUTPUTDIR}/j2re-image
# Can be /sparcv9 or /amd64 on Solaris
ISA_DIR="@LEGACY_OPENJDK_TARGET_CPU3@"
BINDIR="${JDK_OUTPUTDIR}/bin${ISA_DIR}"
# The boot jdk to use
ALT_BOOTDIR="@BOOT_JDK@"
BOOT_JDK="@BOOT_JDK@"
BOOT_JDK_JVMARGS="@BOOT_JDK_JVMARGS@"
BOOT_RTJAR="@BOOT_RTJAR@"
BOOT_TOOLSJAR="@BOOT_TOOLSJAR@"
# When compiling Java source to be run by the boot jdk
# use these extra flags, eg -source 6 -target 6
BOOT_JDK_SOURCETARGET="@BOOT_JDK_SOURCETARGET@"
# Information about the build system
NUM_CORES="@NUM_CORES@"
# This is used from the jdk build for C/C++ code.
PARALLEL_COMPILE_JOBS="@CONCURRENT_BUILD_JOBS@"
# Store javac server synchronization files here, and
# the javac server log files.
JAVAC_SERVERS="@JAVAC_SERVERS@"
# Should we use a javac server or not? The javac server gives
# an enormous performance improvement since it reduces the
# startup costs of javac and reuses as much as possible of intermediate
# compilation work. But if we want to compile with a non-Java
# javac compiler, like gcj. Then we cannot use javac server and
# this variable is set to false.
JAVAC_USE_REMOTE="@JAVAC_USE_REMOTE@"
# We can block the Javac server to never use more cores than this.
# This is not for performance reasons, but for memory usage, since each
# core requires its own JavaCompiler. We might have 64 cores and 4GB
# of memory, 64 JavaCompilers will currently not fit in a 3GB heap.
# Since there is no sharing of data between the JavaCompilers.
JAVAC_SERVER_CORES="@JAVAC_SERVER_CORES@"
# Should we use dependency tracking between Java packages? true or false.
JAVAC_USE_DEPS="@JAVAC_USE_DEPS@"
# We can invoke javac: SINGLE_THREADED_BATCH or MULTI_CORE_CONCURRENT
JAVAC_USE_MODE="@JAVAC_USE_MODE@"
# Enable not yet complete sjavac support.
ENABLE_SJAVAC="@ENABLE_SJAVAC@"
# The OpenJDK makefiles should be changed to using the standard
# configure output ..._CFLAGS and ..._LIBS. In the meantime we
# extract the information here.
FREETYPE2_LIB_PATH="@FREETYPE2_LIB_PATH@"
FREETYPE2_LIBS="@FREETYPE2_LIBS@"
FREETYPE2_CFLAGS="@FREETYPE2_CFLAGS@"
USING_SYSTEM_FT_LIB="@USING_SYSTEM_FT_LIB@"
CUPS_CFLAGS="@CUPS_CFLAGS@"
PACKAGE_PATH="@PACKAGE_PATH@"
# Source file for cacerts
CACERTS_FILE="@CACERTS_FILE@"
#MOZILLA_HEADERS_PATH=
# Necessary additional compiler flags to compile X11
X_CFLAGS="@X_CFLAGS@"
X_LIBS="@X_LIBS@"
OPENWIN_HOME="@OPENWIN_HOME@"
# There are two types: CC or CL
# CC is gcc and others behaving reasonably similar.
# CL is cl.exe only.
COMPILER_TYPE="@COMPILER_TYPE@"
# Flags used for overriding the default opt setting for a C/C++ source file.
C_O_FLAG_HIGHEST="@C_O_FLAG_HIGHEST@"
C_O_FLAG_HI="@C_O_FLAG_HI@"
C_O_FLAG_NORM="@C_O_FLAG_NORM@"
C_O_FLAG_NONE="@C_O_FLAG_NONE@"
CXX_O_FLAG_HIGHEST="@CXX_O_FLAG_HIGHEST@"
CXX_O_FLAG_HI="@CXX_O_FLAG_HI@"
CXX_O_FLAG_NORM="@CXX_O_FLAG_NORM@"
CXX_O_FLAG_NONE="@CXX_O_FLAG_NONE@"
C_FLAG_DEPS="@C_FLAG_DEPS@"
CXX_FLAG_DEPS="@CXX_FLAG_DEPS@"
# Tools that potentially need to be cross compilation aware.
CC="@UNCYGDRIVE@ @CCACHE@ @CC@"
# CFLAGS used to compile the jdk native libraries (C-code)
CFLAGS_JDKLIB="@CFLAGS_JDKLIB@"
CXXFLAGS_JDKLIB="@CXXFLAGS_JDKLIB@"
# CFLAGS used to compile the jdk native launchers (C-code)
CFLAGS_JDKEXE="@CFLAGS_JDKEXE@"
CXXFLAGS_JDKEXE="@CXXFLAGS_JDKEXE@"
CXX="@UNCYGDRIVE@ @CCACHE@ @CXX@"
#CXXFLAGS="@CXXFLAGS@"
OBJC="@CCACHE@ @OBJC@"
#OBJCFLAGS="@OBJCFLAGS@"
CPP="@UNCYGDRIVE@ @CPP@"
#CPPFLAGS="@CPPFLAGS@"
# The linker can be gcc or ld on posix systems, or link.exe on winapi systems.
LD="@UNCYGDRIVE@ @LD@"
# LDFLAGS used to link the jdk native libraries (C-code)
LDFLAGS_JDKLIB="@LDFLAGS_JDKLIB@"
LDFLAGS_JDKLIB_SUFFIX="@LDFLAGS_JDKLIB_SUFFIX@"
# On some platforms the linker cannot be used to create executables, thus
# the need for a separate LDEXE command.
LDEXE="@UNCYGDRIVE@ @LDEXE@"
# LDFLAGS used to link the jdk native launchers (C-code)
LDFLAGS_JDKEXE="@LDFLAGS_JDKEXE@"
LDFLAGS_JDKEXE_SUFFIX="@LDFLAGS_JDKEXE_SUFFIX@"
# Sometimes a different linker is needed for c++ libs
LDCXX="@UNCYGDRIVE@ @LDCXX@"
# The flags for linking libstdc++ linker.
LIBCXX="@LIBCXX@"
# Sometimes a different linker is needed for c++ executables
LDEXECXX="@UNCYGDRIVE@ @LDEXECXX@"
# If cross compiling, then define CROSS_COMPILE_ARCH=cpu_name here.
# The HOSTCC should really be named BUILDCC, ie build executable for
# the build platform. Same as CC when not cross compiling.
HOSTCC="@HOSTCC@"
HOSTCXX="@HOSTCXX@"
# And of course, the jdk spells HOSTCC as NIO_CC/HOST_CC
HOST_CC="@HOSTCC@"
NIO_CC="@HOSTCC@"
AS="@AS@"
ASFLAGS="@ASFLAGS@"
# AR is used to create a static library (is ar in posix, lib.exe in winapi)
AR="@UNCYGDRIVE@ @AR@"
ARFLAGS="@ARFLAGS@"
NM="@NM@"
STRIP="@STRIP@"
MCS="@MCS@"
# Command to create a shared library
SHARED_LIBRARY_FLAGS="@SHARED_LIBRARY_FLAGS@"
# Options to linker to specify a mapfile.
# (Note absence of = assignment, because we do not want to evaluate the macro body here)
SET_SHARED_LIBRARY_MAPFILE="@SET_SHARED_LIBRARY_MAPFILE@"
# Options for C/CXX compiler to be used if linking is performed
# using reorder file
C_FLAG_REORDER="@C_FLAG_REORDER@"
CXX_FLAG_REORDER="@CXX_FLAG_REORDER@"
#
# Options for generating debug symbols
ENABLE_DEBUG_SYMBOLS="@ENABLE_DEBUG_SYMBOLS@"
CFLAGS_DEBUG_SYMBOLS="@CFLAGS_DEBUG_SYMBOLS@"
CXXFLAGS_DEBUG_SYMBOLS="@CXXFLAGS_DEBUG_SYMBOLS@"
ZIP_DEBUGINFO_FILES="@ZIP_DEBUGINFO_FILES@"
# Options to linker to specify the library name.
# (Note absence of = assignment, because we do not want to evaluate the macro body here)
SET_SHARED_LIBRARY_NAME="@SET_SHARED_LIBRARY_NAME@"
# Set origin using the linker, ie use the relative path to the dependent library to find the dependees.
# (Note absence of = assignment, because we do not want to evaluate the macro body here)
SET_SHARED_LIBRARY_ORIGIN="@SET_SHARED_LIBRARY_ORIGIN@"
# Different OS:es have different ways of naming shared libraries.
# The SHARED_LIBRARY macro takes "verify" as and argument and returns:
# "libverify.so" or "libverify.dylib" or "verify.dll" depending on platform.
# (Note absence of = assignment, because we do not want to evaluate the macro body here)
SHARED_LIBRARY="@SHARED_LIBRARY@"
STATIC_LIBRARY="@STATIC_LIBRARY@"
LIBRARY_PREFIX="@LIBRARY_PREFIX@"
SHARED_LIBRARY_SUFFIX="@SHARED_LIBRARY_SUFFIX@"
STATIC_LIBRARY_SUFFIX="@STATIC_LIBRARY_SUFFIX@"
EXE_SUFFIX="@EXE_SUFFIX@"
OBJ_SUFFIX="@OBJ_SUFFIX@"
POST_STRIP_CMD="@POST_STRIP_CMD@"
POST_MCS_CMD='@POST_MCS_CMD@'
JAVA_FLAGS="@BOOT_JDK_JVMARGS@"
JAVA="@UNCYGDRIVE@ @JAVA@ ${JAVA_FLAGS}"
JAVAC="@UNCYGDRIVE@ @JAVAC@"
JAVAC_FLAGS="@JAVAC_FLAGS@"
JAVAH="@UNCYGDRIVE@ @JAVAH@"
JAR="@UNCYGDRIVE@ @JAR@"
RMIC="@UNCYGDRIVE@ @RMIC@"
NATIVE2ASCII="@UNCYGDRIVE@ @NATIVE2ASCII@"
BOOT_JAR_CMD="@UNCYGDRIVE@ @JAR@"
BOOT_JAR_JFLAGS=
# Tools adhering to a minimal and common standard of posix compliance.
AWK="@AWK@"
CAT="@CAT@"
CCACHE="@CCACHE@"
# CD is going away, but remains to cater for legacy makefiles.
CD=cd
CHMOD="@CHMOD@"
CP="@CP@"
CPIO="@CPIO@"
CUT="@CUT@"
DATE="@DATE@"
DF="@DF@"
DIFF="@DIFF@"
FIND="@FIND@"
FIND_DELETE="@FIND_DELETE@"
ECHO="@ECHO@"
EGREP="@EGREP@"
FGREP="@FGREP@"
GREP="@GREP@"
HEAD="@HEAD@"
LS="@LS@"
LN="@LN@"
MKDIR="@MKDIR@"
MV="@MV@"
NAWK="@NAWK@"
PRINTF="@PRINTF@"
PWD="@THEPWDCMD@"
RM="@RM@"
SED="@SED@"
SH="@SH@"
SORT="@SORT@"
TAR="@TAR@"
TAIL="@TAIL@"
TEE="@TEE@"
TR="@TR@"
TOUCH="@TOUCH@"
WC="@WC@"
XARGS="@XARGS@"
ZIPEXE="@ZIP@"
ZIP="@ZIP@"
UNZIP="@UNZIP@"
MT="@UNCYGDRIVE@ @MT@"
RC="@UNCYGDRIVE@ @RC@"
DUMPBIN="@UNCYGDRIVE@ @DUMPBIN@"
CYGPATH="@CYGPATH@"
LDD="@LDD@"
OTOOL="@OTOOL@"
READELF="@READELF@"
EXPR="@EXPR@"
FILE="@FILE@"
HG="@HG@"
OBJCOPY="@OBJCOPY@"
UNCYGDRIVE="@UNCYGDRIVE@"
# Build setup
ENABLE_DOCS="@ENABLE_DOCS@"
GENERATE_DOCS="@ENABLE_DOCS@"
DISABLE_NIMBUS="@DISABLE_NIMBUS@"
USE_EXTERNAL_LIBJPEG="@USE_EXTERNAL_LIBJPEG@"
USE_EXTERNAL_LIBGIF="@USE_EXTERNAL_LIBGIF@"
USE_EXTERNAL_LIBZ="@USE_EXTERNAL_LIBZ@"
LIBZIP_CAN_USE_MMAP="@LIBZIP_CAN_USE_MMAP@"
CHECK_FOR_VCINSTALLDIR="@CHECK_FOR_VCINSTALLDIR@"
MSVCRNN_DLL="@MSVCR100DLL@"
####################################################
#
# Legacy Hotspot support
HOTSPOT_DIST="@HOTSPOT_DIST@"
HOTSPOT_MAKE_ARGS="@HOTSPOT_MAKE_ARGS@"
# This is used from the libjvm build for C/C++ code.
HOTSPOT_BUILD_JOBS="@CONCURRENT_BUILD_JOBS@"
# Control wether Hotspot runs Queens test after building
TEST_IN_BUILD="@TEST_IN_BUILD@"
####################################################
#
# INSTALLATION
#
# Common prefix for all installed files. Defaults to /usr/local,
# but /opt/myjdk is another common version.
INSTALL_PREFIX="@prefix@"
# Directories containing architecture-dependent files should be relative to exec_prefix
INSTALL_EXECPREFIX="@exec_prefix@"
# java,javac,javah,javap etc are installed here.
INSTALL_BINDIR="@bindir@"
# Read only architecture-independent data
INSTALL_DATADIR="@datadir@"
# Root of above.
INSTALL_DATAROOTDIR="@datarootdir@"
# Doc files, other than info and man.
INSTALL_DOCDIR="@docdir@"
# Html documentation
INSTALL_HTMLDIR="@htmldir@"
# Installing C header files, JNI headers for example.
INSTALL_INCLUDEDIR="@includedir@"
# Installing library files....
INSTALL_INCLUDEDIR="@libdir@"
# Executables that other programs run.
INSTALL_LIBEXECDIR="@libexecdir@"
# Locale-dependent but architecture-independent data, such as message catalogs.
INSTALL_LOCALEDIR="@localedir@"
# Modifiable single-machine data
INSTALL_LOCALSTATEDIR="@localstatedir@"
# Man pages
INSTALL_MANDIR="@mandir@"
# Modifiable architecture-independent data.
INSTALL_SHAREDSTATEDIR="@sharedstatedir@"
# Read-only single-machine data
INSTALL_SYSCONFDIR="@sysconfdir@"
####################################################
#
# Misc
#
# Name of Service Agent library
SALIB_NAME="@SALIB_NAME@"
OS_VERSION_MAJOR="@OS_VERSION_MAJOR@"
OS_VERSION_MINOR="@OS_VERSION_MINOR@"
OS_VERSION_MICRO="@OS_VERSION_MICRO@"

View File

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

View File

@ -0,0 +1,235 @@
#!/bin/bash
#
# Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved.
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
#
# This code is free software; you can redistribute it and/or modify it
# under the terms of the GNU General Public License version 2 only, as
# published by the Free Software Foundation.
#
# This code is distributed in the hope that it will be useful, but WITHOUT
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
# version 2 for more details (a copy is included in the LICENSE file that
# accompanied this code).
#
# You should have received a copy of the GNU General Public License version
# 2 along with this work; if not, write to the Free Software Foundation,
# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
#
# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
# or visit www.oracle.com if you need additional information or have any
# questions.
#
# MANUAL
#
# ./common/bin/compare-objects.sh old_jdk_build_dir new_jdk_build_dir
#
# Compares object files
#
if [ "x$1" = "x-h" ] || [ "x$1" = "x--help" ] || [ "x$1" == "x" ]; then
echo "bash ./common/bin/compare-build.sh old_jdk_build_dir new_jdk_build_dir"
echo ""
echo "Compare object files"
echo ""
exit 10
fi
#######
#
# List of files (grep patterns) that are ignored
#
# 1) hotspot object files
IGNORE="-e hotspot"
# 2) various build artifacts: sizer.32.o sizer.64.o dummyodbc.o
# these are produced during build and then e.g run to produce other data
# i.e not directly put into build => safe to ignore
IGNORE="${IGNORE} -e sizer.32.o -e sizer.64.o"
IGNORE="${IGNORE} -e dummyodbc.o"
IGNORE="${IGNORE} -e genSolarisConstants.o"
IGNORE="${IGNORE} -e genUnixConstants.o"
OLD="$1"
NEW="$2"
shift; shift
PATTERN="$*"
if [ -f $NEW/spec.sh ]; then
. $NEW/spec.sh
elif [ -f $NEW/../../spec.sh ]; then
. $NEW/../../spec.sh
elif [ -f $OLD/spec.sh ]; then
. $OLD/spec.sh
elif [ -f $OLD/../../spec.sh ]; then
. $OLD/../../spec.sh
else
echo "Unable to find spec.sh"
echo "Giving up"
exit 1
fi
export COMPARE_ROOT=/tmp/cimages.$USER/objects
mkdir -p $COMPARE_ROOT
(${CD} $OLD && ${FIND} . -name '*.o') > $COMPARE_ROOT/list.old
(${CD} $NEW && ${FIND} . -name '*.o') > $COMPARE_ROOT/list.new
# On macosx JobjC is build in both i386 and x86_64 variant (universial binary)
# but new build only builds the x86_64
# Remove the 386 variants from comparison...to avoid "false" positives
${GREP} -v 'JObjC.dst/Objects-normal/i386' $COMPARE_ROOT/list.old > $COMPARE_ROOT/list.old.new
${CP} $COMPARE_ROOT/list.old $COMPARE_ROOT/list.old.full
${CP} $COMPARE_ROOT/list.old.new $COMPARE_ROOT/list.old
findnew() {
arg_1=$1
arg_2=$2
# special case 1 unpack-cmd => unpackexe
arg_1=`${ECHO} $arg_1 | ${SED} 's!unpack-cmd!unpackexe!g'`
arg_2=`${ECHO} $arg_2 | ${SED} 's!unpack-cmd!unpackexe!g'`
# special case 2 /JObjC.dst/ => /libjobjc/
arg_1=`${ECHO} $arg_1 | ${SED} 's!/JObjC.dst/!/libjobjc/!g'`
arg_2=`${ECHO} $arg_2 | ${SED} 's!/JObjC.dst/!/libjobjc/!g'`
full=`${ECHO} $arg_1 | ${SED} 's!\.!\\\.!g'`
medium=`${ECHO} $arg_1 | ${SED} 's!.*/\([^/]*/[^/]*\)!\1!'`
short=`${ECHO} $arg_2 | ${SED} 's!\.!\\\.!g'`
if [ "`${GREP} -c "/$full" $COMPARE_ROOT/list.new`" -eq 1 ]
then
${ECHO} $NEW/$arg_1
return
fi
if [ "`${GREP} -c "$medium" $COMPARE_ROOT/list.new`" -eq 1 ]
then
${GREP} "$medium" $COMPARE_ROOT/list.new
return
fi
if [ "`${GREP} -c "/$short" $COMPARE_ROOT/list.new`" -eq 1 ]
then
${GREP} "/$short" $COMPARE_ROOT/list.new
return
fi
# old style has "dir" before obj{64}
dir=`${ECHO} $arg_1 | ${SED} 's!.*/\([^/]*\)/obj[64]*.*!\1!g'`
if [ -n "$dir" -a "$dir" != "$arg_1" ]
then
if [ "`${GREP} $dir $COMPARE_ROOT/list.new | ${GREP} -c "/$short"`" -eq 1 ]
then
${GREP} $dir $COMPARE_ROOT/list.new | ${GREP} "/$short"
return
fi
# Try with lib$dir/
if [ "`${GREP} "lib$dir/" $COMPARE_ROOT/list.new | ${GREP} -c "/$short"`" -eq 1 ]
then
${GREP} "lib$dir/" $COMPARE_ROOT/list.new | ${GREP} "/$short"
return
fi
# Try with $dir_objs
if [ "`${GREP} "${dir}_objs" $COMPARE_ROOT/list.new | ${GREP} -c "/$short"`" -eq 1 ]
then
${GREP} "${dir}_objs" $COMPARE_ROOT/list.new | ${GREP} "/$short"
return
fi
fi
# check for some specifics...
for i in demo hotspot jobjc
do
if [ "`${ECHO} $full | ${GREP} -c $i`" -gt 0 ]
then
if [ "`${GREP} $i $COMPARE_ROOT/list.new | ${GREP} -c "/$short"`" -eq 1 ]
then
${GREP} $i $COMPARE_ROOT/list.new | ${GREP} "/$short"
return
fi
fi
done
# check for specific demo
demo=`${ECHO} $arg_1 | ${SED} 's!.*/demo/jvmti/\([^/]*\)/.*!\1!g'`
if [ -n "$demo" -a "$dir" != "$demo" ]
then
if [ "`${GREP} $demo $COMPARE_ROOT/list.new | ${GREP} -c "/$short"`" -eq 1 ]
then
${GREP} $demo $COMPARE_ROOT/list.new | ${GREP} "/$short"
return
fi
fi
return
}
compare() {
old=$1
new=$2
${DIFF} $old $new > /dev/null
res=$?
if [ $res -eq 0 ]
then
${ECHO} 0
return
fi
# check if stripped objects gives equality
${CP} $old $COMPARE_ROOT/`basename $old`.old
${CP} $new $COMPARE_ROOT/`basename $old`.new
${POST_STRIP_CMD} $COMPARE_ROOT/`basename $old`.old $COMPARE_ROOT/`basename $old`.new > /dev/null 2>&1
${DIFF} $COMPARE_ROOT/`basename $old`.old $COMPARE_ROOT/`basename $old`.new > /dev/null
res=$?
${RM} $COMPARE_ROOT/`basename $old`.old $COMPARE_ROOT/`basename $old`.new
if [ $res -eq 0 ]
then
${ECHO} S
return
fi
name=`basename $1 | ${SED} 's!\.o!!'`
cntold=`strings $old | ${GREP} -c $name`
cntnew=`strings $new | ${GREP} -c $name`
if [ $cntold -gt 0 -a $cntnew -gt 0 ]
then
${ECHO} F
return
fi
${ECHO} 1
}
for F in `${CAT} $COMPARE_ROOT/list.old`
do
if [ "${IGNORE}" ] && [ "`${ECHO} $F | ${GREP} ${IGNORE}`" ]
then
#
# skip ignored files
#
continue;
fi
if [ "$PATTERN" ] && [ `${ECHO} $F | ${GREP} -c $PATTERN` -eq 0 ]
then
continue;
fi
f=`basename $F`
o=$OLD/$F
n=`findnew $F $f`
if [ "$n" ]
then
n="$NEW/$n"
${ECHO} `compare $o $n` : $f : $o : $n
else
${ECHO} "- : $f : $o "
fi
done

View File

@ -177,40 +177,44 @@ else
fi
fi
if [ "`uname`" == "SunOS" ]; then
PERM="gstat -c%a"
elif [ $OSTYPE == "cygwin" ]; then
PERM=
elif [ "`uname`" == "Darwin" ]; then
PERM="stat -f%p"
elif [ "`uname`" == "Linux" ]; then
PERM="stat -c%A"
else
PERM="stat -c%a"
fi
echo -n Permissions...
found=""
for f in `cd $OLD && find . -type f`
do
if [ ! -f ${OLD}/$f ]; then continue; fi
if [ ! -f ${NEW}/$f ]; then continue; fi
OP=`ls -l ${OLD}/$f | awk '{printf("%.10s\n", $1);}'`
NP=`ls -l ${NEW}/$f | awk '{printf("%.10s\n", $1);}'`
if [ "$OP" != "$NP" ]
then
if [ -z "$found" ]; then echo ; found="yes"; fi
printf "\told: ${OP} new: ${NP}\t$f\n"
fi
if [ "${PERM}" ]
then
echo -n Permissions...
found=""
for f in `cd $OLD && find . -type f`
do
if [ ! -f ${OLD}/$f ]; then continue; fi
if [ ! -f ${NEW}/$f ]; then continue; fi
OP=`${PERM} ${OLD}/$f`
NP=`${PERM} ${NEW}/$f`
if [ "$OP" != "$NP" ]
OF=`cd ${OLD} && file $f`
NF=`cd ${NEW} && file $f`
if [ "$f" = "./src.zip" ]
then
if [ "`echo $OF | grep -ic zip`" -gt 0 -a "`echo $NF | grep -ic zip`" -gt 0 ]
then
if [ -z "$found" ]; then echo ; found="yes"; fi
printf "\told: ${OP} new: ${NP}\t$f\n"
# the way we produces zip-files make it so that directories are stored in old file
# but not in new (only files with full-path)
# this makes file-5.09 report them as different
continue;
fi
done
if [ -z "$found" ]; then echo ; found="yes"; fi
fi
fi
if [ "$OF" != "$NF" ]
then
if [ -z "$found" ]; then echo ; found="yes"; fi
printf "\tFILE: old: ${OF} new: ${NF}\t$f\n"
fi
done
if [ -z "$found" ]; then echo ; found="yes"; fi
GENERAL_FILES=$(cd $OLD && find . -type f ! -name "*.so" ! -name "*.jar" ! -name "*.zip" \
! -name "*.debuginfo" ! -name "*.dylib" ! -name "jexec" \
! -name "ct.sym" \
! -name "ct.sym" ! -name "*.diz" \
| grep -v "./bin/" | sort | $FILTER)
echo General files...
for f in $GENERAL_FILES

View File

@ -49,21 +49,24 @@ then
fi
if [ "`uname`" == "SunOS" ]; then
NM=gnm
STAT="gstat -c%s"
if [ -f "`which nm`" ]; then
NM=nm
elif [ -f "`which gnm`" ]; then
NM=gnm
else
echo "No nm command found"
exit 10
fi
LDD=ldd
elif [ $OSTYPE == "cygwin" ]; then
NM="$VS100COMNTOOLS/../../VC/bin/amd64/dumpbin.exe"
NM_ARGS=/exports
STAT="stat -c%s"
LDD=
elif [ "`uname`" == "Darwin" ]; then
NM=nm
STAT="stat -f%z"
LDD="otool -L"
else
NM=nm
STAT="stat -c%s"
LDD=ldd
fi
@ -79,8 +82,8 @@ fi
OLD=$(cd $(dirname $1) && pwd)/$(basename $1)
NEW=$(cd $(dirname $2) && pwd)/$(basename $2)
OLD_SIZE=$($STAT "$OLD")
NEW_SIZE=$($STAT "$NEW")
OLD_SIZE=$(ls -l "$OLD" | awk '{ print $5 }')
NEW_SIZE=$(ls -l "$NEW" | awk '{ print $5 }')
if [ $# -gt 3 ]
then

View File

@ -72,7 +72,11 @@ else
fi
if [ "`uname`" == "SunOS" ]; then
DIFF=gdiff
if [ -f "`which gdiff`" ]; then
DIFF=gdiff
else
DIFF=diff
fi
else
DIFF=diff
fi

View File

@ -53,21 +53,27 @@ then
fi
if [ "`uname`" == "SunOS" ]; then
NM=gnm
STAT="gstat -c%s"
if [ -f "`which gnm`" ]; then
NM=gnm
# Jonas 2012-05-29: solaris native nm produces radically different output than gnm
# so if using that...we need different filter than "cut -f 2-"
#
elif [ -f "`which nm`" ]; then
NM=nm
else
echo "No nm command found"
exit 10
fi
LDD=ldd
elif [ $OSTYPE == "cygwin" ]; then
NM="$VS100COMNTOOLS/../../VC/bin/amd64/dumpbin.exe"
NM_ARGS=/exports
STAT="stat -c%s"
LDD=
elif [ "`uname`" == "Darwin" ]; then
NM=nm
STAT="stat -f%z"
LDD="otool -L"
else
NM=nm
STAT="stat -c%s"
LDD=ldd
fi
@ -83,8 +89,8 @@ fi
OLD=$(cd $(dirname $1) && pwd)/$(basename $1)
NEW=$(cd $(dirname $2) && pwd)/$(basename $2)
OLD_SIZE=$($STAT "$OLD")
NEW_SIZE=$($STAT "$NEW")
OLD_SIZE=$(ls -l "$OLD" | awk '{ print $5 }')
NEW_SIZE=$(ls -l "$NEW" | awk '{ print $5 }')
if [ $# -gt 3 ]
then
@ -122,8 +128,8 @@ then
exit 0
fi
OLD_SYMBOLS=$COMPARE_ROOT/$OLD_NAME.old
NEW_SYMBOLS=$COMPARE_ROOT/$NEW_NAME.new
OLD_SYMBOLS=$COMPARE_ROOT/nm.$OLD_NAME.old
NEW_SYMBOLS=$COMPARE_ROOT/nm.$NEW_NAME.new
mkdir -p $(dirname $OLD_SYMBOLS)
mkdir -p $(dirname $NEW_SYMBOLS)

View File

@ -56,10 +56,10 @@ define add_idl_package
$4_OLDIMPLBASE_MSG:=with -oldImplBase
endif
$5 : $4
mkdir -p $3/$$($4_TMPDIR)
rm -rf $3/$$($4_TMPDIR)
mkdir -p $(dir $5)
echo Compiling IDL $(patsubst $2/%,%,$4)
$(MKDIR) -p $3/$$($4_TMPDIR)
$(RM) -rf $3/$$($4_TMPDIR)
$(MKDIR) -p $(dir $5)
$(ECHO) Compiling IDL $(patsubst $2/%,%,$4)
$8 -td $3/$$($4_TMPDIR) \
-i $2/org/omg/CORBA \
-i $2/org/omg/PortableInterceptor \
@ -69,10 +69,10 @@ define add_idl_package
$$($4_OLDIMPLBASE) \
$(PREFIXES) \
$4
rm -f $$(addprefix $3/$$($4_TMPDIR)/,$6)
cp -rp $3/$$($4_TMPDIR)/* $3
(cd $3/$$($4_TMPDIR); find . -type f | sed 's!\./!$3/!g' | awk '{ print $$$$1 ": $4" }' > $5)
rm -rf $3/$$($4_TMPDIR)
$(RM) -f $$(addprefix $3/$$($4_TMPDIR)/,$6)
$(CP) -rp $3/$$($4_TMPDIR)/* $3
($(CD) $3/$$($4_TMPDIR); find . -type f | sed 's!\./!$3/!g' | awk '{ print $$$$1 ": $4" }' > $5)
$(RM) -rf $3/$$($4_TMPDIR)
endef
define SetupIdlCompilation
@ -87,11 +87,13 @@ $(if $6,$1_$(strip $6))
$(if $7,$1_$(strip $7))
$(if $8,$1_$(strip $8))
$(if $9,$1_$(strip $9))
$(if $(10),$(error Internal makefile error: Too many arguments to SetupIdlCompilation, please update IdlCompilation.gmk))
# Remove any relative addressing in the paths.
$1_SRC := $$(abspath $$($1_SRC))
$1_BIN := $$(abspath $$($1_BIN))
# Find all existing java files and existing class files.
$$(shell mkdir -p $$($1_SRC) $$($1_BIN))
$$(shell $(MKDIR) -p $$($1_SRC) $$($1_BIN))
$1_SRCS := $$(shell find $$($1_SRC) -name "*.idl")
$1_BINS := $$(shell find $$($1_BIN) -name "*.java")
# Prepend the source/bin path to the filter expressions.
@ -111,4 +113,3 @@ $$(foreach p,$$($1),$$(eval $$(call add_idl_package,$1,$$($1_SRC),$$($1_BIN),$$(
endef
.SUFFIXES: .java .class .package

View File

@ -94,6 +94,7 @@ define SetupJavaCompiler
$(if $7,$1_$(strip $7))
$(if $8,$1_$(strip $8))
$(if $9,$1_$(strip $9))
$(if $(10),$(error Internal makefile error: Too many arguments to SetupJavaCompiler, please update JavaCompilation.gmk))
ifeq ($$($1_MODE),MULTI_CORE_CONCURRENT)
ifneq (,$$($1_SERVER_DIR))
@ -130,6 +131,7 @@ define SetupArchive
# SKIP_METAINF:=Set to prevent contents of an META-INF directory to be automatically
# added to the archive.
# EXTRA_MANIFEST_ATTR:=Extra attribute to add to manifest.
# CHECK_COMPRESS_JAR Check the COMPRESS_JAR variable
$(if $3,$1_$(strip $3))
$(if $4,$1_$(strip $4))
$(if $5,$1_$(strip $5))
@ -143,6 +145,7 @@ define SetupArchive
$(if $(13),$1_$(strip $(13)))
$(if $(14),$1_$(strip $(14)))
$(if $(15),$1_$(strip $(15)))
$(if $(16),$(error Internal makefile error: Too many arguments to SetupArchive, please update JavaCompilation.gmk))
$1_JARMAIN:=$(strip $$($1_JARMAIN))
$1_JARNAME:=$$(notdir $$($1_JAR))
@ -243,6 +246,16 @@ define SetupArchive
($(FIND) $$(src) -name _the.package -exec $(TOUCH) -r $$($1_JAR) \{\} \; ; true) &&)
# Use a slightly shorter name for logging, but with enough path to identify this jar.
$1_NAME:=$$(subst $$(OUTPUT_ROOT)/,,$$($1_JAR))
ifneq (,$$($1_CHECK_COMPRESS_JAR))
$1_JAR_CREATE_OPTIONS := c0fm
ifeq ($(COMPRESS_JARS), true)
$1_JAR_CREATE_OPTIONS := cfm
endif
else
$1_JAR_CREATE_OPTIONS := cfm
endif
# Here is the rule that creates/updates the jar file.
$$($1_JAR) : $2 $$($1_ALL_SRC)
$(MKDIR) -p $$($1_BIN)
@ -283,7 +296,7 @@ define SetupArchive
$$(foreach src,$$($1_SRCS),($(FIND) $$(src) -name _the.package.api.notify $(FIND_DELETE); true) &&) true ; \
fi ; \
else \
$(ECHO) Creating $$($1_NAME) && $(JAR) cfm $$@ $$($1_MANIFEST_FILE) && \
$(ECHO) Creating $$($1_NAME) && $(JAR) $$($1_JAR_CREATE_OPTIONS) $$@ $$($1_MANIFEST_FILE) && \
$$($1_SCAPTURE_CONTENTS) \
$$($1_SCAPTURE_METAINF) \
$$($1_SUPDATE_CONTENTS) \
@ -311,6 +324,7 @@ define SetupZipArchive
$(if $7,$1_$(strip $7))
$(if $8,$1_$(strip $8))
$(if $9,$1_$(strip $9))
$(if $(10),$(error Internal makefile error: Too many arguments to SetupZipArchive, please update JavaCompilation.gmk))
# Find all files in the source tree.
$1_SUFFIX_FILTER := $$(patsubst %,-o -name $(DQUOTE)*%$(DQUOTE),$$($1_SUFFIXES))
@ -648,6 +662,7 @@ define SetupJavaCompilation
$(if $(12),$1_$(strip $(12)))
$(if $(13),$1_$(strip $(13)))
$(if $(14),$1_$(strip $(14)))
$(if $(15),$(error Internal makefile error: Too many arguments to SetupJavaCompilation, please update JavaCompilation.gmk))
# Extract the info from the java compiler setup.
$1_MODE := $$($$($1_SETUP)_MODE)
@ -688,6 +703,12 @@ $1_BINS := $$(shell $(FIND) $$($1_BIN) -name "*.class")
# Now we have a list of all java files to compile: $$($1_SRCS)
# and we have a list of all existing class files: $$($1_BINS)
# Create the corresponding smart javac wrapper command line.
$1_SJAVAC_ARGS:=$$(addprefix -x ,$$(addsuffix .*,$$(subst /,.,$$($1_EXCLUDES)))) \
$$(addprefix -i ,$$(addsuffix .*,$$(subst /,.,$$($1_INCLUDES)))) \
$$(addprefix -xf *,$$(strip $$($1_EXCLUDE_FILES))) \
$$(addprefix -if *,$$(strip $$($1_INCLUDE_FILES))) -src $$(subst $$(SPACE),$$(PATH_SEP),$$(strip $$($1_SRC)))
# Prepend the source/bin path to the filter expressions.
ifneq ($$($1_INCLUDES),)
$1_SRC_INCLUDES := $$(foreach i,$$($1_SRC),$$(addprefix $$i/,$$(addsuffix /%,$$($1_INCLUDES))))
@ -799,6 +820,12 @@ ifeq ($$($1_MODE),SINGLE_THREADED_BATCH)
$(RM) $$($1_BIN)/_the.batch $$($1_BIN)/_the.batch.tmp
$$(call ListPathsSafely,$1_SRCS,\n, >> $$($1_BIN)/_the.batch.tmp)
$(ECHO) Compiling `$(WC) $$($1_BIN)/_the.batch.tmp | $(TR) -s ' ' | $(CUT) -f 2 -d ' '` files in batch $1
ifeq ($$($1_NOSJAVAC),)
ifeq ($$(ENABLE_SJAVAC),yes)
mkdir -p $$($1_BIN)_sjavac
$$($1_JVM) $$(word 1,$$($1_JAVAC)) com.sun.tools.javac.smart.Main $$($1_SJAVAC_ARGS) -mfl $$($1_BIN)/_the.batch.tmp -d $$($1_BIN)_sjavac
endif
endif
($$($1_JVM) $$($1_JAVAC) $$($1_FLAGS) -implicit:none -sourcepath "$$($1_SRCROOTSC)" -d $$($1_BIN) $$($1_HEADERS_ARG) @$$($1_BIN)/_the.batch.tmp && \
$(MV) $$($1_BIN)/_the.batch.tmp $$($1_BIN)/_the.batch)
else
@ -890,5 +917,3 @@ ifneq (,$$($1_SRCZIP))
endif
endef

View File

@ -138,6 +138,7 @@ endef
# Hook to be called as the very first thing when running a normal build
define AtRootMakeStart
$(if $(findstring -j,$(MAKEFLAGS)), $(error make -j is not supported, use make JOBS=n))
$(call PrintStartMessage)
$(call StartTimer)
endef

View File

@ -0,0 +1,185 @@
#
# Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved.
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
#
# This code is free software; you can redistribute it and/or modify it
# under the terms of the GNU General Public License version 2 only, as
# published by the Free Software Foundation. Oracle designates this
# particular file as subject to the "Classpath" exception as provided
# by Oracle in the LICENSE file that accompanied this code.
#
# This code is distributed in the hope that it will be useful, but WITHOUT
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
# version 2 for more details (a copy is included in the LICENSE file that
# accompanied this code).
#
# You should have received a copy of the GNU General Public License version
# 2 along with this work; if not, write to the Free Software Foundation,
# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
#
# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
# or visit www.oracle.com if you need additional information or have any
# questions.
#
################################################################
#
# This file contains helper functions for the top-level Makefile that does
# not depend on the spec.gmk file having been read. (The purpose of this
# file is ju to avoid cluttering the top-level Makefile.)
#
################################################################
ifndef _MAKEHELPERS_GMK
_MAKEHELPERS_GMK := 1
##############################
# Stuff to run at include time
##############################
# Find out which variables were passed explicitely on the make command line. These
# will be passed on to sub-makes, overriding spec.gmk settings.
MAKE_ARGS=$(foreach var,$(subst =command,,$(filter %=command,$(foreach var,$(.VARIABLES),$(var)=$(firstword $(origin $(var)))))),$(var)=$($(var)))
list_alt_overrides_with_origins=$(filter ALT_%=environment ALT_%=command,$(foreach var,$(.VARIABLES),$(var)=$(firstword $(origin $(var)))))
list_alt_overrides=$(subst =command,,$(subst =environment,,$(list_alt_overrides_with_origins)))
##############################
# Functions
##############################
define fatal-error
# If the user specificed a "global" target (e.g. 'help'), do not exit but continue running
$$(if $$(findstring help,$$(MAKECMDGOALS)),,$$(error Cannot continue))
endef
define ParseLogLevel
ifeq ($$(origin VERBOSE),undefined)
# Setup logging according to LOG (but only if VERBOSE is not given)
ifeq ($$(LOG),)
# Set LOG to "warn" as default if not set (and no VERBOSE given)
LOG=warn
endif
ifeq ($$(LOG),warn)
VERBOSE=-s
else ifeq ($$(LOG),info)
VERBOSE=
else ifeq ($$(LOG),debug)
VERBOSE=
else ifeq ($$(LOG),trace)
VERBOSE=-d -p
else
$$(info Error: LOG must be one of: warn, info, debug or trace.)
$$(eval $$(call fatal-error))
endif
else
ifneq ($$(LOG),)
# We have both a VERBOSE and a LOG argument. This is OK only if this is a repeated call by ourselves,
# but complain if this is the top-level make call.
ifeq ($$(MAKELEVEL),0)
$$(info Cannot use LOG=$$(LOG) and VERBOSE=$$(VERBOSE) at the same time. Choose one.)
$$(eval $$(call fatal-error))
endif
endif
endif
endef
# TODO: Fix duplication in MakeBase.gmk
define SetupLogging
ifneq ($(findstring $(LOG),debug trace),)
# Shell redefinition trick inspired by http://www.cmcrossroads.com/ask-mr-make/6535-tracing-rule-execution-in-gnu-make
OLD_SHELL:=$$(SHELL)
SHELL = $$(warning Building $$@$$(if $$<, (from $$<))$(if $$?, ($$? newer)))$$(OLD_SHELL) -x
endif
endef
define ParseConfAndSpec
ifneq ($$(origin SPEC),undefined)
# We have been given a SPEC, check that it works out properly
ifeq ($$(wildcard $$(SPEC)),)
$$(info Cannot locate spec.gmk, given by SPEC=$$(SPEC))
$$(eval $$(call fatal-error))
endif
ifneq ($$(origin CONF),undefined)
# We also have a CONF argument. This is OK only if this is a repeated call by ourselves,
# but complain if this is the top-level make call.
ifeq ($$(MAKELEVEL),0)
$$(info Cannot use CONF=$$(CONF) and SPEC=$$(SPEC) at the same time. Choose one.)
$$(eval $$(call fatal-error))
endif
endif
# ... OK, we're satisfied, we'll use this SPEC later on
else
# Find all spec.gmk files in the build output directory
output_dir=$$(root_dir)/build
all_spec_files=$$(wildcard $$(output_dir)/*/spec.gmk)
ifeq ($$(all_spec_files),)
$$(info No configurations found for $$(root_dir)! Please run configure to create a configuration.)
$$(eval $$(call fatal-error))
endif
# Extract the configuration names from the path
all_confs=$$(patsubst %/spec.gmk,%,$$(patsubst $$(output_dir)/%,%,$$(all_spec_files)))
ifneq ($$(origin CONF),undefined)
# User have given a CONF= argument.
ifeq ($$(CONF),)
# If given CONF=, match all configurations
matching_confs=$$(strip $$(all_confs))
else
# Otherwise select those that contain the given CONF string
matching_confs=$$(strip $$(foreach var,$$(all_confs),$$(if $$(findstring $$(CONF),$$(var)),$$(var))))
endif
ifeq ($$(matching_confs),)
$$(info No configurations found matching CONF=$$(CONF))
$$(info Available configurations:)
$$(foreach var,$$(all_confs),$$(info * $$(var)))
$$(eval $$(call fatal-error))
else
ifeq ($$(words $$(matching_confs)),1)
$$(info Building '$$(matching_confs)' (matching CONF=$$(CONF)))
else
$$(info Building the following configurations (matching CONF=$$(CONF)):)
$$(foreach var,$$(matching_confs),$$(info * $$(var)))
endif
endif
# Create a SPEC definition. This will contain the path to one or more spec.gmk files.
SPEC=$$(addsuffix /spec.gmk,$$(addprefix $$(output_dir)/,$$(matching_confs)))
else
# No CONF or SPEC given, check the available configurations
ifneq ($$(words $$(all_spec_files)),1)
$$(info No CONF or SPEC given, but more than one spec.gmk found in $$(output_dir).)
$$(info Available configurations:)
$$(foreach var,$$(all_confs),$$(info * $$(var)))
$$(info Please retry building with CONF=<config> or SPEC=<specfile>)
$$(eval $$(call fatal-error))
endif
# We found exactly one configuration, use it
SPEC=$$(strip $$(all_spec_files))
endif
endif
endef
define CheckEnvironment
# Find all environment or command line variables that begin with ALT.
$(if $(list_alt_overrides),
@$(PRINTF) "\nWARNING: You have the following ALT_ variables set:\n"
@$(PRINTF) "$(foreach var,$(list_alt_overrides),$(var)=$$$(var))\n"
@$(PRINTF) "ALT_ variables are deprecated and will be ignored. Please clean your environment.\n\n"
)
endef
define PrintStartMessage
$(if $(VERBOSE),,@$(ECHO) Running make as $(MAKE) $(MFLAGS) $(MAKE_ARGS))
$(call CheckEnvironment)
@$(ECHO) "Building OpenJDK for target $(if $(MAKECMDGOALS),'$(MAKECMDGOALS)','all') in configuration '$(CONF_NAME)'"
endef
define PrintEndMessage
@$(ECHO) "Finished building OpenJDK for target '$@'"
$(call CheckEnvironment)
endef
endif # _MAKEHELPERS_GMK

View File

@ -26,241 +26,128 @@
# This must be the first rule
default: all
# Find out which variables were passed explicitely on the make command line. These
# will be passed on to sub-makes, overriding spec.gmk settings.
MAKE_ARGS=$(foreach var,$(subst =command,,$(filter %=command,$(foreach var,$(.VARIABLES),$(var)=$(firstword $(origin $(var)))))),$(var)=$($(var)))
define fatal-error
# If the user specificed a "global" target (e.g. 'help'), do not exit but continue running
$$(if $$(findstring help,$$(MAKECMDGOALS)),,$$(error Cannot continue))
endef
ifeq ($(origin VERBOSE),undefined)
# Setup logging according to LOG (but only if VERBOSE is not given)
ifeq ($(LOG),)
# Set LOG to "warn" as default if not set (and no VERBOSE given)
LOG=warn
endif
ifeq ($(LOG),warn)
VERBOSE=-s
else ifeq ($(LOG),info)
VERBOSE=
else ifeq ($(LOG),debug)
VERBOSE=
else ifeq ($(LOG),trace)
VERBOSE=-d -p
else
$(info Error: LOG must be one of: warn, info, debug or trace.)
$(eval $(call fatal-error))
endif
else
ifneq ($(LOG),)
# We have both a VERBOSE and a LOG argument. This is OK only if this is a repeated call by ourselves,
# but complain if this is the top-level make call.
ifeq ($(MAKELEVEL),0)
$(info Cannot use LOG=$(LOG) and VERBOSE=$(VERBOSE) at the same time. Choose one.)
$(eval $(call fatal-error))
endif
endif
endif
# TODO: Fix duplication in MakeBase.gmk
define SetupLogging
ifneq ($(findstring $(LOG),debug trace),)
# Shell redefinition trick inspired by http://www.cmcrossroads.com/ask-mr-make/6535-tracing-rule-execution-in-gnu-make
OLD_SHELL:=$$(SHELL)
SHELL = $$(warning Building $$@$$(if $$<, (from $$<))$(if $$?, ($$? newer)))$$(OLD_SHELL) -x
endif
endef
$(eval $(call SetupLogging))
# Find all environment or command line variables that begin with ALT.
list_alt_overrides_with_origins = $(filter ALT_%=environment ALT_%=command,$(foreach var,$(.VARIABLES),$(var)=$(firstword $(origin $(var)))))
list_alt_overrides=$(subst =command,,$(subst =environment,,$(list_alt_overrides_with_origins)))
# Locate this Makefile
ifeq ($(filter /%,$(lastword $(MAKEFILE_LIST))),)
makefile_path=$(CURDIR)/$(lastword $(MAKEFILE_LIST))
makefile_path:=$(CURDIR)/$(lastword $(MAKEFILE_LIST))
else
makefile_path=$(lastword $(MAKEFILE_LIST))
makefile_path:=$(lastword $(MAKEFILE_LIST))
endif
root_dir=$(patsubst %/common/makefiles/Makefile,%,$(makefile_path))
output_dir=$(root_dir)/build
root_dir:=$(patsubst %/common/makefiles/Makefile,%,$(makefile_path))
ifneq ($(origin SPEC),undefined)
# We have been given a SPEC, check that it works out properly
ifeq ($(wildcard $(SPEC)),)
$(info Cannot locate spec.gmk, given by SPEC=$(SPEC))
$(eval $(call fatal-error))
endif
ifneq ($(origin CONF),undefined)
# We also have a CONF argument. This is OK only if this is a repeated call by ourselves,
# but complain if this is the top-level make call.
ifeq ($(MAKELEVEL),0)
$(info Cannot use CONF=$(CONF) and SPEC=$(SPEC) at the same time. Choose one.)
$(eval $(call fatal-error))
endif
endif
# ... OK, we're satisfied, we'll use this SPEC later on
else
# Find all spec.gmk files in the build output directory
all_spec_files=$(wildcard $(output_dir)/*/spec.gmk)
ifeq ($(all_spec_files),)
$(info No configurations found for $(root_dir)! Please run configure to create a configuration.)
$(eval $(call fatal-error))
endif
# Extract the configuration names from the path
all_confs=$(patsubst %/spec.gmk,%,$(patsubst $(output_dir)/%,%,$(all_spec_files)))
# ... and then we can include our helper functions
include $(dir $(makefile_path))/MakeHelpers.gmk
ifneq ($(origin CONF),undefined)
# User have given a CONF= argument.
ifeq ($(CONF),)
# If given CONF=, match all configurations
matching_confs=$(strip $(all_confs))
else
# Otherwise select those that contain the given CONF string
matching_confs=$(strip $(foreach var,$(all_confs),$(if $(findstring $(CONF),$(var)),$(var))))
endif
ifeq ($(matching_confs),)
$(info No configurations found matching CONF=$(CONF))
$(info Available configurations:)
$(foreach var,$(all_confs),$(info * $(var)))
$(eval $(call fatal-error))
else
ifeq ($(words $(matching_confs)),1)
$(info Building '$(matching_confs)' (matching CONF=$(CONF)))
else
$(info Building the following configurations (matching CONF=$(CONF)):)
$(foreach var,$(matching_confs),$(info * $(var)))
endif
endif
$(eval $(call ParseLogLevel))
$(eval $(call SetupLogging))
$(eval $(call ParseConfAndSpec))
# Create a SPEC definition. This will contain the path to one or more spec.gmk files.
SPEC=$(addsuffix /spec.gmk,$(addprefix $(output_dir)/,$(matching_confs)))
else
# No CONF or SPEC given, check the available configurations
ifneq ($(words $(all_spec_files)),1)
$(info No CONF or SPEC given, but more than one spec.gmk found in $(output_dir).)
$(info Available configurations:)
$(foreach var,$(all_confs),$(info * $(var)))
$(info Please retry building with CONF=<config> or SPEC=<specfile>)
$(eval $(call fatal-error))
endif
# We found exactly one configuration, use it
SPEC=$(strip $(all_spec_files))
endif
# Setup number of jobs to use. -jN is unfortunately not available for us to parse from the command line,
# hence this workaround.
ifeq ($(JOBS),)
JOBS=$(NUM_CORES)
endif
ifneq ($(words $(SPEC)),1)
# We have multiple configurations to build, call make repeatedly
all jdk hotspot jaxws jaxp corba langtools install images packages clean dist-clean:
### We have multiple configurations to build, call make repeatedly
all jdk hotspot jaxws jaxp corba langtools install images clean dist-clean:
@$(foreach spec,$(SPEC),($(MAKE) -f $(makefile_path) SPEC=$(spec) $(VERBOSE) VERBOSE=$(VERBOSE) $@ $(MAKE_ARGS)) &&) true
.PHONY: all jdk hotspot jaxws jaxp corba langtools install images packages clean dist-clean
.PHONY: all jdk hotspot jaxws jaxp corba langtools install images clean dist-clean
else
# This is the main part of the Makefile, for the normal case with SPEC specifying a single existing spec.gmk file.
### This is the main part of the Makefile, for the normal case with SPEC specifying a single existing spec.gmk file.
# Now load the spec
-include $(SPEC)
include $(SPEC)
# Load the vital tools for all the makefiles.
-include $(SRC_ROOT)/common/makefiles/MakeBase.gmk
include $(SRC_ROOT)/common/makefiles/MakeBase.gmk
# Remove any build.log from a previous run
### Clean up from previous run
# Remove any build.log from a previous run, if they exist
ifneq (,$(BUILD_LOG))
$(shell $(RM) $(BUILD_LOG))
ifneq (,$(BUILD_LOG_PREVIOUS))
# Rotate old log
$(shell $(RM) $(BUILD_LOG_PREVIOUS) 2> /dev/null)
$(shell $(MV) $(BUILD_LOG) $(BUILD_LOG_PREVIOUS) 2> /dev/null)
else
$(shell $(RM) $(BUILD_LOG) 2> /dev/null)
endif
endif
# Remove any javac server logs and port files. This
# prevents a new make run to reuse the previous servers.
ifneq (,$(JAVAC_SERVERS))
$(shell mkdir -p $(JAVAC_SERVERS) && rm -rf $(JAVAC_SERVERS)/*)
endif
# Reset the build timers.
$(eval $(call ResetTimers))
# Clean out any notifications from the previous build.
$(shell find $(OUTPUT_ROOT) -name "_the.*.notify" $(FIND_DELETE))
# If make was called explicitely with -j, don't add a -j ourself to sub-makes, since
# this will be inherited automatically by make. Otherwise use our default for sub-makes.
# The -j in MAKEFLAGS is only visible when executing a recipe, hence this macro.
define GetMakeJobFlag
$(if $(findstring -j,$(MAKEFLAGS)),,-j$(NUM_CORES))
endef
# Reset the build timers.
$(eval $(call ResetTimers))
define CheckEnvironment
$(if $(list_alt_overrides),
@$(PRINTF) "\nWARNING: You have the following ALT_ variables set:\n"
@$(PRINTF) "$(foreach var,$(list_alt_overrides),$(var)=$$$(var))\n"
@$(PRINTF) "ALT_ variables are deprecated and will be ignored. Please clean your environment.\n"
)
endef
define PrintStartMessage
$(if $(VERBOSE),,@$(ECHO) Running make as $(MAKE) $(MFLAGS) $(MAKE_ARGS))
$(call CheckEnvironment)
@$(ECHO) "Building OpenJDK for target $(if $(MAKECMDGOALS),'$(MAKECMDGOALS)','all') in configuration '$(CONF_NAME)'"
endef
define PrintEndMessage
@$(ECHO) "Finished building OpenJDK for target '$@'"
$(call CheckEnvironment)
endef
### Main targets
all: jdk
@$(if $(JAVAC_SERVERS),rm -rf $(JAVAC_SERVERS)/*.port)
@$(call AtRootMakeEnd)
langtools: start-make
langtools: start-make langtools-only
langtools-only:
@$(call MakeStart,langtools,all)
@($(CD) $(LANGTOOLS_TOPDIR)/makefiles && $(BUILD_LOG_WRAPPER) $(MAKE) $(call GetMakeJobFlag) $(LANGTOOLS_MAKE_ARGS) $(MAKE_ARGS))
@($(CD) $(LANGTOOLS_TOPDIR)/makefiles && $(BUILD_LOG_WRAPPER) $(MAKE) -j$(JOBS) $(MAKE_ARGS))
@$(call MakeFinish,langtools,all)
corba: langtools
corba: langtools corba-only
corba-only:
@$(call MakeStart,corba,all)
@($(CD) $(CORBA_TOPDIR)/makefiles && $(BUILD_LOG_WRAPPER) $(MAKE) $(call GetMakeJobFlag) $(CORBA_MAKE_ARGS) $(MAKE_ARGS))
@($(CD) $(CORBA_TOPDIR)/makefiles && $(BUILD_LOG_WRAPPER) $(MAKE) -j$(JOBS) $(MAKE_ARGS))
@$(call MakeFinish,corba,all)
jaxp: langtools
jaxp: langtools jaxp-only
jaxp-only:
@$(call MakeStart,jaxp,all)
@($(CD) $(JAXP_TOPDIR)/makefiles && $(BUILD_LOG_WRAPPER) $(MAKE) $(call GetMakeJobFlag) $(CORBA_MAKE_ARGS) $(MAKE_ARGS))
@($(CD) $(JAXP_TOPDIR)/makefiles && $(BUILD_LOG_WRAPPER) $(MAKE) -j$(JOBS) $(MAKE_ARGS))
@$(call MakeFinish,jaxp,all)
jaxws: langtools jaxp
jaxws: langtools jaxp jaxws-only
jaxws-only:
@$(call MakeStart,jaxws,all)
@($(CD) $(JAXWS_TOPDIR)/makefiles && $(BUILD_LOG_WRAPPER) $(MAKE) $(call GetMakeJobFlag) $(CORBA_MAKE_ARGS) $(MAKE_ARGS))
@($(CD) $(JAXWS_TOPDIR)/makefiles && $(BUILD_LOG_WRAPPER) $(MAKE) -j$(JOBS) $(MAKE_ARGS))
@$(call MakeFinish,jaxws,all)
hotspot: langtools
hotspot: langtools hotspot-only
hotspot-only:
@$(call MakeStart,hotspot,all)
@($(CD) $(HOTSPOT_TOPDIR)/make && $(BUILD_LOG_WRAPPER) $(MAKE) -j1 $(HOTSPOT_MAKE_ARGS) $(MAKE_ARGS))
@$(call MakeFinish,hotspot,all)
jdk: langtools corba jaxp jaxws hotspot
jdk: langtools corba jaxp jaxws hotspot jdk-only
jdk-only:
@$(call MakeStart,jdk,all)
@($(CD) $(JDK_TOPDIR)/makefiles && $(BUILD_LOG_WRAPPER) $(MAKE) $(call GetMakeJobFlag) $(JDK_MAKE_ARGS) $(MAKE_ARGS))
@($(CD) $(JDK_TOPDIR)/makefiles && $(BUILD_LOG_WRAPPER) $(MAKE) -j$(JOBS) $(MAKE_ARGS))
@$(call MakeFinish,jdk,all)
images install packages: source-tips start-make jdk langtools corba jaxp jaxws hotspot
images: source-tips start-make jdk langtools corba jaxp jaxws hotspot images-only
images-only:
@$(call MakeStart,jdk-images,$@)
@($(CD) $(JDK_TOPDIR)/makefiles && $(BUILD_LOG_WRAPPER) $(MAKE) $(call GetMakeJobFlag) $(JDK_MAKE_ARGS) $(MAKE_ARGS) $@)
@($(CD) $(JDK_TOPDIR)/makefiles && $(BUILD_LOG_WRAPPER) $(MAKE) -j$(JOBS) $(JDK_MAKE_ARGS) $(MAKE_ARGS) images)
@$(call MakeFinish,jdk-images,$@)
@$(if $(JAVAC_SERVERS),rm -rf $(JAVAC_SERVERS)/*.port)
@$(call AtRootMakeEnd)
old-images: source-tips start-make jdk langtools corba jaxp jaxws hotspot
@$(call MakeStart,jdk-old-images,$@)
@($(CD) $(JDK_TOPDIR)/makefiles && $(BUILD_LOG_WRAPPER) $(MAKE) $(call GetMakeJobFlag) $(JDK_MAKE_ARGS) $(MAKE_ARGS) $@)
@$(call MakeFinish,old-jdk-images,$@)
install: source-tips start-make jdk langtools corba jaxp jaxws hotspot install-only
install-only:
@$(call MakeStart,jdk-images,$@)
@($(CD) $(JDK_TOPDIR)/makefiles && $(BUILD_LOG_WRAPPER) $(MAKE) -j$(JOBS) $(JDK_MAKE_ARGS) $(MAKE_ARGS) install)
@$(call MakeFinish,jdk-images,$@)
@$(if $(JAVAC_SERVERS),rm -rf $(JAVAC_SERVERS)/*.port)
@$(call AtRootMakeEnd)
start-make:
@$(call AtRootMakeStart)
.PHONY: jdk hotspot jaxws jaxp corba langtools install images packages start-make
.PHONY: jdk hotspot jaxws jaxp corba langtools install images start-make
test: start-make
@$(call MakeStart,test,$(if $(TEST),$(TEST),all))
@ -281,7 +168,7 @@ $(OUTPUT_ROOT)/source_tips: FRC
# Remove everything, except the output from configure.
clean:
@(cd $(OUTPUT_ROOT) && $(RM) -r `$(LS) $(OUTPUT_ROOT) | grep -v spec.gmk | grep -v Makefile | grep -v config.status | grep -v config.log | grep -v config.h | grep -v configure-arguments | grep -v "localdevenv.*" | grep -v uncygdrive.exe`)
@(cd $(OUTPUT_ROOT) && $(RM) -r `$(LS) $(OUTPUT_ROOT) | grep -v spec.gmk | grep -v spec.sh | grep -v Makefile | grep -v config.status | grep -v config.log | grep -v config.h | grep -v configure-arguments | grep -v "localdevenv.*" | grep -v uncygdrive.exe`)
@$(ECHO) Cleaned everything except the build configuration.
.PHONY: clean
@ -292,7 +179,7 @@ dist-clean:
.PHONY: dist-clean
clean-jdk:
@(cd $(OUTPUT_ROOT) && $(RM) -r `$(LS) $(OUTPUT_ROOT) | grep -v spec.gmk | grep -v Makefile | grep -v config.status | grep -v config.log | grep -v config.h | grep -v configure-arguments | \
@(cd $(OUTPUT_ROOT) && $(RM) -r `$(LS) $(OUTPUT_ROOT) | grep -v spec.gmk | grep -v spec.sh | grep -v Makefile | grep -v config.status | grep -v config.log | grep -v config.h | grep -v configure-arguments | \
grep -v langtools | grep -v corba | grep -v jaxp | grep -v jaxws | grep -v hotspot`)
@$(ECHO) "Cleaned jdk build artifacts (but not langtools,corba,jaxp,jaxws,hotspot nor the build configuration)"
.PHONY: clean

View File

@ -51,47 +51,55 @@ define add_native_source
# param 5 = the c compiler
# param 6 = the c++ flags to the compiler
# param 7 = the c++ compiler
# param 8 = the flags to the assembler
ifneq (,$$(filter %.c,$2))
# Compile as a C file
$1_$2_FLAGS=$4 $$($1_$(notdir $2)_CFLAGS)
$1_$2_FLAGS=$4 $$($1_$(notdir $2)_CFLAGS) -c
$1_$2_COMP=$5
$1_$2_DEP_FLAG:=$(C_FLAG_DEPS)
else ifneq (,$$(filter %.m,$2))
# Compile as a objective-c file
$1_$2_FLAGS=-x objective-c $4 $$($1_$(notdir $2)_CFLAGS)
$1_$2_FLAGS=-x objective-c $4 $$($1_$(notdir $2)_CFLAGS) -c
$1_$2_COMP=$5
$1_$2_DEP_FLAG:=$(C_FLAG_DEPS)
else ifneq (,$$(filter %.s,$2))
# Compile as assembler file
$1_$2_FLAGS=$8
$1_$2_COMP=$(AS)
$1_$2_DEP_FLAG:=
else
# Compile as a C++ file
$1_$2_FLAGS=$6 $$($1_$(notdir $2)_CXXFLAGS)
$1_$2_FLAGS=$6 $$($1_$(notdir $2)_CXXFLAGS) -c
$1_$2_COMP=$7
$1_$2_DEP_FLAG:=$(CXX_FLAG_DEPS)
endif
# Generate the .o (.obj) file name and place it in the bin dir.
$1_$2_OBJ:=$3/$$(patsubst %.cpp,%$(OBJ_SUFFIX),$$(patsubst %.c,%$(OBJ_SUFFIX),$$(patsubst %.m,%$(OBJ_SUFFIX),$$(notdir $2))))
$1_$2_OBJ:=$3/$$(patsubst %.cpp,%$(OBJ_SUFFIX),$$(patsubst %.c,%$(OBJ_SUFFIX),$$(patsubst %.m,%$(OBJ_SUFFIX),$$(patsubst %.s,%$(OBJ_SUFFIX),$$(notdir $2)))))
# Only continue if this object file hasn't been processed already. This lets the first found
# source file override any other with the same name.
ifeq (,$$(findstring $$($1_$2_OBJ),$$($1_OBJS_SO_FAR)))
$1_OBJS_SO_FAR+=$$($1_$2_OBJ)
# And this is the dependency file for this obj file.
$1_$2_DEP:=$$(patsubst %$(OBJ_SUFFIX),%.d,$$($1_$2_OBJ))
# Include previously generated dependency information. (if it exists)
-include $$($1_$2_DEP)
ifeq (,$$(filter %.s,$2))
# And this is the dependency file for this obj file.
$1_$2_DEP:=$$(patsubst %$(OBJ_SUFFIX),%.d,$$($1_$2_OBJ))
# Include previously generated dependency information. (if it exists)
-include $$($1_$2_DEP)
ifeq ($(COMPILER_TYPE),CL)
$1_$2_DEBUG_OUT_FLAGS:=-Fd$$(patsubst %$(OBJ_SUFFIX),%.pdb,$$($1_$2_OBJ)) \
-Fm$$(patsubst %$(OBJ_SUFFIX),%.map,$$($1_$2_OBJ))
ifeq ($(COMPILER_TYPE),CL)
$1_$2_DEBUG_OUT_FLAGS:=-Fd$$(patsubst %$(OBJ_SUFFIX),%.pdb,$$($1_$2_OBJ)) \
-Fm$$(patsubst %$(OBJ_SUFFIX),%.map,$$($1_$2_OBJ))
endif
endif
$$($1_$2_OBJ) : $2
ifeq ($(COMPILER_TYPE),CC)
$$(call COMPILING_MSG,$$(notdir $2))
$$($1_$2_COMP) $$($1_$2_FLAGS) $$($1_$2_DEP_FLAG) $$($1_$2_DEP) -c $(CC_OUT_OPTION)$$($1_$2_OBJ) $2
$$($1_$2_COMP) $$($1_$2_FLAGS) $$($1_$2_DEP_FLAG) $$($1_$2_DEP) $(CC_OUT_OPTION)$$($1_$2_OBJ) $2
endif
ifeq ($(COMPILER_TYPE),CL)
$$(call COMPILING_MSG,$$(notdir $2))
$$($1_$2_COMP) $$($1_$2_FLAGS) $$($1_$2_DEBUG_OUT_FLAGS) -c $(CC_OUT_OPTION)$$($1_$2_OBJ) $2
$$($1_$2_COMP) $$($1_$2_FLAGS) $$($1_$2_DEBUG_OUT_FLAGS) $(CC_OUT_OPTION)$$($1_$2_OBJ) $2
endif
endif
endef
@ -107,9 +115,9 @@ define SetupNativeCompilation
# LDFLAGS_SUFFIX the linker flags to be added last on the commandline
# typically the libraries linked to.
# ARFLAGS the archiver flags to be used
# BIN the directory where we store the object files
# LIB the resulting library file
# EXE the resulting exec file
# OBJECT_DIR the directory where we store the object files
# LIBRARY the resulting library file
# PROGRAM the resulting exec file
# INCLUDES only pick source from these directories
# EXCLUDES do not pick source from these directories
# INCLUDE_FILES only compile exactly these files!
@ -118,6 +126,9 @@ define SetupNativeCompilation
# RC_FLAGS flags for RC.
# MAPFILE mapfile
# REORDER reorder file
# DEBUG_SYMBOLS add debug symbols (if configured on)
# CC the compiler to use, default is $(CC)
# LDEXE the linker to use for linking executables, default is $(LDEXE)
$(if $2,$1_$(strip $2))
$(if $3,$1_$(strip $3))
$(if $4,$1_$(strip $4))
@ -137,13 +148,94 @@ define SetupNativeCompilation
$(if $(18),$1_$(strip $(18)))
$(if $(19),$1_$(strip $(19)))
$(if $(20),$1_$(strip $(20)))
$(if $(21),$1_$(strip $(21)))
$(if $(22),$(error Internal makefile error: Too many arguments to SetupNativeCompilation, please update NativeCompilation.gmk))
ifneq (,$$($1_BIN))
$$(error BIN has been replaced with OBJECT_DIR)
endif
ifneq (,$$($1_LIB))
$$(error LIB has been replaced with LIBRARY)
endif
ifneq (,$$($1_EXE))
$$(error EXE has been replaced with PROGRAM)
endif
ifneq (,$$($1_LIBRARY))
ifeq (,$$($1_OUTPUT_DIR))
$$(error LIBRARY requires OUTPUT_DIR)
endif
ifneq ($$($1_LIBRARY),$(basename $$($1_LIBRARY)))
$$(error directory of LIBRARY should be specified using OUTPUT_DIR)
endif
ifneq (,$(findstring $(SHARED_LIBRARY_SUFFIX),$$($1_LIBRARY)))
$$(error LIBRARY should be specified without SHARED_LIBRARY_SUFFIX: $(SHARED_LIBRARY_SUFFIX))
endif
ifneq (,$(findstring $(LIBRARY_PREFIX),$$($1_LIBRARY)))
$$(error LIBRARY should be specified without LIBRARY_PREFIX: $(LIBRARY_PREFIX))
endif
$1_BASENAME:=$(LIBRARY_PREFIX)$$($1_LIBRARY)$(SHARED_LIBRARY_SUFFIX)
$1_TARGET:=$$($1_OUTPUT_DIR)/$$($1_BASENAME)
endif
ifneq (,$$($1_STATIC_LIBRARY))
ifeq (,$$($1_OUTPUT_DIR))
$$(error STATIC_LIBRARY requires OUTPUT_DIR)
endif
ifneq ($$($1_STATIC_LIBRARY),$(basename $$($1_STATIC_LIBRARY)))
$$(error directory of STATIC_LIBRARY should be specified using OUTPUT_DIR)
endif
ifneq (,$(findstring $(STATIC_LIBRARY_SUFFIX),$$($1_STATIC_LIBRARY)))
$$(error STATIC_LIBRARY should be specified without STATIC_LIBRARY_SUFFIX: $(STATIC_LIBRARY_SUFFIX))
endif
ifneq (,$(findstring $(LIBRARY_PREFIX),$$($1_STATIC_LIBRARY)))
$$(error STATIC_LIBRARY should be specified without LIBRARY_PREFIX: $(LIBRARY_PREFIX))
endif
$1_BASENAME:=$(LIBRARY_PREFIX)$$($1_STATIC_LIBRARY)$(STATIC_LIBRARY_SUFFIX)
$1_TARGET:=$$($1_OUTPUT_DIR)/$$($1_BASENAME)
endif
ifneq (,$$($1_PROGRAM))
ifeq (,$$($1_OUTPUT_DIR))
$$(error PROGRAM requires OUTPUT_DIR)
endif
ifneq ($$($1_PROGRAM),$(basename $$($1_PROGRAM)))
$$(error directory of PROGRAM should be specified using OUTPUT_DIR)
endif
ifneq (,$(findstring $(EXE_SUFFIX),$$($1_PROGRAM)))
$$(error PROGRAM should be specified without EXE_SUFFIX: $(EXE_SUFFIX))
endif
$1_BASENAME:=$$($1_PROGRAM)$(EXE_SUFFIX)
$1_TARGET:=$$($1_OUTPUT_DIR)/$$($1_BASENAME)
endif
ifeq (,$$($1_TARGET))
$$(error Neither PROGRAM, LIBRARY nor STATIC_LIBRARY has been specified for SetupNativeCompilation)
endif
ifeq (,$$($1_LANG))
$$(error You have to specify LANG for native compilation $1)
endif
ifeq (C,$$($1_LANG))
ifeq ($$($1_LDEXE),)
$1_LDEXE:=$(LDEXE)
endif
$1_LD:=$(LD)
$1_LDEXE:=$(LDEXE)
else
ifeq (C++,$$($1_LANG))
$1_LD:=$(LDCXX)
@ -153,8 +245,12 @@ define SetupNativeCompilation
endif
endif
ifeq ($$($1_CC),)
$1_CC:=$(CC)
endif
# Make sure the dirs exist.
$$(shell $(MKDIR) -p $$($1_SRC) $$($1_BIN) $$(dir $$($1_LIB)) $$(dir $$($1_EXE)))
$$(shell $(MKDIR) -p $$($1_SRC) $$($1_OBJECT_DIR) $$($1_OUTPUT_DIR))
# Find all files in the source trees. Sort to remove duplicates.
$1_ALL_SRCS := $$(sort $$(foreach i,$$($1_SRC), $$(shell $(FIND) $$i -type f)))
# Extract the C/C++ files.
@ -163,7 +259,7 @@ define SetupNativeCompilation
ifneq ($$($1_EXCLUDE_FILES),)
$1_EXCLUDE_FILES:=$$(addprefix %,$$($1_EXCLUDE_FILES))
endif
$1_SRCS := $$(filter-out $$($1_EXCLUDE_FILES),$$(filter %.c %.cpp %.m,$$($1_ALL_SRCS)))
$1_SRCS := $$(filter-out $$($1_EXCLUDE_FILES),$$(filter %.s %.c %.cpp %.m,$$($1_ALL_SRCS)))
ifneq (,$$(strip $$($1_INCLUDE_FILES)))
$1_SRCS := $$(filter $$($1_INCLUDE_FILES),$$($1_SRCS))
endif
@ -171,7 +267,7 @@ define SetupNativeCompilation
$$(error No sources found for $1 when looking inside the dirs $$($1_SRC))
endif
# There can be only a single bin dir root, no need to foreach over the roots.
$1_BINS := $$(wildcard $$($1_BIN)/*$(OBJ_SUFFIX))
$1_BINS := $$(wildcard $$($1_OBJECT_DIR)/*$(OBJ_SUFFIX))
# Now we have a list of all c/c++ files to compile: $$($1_SRCS)
# and we have a list of all existing object files: $$($1_BINS)
@ -187,37 +283,36 @@ define SetupNativeCompilation
# Calculate the expected output from compiling the sources (sort to remove duplicates. Also provides
# a reproducable order on the input files to the linker).
$1_EXPECTED_OBJS:=$$(sort $$(addprefix $$($1_BIN)/,$$(patsubst %.cpp,%$(OBJ_SUFFIX),$$(patsubst %.c,%$(OBJ_SUFFIX),$$(patsubst %.m,%$(OBJ_SUFFIX),$$(notdir $$($1_SRCS)))))))
$1 := $$($1_EXPECTED_OBJS)
$1_EXPECTED_OBJS:=$$(sort $$(addprefix $$($1_OBJECT_DIR)/,$$(patsubst %.cpp,%$(OBJ_SUFFIX),$$(patsubst %.c,%$(OBJ_SUFFIX),$$(patsubst %.m,%$(OBJ_SUFFIX),$$(patsubst %.s,%$(OBJ_SUFFIX),$$(notdir $$($1_SRCS))))))))
# Are there too many object files on disk? Perhaps because some source file was removed?
$1_SUPERFLOUS_OBJS:=$$(sort $$(filter-out $$($1_EXPECTED_OBJS),$$($1_BINS)))
# Clean out the superfluous object files.
$$(shell $(RM) -f $$($1_SUPERFLUOUS_OBJS))
# Pickup extra HOST_OS_API and/or PLATFORM dependent variables for CFLAGS.
$1_EXTRA_CFLAGS:=$$($1_CFLAGS_$(HOST_OS_API)) $$($1_CFLAGS_$(PLATFORM))
# Pickup extra OPENJDK_TARGET_OS_API and/or OPENJDK_TARGET_OS dependent variables for CFLAGS.
$1_EXTRA_CFLAGS:=$$($1_CFLAGS_$(OPENJDK_TARGET_OS_API)) $$($1_CFLAGS_$(OPENJDK_TARGET_OS))
ifneq ($(DEBUG_LEVEL),release)
# Pickup extra debug dependent variables for CFLAGS
$1_EXTRA_CFLAGS+=$$($1_CFLAGS_debug)
$1_EXTRA_CFLAGS+=$$($1_CFLAGS_$(HOST_OS_API)_debug)
$1_EXTRA_CFLAGS+=$$($1_CFLAGS_$(PLATFORM)_debug)
$1_EXTRA_CFLAGS+=$$($1_CFLAGS_$(OPENJDK_TARGET_OS_API)_debug)
$1_EXTRA_CFLAGS+=$$($1_CFLAGS_$(OPENJDK_TARGET_OS)_debug)
else
$1_EXTRA_CFLAGS+=$$($1_CFLAGS_release)
$1_EXTRA_CFLAGS+=$$($1_CFLAGS_$(HOST_OS_API)_release)
$1_EXTRA_CFLAGS+=$$($1_CFLAGS_$(PLATFORM)_release)
$1_EXTRA_CFLAGS+=$$($1_CFLAGS_$(OPENJDK_TARGET_OS_API)_release)
$1_EXTRA_CFLAGS+=$$($1_CFLAGS_$(OPENJDK_TARGET_OS)_release)
endif
# Pickup extra HOST_OS_API and/or PLATFORM dependent variables for CXXFLAGS.
$1_EXTRA_CXXFLAGS:=$$($1_CXXFLAGS_$(HOST_OS_API)) $$($1_CXXFLAGS_$(PLATFORM))
# Pickup extra OPENJDK_TARGET_OS_API and/or OPENJDK_TARGET_OS dependent variables for CXXFLAGS.
$1_EXTRA_CXXFLAGS:=$$($1_CXXFLAGS_$(OPENJDK_TARGET_OS_API)) $$($1_CXXFLAGS_$(OPENJDK_TARGET_OS))
ifneq ($(DEBUG_LEVEL),release)
# Pickup extra debug dependent variables for CXXFLAGS
$1_EXTRA_CXXFLAGS+=$$($1_CXXFLAGS_debug)
$1_EXTRA_CXXFLAGS+=$$($1_CXXFLAGS_$(HOST_OS_API)_debug)
$1_EXTRA_CXXFLAGS+=$$($1_CXXFLAGS_$(PLATFORM)_debug)
$1_EXTRA_CXXFLAGS+=$$($1_CXXFLAGS_$(OPENJDK_TARGET_OS_API)_debug)
$1_EXTRA_CXXFLAGS+=$$($1_CXXFLAGS_$(OPENJDK_TARGET_OS)_debug)
else
$1_EXTRA_CXXFLAGS+=$$($1_CXXFLAGS_release)
$1_EXTRA_CXXFLAGS+=$$($1_CXXFLAGS_$(HOST_OS_API)_release)
$1_EXTRA_CXXFLAGS+=$$($1_CXXFLAGS_$(PLATFORM)_release)
$1_EXTRA_CXXFLAGS+=$$($1_CXXFLAGS_$(OPENJDK_TARGET_OS_API)_release)
$1_EXTRA_CXXFLAGS+=$$($1_CXXFLAGS_$(OPENJDK_TARGET_OS)_release)
endif
ifeq ($$($1_CXXFLAGS),)
@ -232,33 +327,62 @@ define SetupNativeCompilation
$1_EXTRA_CXXFLAGS += $$(CXX_FLAG_REORDER)
endif
ifneq (no, $(ENABLE_DEBUG_SYMBOLS))
ifneq ($(OPENJDK_TARGET_OS), solaris)
# <weird code />
# There is very weird code in Defs-solaris.gmk that first sets variables as decribed below
# and then a couple of hundreds of line below resets them...
# this feels like a sure bug...but before this is confirmed, mimic this behaviour
# (note: skip indenting this as it will surely be removed anyway)
# <weird code />
ifneq (,$$($1_DEBUG_SYMBOLS))
$1_OPTIMIZATION := LOW
$1_EXTRA_CFLAGS += $(CFLAGS_DEBUG_SYMBOLS)
$1_EXTRA_CXXFLAGS += $(CXXFLAGS_DEBUG_SYMBOLS)
endif
# <weird code />
endif
# <weird code />
endif
ifeq (NONE, $$($1_OPTIMIZATION))
$1_EXTRA_CFLAGS += $$(C_O_FLAG_NONE)
$1_EXTRA_CXXFLAGS += $$(CXX_O_FLAG_NONE)
else ifeq (LOW, $$($1_OPTIMIZATION))
$1_EXTRA_CFLAGS += $$(C_O_FLAG_NORM)
$1_EXTRA_CXXFLAGS += $$(CXX_O_FLAG_NORM)
else ifeq (HIGH, $$($1_OPTIMIZATION))
$1_EXTRA_CFLAGS += $$(C_O_FLAG_HI)
$1_EXTRA_CXXFLAGS += $$(CXX_O_FLAG_HI)
else ifeq (HIGHEST, $$($1_OPTIMIZATION))
$1_EXTRA_CFLAGS += $$(C_O_FLAG_HIGHEST)
$1_EXTRA_CXXFLAGS += $$(CXX_O_FLAG_HIGHEST)
else ifneq (, $$($1_OPTIMIZATION))
$$(error Unknown value for OPTIMIZATION: $$($1_OPTIMIZATION))
endif
# Now create a list of the packages that are about to compile. Used when sending source
# in a batch to the compiler.
$$(shell $(RM) $$($1_BIN)/_the.list_of_sources)
$$(eval $$(call ListPathsSafelyNow,$1_SRCS,\n, >> $$($1_BIN)/_the.list_of_sources))
$$(shell $(RM) $$($1_OBJECT_DIR)/_the.list_of_sources)
$$(eval $$(call ListPathsSafelyNow,$1_SRCS,\n, >> $$($1_OBJECT_DIR)/_the.list_of_sources))
# Now call add_native_source for each source file we are going to compile.
$$(foreach p,$$($1_SRCS),\
$$(eval $$(call add_native_source,$1,$$p,$$($1_BIN),\
$$($1_CFLAGS) $$($1_EXTRA_CFLAGS),$(CC),\
$$($1_CXXFLAGS) $$($1_EXTRA_CXXFLAGS),$(CXX))))
$$(eval $$(call add_native_source,$1,$$p,$$($1_OBJECT_DIR),\
$$($1_CFLAGS) $$($1_EXTRA_CFLAGS),$$($1_CC),\
$$($1_CXXFLAGS) $$($1_EXTRA_CXXFLAGS),$(CXX),$$($1_ASFLAGS))))
# On windows we need to create a resource file
ifeq ($(HOST_OS_API), winapi)
ifeq ($(OPENJDK_TARGET_OS_API), winapi)
ifneq (,$$($1_VERSIONINFO_RESOURCE))
ifneq (,$$($1_LIB))
$1_BASENAME:=$$(basename $$(notdir $$($1_LIB)))
endif
ifneq (,$$($1_EXE))
$1_BASENAME:=$$(basename $$(notdir $$($1_EXE)))
endif
$1_RES:=$$($1_BIN)/$$($1_BASENAME).res
$1_RES:=$$($1_OBJECT_DIR)/$$($1_BASENAME).res
$$($1_RES): $$($1_VERSIONINFO_RESOURCE)
$(RC) $$($1_RC_FLAGS) $(CC_OUT_OPTION)$$@ $$($1_VERSIONINFO_RESOURCE)
endif
ifneq (,$$($1_MANIFEST))
$1_PROGRAM:=$$(basename $$(notdir $$($1_EXE)))
$1_GEN_MANIFEST:=$$($1_BIN)/$$($1_PROGRAM).manifest
$1_GEN_MANIFEST:=$$($1_OBJECT_DIR)/$$($1_PROGRAM).manifest
IMVERSIONVALUE:=$(JDK_MINOR_VERSION).$(JDK_MICRO_VERSION).$(JDK_UPDATE_VERSION).$(COOKED_BUILD_NUMBER)
$$($1_GEN_MANIFEST): $$($1_MANIFEST)
$(SED) 's%IMVERSION%$$(IMVERSIONVALUE)%g;s%PROGRAM%$$($1_PROGRAM)%g' $$< > $$@
@ -266,54 +390,184 @@ define SetupNativeCompilation
endif
# mapfile doesnt seem to be implemented on macosx (yet??)
ifneq ($(HOST_OS),macosx)
ifneq ($(HOST_OS),windows)
$1_REAL_MAPFILE := $$($1_MAPFILE)
ifneq ($(OPENJDK_TARGET_CPU),ppc)
ifneq ($(OPENJDK_TARGET_CPU),arm)
ifneq ($(OPENJDK_TARGET_OS),macosx)
ifneq ($(OPENJDK_TARGET_OS),windows)
$1_REAL_MAPFILE:=$$($1_MAPFILE)
ifneq (,$$($1_REORDER))
$1_REAL_MAPFILE := $$($1_BIN)/mapfile
$1_REAL_MAPFILE:=$$($1_OBJECT_DIR)/mapfile
$$($1_REAL_MAPFILE) : $$($1_MAPFILE) $$($1_REORDER)
$$(MKDIR) -p $$(@D)
$$(CP) $$($1_MAPFILE) $$@.tmp
$$(SED) -e 's=OUTPUTDIR=$$($1_BIN)=' $$($1_REORDER) >> $$@.tmp
$$(SED) -e 's=OUTPUTDIR=$$($1_OBJECT_DIR)=' $$($1_REORDER) >> $$@.tmp
$$(MV) $$@.tmp $$@
endif
endif
endif
endif
endif
# Pickup extra HOST_OS_API dependent variables (posix or winapi) and
# Pickup extra OPENJDK_TARGET_OS_API dependent variables (posix or winapi) and
# (linux,solaris,windows,bsd) for LDFLAGS and LDFLAGS_SUFFIX
$1_EXTRA_LDFLAGS:=$$($1_LDFLAGS_$(HOST_OS_API)) $$($1_LDFLAGS_$(PLATFORM))
$1_EXTRA_LDFLAGS_SUFFIX:=$$($1_LDFLAGS_SUFFIX_$(HOST_OS_API)) $$($1_LDFLAGS_SUFFIX_$(PLATFORM))
$1_EXTRA_LDFLAGS:=$$($1_LDFLAGS_$(OPENJDK_TARGET_OS_API)) $$($1_LDFLAGS_$(OPENJDK_TARGET_OS))
$1_EXTRA_LDFLAGS_SUFFIX:=$$($1_LDFLAGS_SUFFIX_$(OPENJDK_TARGET_OS_API)) $$($1_LDFLAGS_SUFFIX_$(OPENJDK_TARGET_OS))
ifneq (,$$($1_REAL_MAPFILE))
$1_EXTRA_LDFLAGS += $(call SET_SHARED_LIBRARY_MAPFILE,$$($1_REAL_MAPFILE))
$1_EXTRA_LDFLAGS += $(call SET_SHARED_LIBRARY_MAPFILE,$$($1_REAL_MAPFILE))
endif
ifneq (,$$($1_LIB))
ifeq (dynamic,$$(patsubst %$(SHARED_LIBRARY_SUFFIX),dynamic,$$($1_LIB)))
# Generating a dynamic library.
$1_EXTRA_LDFLAGS+=$$(call SET_SHARED_LIBRARY_NAME,$$(notdir $$($1_LIB)))
$$($1_LIB) : $$($1_EXPECTED_OBJS) $$($1_RES) $$($1_REAL_MAPFILE)
$$(call LINKING_MSG,$$(notdir $$($1_LIB)))
$$($1_LD) $$($1_LDFLAGS) $$($1_EXTRA_LDFLAGS) $(LD_OUT_OPTION)$$($1_LIB) \
$$($1_EXPECTED_OBJS) $$($1_RES) $$($1_LDFLAGS_SUFFIX) $$($1_EXTRA_LDFLAGS_SUFFIX)
else
# Generating a static library, ie object file archive.
$$($1_LIB) : $$($1_EXPECTED_OBJS) $$($1_RES)
$$(call ARCHIVING_MSG,$$(notdir $$($1_LIB)))
$(AR) $$($1_AR_FLAGS) $(AR_OUT_OPTION)$$($1_LIB) $$($1_EXPECTED_OBJS) \
$$($1_RES) $$($1_LDFLAGS_SUFFIX) $$($1_EXTRA_LDFLAGS_SUFFIX)
endif
$1 := $$($1_TARGET)
ifneq (,$$($1_LIBRARY))
# Generating a dynamic library.
$1_EXTRA_LDFLAGS+=$$(call SET_SHARED_LIBRARY_NAME,$$($1_BASENAME))
ifeq ($(OPENJDK_TARGET_OS), windows)
$1_EXTRA_LDFLAGS+="-implib:$$($1_OBJECT_DIR)/$$($1_LIBRARY).lib"
endif
ifneq (,$$($1_DEBUG_SYMBOLS))
ifeq ($(ENABLE_DEBUG_SYMBOLS), yes)
ifeq ($(OPENJDK_TARGET_OS), windows)
$1_EXTRA_LDFLAGS+="-pdb:$$($1_OBJECT_DIR)/$$($1_LIBRARY).pdb" \
"-map:$$($1_OBJECT_DIR)/$$($1_LIBRARY).map"
endif
$$($1_OUTPUT_DIR)/% : $$($1_OBJECT_DIR)/%
$(CP) $$< $$@
ifeq ($(OPENJDK_TARGET_OS), solaris)
# gobjcopy crashes on "empty" section headers with the SHF_ALLOC flag set.
# Use $(FIX_EMPTY_SEC_HDR_FLAGS) to clear the SHF_ALLOC flag (if set) from
# empty section headers until a fixed $(OBJCOPY) is available.
# An empty section header has sh_addr == 0 and sh_size == 0.
# This problem has only been seen on Solaris X64, but we call this tool
# on all Solaris builds just in case.
#
# $(OBJCOPY) --add-gnu-debuglink=... corrupts SUNW_* sections.
# Use $(ADD_GNU_DEBUGLINK) until a fixed $(OBJCOPY) is available.
$$($1_OBJECT_DIR)/$$(LIBRARY_PREFIX)$$($1_LIBRARY).debuginfo : $$($1_TARGET) \
$(FIX_EMPTY_SEC_HDR_FLAGS) $(ADD_GNU_DEBUGLINK)
$(RM) $$@
$(FIX_EMPTY_SEC_HDR_FLAGS) $$<
$(OBJCOPY) --only-keep-debug $$< $$@
$(CD) $$(@D) && $(ADD_GNU_DEBUGLINK) $$(@F) $$<
else # not solaris
$$($1_OBJECT_DIR)/$$(LIBRARY_PREFIX)$$($1_LIBRARY).debuginfo : $$($1_TARGET)
$(RM) $$@
$(OBJCOPY) --only-keep-debug $$< $$@
$(CD) $$(@D) && $(OBJCOPY) --add-gnu-debuglink=$$(@F) $$<
endif # Touch to not retrigger rule on rebuild
$(TOUCH) $$@
ifeq ($(ZIP_DEBUGINFO_FILES), 1)
$1 += $$($1_OUTPUT_DIR)/$$(LIBRARY_PREFIX)$$($1_LIBRARY).diz
ifeq ($(OPENJDK_TARGET_OS), windows)
$$($1_OBJECT_DIR)/$$(LIBRARY_PREFIX)$$($1_LIBRARY).diz : $$($1_TARGET)
$(CD) $$($1_OBJECT_DIR) \
&& $(ZIP) -q $$@ $$($1_LIBRARY).map $$($1_LIBRARY).pdb
else
$$($1_OBJECT_DIR)/$$(LIBRARY_PREFIX)$$($1_LIBRARY).diz : $$($1_TARGET) \
$$($1_OBJECT_DIR)/$$(LIBRARY_PREFIX)$$($1_LIBRARY).debuginfo
$(CD) $$($1_OBJECT_DIR) \
&& $(ZIP) -q $$@ $$(LIBRARY_PREFIX)$$($1_LIBRARY).debuginfo
endif
else
ifeq ($(OPENJDK_TARGET_OS), windows)
$1 += $$($1_OUTPUT_DIR)/$$($1_LIBRARY).map \
$$($1_OUTPUT_DIR)/$$($1_LIBRARY).pdb
else
$1 += $$($1_OUTPUT_DIR)/$$(LIBRARY_PREFIX)$$($1_LIBRARY).debuginfo
endif
endif
endif
endif
$$($1_TARGET) : $$($1_EXPECTED_OBJS) $$($1_RES) $$($1_REAL_MAPFILE)
$$(call LINKING_MSG,$$($1_BASENAME))
$$($1_LD) $$($1_LDFLAGS) $$($1_EXTRA_LDFLAGS) $(LD_OUT_OPTION)$$@ \
$$($1_EXPECTED_OBJS) $$($1_RES) $$($1_LDFLAGS_SUFFIX) \
$$($1_EXTRA_LDFLAGS_SUFFIX)
endif
ifneq (,$$($1_EXE))
ifneq (,$$($1_STATIC_LIBRARY))
# Generating a static library, ie object file archive.
$$($1_TARGET) : $$($1_EXPECTED_OBJS) $$($1_RES)
$$(call ARCHIVING_MSG,$$($1_LIBRARY))
$(AR) $$($1_AR_FLAGS) $(AR_OUT_OPTION)$$($1_TARGET) $$($1_EXPECTED_OBJS) \
$$($1_RES) $$($1_LDFLAGS_SUFFIX) $$($1_EXTRA_LDFLAGS_SUFFIX)
endif
ifneq (,$$($1_PROGRAM))
# A executable binary has been specified, setup the target for it.
$$($1_EXE) : $$($1_EXPECTED_OBJS) $$($1_RES) $$($1_GEN_MANIFEST)
$$(call LINKING_EXE_MSG,$$(notdir $$($1_EXE)))
$$($1_LDEXE) $$($1_LDFLAGS) $$($1_EXTRA_LDFLAGS) $(EXE_OUT_OPTION)$$($1_EXE) \
ifneq (,$$($1_DEBUG_SYMBOLS))
ifeq ($(ENABLE_DEBUG_SYMBOLS), yes)
ifeq ($(OPENJDK_TARGET_OS), windows)
$1_EXTRA_LDFLAGS+="-pdb:$$($1_OBJECT_DIR)/$$($1_PROGRAM).pdb" \
"-map:$$($1_OBJECT_DIR)/$$($1_PROGRAM).map"
endif
$$($1_OUTPUT_DIR)/% : $$($1_OBJECT_DIR)/%
$(CP) $$< $$@
ifeq ($(OPENJDK_TARGET_OS), solaris)
# gobjcopy crashes on "empty" section headers with the SHF_ALLOC flag set.
# Use $(FIX_EMPTY_SEC_HDR_FLAGS) to clear the SHF_ALLOC flag (if set) from
# empty section headers until a fixed $(OBJCOPY) is available.
# An empty section header has sh_addr == 0 and sh_size == 0.
# This problem has only been seen on Solaris X64, but we call this tool
# on all Solaris builds just in case.
#
# $(OBJCOPY) --add-gnu-debuglink=... corrupts SUNW_* sections.
# Use $(ADD_GNU_DEBUGLINK) until a fixed $(OBJCOPY) is available.
$$($1_OBJECT_DIR)/$$($1_PROGRAM).debuginfo : $$($1_TARGET) \
$(FIX_EMPTY_SEC_HDR_FLAGS) $(ADD_GNU_DEBUGLINK)
$(RM) $$@
$(FIX_EMPTY_SEC_HDR_FLAGS) $$<
$(OBJCOPY) --only-keep-debug $$< $$@
$(CD) $$(@D) && $(ADD_GNU_DEBUGLINK) $$(@F) $$<
else # not solaris
$$($1_OBJECT_DIR)/$$($1_PROGRAM).debuginfo : $$($1_TARGET)
$(RM) $$@
$(OBJCOPY) --only-keep-debug $$< $$@
$(CD) $$(@D) && $(OBJCOPY) --add-gnu-debuglink=$$(@F) $$<
endif
$(TOUCH) $$@
ifeq ($(ZIP_DEBUGINFO_FILES), 1)
$1 += $$($1_OUTPUT_DIR)/$$($1_PROGRAM).diz
ifeq ($(OPENJDK_TARGET_OS), windows)
$$($1_OBJECT_DIR)/$$($1_PROGRAM).diz : $$($1_TARGET)
$(CD) $$($1_OBJECT_DIR) \
&& $(ZIP) -q $$@ $$($1_PROGRAM).map $$($1_PROGRAM).pdb
else
$$($1_OBJECT_DIR)/$$(PROGRAM_PREFIX)$$($1_PROGRAM).diz : $$($1_TARGET) \
$$($1_OBJECT_DIR)/$$($1_PROGRAM).debuginfo
$(CD) $$($1_OBJECT_DIR) \
&& $(ZIP) -q $$@ $$($1_PROGRAM).debuginfo
endif
else
ifeq ($(OPENJDK_TARGET_OS), windows)
$1 += $$($1_OUTPUT_DIR)/$$($1_PROGRAM).map \
$$($1_OUTPUT_DIR)/$$($1_PROGRAM).pdb
else
$1 += $$($1_OUTPUT_DIR)/$$($1_PROGRAM).debuginfo
endif
endif
endif
endif
$$($1_TARGET) : $$($1_EXPECTED_OBJS) $$($1_RES) $$($1_GEN_MANIFEST)
$$(call LINKING_EXE_MSG,$$($1_BASENAME))
$$($1_LDEXE) $$($1_LDFLAGS) $$($1_EXTRA_LDFLAGS) $(EXE_OUT_OPTION)$$($1_TARGET) \
$$($1_EXPECTED_OBJS) $$($1_RES) $$($1_LDFLAGS_SUFFIX) \
$$($1_EXTRA_LDFLAGS_SUFFIX)
ifneq (,$$($1_GEN_MANIFEST))
$(MT) -nologo /manifest $$($1_GEN_MANIFEST) /outputresource:$$@;#1
endif
endif
endef

View File

@ -42,6 +42,7 @@ define SetupRMICompilation
$(if $7,$1_$(strip $7))
$(if $8,$1_$(strip $8))
$(if $9,$1_$(strip $9))
$(if $(10),$(error Internal makefile error: Too many arguments to SetupRMICompilation, please update RMICompilation.gmk))
$1_DEP_FILE := $$($1_STUB_CLASSES_DIR)/$1_rmic

View File

@ -167,3 +167,5 @@ b8cbfb31139f820e5e094ba71449e58159fbe22e jdk8-b38
cd879aff5d3cc1f58829aab3116880aa19525b78 jdk8-b43
439d9bf8e4ff204cc89c9974c1515a508b2cc6ff jdk8-b44
747dad9e9d37d244a5c765a1afe9194f7ddae118 jdk8-b45
30141e598d72a6146126cb86b034ed6d0bd191b3 jdk8-b46
21e46ea21c6a26246fb7a1926ac7fe8d580d0518 jdk8-b47

View File

@ -1,5 +1,5 @@
/*
* Copyright (c) 2000, 2004, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2001, 2012, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@ -22,7 +22,6 @@
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
package com.sun.corba.se.impl.encoding;
import java.util.Hashtable;
@ -32,7 +31,8 @@ import com.sun.org.omg.SendingContext.CodeBaseHelper;
import com.sun.org.omg.SendingContext._CodeBaseImplBase;
import com.sun.org.omg.SendingContext._CodeBaseStub;
import com.sun.corba.se.spi.transport.CorbaConnection;
import com.sun.corba.se.spi.ior.IOR;
import com.sun.corba.se.spi.orb.ORB;
/**
* Provides the reading side with a per connection cache of
* info obtained via calls to the remote CodeBase.
@ -51,14 +51,24 @@ import com.sun.corba.se.spi.transport.CorbaConnection;
*
* Needs cache management.
*/
// REVISIT: revert to package protected after framework merge.
public class CachedCodeBase extends _CodeBaseImplBase
{
private Hashtable implementations, fvds, bases;
private CodeBase delegate;
private volatile CodeBase delegate;
private CorbaConnection conn;
private static Hashtable iorToCodeBaseObjMap = new Hashtable();
private static Object iorMapLock = new Object();
private static Hashtable<IOR,CodeBase> iorMap = new Hashtable<>();
public static synchronized void cleanCache( ORB orb ) {
synchronized (iorMapLock) {
for (IOR ior : iorMap.keySet()) {
if (ior.getORB() == orb) {
iorMap.remove(ior);
}
}
}
}
public CachedCodeBase(CorbaConnection connection) {
conn = connection;
@ -68,7 +78,7 @@ public class CachedCodeBase extends _CodeBaseImplBase
return null;
}
public String implementation (String repId) {
public synchronized String implementation (String repId) {
String urlResult = null;
if (implementations == null)
@ -86,7 +96,7 @@ public class CachedCodeBase extends _CodeBaseImplBase
return urlResult;
}
public String[] implementations (String[] repIds) {
public synchronized String[] implementations (String[] repIds) {
String[] urlResults = new String[repIds.length];
for (int i = 0; i < urlResults.length; i++)
@ -95,7 +105,7 @@ public class CachedCodeBase extends _CodeBaseImplBase
return urlResults;
}
public FullValueDescription meta (String repId) {
public synchronized FullValueDescription meta (String repId) {
FullValueDescription result = null;
if (fvds == null)
@ -113,7 +123,7 @@ public class CachedCodeBase extends _CodeBaseImplBase
return result;
}
public FullValueDescription[] metas (String[] repIds) {
public synchronized FullValueDescription[] metas (String[] repIds) {
FullValueDescription[] results
= new FullValueDescription[repIds.length];
@ -123,7 +133,7 @@ public class CachedCodeBase extends _CodeBaseImplBase
return results;
}
public String[] bases (String repId) {
public synchronized String[] bases (String repId) {
String[] results = null;
@ -145,7 +155,7 @@ public class CachedCodeBase extends _CodeBaseImplBase
// Ensures that we've used the connection's IOR to create
// a valid CodeBase delegate. If this returns false, then
// it is not valid to access the delegate.
private boolean connectedCodeBase() {
private synchronized boolean connectedCodeBase() {
if (delegate != null)
return true;
@ -165,7 +175,7 @@ public class CachedCodeBase extends _CodeBaseImplBase
return false;
}
synchronized(this) {
synchronized(iorMapLock) {
// Recheck the condition to make sure another
// thread didn't already do this while we waited
@ -173,7 +183,8 @@ public class CachedCodeBase extends _CodeBaseImplBase
return true;
// Do we have a reference initialized by another connection?
delegate = (CodeBase)CachedCodeBase.iorToCodeBaseObjMap.get(conn.getCodeBaseIOR());
delegate = CachedCodeBase.iorMap.get(conn.getCodeBaseIOR());
if (delegate != null)
return true;
@ -181,8 +192,7 @@ public class CachedCodeBase extends _CodeBaseImplBase
delegate = CodeBaseHelper.narrow(getObjectFromIOR());
// Save it for the benefit of other connections
CachedCodeBase.iorToCodeBaseObjMap.put(conn.getCodeBaseIOR(),
delegate);
CachedCodeBase.iorMap.put(conn.getCodeBaseIOR(), delegate);
}
// It's now safe to use the delegate

View File

@ -1,5 +1,5 @@
/*
* Copyright (c) 2002, 2010, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2002, 2012, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@ -58,7 +58,7 @@ import org.omg.PortableInterceptor.SYSTEM_EXCEPTION;
import org.omg.PortableInterceptor.TRANSPORT_RETRY;
import org.omg.PortableInterceptor.USER_EXCEPTION;
import org.omg.PortableInterceptor.PolicyFactory;
import org.omg.PortableInterceptor.ObjectReferenceTemplate ;
import org.omg.PortableInterceptor.ObjectReferenceTemplate;
import com.sun.corba.se.pept.encoding.OutputObject;
@ -112,10 +112,10 @@ public class PIHandlerImpl implements PIHandler
}
}
private ORB orb ;
InterceptorsSystemException wrapper ;
ORBUtilSystemException orbutilWrapper ;
OMGSystemException omgWrapper ;
private ORB orb;
InterceptorsSystemException wrapper;
ORBUtilSystemException orbutilWrapper;
OMGSystemException omgWrapper;
// A unique id used in ServerRequestInfo.
// This does not correspond to the GIOP request id.
@ -178,6 +178,21 @@ public class PIHandlerImpl implements PIHandler
}
};
public void close() {
orb = null;
wrapper = null;
orbutilWrapper = null;
omgWrapper = null;
codecFactory = null;
arguments = null;
interceptorList = null;
interceptorInvoker = null;
current = null;
policyFactoryTable = null;
threadLocalClientRequestInfoStack = null;
threadLocalServerRequestInfoStack = null;
}
// Class to contain all ThreadLocal data for ClientRequestInfo
// maintenance.
//

View File

@ -1,5 +1,5 @@
/*
* Copyright (c) 2003, 2010, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2003, 2012, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@ -69,6 +69,9 @@ public class PINoOpHandlerImpl implements PIHandler
public PINoOpHandlerImpl( ) {
}
public void close() {
}
public void initialize() {
}

View File

@ -1,5 +1,5 @@
/*
* Copyright (c) 2003, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2003, 2012, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@ -34,14 +34,18 @@ public class MonitoringManagerFactoryImpl implements MonitoringManagerFactory {
private HashMap monitoringManagerTable = new HashMap();
public synchronized MonitoringManager createMonitoringManager(
String nameOfTheRoot, String description )
String nameOfTheRoot, String description)
{
MonitoringManagerImpl m = null;
m = (MonitoringManagerImpl)monitoringManagerTable.get(nameOfTheRoot);
if (m == null) {
m = new MonitoringManagerImpl( nameOfTheRoot, description );
m = new MonitoringManagerImpl(nameOfTheRoot, description);
monitoringManagerTable.put(nameOfTheRoot, m);
}
return m;
}
public synchronized void remove(String nameOfTheRoot) {
monitoringManagerTable.remove(nameOfTheRoot);
}
}

View File

@ -1,5 +1,5 @@
/*
* Copyright (c) 2003, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2003, 2012, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@ -26,6 +26,7 @@
package com.sun.corba.se.impl.monitoring;
import com.sun.corba.se.spi.monitoring.MonitoringManager;
import com.sun.corba.se.spi.monitoring.MonitoringManagerFactory;
import com.sun.corba.se.spi.monitoring.MonitoredObject;
import com.sun.corba.se.spi.monitoring.MonitoredObjectFactory;
import com.sun.corba.se.spi.monitoring.MonitoringFactories;
@ -33,18 +34,24 @@ import com.sun.corba.se.spi.monitoring.MonitoringFactories;
public class MonitoringManagerImpl implements MonitoringManager {
private final MonitoredObject rootMonitoredObject;
MonitoringManagerImpl( String nameOfTheRoot, String description ) {
MonitoringManagerImpl(String nameOfTheRoot, String description) {
MonitoredObjectFactory f =
MonitoringFactories.getMonitoredObjectFactory();
rootMonitoredObject =
f.createMonitoredObject( nameOfTheRoot, description );
f.createMonitoredObject(nameOfTheRoot, description);
}
public void clearState( ) {
rootMonitoredObject.clearState( );
public void clearState() {
rootMonitoredObject.clearState();
}
public MonitoredObject getRootMonitoredObject( ) {
public MonitoredObject getRootMonitoredObject() {
return rootMonitoredObject;
}
public void close() {
MonitoringManagerFactory f =
MonitoringFactories.getMonitoringManagerFactory();
f.remove(rootMonitoredObject.getName());
}
}

View File

@ -1,5 +1,5 @@
/*
* Copyright (c) 2002, 2010, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2002, 2012, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@ -23,35 +23,37 @@
* questions.
*/
package com.sun.corba.se.impl.orb ;
package com.sun.corba.se.impl.orb;
import java.applet.Applet;
import java.io.IOException ;
import java.io.IOException;
import java.lang.reflect.Constructor;
import java.lang.reflect.Field ;
import java.lang.reflect.Modifier ;
import java.lang.reflect.InvocationTargetException ;
import java.lang.reflect.Field;
import java.lang.reflect.Modifier;
import java.lang.reflect.InvocationTargetException;
import java.util.ArrayList ;
import java.util.Iterator ;
import java.util.Properties ;
import java.util.Vector ;
import java.util.Hashtable ;
import java.util.Map ;
import java.util.HashMap ;
import java.util.LinkedList ;
import java.util.Collection ;
import java.util.Collections ;
import java.util.StringTokenizer ;
import java.util.Enumeration ;
import java.util.WeakHashMap ;
import java.util.Set;
import java.util.HashSet;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.Properties;
import java.util.Vector;
import java.util.Hashtable;
import java.util.Map;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.Collection;
import java.util.Collections;
import java.util.StringTokenizer;
import java.util.Enumeration;
import java.util.WeakHashMap;
import java.net.InetAddress ;
import java.net.InetAddress;
import java.security.PrivilegedAction;
import java.security.AccessController ;
import java.security.AccessController;
import javax.rmi.CORBA.Util;
import javax.rmi.CORBA.ValueHandler;
@ -82,18 +84,18 @@ import org.omg.CORBA.ORBPackage.InvalidName;
import com.sun.org.omg.SendingContext.CodeBase;
import com.sun.corba.se.pept.broker.Broker;
import com.sun.corba.se.pept.protocol.ClientInvocationInfo ;
import com.sun.corba.se.pept.protocol.ClientInvocationInfo;
import com.sun.corba.se.pept.transport.ContactInfo;
import com.sun.corba.se.pept.transport.ConnectionCache;
import com.sun.corba.se.pept.transport.TransportManager;
import com.sun.corba.se.spi.ior.IOR;
import com.sun.corba.se.spi.ior.IdentifiableFactoryFinder ;
import com.sun.corba.se.spi.ior.IdentifiableFactoryFinder;
import com.sun.corba.se.spi.ior.TaggedComponentFactoryFinder;
import com.sun.corba.se.spi.ior.IORFactories ;
import com.sun.corba.se.spi.ior.ObjectKey ;
import com.sun.corba.se.spi.ior.ObjectKeyFactory ;
import com.sun.corba.se.spi.ior.iiop.IIOPFactories ;
import com.sun.corba.se.spi.ior.IORFactories;
import com.sun.corba.se.spi.ior.ObjectKey;
import com.sun.corba.se.spi.ior.ObjectKeyFactory;
import com.sun.corba.se.spi.ior.iiop.IIOPFactories;
import com.sun.corba.se.spi.ior.iiop.GIOPVersion;
import com.sun.corba.se.spi.oa.OAInvocationInfo;
import com.sun.corba.se.spi.oa.ObjectAdapterFactory;
@ -122,10 +124,10 @@ import com.sun.corba.se.spi.orb.StringPair;
import com.sun.corba.se.spi.transport.CorbaContactInfoListFactory;
import com.sun.corba.se.spi.transport.CorbaTransportManager;
import com.sun.corba.se.spi.legacy.connection.LegacyServerSocketManager;
import com.sun.corba.se.spi.copyobject.CopierManager ;
import com.sun.corba.se.spi.presentation.rmi.PresentationDefaults ;
import com.sun.corba.se.spi.presentation.rmi.PresentationManager ;
import com.sun.corba.se.spi.presentation.rmi.StubAdapter ;
import com.sun.corba.se.spi.copyobject.CopierManager;
import com.sun.corba.se.spi.presentation.rmi.PresentationDefaults;
import com.sun.corba.se.spi.presentation.rmi.PresentationManager;
import com.sun.corba.se.spi.presentation.rmi.StubAdapter;
import com.sun.corba.se.spi.servicecontext.ServiceContextRegistry;
import com.sun.corba.se.impl.corba.TypeCodeFactory;
@ -140,6 +142,7 @@ import com.sun.corba.se.impl.corba.AnyImpl;
import com.sun.corba.se.impl.corba.RequestImpl;
import com.sun.corba.se.impl.dynamicany.DynAnyFactoryImpl;
import com.sun.corba.se.impl.encoding.EncapsOutputStream;
import com.sun.corba.se.impl.encoding.CachedCodeBase;
import com.sun.corba.se.impl.interceptors.PIHandlerImpl;
import com.sun.corba.se.impl.interceptors.PINoOpHandlerImpl;
import com.sun.corba.se.impl.ior.TaggedComponentFactoryFinderImpl;
@ -185,6 +188,7 @@ public class ORBImpl extends com.sun.corba.se.spi.orb.ORB
private java.lang.Object runObj = new java.lang.Object();
private java.lang.Object shutdownObj = new java.lang.Object();
private java.lang.Object waitForCompletionObj = new java.lang.Object();
private static final byte STATUS_OPERATING = 1;
private static final byte STATUS_SHUTTING_DOWN = 2;
private static final byte STATUS_SHUTDOWN = 3;
@ -193,6 +197,7 @@ public class ORBImpl extends com.sun.corba.se.spi.orb.ORB
// XXX Should we move invocation tracking to the first level server dispatcher?
private java.lang.Object invocationObj = new java.lang.Object();
private int numInvocations = 0;
// thread local variable to store a boolean to detect deadlock in
// ORB.shutdown(true).
@ -220,8 +225,6 @@ public class ORBImpl extends com.sun.corba.se.spi.orb.ORB
private int transientServerId ;
private ThreadGroup threadGroup ;
private ServiceContextRegistry serviceContextRegistry ;
// Needed here to implement connect/disconnect
@ -265,6 +268,7 @@ public class ORBImpl extends com.sun.corba.se.spi.orb.ORB
private final Object urlOperationLock = new java.lang.Object() ;
private CorbaServerRequestDispatcher insNamingDelegate ;
// resolverLock must be used for all access to either resolver or
// localResolver, since it is possible for the resolver to indirectly
// refer to the localResolver. Also used to protect access to
@ -279,6 +283,8 @@ public class ORBImpl extends com.sun.corba.se.spi.orb.ORB
private ObjectKeyFactory objectKeyFactory ;
private boolean orbOwnsThreadPoolManager = false ;
private ThreadPoolManager threadpoolMgr;
private void dprint( String msg )
@ -322,11 +328,17 @@ public class ORBImpl extends com.sun.corba.se.spi.orb.ORB
public ORBVersion getORBVersion()
{
synchronized (this) {
checkShutdownState();
}
return (ORBVersion)(orbVersionThreadLocal.get()) ;
}
public void setORBVersion(ORBVersion verObj)
{
synchronized (this) {
checkShutdownState();
}
orbVersionThreadLocal.set(verObj);
}
@ -347,46 +359,6 @@ public class ORBImpl extends com.sun.corba.se.spi.orb.ORB
// end of this method.
pihandler = new PINoOpHandlerImpl( );
// See bugs 4916766 and 4936203
// We intend to create new threads in a reliable thread group.
// This avoids problems if the application/applet
// creates a thread group, makes JavaIDL calls which create a new
// connection and ReaderThread, and then destroys the thread
// group. If our ReaderThreads were to be part of such destroyed thread
// group then it might get killed and cause other invoking threads
// sharing the same connection to get a non-restartable
// CommunicationFailure. We'd like to avoid that.
//
// Our solution is to create all of our threads in the highest thread
// group that we have access to, given our own security clearance.
//
try {
// try to get a thread group that's as high in the threadgroup
// parent-child hierarchy, as we can get to.
// this will prevent an ORB thread created during applet-init from
// being killed when an applet dies.
threadGroup = (ThreadGroup) AccessController.doPrivileged(
new PrivilegedAction() {
public Object run() {
ThreadGroup tg = Thread.currentThread().getThreadGroup() ;
ThreadGroup ptg = tg ;
try {
while (ptg != null) {
tg = ptg;
ptg = tg.getParent();
}
} catch (SecurityException se) {
// Discontinue going higher on a security exception.
}
return new ThreadGroup(tg, "ORB ThreadGroup");
}
}
);
} catch (SecurityException e) {
// something wrong, we go back to the original code
threadGroup = Thread.currentThread().getThreadGroup();
}
// This is the unique id of this server (JVM). Multiple incarnations
// of this server will get different ids.
// Compute transientServerId = milliseconds since Jan 1, 1970
@ -547,6 +519,9 @@ public class ORBImpl extends com.sun.corba.se.spi.orb.ORB
public void set_parameters( Properties props )
{
synchronized (this) {
checkShutdownState();
}
preInit( null, props ) ;
DataCollector dataCollector =
DataCollectorFactory.create( props, getLocalHostName() ) ;
@ -788,6 +763,9 @@ public class ORBImpl extends com.sun.corba.se.spi.orb.ORB
*/
public void notifyORB()
{
synchronized (this) {
checkShutdownState();
}
synchronized (this.svResponseReceived) {
this.svResponseReceived.set();
this.svResponseReceived.notify();
@ -854,6 +832,8 @@ public class ORBImpl extends com.sun.corba.se.spi.orb.ORB
// Note that we connect this if we have not already done so.
public synchronized IOR getFVDCodeBaseIOR()
{
checkShutdownState();
if (codeBaseIOR != null) // i.e. We are already connected to it
return codeBaseIOR;
@ -1118,6 +1098,8 @@ public class ORBImpl extends com.sun.corba.se.spi.orb.ORB
public synchronized void setTypeCodeForClass(Class c, TypeCodeImpl tci)
{
checkShutdownState();
if (typeCodeForClassMap == null)
typeCodeForClassMap = Collections.synchronizedMap(
new WeakHashMap(64));
@ -1128,6 +1110,8 @@ public class ORBImpl extends com.sun.corba.se.spi.orb.ORB
public synchronized TypeCodeImpl getTypeCodeForClass(Class c)
{
checkShutdownState();
if (typeCodeForClassMap == null)
return null;
return (TypeCodeImpl)typeCodeForClassMap.get(c);
@ -1210,6 +1194,10 @@ public class ORBImpl extends com.sun.corba.se.spi.orb.ORB
{
CorbaServerRequestDispatcher insnd ;
synchronized (this) {
checkShutdownState();
}
if ((id == null) || (id.length() == 0))
throw new InvalidName() ;
@ -1253,66 +1241,88 @@ public class ORBImpl extends com.sun.corba.se.spi.orb.ORB
}
}
public void shutdown(boolean wait_for_completion)
{
// to wait for completion, we would deadlock, so throw a standard
// OMG exception.
if (wait_for_completion && ((Boolean)isProcessingInvocation.get()).booleanValue()) {
throw omgWrapper.shutdownWaitForCompletionDeadlock() ;
}
boolean doShutdown = false ;
public void shutdown(boolean wait_for_completion) {
boolean wait = false;
synchronized (this) {
checkShutdownState() ;
checkShutdownState();
// This is to avoid deadlock: don't allow a thread that is
// processing a request to call shutdown( true ), because
// the shutdown would block waiting for the request to complete,
// while the request would block waiting for shutdown to complete.
if (wait_for_completion &&
isProcessingInvocation.get() == Boolean.TRUE) {
throw omgWrapper.shutdownWaitForCompletionDeadlock();
}
if (status == STATUS_SHUTTING_DOWN) {
if (!wait_for_completion)
// If we are already shutting down and don't want
// to wait, nothing to do: return.
return ;
} else {
// The ORB status was STATUS_OPERATING, so start the shutdown.
status = STATUS_SHUTTING_DOWN ;
doShutdown = true ;
if (wait_for_completion) {
wait = true;
} else {
return;
}
}
status = STATUS_SHUTTING_DOWN;
}
// At this point, status is SHUTTING_DOWN.
// All shutdown calls with wait_for_completion == true must synchronize
// here. Only the first call will be made with doShutdown == true.
// Avoid more than one thread performing shutdown at a time.
synchronized (shutdownObj) {
if (doShutdown) {
// shutdownServants will set all POAManagers into the
// INACTIVE state, causing request to be rejected.
// If wait_for_completion is true, this will not return until
// all invocations have completed.
// At this point, the ORB status is certainly STATUS_SHUTTING_DOWN.
// If wait is true, another thread already called shutdown( true ),
// and so we wait for completion
if (wait) {
while (true) {
synchronized (this) {
if (status == STATUS_SHUTDOWN)
break;
}
try {
shutdownObj.wait();
} catch (InterruptedException exc) {
// NOP: just loop and wait until state is changed
}
}
} else {
// perform the actual shutdown
shutdownServants(wait_for_completion);
if (wait_for_completion) {
synchronized ( waitForCompletionObj ) {
while (numInvocations > 0) {
try {
waitForCompletionObj.wait();
} catch (InterruptedException ex) {}
}
}
}
synchronized (runObj) {
runObj.notifyAll();
}
synchronized (this) {
status = STATUS_SHUTDOWN;
}
status = STATUS_SHUTDOWN;
shutdownObj.notifyAll();
}
}
}
/** This method shuts down the ORB and causes orb.run() to return.
* It will cause all POAManagers to be deactivated, which in turn
* will cause all POAs to be deactivated.
*/
// Cause all ObjectAdapaterFactories to clean up all of their internal state, which
// may include activated objects that have associated state and callbacks that must
// complete in order to shutdown. This will cause new request to be rejected.
protected void shutdownServants(boolean wait_for_completion) {
Iterator iter = requestDispatcherRegistry.getObjectAdapterFactories().iterator() ;
while (iter.hasNext()) {
ObjectAdapterFactory oaf = (ObjectAdapterFactory)iter.next() ;
oaf.shutdown( wait_for_completion ) ;
Set<ObjectAdapterFactory> oaset;
synchronized (this) {
oaset = new HashSet<>(requestDispatcherRegistry.getObjectAdapterFactories());
}
for (ObjectAdapterFactory oaf : oaset)
oaf.shutdown(wait_for_completion);
}
// REVISIT: was protected - made public for framework
// Note that the caller must hold the ORBImpl lock.
public void checkShutdownState()
{
@ -1327,21 +1337,40 @@ public class ORBImpl extends com.sun.corba.se.spi.orb.ORB
public boolean isDuringDispatch()
{
synchronized (this) {
checkShutdownState();
}
Boolean value = (Boolean)(isProcessingInvocation.get()) ;
return value.booleanValue() ;
}
public void startingDispatch()
{
synchronized (this) {
checkShutdownState();
}
synchronized (invocationObj) {
isProcessingInvocation.set(Boolean.TRUE);
numInvocations++;
}
}
public void finishedDispatch()
{
synchronized (this) {
checkShutdownState();
}
synchronized (invocationObj) {
isProcessingInvocation.set(Boolean.FALSE);
numInvocations--;
isProcessingInvocation.set(false);
if (numInvocations == 0) {
synchronized (waitForCompletionObj) {
waitForCompletionObj.notifyAll();
}
} else if (numInvocations < 0) {
throw wrapper.numInvocationsAlreadyZero(
CompletionStatus.COMPLETED_YES);
}
}
}
@ -1350,12 +1379,12 @@ public class ORBImpl extends com.sun.corba.se.spi.orb.ORB
* not been shut down, it will start the shutdown process and block until
* the ORB has shut down before it destroys the ORB."
*/
public synchronized void destroy()
public void destroy()
{
boolean shutdownFirst = false ;
boolean shutdownFirst = false;
synchronized (this) {
shutdownFirst = (status == STATUS_OPERATING) ;
shutdownFirst = (status == STATUS_OPERATING);
}
if (shutdownFirst) {
@ -1365,11 +1394,76 @@ public class ORBImpl extends com.sun.corba.se.spi.orb.ORB
synchronized (this) {
if (status < STATUS_DESTROYED) {
getCorbaTransportManager().close();
getPIHandler().destroyInterceptors() ;
getPIHandler().destroyInterceptors();
status = STATUS_DESTROYED;
}
}
synchronized (threadPoolManagerAccessLock) {
if (orbOwnsThreadPoolManager) {
try {
threadpoolMgr.close();
threadpoolMgr = null;
} catch (IOException exc) {
wrapper.ioExceptionOnClose(exc);
}
}
}
try {
monitoringManager.close();
monitoringManager = null;
} catch (IOException exc) {
wrapper.ioExceptionOnClose(exc);
}
CachedCodeBase.cleanCache(this);
try {
pihandler.close();
} catch (IOException exc) {
wrapper.ioExceptionOnClose(exc);
}
super.destroy();
badServerIdHandlerAccessLock = null;
clientDelegateFactoryAccessorLock = null;
corbaContactInfoListFactoryAccessLock = null;
objectKeyFactoryAccessLock = null;
legacyServerSocketManagerAccessLock = null;
threadPoolManagerAccessLock = null;
transportManager = null;
legacyServerSocketManager = null;
OAInvocationInfoStack = null;
clientInvocationInfoStack = null;
codeBaseIOR = null;
dynamicRequests = null;
svResponseReceived = null;
runObj = null;
shutdownObj = null;
waitForCompletionObj = null;
invocationObj = null;
isProcessingInvocation = null;
typeCodeForClassMap = null;
valueFactoryCache = null;
orbVersionThreadLocal = null;
requestDispatcherRegistry = null;
copierManager = null;
toaFactory = null;
poaFactory = null;
pihandler = null;
configData = null;
badServerIdHandler = null;
clientDelegateFactory = null;
corbaContactInfoListFactory = null;
resolver = null;
localResolver = null;
insNamingDelegate = null;
urlOperation = null;
taggedComponentFactoryFinder = null;
taggedProfileFactoryFinder = null;
taggedProfileTemplateFactoryFinder = null;
objectKeyFactory = null;
}
/**
@ -1434,18 +1528,27 @@ public class ORBImpl extends com.sun.corba.se.spi.orb.ORB
public OAInvocationInfo peekInvocationInfo()
{
synchronized (this) {
checkShutdownState();
}
StackImpl stack = (StackImpl)(OAInvocationInfoStack.get()) ;
return (OAInvocationInfo)(stack.peek()) ;
}
public void pushInvocationInfo( OAInvocationInfo info )
{
synchronized (this) {
checkShutdownState();
}
StackImpl stack = (StackImpl)(OAInvocationInfoStack.get()) ;
stack.push( info ) ;
}
public OAInvocationInfo popInvocationInfo()
{
synchronized (this) {
checkShutdownState();
}
StackImpl stack = (StackImpl)(OAInvocationInfoStack.get()) ;
return (OAInvocationInfo)(stack.pop()) ;
}
@ -1459,6 +1562,9 @@ public class ORBImpl extends com.sun.corba.se.spi.orb.ORB
public void initBadServerIdHandler()
{
synchronized (this) {
checkShutdownState();
}
synchronized (badServerIdHandlerAccessLock) {
Class cls = configData.getBadServerIdHandler() ;
if (cls != null) {
@ -1477,6 +1583,9 @@ public class ORBImpl extends com.sun.corba.se.spi.orb.ORB
public void setBadServerIdHandler( BadServerIdHandler handler )
{
synchronized (this) {
checkShutdownState();
}
synchronized (badServerIdHandlerAccessLock) {
badServerIdHandler = handler;
}
@ -1484,6 +1593,9 @@ public class ORBImpl extends com.sun.corba.se.spi.orb.ORB
public void handleBadServerId( ObjectKey okey )
{
synchronized (this) {
checkShutdownState();
}
synchronized (badServerIdHandlerAccessLock) {
if (badServerIdHandler == null)
throw wrapper.badServerId() ;
@ -1532,6 +1644,9 @@ public class ORBImpl extends com.sun.corba.se.spi.orb.ORB
public int getTransientServerId()
{
synchronized (this) {
checkShutdownState();
}
if( configData.getORBServerIdPropertySpecified( ) ) {
// ORBServerId is specified then use that value
return configData.getPersistentServerId( );
@ -1541,11 +1656,17 @@ public class ORBImpl extends com.sun.corba.se.spi.orb.ORB
public RequestDispatcherRegistry getRequestDispatcherRegistry()
{
synchronized (this) {
checkShutdownState();
}
return requestDispatcherRegistry;
}
public ServiceContextRegistry getServiceContextRegistry()
{
synchronized (this) {
checkShutdownState();
}
return serviceContextRegistry ;
}
@ -1563,12 +1684,18 @@ public class ORBImpl extends com.sun.corba.se.spi.orb.ORB
// XXX What about multi-homed host?
public boolean isLocalHost( String hostName )
{
synchronized (this) {
checkShutdownState();
}
return hostName.equals( configData.getORBServerHost() ) ||
hostName.equals( getLocalHostName() ) ;
}
public boolean isLocalServerId( int subcontractId, int serverId )
{
synchronized (this) {
checkShutdownState();
}
if ((subcontractId < ORBConstants.FIRST_POA_SCID) ||
(subcontractId > ORBConstants.MAX_POA_SCID))
return serverId == getTransientServerId( ) ;
@ -1659,6 +1786,9 @@ public class ORBImpl extends com.sun.corba.se.spi.orb.ORB
public ClientInvocationInfo createOrIncrementInvocationInfo()
{
synchronized (this) {
checkShutdownState();
}
StackImpl invocationInfoStack =
(StackImpl) clientInvocationInfoStack.get();
ClientInvocationInfo clientInvocationInfo = null;
@ -1682,10 +1812,13 @@ public class ORBImpl extends com.sun.corba.se.spi.orb.ORB
public void releaseOrDecrementInvocationInfo()
{
StackImpl invocationInfoStack =
(StackImpl)clientInvocationInfoStack.get();
synchronized (this) {
checkShutdownState();
}
int entryCount = -1;
ClientInvocationInfo clientInvocationInfo = null;
StackImpl invocationInfoStack =
(StackImpl)clientInvocationInfoStack.get();
if (!invocationInfoStack.empty()) {
clientInvocationInfo =
(ClientInvocationInfo)invocationInfoStack.peek();
@ -1705,6 +1838,9 @@ public class ORBImpl extends com.sun.corba.se.spi.orb.ORB
public ClientInvocationInfo getInvocationInfo()
{
synchronized (this) {
checkShutdownState();
}
StackImpl invocationInfoStack =
(StackImpl) clientInvocationInfoStack.get();
return (ClientInvocationInfo) invocationInfoStack.peek();
@ -1719,6 +1855,9 @@ public class ORBImpl extends com.sun.corba.se.spi.orb.ORB
public void setClientDelegateFactory( ClientDelegateFactory factory )
{
synchronized (this) {
checkShutdownState();
}
synchronized (clientDelegateFactoryAccessorLock) {
clientDelegateFactory = factory ;
}
@ -1726,6 +1865,9 @@ public class ORBImpl extends com.sun.corba.se.spi.orb.ORB
public ClientDelegateFactory getClientDelegateFactory()
{
synchronized (this) {
checkShutdownState();
}
synchronized (clientDelegateFactoryAccessorLock) {
return clientDelegateFactory ;
}
@ -1735,6 +1877,9 @@ public class ORBImpl extends com.sun.corba.se.spi.orb.ORB
public void setCorbaContactInfoListFactory( CorbaContactInfoListFactory factory )
{
synchronized (this) {
checkShutdownState();
}
synchronized (corbaContactInfoListFactoryAccessLock) {
corbaContactInfoListFactory = factory ;
}
@ -1742,6 +1887,7 @@ public class ORBImpl extends com.sun.corba.se.spi.orb.ORB
public synchronized CorbaContactInfoListFactory getCorbaContactInfoListFactory()
{
checkShutdownState();
return corbaContactInfoListFactory ;
}
@ -1750,6 +1896,9 @@ public class ORBImpl extends com.sun.corba.se.spi.orb.ORB
*/
public void setResolver( Resolver resolver )
{
synchronized (this) {
checkShutdownState();
}
synchronized (resolverLock) {
this.resolver = resolver ;
}
@ -1760,6 +1909,9 @@ public class ORBImpl extends com.sun.corba.se.spi.orb.ORB
*/
public Resolver getResolver()
{
synchronized (this) {
checkShutdownState();
}
synchronized (resolverLock) {
return resolver ;
}
@ -1770,6 +1922,9 @@ public class ORBImpl extends com.sun.corba.se.spi.orb.ORB
*/
public void setLocalResolver( LocalResolver resolver )
{
synchronized (this) {
checkShutdownState();
}
synchronized (resolverLock) {
this.localResolver = resolver ;
}
@ -1780,6 +1935,9 @@ public class ORBImpl extends com.sun.corba.se.spi.orb.ORB
*/
public LocalResolver getLocalResolver()
{
synchronized (this) {
checkShutdownState();
}
synchronized (resolverLock) {
return localResolver ;
}
@ -1790,6 +1948,9 @@ public class ORBImpl extends com.sun.corba.se.spi.orb.ORB
*/
public void setURLOperation( Operation stringToObject )
{
synchronized (this) {
checkShutdownState();
}
synchronized (urlOperationLock) {
urlOperation = stringToObject ;
}
@ -1800,6 +1961,9 @@ public class ORBImpl extends com.sun.corba.se.spi.orb.ORB
*/
public Operation getURLOperation()
{
synchronized (this) {
checkShutdownState();
}
synchronized (urlOperationLock) {
return urlOperation ;
}
@ -1807,6 +1971,9 @@ public class ORBImpl extends com.sun.corba.se.spi.orb.ORB
public void setINSDelegate( CorbaServerRequestDispatcher sdel )
{
synchronized (this) {
checkShutdownState();
}
synchronized (resolverLock) {
insNamingDelegate = sdel ;
}
@ -1814,16 +1981,25 @@ public class ORBImpl extends com.sun.corba.se.spi.orb.ORB
public TaggedComponentFactoryFinder getTaggedComponentFactoryFinder()
{
synchronized (this) {
checkShutdownState();
}
return taggedComponentFactoryFinder ;
}
public IdentifiableFactoryFinder getTaggedProfileFactoryFinder()
{
synchronized (this) {
checkShutdownState();
}
return taggedProfileFactoryFinder ;
}
public IdentifiableFactoryFinder getTaggedProfileTemplateFactoryFinder()
{
synchronized (this) {
checkShutdownState();
}
return taggedProfileTemplateFactoryFinder ;
}
@ -1831,6 +2007,9 @@ public class ORBImpl extends com.sun.corba.se.spi.orb.ORB
public ObjectKeyFactory getObjectKeyFactory()
{
synchronized (this) {
checkShutdownState();
}
synchronized (objectKeyFactoryAccessLock) {
return objectKeyFactory ;
}
@ -1838,6 +2017,9 @@ public class ORBImpl extends com.sun.corba.se.spi.orb.ORB
public void setObjectKeyFactory( ObjectKeyFactory factory )
{
synchronized (this) {
checkShutdownState();
}
synchronized (objectKeyFactoryAccessLock) {
objectKeyFactory = factory ;
}
@ -1864,6 +2046,9 @@ public class ORBImpl extends com.sun.corba.se.spi.orb.ORB
public LegacyServerSocketManager getLegacyServerSocketManager()
{
synchronized (this) {
checkShutdownState();
}
synchronized (legacyServerSocketManagerAccessLock) {
if (legacyServerSocketManager == null) {
legacyServerSocketManager = new LegacyServerSocketManagerImpl(this);
@ -1876,6 +2061,9 @@ public class ORBImpl extends com.sun.corba.se.spi.orb.ORB
public void setThreadPoolManager(ThreadPoolManager mgr)
{
synchronized (this) {
checkShutdownState();
}
synchronized (threadPoolManagerAccessLock) {
threadpoolMgr = mgr;
}
@ -1883,9 +2071,13 @@ public class ORBImpl extends com.sun.corba.se.spi.orb.ORB
public ThreadPoolManager getThreadPoolManager()
{
synchronized (this) {
checkShutdownState();
}
synchronized (threadPoolManagerAccessLock) {
if (threadpoolMgr == null) {
threadpoolMgr = new ThreadPoolManagerImpl( threadGroup );
threadpoolMgr = new ThreadPoolManagerImpl();
orbOwnsThreadPoolManager = true;
}
return threadpoolMgr;
}
@ -1893,6 +2085,9 @@ public class ORBImpl extends com.sun.corba.se.spi.orb.ORB
public CopierManager getCopierManager()
{
synchronized (this) {
checkShutdownState();
}
return copierManager ;
}
} // Class ORBImpl

View File

@ -1,5 +1,5 @@
/*
* Copyright (c) 2003, 2004, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2003, 2012, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@ -25,6 +25,18 @@
package com.sun.corba.se.impl.orbutil.threadpool;
import java.io.IOException;
import java.io.Closeable;
import java.security.AccessController;
import java.security.PrivilegedAction;
import java.util.List;
import java.util.ArrayList;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.concurrent.atomic.AtomicLong;
import com.sun.corba.se.spi.orbutil.threadpool.NoSuchWorkQueueException;
import com.sun.corba.se.spi.orbutil.threadpool.ThreadPool;
import com.sun.corba.se.spi.orbutil.threadpool.Work;
@ -36,12 +48,27 @@ import com.sun.corba.se.impl.orbutil.threadpool.WorkQueueImpl;
import com.sun.corba.se.spi.monitoring.MonitoringConstants;
import com.sun.corba.se.spi.monitoring.MonitoredObject;
import com.sun.corba.se.spi.monitoring.MonitoringFactories;
import com.sun.corba.se.spi.orb.ORB;
import com.sun.corba.se.spi.monitoring.LongMonitoredAttributeBase;
import com.sun.corba.se.impl.logging.ORBUtilSystemException;
import com.sun.corba.se.impl.orbutil.ORBConstants;
import com.sun.corba.se.spi.logging.CORBALogDomains;
public class ThreadPoolImpl implements ThreadPool
{
private static int threadCounter = 0; // serial counter useful for debugging
// serial counter useful for debugging
private static AtomicInteger threadCounter = new AtomicInteger(0);
private static final ORBUtilSystemException wrapper =
ORBUtilSystemException.get(CORBALogDomains.RPC_TRANSPORT);
// Any time currentThreadCount and/or availableWorkerThreads is updated
// or accessed this ThreadPool's WorkQueue must be locked. And, it is
// expected that this ThreadPool's WorkQueue is the only object that
// updates and accesses these values directly and indirectly though a
// call to a method in this ThreadPool. If any call to update or access
// those values must synchronized on this ThreadPool's WorkQueue.
private WorkQueue workQueue;
// Stores the number of available worker threads
@ -65,14 +92,11 @@ public class ThreadPoolImpl implements ThreadPool
// Running count of the work items processed
// Set the value to 1 so that divide by zero is avoided in
// averageWorkCompletionTime()
private long processedCount = 1;
private AtomicLong processedCount = new AtomicLong(1);
// Running aggregate of the time taken in millis to execute work items
// processed by the threads in the threadpool
private long totalTimeTaken = 0;
// Lock for protecting state when required
private Object lock = new Object();
private AtomicLong totalTimeTaken = new AtomicLong(0);
// Name of the ThreadPool
private String name;
@ -81,7 +105,10 @@ public class ThreadPoolImpl implements ThreadPool
private MonitoredObject threadpoolMonitoredObject;
// ThreadGroup in which threads should be created
private ThreadGroup threadGroup ;
private ThreadGroup threadGroup;
Object workersLock = new Object();
List<WorkerThread> workers = new ArrayList<>();
/**
* This constructor is used to create an unbounded threadpool
@ -90,7 +117,7 @@ public class ThreadPoolImpl implements ThreadPool
inactivityTimeout = ORBConstants.DEFAULT_INACTIVITY_TIMEOUT;
maxWorkerThreads = Integer.MAX_VALUE;
workQueue = new WorkQueueImpl(this);
threadGroup = tg ;
threadGroup = tg;
name = threadpoolName;
initializeMonitoring();
}
@ -121,6 +148,30 @@ public class ThreadPoolImpl implements ThreadPool
initializeMonitoring();
}
// Note that this method should not return until AFTER all threads have died.
public void close() throws IOException {
// Copy to avoid concurrent modification problems.
List<WorkerThread> copy = null;
synchronized (workersLock) {
copy = new ArrayList<>(workers);
}
for (WorkerThread wt : copy) {
wt.close();
while (wt.getState() != Thread.State.TERMINATED) {
try {
wt.join();
} catch (InterruptedException exc) {
wrapper.interruptedJoinCallWhileClosingThreadPool(exc, wt, this);
}
}
}
threadGroup = null;
}
// Setup monitoring for this threadpool
private void initializeMonitoring() {
// Get root monitored object
@ -217,8 +268,8 @@ public class ThreadPoolImpl implements ThreadPool
* or notify waiting threads on the queue for available work
*/
void notifyForAvailableWork(WorkQueue aWorkQueue) {
synchronized (lock) {
if (availableWorkerThreads == 0) {
synchronized (aWorkQueue) {
if (availableWorkerThreads < aWorkQueue.workItemsInQueue()) {
createWorkerThread();
} else {
aWorkQueue.notify();
@ -227,120 +278,145 @@ public class ThreadPoolImpl implements ThreadPool
}
/**
* To be called from the workqueue to create worker threads when none
* available.
*/
void createWorkerThread() {
WorkerThread thread;
synchronized (lock) {
if (boundedThreadPool) {
if (currentThreadCount < maxWorkerThreads) {
thread = new WorkerThread(threadGroup, getName());
currentThreadCount++;
} else {
// REVIST - Need to create a thread to monitor the
// the state for deadlock i.e. all threads waiting for
// something which can be got from the item in the
// workqueue, but there is no thread available to
// process that work item - DEADLOCK !!
return;
}
} else {
thread = new WorkerThread(threadGroup, getName());
currentThreadCount++;
}
private Thread createWorkerThreadHelper( String name ) {
// Thread creation needs to be in a doPrivileged block
// if there is a non-null security manager for two reasons:
// 1. The creation of a thread in a specific ThreadGroup
// is a privileged operation. Lack of a doPrivileged
// block here causes an AccessControlException
// (see bug 6268145).
// 2. We want to make sure that the permissions associated
// with this thread do NOT include the permissions of
// the current thread that is calling this method.
// This leads to problems in the app server where
// some threads in the ThreadPool randomly get
// bad permissions, leading to unpredictable
// permission errors (see bug 6021011).
//
// A Java thread contains a stack of call frames,
// one for each method called that has not yet returned.
// Each method comes from a particular class. The class
// was loaded by a ClassLoader which has an associated
// CodeSource, and this determines the Permissions
// for all methods in that class. The current
// Permissions for the thread are the intersection of
// all Permissions for the methods on the stack.
// This is part of the Security Context of the thread.
//
// When a thread creates a new thread, the new thread
// inherits the security context of the old thread.
// This is bad in a ThreadPool, because different
// creators of threads may have different security contexts.
// This leads to occasional unpredictable errors when
// a thread is re-used in a different security context.
//
// Avoiding this problem is simple: just do the thread
// creation in a doPrivileged block. This sets the
// inherited security context to that of the code source
// for the ORB code itself, which contains all permissions
// in either Java SE or Java EE.
WorkerThread thread = new WorkerThread(threadGroup, name);
synchronized (workersLock) {
workers.add(thread);
}
// The thread must be set to a daemon thread so the
// VM can exit if the only threads left are PooledThreads
// or other daemons. We don't want to rely on the
// calling thread always being a daemon.
// Note that no exception is possible here since we
// are inside the doPrivileged block.
thread.setDaemon(true);
// Catch exceptions since setDaemon can cause a
// security exception to be thrown under netscape
// in the Applet mode
try {
thread.setDaemon(true);
} catch (Exception e) {
// REVISIT - need to do some logging here
}
wrapper.workerThreadCreated(thread, thread.getContextClassLoader());
thread.start();
return null;
}
/**
* This method will return the minimum number of threads maintained
* by the threadpool.
*/
* To be called from the workqueue to create worker threads when none
* available.
*/
void createWorkerThread() {
final String name = getName();
synchronized (workQueue) {
try {
if (System.getSecurityManager() == null) {
createWorkerThreadHelper(name);
} else {
// If we get here, we need to create a thread.
AccessController.doPrivileged(
new PrivilegedAction() {
public Object run() {
return createWorkerThreadHelper(name);
}
}
);
}
} catch (Throwable t) {
// Decrementing the count of current worker threads.
// But, it will be increased in the finally block.
decrementCurrentNumberOfThreads();
wrapper.workerThreadCreationFailure(t);
} finally {
incrementCurrentNumberOfThreads();
}
}
}
public int minimumNumberOfThreads() {
return minWorkerThreads;
}
/**
* This method will return the maximum number of threads in the
* threadpool at any point in time, for the life of the threadpool
*/
public int maximumNumberOfThreads() {
return maxWorkerThreads;
}
/**
* This method will return the time in milliseconds when idle
* threads in the threadpool are removed.
*/
public long idleTimeoutForThreads() {
return inactivityTimeout;
}
/**
* This method will return the total number of threads currently in the
* threadpool. This method returns a value which is not synchronized.
*/
public int currentNumberOfThreads() {
synchronized (lock) {
synchronized (workQueue) {
return currentThreadCount;
}
}
/**
* This method will return the number of available threads in the
* threadpool which are waiting for work. This method returns a
* value which is not synchronized.
*/
void decrementCurrentNumberOfThreads() {
synchronized (workQueue) {
currentThreadCount--;
}
}
void incrementCurrentNumberOfThreads() {
synchronized (workQueue) {
currentThreadCount++;
}
}
public int numberOfAvailableThreads() {
synchronized (lock) {
synchronized (workQueue) {
return availableWorkerThreads;
}
}
/**
* This method will return the number of busy threads in the threadpool
* This method returns a value which is not synchronized.
*/
public int numberOfBusyThreads() {
synchronized (lock) {
synchronized (workQueue) {
return (currentThreadCount - availableWorkerThreads);
}
}
/**
* This method returns the average elapsed time taken to complete a Work
* item in milliseconds.
*/
public long averageWorkCompletionTime() {
synchronized (lock) {
return (totalTimeTaken / processedCount);
synchronized (workQueue) {
return (totalTimeTaken.get() / processedCount.get());
}
}
/**
* This method returns the number of Work items processed by the threadpool
*/
public long currentProcessedCount() {
synchronized (lock) {
return processedCount;
synchronized (workQueue) {
return processedCount.get();
}
}
@ -357,15 +433,37 @@ public class ThreadPoolImpl implements ThreadPool
private static synchronized int getUniqueThreadId() {
return ThreadPoolImpl.threadCounter++;
return ThreadPoolImpl.threadCounter.incrementAndGet();
}
/**
* This method will decrement the number of available threads
* in the threadpool which are waiting for work. Called from
* WorkQueueImpl.requestWork()
*/
void decrementNumberOfAvailableThreads() {
synchronized (workQueue) {
availableWorkerThreads--;
}
}
/**
* This method will increment the number of available threads
* in the threadpool which are waiting for work. Called from
* WorkQueueImpl.requestWork()
*/
void incrementNumberOfAvailableThreads() {
synchronized (workQueue) {
availableWorkerThreads++;
}
}
private class WorkerThread extends Thread
private class WorkerThread extends Thread implements Closeable
{
private Work currentWork;
private int threadId = 0; // unique id for the thread
// thread pool this WorkerThread belongs too
private volatile boolean closeCalled = false;
private String threadPoolName;
// name seen by Thread.getName()
private StringBuffer workerThreadName = new StringBuffer();
@ -377,100 +475,61 @@ public class ThreadPoolImpl implements ThreadPool
setName(composeWorkerThreadName(threadPoolName, "Idle"));
}
public synchronized void close() {
closeCalled = true;
interrupt();
}
private void resetClassLoader() {
}
private void performWork() {
long start = System.currentTimeMillis();
try {
currentWork.doWork();
} catch (Throwable t) {
wrapper.workerThreadDoWorkThrowable(this, t);
}
long elapsedTime = System.currentTimeMillis() - start;
totalTimeTaken.addAndGet(elapsedTime);
processedCount.incrementAndGet();
}
public void run() {
while (true) {
try {
synchronized (lock) {
availableWorkerThreads++;
}
// Get some work to do
currentWork = ((WorkQueueImpl)workQueue).requestWork(inactivityTimeout);
synchronized (lock) {
availableWorkerThreads--;
// It is possible in notifyForAvailableWork that the
// check for availableWorkerThreads = 0 may return
// false, because the availableWorkerThreads has not been
// decremented to zero before the producer thread added
// work to the queue. This may create a deadlock, if the
// executing thread needs information which is in the work
// item queued in the workqueue, but has no thread to work
// on it since none was created because availableWorkerThreads = 0
// returned false.
// The following code will ensure that a thread is always available
// in those situations
if ((availableWorkerThreads == 0) &&
(workQueue.workItemsInQueue() > 0)) {
createWorkerThread();
}
}
// Set the thread name for debugging.
setName(composeWorkerThreadName(threadPoolName,
Integer.toString(this.threadId)));
long start = System.currentTimeMillis();
try {
while (!closeCalled) {
try {
// Do the work
currentWork.doWork();
currentWork = ((WorkQueueImpl)workQueue).requestWork(
inactivityTimeout);
if (currentWork == null)
continue;
} catch (InterruptedException exc) {
wrapper.workQueueThreadInterrupted( exc, getName(),
Boolean.valueOf(closeCalled));
continue ;
} catch (Throwable t) {
// Ignore all errors.
;
wrapper.workerThreadThrowableFromRequestWork(this, t,
workQueue.getName());
continue;
}
long end = System.currentTimeMillis();
synchronized (lock) {
totalTimeTaken += (end - start);
processedCount++;
}
performWork();
// set currentWork to null so that the work item can be
// garbage collected
// garbage collected without waiting for the next work item.
currentWork = null;
setName(composeWorkerThreadName(threadPoolName, "Idle"));
} catch (TimeoutException e) {
// This thread timed out waiting for something to do.
synchronized (lock) {
availableWorkerThreads--;
// This should for both bounded and unbounded case
if (currentThreadCount > minWorkerThreads) {
currentThreadCount--;
// This thread can exit.
return;
} else {
// Go back to waiting on workQueue
continue;
}
}
} catch (InterruptedException ie) {
// InterruptedExceptions are
// caught here. Thus, threads can be forced out of
// requestWork and so they have to reacquire the lock.
// Other options include ignoring or
// letting this thread die.
// Ignoring for now. REVISIT
synchronized (lock) {
availableWorkerThreads--;
}
} catch (Throwable e) {
// Ignore any exceptions that currentWork.process
// accidently lets through, but let Errors pass.
// Add debugging output? REVISIT
synchronized (lock) {
availableWorkerThreads--;
}
resetClassLoader();
}
} catch (Throwable e) {
// This should not be possible
wrapper.workerThreadCaughtUnexpectedThrowable(this,e);
} finally {
synchronized (workersLock) {
workers.remove(this);
}
}
}

View File

@ -1,5 +1,5 @@
/*
* Copyright (c) 2003, 2004, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2003, 2012, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@ -25,6 +25,15 @@
package com.sun.corba.se.impl.orbutil.threadpool;
import java.io.IOException;
import java.security.PrivilegedAction;
import java.security.AccessController;
import java.util.concurrent.atomic.AtomicInteger;
import com.sun.corba.se.spi.orb.ORB;
import com.sun.corba.se.spi.orbutil.threadpool.NoSuchThreadPoolException;
import com.sun.corba.se.spi.orbutil.threadpool.ThreadPool;
import com.sun.corba.se.spi.orbutil.threadpool.ThreadPoolManager;
@ -33,21 +42,102 @@ import com.sun.corba.se.spi.orbutil.threadpool.ThreadPoolChooser;
import com.sun.corba.se.impl.orbutil.threadpool.ThreadPoolImpl;
import com.sun.corba.se.impl.orbutil.ORBConstants;
import com.sun.corba.se.impl.logging.ORBUtilSystemException;
import com.sun.corba.se.impl.orbutil.ORBConstants;
import com.sun.corba.se.spi.logging.CORBALogDomains;
public class ThreadPoolManagerImpl implements ThreadPoolManager
{
private ThreadPool threadPool ;
private ThreadPool threadPool;
private ThreadGroup threadGroup;
public ThreadPoolManagerImpl( ThreadGroup tg )
{
// Use unbounded threadpool in J2SE ORB
// ThreadPoolManager from s1as appserver code base can be set in the
// ORB. ThreadPools in the appserver are bounded. In that situation
// the ThreadPool in this ThreadPoolManager will have its threads
// die after the idle timeout.
// XXX Should there be cleanup when ORB.shutdown is called if the
// ORB owns the ThreadPool?
threadPool = new ThreadPoolImpl( tg,
ORBConstants.THREADPOOL_DEFAULT_NAME ) ;
private static final ORBUtilSystemException wrapper =
ORBUtilSystemException.get(CORBALogDomains.RPC_TRANSPORT);
public ThreadPoolManagerImpl() {
threadGroup = getThreadGroup();
threadPool = new ThreadPoolImpl(threadGroup,
ORBConstants.THREADPOOL_DEFAULT_NAME);
}
private static AtomicInteger tgCount = new AtomicInteger();
private ThreadGroup getThreadGroup() {
ThreadGroup tg;
// See bugs 4916766 and 4936203
// We intend to create new threads in a reliable thread group.
// This avoids problems if the application/applet
// creates a thread group, makes JavaIDL calls which create a new
// connection and ReaderThread, and then destroys the thread
// group. If our ReaderThreads were to be part of such destroyed thread
// group then it might get killed and cause other invoking threads
// sharing the same connection to get a non-restartable
// CommunicationFailure. We'd like to avoid that.
//
// Our solution is to create all of our threads in the highest thread
// group that we have access to, given our own security clearance.
//
try {
// try to get a thread group that's as high in the threadgroup
// parent-child hierarchy, as we can get to.
// this will prevent an ORB thread created during applet-init from
// being killed when an applet dies.
tg = AccessController.doPrivileged(
new PrivilegedAction<ThreadGroup>() {
public ThreadGroup run() {
ThreadGroup tg = Thread.currentThread().getThreadGroup();
ThreadGroup ptg = tg;
try {
while (ptg != null) {
tg = ptg;
ptg = tg.getParent();
}
} catch (SecurityException se) {
// Discontinue going higher on a security exception.
}
return new ThreadGroup(tg, "ORB ThreadGroup " + tgCount.getAndIncrement());
}
}
);
} catch (SecurityException e) {
// something wrong, we go back to the original code
tg = Thread.currentThread().getThreadGroup();
}
return tg;
}
public void close() {
try {
threadPool.close();
} catch (IOException exc) {
wrapper.threadPoolCloseError();
}
try {
boolean isDestroyed = threadGroup.isDestroyed();
int numThreads = threadGroup.activeCount();
int numGroups = threadGroup.activeGroupCount();
if (isDestroyed) {
wrapper.threadGroupIsDestroyed(threadGroup);
} else {
if (numThreads > 0)
wrapper.threadGroupHasActiveThreadsInClose(threadGroup, numThreads);
if (numGroups > 0)
wrapper.threadGroupHasSubGroupsInClose(threadGroup, numGroups);
threadGroup.destroy();
}
} catch (IllegalThreadStateException exc) {
wrapper.threadGroupDestroyFailed(exc, threadGroup);
}
threadGroup = null;
}
/**

View File

@ -1,5 +1,5 @@
/*
* Copyright (c) 2003, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2003, 2012, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@ -111,24 +111,23 @@ public class WorkQueueImpl implements WorkQueue
return workqueueMonitoredObject;
}
public void addWork(Work work) {
synchronized (this) {
public synchronized void addWork(Work work) {
workItemsAdded++;
work.setEnqueueTime(System.currentTimeMillis());
theWorkQueue.addLast(work);
((ThreadPoolImpl)workerThreadPool).notifyForAvailableWork(this);
}
}
Work requestWork(long waitTime)
throws TimeoutException, InterruptedException
synchronized Work requestWork(long waitTime) throws TimeoutException, InterruptedException
{
Work workItem;
synchronized (this) {
((ThreadPoolImpl)workerThreadPool).incrementNumberOfAvailableThreads();
if (theWorkQueue.size() != 0) {
workItem = (Work)theWorkQueue.removeFirst();
totalTimeInQueue += System.currentTimeMillis() - workItem.getEnqueueTime();
workItemsDequeued++;
((ThreadPoolImpl)workerThreadPool).decrementNumberOfAvailableThreads();
return workItem;
}
@ -145,6 +144,7 @@ public class WorkQueueImpl implements WorkQueue
workItem = (Work)theWorkQueue.removeFirst();
totalTimeInQueue += System.currentTimeMillis() - workItem.getEnqueueTime();
workItemsDequeued++;
((ThreadPoolImpl)workerThreadPool).decrementNumberOfAvailableThreads();
return workItem;
}
@ -152,12 +152,13 @@ public class WorkQueueImpl implements WorkQueue
} while (remainingWaitTime > 0);
((ThreadPoolImpl)workerThreadPool).decrementNumberOfAvailableThreads();
throw new TimeoutException();
} catch (InterruptedException ie) {
((ThreadPoolImpl)workerThreadPool).decrementNumberOfAvailableThreads();
throw ie;
}
}
}
public void setThreadPool(ThreadPool workerThreadPool) {

View File

@ -1,5 +1,5 @@
/*
* Copyright (c) 2001, 2004, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2001, 2012, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@ -1666,7 +1666,9 @@ public class CorbaMessageMediatorImpl
((CDRInputObject)messageMediator.getInputObject()).unmarshalHeader();
ORB orb = (ORB)messageMediator.getBroker();
orb.checkShutdownState();
synchronized (orb) {
orb.checkShutdownState();
}
ObjectKey okey = messageMediator.getObjectKey();
if (orb.subcontractDebugFlag) {

View File

@ -1,5 +1,5 @@
/*
* Copyright (c) 2003, 2010, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2003, 2012, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@ -69,8 +69,8 @@ public class SelectorImpl
private HashMap listenerThreads;
private Map readerThreads;
private boolean selectorStarted;
private boolean closed;
private ORBUtilSystemException wrapper ;
private volatile boolean closed;
private ORBUtilSystemException wrapper;
public SelectorImpl(ORB orb)

View File

@ -1,6 +1,6 @@
;
; Copyright (c) 2003, 2011, Oracle and/or its affiliates. All rights reserved.
; Copyright (c) 2003, 2012, Oracle and/or its affiliates. All rights reserved.
; DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
;
; This code is free software; you can redistribute it and/or modify it
@ -62,6 +62,7 @@
(IS_LOCAL_REQUIRES_STUB 43 WARNING "Call to StubAdapter.isLocal did not pass a stub")
(REQUEST_REQUIRES_STUB 44 WARNING "Call to StubAdapter.request did not pass a stub")
(BAD_ACTIVATE_TIE_CALL 45 WARNING "Call to StubAdapter.activateTie did not pass a valid Tie")
(IO_EXCEPTION_ON_CLOSE 46 FINE "Useless exception on call to Closeable.close()")
)
(BAD_PARAM
(NULL_PARAM 1 WARNING "Null parameter")
@ -291,7 +292,31 @@
(JAVA_STREAM_INIT_FAILED 95 WARNING "Java stream initialization failed")
(DUPLICATE_ORB_VERSION_SERVICE_CONTEXT 96 WARNING "An ORBVersionServiceContext was already in the service context list")
(DUPLICATE_SENDING_CONTEXT_SERVICE_CONTEXT 97 WARNING "A SendingContextServiceContext was already in the service context list")
(WORK_QUEUE_THREAD_INTERRUPTED 98 FINE "Worker Thread from thread pool {0} was interrupted: closeCalled is {1}.")
(WORKER_THREAD_CREATED
104 FINE "Worker thread {0} has been created with ClassLoader {1}")
(WORKER_THREAD_THROWABLE_FROM_REQUEST_WORK
109 FINE "Worker thread {0} caught throwable {1} when requesting work from work queue {2}.")
(WORKER_THREAD_NOT_NEEDED
110 FINE "Worker thread {0} will exit; current thread count, {1}, greater than minunum worker threads needed, {2}.")
(WORKER_THREAD_DO_WORK_THROWABLE
111 FINE "Worker thread {0} caught throwable {1} while executing work.")
(WORKER_THREAD_CAUGHT_UNEXPECTED_THROWABLE
112 WARNING "Worker thread {0} caught unexpected throwable {1}.")
(WORKER_THREAD_CREATION_FAILURE
113 SEVERE "Worker thread creation failure; cause {0}.")
(WORKER_THREAD_SET_NAME_FAILURE
114 WARNING "Unable to set worker thread {0} name to {1}; cause {2}.")
(WORK_QUEUE_REQUEST_WORK_NO_WORK_FOUND
116 WARNING "Ignoring unexpected {0} when retrieving of work from work queue, {1}.")
(THREAD_POOL_CLOSE_ERROR 126 WARNING "Error in closing ThreadPool")
(THREAD_GROUP_IS_DESTROYED 127 WARNING "ThreadGroup {0} is already destroyed: can't destroy it")
(THREAD_GROUP_HAS_ACTIVE_THREADS_IN_CLOSE 128 WARNING "ThreadGroup {0} has {1} active threads: destroy may cause exception")
(THREAD_GROUP_HAS_SUB_GROUPS_IN_CLOSE 129 WARNING "ThreadGroup {0} has {1} sub-thread groups: destroy may cause exception")
(THREAD_GROUP_DESTROY_FAILED 130 WARNING "ThreadGroup {0} could not be destroyed")
(INTERRUPTED_JOIN_CALL_WHILE_CLOSING_THREAD_POOL 131 WARNING "Join was interrupted on thread {0} while closing ThreadPool {1}")
)
(MARSHAL
(CHUNK_OVERFLOW 1 WARNING "Data read past end of chunk without closing the chunk")
(UNEXPECTED_EOF 2 WARNING "Grow buffer strategy called underflow handler")

View File

@ -1,5 +1,5 @@
/*
* Copyright (c) 2003, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2003, 2012, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@ -24,6 +24,7 @@
*/
package com.sun.corba.se.spi.monitoring;
import java.io.Closeable;
import com.sun.corba.se.spi.orb.ORB;
import com.sun.corba.se.spi.monitoring.MonitoredObject;
import java.util.*;
@ -39,7 +40,7 @@ import java.util.*;
* @author Hemanth Puttaswamy
* </p>
*/
public interface MonitoringManager {
public interface MonitoringManager extends Closeable {
///////////////////////////////////////
// operations

View File

@ -1,5 +1,5 @@
/*
* Copyright (c) 2003, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2003, 2012, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@ -40,4 +40,6 @@ public interface MonitoringManagerFactory {
*/
MonitoringManager createMonitoringManager( String nameOfTheRoot,
String description );
void remove(String nameOfTheRoot);
}

View File

@ -1,5 +1,5 @@
/*
* Copyright (c) 2002, 2004, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2002, 2012, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@ -171,7 +171,7 @@ public abstract class ORB extends com.sun.corba.se.org.omg.CORBA.ORB
private static Map staticWrapperMap = new ConcurrentHashMap();
private MonitoringManager monitoringManager;
protected MonitoringManager monitoringManager;
// There is only one instance of the PresentationManager
// that is shared between all ORBs. This is necessary
@ -226,6 +226,14 @@ public abstract class ORB extends com.sun.corba.se.org.omg.CORBA.ORB
globalPM.setStubFactoryFactory( true, dynamicStubFactoryFactory ) ;
}
public void destroy() {
wrapper = null;
omgWrapper = null;
typeCodeMap = null;
primitiveTypeCodeConstants = null;
byteBufferPool = null;
}
/** Get the single instance of the PresentationManager
*/
public static PresentationManager getPresentationManager()
@ -302,6 +310,9 @@ public abstract class ORB extends com.sun.corba.se.org.omg.CORBA.ORB
// Typecode support: needed in both ORBImpl and ORBSingleton
public TypeCodeImpl get_primitive_tc(int kind)
{
synchronized (this) {
checkShutdownState();
}
try {
return primitiveTypeCodeConstants[kind] ;
} catch (Throwable t) {
@ -311,15 +322,20 @@ public abstract class ORB extends com.sun.corba.se.org.omg.CORBA.ORB
public synchronized void setTypeCode(String id, TypeCodeImpl code)
{
checkShutdownState();
typeCodeMap.put(id, code);
}
public synchronized TypeCodeImpl getTypeCode(String id)
{
checkShutdownState();
return (TypeCodeImpl)typeCodeMap.get(id);
}
public MonitoringManager getMonitoringManager( ) {
synchronized (this) {
checkShutdownState();
}
return monitoringManager;
}
@ -434,6 +450,9 @@ public abstract class ORB extends com.sun.corba.se.org.omg.CORBA.ORB
*/
public Logger getLogger( String domain )
{
synchronized (this) {
checkShutdownState();
}
ORBData odata = getORBData() ;
// Determine the correct ORBId. There are 3 cases:
@ -510,6 +529,9 @@ public abstract class ORB extends com.sun.corba.se.org.omg.CORBA.ORB
// This method must also be inherited by both ORB and ORBSingleton.
public ByteBufferPool getByteBufferPool()
{
synchronized (this) {
checkShutdownState();
}
if (byteBufferPool == null)
byteBufferPool = new ByteBufferPoolImpl(this);

View File

@ -1,5 +1,5 @@
/*
* Copyright (c) 2003, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2003, 2012, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@ -25,9 +25,15 @@
package com.sun.corba.se.spi.orbutil.threadpool;
import java.io.Closeable;
public interface ThreadPool
/** This interface defines a thread pool execution service. The ORB uses this
* interface, which preceeds the JDK 5 ExecutorService. Note that the close
* method must be called in order to reclaim thread resources.
*/
public interface ThreadPool extends Closeable
{
/**
* This method will return any instance of the WorkQueue. If the ThreadPool
* instance only services one WorkQueue then that WorkQueue instance will

View File

@ -1,5 +1,5 @@
/*
* Copyright (c) 2003, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2003, 2012, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@ -25,7 +25,9 @@
package com.sun.corba.se.spi.orbutil.threadpool;
public interface ThreadPoolManager
import java.io.Closeable;
public interface ThreadPoolManager extends Closeable
{
/**
* This method will return an instance of the threadpool given a threadpoolId,

View File

@ -1,5 +1,5 @@
/*
* Copyright (c) 2002, 2010, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2002, 2012, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@ -25,6 +25,8 @@
package com.sun.corba.se.spi.protocol;
import java.io.Closeable;
import org.omg.PortableInterceptor.ObjectReferenceTemplate ;
import org.omg.PortableInterceptor.Interceptor ;
import org.omg.PortableInterceptor.Current ;
@ -51,7 +53,7 @@ import com.sun.corba.se.impl.protocol.giopmsgheaders.ReplyMessage ;
/** This interface defines the PI interface that is used to interface the rest of the
* ORB to the PI implementation.
*/
public interface PIHandler {
public interface PIHandler extends Closeable {
/** Complete the initialization of the PIHandler. This will execute the methods
* on the ORBInitializers, if any are defined. This must be done here so that
* the ORB can obtain the PIHandler BEFORE the ORBInitializers run, since they

View File

@ -1,5 +1,5 @@
/*
* Copyright (c) 2002, 2003, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2002, 2012, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@ -37,33 +37,59 @@ import com.sun.corba.se.spi.oa.ObjectAdapterFactory ;
* This is a registry of all subcontract ID dependent objects. This includes:
* LocalClientRequestDispatcherFactory, ClientRequestDispatcher, ServerRequestDispatcher, and
* ObjectAdapterFactory.
* XXX Should the registerXXX methods take an scid or not? I think we
* want to do this so that the same instance can be shared across multiple
* scids (and this is already true for ObjectAdapterFactory and LocalClientRequestDispatcherFactory),
* but this will require some changes for ClientRequestDispatcher and ServerRequestDispatcher.
*/
public interface RequestDispatcherRegistry {
// XXX needs javadocs!
/** Register a ClientRequestDispatcher for a particular subcontract ID.
* The subcontract ID appears in the ObjectKey of an object reference, and is used
* to control how a remote method invocation is processed by the ORB for a
* particular kind of object reference.
*/
void registerClientRequestDispatcher( ClientRequestDispatcher csc, int scid) ;
/** Get the ClientRequestDispatcher for subcontract ID scid.
*/
ClientRequestDispatcher getClientRequestDispatcher( int scid ) ;
/** Register a LocalClientRequestDispatcher for a particular subcontract ID.
* The subcontract ID appears in the ObjectKey of an object reference, and is used
* to control how a particular kind of colocated request is processed.
*/
void registerLocalClientRequestDispatcherFactory( LocalClientRequestDispatcherFactory csc, int scid) ;
/** Get the LocalClientRequestDispatcher for subcontract ID scid.
*/
LocalClientRequestDispatcherFactory getLocalClientRequestDispatcherFactory( int scid ) ;
/** Register a CorbaServerRequestDispatcher for a particular subcontract ID.
* The subcontract ID appears in the ObjectKey of an object reference, and is used
* to control how a particular kind of request is processed when received by the ORB.
*/
void registerServerRequestDispatcher( CorbaServerRequestDispatcher ssc, int scid) ;
/** Get the CorbaServerRequestDispatcher for subcontract ID scid.
*/
CorbaServerRequestDispatcher getServerRequestDispatcher(int scid) ;
/** Register a CorbaServerRequestDispatcher for handling an explicit object key name.
* This is used for non-standard invocations such as INS and the bootstrap name service.
*/
void registerServerRequestDispatcher( CorbaServerRequestDispatcher ssc, String name ) ;
/** Get the CorbaServerRequestDispatcher for a particular object key.
*/
CorbaServerRequestDispatcher getServerRequestDispatcher( String name ) ;
/** Register an ObjectAdapterFactory for a particular subcontract ID.
* This controls how Object references are created and managed.
*/
void registerObjectAdapterFactory( ObjectAdapterFactory oaf, int scid) ;
/** Get the ObjectAdapterFactory for a particular subcontract ID scid.
*/
ObjectAdapterFactory getObjectAdapterFactory( int scid ) ;
Set getObjectAdapterFactories() ;
/** Return the set of all ObjectAdapterFactory instances that are registered.
*/
Set<ObjectAdapterFactory> getObjectAdapterFactories();
}

View File

@ -258,3 +258,6 @@ e77b8e0ed1f84e3e268239e276c7ab64fa573baa jdk8-b43
831e5c76a20af18f3c08c5a95ed31be0e128a010 jdk8-b44
9d5f20961bc5846fa8d098d534effafbbdae0a58 jdk8-b45
40e5a3f2907ed02b335c7caa8ecf068cc801380d hs24-b15
cf37a594c38db2ea926954154636f9f81da2e032 jdk8-b46
0c7bb1f4f9c8062b5c5bfa56b3bdca44839b4109 jdk8-b47
66b0450071c1534e014b131892cc86b63f1d009c hs24-b16

View File

@ -1,5 +1,5 @@
/*
* Copyright (c) 2002, 2011, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2002, 2012, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@ -688,8 +688,7 @@ implements ReferenceType {
if (sde == null) {
String extension = null;
if (saKlass instanceof InstanceKlass) {
Symbol sdeSym = ((InstanceKlass)saKlass).getSourceDebugExtension();
extension = (sdeSym != null)? sdeSym.asString() : null;
extension = ((InstanceKlass)saKlass).getSourceDebugExtension();
}
if (extension == null) {
sde = NO_SDE_INFO_MARK;

View File

@ -342,7 +342,7 @@ public class InstanceKlass extends Klass {
public Oop getProtectionDomain() { return protectionDomain.getValue(this); }
public ObjArray getSigners() { return (ObjArray) signers.getValue(this); }
public Symbol getSourceFileName() { return getSymbol(sourceFileName); }
public Symbol getSourceDebugExtension(){ return getSymbol(sourceDebugExtension); }
public String getSourceDebugExtension(){ return CStringUtilities.getString(sourceDebugExtension.getValue(getHandle())); }
public TypeArray getInnerClasses() { return (TypeArray) innerClasses.getValue(this); }
public long getNonstaticFieldSize() { return nonstaticFieldSize.getValue(this); }
public long getStaticOopFieldCount() { return staticOopFieldCount.getValue(this); }

View File

@ -35,7 +35,7 @@ HOTSPOT_VM_COPYRIGHT=Copyright 2012
HS_MAJOR_VER=24
HS_MINOR_VER=0
HS_BUILD_NUMBER=16
HS_BUILD_NUMBER=17
JDK_MAJOR_VER=1
JDK_MINOR_VER=8

View File

@ -2337,12 +2337,7 @@ void ClassFileParser::parse_classfile_source_debug_extension_attribute(constantP
// Don't bother storing it if there is no way to retrieve it
if (JvmtiExport::can_get_source_debug_extension()) {
// Optimistically assume that only 1 byte UTF format is used
// (common case)
TempNewSymbol sde_symbol = SymbolTable::new_symbol((const char*)sde_buffer, length, CHECK);
k->set_source_debug_extension(sde_symbol);
// Note that set_source_debug_extension() increments the reference count
// for its copy of the Symbol*, so use a TempNewSymbol here.
k->set_source_debug_extension((char*)sde_buffer, length);
}
// Got utf8 string, set stream position forward
cfs->skip_u1(length, CHECK);

View File

@ -550,10 +550,12 @@ void CompilerOracle::parse_from_line(char* line) {
}
}
static const char* default_cc_file = ".hotspot_compiler";
static const char* cc_file() {
#ifdef ASSERT
if (CompileCommandFile == NULL)
return ".hotspot_compiler";
return default_cc_file;
#endif
return CompileCommandFile;
}
@ -636,10 +638,17 @@ void compilerOracle_init() {
CompilerOracle::parse_from_string(CompileOnly, CompilerOracle::parse_compile_only);
if (CompilerOracle::has_command_file()) {
CompilerOracle::parse_from_file();
} else {
struct stat buf;
if (os::stat(default_cc_file, &buf) == 0) {
warning("%s file is present but has been ignored. "
"Run with -XX:CompileCommandFile=%s to load the file.",
default_cc_file, default_cc_file);
}
}
if (lists[PrintCommand] != NULL) {
if (PrintAssembly) {
warning("CompileCommand and/or .hotspot_compiler file contains 'print' commands, but PrintAssembly is also enabled");
warning("CompileCommand and/or %s file contains 'print' commands, but PrintAssembly is also enabled", default_cc_file);
} else if (FLAG_IS_DEFAULT(DebugNonSafepoints)) {
warning("printing of assembly code is enabled; turning on DebugNonSafepoints to gain additional output");
DebugNonSafepoints = true;

View File

@ -847,7 +847,6 @@ void instanceKlass::shared_symbols_iterate(SymbolClosure* closure) {
Klass::shared_symbols_iterate(closure);
closure->do_symbol(&_generic_signature);
closure->do_symbol(&_source_file_name);
closure->do_symbol(&_source_debug_extension);
for (JavaFieldStream fs(this); !fs.done(); fs.next()) {
int name_index = fs.name_index();
@ -1944,9 +1943,10 @@ void instanceKlass::release_C_heap_structures() {
// class can't be referenced anymore).
if (_array_name != NULL) _array_name->decrement_refcount();
if (_source_file_name != NULL) _source_file_name->decrement_refcount();
if (_source_debug_extension != NULL) _source_debug_extension->decrement_refcount();
// walk constant pool and decrement symbol reference counts
_constants->unreference_symbols();
if (_source_debug_extension != NULL) FREE_C_HEAP_ARRAY(char, _source_debug_extension, mtClass);
}
void instanceKlass::set_source_file_name(Symbol* n) {
@ -1954,9 +1954,22 @@ void instanceKlass::set_source_file_name(Symbol* n) {
if (_source_file_name != NULL) _source_file_name->increment_refcount();
}
void instanceKlass::set_source_debug_extension(Symbol* n) {
_source_debug_extension = n;
if (_source_debug_extension != NULL) _source_debug_extension->increment_refcount();
void instanceKlass::set_source_debug_extension(char* array, int length) {
if (array == NULL) {
_source_debug_extension = NULL;
} else {
// Adding one to the attribute length in order to store a null terminator
// character could cause an overflow because the attribute length is
// already coded with an u4 in the classfile, but in practice, it's
// unlikely to happen.
assert((length+1) > length, "Overflow checking");
char* sde = NEW_C_HEAP_ARRAY(char, (length + 1), mtClass);
for (int i = 0; i < length; i++) {
sde[i] = array[i];
}
sde[length] = '\0';
_source_debug_extension = sde;
}
}
address instanceKlass::static_field_addr(int offset) {

View File

@ -226,7 +226,9 @@ class instanceKlass: public Klass {
// Name of source file containing this klass, NULL if not specified.
Symbol* _source_file_name;
// the source debug extension for this klass, NULL if not specified.
Symbol* _source_debug_extension;
// Specified as UTF-8 string without terminating zero byte in the classfile,
// it is stored in the instanceklass as a NULL-terminated UTF-8 string
char* _source_debug_extension;
// Generic signature, or null if none.
Symbol* _generic_signature;
// Array name derived from this class which needs unreferencing
@ -542,8 +544,8 @@ class instanceKlass: public Klass {
void set_major_version(u2 major_version) { _major_version = major_version; }
// source debug extension
Symbol* source_debug_extension() const { return _source_debug_extension; }
void set_source_debug_extension(Symbol* n);
char* source_debug_extension() const { return _source_debug_extension; }
void set_source_debug_extension(char* array, int length);
// symbol unloading support (refcount already added)
Symbol* array_name() { return _array_name; }

View File

@ -421,8 +421,7 @@ instanceKlassKlass::allocate_instance_klass(Symbol* name, int vtable_len, int it
ik->set_protection_domain(NULL);
ik->set_signers(NULL);
ik->set_source_file_name(NULL);
ik->set_source_debug_extension(NULL);
ik->set_source_debug_extension(NULL);
ik->set_source_debug_extension(NULL, 0);
ik->set_array_name(NULL);
ik->set_inner_classes(NULL);
ik->set_static_oop_field_count(0);
@ -531,7 +530,7 @@ void instanceKlassKlass::oop_print_on(oop obj, outputStream* st) {
}
if (ik->source_debug_extension() != NULL) {
st->print(BULLET"source debug extension: ");
ik->source_debug_extension()->print_value_on(st);
st->print_cr("%s", ik->source_debug_extension());
st->cr();
}

View File

@ -160,6 +160,7 @@ class LibraryCallKit : public GraphKit {
bool inline_trans(vmIntrinsics::ID id);
bool inline_abs(vmIntrinsics::ID id);
bool inline_sqrt(vmIntrinsics::ID id);
void finish_pow_exp(Node* result, Node* x, Node* y, const TypeFunc* call_type, address funcAddr, const char* funcName);
bool inline_pow(vmIntrinsics::ID id);
bool inline_exp(vmIntrinsics::ID id);
bool inline_min_max(vmIntrinsics::ID id);
@ -1535,40 +1536,79 @@ bool LibraryCallKit::inline_abs(vmIntrinsics::ID id) {
return true;
}
void LibraryCallKit::finish_pow_exp(Node* result, Node* x, Node* y, const TypeFunc* call_type, address funcAddr, const char* funcName) {
//-------------------
//result=(result.isNaN())? funcAddr():result;
// Check: If isNaN() by checking result!=result? then either trap
// or go to runtime
Node* cmpisnan = _gvn.transform(new (C, 3) CmpDNode(result,result));
// Build the boolean node
Node* bolisnum = _gvn.transform( new (C, 2) BoolNode(cmpisnan, BoolTest::eq) );
if (!too_many_traps(Deoptimization::Reason_intrinsic)) {
{
BuildCutout unless(this, bolisnum, PROB_STATIC_FREQUENT);
// End the current control-flow path
push_pair(x);
if (y != NULL) {
push_pair(y);
}
// The pow or exp intrinsic returned a NaN, which requires a call
// to the runtime. Recompile with the runtime call.
uncommon_trap(Deoptimization::Reason_intrinsic,
Deoptimization::Action_make_not_entrant);
}
push_pair(result);
} else {
// If this inlining ever returned NaN in the past, we compile a call
// to the runtime to properly handle corner cases
IfNode* iff = create_and_xform_if(control(), bolisnum, PROB_STATIC_FREQUENT, COUNT_UNKNOWN);
Node* if_slow = _gvn.transform( new (C, 1) IfFalseNode(iff) );
Node* if_fast = _gvn.transform( new (C, 1) IfTrueNode(iff) );
if (!if_slow->is_top()) {
RegionNode* result_region = new(C, 3) RegionNode(3);
PhiNode* result_val = new (C, 3) PhiNode(result_region, Type::DOUBLE);
result_region->init_req(1, if_fast);
result_val->init_req(1, result);
set_control(if_slow);
const TypePtr* no_memory_effects = NULL;
Node* rt = make_runtime_call(RC_LEAF, call_type, funcAddr, funcName,
no_memory_effects,
x, top(), y, y ? top() : NULL);
Node* value = _gvn.transform(new (C, 1) ProjNode(rt, TypeFunc::Parms+0));
#ifdef ASSERT
Node* value_top = _gvn.transform(new (C, 1) ProjNode(rt, TypeFunc::Parms+1));
assert(value_top == top(), "second value must be top");
#endif
result_region->init_req(2, control());
result_val->init_req(2, value);
push_result(result_region, result_val);
} else {
push_pair(result);
}
}
}
//------------------------------inline_exp-------------------------------------
// Inline exp instructions, if possible. The Intel hardware only misses
// really odd corner cases (+/- Infinity). Just uncommon-trap them.
bool LibraryCallKit::inline_exp(vmIntrinsics::ID id) {
assert(id == vmIntrinsics::_dexp, "Not exp");
// If this inlining ever returned NaN in the past, we do not intrinsify it
// every again. NaN results requires StrictMath.exp handling.
if (too_many_traps(Deoptimization::Reason_intrinsic)) return false;
_sp += arg_size(); // restore stack pointer
Node *x = pop_math_arg();
Node *result = _gvn.transform(new (C, 2) ExpDNode(0,x));
//-------------------
//result=(result.isNaN())? StrictMath::exp():result;
// Check: If isNaN() by checking result!=result? then go to Strict Math
Node* cmpisnan = _gvn.transform(new (C, 3) CmpDNode(result,result));
// Build the boolean node
Node* bolisnum = _gvn.transform( new (C, 2) BoolNode(cmpisnan, BoolTest::eq) );
{ BuildCutout unless(this, bolisnum, PROB_STATIC_FREQUENT);
// End the current control-flow path
push_pair(x);
// Math.exp intrinsic returned a NaN, which requires StrictMath.exp
// to handle. Recompile without intrinsifying Math.exp
uncommon_trap(Deoptimization::Reason_intrinsic,
Deoptimization::Action_make_not_entrant);
}
finish_pow_exp(result, x, NULL, OptoRuntime::Math_D_D_Type(), CAST_FROM_FN_PTR(address, SharedRuntime::dexp), "EXP");
C->set_has_split_ifs(true); // Has chance for split-if optimization
push_pair(result);
return true;
}
@ -1577,17 +1617,12 @@ bool LibraryCallKit::inline_exp(vmIntrinsics::ID id) {
bool LibraryCallKit::inline_pow(vmIntrinsics::ID id) {
assert(id == vmIntrinsics::_dpow, "Not pow");
// If this inlining ever returned NaN in the past, we do not intrinsify it
// every again. NaN results requires StrictMath.pow handling.
if (too_many_traps(Deoptimization::Reason_intrinsic)) return false;
// Do not intrinsify on older platforms which lack cmove.
if (ConditionalMoveLimit == 0) return false;
// Pseudocode for pow
// if (x <= 0.0) {
// if ((double)((int)y)==y) { // if y is int
// result = ((1&(int)y)==0)?-DPow(abs(x), y):DPow(abs(x), y)
// long longy = (long)y;
// if ((double)longy == y) { // if y is long
// if (y + 1 == y) longy = 0; // huge number: even
// result = ((1&longy) == 0)?-DPow(abs(x), y):DPow(abs(x), y);
// } else {
// result = NaN;
// }
@ -1595,7 +1630,7 @@ bool LibraryCallKit::inline_pow(vmIntrinsics::ID id) {
// result = DPow(x,y);
// }
// if (result != result)? {
// uncommon_trap();
// result = uncommon_trap() or runtime_call();
// }
// return result;
@ -1603,15 +1638,14 @@ bool LibraryCallKit::inline_pow(vmIntrinsics::ID id) {
Node* y = pop_math_arg();
Node* x = pop_math_arg();
Node *fast_result = _gvn.transform( new (C, 3) PowDNode(0, x, y) );
Node* result = NULL;
// Short form: if not top-level (i.e., Math.pow but inlining Math.pow
// inside of something) then skip the fancy tests and just check for
// NaN result.
Node *result = NULL;
if( jvms()->depth() >= 1 ) {
result = fast_result;
if (!too_many_traps(Deoptimization::Reason_intrinsic)) {
// Short form: skip the fancy tests and just check for NaN result.
result = _gvn.transform( new (C, 3) PowDNode(0, x, y) );
} else {
// If this inlining ever returned NaN in the past, include all
// checks + call to the runtime.
// Set the merge point for If node with condition of (x <= 0.0)
// There are four possible paths to region node and phi node
@ -1627,55 +1661,95 @@ bool LibraryCallKit::inline_pow(vmIntrinsics::ID id) {
Node *bol1 = _gvn.transform( new (C, 2) BoolNode( cmp, BoolTest::le ) );
// Branch either way
IfNode *if1 = create_and_xform_if(control(),bol1, PROB_STATIC_INFREQUENT, COUNT_UNKNOWN);
Node *opt_test = _gvn.transform(if1);
//assert( opt_test->is_If(), "Expect an IfNode");
IfNode *opt_if1 = (IfNode*)opt_test;
// Fast path taken; set region slot 3
Node *fast_taken = _gvn.transform( new (C, 1) IfFalseNode(opt_if1) );
Node *fast_taken = _gvn.transform( new (C, 1) IfFalseNode(if1) );
r->init_req(3,fast_taken); // Capture fast-control
// Fast path not-taken, i.e. slow path
Node *complex_path = _gvn.transform( new (C, 1) IfTrueNode(opt_if1) );
Node *complex_path = _gvn.transform( new (C, 1) IfTrueNode(if1) );
// Set fast path result
Node *fast_result = _gvn.transform( new (C, 3) PowDNode(0, y, x) );
Node *fast_result = _gvn.transform( new (C, 3) PowDNode(0, x, y) );
phi->init_req(3, fast_result);
// Complex path
// Build the second if node (if y is int)
// Node for (int)y
Node *inty = _gvn.transform( new (C, 2) ConvD2INode(y));
// Node for (double)((int) y)
Node *doubleinty= _gvn.transform( new (C, 2) ConvI2DNode(inty));
// Check (double)((int) y) : y
Node *cmpinty= _gvn.transform(new (C, 3) CmpDNode(doubleinty, y));
// Check if (y isn't int) then go to slow path
// Build the second if node (if y is long)
// Node for (long)y
Node *longy = _gvn.transform( new (C, 2) ConvD2LNode(y));
// Node for (double)((long) y)
Node *doublelongy= _gvn.transform( new (C, 2) ConvL2DNode(longy));
// Check (double)((long) y) : y
Node *cmplongy= _gvn.transform(new (C, 3) CmpDNode(doublelongy, y));
// Check if (y isn't long) then go to slow path
Node *bol2 = _gvn.transform( new (C, 2) BoolNode( cmpinty, BoolTest::ne ) );
Node *bol2 = _gvn.transform( new (C, 2) BoolNode( cmplongy, BoolTest::ne ) );
// Branch either way
IfNode *if2 = create_and_xform_if(complex_path,bol2, PROB_STATIC_INFREQUENT, COUNT_UNKNOWN);
Node *slow_path = opt_iff(r,if2); // Set region path 2
Node* ylong_path = _gvn.transform( new (C, 1) IfFalseNode(if2));
// Calculate DPow(abs(x), y)*(1 & (int)y)
Node *slow_path = _gvn.transform( new (C, 1) IfTrueNode(if2) );
// Calculate DPow(abs(x), y)*(1 & (long)y)
// Node for constant 1
Node *conone = intcon(1);
// 1& (int)y
Node *signnode= _gvn.transform( new (C, 3) AndINode(conone, inty) );
Node *conone = longcon(1);
// 1& (long)y
Node *signnode= _gvn.transform( new (C, 3) AndLNode(conone, longy) );
// A huge number is always even. Detect a huge number by checking
// if y + 1 == y and set integer to be tested for parity to 0.
// Required for corner case:
// (long)9.223372036854776E18 = max_jlong
// (double)(long)9.223372036854776E18 = 9.223372036854776E18
// max_jlong is odd but 9.223372036854776E18 is even
Node* yplus1 = _gvn.transform( new (C, 3) AddDNode(y, makecon(TypeD::make(1))));
Node *cmpyplus1= _gvn.transform(new (C, 3) CmpDNode(yplus1, y));
Node *bolyplus1 = _gvn.transform( new (C, 2) BoolNode( cmpyplus1, BoolTest::eq ) );
Node* correctedsign = NULL;
if (ConditionalMoveLimit != 0) {
correctedsign = _gvn.transform( CMoveNode::make(C, NULL, bolyplus1, signnode, longcon(0), TypeLong::LONG));
} else {
IfNode *ifyplus1 = create_and_xform_if(ylong_path,bolyplus1, PROB_FAIR, COUNT_UNKNOWN);
RegionNode *r = new (C, 3) RegionNode(3);
Node *phi = new (C, 3) PhiNode(r, TypeLong::LONG);
r->init_req(1, _gvn.transform( new (C, 1) IfFalseNode(ifyplus1)));
r->init_req(2, _gvn.transform( new (C, 1) IfTrueNode(ifyplus1)));
phi->init_req(1, signnode);
phi->init_req(2, longcon(0));
correctedsign = _gvn.transform(phi);
ylong_path = _gvn.transform(r);
record_for_igvn(r);
}
// zero node
Node *conzero = intcon(0);
// Check (1&(int)y)==0?
Node *cmpeq1 = _gvn.transform(new (C, 3) CmpINode(signnode, conzero));
// Check if (1&(int)y)!=0?, if so the result is negative
Node *conzero = longcon(0);
// Check (1&(long)y)==0?
Node *cmpeq1 = _gvn.transform(new (C, 3) CmpLNode(correctedsign, conzero));
// Check if (1&(long)y)!=0?, if so the result is negative
Node *bol3 = _gvn.transform( new (C, 2) BoolNode( cmpeq1, BoolTest::ne ) );
// abs(x)
Node *absx=_gvn.transform( new (C, 2) AbsDNode(x));
// abs(x)^y
Node *absxpowy = _gvn.transform( new (C, 3) PowDNode(0, y, absx) );
Node *absxpowy = _gvn.transform( new (C, 3) PowDNode(0, absx, y) );
// -abs(x)^y
Node *negabsxpowy = _gvn.transform(new (C, 2) NegDNode (absxpowy));
// (1&(int)y)==1?-DPow(abs(x), y):DPow(abs(x), y)
Node *signresult = _gvn.transform( CMoveNode::make(C, NULL, bol3, absxpowy, negabsxpowy, Type::DOUBLE));
// (1&(long)y)==1?-DPow(abs(x), y):DPow(abs(x), y)
Node *signresult = NULL;
if (ConditionalMoveLimit != 0) {
signresult = _gvn.transform( CMoveNode::make(C, NULL, bol3, absxpowy, negabsxpowy, Type::DOUBLE));
} else {
IfNode *ifyeven = create_and_xform_if(ylong_path,bol3, PROB_FAIR, COUNT_UNKNOWN);
RegionNode *r = new (C, 3) RegionNode(3);
Node *phi = new (C, 3) PhiNode(r, Type::DOUBLE);
r->init_req(1, _gvn.transform( new (C, 1) IfFalseNode(ifyeven)));
r->init_req(2, _gvn.transform( new (C, 1) IfTrueNode(ifyeven)));
phi->init_req(1, absxpowy);
phi->init_req(2, negabsxpowy);
signresult = _gvn.transform(phi);
ylong_path = _gvn.transform(r);
record_for_igvn(r);
}
// Set complex path fast result
r->init_req(2, ylong_path);
phi->init_req(2, signresult);
static const jlong nan_bits = CONST64(0x7ff8000000000000);
@ -1689,27 +1763,10 @@ bool LibraryCallKit::inline_pow(vmIntrinsics::ID id) {
result=_gvn.transform(phi);
}
//-------------------
//result=(result.isNaN())? uncommon_trap():result;
// Check: If isNaN() by checking result!=result? then go to Strict Math
Node* cmpisnan = _gvn.transform(new (C, 3) CmpDNode(result,result));
// Build the boolean node
Node* bolisnum = _gvn.transform( new (C, 2) BoolNode(cmpisnan, BoolTest::eq) );
{ BuildCutout unless(this, bolisnum, PROB_STATIC_FREQUENT);
// End the current control-flow path
push_pair(x);
push_pair(y);
// Math.pow intrinsic returned a NaN, which requires StrictMath.pow
// to handle. Recompile without intrinsifying Math.pow.
uncommon_trap(Deoptimization::Reason_intrinsic,
Deoptimization::Action_make_not_entrant);
}
finish_pow_exp(result, x, y, OptoRuntime::Math_DD_D_Type(), CAST_FROM_FN_PTR(address, SharedRuntime::dpow), "POW");
C->set_has_split_ifs(true); // Has chance for split-if optimization
push_pair(result);
return true;
}

View File

@ -1278,9 +1278,9 @@ void Parse::sharpen_type_after_if(BoolTest::mask btest,
// or the narrowOop equivalent.
const Type* obj_type = _gvn.type(obj);
const TypeOopPtr* tboth = obj_type->join(con_type)->isa_oopptr();
if (tboth != NULL && tboth != obj_type && tboth->higher_equal(obj_type)) {
if (tboth != NULL && tboth->klass_is_exact() && tboth != obj_type &&
tboth->higher_equal(obj_type)) {
// obj has to be of the exact type Foo if the CmpP succeeds.
assert(tboth->klass_is_exact(), "klass should be exact");
int obj_in_map = map()->find_edge(obj);
JVMState* jvms = this->jvms();
if (obj_in_map >= 0 &&

View File

@ -554,9 +554,7 @@ const Type *CmpUNode::sub( const Type *t1, const Type *t2 ) const {
return TypeInt::CC_GE;
} else if (hi0 <= lo1) {
// Check for special case in Hashtable::get. (See below.)
if ((jint)lo0 >= 0 && (jint)lo1 >= 0 &&
in(1)->Opcode() == Op_ModI &&
in(1)->in(2) == in(2) )
if ((jint)lo0 >= 0 && (jint)lo1 >= 0 && is_index_range_check())
return TypeInt::CC_LT;
return TypeInt::CC_LE;
}
@ -567,13 +565,17 @@ const Type *CmpUNode::sub( const Type *t1, const Type *t2 ) const {
// to be positive.
// (This is a gross hack, since the sub method never
// looks at the structure of the node in any other case.)
if ((jint)lo0 >= 0 && (jint)lo1 >= 0 &&
in(1)->Opcode() == Op_ModI &&
in(1)->in(2)->uncast() == in(2)->uncast())
if ((jint)lo0 >= 0 && (jint)lo1 >= 0 && is_index_range_check())
return TypeInt::CC_LT;
return TypeInt::CC; // else use worst case results
}
bool CmpUNode::is_index_range_check() const {
// Check for the "(X ModI Y) CmpU Y" shape
return (in(1)->Opcode() == Op_ModI &&
in(1)->in(2)->eqv_uncast(in(2)));
}
//------------------------------Idealize---------------------------------------
Node *CmpINode::Ideal( PhaseGVN *phase, bool can_reshape ) {
if (phase->type(in(2))->higher_equal(TypeInt::ZERO)) {

View File

@ -158,6 +158,7 @@ public:
CmpUNode( Node *in1, Node *in2 ) : CmpNode(in1,in2) {}
virtual int Opcode() const;
virtual const Type *sub( const Type *, const Type * ) const;
bool is_index_range_check() const;
};
//------------------------------CmpPNode---------------------------------------

View File

@ -268,14 +268,18 @@ void JvmtiClassFileReconstituter::write_source_file_attribute() {
// JSR45| SourceDebugExtension_attribute {
// JSR45| u2 attribute_name_index;
// JSR45| u4 attribute_length;
// JSR45| u2 sourcefile_index;
// JSR45| u1 debug_extension[attribute_length];
// JSR45| }
void JvmtiClassFileReconstituter::write_source_debug_extension_attribute() {
assert(ikh()->source_debug_extension() != NULL, "caller must check");
write_attribute_name_index("SourceDebugExtension");
write_u4(2); // always length 2
write_u2(symbol_to_cpool_index(ikh()->source_debug_extension()));
int len = (int)strlen(ikh()->source_debug_extension());
write_u4(len);
u1* ext = (u1*)ikh()->source_debug_extension();
for (int i=0; i<len; i++) {
write_u1(ext[i]);
}
}
// Write (generic) Signature attribute

View File

@ -1,5 +1,5 @@
/*
* Copyright (c) 2003, 2011, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2003, 2012, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@ -2541,15 +2541,12 @@ JvmtiEnv::GetSourceDebugExtension(oop k_mirror, char** source_debug_extension_pt
if (!Klass::cast(k)->oop_is_instance()) {
return JVMTI_ERROR_ABSENT_INFORMATION;
}
Symbol* sdeOop = instanceKlass::cast(k)->source_debug_extension();
NULL_CHECK(sdeOop, JVMTI_ERROR_ABSENT_INFORMATION);
char* sde = instanceKlass::cast(k)->source_debug_extension();
NULL_CHECK(sde, JVMTI_ERROR_ABSENT_INFORMATION);
{
JavaThread* current_thread = JavaThread::current();
ResourceMark rm(current_thread);
const char* sdecp = (const char*) sdeOop->as_C_string();
*source_debug_extension_ptr = (char *) jvmtiMalloc(strlen(sdecp)+1);
strcpy(*source_debug_extension_ptr, sdecp);
*source_debug_extension_ptr = (char *) jvmtiMalloc(strlen(sde)+1);
strcpy(*source_debug_extension_ptr, sde);
}
}

View File

@ -1,5 +1,5 @@
/*
* Copyright (c) 2003, 2011, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2003, 2012, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@ -3236,7 +3236,9 @@ void VM_RedefineClasses::redefine_single_class(jclass the_jclass,
// Copy the "source debug extension" attribute from new class version
the_class->set_source_debug_extension(
scratch_class->source_debug_extension());
scratch_class->source_debug_extension(),
scratch_class->source_debug_extension() == NULL ? 0 :
(int)strlen(scratch_class->source_debug_extension()));
// Use of javac -g could be different in the old and the new
if (scratch_class->access_flags().has_localvariable_table() !=

View File

@ -113,6 +113,9 @@ const char* WhiteBox::lookup_jstring(const char* field_name, oop object) {
int offset = offset_for_field(field_name, object,
vmSymbols::string_signature());
oop string = object->obj_field(offset);
if (string == NULL) {
return NULL;
}
const char* ret = java_lang_String::as_utf8_string(string);
return ret;
}

View File

@ -2983,7 +2983,10 @@ jint Arguments::parse(const JavaVMInitArgs* args) {
const char* tail;
// If flag "-XX:Flags=flags-file" is used it will be the first option to be processed.
const char* hotspotrc = ".hotspotrc";
bool settings_file_specified = false;
bool needs_hotspotrc_warning = false;
const char* flags_file;
int index;
for (index = 0; index < args->nOptions; index++) {
@ -3031,16 +3034,19 @@ jint Arguments::parse(const JavaVMInitArgs* args) {
if (!process_settings_file(flags_file, true, args->ignoreUnrecognized)) {
return JNI_EINVAL;
}
}
} else {
#ifdef ASSERT
// Parse default .hotspotrc settings file
if (!settings_file_specified) {
// Parse default .hotspotrc settings file
if (!process_settings_file(".hotspotrc", false, args->ignoreUnrecognized)) {
return JNI_EINVAL;
}
}
#else
struct stat buf;
if (os::stat(hotspotrc, &buf) == 0) {
needs_hotspotrc_warning = true;
}
#endif
}
if (PrintVMOptions) {
for (index = 0; index < args->nOptions; index++) {
@ -3057,6 +3063,14 @@ jint Arguments::parse(const JavaVMInitArgs* args) {
return result;
}
// Delay warning until here so that we've had a chance to process
// the -XX:-PrintWarnings flag
if (needs_hotspotrc_warning) {
warning("%s file is present but has been ignored. "
"Run with -XX:Flags=%s to load the file.",
hotspotrc, hotspotrc);
}
#if (defined JAVASE_EMBEDDED || defined ARM)
UNSUPPORTED_OPTION(UseG1GC, "G1 GC");
#endif

View File

@ -308,7 +308,7 @@ typedef TwoOopHashtable<Symbol*, mtClass> SymbolTwoOopHashtable;
nonstatic_field(instanceKlass, _protection_domain, oop) \
nonstatic_field(instanceKlass, _signers, objArrayOop) \
nonstatic_field(instanceKlass, _source_file_name, Symbol*) \
nonstatic_field(instanceKlass, _source_debug_extension, Symbol*) \
nonstatic_field(instanceKlass, _source_debug_extension, char*) \
nonstatic_field(instanceKlass, _inner_classes, typeArrayOop) \
nonstatic_field(instanceKlass, _nonstatic_field_size, int) \
nonstatic_field(instanceKlass, _static_field_size, int) \

View File

@ -48,7 +48,7 @@ public:
"With no argument this will show a list of available commands. "
"'help all' will show help for all commands.";
}
static const char* impact() { return "Low: "; }
static const char* impact() { return "Low"; }
static int num_arguments();
virtual void execute(TRAPS);
};
@ -60,7 +60,7 @@ public:
static const char* description() {
return "Print JVM version information.";
}
static const char* impact() { return "Low: "; }
static const char* impact() { return "Low"; }
static int num_arguments() { return 0; }
virtual void execute(TRAPS);
};
@ -72,7 +72,7 @@ public:
static const char* description() {
return "Print the command line used to start this VM instance.";
}
static const char* impact() { return "Low: "; }
static const char* impact() { return "Low"; }
static int num_arguments() { return 0; }
virtual void execute(TRAPS) {
Arguments::print_on(_output);
@ -88,7 +88,7 @@ public:
return "Print system properties.";
}
static const char* impact() {
return "Low: ";
return "Low";
}
static int num_arguments() { return 0; }
virtual void execute(TRAPS);
@ -105,7 +105,7 @@ public:
return "Print VM flag options and their current values.";
}
static const char* impact() {
return "Low: ";
return "Low";
}
static int num_arguments();
virtual void execute(TRAPS);
@ -121,7 +121,7 @@ public:
return "Print VM uptime.";
}
static const char* impact() {
return "Low: ";
return "Low";
}
static int num_arguments();
virtual void execute(TRAPS);

View File

@ -75,11 +75,13 @@ bool DCmdArgIter::next(TRAPS) {
}
// extracting first item, argument or option name
_key_addr = &_buffer[_cursor];
bool arg_had_quotes = false;
while (_cursor <= _len - 1 && _buffer[_cursor] != '=' && _buffer[_cursor] != _delim) {
// argument can be surrounded by single or double quotes
if (_buffer[_cursor] == '\"' || _buffer[_cursor] == '\'') {
_key_addr++;
char quote = _buffer[_cursor];
arg_had_quotes = true;
while (_cursor < _len - 1) {
_cursor++;
if (_buffer[_cursor] == quote && _buffer[_cursor - 1] != '\\') {
@ -95,16 +97,22 @@ bool DCmdArgIter::next(TRAPS) {
_cursor++;
}
_key_len = &_buffer[_cursor] - _key_addr;
if (arg_had_quotes) {
// if the argument was quoted, we need to step past the last quote here
_cursor++;
}
// check if the argument has the <key>=<value> format
if (_cursor <= _len -1 && _buffer[_cursor] == '=') {
_cursor++;
_value_addr = &_buffer[_cursor];
bool value_had_quotes = false;
// extract the value
while (_cursor <= _len - 1 && _buffer[_cursor] != _delim) {
// value can be surrounded by simple or double quotes
if (_buffer[_cursor] == '\"' || _buffer[_cursor] == '\'') {
_value_addr++;
char quote = _buffer[_cursor];
value_had_quotes = true;
while (_cursor < _len - 1) {
_cursor++;
if (_buffer[_cursor] == quote && _buffer[_cursor - 1] != '\\') {
@ -120,6 +128,10 @@ bool DCmdArgIter::next(TRAPS) {
_cursor++;
}
_value_len = &_buffer[_cursor] - _value_addr;
if (value_had_quotes) {
// if the value was quoted, we need to step past the last quote here
_cursor++;
}
} else {
_value_addr = NULL;
_value_len = 0;
@ -185,8 +197,17 @@ void DCmdParser::parse(CmdLine* line, char delim, TRAPS) {
arg->read_value(iter.key_addr(), iter.key_length(), CHECK);
next_argument = next_argument->next();
} else {
THROW_MSG(vmSymbols::java_lang_IllegalArgumentException(),
"Unknown argument in diagnostic command");
const size_t buflen = 120;
const size_t argbuflen = 30;
char buf[buflen];
char argbuf[argbuflen];
size_t len = MIN2<size_t>(iter.key_length(), argbuflen - 1);
strncpy(argbuf, iter.key_addr(), len);
argbuf[len] = '\0';
jio_snprintf(buf, buflen - 1, "Unknown argument '%s' in diagnostic command.", argbuf);
THROW_MSG(vmSymbols::java_lang_IllegalArgumentException(), buf);
}
}
cont = iter.next(CHECK);
@ -207,19 +228,21 @@ GenDCmdArgument* DCmdParser::lookup_dcmd_option(const char* name, size_t len) {
}
void DCmdParser::check(TRAPS) {
const size_t buflen = 256;
char buf[buflen];
GenDCmdArgument* arg = _arguments_list;
while (arg != NULL) {
if (arg->is_mandatory() && !arg->has_value()) {
THROW_MSG(vmSymbols::java_lang_IllegalArgumentException(),
"Missing argument for diagnostic command");
jio_snprintf(buf, buflen - 1, "The argument '%s' is mandatory.", arg->name());
THROW_MSG(vmSymbols::java_lang_IllegalArgumentException(), buf);
}
arg = arg->next();
}
arg = _options;
while (arg != NULL) {
if (arg->is_mandatory() && !arg->has_value()) {
THROW_MSG(vmSymbols::java_lang_IllegalArgumentException(),
"Missing option for diagnostic command");
jio_snprintf(buf, buflen - 1, "The option '%s' is mandatory.", arg->name());
THROW_MSG(vmSymbols::java_lang_IllegalArgumentException(), buf);
}
arg = arg->next();
}

View File

@ -238,6 +238,16 @@ public:
static const char* name() { return "No Name";}
static const char* description() { return "No Help";}
static const char* disabled_message() { return "Diagnostic command currently disabled"; }
// The impact() method returns a description of the intrusiveness of the diagnostic
// command on the Java Virtual Machine behavior. The rational for this method is that some
// diagnostic commands can seriously disrupt the behavior of the Java Virtual Machine
// (for instance a Thread Dump for an application with several tens of thousands of threads,
// or a Head Dump with a 40GB+ heap size) and other diagnostic commands have no serious
// impact on the JVM (for instance, getting the command line arguments or the JVM version).
// The recommended format for the description is <impact level>: [longer description],
// where the impact level is selected among this list: {Low, Medium, High}. The optional
// longer description can provide more specific details like the fact that Thread Dump
// impact depends on the heap size.
static const char* impact() { return "Low: No impact"; }
static int num_arguments() { return 0; }
outputStream* output() { return _output; }
@ -250,7 +260,7 @@ public:
bool has_arg = iter.next(CHECK);
if (has_arg) {
THROW_MSG(vmSymbols::java_lang_IllegalArgumentException(),
"Unknown argument in diagnostic command");
"The argument list of this diagnostic command should be empty.");
}
}
virtual void execute(TRAPS) { }

View File

@ -0,0 +1,142 @@
/*
* Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*
*/
/*
* Micro-benchmark for Math.pow() and Math.exp()
*/
import java.util.*;
public class Test7177917 {
static double d;
static Random r = new Random(0);
static long m_pow(double[][] values) {
double res = 0;
long start = System.nanoTime();
for (int i = 0; i < values.length; i++) {
res += Math.pow(values[i][0], values[i][1]);
}
long stop = System.nanoTime();
d = res;
return (stop - start) / 1000;
}
static long m_exp(double[] values) {
double res = 0;
long start = System.nanoTime();
for (int i = 0; i < values.length; i++) {
res += Math.exp(values[i]);
}
long stop = System.nanoTime();
d = res;
return (stop - start) / 1000;
}
static double[][] pow_values(int nb) {
double[][] res = new double[nb][2];
for (int i = 0; i < nb; i++) {
double ylogx = (1 + (r.nextDouble() * 2045)) - 1023; // 2045 rather than 2046 as a safety margin
double x = Math.abs(Double.longBitsToDouble(r.nextLong()));
while (x != x) {
x = Math.abs(Double.longBitsToDouble(r.nextLong()));
}
double logx = Math.log(x) / Math.log(2);
double y = ylogx / logx;
res[i][0] = x;
res[i][1] = y;
}
return res;
}
static double[] exp_values(int nb) {
double[] res = new double[nb];
for (int i = 0; i < nb; i++) {
double ylogx = (1 + (r.nextDouble() * 2045)) - 1023; // 2045 rather than 2046 as a safety margin
double x = Math.E;
double logx = Math.log(x) / Math.log(2);
double y = ylogx / logx;
res[i] = y;
}
return res;
}
static public void main(String[] args) {
{
// warmup
double[][] warmup_values = pow_values(10);
m_pow(warmup_values);
for (int i = 0; i < 20000; i++) {
m_pow(warmup_values);
}
// test pow perf
double[][] values = pow_values(1000000);
System.out.println("==> POW " + m_pow(values));
// force uncommon trap
double[][] nan_values = new double[1][2];
nan_values[0][0] = Double.NaN;
nan_values[0][1] = Double.NaN;
m_pow(nan_values);
// force recompilation
for (int i = 0; i < 20000; i++) {
m_pow(warmup_values);
}
// test pow perf again
System.out.println("==> POW " + m_pow(values));
}
{
// warmup
double[] warmup_values = exp_values(10);
m_exp(warmup_values);
for (int i = 0; i < 20000; i++) {
m_exp(warmup_values);
}
// test pow perf
double[] values = exp_values(1000000);
System.out.println("==> EXP " + m_exp(values));
// force uncommon trap
double[] nan_values = new double[1];
nan_values[0] = Double.NaN;
m_exp(nan_values);
// force recompilation
for (int i = 0; i < 20000; i++) {
m_exp(warmup_values);
}
// test pow perf again
System.out.println("==> EXP " + m_exp(values));
}
}
}

View File

@ -0,0 +1,136 @@
/*
* Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
/*
* @test
* @bug 6294277
* @summary java -Xdebug crashes on SourceDebugExtension attribute larger than 64K
* @run main/othervm -Xdebug -Xrunjdwp:transport=dt_socket,address=8888,server=y,suspend=n SourceDebugExtension
*/
import java.io.*;
public class SourceDebugExtension extends ClassLoader
{
static final int attrSize = 68000;
static byte[] header = {
(byte)0xca, (byte)0xfe, (byte)0xba, (byte)0xbe, (byte)0x00, (byte)0x00, (byte)0x00,
(byte)0x32, (byte)0x00, (byte)0x1e, (byte)0x0a, (byte)0x00, (byte)0x06, (byte)0x00,
(byte)0x0f, (byte)0x09, (byte)0x00, (byte)0x10, (byte)0x00, (byte)0x11, (byte)0x08,
(byte)0x00, (byte)0x12, (byte)0x0a, (byte)0x00, (byte)0x13, (byte)0x00, (byte)0x14,
(byte)0x07, (byte)0x00, (byte)0x15, (byte)0x07, (byte)0x00, (byte)0x16, (byte)0x01,
(byte)0x00, (byte)0x06, (byte)0x3c, (byte)0x69, (byte)0x6e, (byte)0x69, (byte)0x74,
(byte)0x3e, (byte)0x01, (byte)0x00, (byte)0x03, (byte)0x28, (byte)0x29, (byte)0x56,
(byte)0x01, (byte)0x00, (byte)0x04, (byte)0x43, (byte)0x6f, (byte)0x64, (byte)0x65,
(byte)0x01, (byte)0x00, (byte)0x0f, (byte)0x4c, (byte)0x69, (byte)0x6e, (byte)0x65,
(byte)0x4e, (byte)0x75, (byte)0x6d, (byte)0x62, (byte)0x65, (byte)0x72, (byte)0x54,
(byte)0x61, (byte)0x62, (byte)0x6c, (byte)0x65, (byte)0x01, (byte)0x00, (byte)0x04,
(byte)0x6d, (byte)0x61, (byte)0x69, (byte)0x6e, (byte)0x01, (byte)0x00, (byte)0x16,
(byte)0x28, (byte)0x5b, (byte)0x4c, (byte)0x6a, (byte)0x61, (byte)0x76, (byte)0x61,
(byte)0x2f, (byte)0x6c, (byte)0x61, (byte)0x6e, (byte)0x67, (byte)0x2f, (byte)0x53,
(byte)0x74, (byte)0x72, (byte)0x69, (byte)0x6e, (byte)0x67, (byte)0x3b, (byte)0x29,
(byte)0x56, (byte)0x01, (byte)0x00, (byte)0x0a, (byte)0x53, (byte)0x6f, (byte)0x75,
(byte)0x72, (byte)0x63, (byte)0x65, (byte)0x46, (byte)0x69, (byte)0x6c, (byte)0x65,
(byte)0x01, (byte)0x00, (byte)0x0d, (byte)0x54, (byte)0x65, (byte)0x73, (byte)0x74,
(byte)0x50, (byte)0x72, (byte)0x6f, (byte)0x67, (byte)0x2e, (byte)0x6a, (byte)0x61,
(byte)0x76, (byte)0x61, (byte)0x0c, (byte)0x00, (byte)0x07, (byte)0x00, (byte)0x08,
(byte)0x07, (byte)0x00, (byte)0x17, (byte)0x0c, (byte)0x00, (byte)0x18, (byte)0x00,
(byte)0x19, (byte)0x01, (byte)0x00, (byte)0x34, (byte)0x54, (byte)0x65, (byte)0x73,
(byte)0x74, (byte)0x20, (byte)0x70, (byte)0x72, (byte)0x6f, (byte)0x67, (byte)0x72,
(byte)0x61, (byte)0x6d, (byte)0x20, (byte)0x66, (byte)0x6f, (byte)0x72, (byte)0x20,
(byte)0x62, (byte)0x69, (byte)0x67, (byte)0x20, (byte)0x53, (byte)0x6f, (byte)0x75,
(byte)0x72, (byte)0x63, (byte)0x65, (byte)0x44, (byte)0x65, (byte)0x62, (byte)0x75,
(byte)0x67, (byte)0x45, (byte)0x78, (byte)0x74, (byte)0x65, (byte)0x6e, (byte)0x73,
(byte)0x69, (byte)0x6f, (byte)0x6e, (byte)0x20, (byte)0x61, (byte)0x74, (byte)0x74,
(byte)0x72, (byte)0x69, (byte)0x62, (byte)0x75, (byte)0x74, (byte)0x65, (byte)0x73,
(byte)0x07, (byte)0x00, (byte)0x1a, (byte)0x0c, (byte)0x00, (byte)0x1b, (byte)0x00,
(byte)0x1c, (byte)0x01, (byte)0x00, (byte)0x08, (byte)0x54, (byte)0x65, (byte)0x73,
(byte)0x74, (byte)0x50, (byte)0x72, (byte)0x6f, (byte)0x67, (byte)0x01, (byte)0x00,
(byte)0x10, (byte)0x6a, (byte)0x61, (byte)0x76, (byte)0x61, (byte)0x2f, (byte)0x6c,
(byte)0x61, (byte)0x6e, (byte)0x67, (byte)0x2f, (byte)0x4f, (byte)0x62, (byte)0x6a,
(byte)0x65, (byte)0x63, (byte)0x74, (byte)0x01, (byte)0x00, (byte)0x10, (byte)0x6a,
(byte)0x61, (byte)0x76, (byte)0x61, (byte)0x2f, (byte)0x6c, (byte)0x61, (byte)0x6e,
(byte)0x67, (byte)0x2f, (byte)0x53, (byte)0x79, (byte)0x73, (byte)0x74, (byte)0x65,
(byte)0x6d, (byte)0x01, (byte)0x00, (byte)0x03, (byte)0x6f, (byte)0x75, (byte)0x74,
(byte)0x01, (byte)0x00, (byte)0x15, (byte)0x4c, (byte)0x6a, (byte)0x61, (byte)0x76,
(byte)0x61, (byte)0x2f, (byte)0x69, (byte)0x6f, (byte)0x2f, (byte)0x50, (byte)0x72,
(byte)0x69, (byte)0x6e, (byte)0x74, (byte)0x53, (byte)0x74, (byte)0x72, (byte)0x65,
(byte)0x61, (byte)0x6d, (byte)0x3b, (byte)0x01, (byte)0x00, (byte)0x13, (byte)0x6a,
(byte)0x61, (byte)0x76, (byte)0x61, (byte)0x2f, (byte)0x69, (byte)0x6f, (byte)0x2f,
(byte)0x50, (byte)0x72, (byte)0x69, (byte)0x6e, (byte)0x74, (byte)0x53, (byte)0x74,
(byte)0x72, (byte)0x65, (byte)0x61, (byte)0x6d, (byte)0x01, (byte)0x00, (byte)0x07,
(byte)0x70, (byte)0x72, (byte)0x69, (byte)0x6e, (byte)0x74, (byte)0x6c, (byte)0x6e,
(byte)0x01, (byte)0x00, (byte)0x15, (byte)0x28, (byte)0x4c, (byte)0x6a, (byte)0x61,
(byte)0x76, (byte)0x61, (byte)0x2f, (byte)0x6c, (byte)0x61, (byte)0x6e, (byte)0x67,
(byte)0x2f, (byte)0x53, (byte)0x74, (byte)0x72, (byte)0x69, (byte)0x6e, (byte)0x67,
(byte)0x3b, (byte)0x29, (byte)0x56, (byte)0x01, (byte)0x00, (byte)0x14, (byte)0x53,
(byte)0x6f, (byte)0x75, (byte)0x72, (byte)0x63, (byte)0x65, (byte)0x44, (byte)0x65,
(byte)0x62, (byte)0x75, (byte)0x67, (byte)0x45, (byte)0x78, (byte)0x74, (byte)0x65,
(byte)0x6e, (byte)0x73, (byte)0x69, (byte)0x6f, (byte)0x6e, (byte)0x00, (byte)0x21,
(byte)0x00, (byte)0x05, (byte)0x00, (byte)0x06, (byte)0x00, (byte)0x00, (byte)0x00,
(byte)0x00, (byte)0x00, (byte)0x02, (byte)0x00, (byte)0x01, (byte)0x00, (byte)0x07,
(byte)0x00, (byte)0x08, (byte)0x00, (byte)0x01, (byte)0x00, (byte)0x09, (byte)0x00,
(byte)0x00, (byte)0x00, (byte)0x1d, (byte)0x00, (byte)0x01, (byte)0x00, (byte)0x01,
(byte)0x00, (byte)0x00, (byte)0x00, (byte)0x05, (byte)0x2a, (byte)0xb7, (byte)0x00,
(byte)0x01, (byte)0xb1, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x01, (byte)0x00,
(byte)0x0a, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x06, (byte)0x00, (byte)0x01,
(byte)0x00, (byte)0x00, (byte)0x00, (byte)0x01, (byte)0x00, (byte)0x09, (byte)0x00,
(byte)0x0b, (byte)0x00, (byte)0x0c, (byte)0x00, (byte)0x01, (byte)0x00, (byte)0x09,
(byte)0x00, (byte)0x00, (byte)0x00, (byte)0x25, (byte)0x00, (byte)0x02, (byte)0x00,
(byte)0x01, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x09, (byte)0xb2, (byte)0x00,
(byte)0x02, (byte)0x12, (byte)0x03, (byte)0xb6, (byte)0x00, (byte)0x04, (byte)0xb1,
(byte)0x00, (byte)0x00, (byte)0x00, (byte)0x01, (byte)0x00, (byte)0x0a, (byte)0x00,
(byte)0x00, (byte)0x00, (byte)0x0a, (byte)0x00, (byte)0x02, (byte)0x00, (byte)0x00,
(byte)0x00, (byte)0x03, (byte)0x00, (byte)0x08, (byte)0x00, (byte)0x04, (byte)0x00,
(byte)0x02, (byte)0x00, (byte)0x0d, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x02,
(byte)0x00, (byte)0x0e, (byte)0x00, (byte)0x1d, (byte)0x00, (byte)0x01, (byte)0x09,
(byte)0xa0
};
public static void main(String[] args) throws Exception
{
try {
SourceDebugExtension loader = new SourceDebugExtension();
/* The test program creates a class file from the header
* stored above and adding the content of a SourceDebugExtension
* attribute made of the character 0x02 repeated 68000 times.
* This attribute doesn't follow the syntax specified in JSR 45
* but it's fine because this test just checks that the JVM is
* able to load a class file with a SourceDebugExtension
* attribute bigger than 64KB. The JVM doesn't try to
* parse the content of the attribute, this work is performed
* by the SA or external tools.
*/
byte[] buf = new byte[header.length + attrSize];
for(int i=0; i<header.length; i++) {
buf[i] = header[i];
}
for(int i=0; i<attrSize; i++) {
buf[header.length+i] = (byte)0x02;
}
Class c = loader.defineClass("TestProg", buf, 0, buf.length);
System.out.println("Test PASSES");
} catch(Exception e) {
System.out.println("Test FAILS");
}
}
}

View File

@ -2,10 +2,9 @@
##
## @test
## @bug 7020373 7055247
## @bug 7020373 7055247 7053586
## @key cte_test
## @summary JSR rewriting can overflow memory address size variables
## @ignore Ignore it until 7053586 fixed
## @run shell Test7020373.sh
##
@ -30,7 +29,7 @@ fi
# set platform-dependent variables
OS=`uname -s`
case "$OS" in
SunOS | Linux )
SunOS | Linux | Darwin )
NULL=/dev/null
PS=":"
FS="/"
@ -66,7 +65,7 @@ then
echo "Test Failed"
exit 1
else
grep "java.lang.LinkageError" test.out
egrep "java.lang.LinkageError|java.lang.NoSuchMethodError|Main method not found in class OOMCrashClass4000_1|insufficient memory" test.out
if [ $? = 0 ]
then
echo "Test Passed"

View File

@ -20,6 +20,7 @@ public class ParserTest {
testNanoTime();
testJLong();
testBool();
testQuotes();
testMemorySize();
}
@ -95,6 +96,33 @@ public class ParserTest {
parse(name, "false", "", args);
}
public void testQuotes() throws Exception {
String name = "name";
DiagnosticCommand arg1 = new DiagnosticCommand(name,
"desc", DiagnosticArgumentType.STRING,
false, null);
DiagnosticCommand arg2 = new DiagnosticCommand("arg",
"desc", DiagnosticArgumentType.STRING,
false, null);
DiagnosticCommand[] args = {arg1, arg2};
// try with a quoted value
parse(name, "Recording 1", name + "=\"Recording 1\"", args);
// try with a quoted argument
parse(name, "myrec", "\"" + name + "\"" + "=myrec", args);
// try with both a quoted value and a quoted argument
parse(name, "Recording 1", "\"" + name + "\"" + "=\"Recording 1\"", args);
// now the same thing but with other arguments after
// try with a quoted value
parse(name, "Recording 1", name + "=\"Recording 1\",arg=value", args);
// try with a quoted argument
parse(name, "myrec", "\"" + name + "\"" + "=myrec,arg=value", args);
// try with both a quoted value and a quoted argument
parse(name, "Recording 1", "\"" + name + "\"" + "=\"Recording 1\",arg=value", args);
}
public void testMemorySize() throws Exception {
String name = "name";
String defaultValue = "1024";

View File

@ -167,3 +167,5 @@ f95fdbe525c88ef0d57dc1390be6582a8af5e07c jdk8-b39
eff4ece9c8bc43b3ce2b3758574c4c20147f0689 jdk8-b43
0b3f3a4ce13930430b32b616a717dfc7fe385b28 jdk8-b44
57476f66e13c55eea2f2fe2b858369a4c64b9936 jdk8-b45
300f45e990643af230d6cca39477ff62c44a9a54 jdk8-b46
404521944ac9383afda7d55d60713b212c730646 jdk8-b47

View File

@ -2609,6 +2609,18 @@ protected static final String PARSER_SETTINGS =
if (str == null) {
return str;
}
int len = str.length(), i=0, ch;
for (; i < len; i++) {
ch = str.charAt(i);
// if it's not an ASCII 7 character, break here, and use UTF-8 encoding
if (ch >= 128)
break;
}
// we saw no non-ascii-7 character
if (i == len) {
return str;
}
// get UTF-8 bytes for the string
StringBuffer buffer = new StringBuffer();
@ -2620,11 +2632,11 @@ protected static final String PARSER_SETTINGS =
// should never happen
return str;
}
int len = bytes.length;
int ch;
len = bytes.length;
// for each byte
for (int i = 0; i < len; i++) {
for (i = 0; i < len; i++) {
b = bytes[i];
// for non-ascii character: make it positive, then escape
if (b < 0) {

View File

@ -167,3 +167,5 @@ f2072b164b0519227833a2994f78e3988ee67827 jdk8-b41
f00c12994562c2f68d348a7c3e829374a89294e2 jdk8-b43
f6a417540ef124c9b4123d07da5e26f2ab909949 jdk8-b44
e80ac58b5ba904f24e125c742c30d0d740f05f86 jdk8-b45
ae368a83c2404b65c9e38c65e2aa081f2201ca74 jdk8-b46
fe6a060afc404dcf0921708a740de770666b781f jdk8-b47

View File

@ -167,3 +167,5 @@ cf5c1f6fbc5ba14163fe0ef8eb8601b33f951372 jdk8-b42
b3246687c3695dff6f461bb407f9db88f7d072e7 jdk8-b43
db471a7af03168e4441c245b1d9976f720a7cb77 jdk8-b44
b92353a01aa049bc508fc56f0347d5934b7c4390 jdk8-b45
8d2ed9d58453c8049715a72a6d26b6b66b37a94c jdk8-b46
00b22b23269a57d0bb46c57753be2fe9a9d2c1a3 jdk8-b47

View File

@ -215,7 +215,7 @@ define SetupJVMTIDemo
# Param 5 = libs for posix
# Param 6 = libs for winapi
# Param 7 = libs for solaris
BUILD_DEMO_JVMTI_$1_EXTRA_SRC:= $$(wildcard $(JDK_TOPDIR)/src/$(LEGACY_HOST_OS_API)/demo/jvmti/$1) \
BUILD_DEMO_JVMTI_$1_EXTRA_SRC:= $$(wildcard $(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/demo/jvmti/$1) \
$$(wildcard $$(addprefix $(JDK_TOPDIR)/src/share/demo/jvmti/,$2))
BUILD_DEMO_JVMTI_$1_EXTRA_INC:=$$(addprefix -I,$$(BUILD_DEMO_JVMTI_$1_EXTRA_SRC))
BUILD_DEMO_JVMTI_$1_LANG:=C
@ -227,18 +227,26 @@ define SetupJVMTIDemo
$1_EXTRA_CXX:=$(LIBCXX)
BUILD_DEMO_JVMTI_$1_O_FLAG:=$(CXX_O_FLAG_NORM)
endif
$1_CXXFLAGS:=$(CXXFLAGS_JDKLIB) $$(BUILD_DEMO_JVMTI_$1_O_FLAG) -I$(JDK_TOPDIR)/src/share/demo/jvmti/$1 $$(BUILD_DEMO_JVMTI_$1_EXTRA_INC) $3
ifeq ($1-$(OPENJDK_TARGET_CPU_ARCH),waiters-sparc)
$1_FILTER:=-xregs=no%appl
$1_CXXFLAGS:=$$(filter-out $$($1_FILTER),$$($1_CXXFLAGS))
endif
$$(eval $$(call SetupNativeCompilation,BUILD_DEMO_JVMTI_$1,\
SRC:=$(JDK_TOPDIR)/src/share/demo/jvmti/$1 $$(BUILD_DEMO_JVMTI_$1_EXTRA_SRC),\
LANG:=$$(BUILD_DEMO_JVMTI_$1_LANG),\
CFLAGS:=$(CFLAGS_JDKLIB) $$(BUILD_DEMO_JVMTI_$1_O_FLAG) -I$(JDK_TOPDIR)/src/share/demo/jvmti/$1 $$(BUILD_DEMO_JVMTI_$1_EXTRA_INC) $3,\
CXXFLAGS:=$(CXXFLAGS_JDKLIB) $$(BUILD_DEMO_JVMTI_$1_O_FLAG) -I$(JDK_TOPDIR)/src/share/demo/jvmti/$1 $$(BUILD_DEMO_JVMTI_$1_EXTRA_INC) $3,\
CXXFLAGS:=$$($1_CXXFLAGS),\
LDFLAGS:=$(LDFLAGS_JDKLIB),\
LDFLAGS_SUFFIX:=$$($1_EXTRA_CXX),\
LDFLAGS_SUFFIX_posix:=$5,\
LDFLAGS_SUFFIX_winapi:=$6,\
LDFLAGS_SUFFIX_solaris:=-lc $7,\
BIN:=$(JDK_OUTPUTDIR)/newdemoobjs/jvmti/$1,\
LIB:=$(JDK_OUTPUTDIR)/newdemo/jvmti/$1/lib/$(LIBRARY_PREFIX)$1$(SHARED_LIBRARY_SUFFIX)))
OBJECT_DIR:=$(JDK_OUTPUTDIR)/newdemoobjs/jvmti/$1,\
OUTPUT_DIR:=$(JDK_OUTPUTDIR)/newdemo/jvmti/$1/lib,\
LIBRARY:=$1))
$$(eval $$(call SetupZipArchive,BUILD_DEMO_JVMTI_SRC_$1,\
SRC:=$(JDK_TOPDIR)/src/share/demo/jvmti/$1 $$(BUILD_DEMO_JVMTI_$1_EXTRA_SRC),\
@ -262,7 +270,7 @@ define SetupJVMTIDemo
BUILD_DEMOS += $(JDK_OUTPUTDIR)/newdemo/jvmti/$1/$1.jar
endif
BUILD_DEMOS += $(JDK_OUTPUTDIR)/newdemo/jvmti/$1/lib/$(LIBRARY_PREFIX)$1$(SHARED_LIBRARY_SUFFIX) \
BUILD_DEMOS += $$(BUILD_DEMO_JVMTI_$1) \
$(JDK_OUTPUTDIR)/newdemo/jvmti/$1/src.zip \
$(JDK_OUTPUTDIR)/newdemo/jvmti/$1/README.txt
endef
@ -274,7 +282,7 @@ $(eval $(call SetupJVMTIDemo,heapViewer, agent_util))
# hprof contains error messages using __FILE__ macro. These expand to the absolute path
# in the new build system and relative in the old, causing the binaries to differ.
$(eval $(call SetupJVMTIDemo,hprof, java_crw_demo,\
-I$(JDK_TOPDIR)/src/share/npt -I$(JDK_TOPDIR)/src/$(LEGACY_HOST_OS_API)/npt,C,\
-I$(JDK_TOPDIR)/src/share/npt -I$(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/npt,C,\
-ldl,ws2_32.lib winmm.lib,-lsocket -lnsl))
$(eval $(call SetupJVMTIDemo,minst, agent_util java_crw_demo))
@ -349,7 +357,7 @@ BUILD_DEMOS += $(JDK_OUTPUTDIR)/newdemo/README
##################################################################################################
ifeq ($(PLATFORM), solaris)
ifeq ($(OPENJDK_TARGET_OS), solaris)
$(JDK_OUTPUTDIR)/newdemoclasses/jni/Poller/% : $(JDK_TOPDIR)/src/solaris/demo/jni/Poller/%
$(MKDIR) -p $(@D)
@ -386,8 +394,9 @@ $(eval $(call SetupNativeCompilation,BUILD_LIBPOLLER,\
CFLAGS:=$(CFLAGS_JDKLIB) $(C_O_FLAG_NORM) $(SHARED_LIBRARY_FLAGS) \
-I$(JDK_OUTPUTDIR)/newdemoclasses/jni/Poller, \
LDFLAGS:=$(LDFLAGS_JDKLIB), \
BIN:=$(JDK_OUTPUTDIR)/newdemoobjs/jni/Poller,\
LIB:=$(JDK_OUTPUTDIR)/newdemoobjs/$(LIBRARY_PREFIX)Poller$(SHARED_LIBRARY_SUFFIX)))
OBJECT_DIR:=$(JDK_OUTPUTDIR)/newdemoobjs/jni/Poller,\
OUTPUT_DIR:=$(JDK_OUTPUTDIR)/newdemoobjs, \
LIBRARY:=Poller))
#
# We can only compile native code after jar has been build (since we depend on generated .h files)

View File

@ -45,7 +45,7 @@ EXCLUDES += com/sun/pept \
com/sun/tools/example/debug/gui \
com/oracle/security
ifeq ($(PLATFORM)-$(ARCH_DATA_MODEL),windows-64)
ifeq ($(OPENJDK_TARGET_OS)-$(ARCH_DATA_MODEL),windows-64)
EXCLUDES += sun/security/pkcs11
endif
@ -61,7 +61,7 @@ ifndef OPENJDK
EXFILES := $(JDK_TOPDIR)/src/share/classes/javax/crypto/JarVerifier.java
endif
ifneq ($(PLATFORM),solaris)
ifneq ($(OPENJDK_TARGET_OS),solaris)
# Exclude Solaris nio and two security related files in src/share/classes
EXFILES += SolarisAclFileAttributeView.java \
SolarisFileStore.java \
@ -71,37 +71,34 @@ ifneq ($(PLATFORM),solaris)
SolarisUserDefinedFileAttributeView.java \
SolarisWatchService.java \
SolarisAclFileAttributeView.java \
SolarisFileStore.java \
SolarisFileSystem.java \
SolarisFileSystemProvider.java \
SolarisUserDefinedFileAttributeView.java \
SolarisNativeDispatcher.java \
SolarisWatchService.java \
SolarisLoginModule.java \
SolarisSystem.java \
sun/nio/ch/EventPortSelectorImpl.java \
sun/nio/ch/EventPortSelectorProvider.java \
sun/nio/ch/EventPortWrapper.java \
sun/tools/attach/SolarisAttachProvider.java \
sun/tools/attach/SolarisVirtualMachine.java
endif
# In the old build, this isn't excluded on macosx, even though it probably
# should be.
ifneq ($(PLATFORM),macosx)
ifneq ($(OPENJDK_TARGET_OS),macosx)
EXFILES+=WrapperGenerator.java
endif
ifneq ($(PLATFORM),windows)
ifneq ($(OPENJDK_TARGET_OS),windows)
# Exclude Window security related files in src/share/classes
EXFILES+=NTLoginModule.java \
NTSystem.java
endif
ifeq ($(PLATFORM),windows)
ifeq ($(OPENJDK_TARGET_OS),windows)
# Don't build GTK L&F on Windows
EXCLUDES+= com/sun/java/swing/plaf/gtk
endif
ifneq ($(PLATFORM),linux)
ifneq ($(OPENJDK_TARGET_OS),linux)
EXFILES+=sun/tools/attach/LinuxAttachProvider.java \
sun/tools/attach/LinuxVirtualMachine.java \
sun/nio/fs/LinuxDosFileAttributeView.java \
@ -113,7 +110,7 @@ ifneq ($(PLATFORM),linux)
sun/nio/fs/LinuxWatchService.java
endif
ifneq ($(PLATFORM),macosx)
ifneq ($(OPENJDK_TARGET_OS),macosx)
EXFILES+=sun/nio/fs/BsdFileStore.java \
sun/nio/fs/BsdFileSystem.java \
sun/nio/fs/BsdFileSystemProvider.java \
@ -137,11 +134,11 @@ ifdef OPENJDK
endif
# Used on windows and macosx
ifeq (,$(filter $(PLATFORM), windows macosx))
ifeq (,$(filter $(OPENJDK_TARGET_OS), windows macosx))
EXFILES+=sun/awt/AWTCharset.java
endif
ifneq ($(PLATFORM), macosx)
ifneq ($(OPENJDK_TARGET_OS), macosx)
#
# Not in rt.jar on solaris and linux...(windows not checked)
# in rt.jar on macosx ??
@ -192,7 +189,7 @@ endif
# Exclude another implicitly not included file.
EXFILES+=sun/util/locale/AsciiUtil.java
ifeq (,$(filter $(PLATFORM), solaris macosx))
ifeq (,$(filter $(OPENJDK_TARGET_OS), solaris macosx))
#
# only solaris and macosx
#
@ -205,7 +202,7 @@ EXFILES+=-linux-arm.java \
-linux-ppc.java
# TODO: Is this necessary?
ifeq ($(PLATFORM), windows)
ifeq ($(OPENJDK_TARGET_OS), windows)
EXFILES+=sun/nio/ch/AbstractPollSelectorImpl.java \
sun/nio/ch/DevPollArrayWrapper.java \
sun/nio/ch/DevPollSelectorImpl.java \
@ -248,18 +245,24 @@ include CopyIntoClasses.gmk
ifndef OPENJDK
CLOSED_SRC_DIRS:=$(JDK_TOPDIR)/src/closed/share/classes \
$(JDK_TOPDIR)/src/closed/$(LEGACY_HOST_OS_API)/classes
$(JDK_TOPDIR)/src/closed/$(LEGACY_OPENJDK_TARGET_OS_API)/classes
endif
MACOSX_SRC_DIRS :=
ifeq ($(PLATFORM),macosx)
ifeq ($(OPENJDK_TARGET_OS),macosx)
MACOSX_SRC_DIRS += $(JDK_TOPDIR)/src/macosx/classes
# this files are duplicated in MACOSX_SRC_DIRS
EXFILES+= $(JDK_TOPDIR)/src/solaris/classes/sun/nio/ch/DefaultSelectorProvider.java \
$(JDK_TOPDIR)/src/solaris/classes/sun/java2d/BackBufferCapsProvider.java \
$(JDK_TOPDIR)/src/solaris/classes/java/net/DefaultInterface.java \
$(JDK_TOPDIR)/src/solaris/classes/java/lang/ClassLoaderHelper.java
$(JDK_TOPDIR)/src/solaris/classes/java/lang/ClassLoaderHelper.java
# JObjC.jar contains 1.5 byte-code...so skip it here :-(
# MACOSX_SRC_DIRS += $(JDK_TOPDIR)/src/macosx/native/jobjc/src
# EXCLUDES+= tests/java/com/apple/jobjc
EXCLUDES+= com/apple/jobjc
endif
# The exception handling of swing beaninfo
@ -272,7 +275,7 @@ $(JDK_OUTPUTDIR)/classes/javax/swing/beaninfo/images/%.gif: $(JDK_TOPDIR)/make/t
$(eval $(call SetupJavaCompilation,BUILD_JDK,\
SETUP:=GENERATE_JDKBYTECODE,\
SRC:=$(JDK_TOPDIR)/src/share/classes \
$(JDK_TOPDIR)/src/$(LEGACY_HOST_OS_API)/classes \
$(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/classes \
$(MACOSX_SRC_DIRS) \
$(JDK_OUTPUTDIR)/gensrc \
$(JDK_OUTPUTDIR)/gensrc_swing/javax/swing/beaninfo \
@ -297,7 +300,7 @@ JDK_BASE_HEADER_CLASSES:=java.lang.Integer \
JDK_BASE_HEADER_JAVA_FILES:=$(patsubst %,$(JDK_TOPDIR)/src/share/classes/%.java,\
$(subst .,/,$(JDK_BASE_HEADER_CLASSES)))
ifeq ($(PLATFORM),windows)
ifeq ($(OPENJDK_TARGET_OS),windows)
JDK_BASE_HEADER_CLASSES_WINDOWS:=sun.nio.ch.PollArrayWrapper
JDK_BASE_HEADER_CLASSES+=$(JDK_BASE_HEADER_CLASSES_WINDOWS)
JDK_BASE_HEADER_JAVA_FILES+=$(patsubst %,$(JDK_TOPDIR)/src/windows/classes/%.java,\
@ -348,6 +351,53 @@ $(JDK_OUTPUTDIR)/classes/META-INF/services/com.sun.tools.xjc.Plugin:
##########################################################################################
ifeq ($(OPENJDK_TARGET_OS),macosx)
#
# JObjC.jar is compiled with BOOT_JAVAC which (may) not support the "-h" flag.
# so we first compile classes with BOOT_JAVAC and then with JDK_JAVAC :-(
#
$(eval $(call SetupJavaCompiler,GENERATE_15BYTECODE,\
JAVAC:=$(JAVAC),\
FLAGS:=-source 1.5 -target 1.5 -g -bootclasspath $(BOOT_RTJAR) -cp $(JDK_OUTPUTDIR)/../langtools/dist/lib/classes.jar $(DISABLE_WARNINGS),\
SERVER_DIR:=$(JAVAC_SERVERS),\
SERVER_JVM:=$(SERVER_JAVA),\
MODE:=$(JAVAC_USE_MODE),\
USE_DEPS:=$(JAVAC_USE_DEPS)))
$(eval $(call SetupJavaCompilation,BUILD_JOBJC_JAR,\
SETUP:=GENERATE_15BYTECODE,\
SRC:=$(JDK_TOPDIR)/src/macosx/native/jobjc/src/core/java \
$(JDK_TOPDIR)/src/macosx/native/jobjc/src/runtime-additions/java \
$(JDK_OUTPUTDIR)/gensrc, \
INCLUDES := com/apple/jobjc,\
EXCLUDES := tests/java/com/apple/jobjc,\
BIN:=$(JDK_OUTPUTDIR)/jobjc_classes,\
JAR:=$(JDK_OUTPUTDIR)/lib/JObjC.jar, \
JARINDEX := true))
$(BUILD_JOBJC_JAR) : $(BUILD_JDK)
JARS += $(JDK_OUTPUTDIR)/lib/JObjC.jar
$(eval $(call SetupJavaCompilation,BUILD_JOBJC_HEADERS_JAR,\
SETUP:=GENERATE_JDKBYTECODE,\
SRC:=$(JDK_TOPDIR)/src/macosx/native/jobjc/src/core/java \
$(JDK_TOPDIR)/src/macosx/native/jobjc/src/runtime-additions/java \
$(JDK_OUTPUTDIR)/gensrc, \
INCLUDES := com/apple/jobjc,\
EXCLUDES := tests/java/com/apple/jobjc,\
BIN:=$(JDK_OUTPUTDIR)/jobjc_classes_headers,\
JAR:=$(JDK_OUTPUTDIR)/jobjc_classes_headers/dummy.jar, \
HEADERS:=$(JDK_OUTPUTDIR)/gensrc_headers))
$(BUILD_JOBJC_HEADERS_JAR) : $(BUILD_JDK)
JARS += $(JDK_OUTPUTDIR)/jobjc_classes_headers/dummy.jar
endif
##########################################################################################
# copy with -a to preserve timestamps so dependencies down the line aren't messed up
all: $(BUILD_JDK) $(JARS) $(COPY_EXTRA) $(JDK_OUTPUTDIR)/classes/META-INF/services/com.sun.tools.xjc.Plugin \
$(JDK_OUTPUTDIR)/classes/_the.jdk.base.headers

View File

@ -32,17 +32,25 @@ include NativeCompilation.gmk
# Setup the java compilers for the JDK build.
include Setup.gmk
# Build tools
include Tools.gmk
BUILD_LAUNCHERS=
define SetupLauncher
# TODO: Fix mapfile on solaris. Won't work with ld as linker.
# Parameter 1 is the name of the launcher (java,javac,jar...)
# Parameter 2 are extra CFLAGS
# Parameter 3 are extra LDFLAGS
# Parameter 4 are extra LDFLAGS_SUFFIX_posix
# Parameter 5 are extra LDFLAGS_SUFFIX_winapi
# Parameter 2 is extra CFLAGS
# Parameter 3 is extra LDFLAGS
# Parameter 4 is extra LDFLAGS_SUFFIX_posix
# Parameter 5 is extra LDFLAGS_SUFFIX_winapi
# Parameter 6 is optional Windows JLI library (full path)
# Parameter 7 is optional Windows resource (RC) flags
# Parameter 8 is optional Windows version resource file (.rc)
# Parameter 9 is different output dir
# Parameter 10 is FULL DEBUG SYMBOLS (set value to turn OFF, since most(all) seems to have it)
$1_WINDOWS_JLI_LIB:=$(JDK_OUTPUTDIR)/objs/jli.lib
$1_WINDOWS_JLI_LIB:=$(JDK_OUTPUTDIR)/objs/libjli/jli.lib
ifneq ($6,)
$1_WINDOWS_JLI_LIB:=$6
endif
@ -51,33 +59,73 @@ define SetupLauncher
$1_VERSION_INFO_RESOURCE:=$8
endif
$1_LDFLAGS := $3
ifeq ($(OPENJDK_TARGET_OS), macosx)
$1_LDFLAGS += -F/System/Library/Frameworks/JavaVM.framework/Frameworks \
-F/System/Library/Frameworks/ApplicationServices.framework/Frameworks
endif
$1_LDFLAGS_SUFFIX :=
ifeq ($(USE_EXTERNAL_LIBZ), true)
$1_LDFLAGS_SUFFIX += -lz
endif
ifeq ($(OPENJDK_TARGET_OS), macosx)
$1_LDFLAGS_SUFFIX += -Wl,-all_load $(JDK_OUTPUTDIR)/objs/libjli_static.a \
-framework Cocoa -framework Security -framework ApplicationServices \
-sectcreate __TEXT __info_plist $(JDK_TOPDIR)/src/macosx/lib/Info-cmdline.plist
endif
$1_OUTPUT_DIR_ARG:=$9
ifeq (,$$($1_OUTPUT_DIR_ARG))
$1_OUTPUT_DIR_ARG:=$(JDK_OUTPUTDIR)/bin
endif
$1_DEBUG_SYMBOLS:=yes
ifneq (,$(10))
$1_DEBUG_SYMBOLS:=
endif
$1_OPTIMIZATION:= LOW
# TODO: maybe it's better to move this if-statement out of this function
ifeq ($(1),java)
$1_OPTIMIZATION:=HIGH
endif
$(call SetupNativeCompilation,BUILD_LAUNCHER_$1,\
SRC:=$(JDK_TOPDIR)/src/share/bin,\
INCLUDE_FILES:=main.c,\
LANG:=C,\
CFLAGS:=$(CFLAGS_JDKEXE) $(C_O_FLAG_NORM) \
OPTIMIZATION :=$$($1_OPTIMIZATION), \
CFLAGS:=$(CFLAGS_JDKEXE) \
-I$(JDK_TOPDIR)/src/share/bin \
-I$(JDK_TOPDIR)/src/$(LEGACY_HOST_OS_API)/bin \
-I$(JDK_TOPDIR)/src/$(PLATFORM)/bin \
-I$(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/bin \
-I$(JDK_TOPDIR)/src/$(OPENJDK_TARGET_OS)/bin \
-DFULL_VERSION='"$(FULL_VERSION)"' \
-DJDK_MAJOR_VERSION='"$(JDK_MAJOR_VERSION)"' \
-DJDK_MINOR_VERSION='"$(JDK_MINOR_VERSION)"' \
-DLIBARCHNAME='"$(ARCH)"' \
-DLAUNCHER_NAME='"openjdk"' \
-DLAUNCHER_NAME='"java"' \
-DPROGNAME='"$1"' $(DPACKAGEPATH) \
$2,\
CFLAGS_linux:=-fPIC,\
CFLAGS_solaris:=-KPIC -DHAVE_GETHRTIME,\
LDFLAGS:=$(LDFLAGS_JDKEXE) \
$(call SET_SHARED_LIBRARY_ORIGIN,../lib/$(LIBARCH)/jli) \
$(call SET_SHARED_LIBRARY_ORIGIN,../jre/lib/$(LIBARCH)/jli) \
$3,\
$$($1_LDFLAGS),\
MAPFILE := $(JDK_TOPDIR)/makefiles/mapfiles/launchers/mapfile-$(ARCH), \
LDFLAGS_SUFFIX:=$(LDFLAGS_JDKEXE_SUFFIX),\
LDFLAGS_SUFFIX:=$(LDFLAGS_JDKEXE_SUFFIX) $$($1_LDFLAGS_SUFFIX),\
LDFLAGS_SUFFIX_posix:=$4 -lc,\
LDFLAGS_SUFFIX_winapi:=$$($1_WINDOWS_JLI_LIB) \
$(JDK_OUTPUTDIR)/objs/java.lib advapi32.lib $5,\
BIN:=$(JDK_OUTPUTDIR)/objs/$1_objs,\
EXE:=$(JDK_OUTPUTDIR)/objs/$1$(EXE_SUFFIX),\
$(JDK_OUTPUTDIR)/objs/libjava/java.lib advapi32.lib $5,\
LDFLAGS_SUFFIX_solaris := -lthread $(LIBDL), \
OBJECT_DIR:=$(JDK_OUTPUTDIR)/objs/$1_objs,\
OUTPUT_DIR:=$$($1_OUTPUT_DIR_ARG),\
PROGRAM:=$1,\
DEBUG_SYMBOLS:=$$($1_DEBUG_SYMBOLS),\
VERSIONINFO_RESOURCE:=$$($1_VERSION_INFO_RESOURCE),\
RC_FLAGS:=$(RC_FLAGS)\
/D "JDK_FNAME=$1$(EXE_SUFFIX)" \
@ -86,13 +134,22 @@ define SetupLauncher
$7,\
MANIFEST:=$(JDK_TOPDIR)/src/windows/resource/java.manifest)
BUILD_LAUNCHERS += $(JDK_OUTPUTDIR)/bin/$1$(EXE_SUFFIX)
BUILD_LAUNCHERS += $$(BUILD_LAUNCHER_$1)
ifeq ($(OPENJDK_TARGET_OS),macosx)
$$(BUILD_LAUNCHER_$1) : $(JDK_OUTPUTDIR)/objs/libjli_static.a
endif
ifeq ($(OPENJDK_TARGET_OS),windows)
$$(BUILD_LAUNCHER_$1) : $(JDK_OUTPUTDIR)/objs/libjava/java.lib \
$$($1_WINDOWS_JLI_LIB)
endif
endef
##########################################################################################
XLIBS:=-lX11
ifeq ($(PLATFORM),macosx)
XLIBS:=$(X_LIBS) -lX11
ifeq ($(OPENJDK_TARGET_OS),macosx)
DPACKAGEPATH:=-DPACKAGE_PATH='"$(PACKAGE_PATH)"'
XLIBS:=
endif
@ -108,17 +165,17 @@ $(eval $(call SetupLauncher,java,\
$(JDK_OUTPUTDIR)/objs/jli_static.lib,$(JAVA_RC_FLAGS),\
$(JDK_TOPDIR)/src/windows/resource/java.rc))
ifeq ($(HOST_OS),windows)
ifeq ($(OPENJDK_TARGET_OS),windows)
$(eval $(call SetupLauncher,javaw,\
-DEXPAND_CLASSPATH_WILDCARDS,,,user32.lib comctl32.lib,\
$(JDK_OUTPUTDIR)/objs/jli_static.lib,$(JAVA_RC_FLAGS),\
$(JDK_TOPDIR)/src/windows/resource/java.rc))
endif
ifeq ($(PLATFORM),solaris)
ifeq ($(OPENJDK_TARGET_OS),solaris)
THREAD_LIB:=-lthread
endif
ifeq ($(PLATFORM),linux)
ifeq ($(OPENJDK_TARGET_OS),linux)
THREAD_LIB:=-lpthread
endif
@ -271,7 +328,7 @@ $(eval $(call SetupLauncher,rmiregistry,\
$(eval $(call SetupLauncher,jcmd,\
-DJAVA_ARGS='{ "-J-ms8m"$(COMMA) "sun.tools.jcmd.JCmd"$(COMMA) }'))
ifeq ($(PLATFORM),windows)
ifeq ($(OPENJDK_TARGET_OS),windows)
$(eval $(call SetupLauncher,kinit,\
-DJAVA_ARGS='{ "-J-ms8m"$(COMMA) "sun.security.krb5.internal.tools.Kinit"$(COMMA) }'))
@ -286,8 +343,10 @@ endif
# The order of the object files on the link command line affects the size of the resulting
# binary (at least on linux) which causes the size to differ between old and new build.
ifeq ($(USE_EXTERNAL_LIBZ), true)
UNPACKEXE_CFLAGS := -DSYSTEM_ZLIB
UNPACKEXE_ZIPOBJS := -lz
else
UNPACKEXE_CFLAGS := -I$(JDK_TOPDIR)/src/share/native/java/util/zip/zlib-1.2.5
UNPACKEXE_ZIPOBJS := $(JDK_OUTPUTDIR)/objs/libzip/zcrc32$(OBJ_SUFFIX) \
$(JDK_OUTPUTDIR)/objs/libzip/deflate$(OBJ_SUFFIX) \
$(JDK_OUTPUTDIR)/objs/libzip/trees$(OBJ_SUFFIX) \
@ -299,27 +358,31 @@ UNPACKEXE_ZIPOBJS := $(JDK_OUTPUTDIR)/objs/libzip/zcrc32$(OBJ_SUFFIX) \
$(JDK_OUTPUTDIR)/objs/libzip/inftrees$(OBJ_SUFFIX) \
$(JDK_OUTPUTDIR)/objs/libzip/inffast$(OBJ_SUFFIX)
endif
$(JDK_OUTPUTDIR)/bin/unpack200$(EXE_SUFFIX): $(UNPACKEXE_ZIPOBJS)
ifeq ($(OPENJDK_TARGET_CPU_ARCH), sparc)
UNPACKEXE_CFLAGS += -xregs=no%appl
endif
$(eval $(call SetupNativeCompilation,BUILD_UNPACKEXE,\
SRC:=$(JDK_TOPDIR)/src/share/native/com/sun/java/util/jar/pack,\
EXCLUDE_FILES:=jni.cpp,\
LANG:=C,\
CFLAGS:=$(CXXFLAGS_JDKEXE) $(CXX_O_FLAG_NORM) \
-DFULL \
-I$(JDK_TOPDIR)/src/share/native/java/util/zip/zlib-1.2.5,\
OPTIMIZATION := LOW, \
CFLAGS:=$(UNPACKEXE_CFLAGS) $(CXXFLAGS_JDKEXE)\
-DFULL, \
CFLAGS_release:=-DPRODUCT,\
CFLAGS_linux:=-fPIC,\
CFLAGS_solaris := -KPIC, \
CFLAGS_macosx := -fPIC, \
MAPFILE:=$(JDK_TOPDIR)/makefiles/mapfiles/libunpack/mapfile-vers-unpack200, \
LDFLAGS:=$(LDFLAGS_JDKEXE) \
$(call SET_SHARED_LIBRARY_ORIGIN), \
LDFLAGS_SUFFIX:=$(UNPACKEXE_ZIPOBJS) $(LIBCXX),\
LDFLAGS_SUFFIX_solaris:=-lc,\
BIN:=$(JDK_OUTPUTDIR)/objs/unpackexe,\
EXE:=$(JDK_OUTPUTDIR)/objs/unpack200$(EXE_SUFFIX),\
OBJECT_DIR:=$(JDK_OUTPUTDIR)/objs/unpackexe,\
OUTPUT_DIR:=$(JDK_OUTPUTDIR)/bin,\
PROGRAM:=unpack200,\
VERSIONINFO_RESOURCE:=$(JDK_TOPDIR)/src/windows/resource/version.rc,\
RC_FLAGS:=$(RC_FLAGS)\
/D "JDK_FNAME=unpack200.exe" \
@ -327,7 +390,13 @@ $(eval $(call SetupNativeCompilation,BUILD_UNPACKEXE,\
/D "JDK_FTYPE=0x1L",\
MANIFEST:=$(JDK_TOPDIR)/src/windows/resource/unpack200_proto.exe.manifest))
BUILD_LAUNCHERS += $(JDK_OUTPUTDIR)/bin/unpack200$(EXE_SUFFIX)
ifneq ($(USE_EXTERNAL_LIBZ), true)
$(BUILD_UNPACKEXE) : $(UNPACKEXE_ZIPOBJS)
endif
BUILD_LAUNCHERS += $(BUILD_UNPACKEXE)
##########################################################################################
@ -335,7 +404,7 @@ BUILD_LAUNCHERS += $(JDK_OUTPUTDIR)/bin/unpack200$(EXE_SUFFIX)
BUILD_JEXEC :=
BUILD_JEXEC_SRC :=
BUILD_JEXEC_INC :=
BUILD_JEXEC_DST := $(JDK_OUTPUTDIR)/lib/$(LIBARCH)/jexec$(EXE_SUFFIX)
BUILD_JEXEC_DST_DIR := $(JDK_OUTPUTDIR)/lib/$(LIBARCH)
#
# UNHANDLED:
@ -345,30 +414,30 @@ BUILD_JEXEC_DST := $(JDK_OUTPUTDIR)/lib/$(LIBARCH)/jexec$(EXE_SUFFIX)
#
# jdk/make/java/Makefile
#
ifeq ($(PLATFORM), solaris)
ifeq ($(OPENJDK_TARGET_OS), solaris)
ifeq ($(ARCH_DATA_MODEL), 32)
BUILD_JEXEC := 1
endif
endif
ifeq ($(PLATFORM), linux)
ifeq ($(OPENJDK_TARGET_OS), linux)
BUILD_JEXEC := 1
endif # PLATFORM
endif # OPENJDK_TARGET_OS
#
# jdk/make/java/jexec/Makefile
#
ifeq ($(BUILD_JEXEC), 1)
ifeq ($(PLATFORM),windows)
else ifeq ($(PLATFORM),macosx)
ifeq ($(OPENJDK_TARGET_OS),windows)
else ifeq ($(OPENJDK_TARGET_OS),macosx)
BUILD_JEXEC_SRC := $(JDK_TOPDIR)/src/macosx/bin
else
BUILD_JEXEC_SRC := $(JDK_TOPDIR)/src/solaris/bin
endif
ifeq ($(PLATFORM), linux)
BUILD_JEXEC_DST := $(JDK_OUTPUTDIR)/lib/jexec$(EXE_SUFFIX)
ifeq ($(OPENJDK_TARGET_OS), linux)
BUILD_JEXEC_DST_DIR := $(JDK_OUTPUTDIR)/lib
BUILD_JEXEC_INC += -I$(JDK_TOPDIR)/src/share/bin
endif
endif
@ -382,13 +451,15 @@ ifneq ($(BUILD_JEXEC_SRC),)
SRC:=$(BUILD_JEXEC_SRC),\
INCLUDE_FILES:=jexec.c,\
LANG:=C,\
CFLAGS:=$(CFLAGS_JDKEXE) $(C_O_FLAG_NORM) \
OPTIMIZATION := LOW, \
CFLAGS:=$(CFLAGS_JDKEXE)\
$(BUILD_JEXEC_INC), \
LDFLAGS:=$(LDFLAGS_JDKEXE), \
BIN:=$(JDK_OUTPUTDIR)/objs/jexec_obj,\
EXE:=$(BUILD_JEXEC_DST)))
OBJECT_DIR:=$(JDK_OUTPUTDIR)/objs/jexec_obj,\
OUTPUT_DIR:=$(BUILD_JEXEC_DST_DIR),\
PROGRAM:=jexec))
BUILD_LAUNCHERS += $(BUILD_JEXEC_DST)
BUILD_LAUNCHERS += $(BUILD_JEXEC)
endif
##########################################################################################
@ -397,10 +468,10 @@ endif
# The java-rmi.cgi script in bin/ only gets delivered in certain situations
#
JAVA_RMI_CGI:=$(JDK_OUTPUTDIR)/bin/java-rmi.cgi
ifeq ($(PLATFORM), linux)
ifeq ($(OPENJDK_TARGET_OS), linux)
BUILD_LAUNCHERS += $(JAVA_RMI_CGI)
endif
ifeq ($(PLATFORM), solaris)
ifeq ($(OPENJDK_TARGET_OS), solaris)
ifeq ($(ARCH_DATA_MODEL), 32)
BUILD_LAUNCHERS += $(JAVA_RMI_CGI)
endif
@ -413,12 +484,13 @@ endif
# images bin dir. This weird behavior is mimicked here in the converted makefiles for
# now. Should probably just be deleted.
# http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6512052
ifeq ($(HOST_OS_API),winapi)
ifeq ($(OPENJDK_TARGET_OS_API),winapi)
$(eval $(call SetupLauncher,java-rmi,\
-DEXPAND_CLASSPATH_WILDCARDS,\
$(call SET_SHARED_LIBRARY_MAPFILE,$(JDK_TOPDIR)/makefiles/java/main/java/mapfile-$(ARCH))))
$(call SET_SHARED_LIBRARY_MAPFILE,$(JDK_TOPDIR)/makefiles/java/main/java/mapfile-$(ARCH)),\
,,,,,$(JDK_OUTPUTDIR)/objs))
$(JAVA_RMI_CGI): $(JDK_OUTPUTDIR)/objs/java-rmi$(EXE_SUFFIX)
$(JAVA_RMI_CGI): $(BUILD_LAUNCHER_java-rmi)
$(MKDIR) -p $(@D)
$(CP) $< $@
@ -432,11 +504,6 @@ endif
##########################################################################################
$(JDK_OUTPUTDIR)/bin/% : $(JDK_OUTPUTDIR)/objs/%
$(ECHO) Copying $(@F)
$(MKDIR) -p $(@D)
$(CP) $< $@
$(BUILD_LAUNCHERS) : $(JDK_TOPDIR)/makefiles/CompileLaunchers.gmk
all: $(BUILD_LAUNCHERS)

File diff suppressed because it is too large Load Diff

View File

@ -25,12 +25,12 @@
INCLUDEDIR = $(JDK_OUTPUTDIR)/include
PLATFORM_INCLUDE = $(INCLUDEDIR)/$(PLATFORM)
OPENJDK_TARGET_OS_INCLUDE = $(INCLUDEDIR)/$(OPENJDK_TARGET_OS)
ifeq ($(PLATFORM), windows)
PLATFORM_INCLUDE = $(INCLUDEDIR)/win32
else ifeq ($(PLATFORM), macosx)
PLATFORM_INCLUDE = $(INCLUDEDIR)/darwin
ifeq ($(OPENJDK_TARGET_OS), windows)
OPENJDK_TARGET_OS_INCLUDE = $(INCLUDEDIR)/win32
else ifeq ($(OPENJDK_TARGET_OS), macosx)
OPENJDK_TARGET_OS_INCLUDE = $(INCLUDEDIR)/darwin
endif
#
@ -42,15 +42,15 @@ H_TARGET_FILES =$(INCLUDEDIR)/jdwpTransport.h \
$(INCLUDEDIR)/jvmticmlr.h \
$(INCLUDEDIR)/classfile_constants.h \
$(INCLUDEDIR)/jawt.h \
$(PLATFORM_INCLUDE)/jni_md.h \
$(PLATFORM_INCLUDE)/jawt_md.h
$(OPENJDK_TARGET_OS_INCLUDE)/jni_md.h \
$(OPENJDK_TARGET_OS_INCLUDE)/jawt_md.h
$(INCLUDEDIR)/%.h: $(JDK_TOPDIR)/src/share/javavm/export/%.h
$(MKDIR) -p $(@D)
$(RM) -f $@
$(CP) $< $@
$(PLATFORM_INCLUDE)/%.h: $(JDK_TOPDIR)/src/$(LEGACY_HOST_OS_API)/javavm/export/%.h
$(OPENJDK_TARGET_OS_INCLUDE)/%.h: $(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/javavm/export/%.h
$(MKDIR) -p $(@D)
$(RM) -f $@
$(CP) $< $@
@ -83,6 +83,13 @@ $(MGMT_LIBDIR)/management.properties: $(MGMT_LIB_SRC)/management.properties
$(CP) $< $@
$(CHMOD) 644 $@
# this file has different permissions...don't know why...
$(MGMT_LIBDIR)/jmxremote.access: $(MGMT_LIB_SRC)/jmxremote.access
$(MKDIR) -p $(@D)
$(RM) -f $@
$(CP) $< $@
$(CHMOD) 644 $@
$(MGMT_LIBDIR)/%: $(MGMT_LIB_SRC)/%
$(MKDIR) -p $(@D)
$(RM) -f $@
@ -121,9 +128,13 @@ COPY_FILES += $(PSFONTPROPFILE_TARGET_FILES)
#
# Copy flavormap.properties, cursor.properties and cursors gif files to LIBDIR
#
PLATFORM_LIB_SRC = $(JDK_TOPDIR)/src/$(LEGACY_HOST_OS_API)/lib
ifneq ($(OPENJDK_TARGET_OS), macosx)
OPENJDK_TARGET_OS_LIB_SRC = $(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/lib
else
OPENJDK_TARGET_OS_LIB_SRC = $(JDK_TOPDIR)/src/macosx/lib
endif
$(LIBDIR)/flavormap.properties: $(PLATFORM_LIB_SRC)/flavormap.properties
$(LIBDIR)/flavormap.properties: $(OPENJDK_TARGET_OS_LIB_SRC)/flavormap.properties
$(MKDIR) -p $(@D)
$(RM) -f $@
$(CP) $< $@
@ -131,9 +142,9 @@ $(LIBDIR)/flavormap.properties: $(PLATFORM_LIB_SRC)/flavormap.properties
COPY_FILES += $(LIBDIR)/flavormap.properties
CURSORS_DEST_DIR = $(LIBDIR)/images/cursors
CURSORS_PLATFORM_LIB_SRC = $(PLATFORM_LIB_SRC)/images/cursors
CURSORS_OPENJDK_TARGET_OS_LIB_SRC = $(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/lib/images/cursors
$(CURSORS_DEST_DIR)/cursors.properties: $(CURSORS_PLATFORM_LIB_SRC)/cursors.properties
$(CURSORS_DEST_DIR)/cursors.properties: $(CURSORS_OPENJDK_TARGET_OS_LIB_SRC)/cursors.properties
$(MKDIR) -p $(@D)
$(RM) -f $@
$(CP) $< $@
@ -141,11 +152,11 @@ $(CURSORS_DEST_DIR)/cursors.properties: $(CURSORS_PLATFORM_LIB_SRC)/cursors.prop
COPY_FILES += $(CURSORS_DEST_DIR)/cursors.properties
CURSORS_LIB_SRC = $(JDK_TOPDIR)/src/share/lib/images/cursors
ifeq ($(PLATFORM), windows)
ifeq ($(OPENJDK_TARGET_OS), windows)
CURSORS_SRC_FILES = $(CURSORS_LIB_SRC)/invalid32x32.gif $(wildcard $(CURSORS_LIB_SRC)/win32_*.gif)
else # PLATFORM
else # OPENJDK_TARGET_OS
CURSORS_SRC_FILES = $(CURSORS_LIB_SRC)/invalid32x32.gif $(wildcard $(CURSORS_LIB_SRC)/motif_*.gif)
endif # PLATFORM
endif # OPENJDK_TARGET_OS
CURSORS_TARGET_FILES = $(subst $(CURSORS_LIB_SRC),$(CURSORS_DEST_DIR),$(CURSORS_SRC_FILES))
$(CURSORS_DEST_DIR)/%: $(CURSORS_LIB_SRC)/%
@ -157,7 +168,7 @@ COPY_FILES += $(CURSORS_TARGET_FILES)
##########################################################################################
CONTENT_TYPES_SRC=$(JDK_TOPDIR)/src/$(LEGACY_HOST_OS_API)/lib
CONTENT_TYPES_SRC=$(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/lib
$(LIBDIR)/content-types.properties: $(CONTENT_TYPES_SRC)/content-types.properties
$(MKDIR) -p $(@D)
@ -179,9 +190,9 @@ COPY_FILES += $(LIBDIR)/calendars.properties
##########################################################################################
ifeq ($(PLATFORM),windows)
ifeq ($(OPENJDK_TARGET_OS),windows)
TZMAPPINGS_SRC := $(JDK_TOPDIR)/src/$(LEGACY_HOST_OS_API)/lib
TZMAPPINGS_SRC := $(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/lib
$(LIBDIR)/tzmappings: $(TZMAPPINGS_SRC)/tzmappings
$(MKDIR) -p $(@D)
@ -233,7 +244,7 @@ COPY_FILES += $(ICCPROFILE_TARGET_FILES)
#TODO: rework this to avoid hardcoding library name in the makefile
#
ifdef OPENJDK
ifeq ($(PLATFORM), windows)
ifeq ($(OPENJDK_TARGET_OS), windows)
FREETYPE_LIB = $(JDK_OUTPUTDIR)/bin/$(call SHARED_LIBRARY,freetype)
else
ifeq ($(USING_SYSTEM_FT_LIB), false)
@ -243,7 +254,7 @@ ifdef OPENJDK
$(FREETYPE_LIB): $(FREETYPE2_LIB_PATH)/$(call SHARED_LIBRARY,freetype)
$(CP) $(FREETYPE2_LIB_PATH)/$(call SHARED_LIBRARY,freetype) $@
ifeq ($(BUILD_OS), windows)
ifeq ($(OPENJDK_BUILD_OS), windows)
$(CHMOD) +rx $@
endif
@ -254,7 +265,7 @@ endif
# Copy msvcr100.dll on windows
ifeq ($(PLATFORM),windows)
ifeq ($(OPENJDK_TARGET_OS),windows)
MSVCRNN_TARGET := $(JDK_OUTPUTDIR)/bin/$(notdir $(MSVCRNN_DLL))
$(MSVCRNN_TARGET): $(MSVCRNN_DLL)
$(MKDIR) -p $(@D)
@ -286,14 +297,14 @@ else
JVMCFG_ARCH := $(ARCH)
endif
ifeq ($(PLATFORM),macosx)
ifeq ($(OPENJDK_TARGET_OS),macosx)
ifeq ($(JVMCFG_ARCH),amd64)
JVMCFG_ARCH := x86_64
endif
JVMCFG_SRC := $(JDK_TOPDIR)/src/macosx/bin/$(JVMCFG_ARCH)/jvm.cfg
JVMCFG_DIR := $(JDK_OUTPUTDIR)/lib
else
JVMCFG_SRC := $(JDK_TOPDIR)/src/$(LEGACY_HOST_OS_API)/bin/$(JVMCFG_ARCH)/jvm.cfg
JVMCFG_SRC := $(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/bin/$(JVMCFG_ARCH)/jvm.cfg
JVMCFG_DIR := $(JDK_OUTPUTDIR)/lib/$(LIBARCH)
endif
@ -353,15 +364,15 @@ COPY_FILES += $(JVMCFG)
PROPS_SRC := $(JDK_TOPDIR)/src/share/lib/security/java.security
PROPS_DST := $(JDK_OUTPUTDIR)/lib/security/java.security
ifeq ($(PLATFORM), solaris)
ifeq ($(OPENJDK_TARGET_OS), solaris)
PROPS_SRC := $(JDK_TOPDIR)/src/share/lib/security/java.security-solaris
endif
ifeq ($(PLATFORM), windows)
ifeq ($(OPENJDK_TARGET_OS), windows)
PROPS_SRC := $(JDK_TOPDIR)/src/share/lib/security/java.security-windows
endif
ifeq ($(PLATFORM), macosx)
ifeq ($(OPENJDK_TARGET_OS), macosx)
PROPS_SRC := $(JDK_TOPDIR)/src/share/lib/security/java.security-macosx
endif
@ -453,7 +464,7 @@ $(SHARED_FONTS_DST_DIR)/fonts.dir : $(JDK_TOPDIR)/src/solaris/classes/sun/awt/mo
COPY_FILES += $(SHARED_FONTS_DST) $(SHARED_FONTS_DST_DIR)/fonts.dir
ifeq ($(PLATFORM), linux)
ifeq ($(OPENJDK_TARGET_OS), linux)
# The oblique fonts are only needed/wanted on Linux.
@ -532,11 +543,13 @@ $(JDK_OUTPUTDIR)/lib/$(LIBARCH)/libxinerama.so: $(JDK_TOPDIR)/src/closed/solaris
$(MKDIR) -p $(@D)
$(RM) $@
$(CP) $< $@
$(CHMOD) 755 $@
$(JDK_OUTPUTDIR)/lib/$(LIBARCH)/libjdgaSUNW%.so: $(JDK_TOPDIR)/src/closed/solaris/lib/$(ARCH)/libjdgaSUNW%.so
$(MKDIR) -p $(@D)
$(RM) $@
$(CP) $< $@
$(CHMOD) 755 $@
$(JDK_OUTPUTDIR)/lib/$(LIBARCH)/libjdgaSUNWafb.so: $(JDK_OUTPUTDIR)/lib/$(LIBARCH)/libjdgaSUNWffb.so
$(MKDIR) -p $(@D)
@ -549,7 +562,7 @@ endif
##########################################################################################
ifeq ($(PLATFORM), solaris)
ifeq ($(OPENJDK_TARGET_OS), solaris)
SUNPKCS11_CFG_SRC := $(JDK_TOPDIR)/src/share/lib/security/sunpkcs11-solaris.cfg
SUNPKCS11_CFG_DST := $(JDK_OUTPUTDIR)/lib/security/sunpkcs11-solaris.cfg
@ -566,7 +579,7 @@ endif
##########################################################################################
ifndef OPENJDK
ifeq ($(PLATFORM), solaris)
ifeq ($(OPENJDK_TARGET_OS), solaris)
UCRYPTO_CFG_SRC := $(JDK_TOPDIR)/src/closed/share/lib/security/ucrypto-solaris.cfg
UCRYPTO_CFG_DST := $(JDK_OUTPUTDIR)/lib/security/ucrypto-solaris.cfg

View File

@ -133,7 +133,7 @@ COPY_FILES += \
$(wildcard $(SWING_PLAF_METAL_RESOURCES_DIR)/icons/ocean/*.png) \
$(wildcard $(SWING_PLAF_METAL_RESOURCES_DIR)/sounds/*.wav)
ifneq ($(PLATFORM), windows)
ifneq ($(OPENJDK_TARGET_OS), windows)
# Only copy GTK resources on Solaris/Linux
SWING_PLAF_GTK_RESOURCES_DIR = $(JDK_TOPDIR)/src/share/classes/com/sun/java/swing/plaf/gtk
COPY_FILES += \
@ -174,11 +174,11 @@ COPY_FILES += \
$(shell $(MKDIR) -p $(JDK_OUTPUTDIR)/classes/META-INF/services)
# Find all META-INF/services/* files
ALL_META-INF_DIRS_share:=$(shell $(FIND) $(JDK_TOPDIR)/src/share/classes -type d -a -name META-INF)
ALL_META-INF_DIRS_hostapi:=$(shell $(FIND) $(JDK_TOPDIR)/src/$(LEGACY_HOST_OS_API)/classes -type d -a -name META-INF)
ALL_META-INF_DIRS_targetapi:=$(shell $(FIND) $(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/classes -type d -a -name META-INF)
# Platform specific overrides shared
ifneq ($(ALL_META-INF_DIRS_hostapi),)
ALL_META-INF_DIRS:=$(ALL_META-INF_DIRS_hostapi) \
$(filter-out %$(patsubst $(JDK_TOPDIR)/src/$(LEGACY_HOST_OS_API)/classes%,%,$(ALL_META-INF_DIRS_hostapi)),\
ifneq ($(ALL_META-INF_DIRS_targetapi),)
ALL_META-INF_DIRS:=$(ALL_META-INF_DIRS_targetapi) \
$(filter-out %$(patsubst $(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/classes%,%,$(ALL_META-INF_DIRS_targetapi)),\
$(ALL_META-INF_DIRS_share))
else
ALL_META-INF_DIRS:=$(ALL_META-INF_DIRS_share)
@ -189,7 +189,7 @@ ifdef OPENJDK
endif
ifndef OPENJDK
ifneq ($(PLATFORM), macosx)
ifneq ($(OPENJDK_TARGET_OS), macosx)
ALL_META-INF_DIRS += $(JDK_TOPDIR)/src/closed/share/classes/sun/jdbc/odbc/META-INF
endif
endif
@ -216,9 +216,9 @@ OUT_SERVICES_FILES:=$(addprefix $(JDK_OUTPUTDIR)/classes/META-INF/services/,\
$(shell $(PRINTF) "$(SRC_SERVICES_FILES)\n" | $(SED) -e 's|/[^ ]*/META-INF/services/||g'))
OUT_SERVICES_FILES_COLON:=$(addsuffix :,$(OUT_SERVICES_FILES))
# Exception handling for print services with no META-INF directory
SRC_SERVICES_FILES_PRINT = $(wildcard $(JDK_TOPDIR)/src/$(LEGACY_HOST_OS_API)/classes/sun/print/services/*)
SRC_SERVICES_FILES_PRINT = $(wildcard $(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/classes/sun/print/services/*)
OUT_SERVICES_FILES_PRINT = $(addprefix $(JDK_OUTPUTDIR)/classes/META-INF/services/,\
$(patsubst $(JDK_TOPDIR)/src/$(LEGACY_HOST_OS_API)/classes/sun/print/services/%,%,\
$(patsubst $(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/classes/sun/print/services/%,%,\
$(SRC_SERVICES_FILES_PRINT)))
OUT_SERVICES_FILES_PRINT_COLON = $(addsuffix :,$(OUT_SERVICES_FILES_PRINT))
RULES_SERVICES_PRINT = $(join $(OUT_SERVICES_FILES_PRINT_COLON),$(SRC_SERVICES_FILES_PRINT))
@ -229,7 +229,7 @@ META-INF_RULES_SERVICES:=$(RULES_SERVICES_PRINT) $(join $(OUT_SERVICES_FILES_COL
define addto_meta-inf_services
$1
echo Installing META-INF/services/$$(@F)
$(CAT) $$< | $(SED) -e "s/^#\[$(PLATFORM)\]//" > $$@
$(CAT) $$< | $(SED) -e "s/^#\[$(OPENJDK_TARGET_OS)\]//" > $$@
endef
$(foreach i,$(META-INF_RULES_SERVICES),$(eval $(call addto_meta-inf_services,$i)))
# Here is the generic rule, whose receipt the above rules will trigger.
@ -261,13 +261,13 @@ JAVAX_SOUND_SRC_FILES := \
COPY_EXTRA += $(foreach F,$(notdir $(JAVAX_SOUND_SRC_FILES)),$(JDK_OUTPUTDIR)/classes/META-INF/services/${F})
ifeq ($(PLATFORM)-$(ARCH),windows-ia64)
ifeq ($(OPENJDK_TARGET_OS)-$(ARCH),windows-ia64)
JAVAX_SOUND_SRC_FILES += windows-ia64/javax.sound.sampled.spi.MixerProvider
COPY_EXTRA += $(JDK_OUTPUTDIR)/classes/META-INF/services/javax.sound.sampled.spi.MixerProvider
else ifeq ($(PLATFORM),windows)
else ifeq ($(OPENJDK_TARGET_OS),windows)
JAVAX_SOUND_SRC_FILES += windows-i586/javax.sound.sampled.spi.MixerProvider
COPY_EXTRA += $(JDK_OUTPUTDIR)/classes/META-INF/services/javax.sound.sampled.spi.MixerProvider
else ifeq ($(PLATFORM)-$(ARCH),linux-i586)
else ifeq ($(OPENJDK_TARGET_OS)-$(ARCH),linux-i586)
JAVAX_SOUND_SRC_FILES += linux-i586/javax.sound.sampled.spi.MixerProvider
COPY_EXTRA += $(JDK_OUTPUTDIR)/classes/META-INF/services/javax.sound.sampled.spi.MixerProvider
else

View File

@ -46,7 +46,7 @@ ifndef OPENJDK
SAMPLE_TARGET += $(SAMPLE_CLOSED_TARGET)
endif
ifneq (, $(filter $(PLATFORM), solaris macosx))
ifneq (, $(filter $(OPENJDK_TARGET_OS), solaris macosx))
SAMPLE_SOLARIS_SOURCE := $(shell $(FIND) $(SAMPLE_SOLARIS_SOURCE_DIR) -type f -print)
SAMPLE_SOLARIS_TARGET := $(subst $(SAMPLE_SOLARIS_SOURCE_DIR),$(SAMPLE_TARGET_DIR),$(SAMPLE_SOLARIS_SOURCE))
SAMPLE_TARGET += $(SAMPLE_SOLARIS_TARGET)
@ -72,4 +72,3 @@ COPY_FILES += $(SAMPLE_TARGET)
all: $(COPY_FILES)
.PHONY: all

View File

@ -32,6 +32,10 @@ default: all
include Tools.gmk
#
# This makefile...so that altering will trigger rebuilding include/exclude-lists => jars
#
MAKEFILE=$(JDK_TOPDIR)/makefiles/CreateJars.gmk
MAINMANIFEST := $(JDK_TOPDIR)/make/tools/manifest.mf
BEANMANIFEST := $(JDK_TOPDIR)/make/javax/swing/beaninfo/manifest
@ -46,7 +50,7 @@ JCONSOLE_JAR_DEPS := \
$(eval $(call SetupArchive,BUILD_JCONSOLE_JAR,$(JCONSOLE_JAR_DEPS),\
SRCS:=$(JDK_OUTPUTDIR)/classes,\
SUFFIXES:=.class .gif .png,\
SUFFIXES:=.class .gif .png .properties,\
INCLUDES:=sun/tools/jconsole com/sun/tools/jconsole,\
JARMAIN:=sun.tools.jconsole.JConsole,\
JAR:=$(JDK_OUTPUTDIR)/lib/jconsole.jar,\
@ -242,12 +246,35 @@ RT_JAR_EXCLUDES := \
sun/swing/BeanInfoUtils.class \
$(LOCALEDATA_INCLUDES)
ifndef OPENJDK
ifndef JAVASE_EMBEDDED
# These files should never be put into rt.jar
# but due to a misstake...some are put there if embedded
#
ifneq ($(JAVASE_EMBEDDED), true)
# normal (correct) case
RT_JAR_EXCLUDES += \
com/oracle/jrockit/jfr \
oracle/jrockit/jfr
else
# embedded (broken) case
RT_JAR_EXCLUDES += \
oracle/jrockit/jfr/parser \
oracle/jrockit/jfr/tools \
oracle/jrockit/jfr/NativeOptions.class \
oracle/jrockit/jfr/RepositoryChunkHandler.class
endif
ifeq ($(OPENJDK_TARGET_OS), macosx)
RT_JAR_EXCLUDES += com/sun/nio/sctp \
sun/nio/ch/sctp \
sun/jdbc \
sun/nio/ch/DevPollArrayWrapper\$$$$Updator.class \
sun/nio/ch/DevPollArrayWrapper.class \
sun/nio/ch/DevPollSelectorImpl.class \
sun/nio/ch/DevPollSelectorProvider.class \
sun/nio/ch/EPollArrayWrapper\$$$$Updator.class \
sun/nio/ch/EPollArrayWrapper.class \
sun/nio/ch/EPollSelectorImpl.class \
sun/nio/ch/EPollSelectorProvider.class
endif
# Find all files in the classes dir to use as dependencies. This could be more fine granular.
@ -271,12 +298,19 @@ $(RESOURCE_JAR_MANIFEST_FILE): $(MAINMANIFEST)
-e "s#@@COMPANY_NAME@@#$(COMPANY_NAME)#" \
$(MAINMANIFEST) >> $@
$(JDK_OUTPUTDIR)/lib/_the.jars.exclude:
$(JDK_OUTPUTDIR)/lib/_the.jars.exclude: $(MAKEFILE)
$(MKDIR) -p $(@D)
$(call ListPathsSafely,RT_JAR_EXCLUDES,\n, >> $@)
$(JDK_OUTPUTDIR)/lib/classlist : $(JDK_TOPDIR)/make/tools/sharing/classlist.$(OPENJDK_TARGET_OS) \
$(MAKEFILE)
$(MKDIR) -p $(@D)
$(RM) -f $@.temp
$(TOOL_ADDJSUM) $< $@.temp
$(MV) $@.temp $@
$(JDK_OUTPUTDIR)/lib/_the.jars.contents: $(BUILD_TOOLS) $(JDK_OUTPUTDIR)/lib/_the.jars.exclude \
$(ALL_FILES_IN_CLASSES)
$(ALL_FILES_IN_CLASSES) $(JDK_OUTPUTDIR)/lib/classlist
$(MKDIR) -p $(@D)
$(RM) $@.temp
($(CD) $(JDK_OUTPUTDIR)/classes && \
@ -290,17 +324,22 @@ $(JDK_OUTPUTDIR)/lib/_the.rt.jar.contents: $(JDK_OUTPUTDIR)/lib/_the.jars.conten
$(JDK_OUTPUTDIR)/lib/_the.resources.jar.contents: $(JDK_OUTPUTDIR)/lib/_the.jars.contents
$(GREP) -v -e '\.class$$' -e '/_the\.*' -e '^_the\.*' $(JDK_OUTPUTDIR)/lib/_the.jars.contents > $@
RT_JAR_CREATE_OPTIONS := c0fm
ifeq ($(COMPRESS_JARS), true)
RT_JAR_CREATE_OPTIONS := cfm
endif
$(JDK_OUTPUTDIR)/lib/rt.jar: $(JDK_OUTPUTDIR)/lib/_the.rt.jar.contents $(RT_JAR_MANIFEST_FILE)
$(ECHO) Creating rt.jar
$(CD) $(JDK_OUTPUTDIR)/classes && \
$(JAR) cfm $@ $(RT_JAR_MANIFEST_FILE) \
$(JAR) $(RT_JAR_CREATE_OPTIONS) $@ $(RT_JAR_MANIFEST_FILE) \
@$(JDK_OUTPUTDIR)/lib/_the.rt.jar.contents
$(JDK_OUTPUTDIR)/lib/resources.jar: $(JDK_OUTPUTDIR)/lib/_the.resources.jar.contents \
$(RESOURCE_JAR_MANIFEST_FILE)
$(ECHO) Creating resources.jar
$(CD) $(JDK_OUTPUTDIR)/classes && \
$(JAR) cfm $@ $(RESOURCE_JAR_MANIFEST_FILE) \
$(JAR) $(RT_JAR_CREATE_OPTIONS) $@ $(RESOURCE_JAR_MANIFEST_FILE) \
@$(JDK_OUTPUTDIR)/lib/_the.resources.jar.contents
JARS+=$(JDK_OUTPUTDIR)/lib/rt.jar $(JDK_OUTPUTDIR)/lib/resources.jar
@ -309,7 +348,7 @@ JARS+=$(JDK_OUTPUTDIR)/lib/rt.jar $(JDK_OUTPUTDIR)/lib/resources.jar
CHARSETS_JAR_DEPS :=
ifneq ($(HOST_OS), windows)
ifneq ($(OPENJDK_TARGET_OS), windows)
CHARSETS_EXTRA_FILES:=sun/awt/motif/X11GBK.class \
sun/awt/motif/X11GB2312\$$$$Decoder.class \
sun/awt/motif/X11GB2312.class \
@ -328,20 +367,22 @@ $(eval $(call SetupArchive,BUILD_CHARSETS_JAR,$(CHARSETS_JAR_DEPS),\
$(CHARSETS_EXTRA_FILES) \
META-INF/services/java.nio.charset.spi.CharsetProvider, \
JAR:=$(JDK_OUTPUTDIR)/lib/charsets.jar, \
SKIP_METAINF := true))
SKIP_METAINF := true, \
CHECK_COMPRESS_JAR:=true))
JARS+=$(JDK_OUTPUTDIR)/lib/charsets.jar
##########################################################################################
ifndef OPENJDK
ifeq ($(ENABLE_JFR), true)
$(eval $(call SetupArchive,BUILD_JFR_JAR,,\
SRCS:=$(JDK_OUTPUTDIR)/classes,\
INCLUDES:=com/oracle/jrockit/jfr \
oracle/jrockit/jfr,\
JAR:=$(JDK_OUTPUTDIR)/lib/jfr.jar,\
SKIP_METAINF:=true,\
MANIFEST:=$(MAINMANIFEST)))
MANIFEST:=$(MAINMANIFEST), \
CHECK_COMPRESS_JAR:=true))
JARS+=$(JDK_OUTPUTDIR)/lib/jfr.jar
endif
@ -356,13 +397,14 @@ $(eval $(call SetupArchive,BUILD_JSSE_JAR,,\
com/sun/net/ssl/internal/ssl,\
JAR:=$(JDK_OUTPUTDIR)/lib/jsse.jar,\
SKIP_METAINF:=true,\
MANIFEST:=$(MAINMANIFEST)))
MANIFEST:=$(MAINMANIFEST), \
CHECK_COMPRESS_JAR:=true))
JARS+=$(JDK_OUTPUTDIR)/lib/jsse.jar
##########################################################################################
ifneq ($(PLATFORM)-$(ARCH_DATA_MODEL),windows-64)
ifneq ($(OPENJDK_TARGET_OS)-$(ARCH_DATA_MODEL),windows-64)
SUNPKCS11_JAR_DST := $(JDK_OUTPUTDIR)/lib/ext/sunpkcs11.jar
ifndef OPENJDK
@ -544,7 +586,7 @@ endif
##########################################################################################
ifeq ($(PLATFORM),windows)
ifeq ($(OPENJDK_TARGET_OS),windows)
SUNMSCAPI_JAR_DST := $(JDK_OUTPUTDIR)/lib/ext/sunmscapi.jar
@ -574,7 +616,7 @@ endif
##########################################################################################
ifeq ($(PLATFORM),solaris)
ifeq ($(OPENJDK_TARGET_OS),solaris)
ifndef OPENJDK
UCRYPTO_JAR_DST := $(JDK_OUTPUTDIR)/lib/ext/ucrypto.jar
@ -661,7 +703,8 @@ $(eval $(call SetupArchive,BUILD_TOOLS_JAR,$(TOOLS_JAR_DEPS),\
META-INF/services/com.sun.tools.internal.ws.wscompile.Plugin \
META-INF/services/com.sun.tools.internal.xjc.Plugin,\
JAR:=$(JDK_OUTPUTDIR)/lib/tools.jar,\
SKIP_METAINF:=true))
SKIP_METAINF:=true, \
CHECK_COMPRESS_JAR:=true))
JARS+=$(JDK_OUTPUTDIR)/lib/tools.jar
@ -696,6 +739,7 @@ EXPORTED_PRIVATE_PKGS = com.sun.servicetag \
com.oracle.nio
$(IMAGES_OUTPUTDIR)/symbols/_the.symbols: $(JDK_OUTPUTDIR)/lib/rt.jar
$(RM) -rf $(IMAGES_OUTPUTDIR)/symbols/META-INF/sym
$(MKDIR) -p $(IMAGES_OUTPUTDIR)/symbols/META-INF/sym
$(JAVA) \
-Xbootclasspath/a:$(JDK_OUTPUTDIR)/classes \
@ -711,7 +755,8 @@ MAKE_SURE_DIR_EXISTS_DUMMY := $(shell $(MKDIR) -p $(IMAGES_OUTPUTDIR)/symbols)
$(eval $(call SetupArchive,BUILD_CT_SYM,$(IMAGES_OUTPUTDIR)/symbols/_the.symbols,\
SRCS:=$(IMAGES_OUTPUTDIR)/symbols,\
INCLUDES:=META-INF/sym,\
JAR:=$(JDK_OUTPUTDIR)/lib/ct.sym))
JAR:=$(JDK_OUTPUTDIR)/lib/ct.sym, \
CHECK_COMPRESS_JAR:=true))
JARS+=$(JDK_OUTPUTDIR)/lib/ct.sym
@ -765,7 +810,7 @@ SRC_ZIP_INCLUDES = \
org/xml/sax \
sunw
SRC_ZIP_SRCS = $(JDK_TOPDIR)/src/share/classes $(JDK_TOPDIR)/src/$(LEGACY_HOST_OS_API)/classes
SRC_ZIP_SRCS = $(JDK_TOPDIR)/src/share/classes $(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/classes
SRC_ZIP_SRCS += $(JDK_OUTPUTDIR)/gensrc
SRC_ZIP_SRCS += $(JDK_OUTPUTDIR)/impsrc
SRC_ZIP_SRCS += $(JDK_OUTPUTDIR)/gendocsrc_rmic
@ -776,16 +821,16 @@ endif
# Need to copy launcher src files into desired directory structure
# before zipping the sources.
LAUNCHER_SRC_FILES := $(wildcard $(JDK_TOPDIR)/src/share/bin/*) \
$(wildcard $(JDK_TOPDIR)/src/$(LEGACY_HOST_OS_API)/bin/java_md*)
$(wildcard $(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/bin/java_md*)
LAUNCHER_ZIP_SRC := $(patsubst $(JDK_TOPDIR)/src/share/bin/%,$(IMAGES_OUTPUTDIR)/src/launcher/%,\
$(patsubst $(JDK_TOPDIR)/src/$(LEGACY_HOST_OS_API)/bin/%,$(IMAGES_OUTPUTDIR)/src/launcher/%,\
$(patsubst $(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/bin/%,$(IMAGES_OUTPUTDIR)/src/launcher/%,\
$(LAUNCHER_SRC_FILES)))
$(IMAGES_OUTPUTDIR)/src/launcher/%: $(JDK_TOPDIR)/src/share/bin/%
$(MKDIR) -p $(@D)
$(CP) $< $@
$(IMAGES_OUTPUTDIR)/src/launcher/%: $(JDK_TOPDIR)/src/$(LEGACY_HOST_OS_API)/bin/%
$(IMAGES_OUTPUTDIR)/src/launcher/%: $(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/bin/%
$(MKDIR) -p $(@D)
$(CP) $< $@

View File

@ -35,10 +35,10 @@
#
TEXT_SRCDIR = $(JDK_TOPDIR)/src/share/classes
TEXT_PKG = sun/text/resources
TEXT_SOURCES = %$(TEXT_PKG)/BreakIteratorRules.java \
%$(TEXT_PKG)/BreakIteratorInfo.java \
%$(TEXT_PKG)/BreakIteratorRules_th.java \
%$(TEXT_PKG)/BreakIteratorInfo_th.java
TEXT_SOURCES = $(TEXT_PKG)/BreakIteratorRules.java \
$(TEXT_PKG)/BreakIteratorInfo.java \
$(TEXT_PKG)/BreakIteratorRules_th.java \
$(TEXT_PKG)/BreakIteratorInfo_th.java
# Generate BreakIteratorData
BREAK_ITERATOR_DIR = $(JDK_OUTPUTDIR)/break_iterator

View File

@ -25,13 +25,13 @@
GENDATA_FONT_CONFIG_DST := $(JDK_OUTPUTDIR)/lib
ifeq ($(PLATFORM), windows)
ifeq ($(OPENJDK_TARGET_OS), windows)
GENDATA_FONT_CONFIG_SRC_DIR := $(JDK_TOPDIR)/src/windows/classes/sun/awt/windows
GENDATA_FONT_CONFIG_SRC_FILES := fontconfig.properties
GENDATA_FONT_CONFIG_SRC_PREFIX :=
endif
ifeq ($(PLATFORM), linux)
ifeq ($(OPENJDK_TARGET_OS), linux)
GENDATA_FONT_CONFIG_SRC_PREFIX := linux.
ifdef OPENJDK
GENDATA_FONT_CONFIG_SRC_DIR := $(JDK_TOPDIR)/src/solaris/classes/sun/awt/fontconfigs
@ -52,27 +52,29 @@ GENDATA_FONT_CONFIG_SRC_FILES := \
endif
endif
ifeq ($(PLATFORM), solaris)
ifeq ($(OPENJDK_TARGET_OS), solaris)
GENDATA_FONT_CONFIG_SRC_DIR := $(JDK_TOPDIR)/src/solaris/classes/sun/awt/fontconfigs
GENDATA_FONT_CONFIG_SRC_FILES := fontconfig.properties
GENDATA_FONT_CONFIG_SRC_PREFIX := solaris.
endif
ifeq ($(PLATFORM), macosx)
ifeq ($(OPENJDK_TARGET_OS), macosx)
GENDATA_FONT_CONFIG_SRC_DIR := $(JDK_TOPDIR)/src/macosx/classes/sun/awt/fontconfigs
GENDATA_FONT_CONFIG_SRC_FILES := fontconfig.properties
GENDATA_FONT_CONFIG_SRC_PREFIX := macosx.
endif # PLATFORM
endif # OPENJDK_TARGET_OS
###
$(GENDATA_FONT_CONFIG_DST)/%.src : $(GENDATA_FONT_CONFIG_SRC_DIR)/$(GENDATA_FONT_CONFIG_SRC_PREFIX)%
$(MKDIR) -p $(@D)
$(CP) $< $@
$(CHMOD) 644 $@
$(GENDATA_FONT_CONFIG_DST)/%.bfc : $(GENDATA_FONT_CONFIG_SRC_DIR)/$(GENDATA_FONT_CONFIG_SRC_PREFIX)%.properties
$(MKDIR) -p $(@D)
$(TOOL_COMPILEFONTCONFIG) $< $@
$(CHMOD) 444 $@
###

View File

@ -32,5 +32,4 @@ $(HTML32DTD): $(BUILD_TOOLS)
$(RM) $@
($(TOOL_DTDBUILDER) html32 > $@) || exit 1
GENDATA_HTML32DTD += $(HTML32DTD)
GENDATA_HTML32DTD += $(HTML32DTD)

View File

@ -27,7 +27,13 @@ default: all
include $(SPEC)
include MakeBase.gmk
include RMICompile.gmk
include RMICompilation.gmk
# To ensure the latest stub generator files are picked up from corba repo
# when available, we need to run with latest rmic version available.
ifeq ($(CROSS_COMPILE_ARCH),)
RMIC := $(UNCYGDRIVE) $(JDK_OUTPUTDIR)/bin/rmic
endif
CLASSES_DIR := $(JDK_OUTPUTDIR)/classes
# NOTE: If the smart javac dependency management is reintroduced, these classes risk

View File

@ -69,6 +69,7 @@ $(GENDATA_CURDATA): $(JDK_TOPDIR)/src/share/classes/java/util/CurrencyData.prope
$(RM) $@
$(TOOL_GENERATECURRENCYDATA) -o $@.temp < $<
$(MV) $@.temp $@
$(CHMOD) 444 $@
GENDATA += $(GENDATA_CURDATA)

View File

@ -65,7 +65,7 @@ GENSRC += $(GENSRC_BUFFER)
include GensrcExceptions.gmk
GENSRC += $(GENSRC_EXCEPTIONS)
ifneq ($(HOST_OS),windows)
ifneq ($(OPENJDK_TARGET_OS),windows)
include GensrcIcons.gmk
GENSRC += $(GENSRC_ICONS)
@ -78,6 +78,11 @@ ifndef DISABLE_NIMBUS
GENSRC += $(GENSRC_SWING_NIMBUS)
endif
ifeq ($(OPENJDK_TARGET_OS), macosx)
include GensrcJObjC.gmk
GENSRC += $(GENSRC_JOBJC)
endif
$(GENSRC) : $(BUILD_TOOLS)
# The exception handling of swing beaninfo
@ -100,7 +105,10 @@ all: $(GENSRC) $(GENSRC_SWING_BEANINFO)
$(MKDIR) -p gensrc/javax/swing/plaf && \
$(CP) -rp gensrc_swing/javax/swing/plaf/* gensrc/javax/swing/plaf) \
fi
ifneq ($(HOST_OS),windows)
if [ -d $(JDK_OUTPUTDIR)/gensrc_jobjc ] ; then \
(cd $(JDK_OUTPUTDIR) && cp -rp gensrc_jobjc/src/* gensrc) \
fi
ifneq ($(OPENJDK_TARGET_OS),windows)
(cd $(JDK_OUTPUTDIR) && \
$(CP) -rp gensrc_icons/* gensrc && \
$(CP) -rp gensrc_x11wrappers/classes/* gensrc)

View File

@ -198,6 +198,7 @@ define SetupGenBuffer
$(if $(12),$1_$(strip $(12)))
$(if $(13),$1_$(strip $(13)))
$(if $(14),$1_$(strip $(14)))
$(if $(15),$(error Internal makefile error: Too many arguments to SetupGenBuffer, please update GensrcBuffer.gmk))
$(call fixRw,$1,$$($1_RW))
$(call typesAndBits,$1,$$($1_type),$$($1_BO))

View File

@ -29,7 +29,7 @@ GENSRC_ICONS_TMP := $(JDK_OUTPUTDIR)/gensrc_icons
GENSRC_ICONS_DST := $(GENSRC_ICONS_TMP)/sun/awt/X11
ifdef OPENJDK
ICONS_PATH_PREFIX := $(JDK_TOPDIR)/src/$(LEGACY_HOST_OS_API)
ICONS_PATH_PREFIX := $(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)
else
ICONS_PATH_PREFIX := $(JDK_TOPDIR)/src/closed/solaris
endif
@ -41,7 +41,7 @@ GENSRC_ICONS_SRC += \
$(ICONS_PATH_PREFIX)/classes/sun/awt/X11/java-icon48.png
ICONPATH := $(JDK_TOPDIR)/src/$(LEGACY_HOST_OS_API)/classes/sun/awt/X11
ICONPATH := $(JDK_TOPDIR)/src/$(LEGACY_OPENJDK_TARGET_OS_API)/classes/sun/awt/X11
GENSRC_ICONS_SRC += \
$(ICONPATH)/security-icon-bw16.png \
@ -86,7 +86,7 @@ $$($1_TARGET32) : $2/$1 $(GENSRC_ICONS_TMP)/_the.dir
$(ECHO) "public class $$($1_NAME32) {" >> $$@.tmp
$(ECHO) "public static int[] $$($1_SHORTNAME) = { " >> $$@.tmp
# TODO FIX FIX FIX
ifneq ($(PLATFORM),macosx)
ifneq ($(OPENJDK_TARGET_OS),macosx)
$(CAT) $$< | $(TOOL_TOBIN) >> $$@.tmp
endif
$(ECHO) "}; }" >> $$@.tmp
@ -100,7 +100,7 @@ $$($1_TARGET64) : $2/$1 $(GENSRC_ICONS_TMP)/_the.dir
$(ECHO) "public class $$($1_NAME64) {" >> $$@.tmp
$(ECHO) "public static long[] $$($1_SHORTNAME) = { " >> $$@.tmp
# TODO FIX FIX FIX
ifneq ($(PLATFORM),macosx)
ifneq ($(OPENJDK_TARGET_OS),macosx)
$(CAT) $$< | $(TOOL_TOBIN) >> $$@.tmp
endif
$(ECHO) "}; }" >> $$@.tmp

Some files were not shown because too many files have changed in this diff Show More