Merge
This commit is contained in:
commit
47403da7be
5
.hgtags
5
.hgtags
@ -166,3 +166,8 @@ c029c972396cea042a0dc67c0f7ccf2fe68007d4 jdk8-b41
|
||||
5c5a64ec0839df5affe9394b99ff338c363acbca jdk8-b42
|
||||
69d8a827cdf9236be9694a46d75c710d71dac7d7 jdk8-b43
|
||||
7e981cb0ad6a194f1fa859f9ad47586db461f269 jdk8-b44
|
||||
9b19b2302c28f4da6d4078f66234abecfed5688a jdk8-b45
|
||||
600c9a1feb01633cbcf2341a43d1d21e6497ecd0 jdk8-b46
|
||||
b820143a6f1ce993c6e6f31db4d64de990f42654 jdk8-b47
|
||||
086271e35b0a419b38e8bda9bebd70693811df0a jdk8-b48
|
||||
cecd7026f30cbd83b0601925a7a5e059aec98138 jdk8-b49
|
||||
|
@ -166,3 +166,8 @@ a2b2d435f1d275fa8010774c653197c64e326d3a jdk8-b40
|
||||
1ce5dc16416611c58b7480ca67a2eee5153498a6 jdk8-b42
|
||||
661c9aae602bbd9766d12590800c90f1edd1d8dd jdk8-b43
|
||||
e4f81a817447c3a4f6868f083c81c2fb1b15d44c jdk8-b44
|
||||
633f2378c904c92bb922a6e19e9f62fe8eac14af jdk8-b45
|
||||
27fa766a2298ba8347dc198f0cf85ba6618e17db jdk8-b46
|
||||
1dcb4b7b9373e64e135c12fe1f8699f1f80e51e8 jdk8-b47
|
||||
3f6c72d1c2a6e5c9e7d81c3dc984886678a128ad jdk8-b48
|
||||
c97b99424815c43818e3cc3ffcdd1a60f3198b52 jdk8-b49
|
||||
|
@ -3383,3 +3383,397 @@ included with JRE 7, JDK 7, and OpenJDK 7, except where noted:
|
||||
|
||||
-------------------------------------------------------------------------------
|
||||
|
||||
%% This notice is provided with respect to Mozilla Network Security
|
||||
Services (NSS), which is supplied with the JDK test suite in the OpenJDK
|
||||
source code repository. It is licensed under Mozilla Public License (MPL),
|
||||
version 2.0.
|
||||
|
||||
The NSS libraries are supplied in executable form, built from unmodified
|
||||
NSS source code labeled with the "NSS_3.13.1_RTM" release tag.
|
||||
|
||||
The NSS source code is available in the OpenJDK source code repository at:
|
||||
jdk/test/sun/security/pkcs11/nss/src
|
||||
|
||||
The NSS libraries are available in the OpenJDK source code repository at:
|
||||
jdk/test/sun/security/pkcs11/nss/lib
|
||||
|
||||
--- begin of LICENSE ---
|
||||
|
||||
Mozilla Public License Version 2.0
|
||||
==================================
|
||||
|
||||
1. Definitions
|
||||
--------------
|
||||
|
||||
1.1. "Contributor"
|
||||
means each individual or legal entity that creates, contributes to
|
||||
the creation of, or owns Covered Software.
|
||||
|
||||
1.2. "Contributor Version"
|
||||
means the combination of the Contributions of others (if any) used
|
||||
by a Contributor and that particular Contributor's Contribution.
|
||||
|
||||
1.3. "Contribution"
|
||||
means Covered Software of a particular Contributor.
|
||||
|
||||
1.4. "Covered Software"
|
||||
means Source Code Form to which the initial Contributor has attached
|
||||
the notice in Exhibit A, the Executable Form of such Source Code
|
||||
Form, and Modifications of such Source Code Form, in each case
|
||||
including portions thereof.
|
||||
|
||||
1.5. "Incompatible With Secondary Licenses"
|
||||
means
|
||||
|
||||
(a) that the initial Contributor has attached the notice described
|
||||
in Exhibit B to the Covered Software; or
|
||||
|
||||
(b) that the Covered Software was made available under the terms of
|
||||
version 1.1 or earlier of the License, but not also under the
|
||||
terms of a Secondary License.
|
||||
|
||||
1.6. "Executable Form"
|
||||
means any form of the work other than Source Code Form.
|
||||
|
||||
1.7. "Larger Work"
|
||||
means a work that combines Covered Software with other material, in
|
||||
a separate file or files, that is not Covered Software.
|
||||
|
||||
1.8. "License"
|
||||
means this document.
|
||||
|
||||
1.9. "Licensable"
|
||||
means having the right to grant, to the maximum extent possible,
|
||||
whether at the time of the initial grant or subsequently, any and
|
||||
all of the rights conveyed by this License.
|
||||
|
||||
1.10. "Modifications"
|
||||
means any of the following:
|
||||
|
||||
(a) any file in Source Code Form that results from an addition to,
|
||||
deletion from, or modification of the contents of Covered
|
||||
Software; or
|
||||
|
||||
(b) any new file in Source Code Form that contains any Covered
|
||||
Software.
|
||||
|
||||
1.11. "Patent Claims" of a Contributor
|
||||
means any patent claim(s), including without limitation, method,
|
||||
process, and apparatus claims, in any patent Licensable by such
|
||||
Contributor that would be infringed, but for the grant of the
|
||||
License, by the making, using, selling, offering for sale, having
|
||||
made, import, or transfer of either its Contributions or its
|
||||
Contributor Version.
|
||||
|
||||
1.12. "Secondary License"
|
||||
means either the GNU General Public License, Version 2.0, the GNU
|
||||
Lesser General Public License, Version 2.1, the GNU Affero General
|
||||
Public License, Version 3.0, or any later versions of those
|
||||
licenses.
|
||||
|
||||
1.13. "Source Code Form"
|
||||
means the form of the work preferred for making modifications.
|
||||
|
||||
1.14. "You" (or "Your")
|
||||
means an individual or a legal entity exercising rights under this
|
||||
License. For legal entities, "You" includes any entity that
|
||||
controls, is controlled by, or is under common control with You. For
|
||||
purposes of this definition, "control" means (a) the power, direct
|
||||
or indirect, to cause the direction or management of such entity,
|
||||
whether by contract or otherwise, or (b) ownership of more than
|
||||
fifty percent (50%) of the outstanding shares or beneficial
|
||||
ownership of such entity.
|
||||
|
||||
2. License Grants and Conditions
|
||||
--------------------------------
|
||||
|
||||
2.1. Grants
|
||||
|
||||
Each Contributor hereby grants You a world-wide, royalty-free,
|
||||
non-exclusive license:
|
||||
|
||||
(a) under intellectual property rights (other than patent or trademark)
|
||||
Licensable by such Contributor to use, reproduce, make available,
|
||||
modify, display, perform, distribute, and otherwise exploit its
|
||||
Contributions, either on an unmodified basis, with Modifications, or
|
||||
as part of a Larger Work; and
|
||||
|
||||
(b) under Patent Claims of such Contributor to make, use, sell, offer
|
||||
for sale, have made, import, and otherwise transfer either its
|
||||
Contributions or its Contributor Version.
|
||||
|
||||
2.2. Effective Date
|
||||
|
||||
The licenses granted in Section 2.1 with respect to any Contribution
|
||||
become effective for each Contribution on the date the Contributor first
|
||||
distributes such Contribution.
|
||||
|
||||
2.3. Limitations on Grant Scope
|
||||
|
||||
The licenses granted in this Section 2 are the only rights granted under
|
||||
this License. No additional rights or licenses will be implied from the
|
||||
distribution or licensing of Covered Software under this License.
|
||||
Notwithstanding Section 2.1(b) above, no patent license is granted by a
|
||||
Contributor:
|
||||
|
||||
(a) for any code that a Contributor has removed from Covered Software;
|
||||
or
|
||||
|
||||
(b) for infringements caused by: (i) Your and any other third party's
|
||||
modifications of Covered Software, or (ii) the combination of its
|
||||
Contributions with other software (except as part of its Contributor
|
||||
Version); or
|
||||
|
||||
(c) under Patent Claims infringed by Covered Software in the absence of
|
||||
its Contributions.
|
||||
|
||||
This License does not grant any rights in the trademarks, service marks,
|
||||
or logos of any Contributor (except as may be necessary to comply with
|
||||
the notice requirements in Section 3.4).
|
||||
|
||||
2.4. Subsequent Licenses
|
||||
|
||||
No Contributor makes additional grants as a result of Your choice to
|
||||
distribute the Covered Software under a subsequent version of this
|
||||
License (see Section 10.2) or under the terms of a Secondary License (if
|
||||
permitted under the terms of Section 3.3).
|
||||
|
||||
2.5. Representation
|
||||
|
||||
Each Contributor represents that the Contributor believes its
|
||||
Contributions are its original creation(s) or it has sufficient rights
|
||||
to grant the rights to its Contributions conveyed by this License.
|
||||
|
||||
2.6. Fair Use
|
||||
|
||||
This License is not intended to limit any rights You have under
|
||||
applicable copyright doctrines of fair use, fair dealing, or other
|
||||
equivalents.
|
||||
|
||||
2.7. Conditions
|
||||
|
||||
Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted
|
||||
in Section 2.1.
|
||||
|
||||
3. Responsibilities
|
||||
-------------------
|
||||
|
||||
3.1. Distribution of Source Form
|
||||
|
||||
All distribution of Covered Software in Source Code Form, including any
|
||||
Modifications that You create or to which You contribute, must be under
|
||||
the terms of this License. You must inform recipients that the Source
|
||||
Code Form of the Covered Software is governed by the terms of this
|
||||
License, and how they can obtain a copy of this License. You may not
|
||||
attempt to alter or restrict the recipients' rights in the Source Code
|
||||
Form.
|
||||
|
||||
3.2. Distribution of Executable Form
|
||||
|
||||
If You distribute Covered Software in Executable Form then:
|
||||
|
||||
(a) such Covered Software must also be made available in Source Code
|
||||
Form, as described in Section 3.1, and You must inform recipients of
|
||||
the Executable Form how they can obtain a copy of such Source Code
|
||||
Form by reasonable means in a timely manner, at a charge no more
|
||||
than the cost of distribution to the recipient; and
|
||||
|
||||
(b) You may distribute such Executable Form under the terms of this
|
||||
License, or sublicense it under different terms, provided that the
|
||||
license for the Executable Form does not attempt to limit or alter
|
||||
the recipients' rights in the Source Code Form under this License.
|
||||
|
||||
3.3. Distribution of a Larger Work
|
||||
|
||||
You may create and distribute a Larger Work under terms of Your choice,
|
||||
provided that You also comply with the requirements of this License for
|
||||
the Covered Software. If the Larger Work is a combination of Covered
|
||||
Software with a work governed by one or more Secondary Licenses, and the
|
||||
Covered Software is not Incompatible With Secondary Licenses, this
|
||||
License permits You to additionally distribute such Covered Software
|
||||
under the terms of such Secondary License(s), so that the recipient of
|
||||
the Larger Work may, at their option, further distribute the Covered
|
||||
Software under the terms of either this License or such Secondary
|
||||
License(s).
|
||||
|
||||
3.4. Notices
|
||||
|
||||
You may not remove or alter the substance of any license notices
|
||||
(including copyright notices, patent notices, disclaimers of warranty,
|
||||
or limitations of liability) contained within the Source Code Form of
|
||||
the Covered Software, except that You may alter any license notices to
|
||||
the extent required to remedy known factual inaccuracies.
|
||||
|
||||
3.5. Application of Additional Terms
|
||||
|
||||
You may choose to offer, and to charge a fee for, warranty, support,
|
||||
indemnity or liability obligations to one or more recipients of Covered
|
||||
Software. However, You may do so only on Your own behalf, and not on
|
||||
behalf of any Contributor. You must make it absolutely clear that any
|
||||
such warranty, support, indemnity, or liability obligation is offered by
|
||||
You alone, and You hereby agree to indemnify every Contributor for any
|
||||
liability incurred by such Contributor as a result of warranty, support,
|
||||
indemnity or liability terms You offer. You may include additional
|
||||
disclaimers of warranty and limitations of liability specific to any
|
||||
jurisdiction.
|
||||
|
||||
4. Inability to Comply Due to Statute or Regulation
|
||||
---------------------------------------------------
|
||||
|
||||
If it is impossible for You to comply with any of the terms of this
|
||||
License with respect to some or all of the Covered Software due to
|
||||
statute, judicial order, or regulation then You must: (a) comply with
|
||||
the terms of this License to the maximum extent possible; and (b)
|
||||
describe the limitations and the code they affect. Such description must
|
||||
be placed in a text file included with all distributions of the Covered
|
||||
Software under this License. Except to the extent prohibited by statute
|
||||
or regulation, such description must be sufficiently detailed for a
|
||||
recipient of ordinary skill to be able to understand it.
|
||||
|
||||
5. Termination
|
||||
--------------
|
||||
|
||||
5.1. The rights granted under this License will terminate automatically
|
||||
if You fail to comply with any of its terms. However, if You become
|
||||
compliant, then the rights granted under this License from a particular
|
||||
Contributor are reinstated (a) provisionally, unless and until such
|
||||
Contributor explicitly and finally terminates Your grants, and (b) on an
|
||||
ongoing basis, if such Contributor fails to notify You of the
|
||||
non-compliance by some reasonable means prior to 60 days after You have
|
||||
come back into compliance. Moreover, Your grants from a particular
|
||||
Contributor are reinstated on an ongoing basis if such Contributor
|
||||
notifies You of the non-compliance by some reasonable means, this is the
|
||||
first time You have received notice of non-compliance with this License
|
||||
from such Contributor, and You become compliant prior to 30 days after
|
||||
Your receipt of the notice.
|
||||
|
||||
5.2. If You initiate litigation against any entity by asserting a patent
|
||||
infringement claim (excluding declaratory judgment actions,
|
||||
counter-claims, and cross-claims) alleging that a Contributor Version
|
||||
directly or indirectly infringes any patent, then the rights granted to
|
||||
You by any and all Contributors for the Covered Software under Section
|
||||
2.1 of this License shall terminate.
|
||||
|
||||
5.3. In the event of termination under Sections 5.1 or 5.2 above, all
|
||||
end user license agreements (excluding distributors and resellers) which
|
||||
have been validly granted by You or Your distributors under this License
|
||||
prior to termination shall survive termination.
|
||||
|
||||
************************************************************************
|
||||
* *
|
||||
* 6. Disclaimer of Warranty *
|
||||
* ------------------------- *
|
||||
* *
|
||||
* Covered Software is provided under this License on an "as is" *
|
||||
* basis, without warranty of any kind, either expressed, implied, or *
|
||||
* statutory, including, without limitation, warranties that the *
|
||||
* Covered Software is free of defects, merchantable, fit for a *
|
||||
* particular purpose or non-infringing. The entire risk as to the *
|
||||
* quality and performance of the Covered Software is with You. *
|
||||
* Should any Covered Software prove defective in any respect, You *
|
||||
* (not any Contributor) assume the cost of any necessary servicing, *
|
||||
* repair, or correction. This disclaimer of warranty constitutes an *
|
||||
* essential part of this License. No use of any Covered Software is *
|
||||
* authorized under this License except under this disclaimer. *
|
||||
* *
|
||||
************************************************************************
|
||||
|
||||
************************************************************************
|
||||
* *
|
||||
* 7. Limitation of Liability *
|
||||
* -------------------------- *
|
||||
* *
|
||||
* Under no circumstances and under no legal theory, whether tort *
|
||||
* (including negligence), contract, or otherwise, shall any *
|
||||
* Contributor, or anyone who distributes Covered Software as *
|
||||
* permitted above, be liable to You for any direct, indirect, *
|
||||
* special, incidental, or consequential damages of any character *
|
||||
* including, without limitation, damages for lost profits, loss of *
|
||||
* goodwill, work stoppage, computer failure or malfunction, or any *
|
||||
* and all other commercial damages or losses, even if such party *
|
||||
* shall have been informed of the possibility of such damages. This *
|
||||
* limitation of liability shall not apply to liability for death or *
|
||||
* personal injury resulting from such party's negligence to the *
|
||||
* extent applicable law prohibits such limitation. Some *
|
||||
* jurisdictions do not allow the exclusion or limitation of *
|
||||
* incidental or consequential damages, so this exclusion and *
|
||||
* limitation may not apply to You. *
|
||||
* *
|
||||
************************************************************************
|
||||
|
||||
8. Litigation
|
||||
-------------
|
||||
|
||||
Any litigation relating to this License may be brought only in the
|
||||
courts of a jurisdiction where the defendant maintains its principal
|
||||
place of business and such litigation shall be governed by laws of that
|
||||
jurisdiction, without reference to its conflict-of-law provisions.
|
||||
Nothing in this Section shall prevent a party's ability to bring
|
||||
cross-claims or counter-claims.
|
||||
|
||||
9. Miscellaneous
|
||||
----------------
|
||||
|
||||
This License represents the complete agreement concerning the subject
|
||||
matter hereof. If any provision of this License is held to be
|
||||
unenforceable, such provision shall be reformed only to the extent
|
||||
necessary to make it enforceable. Any law or regulation which provides
|
||||
that the language of a contract shall be construed against the drafter
|
||||
shall not be used to construe this License against a Contributor.
|
||||
|
||||
10. Versions of the License
|
||||
---------------------------
|
||||
|
||||
10.1. New Versions
|
||||
|
||||
Mozilla Foundation is the license steward. Except as provided in Section
|
||||
10.3, no one other than the license steward has the right to modify or
|
||||
publish new versions of this License. Each version will be given a
|
||||
distinguishing version number.
|
||||
|
||||
10.2. Effect of New Versions
|
||||
|
||||
You may distribute the Covered Software under the terms of the version
|
||||
of the License under which You originally received the Covered Software,
|
||||
or under the terms of any subsequent version published by the license
|
||||
steward.
|
||||
|
||||
10.3. Modified Versions
|
||||
|
||||
If you create software not governed by this License, and you want to
|
||||
create a new license for such software, you may create and use a
|
||||
modified version of this License if you rename the license and remove
|
||||
any references to the name of the license steward (except to note that
|
||||
such modified license differs from this License).
|
||||
|
||||
10.4. Distributing Source Code Form that is Incompatible With Secondary
|
||||
Licenses
|
||||
|
||||
If You choose to distribute Source Code Form that is Incompatible With
|
||||
Secondary Licenses under the terms of this version of the License, the
|
||||
notice described in Exhibit B of this License must be attached.
|
||||
|
||||
Exhibit A - Source Code Form License Notice
|
||||
-------------------------------------------
|
||||
|
||||
This Source Code Form is subject to the terms of the Mozilla Public
|
||||
License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||
|
||||
If it is not possible or desirable to put the notice in a particular
|
||||
file, then You may include the notice in a location (such as a LICENSE
|
||||
file in a relevant directory) where a recipient would be likely to look
|
||||
for such a notice.
|
||||
|
||||
You may add additional accurate notices of copyright ownership.
|
||||
|
||||
Exhibit B - "Incompatible With Secondary Licenses" Notice
|
||||
---------------------------------------------------------
|
||||
|
||||
This Source Code Form is "Incompatible With Secondary Licenses", as
|
||||
defined by the Mozilla Public License, v. 2.0.
|
||||
|
||||
--- end of LICENSE ---
|
||||
|
||||
-------------------------------------------------------------------------------
|
||||
|
||||
|
@ -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
485
common/autoconf/basics.m4
Normal 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
295
common/autoconf/boot-jdk.m4
Normal 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)
|
||||
])
|
1531
common/autoconf/build-aux/autoconf-config.guess
Normal file
1531
common/autoconf/build-aux/autoconf-config.guess
Normal file
File diff suppressed because it is too large
Load Diff
1553
common/autoconf/build-aux/config.guess
vendored
1553
common/autoconf/build-aux/config.guess
vendored
File diff suppressed because it is too large
Load Diff
378
common/autoconf/build-performance.m4
Normal file
378
common/autoconf/build-performance.m4
Normal 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)
|
||||
|
||||
])
|
@ -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
|
||||
|
@ -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
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
@ -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
|
||||
])
|
18054
common/autoconf/generated-configure.sh
Normal file
18054
common/autoconf/generated-configure.sh
Normal file
File diff suppressed because it is too large
Load Diff
@ -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
|
||||
])
|
||||
|
551
common/autoconf/jdk-options.m4
Normal file
551
common/autoconf/jdk-options.m4
Normal 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)
|
||||
])
|
642
common/autoconf/libraries.m4
Normal file
642
common/autoconf/libraries.m4
Normal 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)
|
||||
|
||||
])
|
@ -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?
|
||||
#
|
||||
#
|
||||
])
|
||||
|
280
common/autoconf/source-dirs.m4
Normal file
280
common/autoconf/source-dirs.m4
Normal 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)
|
||||
])
|
@ -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
527
common/autoconf/spec.sh.in
Normal 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@"
|
908
common/autoconf/toolchain.m4
Normal file
908
common/autoconf/toolchain.m4
Normal 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)
|
||||
])
|
235
common/bin/compare-objects.sh
Normal file
235
common/bin/compare-objects.sh
Normal 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
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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)
|
||||
|
@ -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
|
||||
|
||||
|
@ -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
|
||||
|
||||
|
||||
|
@ -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
|
||||
|
185
common/makefiles/MakeHelpers.gmk
Normal file
185
common/makefiles/MakeHelpers.gmk
Normal 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
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
@ -166,3 +166,8 @@ b8cbfb31139f820e5e094ba71449e58159fbe22e jdk8-b38
|
||||
79cc42c9c71bbd6630ede681642e98f5e4a841fa jdk8-b42
|
||||
cd879aff5d3cc1f58829aab3116880aa19525b78 jdk8-b43
|
||||
439d9bf8e4ff204cc89c9974c1515a508b2cc6ff jdk8-b44
|
||||
747dad9e9d37d244a5c765a1afe9194f7ddae118 jdk8-b45
|
||||
30141e598d72a6146126cb86b034ed6d0bd191b3 jdk8-b46
|
||||
21e46ea21c6a26246fb7a1926ac7fe8d580d0518 jdk8-b47
|
||||
7e2b179a5b4dbd3f097e28daa00abfcc72ba3e0b jdk8-b48
|
||||
fe44e58a6bdbeae350ce96aafb49770a5dca5d8a jdk8-b49
|
||||
|
@ -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
|
||||
|
@ -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.
|
||||
//
|
||||
|
@ -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() {
|
||||
}
|
||||
|
||||
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
@ -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());
|
||||
}
|
||||
}
|
||||
|
@ -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
|
||||
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -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;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -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) {
|
||||
|
@ -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) {
|
||||
|
@ -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)
|
||||
|
@ -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")
|
||||
|
@ -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
|
||||
|
@ -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);
|
||||
}
|
||||
|
@ -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);
|
||||
|
||||
|
@ -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
|
||||
|
@ -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,
|
||||
|
@ -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
|
||||
|
@ -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();
|
||||
}
|
||||
|
@ -256,3 +256,12 @@ bd568544be7fcd12a9327e6c448592198d57b043 hs24-b13
|
||||
e77b8e0ed1f84e3e268239e276c7ab64fa573baa jdk8-b43
|
||||
5ba29a1db46ecb80a321ca873adb56a3fe6ad320 hs24-b14
|
||||
831e5c76a20af18f3c08c5a95ed31be0e128a010 jdk8-b44
|
||||
9d5f20961bc5846fa8d098d534effafbbdae0a58 jdk8-b45
|
||||
40e5a3f2907ed02b335c7caa8ecf068cc801380d hs24-b15
|
||||
cf37a594c38db2ea926954154636f9f81da2e032 jdk8-b46
|
||||
0c7bb1f4f9c8062b5c5bfa56b3bdca44839b4109 jdk8-b47
|
||||
66b0450071c1534e014b131892cc86b63f1d009c hs24-b16
|
||||
1e26f61bbb521642639f56fae11326f1932f5a7d jdk8-b48
|
||||
bd54fe36b5e50f9ef1e30a5047b27fee5297e268 hs24-b17
|
||||
e3619706a7253540a2d94e9e841acaab8ace7038 jdk8-b49
|
||||
72e0362c3f0cfacbbac8af8a5b9d2e182f21c17b hs24-b18
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2001, 2011, 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
|
||||
@ -657,7 +657,7 @@ public class BugSpot extends JPanel {
|
||||
while (fr != null) {
|
||||
trace.add(new StackTraceEntry(fr, getCDebugger()));
|
||||
try {
|
||||
fr = fr.sender();
|
||||
fr = fr.sender(t);
|
||||
} catch (AddressException e) {
|
||||
e.printStackTrace();
|
||||
showMessageDialog("Error while walking stack; stack trace will be truncated\n(see console for details)",
|
||||
|
@ -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,6 +25,7 @@
|
||||
package sun.jvm.hotspot.debugger.bsd.amd64;
|
||||
|
||||
import sun.jvm.hotspot.debugger.*;
|
||||
import sun.jvm.hotspot.debugger.amd64.*;
|
||||
import sun.jvm.hotspot.debugger.bsd.*;
|
||||
import sun.jvm.hotspot.debugger.cdbg.*;
|
||||
import sun.jvm.hotspot.debugger.cdbg.basic.*;
|
||||
@ -51,8 +52,11 @@ final public class BsdAMD64CFrame extends BasicCFrame {
|
||||
return rbp;
|
||||
}
|
||||
|
||||
public CFrame sender() {
|
||||
if (rbp == null) {
|
||||
public CFrame sender(ThreadProxy thread) {
|
||||
AMD64ThreadContext context = (AMD64ThreadContext) thread.getContext();
|
||||
Address rsp = context.getRegisterAsAddress(AMD64ThreadContext.RSP);
|
||||
|
||||
if ( (rbp == null) || rbp.lessThan(rsp) ) {
|
||||
return null;
|
||||
}
|
||||
|
||||
|
@ -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
|
||||
@ -28,6 +28,7 @@ import sun.jvm.hotspot.debugger.*;
|
||||
import sun.jvm.hotspot.debugger.bsd.*;
|
||||
import sun.jvm.hotspot.debugger.cdbg.*;
|
||||
import sun.jvm.hotspot.debugger.cdbg.basic.*;
|
||||
import sun.jvm.hotspot.debugger.x86.*;
|
||||
|
||||
final public class BsdX86CFrame extends BasicCFrame {
|
||||
// package/class internals only
|
||||
@ -52,8 +53,11 @@ final public class BsdX86CFrame extends BasicCFrame {
|
||||
return ebp;
|
||||
}
|
||||
|
||||
public CFrame sender() {
|
||||
if (ebp == null) {
|
||||
public CFrame sender(ThreadProxy thread) {
|
||||
X86ThreadContext context = (X86ThreadContext) thread.getContext();
|
||||
Address esp = context.getRegisterAsAddress(X86ThreadContext.ESP);
|
||||
|
||||
if ( (ebp == null) || ebp.lessThan(esp) ) {
|
||||
return null;
|
||||
}
|
||||
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2001, 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
|
||||
@ -34,7 +34,7 @@ import sun.jvm.hotspot.debugger.*;
|
||||
|
||||
public interface CFrame {
|
||||
/** Returns null when no more frames on stack */
|
||||
public CFrame sender();
|
||||
public CFrame sender(ThreadProxy th);
|
||||
|
||||
/** Get the program counter of this frame */
|
||||
public Address pc();
|
||||
|
@ -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,6 +25,7 @@
|
||||
package sun.jvm.hotspot.debugger.cdbg.basic.amd64;
|
||||
|
||||
import sun.jvm.hotspot.debugger.*;
|
||||
import sun.jvm.hotspot.debugger.amd64.*;
|
||||
import sun.jvm.hotspot.debugger.cdbg.*;
|
||||
import sun.jvm.hotspot.debugger.cdbg.basic.*;
|
||||
|
||||
@ -43,8 +44,11 @@ public class AMD64CFrame extends BasicCFrame {
|
||||
this.pc = pc;
|
||||
}
|
||||
|
||||
public CFrame sender() {
|
||||
if (rbp == null) {
|
||||
public CFrame sender(ThreadProxy thread) {
|
||||
AMD64ThreadContext context = (AMD64ThreadContext) thread.getContext();
|
||||
Address rsp = context.getRegisterAsAddress(AMD64ThreadContext.RSP);
|
||||
|
||||
if ( (rbp == null) || rbp.lessThan(rsp) ) {
|
||||
return null;
|
||||
}
|
||||
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2001, 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
|
||||
@ -25,6 +25,7 @@
|
||||
package sun.jvm.hotspot.debugger.cdbg.basic.x86;
|
||||
|
||||
import sun.jvm.hotspot.debugger.*;
|
||||
import sun.jvm.hotspot.debugger.x86.*;
|
||||
import sun.jvm.hotspot.debugger.cdbg.*;
|
||||
import sun.jvm.hotspot.debugger.cdbg.basic.*;
|
||||
|
||||
@ -43,8 +44,11 @@ public class X86CFrame extends BasicCFrame {
|
||||
this.pc = pc;
|
||||
}
|
||||
|
||||
public CFrame sender() {
|
||||
if (ebp == null) {
|
||||
public CFrame sender(ThreadProxy thread) {
|
||||
X86ThreadContext context = (X86ThreadContext) thread.getContext();
|
||||
Address esp = context.getRegisterAsAddress(X86ThreadContext.ESP);
|
||||
|
||||
if ( (ebp == null) || ebp.lessThan(esp) ) {
|
||||
return null;
|
||||
}
|
||||
|
||||
|
@ -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,6 +25,7 @@
|
||||
package sun.jvm.hotspot.debugger.linux.amd64;
|
||||
|
||||
import sun.jvm.hotspot.debugger.*;
|
||||
import sun.jvm.hotspot.debugger.amd64.*;
|
||||
import sun.jvm.hotspot.debugger.linux.*;
|
||||
import sun.jvm.hotspot.debugger.cdbg.*;
|
||||
import sun.jvm.hotspot.debugger.cdbg.basic.*;
|
||||
@ -51,8 +52,11 @@ final public class LinuxAMD64CFrame extends BasicCFrame {
|
||||
return rbp;
|
||||
}
|
||||
|
||||
public CFrame sender() {
|
||||
if (rbp == null) {
|
||||
public CFrame sender(ThreadProxy thread) {
|
||||
AMD64ThreadContext context = (AMD64ThreadContext) thread.getContext();
|
||||
Address rsp = context.getRegisterAsAddress(AMD64ThreadContext.RSP);
|
||||
|
||||
if ( (rbp == null) || rbp.lessThan(rsp) ) {
|
||||
return null;
|
||||
}
|
||||
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2006, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2006, 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
|
||||
@ -57,7 +57,7 @@ final public class LinuxSPARCCFrame extends BasicCFrame {
|
||||
return sp;
|
||||
}
|
||||
|
||||
public CFrame sender() {
|
||||
public CFrame sender(ThreadProxy thread) {
|
||||
if (sp == null) {
|
||||
return null;
|
||||
}
|
||||
|
@ -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
|
||||
@ -28,6 +28,7 @@ import sun.jvm.hotspot.debugger.*;
|
||||
import sun.jvm.hotspot.debugger.linux.*;
|
||||
import sun.jvm.hotspot.debugger.cdbg.*;
|
||||
import sun.jvm.hotspot.debugger.cdbg.basic.*;
|
||||
import sun.jvm.hotspot.debugger.x86.*;
|
||||
|
||||
final public class LinuxX86CFrame extends BasicCFrame {
|
||||
// package/class internals only
|
||||
@ -52,8 +53,11 @@ final public class LinuxX86CFrame extends BasicCFrame {
|
||||
return ebp;
|
||||
}
|
||||
|
||||
public CFrame sender() {
|
||||
if (ebp == null) {
|
||||
public CFrame sender(ThreadProxy thread) {
|
||||
X86ThreadContext context = (X86ThreadContext) thread.getContext();
|
||||
Address esp = context.getRegisterAsAddress(X86ThreadContext.ESP);
|
||||
|
||||
if ( (ebp == null) || ebp.lessThan(esp) ) {
|
||||
return null;
|
||||
}
|
||||
|
||||
|
@ -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
|
||||
@ -37,7 +37,7 @@ final class ProcCFrame extends BasicCFrame {
|
||||
return fp;
|
||||
}
|
||||
|
||||
public CFrame sender() {
|
||||
public CFrame sender(ThreadProxy t) {
|
||||
return sender;
|
||||
}
|
||||
|
||||
|
@ -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;
|
||||
|
@ -47,14 +47,11 @@ public class ConstMethod extends Oop {
|
||||
private static int HAS_LINENUMBER_TABLE;
|
||||
private static int HAS_CHECKED_EXCEPTIONS;
|
||||
private static int HAS_LOCALVARIABLE_TABLE;
|
||||
private static int HAS_EXCEPTION_TABLE;
|
||||
|
||||
private static synchronized void initialize(TypeDataBase db) throws WrongTypeException {
|
||||
Type type = db.lookupType("constMethodOopDesc");
|
||||
constants = new OopField(type.getOopField("_constants"), 0);
|
||||
// The exception handler table. 4-tuples of ints [start_pc, end_pc,
|
||||
// handler_pc, catch_type index] For methods with no exceptions the
|
||||
// table is pointing to Universe::the_empty_int_array
|
||||
exceptionTable = new OopField(type.getOopField("_exception_table"), 0);
|
||||
constMethodSize = new CIntField(type.getCIntegerField("_constMethod_size"), 0);
|
||||
flags = new ByteField(type.getJByteField("_flags"), 0);
|
||||
|
||||
@ -62,6 +59,7 @@ public class ConstMethod extends Oop {
|
||||
HAS_LINENUMBER_TABLE = db.lookupIntConstant("constMethodOopDesc::_has_linenumber_table").intValue();
|
||||
HAS_CHECKED_EXCEPTIONS = db.lookupIntConstant("constMethodOopDesc::_has_checked_exceptions").intValue();
|
||||
HAS_LOCALVARIABLE_TABLE = db.lookupIntConstant("constMethodOopDesc::_has_localvariable_table").intValue();
|
||||
HAS_EXCEPTION_TABLE = db.lookupIntConstant("constMethodOopDesc::_has_exception_table").intValue();
|
||||
|
||||
// Size of Java bytecodes allocated immediately after constMethodOop.
|
||||
codeSize = new CIntField(type.getCIntegerField("_code_size"), 0);
|
||||
@ -78,6 +76,9 @@ public class ConstMethod extends Oop {
|
||||
|
||||
type = db.lookupType("LocalVariableTableElement");
|
||||
localVariableTableElementSize = type.getSize();
|
||||
|
||||
type = db.lookupType("ExceptionTableElement");
|
||||
exceptionTableElementSize = type.getSize();
|
||||
}
|
||||
|
||||
ConstMethod(OopHandle handle, ObjectHeap heap) {
|
||||
@ -86,7 +87,6 @@ public class ConstMethod extends Oop {
|
||||
|
||||
// Fields
|
||||
private static OopField constants;
|
||||
private static OopField exceptionTable;
|
||||
private static CIntField constMethodSize;
|
||||
private static ByteField flags;
|
||||
private static CIntField codeSize;
|
||||
@ -100,6 +100,7 @@ public class ConstMethod extends Oop {
|
||||
|
||||
private static long checkedExceptionElementSize;
|
||||
private static long localVariableTableElementSize;
|
||||
private static long exceptionTableElementSize;
|
||||
|
||||
public Method getMethod() {
|
||||
InstanceKlass ik = (InstanceKlass)getConstants().getPoolHolder();
|
||||
@ -112,10 +113,6 @@ public class ConstMethod extends Oop {
|
||||
return (ConstantPool) constants.getValue(this);
|
||||
}
|
||||
|
||||
public TypeArray getExceptionTable() {
|
||||
return (TypeArray) exceptionTable.getValue(this);
|
||||
}
|
||||
|
||||
public long getConstMethodSize() {
|
||||
return constMethodSize.getValue(this);
|
||||
}
|
||||
@ -235,7 +232,6 @@ public class ConstMethod extends Oop {
|
||||
super.iterateFields(visitor, doVMFields);
|
||||
if (doVMFields) {
|
||||
visitor.doOop(constants, true);
|
||||
visitor.doOop(exceptionTable, true);
|
||||
visitor.doCInt(constMethodSize, true);
|
||||
visitor.doByte(flags, true);
|
||||
visitor.doCInt(codeSize, true);
|
||||
@ -326,6 +322,23 @@ public class ConstMethod extends Oop {
|
||||
return ret;
|
||||
}
|
||||
|
||||
public boolean hasExceptionTable() {
|
||||
return (getFlags() & HAS_EXCEPTION_TABLE) != 0;
|
||||
}
|
||||
|
||||
public ExceptionTableElement[] getExceptionTable() {
|
||||
if (Assert.ASSERTS_ENABLED) {
|
||||
Assert.that(hasExceptionTable(), "should only be called if table is present");
|
||||
}
|
||||
ExceptionTableElement[] ret = new ExceptionTableElement[getExceptionTableLength()];
|
||||
long offset = offsetOfExceptionTable();
|
||||
for (int i = 0; i < ret.length; i++) {
|
||||
ret[i] = new ExceptionTableElement(getHandle(), offset);
|
||||
offset += exceptionTableElementSize;
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
public boolean hasCheckedExceptions() {
|
||||
return (getFlags() & HAS_CHECKED_EXCEPTIONS) != 0;
|
||||
}
|
||||
@ -415,7 +428,10 @@ public class ConstMethod extends Oop {
|
||||
if (Assert.ASSERTS_ENABLED) {
|
||||
Assert.that(hasLocalVariableTable(), "should only be called if table is present");
|
||||
}
|
||||
if (hasCheckedExceptions()) {
|
||||
|
||||
if (hasExceptionTable()) {
|
||||
return offsetOfExceptionTable() - 2;
|
||||
} else if (hasCheckedExceptions()) {
|
||||
return offsetOfCheckedExceptions() - 2;
|
||||
} else {
|
||||
return offsetOfLastU2Element();
|
||||
@ -432,4 +448,33 @@ public class ConstMethod extends Oop {
|
||||
return offset;
|
||||
}
|
||||
|
||||
private int getExceptionTableLength() {
|
||||
if (hasExceptionTable()) {
|
||||
return (int) getHandle().getCIntegerAt(offsetOfExceptionTableLength(), 2, true);
|
||||
} else {
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
private long offsetOfExceptionTableLength() {
|
||||
if (Assert.ASSERTS_ENABLED) {
|
||||
Assert.that(hasExceptionTable(), "should only be called if table is present");
|
||||
}
|
||||
if (hasCheckedExceptions()) {
|
||||
return offsetOfCheckedExceptions() - 2;
|
||||
} else {
|
||||
return offsetOfLastU2Element();
|
||||
}
|
||||
}
|
||||
|
||||
private long offsetOfExceptionTable() {
|
||||
long offset = offsetOfExceptionTableLength();
|
||||
long length = getExceptionTableLength();
|
||||
if (Assert.ASSERTS_ENABLED) {
|
||||
Assert.that(length > 0, "should only be called if table is present");
|
||||
}
|
||||
offset -= length * exceptionTableElementSize;
|
||||
return offset;
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -0,0 +1,81 @@
|
||||
/*
|
||||
* 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.
|
||||
*
|
||||
*/
|
||||
|
||||
package sun.jvm.hotspot.oops;
|
||||
|
||||
import java.io.*;
|
||||
import java.util.*;
|
||||
import sun.jvm.hotspot.debugger.*;
|
||||
import sun.jvm.hotspot.interpreter.*;
|
||||
import sun.jvm.hotspot.runtime.*;
|
||||
import sun.jvm.hotspot.types.*;
|
||||
import sun.jvm.hotspot.utilities.*;
|
||||
|
||||
public class ExceptionTableElement {
|
||||
static {
|
||||
VM.registerVMInitializedObserver(new Observer() {
|
||||
public void update(Observable o, Object data) {
|
||||
initialize(VM.getVM().getTypeDataBase());
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
private static synchronized void initialize(TypeDataBase db) throws WrongTypeException {
|
||||
Type type = db.lookupType("ExceptionTableElement");
|
||||
offsetOfStartPC = type.getCIntegerField("start_pc").getOffset();
|
||||
offsetOfEndPC = type.getCIntegerField("end_pc").getOffset();
|
||||
offsetOfHandlerPC = type.getCIntegerField("handler_pc").getOffset();
|
||||
offsetOfCatchTypeIndex = type.getCIntegerField("catch_type_index").getOffset();
|
||||
}
|
||||
|
||||
private static long offsetOfStartPC;
|
||||
private static long offsetOfEndPC;
|
||||
private static long offsetOfHandlerPC;
|
||||
private static long offsetOfCatchTypeIndex;
|
||||
|
||||
private OopHandle handle;
|
||||
private long offset;
|
||||
|
||||
public ExceptionTableElement(OopHandle handle, long offset) {
|
||||
this.handle = handle;
|
||||
this.offset = offset;
|
||||
}
|
||||
|
||||
public int getStartPC() {
|
||||
return (int) handle.getCIntegerAt(offset + offsetOfStartPC, 2, true);
|
||||
}
|
||||
|
||||
public int getEndPC() {
|
||||
return (int) handle.getCIntegerAt(offset + offsetOfEndPC, 2, true);
|
||||
}
|
||||
|
||||
public int getHandlerPC() {
|
||||
return (int) handle.getCIntegerAt(offset + offsetOfHandlerPC, 2, true);
|
||||
}
|
||||
|
||||
public int getCatchTypeIndex() {
|
||||
return (int) handle.getCIntegerAt(offset + offsetOfCatchTypeIndex, 2, true);
|
||||
}
|
||||
}
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2001, 2011, 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
|
||||
@ -651,10 +651,11 @@ public class GenerateOopMap {
|
||||
boolean fellThrough = false; // False to get first BB marked.
|
||||
|
||||
// First mark all exception handlers as start of a basic-block
|
||||
TypeArray excps = method().getExceptionTable();
|
||||
for(int i = 0; i < excps.getLength(); i += 4) {
|
||||
int handler_pc_idx = i+2;
|
||||
markBB(excps.getIntAt(handler_pc_idx), null);
|
||||
if (method().hasExceptionTable()) {
|
||||
ExceptionTableElement[] excps = method().getExceptionTable();
|
||||
for(int i = 0; i < excps.length; i++) {
|
||||
markBB(excps[i].getHandlerPC(), null);
|
||||
}
|
||||
}
|
||||
|
||||
// Then iterate through the code
|
||||
@ -891,14 +892,15 @@ public class GenerateOopMap {
|
||||
|
||||
// Mark entry basic block as alive and all exception handlers
|
||||
_basic_blocks[0].markAsAlive();
|
||||
TypeArray excps = method().getExceptionTable();
|
||||
for(int i = 0; i < excps.getLength(); i += 4) {
|
||||
int handler_pc_idx = i+2;
|
||||
BasicBlock bb = getBasicBlockAt(excps.getIntAt(handler_pc_idx));
|
||||
// If block is not already alive (due to multiple exception handlers to same bb), then
|
||||
// make it alive
|
||||
if (bb.isDead())
|
||||
bb.markAsAlive();
|
||||
if (method().hasExceptionTable()) {
|
||||
ExceptionTableElement[] excps = method().getExceptionTable();
|
||||
for(int i = 0; i < excps.length; i ++) {
|
||||
BasicBlock bb = getBasicBlockAt(excps[i].getHandlerPC());
|
||||
// If block is not already alive (due to multiple exception handlers to same bb), then
|
||||
// make it alive
|
||||
if (bb.isDead())
|
||||
bb.markAsAlive();
|
||||
}
|
||||
}
|
||||
|
||||
BytecodeStream bcs = new BytecodeStream(_method);
|
||||
@ -1468,12 +1470,12 @@ public class GenerateOopMap {
|
||||
|
||||
if (_has_exceptions) {
|
||||
int bci = itr.bci();
|
||||
TypeArray exct = method().getExceptionTable();
|
||||
for(int i = 0; i< exct.getLength(); i+=4) {
|
||||
int start_pc = exct.getIntAt(i);
|
||||
int end_pc = exct.getIntAt(i+1);
|
||||
int handler_pc = exct.getIntAt(i+2);
|
||||
int catch_type = exct.getIntAt(i+3);
|
||||
ExceptionTableElement[] exct = method().getExceptionTable();
|
||||
for(int i = 0; i< exct.length; i++) {
|
||||
int start_pc = exct[i].getStartPC();
|
||||
int end_pc = exct[i].getEndPC();
|
||||
int handler_pc = exct[i].getHandlerPC();
|
||||
int catch_type = exct[i].getCatchTypeIndex();
|
||||
|
||||
if (start_pc <= bci && bci < end_pc) {
|
||||
BasicBlock excBB = getBasicBlockAt(handler_pc);
|
||||
@ -2151,7 +2153,7 @@ public class GenerateOopMap {
|
||||
_conflict = false;
|
||||
_max_locals = (int) method().getMaxLocals();
|
||||
_max_stack = (int) method().getMaxStack();
|
||||
_has_exceptions = (method().getExceptionTable().getLength() > 0);
|
||||
_has_exceptions = (method().hasExceptionTable());
|
||||
_nof_refval_conflicts = 0;
|
||||
_init_vars = new ArrayList(5); // There are seldom more than 5 init_vars
|
||||
_report_result = false;
|
||||
|
@ -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); }
|
||||
|
@ -127,7 +127,6 @@ public class Method extends Oop {
|
||||
return getConstMethod().getConstants();
|
||||
}
|
||||
public MethodData getMethodData() { return (MethodData) methodData.getValue(this); }
|
||||
public TypeArray getExceptionTable() { return getConstMethod().getExceptionTable(); }
|
||||
/** WARNING: this is in words, not useful in this system; use getObjectSize() instead */
|
||||
public long getMethodSize() { return methodSize.getValue(this); }
|
||||
public long getMaxStack() { return maxStack.getValue(this); }
|
||||
@ -328,6 +327,14 @@ public class Method extends Oop {
|
||||
return null;
|
||||
}
|
||||
|
||||
public boolean hasExceptionTable() {
|
||||
return getConstMethod().hasExceptionTable();
|
||||
}
|
||||
|
||||
public ExceptionTableElement[] getExceptionTable() {
|
||||
return getConstMethod().getExceptionTable();
|
||||
}
|
||||
|
||||
public boolean hasCheckedExceptions() {
|
||||
return getConstMethod().hasCheckedExceptions();
|
||||
}
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2000, 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
|
||||
@ -141,18 +141,19 @@ public class OopUtilities implements /* imports */ JVMTIThreadState {
|
||||
public static String stringOopToString(Oop stringOop) {
|
||||
if (offsetField == null) {
|
||||
InstanceKlass k = (InstanceKlass) stringOop.getKlass();
|
||||
offsetField = (IntField) k.findField("offset", "I");
|
||||
countField = (IntField) k.findField("count", "I");
|
||||
offsetField = (IntField) k.findField("offset", "I"); // optional
|
||||
countField = (IntField) k.findField("count", "I"); // optional
|
||||
valueField = (OopField) k.findField("value", "[C");
|
||||
if (Assert.ASSERTS_ENABLED) {
|
||||
Assert.that(offsetField != null &&
|
||||
countField != null &&
|
||||
valueField != null, "must find all java.lang.String fields");
|
||||
Assert.that(valueField != null, "Field \'value\' of java.lang.String not found");
|
||||
}
|
||||
}
|
||||
return charArrayToString((TypeArray) valueField.getValue(stringOop),
|
||||
offsetField.getValue(stringOop),
|
||||
countField.getValue(stringOop));
|
||||
if (offsetField != null && countField != null) {
|
||||
return charArrayToString((TypeArray) valueField.getValue(stringOop),
|
||||
offsetField.getValue(stringOop),
|
||||
countField.getValue(stringOop));
|
||||
}
|
||||
return charArrayToString((TypeArray) valueField.getValue(stringOop));
|
||||
}
|
||||
|
||||
public static String stringOopToEscapedString(Oop stringOop) {
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2003, 2006, 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
|
||||
@ -158,7 +158,7 @@ public class PStack extends Tool {
|
||||
printUnknown(out);
|
||||
}
|
||||
}
|
||||
f = f.sender();
|
||||
f = f.sender(th);
|
||||
}
|
||||
} catch (Exception exp) {
|
||||
exp.printStackTrace();
|
||||
|
@ -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
|
||||
@ -504,11 +504,14 @@ public class ClassWriter implements /* imports */ ClassConstants
|
||||
2 /* exp. table len. */ +
|
||||
2 /* code attr. count */;
|
||||
|
||||
TypeArray exceptionTable = m.getExceptionTable();
|
||||
final int exceptionTableLen = (int) exceptionTable.getLength();
|
||||
if (exceptionTableLen != 0) {
|
||||
boolean hasExceptionTable = m.hasExceptionTable();
|
||||
ExceptionTableElement[] exceptionTable = null;
|
||||
int exceptionTableLen = 0;
|
||||
if (hasExceptionTable) {
|
||||
exceptionTable = m.getExceptionTable();
|
||||
exceptionTableLen = exceptionTable.length;
|
||||
if (DEBUG) debugMessage("\tmethod has exception table");
|
||||
codeSize += (exceptionTableLen / 4) /* exception table is 4-tuple array */
|
||||
codeSize += exceptionTableLen /* exception table is 4-tuple array */
|
||||
* (2 /* start_pc */ +
|
||||
2 /* end_pc */ +
|
||||
2 /* handler_pc */ +
|
||||
@ -586,15 +589,15 @@ public class ClassWriter implements /* imports */ ClassConstants
|
||||
dos.write(code);
|
||||
|
||||
// write exception table size
|
||||
dos.writeShort((short) (exceptionTableLen / 4));
|
||||
if (DEBUG) debugMessage("\texception table length = " + (exceptionTableLen / 4));
|
||||
dos.writeShort((short) exceptionTableLen);
|
||||
if (DEBUG) debugMessage("\texception table length = " + exceptionTableLen);
|
||||
|
||||
if (exceptionTableLen != 0) {
|
||||
for (int e = 0; e < exceptionTableLen; e += 4) {
|
||||
dos.writeShort((short) exceptionTable.getIntAt(e));
|
||||
dos.writeShort((short) exceptionTable.getIntAt(e + 1));
|
||||
dos.writeShort((short) exceptionTable.getIntAt(e + 2));
|
||||
dos.writeShort((short) exceptionTable.getIntAt(e + 3));
|
||||
for (int e = 0; e < exceptionTableLen; e++) {
|
||||
dos.writeShort((short) exceptionTable[e].getStartPC());
|
||||
dos.writeShort((short) exceptionTable[e].getEndPC());
|
||||
dos.writeShort((short) exceptionTable[e].getHandlerPC());
|
||||
dos.writeShort((short) exceptionTable[e].getCatchTypeIndex());
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -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
|
||||
@ -783,37 +783,39 @@ public class HTMLGenerator implements /* imports */ ClassConstants {
|
||||
});
|
||||
|
||||
// display exception table for this method
|
||||
TypeArray exceptionTable = method.getExceptionTable();
|
||||
// exception table is 4 tuple array of shorts
|
||||
int numEntries = (int)exceptionTable.getLength() / 4;
|
||||
if (numEntries != 0) {
|
||||
buf.h4("Exception Table");
|
||||
buf.beginTable(1);
|
||||
buf.beginTag("tr");
|
||||
buf.headerCell("start bci");
|
||||
buf.headerCell("end bci");
|
||||
buf.headerCell("handler bci");
|
||||
buf.headerCell("catch type");
|
||||
buf.endTag("tr");
|
||||
|
||||
for (int e = 0; e < numEntries; e += 4) {
|
||||
boolean hasException = method.hasExceptionTable();
|
||||
if (hasException) {
|
||||
ExceptionTableElement[] exceptionTable = method.getExceptionTable();
|
||||
int numEntries = exceptionTable.length;
|
||||
if (numEntries != 0) {
|
||||
buf.h4("Exception Table");
|
||||
buf.beginTable(1);
|
||||
buf.beginTag("tr");
|
||||
buf.cell(Integer.toString(exceptionTable.getIntAt(e)));
|
||||
buf.cell(Integer.toString(exceptionTable.getIntAt(e + 1)));
|
||||
buf.cell(Integer.toString(exceptionTable.getIntAt(e + 2)));
|
||||
short cpIndex = (short) exceptionTable.getIntAt(e + 3);
|
||||
ConstantPool.CPSlot obj = cpIndex == 0? null : cpool.getSlotAt(cpIndex);
|
||||
if (obj == null) {
|
||||
buf.cell("Any");
|
||||
} else if (obj.isMetaData()) {
|
||||
buf.cell(obj.getSymbol().asString().replace('/', '.'));
|
||||
} else {
|
||||
buf.cell(genKlassLink((InstanceKlass)obj.getOop()));
|
||||
}
|
||||
buf.headerCell("start bci");
|
||||
buf.headerCell("end bci");
|
||||
buf.headerCell("handler bci");
|
||||
buf.headerCell("catch type");
|
||||
buf.endTag("tr");
|
||||
}
|
||||
|
||||
buf.endTable();
|
||||
for (int e = 0; e < numEntries; e ++) {
|
||||
buf.beginTag("tr");
|
||||
buf.cell(Integer.toString(exceptionTable[e].getStartPC()));
|
||||
buf.cell(Integer.toString(exceptionTable[e].getEndPC()));
|
||||
buf.cell(Integer.toString(exceptionTable[e].getHandlerPC()));
|
||||
short cpIndex = (short) exceptionTable[e].getCatchTypeIndex();
|
||||
ConstantPool.CPSlot obj = cpIndex == 0? null : cpool.getSlotAt(cpIndex);
|
||||
if (obj == null) {
|
||||
buf.cell("Any");
|
||||
} else if (obj.isMetaData()) {
|
||||
buf.cell(obj.getSymbol().asString().replace('/', '.'));
|
||||
} else {
|
||||
buf.cell(genKlassLink((InstanceKlass)obj.getOop()));
|
||||
}
|
||||
buf.endTag("tr");
|
||||
}
|
||||
|
||||
buf.endTable();
|
||||
}
|
||||
}
|
||||
|
||||
// display constant pool hyperlink
|
||||
|
@ -41,10 +41,10 @@ public class BasicHashtable extends VMObject {
|
||||
}
|
||||
|
||||
private static synchronized void initialize(TypeDataBase db) {
|
||||
Type type = db.lookupType("BasicHashtable");
|
||||
Type type = db.lookupType("BasicHashtable<mtInternal>");
|
||||
tableSizeField = type.getCIntegerField("_table_size");
|
||||
bucketsField = type.getAddressField("_buckets");
|
||||
bucketSize = db.lookupType("HashtableBucket").getSize();
|
||||
bucketSize = db.lookupType("HashtableBucket<mtInternal>").getSize();
|
||||
}
|
||||
|
||||
// Fields
|
||||
|
@ -41,7 +41,7 @@ public class BasicHashtableEntry extends VMObject {
|
||||
}
|
||||
|
||||
private static synchronized void initialize(TypeDataBase db) {
|
||||
Type type = db.lookupType("BasicHashtableEntry");
|
||||
Type type = db.lookupType("BasicHashtableEntry<mtInternal>");
|
||||
hashField = type.getCIntegerField("_hash");
|
||||
nextField = type.getAddressField("_next");
|
||||
}
|
||||
|
@ -40,7 +40,7 @@ public class Hashtable extends BasicHashtable {
|
||||
|
||||
private static synchronized void initialize(TypeDataBase db) {
|
||||
// just to confirm that type exists
|
||||
Type type = db.lookupType("Hashtable<intptr_t>");
|
||||
Type type = db.lookupType("IntptrHashtable");
|
||||
}
|
||||
|
||||
// derived class may return Class<? extends HashtableEntry>
|
||||
|
@ -39,7 +39,7 @@ public class HashtableBucket extends VMObject {
|
||||
}
|
||||
|
||||
private static synchronized void initialize(TypeDataBase db) {
|
||||
Type type = db.lookupType("HashtableBucket");
|
||||
Type type = db.lookupType("HashtableBucket<mtInternal>");
|
||||
entryField = type.getAddressField("_entry");
|
||||
}
|
||||
|
||||
|
@ -41,7 +41,7 @@ public class HashtableEntry extends BasicHashtableEntry {
|
||||
}
|
||||
|
||||
private static synchronized void initialize(TypeDataBase db) {
|
||||
Type type = db.lookupType("HashtableEntry<intptr_t>");
|
||||
Type type = db.lookupType("IntptrHashtableEntry");
|
||||
literalField = type.getAddressField("_literal");
|
||||
}
|
||||
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2002, 2007, 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
|
||||
@ -85,6 +85,21 @@ public class ObjectReader {
|
||||
this(new ProcImageClassLoader());
|
||||
}
|
||||
|
||||
static void debugPrintln(String msg) {
|
||||
if (DEBUG) {
|
||||
System.err.println("DEBUG>" + msg);
|
||||
}
|
||||
}
|
||||
|
||||
static void debugPrintStackTrace(Exception exp) {
|
||||
if (DEBUG) {
|
||||
StackTraceElement[] els = exp.getStackTrace();
|
||||
for (int i = 0; i < els.length; i++) {
|
||||
System.err.println("DEBUG>" + els[i].toString());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public Object readObject(Oop oop) throws ClassNotFoundException {
|
||||
if (oop instanceof Instance) {
|
||||
return readInstance((Instance) oop);
|
||||
@ -120,13 +135,96 @@ public class ObjectReader {
|
||||
}
|
||||
|
||||
protected Symbol javaLangString;
|
||||
protected Symbol javaUtilHashtableEntry;
|
||||
protected Symbol javaUtilHashtable;
|
||||
protected Symbol javaUtilProperties;
|
||||
|
||||
protected Symbol getVMSymbol(String name) {
|
||||
return VM.getVM().getSymbolTable().probe(name);
|
||||
}
|
||||
|
||||
protected Symbol javaLangString() {
|
||||
if (javaLangString == null) {
|
||||
javaLangString = VM.getVM().getSymbolTable().probe("java/lang/String");
|
||||
javaLangString = getVMSymbol("java/lang/String");
|
||||
}
|
||||
return javaLangString;
|
||||
}
|
||||
|
||||
protected Symbol javaUtilHashtableEntry() {
|
||||
if (javaUtilHashtableEntry == null) {
|
||||
javaUtilHashtableEntry = getVMSymbol("java/util/Hashtable$Entry");
|
||||
}
|
||||
return javaUtilHashtableEntry;
|
||||
}
|
||||
|
||||
protected Symbol javaUtilHashtable() {
|
||||
if (javaUtilHashtable == null) {
|
||||
javaUtilHashtable = getVMSymbol("java/util/Hashtable");
|
||||
}
|
||||
return javaUtilHashtable;
|
||||
}
|
||||
|
||||
protected Symbol javaUtilProperties() {
|
||||
if (javaUtilProperties == null) {
|
||||
javaUtilProperties = getVMSymbol("java/util/Properties");
|
||||
}
|
||||
return javaUtilProperties;
|
||||
}
|
||||
|
||||
private void setHashtableEntry(java.util.Hashtable p, Oop oop) {
|
||||
InstanceKlass ik = (InstanceKlass)oop.getKlass();
|
||||
OopField keyField = (OopField)ik.findField("key", "Ljava/lang/Object;");
|
||||
OopField valueField = (OopField)ik.findField("value", "Ljava/lang/Object;");
|
||||
OopField nextField = (OopField)ik.findField("next", "Ljava/util/Hashtable$Entry;");
|
||||
if (DEBUG) {
|
||||
if (Assert.ASSERTS_ENABLED) {
|
||||
Assert.that(ik.getName().equals(javaUtilHashtableEntry()), "Not a Hashtable$Entry?");
|
||||
Assert.that(keyField != null && valueField != null && nextField != null, "Invalid fields!");
|
||||
}
|
||||
}
|
||||
|
||||
Object key = null;
|
||||
Object value = null;
|
||||
Oop next = null;
|
||||
try {
|
||||
key = readObject(keyField.getValue(oop));
|
||||
value = readObject(valueField.getValue(oop));
|
||||
next = (Oop)nextField.getValue(oop);
|
||||
// For Properties, should use setProperty(k, v). Since it only runs in SA
|
||||
// using put(k, v) should be OK.
|
||||
p.put(key, value);
|
||||
if (next != null) {
|
||||
setHashtableEntry(p, next);
|
||||
}
|
||||
} catch (ClassNotFoundException ce) {
|
||||
if( DEBUG) {
|
||||
debugPrintln("Class not found " + ce);
|
||||
debugPrintStackTrace(ce);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
protected Object getHashtable(Instance oop, boolean isProperties) {
|
||||
InstanceKlass k = (InstanceKlass)oop.getKlass();
|
||||
OopField tableField = (OopField)k.findField("table", "[Ljava/util/Hashtable$Entry;");
|
||||
if (tableField == null) {
|
||||
debugPrintln("Could not find field of [Ljava/util/Hashtable$Entry;");
|
||||
return null;
|
||||
}
|
||||
java.util.Hashtable table = (isProperties) ? new java.util.Properties()
|
||||
: new java.util.Hashtable();
|
||||
ObjArray kvs = (ObjArray)tableField.getValue(oop);
|
||||
long size = kvs.getLength();
|
||||
debugPrintln("Hashtable$Entry Size = " + size);
|
||||
for (long i=0; i<size; i++) {
|
||||
Oop entry = kvs.getObjAt(i);
|
||||
if (entry != null && entry.isInstance()) {
|
||||
setHashtableEntry(table, entry);
|
||||
}
|
||||
}
|
||||
return table;
|
||||
}
|
||||
|
||||
public Object readInstance(Instance oop) throws ClassNotFoundException {
|
||||
Object result = getFromObjTable(oop);
|
||||
if (result == null) {
|
||||
@ -134,11 +232,21 @@ public class ObjectReader {
|
||||
// Handle java.lang.String instances differently. As part of JSR-133, fields of immutable
|
||||
// classes have been made final. The algorithm below will not be able to read Strings from
|
||||
// debuggee (can't use reflection to set final fields). But, need to read Strings is very
|
||||
// important. FIXME: need a framework to handle many other special cases.
|
||||
// important.
|
||||
// Same for Hashtable, key and hash are final, could not be set in the algorithm too.
|
||||
// FIXME: need a framework to handle many other special cases.
|
||||
if (kls.getName().equals(javaLangString())) {
|
||||
return OopUtilities.stringOopToString(oop);
|
||||
}
|
||||
|
||||
if (kls.getName().equals(javaUtilHashtable())) {
|
||||
return getHashtable(oop, false);
|
||||
}
|
||||
|
||||
if (kls.getName().equals(javaUtilProperties())) {
|
||||
return getHashtable(oop, true);
|
||||
}
|
||||
|
||||
Class clz = readClass(kls);
|
||||
try {
|
||||
result = clz.newInstance();
|
||||
@ -164,8 +272,8 @@ public class ObjectReader {
|
||||
break;
|
||||
} catch (Exception exp) {
|
||||
if (DEBUG) {
|
||||
System.err.println("Can't create object using " + c);
|
||||
exp.printStackTrace();
|
||||
debugPrintln("Can't create object using " + c);
|
||||
debugPrintStackTrace(exp);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -329,8 +437,8 @@ public class ObjectReader {
|
||||
arrayObj[ifd.getIndex()] = readObject(field.getValue(getObj()));
|
||||
} catch (Exception e) {
|
||||
if (DEBUG) {
|
||||
System.err.println("Array element set failed for " + ifd);
|
||||
e.printStackTrace();
|
||||
debugPrintln("Array element set failed for " + ifd);
|
||||
debugPrintStackTrace(e);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -348,8 +456,8 @@ public class ObjectReader {
|
||||
|
||||
private void printFieldSetError(java.lang.reflect.Field f, Exception ex) {
|
||||
if (DEBUG) {
|
||||
if (f != null) System.err.println("Field set failed for " + f);
|
||||
ex.printStackTrace();
|
||||
if (f != null) debugPrintln("Field set failed for " + f);
|
||||
debugPrintStackTrace(ex);
|
||||
}
|
||||
}
|
||||
|
||||
@ -601,7 +709,7 @@ public class ObjectReader {
|
||||
return Class.forName(className, true, cl);
|
||||
} catch (Exception e) {
|
||||
if (DEBUG) {
|
||||
System.err.println("Can't load class " + className);
|
||||
debugPrintln("Can't load class " + className);
|
||||
}
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
|
@ -27,7 +27,9 @@
|
||||
# Compiler specific DEBUG_CFLAGS are passed in from gcc.make, sparcWorks.make
|
||||
DEBUG_CFLAGS/DEFAULT= $(DEBUG_CFLAGS)
|
||||
DEBUG_CFLAGS/BYFILE = $(DEBUG_CFLAGS/$@)$(DEBUG_CFLAGS/DEFAULT$(DEBUG_CFLAGS/$@))
|
||||
CFLAGS += $(DEBUG_CFLAGS/BYFILE)
|
||||
|
||||
# _NMT_NOINLINE_ informs NMT that no inlining by Compiler
|
||||
CFLAGS += $(DEBUG_CFLAGS/BYFILE) -D_NMT_NOINLINE_
|
||||
|
||||
# Set the environment variable HOTSPARC_GENERIC to "true"
|
||||
# to inhibit the effect of the previous line on CFLAGS.
|
||||
|
@ -110,4 +110,5 @@ copy_debug_jdk::
|
||||
|
||||
.PHONY: universal_product universal_fastdebug universal_debug \
|
||||
all_product_universal all_fastdebug_universal all_debug_universal \
|
||||
universalize export_universal copy_universal
|
||||
universalize export_universal copy_universal \
|
||||
$(UNIVERSAL_LIPO_LIST) $(UNIVERSAL_COPY_LIST)
|
||||
|
@ -35,7 +35,7 @@ HOTSPOT_VM_COPYRIGHT=Copyright 2012
|
||||
|
||||
HS_MAJOR_VER=24
|
||||
HS_MINOR_VER=0
|
||||
HS_BUILD_NUMBER=14
|
||||
HS_BUILD_NUMBER=18
|
||||
|
||||
JDK_MAJOR_VER=1
|
||||
JDK_MINOR_VER=8
|
||||
|
@ -102,6 +102,11 @@ jprt.my.linux.armvfp.jdk7=linux_armvfp_2.6
|
||||
jprt.my.linux.armvfp.jdk7u6=${jprt.my.linux.armvfp.jdk7}
|
||||
jprt.my.linux.armvfp=${jprt.my.linux.armvfp.${jprt.tools.default.release}}
|
||||
|
||||
jprt.my.linux.armv6.jdk8=linux_armv6_2.6
|
||||
jprt.my.linux.armv6.jdk7=linux_armv6_2.6
|
||||
jprt.my.linux.armv6.jdk7u6=${jprt.my.linux.armv6.jdk7}
|
||||
jprt.my.linux.armv6=${jprt.my.linux.armv6.${jprt.tools.default.release}}
|
||||
|
||||
jprt.my.linux.armsflt.jdk8=linux_armsflt_2.6
|
||||
jprt.my.linux.armsflt.jdk7=linux_armsflt_2.6
|
||||
jprt.my.linux.armsflt.jdk7u6=${jprt.my.linux.armsflt.jdk7}
|
||||
@ -134,7 +139,7 @@ jprt.build.targets.standard= \
|
||||
${jprt.my.macosx.x64}-{product|fastdebug|debug}, \
|
||||
${jprt.my.windows.i586}-{product|fastdebug|debug}, \
|
||||
${jprt.my.windows.x64}-{product|fastdebug|debug}, \
|
||||
${jprt.my.linux.armvfp}-{product|fastdebug}
|
||||
${jprt.my.linux.armv6}-{product|fastdebug}
|
||||
|
||||
jprt.build.targets.open= \
|
||||
${jprt.my.solaris.i586}-{productOpen}, \
|
||||
|
@ -1,5 +1,5 @@
|
||||
#
|
||||
# Copyright (c) 1999, 2008, Oracle and/or its affiliates. All rights reserved.
|
||||
# Copyright (c) 1999, 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
|
||||
@ -27,7 +27,9 @@
|
||||
# Compiler specific DEBUG_CFLAGS are passed in from gcc.make, sparcWorks.make
|
||||
DEBUG_CFLAGS/DEFAULT= $(DEBUG_CFLAGS)
|
||||
DEBUG_CFLAGS/BYFILE = $(DEBUG_CFLAGS/$@)$(DEBUG_CFLAGS/DEFAULT$(DEBUG_CFLAGS/$@))
|
||||
CFLAGS += $(DEBUG_CFLAGS/BYFILE)
|
||||
|
||||
# _NMT_NOINLINE_ informs NMT that no inlining by Compiler
|
||||
CFLAGS += $(DEBUG_CFLAGS/BYFILE) -D_NMT_NOINLINE_
|
||||
|
||||
# Set the environment variable HOTSPARC_GENERIC to "true"
|
||||
# to inhibit the effect of the previous line on CFLAGS.
|
||||
|
@ -1,5 +1,5 @@
|
||||
#
|
||||
# Copyright (c) 2006, 2007, Oracle and/or its affiliates. All rights reserved.
|
||||
# Copyright (c) 2006, 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
|
||||
@ -30,6 +30,13 @@ include $(GAMMADIR)/make/scm.make
|
||||
|
||||
ifneq ($(OSNAME), windows)
|
||||
ifndef LP64
|
||||
PARTIAL_NONPIC=1
|
||||
endif
|
||||
PIC_ARCH = ppc
|
||||
ifneq ("$(filter $(PIC_ARCH),$(BUILDARCH))","")
|
||||
PARTIAL_NONPIC=0
|
||||
endif
|
||||
ifeq ($(PARTIAL_NONPIC),1)
|
||||
NONPIC_DIRS = memory oops gc_implementation gc_interface
|
||||
NONPIC_DIRS := $(foreach dir,$(NONPIC_DIRS), $(GAMMADIR)/src/share/vm/$(dir))
|
||||
# Look for source files under NONPIC_DIRS
|
||||
|
@ -24,8 +24,11 @@
|
||||
|
||||
# Rules to build add_gnu_debuglink, used by vm.make on Solaris
|
||||
|
||||
GENERATED = ../generated
|
||||
ADD_GNU_DEBUGLINK = $(GENERATED)/add_gnu_debuglink
|
||||
# Allow $(ADD_GNU_DEBUGLINK) to be called from any directory.
|
||||
# We don't set or use the GENERATED macro to avoid affecting
|
||||
# other HotSpot Makefiles.
|
||||
TOPDIR = $(shell echo `pwd`)
|
||||
ADD_GNU_DEBUGLINK = $(TOPDIR)/../generated/add_gnu_debuglink
|
||||
|
||||
ADD_GNU_DEBUGLINK_DIR = $(GAMMADIR)/src/os/solaris/add_gnu_debuglink
|
||||
ADD_GNU_DEBUGLINK_SRC = $(ADD_GNU_DEBUGLINK_DIR)/add_gnu_debuglink.c
|
||||
|
@ -203,10 +203,18 @@ ifeq ($(JVM_VARIANT_SERVER),true)
|
||||
EXPORT_LIST += $(EXPORT_SERVER_DIR)/libjvm.diz
|
||||
EXPORT_LIST += $(EXPORT_SERVER_DIR)/libjvm_db.diz
|
||||
EXPORT_LIST += $(EXPORT_SERVER_DIR)/libjvm_dtrace.diz
|
||||
ifeq ($(ARCH_DATA_MODEL),32)
|
||||
EXPORT_LIST += $(EXPORT_SERVER_DIR)/64/libjvm_db.diz
|
||||
EXPORT_LIST += $(EXPORT_SERVER_DIR)/64/libjvm_dtrace.diz
|
||||
endif
|
||||
else
|
||||
EXPORT_LIST += $(EXPORT_SERVER_DIR)/libjvm.debuginfo
|
||||
EXPORT_LIST += $(EXPORT_SERVER_DIR)/libjvm_db.debuginfo
|
||||
EXPORT_LIST += $(EXPORT_SERVER_DIR)/libjvm_dtrace.debuginfo
|
||||
ifeq ($(ARCH_DATA_MODEL),32)
|
||||
EXPORT_LIST += $(EXPORT_SERVER_DIR)/64/libjvm_db.debuginfo
|
||||
EXPORT_LIST += $(EXPORT_SERVER_DIR)/64/libjvm_dtrace.debuginfo
|
||||
endif
|
||||
endif
|
||||
endif
|
||||
endif
|
||||
|
@ -94,23 +94,24 @@ ISA = $(subst i386,i486,$(shell isainfo -n))
|
||||
# Making 64/libjvm_db.so: 64-bit version of libjvm_db.so which handles 32-bit libjvm.so
|
||||
ifneq ("${ISA}","${BUILDARCH}")
|
||||
|
||||
XLIBJVM_DB = 64/$(LIBJVM_DB)
|
||||
XLIBJVM_DB_G = 64/$(LIBJVM_DB_G)
|
||||
XLIBJVM_DTRACE = 64/$(LIBJVM_DTRACE)
|
||||
XLIBJVM_DTRACE_G = 64/$(LIBJVM_DTRACE_G)
|
||||
XLIBJVM_DIR = 64
|
||||
XLIBJVM_DB = $(XLIBJVM_DIR)/$(LIBJVM_DB)
|
||||
XLIBJVM_DB_G = $(XLIBJVM_DIR)/$(LIBJVM_DB_G)
|
||||
XLIBJVM_DTRACE = $(XLIBJVM_DIR)/$(LIBJVM_DTRACE)
|
||||
XLIBJVM_DTRACE_G = $(XLIBJVM_DIR)/$(LIBJVM_DTRACE_G)
|
||||
|
||||
XLIBJVM_DB_DEBUGINFO = 64/$(LIBJVM_DB_DEBUGINFO)
|
||||
XLIBJVM_DB_DIZ = 64/$(LIBJVM_DB_DIZ)
|
||||
XLIBJVM_DB_G_DEBUGINFO = 64/$(LIBJVM_DB_G_DEBUGINFO)
|
||||
XLIBJVM_DB_G_DIZ = 64/$(LIBJVM_DB_G_DIZ)
|
||||
XLIBJVM_DTRACE_DEBUGINFO = 64/$(LIBJVM_DTRACE_DEBUGINFO)
|
||||
XLIBJVM_DTRACE_DIZ = 64/$(LIBJVM_DTRACE_DIZ)
|
||||
XLIBJVM_DTRACE_G_DEBUGINFO = 64/$(LIBJVM_DTRACE_G_DEBUGINFO)
|
||||
XLIBJVM_DTRACE_G_DIZ = 64/$(LIBJVM_DTRACE_G_DIZ)
|
||||
XLIBJVM_DB_DEBUGINFO = $(XLIBJVM_DIR)/$(LIBJVM_DB_DEBUGINFO)
|
||||
XLIBJVM_DB_DIZ = $(XLIBJVM_DIR)/$(LIBJVM_DB_DIZ)
|
||||
XLIBJVM_DB_G_DEBUGINFO = $(XLIBJVM_DIR)/$(LIBJVM_DB_G_DEBUGINFO)
|
||||
XLIBJVM_DB_G_DIZ = $(XLIBJVM_DIR)/$(LIBJVM_DB_G_DIZ)
|
||||
XLIBJVM_DTRACE_DEBUGINFO = $(XLIBJVM_DIR)/$(LIBJVM_DTRACE_DEBUGINFO)
|
||||
XLIBJVM_DTRACE_DIZ = $(XLIBJVM_DIR)/$(LIBJVM_DTRACE_DIZ)
|
||||
XLIBJVM_DTRACE_G_DEBUGINFO = $(XLIBJVM_DIR)/$(LIBJVM_DTRACE_G_DEBUGINFO)
|
||||
XLIBJVM_DTRACE_G_DIZ = $(XLIBJVM_DIR)/$(LIBJVM_DTRACE_G_DIZ)
|
||||
|
||||
$(XLIBJVM_DB): $(ADD_GNU_DEBUGLINK) $(FIX_EMPTY_SEC_HDR_FLAGS) $(DTRACE_SRCDIR)/$(JVM_DB).c $(JVMOFFS).h $(LIBJVM_DB_MAPFILE)
|
||||
@echo Making $@
|
||||
$(QUIETLY) mkdir -p 64/ ; \
|
||||
$(QUIETLY) mkdir -p $(XLIBJVM_DIR) ; \
|
||||
$(CC) $(SYMFLAG) $(ARCHFLAG/$(ISA)) -D$(TYPE) -I. -I$(GENERATED) \
|
||||
$(SHARED_FLAG) $(LFLAGS_JVM_DB) -o $@ $(DTRACE_SRCDIR)/$(JVM_DB).c -lc
|
||||
[ -f $(XLIBJVM_DB_G) ] || { ln -s $(LIBJVM_DB) $(XLIBJVM_DB_G); }
|
||||
@ -124,8 +125,10 @@ ifeq ($(ENABLE_FULL_DEBUG_SYMBOLS),1)
|
||||
$(QUIETLY) $(OBJCOPY) --only-keep-debug $@ $(XLIBJVM_DB_DEBUGINFO)
|
||||
# $(OBJCOPY) --add-gnu-debuglink=... corrupts SUNW_* sections.
|
||||
# Use $(ADD_GNU_DEBUGLINK) until a fixed $(OBJCOPY) is available.
|
||||
# $(QUIETLY) $(OBJCOPY) --add-gnu-debuglink=$(XLIBJVM_DB_DEBUGINFO) $@
|
||||
$(QUIETLY) $(ADD_GNU_DEBUGLINK) $(XLIBJVM_DB_DEBUGINFO) $@
|
||||
# $(OBJCOPY) --add-gnu-debuglink=$(LIBJVM_DB_DEBUGINFO) $(LIBJVM_DB) ;
|
||||
# Do this part in the $(XLIBJVM_DIR) subdir so $(XLIBJVM_DIR) is not
|
||||
# in the link name:
|
||||
( cd $(XLIBJVM_DIR) && $(ADD_GNU_DEBUGLINK) $(LIBJVM_DB_DEBUGINFO) $(LIBJVM_DB) )
|
||||
ifeq ($(STRIP_POLICY),all_strip)
|
||||
$(QUIETLY) $(STRIP) $@
|
||||
else
|
||||
@ -134,17 +137,19 @@ ifeq ($(ENABLE_FULL_DEBUG_SYMBOLS),1)
|
||||
# implied else here is no stripping at all
|
||||
endif
|
||||
endif
|
||||
[ -f $(XLIBJVM_DB_G_DEBUGINFO) ] || { ln -s $(XLIBJVM_DB_DEBUGINFO) $(XLIBJVM_DB_G_DEBUGINFO); }
|
||||
[ -f $(XLIBJVM_DB_G_DEBUGINFO) ] || { cd $(XLIBJVM_DIR) && ln -s $(LIBJVM_DB_DEBUGINFO) $(LIBJVM_DB_G_DEBUGINFO); }
|
||||
ifeq ($(ZIP_DEBUGINFO_FILES),1)
|
||||
$(ZIPEXE) -q -y $(XLIBJVM_DB_DIZ) $(XLIBJVM_DB_DEBUGINFO) $(XLIBJVM_DB_G_DEBUGINFO)
|
||||
# Do this part in the $(XLIBJVM_DIR) subdir so $(XLIBJVM_DIR) is not
|
||||
# in the archived name:
|
||||
( cd $(XLIBJVM_DIR) && $(ZIPEXE) -q -y $(LIBJVM_DB_DIZ) $(LIBJVM_DB_DEBUGINFO) $(LIBJVM_DB_G_DEBUGINFO) )
|
||||
$(RM) $(XLIBJVM_DB_DEBUGINFO) $(XLIBJVM_DB_G_DEBUGINFO)
|
||||
[ -f $(XLIBJVM_DB_G_DIZ) ] || { ln -s $(XLIBJVM_DB_DIZ) $(XLIBJVM_DB_G_DIZ); }
|
||||
[ -f $(XLIBJVM_DB_G_DIZ) ] || { cd $(XLIBJVM_DIR) && ln -s $(LIBJVM_DB_DIZ) $(LIBJVM_DB_G_DIZ); }
|
||||
endif
|
||||
endif
|
||||
|
||||
$(XLIBJVM_DTRACE): $(ADD_GNU_DEBUGLINK) $(FIX_EMPTY_SEC_HDR_FLAGS) $(DTRACE_SRCDIR)/$(JVM_DTRACE).c $(DTRACE_SRCDIR)/$(JVM_DTRACE).h $(LIBJVM_DTRACE_MAPFILE)
|
||||
@echo Making $@
|
||||
$(QUIETLY) mkdir -p 64/ ; \
|
||||
$(QUIETLY) mkdir -p $(XLIBJVM_DIR) ; \
|
||||
$(CC) $(SYMFLAG) $(ARCHFLAG/$(ISA)) -D$(TYPE) -I. \
|
||||
$(SHARED_FLAG) $(LFLAGS_JVM_DTRACE) -o $@ $(DTRACE_SRCDIR)/$(JVM_DTRACE).c -lc -lthread -ldoor
|
||||
[ -f $(XLIBJVM_DTRACE_G) ] || { ln -s $(LIBJVM_DTRACE) $(XLIBJVM_DTRACE_G); }
|
||||
@ -153,8 +158,10 @@ ifeq ($(ENABLE_FULL_DEBUG_SYMBOLS),1)
|
||||
$(QUIETLY) $(FIX_EMPTY_SEC_HDR_FLAGS) $@
|
||||
$(QUIETLY) $(OBJCOPY) --only-keep-debug $@ $(XLIBJVM_DTRACE_DEBUGINFO)
|
||||
# $(OBJCOPY) --add-gnu-debuglink=... corrupts SUNW_* sections.
|
||||
# $(QUIETLY) $(OBJCOPY) --add-gnu-debuglink=$(XLIBJVM_DTRACE_DEBUGINFO) $@
|
||||
$(QUIETLY) $(ADD_GNU_DEBUGLINK) $(XLIBJVM_DTRACE_DEBUGINFO) $@
|
||||
# $(OBJCOPY) --add-gnu-debuglink=$(LIBJVM_DTRACE_DEBUGINFO) $(LIBJVM_DTRACE) ;
|
||||
# Do this part in the $(XLIBJVM_DIR) subdir so $(XLIBJVM_DIR) is not
|
||||
# in the link name:
|
||||
( cd $(XLIBJVM_DIR) && $(ADD_GNU_DEBUGLINK) $(LIBJVM_DTRACE_DEBUGINFO) $(LIBJVM_DTRACE) )
|
||||
ifeq ($(STRIP_POLICY),all_strip)
|
||||
$(QUIETLY) $(STRIP) $@
|
||||
else
|
||||
@ -163,11 +170,13 @@ ifeq ($(ENABLE_FULL_DEBUG_SYMBOLS),1)
|
||||
# implied else here is no stripping at all
|
||||
endif
|
||||
endif
|
||||
[ -f $(XLIBJVM_DTRACE_G_DEBUGINFO) ] || { ln -s $(XLIBJVM_DTRACE_DEBUGINFO) $(XLIBJVM_DTRACE_G_DEBUGINFO); }
|
||||
[ -f $(XLIBJVM_DTRACE_G_DEBUGINFO) ] || { cd $(XLIBJVM_DIR) && ln -s $(LIBJVM_DTRACE_DEBUGINFO) $(LIBJVM_DTRACE_G_DEBUGINFO); }
|
||||
ifeq ($(ZIP_DEBUGINFO_FILES),1)
|
||||
$(ZIPEXE) -q -y $(XLIBJVM_DTRACE_DIZ) $(XLIBJVM_DTRACE_DEBUGINFO) $(XLIBJVM_DTRACE_G_DEBUGINFO)
|
||||
# Do this part in the $(XLIBJVM_DIR) subdir so $(XLIBJVM_DIR) is not
|
||||
# in the archived name:
|
||||
( cd $(XLIBJVM_DIR) && $(ZIPEXE) -q -y $(LIBJVM_DTRACE_DIZ) $(LIBJVM_DTRACE_DEBUGINFO) $(LIBJVM_DTRACE_G_DEBUGINFO) )
|
||||
$(RM) $(XLIBJVM_DTRACE_DEBUGINFO) $(XLIBJVM_DTRACE_G_DEBUGINFO)
|
||||
[ -f $(XLIBJVM_DTRACE_G_DIZ) ] || { ln -s $(XLIBJVM_DTRACE_DIZ) $(XLIBJVM_DTRACE_G_DIZ); }
|
||||
[ -f $(XLIBJVM_DTRACE_G_DIZ) ] || { cd $(XLIBJVM_DIR) && ln -s $(LIBJVM_DTRACE_DIZ) $(LIBJVM_DTRACE_G_DIZ); }
|
||||
endif
|
||||
endif
|
||||
|
||||
|
@ -36,6 +36,11 @@ OPT_CFLAGS/BYFILE = $(OPT_CFLAGS/$@)$(OPT_CFLAGS/DEFAULT$(OPT_CFLAGS/$@))
|
||||
ifeq ("${Platform_compiler}", "sparcWorks")
|
||||
OPT_CFLAGS/SLOWER = -xO2
|
||||
|
||||
ifeq ($(COMPILER_REV_NUMERIC), 510)
|
||||
# CC 5.10 has bug XXXXX with -xO4
|
||||
OPT_CFLAGS/jvmtiClassFileReconstituter.o = $(OPT_CFLAGS/SLOWER)
|
||||
endif # COMPILER_REV_NUMERIC == 510
|
||||
|
||||
ifeq ($(COMPILER_REV_NUMERIC), 509)
|
||||
# To avoid jvm98 crash
|
||||
OPT_CFLAGS/instanceKlass.o = $(OPT_CFLAGS/SLOWER)
|
||||
|
@ -24,8 +24,11 @@
|
||||
|
||||
# Rules to build fix_empty_sec_hdr_flags, used by vm.make on Solaris
|
||||
|
||||
GENERATED = ../generated
|
||||
FIX_EMPTY_SEC_HDR_FLAGS = $(GENERATED)/fix_empty_sec_hdr_flags
|
||||
# Allow $(FIX_EMPTY_SEC_HDR_FLAGS) to be called from any directory.
|
||||
# We don't set or use the GENERATED macro to avoid affecting
|
||||
# other HotSpot Makefiles.
|
||||
TOPDIR = $(shell echo `pwd`)
|
||||
FIX_EMPTY_SEC_HDR_FLAGS = $(TOPDIR)/../generated/fix_empty_sec_hdr_flags
|
||||
|
||||
FIX_EMPTY_SEC_HDR_FLAGS_DIR = $(GAMMADIR)/src/os/solaris/fix_empty_sec_hdr_flags
|
||||
FIX_EMPTY_SEC_HDR_FLAGS_SRC = $(FIX_EMPTY_SEC_HDR_FLAGS_DIR)/fix_empty_sec_hdr_flags.c
|
||||
|
@ -37,7 +37,8 @@ ifeq ($(COMPILER_REV_NUMERIC),508)
|
||||
endif
|
||||
endif
|
||||
|
||||
CFLAGS += $(DEBUG_CFLAGS/BYFILE)
|
||||
# _NMT_NOINLINE_ informs NMT that no inlining by Compiler
|
||||
CFLAGS += $(DEBUG_CFLAGS/BYFILE) -D_NMT_NOINLINE_
|
||||
|
||||
# Set the environment variable HOTSPARC_GENERIC to "true"
|
||||
# to inhibit the effect of the previous line on CFLAGS.
|
||||
|
@ -32,6 +32,11 @@ OPT_CFLAGS/BYFILE = $(OPT_CFLAGS/$@)$(OPT_CFLAGS/DEFAULT$(OPT_CFLAGS/$@))
|
||||
# (OPT_CFLAGS/SLOWER is also available, to alter compilation of buggy files)
|
||||
ifeq ("${Platform_compiler}", "sparcWorks")
|
||||
|
||||
ifeq ($(COMPILER_REV_NUMERIC), 510)
|
||||
# CC 5.10 has bug XXXXX with -xO4
|
||||
OPT_CFLAGS/jvmtiClassFileReconstituter.o = $(OPT_CFLAGS/O2)
|
||||
endif # COMPILER_REV_NUMERIC == 510
|
||||
|
||||
ifeq ($(shell expr $(COMPILER_REV_NUMERIC) \>= 509), 1)
|
||||
# dtrace cannot handle tail call optimization (6672627, 6693876)
|
||||
OPT_CFLAGS/jni.o = $(OPT_CFLAGS/DEFAULT) $(OPT_CCFLAGS/NO_TAIL_CALL_OPT)
|
||||
|
@ -40,6 +40,11 @@ endif
|
||||
# (OPT_CFLAGS/SLOWER is also available, to alter compilation of buggy files)
|
||||
ifeq ("${Platform_compiler}", "sparcWorks")
|
||||
|
||||
ifeq ($(COMPILER_REV_NUMERIC), 510)
|
||||
# CC 5.10 has bug XXXXX with -xO4
|
||||
OPT_CFLAGS/jvmtiClassFileReconstituter.o = $(OPT_CFLAGS/O2)
|
||||
endif # COMPILER_REV_NUMERIC == 510
|
||||
|
||||
ifeq ($(shell expr $(COMPILER_REV_NUMERIC) \>= 509), 1)
|
||||
# dtrace cannot handle tail call optimization (6672627, 6693876)
|
||||
OPT_CFLAGS/jni.o = $(OPT_CFLAGS/DEFAULT) $(OPT_CCFLAGS/NO_TAIL_CALL_OPT)
|
||||
|
@ -38,7 +38,8 @@ default:: $(BUILD_PCH_FILE) $(AOUT) launcher checkAndBuildSA wb
|
||||
!include ../local.make
|
||||
!include compile.make
|
||||
|
||||
CXX_FLAGS=$(CXX_FLAGS) $(DEBUG_OPT_OPTION)
|
||||
# _NMT_NOINLINE_ informs NMT that no inlining by Compiler
|
||||
CXX_FLAGS=$(CXX_FLAGS) $(DEBUG_OPT_OPTION) /D "_NMT_NOINLINE_"
|
||||
|
||||
!include $(WorkSpace)/make/windows/makefiles/vm.make
|
||||
!include local.make
|
||||
|
@ -1,5 +1,5 @@
|
||||
//
|
||||
// Copyright (c) 1998, 2011, Oracle and/or its affiliates. All rights reserved.
|
||||
// Copyright (c) 1998, 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
|
||||
@ -678,18 +678,26 @@ intptr_t get_offset_from_base_2(const MachNode* n, const TypePtr* atype, int dis
|
||||
|
||||
static inline jdouble replicate_immI(int con, int count, int width) {
|
||||
// Load a constant replicated "count" times with width "width"
|
||||
assert(count*width == 8 && width <= 4, "sanity");
|
||||
int bit_width = width * 8;
|
||||
jlong elt_val = con;
|
||||
elt_val &= (((jlong) 1) << bit_width) - 1; // mask off sign bits
|
||||
jlong val = elt_val;
|
||||
jlong val = con;
|
||||
val &= (((jlong) 1) << bit_width) - 1; // mask off sign bits
|
||||
for (int i = 0; i < count - 1; i++) {
|
||||
val <<= bit_width;
|
||||
val |= elt_val;
|
||||
val |= (val << bit_width);
|
||||
}
|
||||
jdouble dval = *((jdouble*) &val); // coerce to double type
|
||||
return dval;
|
||||
}
|
||||
|
||||
static inline jdouble replicate_immF(float con) {
|
||||
// Replicate float con 2 times and pack into vector.
|
||||
int val = *((int*)&con);
|
||||
jlong lval = val;
|
||||
lval = (lval << 32) | (lval & 0xFFFFFFFFl);
|
||||
jdouble dval = *((jdouble*) &lval); // coerce to double type
|
||||
return dval;
|
||||
}
|
||||
|
||||
// Standard Sparc opcode form2 field breakdown
|
||||
static inline void emit2_19(CodeBuffer &cbuf, int f30, int f29, int f25, int f22, int f20, int f19, int f0 ) {
|
||||
f0 &= (1<<19)-1; // Mask displacement to 19 bits
|
||||
@ -791,6 +799,7 @@ void emit_form3_mem_reg(CodeBuffer &cbuf, const MachNode* n, int primary, int te
|
||||
case Assembler::stdf_op3: st_op = Op_StoreD; break;
|
||||
|
||||
case Assembler::ldsb_op3: ld_op = Op_LoadB; break;
|
||||
case Assembler::ldub_op3: ld_op = Op_LoadUB; break;
|
||||
case Assembler::lduh_op3: ld_op = Op_LoadUS; break;
|
||||
case Assembler::ldsh_op3: ld_op = Op_LoadS; break;
|
||||
case Assembler::ldx_op3: // may become LoadP or stay LoadI
|
||||
@ -799,7 +808,6 @@ void emit_form3_mem_reg(CodeBuffer &cbuf, const MachNode* n, int primary, int te
|
||||
case Assembler::ldd_op3: ld_op = Op_LoadL; break;
|
||||
case Assembler::ldf_op3: ld_op = Op_LoadF; break;
|
||||
case Assembler::lddf_op3: ld_op = Op_LoadD; break;
|
||||
case Assembler::ldub_op3: ld_op = Op_LoadB; break;
|
||||
case Assembler::prefetch_op3: ld_op = Op_LoadI; break;
|
||||
|
||||
default: ShouldNotReachHere();
|
||||
@ -840,10 +848,7 @@ void emit_form3_mem_reg(CodeBuffer &cbuf, const MachNode* n, int primary, int te
|
||||
!(n->ideal_Opcode()==Op_PrefetchRead && ld_op==Op_LoadI) &&
|
||||
!(n->ideal_Opcode()==Op_PrefetchWrite && ld_op==Op_LoadI) &&
|
||||
!(n->ideal_Opcode()==Op_PrefetchAllocation && ld_op==Op_LoadI) &&
|
||||
!(n->ideal_Opcode()==Op_Load2I && ld_op==Op_LoadD) &&
|
||||
!(n->ideal_Opcode()==Op_Load4C && ld_op==Op_LoadD) &&
|
||||
!(n->ideal_Opcode()==Op_Load4S && ld_op==Op_LoadD) &&
|
||||
!(n->ideal_Opcode()==Op_Load8B && ld_op==Op_LoadD) &&
|
||||
!(n->ideal_Opcode()==Op_LoadVector && ld_op==Op_LoadD) &&
|
||||
!(n->rule() == loadUB_rule)) {
|
||||
verify_oops_warning(n, n->ideal_Opcode(), ld_op);
|
||||
}
|
||||
@ -855,9 +860,7 @@ void emit_form3_mem_reg(CodeBuffer &cbuf, const MachNode* n, int primary, int te
|
||||
!(n->ideal_Opcode()==Op_StoreI && st_op==Op_StoreF) &&
|
||||
!(n->ideal_Opcode()==Op_StoreF && st_op==Op_StoreI) &&
|
||||
!(n->ideal_Opcode()==Op_StoreL && st_op==Op_StoreI) &&
|
||||
!(n->ideal_Opcode()==Op_Store2I && st_op==Op_StoreD) &&
|
||||
!(n->ideal_Opcode()==Op_Store4C && st_op==Op_StoreD) &&
|
||||
!(n->ideal_Opcode()==Op_Store8B && st_op==Op_StoreD) &&
|
||||
!(n->ideal_Opcode()==Op_StoreVector && st_op==Op_StoreD) &&
|
||||
!(n->ideal_Opcode()==Op_StoreD && st_op==Op_StoreI && n->rule() == storeD0_rule)) {
|
||||
verify_oops_warning(n, n->ideal_Opcode(), st_op);
|
||||
}
|
||||
@ -1849,16 +1852,45 @@ int Matcher::regnum_to_fpu_offset(int regnum) {
|
||||
address last_rethrow = NULL; // debugging aid for Rethrow encoding
|
||||
#endif
|
||||
|
||||
// Map Types to machine register types
|
||||
const int Matcher::base2reg[Type::lastype] = {
|
||||
Node::NotAMachineReg,0,0, Op_RegI, Op_RegL, 0, Op_RegN,
|
||||
Node::NotAMachineReg, Node::NotAMachineReg, /* tuple, array */
|
||||
0, Op_RegD, 0, 0, /* Vectors */
|
||||
Op_RegP, Op_RegP, Op_RegP, Op_RegP, Op_RegP, Op_RegP, /* the pointers */
|
||||
0, 0/*abio*/,
|
||||
Op_RegP /* Return address */, 0, /* the memories */
|
||||
Op_RegF, Op_RegF, Op_RegF, Op_RegD, Op_RegD, Op_RegD,
|
||||
0 /*bottom*/
|
||||
};
|
||||
|
||||
// Vector width in bytes
|
||||
const uint Matcher::vector_width_in_bytes(void) {
|
||||
const int Matcher::vector_width_in_bytes(BasicType bt) {
|
||||
assert(MaxVectorSize == 8, "");
|
||||
return 8;
|
||||
}
|
||||
|
||||
// Vector ideal reg
|
||||
const uint Matcher::vector_ideal_reg(void) {
|
||||
const int Matcher::vector_ideal_reg(int size) {
|
||||
assert(MaxVectorSize == 8, "");
|
||||
return Op_RegD;
|
||||
}
|
||||
|
||||
// Limits on vector size (number of elements) loaded into vector.
|
||||
const int Matcher::max_vector_size(const BasicType bt) {
|
||||
assert(is_java_primitive(bt), "only primitive type vectors");
|
||||
return vector_width_in_bytes(bt)/type2aelembytes(bt);
|
||||
}
|
||||
|
||||
const int Matcher::min_vector_size(const BasicType bt) {
|
||||
return max_vector_size(bt); // Same as max.
|
||||
}
|
||||
|
||||
// SPARC doesn't support misaligned vectors store/load.
|
||||
const bool Matcher::misaligned_vectors_ok() {
|
||||
return false;
|
||||
}
|
||||
|
||||
// USII supports fxtof through the whole range of number, USIII doesn't
|
||||
const bool Matcher::convL2FSupported(void) {
|
||||
return VM_Version::has_fast_fxtof();
|
||||
@ -3125,50 +3157,6 @@ enc_class enc_Array_Equals(o0RegP ary1, o1RegP ary2, g3RegP tmp1, notemp_iRegI r
|
||||
__ membar( Assembler::Membar_mask_bits(Assembler::StoreLoad) );
|
||||
%}
|
||||
|
||||
enc_class enc_repl8b( iRegI src, iRegL dst ) %{
|
||||
MacroAssembler _masm(&cbuf);
|
||||
Register src_reg = reg_to_register_object($src$$reg);
|
||||
Register dst_reg = reg_to_register_object($dst$$reg);
|
||||
__ sllx(src_reg, 56, dst_reg);
|
||||
__ srlx(dst_reg, 8, O7);
|
||||
__ or3 (dst_reg, O7, dst_reg);
|
||||
__ srlx(dst_reg, 16, O7);
|
||||
__ or3 (dst_reg, O7, dst_reg);
|
||||
__ srlx(dst_reg, 32, O7);
|
||||
__ or3 (dst_reg, O7, dst_reg);
|
||||
%}
|
||||
|
||||
enc_class enc_repl4b( iRegI src, iRegL dst ) %{
|
||||
MacroAssembler _masm(&cbuf);
|
||||
Register src_reg = reg_to_register_object($src$$reg);
|
||||
Register dst_reg = reg_to_register_object($dst$$reg);
|
||||
__ sll(src_reg, 24, dst_reg);
|
||||
__ srl(dst_reg, 8, O7);
|
||||
__ or3(dst_reg, O7, dst_reg);
|
||||
__ srl(dst_reg, 16, O7);
|
||||
__ or3(dst_reg, O7, dst_reg);
|
||||
%}
|
||||
|
||||
enc_class enc_repl4s( iRegI src, iRegL dst ) %{
|
||||
MacroAssembler _masm(&cbuf);
|
||||
Register src_reg = reg_to_register_object($src$$reg);
|
||||
Register dst_reg = reg_to_register_object($dst$$reg);
|
||||
__ sllx(src_reg, 48, dst_reg);
|
||||
__ srlx(dst_reg, 16, O7);
|
||||
__ or3 (dst_reg, O7, dst_reg);
|
||||
__ srlx(dst_reg, 32, O7);
|
||||
__ or3 (dst_reg, O7, dst_reg);
|
||||
%}
|
||||
|
||||
enc_class enc_repl2i( iRegI src, iRegL dst ) %{
|
||||
MacroAssembler _masm(&cbuf);
|
||||
Register src_reg = reg_to_register_object($src$$reg);
|
||||
Register dst_reg = reg_to_register_object($dst$$reg);
|
||||
__ sllx(src_reg, 32, dst_reg);
|
||||
__ srlx(dst_reg, 32, O7);
|
||||
__ or3 (dst_reg, O7, dst_reg);
|
||||
%}
|
||||
|
||||
%}
|
||||
|
||||
//----------FRAME--------------------------------------------------------------
|
||||
@ -5932,50 +5920,6 @@ instruct loadL_unaligned(iRegL dst, memory mem, o7RegI tmp) %{
|
||||
ins_pipe(iload_mem);
|
||||
%}
|
||||
|
||||
// Load Aligned Packed Byte into a Double Register
|
||||
instruct loadA8B(regD dst, memory mem) %{
|
||||
match(Set dst (Load8B mem));
|
||||
ins_cost(MEMORY_REF_COST);
|
||||
size(4);
|
||||
format %{ "LDDF $mem,$dst\t! packed8B" %}
|
||||
opcode(Assembler::lddf_op3);
|
||||
ins_encode(simple_form3_mem_reg( mem, dst ) );
|
||||
ins_pipe(floadD_mem);
|
||||
%}
|
||||
|
||||
// Load Aligned Packed Char into a Double Register
|
||||
instruct loadA4C(regD dst, memory mem) %{
|
||||
match(Set dst (Load4C mem));
|
||||
ins_cost(MEMORY_REF_COST);
|
||||
size(4);
|
||||
format %{ "LDDF $mem,$dst\t! packed4C" %}
|
||||
opcode(Assembler::lddf_op3);
|
||||
ins_encode(simple_form3_mem_reg( mem, dst ) );
|
||||
ins_pipe(floadD_mem);
|
||||
%}
|
||||
|
||||
// Load Aligned Packed Short into a Double Register
|
||||
instruct loadA4S(regD dst, memory mem) %{
|
||||
match(Set dst (Load4S mem));
|
||||
ins_cost(MEMORY_REF_COST);
|
||||
size(4);
|
||||
format %{ "LDDF $mem,$dst\t! packed4S" %}
|
||||
opcode(Assembler::lddf_op3);
|
||||
ins_encode(simple_form3_mem_reg( mem, dst ) );
|
||||
ins_pipe(floadD_mem);
|
||||
%}
|
||||
|
||||
// Load Aligned Packed Int into a Double Register
|
||||
instruct loadA2I(regD dst, memory mem) %{
|
||||
match(Set dst (Load2I mem));
|
||||
ins_cost(MEMORY_REF_COST);
|
||||
size(4);
|
||||
format %{ "LDDF $mem,$dst\t! packed2I" %}
|
||||
opcode(Assembler::lddf_op3);
|
||||
ins_encode(simple_form3_mem_reg( mem, dst ) );
|
||||
ins_pipe(floadD_mem);
|
||||
%}
|
||||
|
||||
// Load Range
|
||||
instruct loadRange(iRegI dst, memory mem) %{
|
||||
match(Set dst (LoadRange mem));
|
||||
@ -6599,17 +6543,6 @@ instruct storeF0( memory mem, immF0 src) %{
|
||||
ins_pipe(fstoreF_mem_zero);
|
||||
%}
|
||||
|
||||
// Store Aligned Packed Bytes in Double register to memory
|
||||
instruct storeA8B(memory mem, regD src) %{
|
||||
match(Set mem (Store8B mem src));
|
||||
ins_cost(MEMORY_REF_COST);
|
||||
size(4);
|
||||
format %{ "STDF $src,$mem\t! packed8B" %}
|
||||
opcode(Assembler::stdf_op3);
|
||||
ins_encode(simple_form3_mem_reg( mem, src ) );
|
||||
ins_pipe(fstoreD_mem_reg);
|
||||
%}
|
||||
|
||||
// Convert oop pointer into compressed form
|
||||
instruct encodeHeapOop(iRegN dst, iRegP src) %{
|
||||
predicate(n->bottom_type()->make_ptr()->ptr() != TypePtr::NotNull);
|
||||
@ -6654,62 +6587,6 @@ instruct decodeHeapOop_not_null(iRegP dst, iRegN src) %{
|
||||
%}
|
||||
|
||||
|
||||
// Store Zero into Aligned Packed Bytes
|
||||
instruct storeA8B0(memory mem, immI0 zero) %{
|
||||
match(Set mem (Store8B mem zero));
|
||||
ins_cost(MEMORY_REF_COST);
|
||||
size(4);
|
||||
format %{ "STX $zero,$mem\t! packed8B" %}
|
||||
opcode(Assembler::stx_op3);
|
||||
ins_encode(simple_form3_mem_reg( mem, R_G0 ) );
|
||||
ins_pipe(fstoreD_mem_zero);
|
||||
%}
|
||||
|
||||
// Store Aligned Packed Chars/Shorts in Double register to memory
|
||||
instruct storeA4C(memory mem, regD src) %{
|
||||
match(Set mem (Store4C mem src));
|
||||
ins_cost(MEMORY_REF_COST);
|
||||
size(4);
|
||||
format %{ "STDF $src,$mem\t! packed4C" %}
|
||||
opcode(Assembler::stdf_op3);
|
||||
ins_encode(simple_form3_mem_reg( mem, src ) );
|
||||
ins_pipe(fstoreD_mem_reg);
|
||||
%}
|
||||
|
||||
// Store Zero into Aligned Packed Chars/Shorts
|
||||
instruct storeA4C0(memory mem, immI0 zero) %{
|
||||
match(Set mem (Store4C mem (Replicate4C zero)));
|
||||
ins_cost(MEMORY_REF_COST);
|
||||
size(4);
|
||||
format %{ "STX $zero,$mem\t! packed4C" %}
|
||||
opcode(Assembler::stx_op3);
|
||||
ins_encode(simple_form3_mem_reg( mem, R_G0 ) );
|
||||
ins_pipe(fstoreD_mem_zero);
|
||||
%}
|
||||
|
||||
// Store Aligned Packed Ints in Double register to memory
|
||||
instruct storeA2I(memory mem, regD src) %{
|
||||
match(Set mem (Store2I mem src));
|
||||
ins_cost(MEMORY_REF_COST);
|
||||
size(4);
|
||||
format %{ "STDF $src,$mem\t! packed2I" %}
|
||||
opcode(Assembler::stdf_op3);
|
||||
ins_encode(simple_form3_mem_reg( mem, src ) );
|
||||
ins_pipe(fstoreD_mem_reg);
|
||||
%}
|
||||
|
||||
// Store Zero into Aligned Packed Ints
|
||||
instruct storeA2I0(memory mem, immI0 zero) %{
|
||||
match(Set mem (Store2I mem zero));
|
||||
ins_cost(MEMORY_REF_COST);
|
||||
size(4);
|
||||
format %{ "STX $zero,$mem\t! packed2I" %}
|
||||
opcode(Assembler::stx_op3);
|
||||
ins_encode(simple_form3_mem_reg( mem, R_G0 ) );
|
||||
ins_pipe(fstoreD_mem_zero);
|
||||
%}
|
||||
|
||||
|
||||
//----------MemBar Instructions-----------------------------------------------
|
||||
// Memory barrier flavors
|
||||
|
||||
@ -8880,150 +8757,6 @@ instruct shrL_reg_imm6_L2I(iRegI dst, iRegL src, immI_32_63 cnt) %{
|
||||
ins_pipe(ialu_reg_imm);
|
||||
%}
|
||||
|
||||
// Replicate scalar to packed byte values in Double register
|
||||
instruct Repl8B_reg_helper(iRegL dst, iRegI src) %{
|
||||
effect(DEF dst, USE src);
|
||||
format %{ "SLLX $src,56,$dst\n\t"
|
||||
"SRLX $dst, 8,O7\n\t"
|
||||
"OR $dst,O7,$dst\n\t"
|
||||
"SRLX $dst,16,O7\n\t"
|
||||
"OR $dst,O7,$dst\n\t"
|
||||
"SRLX $dst,32,O7\n\t"
|
||||
"OR $dst,O7,$dst\t! replicate8B" %}
|
||||
ins_encode( enc_repl8b(src, dst));
|
||||
ins_pipe(ialu_reg);
|
||||
%}
|
||||
|
||||
// Replicate scalar to packed byte values in Double register
|
||||
instruct Repl8B_reg(stackSlotD dst, iRegI src) %{
|
||||
match(Set dst (Replicate8B src));
|
||||
expand %{
|
||||
iRegL tmp;
|
||||
Repl8B_reg_helper(tmp, src);
|
||||
regL_to_stkD(dst, tmp);
|
||||
%}
|
||||
%}
|
||||
|
||||
// Replicate scalar constant to packed byte values in Double register
|
||||
instruct Repl8B_immI(regD dst, immI13 con, o7RegI tmp) %{
|
||||
match(Set dst (Replicate8B con));
|
||||
effect(KILL tmp);
|
||||
format %{ "LDDF [$constanttablebase + $constantoffset],$dst\t! load from constant table: Repl8B($con)" %}
|
||||
ins_encode %{
|
||||
// XXX This is a quick fix for 6833573.
|
||||
//__ ldf(FloatRegisterImpl::D, $constanttablebase, $constantoffset(replicate_immI($con$$constant, 8, 1)), $dst$$FloatRegister);
|
||||
RegisterOrConstant con_offset = __ ensure_simm13_or_reg($constantoffset(replicate_immI($con$$constant, 8, 1)), $tmp$$Register);
|
||||
__ ldf(FloatRegisterImpl::D, $constanttablebase, con_offset, as_DoubleFloatRegister($dst$$reg));
|
||||
%}
|
||||
ins_pipe(loadConFD);
|
||||
%}
|
||||
|
||||
// Replicate scalar to packed char values into stack slot
|
||||
instruct Repl4C_reg_helper(iRegL dst, iRegI src) %{
|
||||
effect(DEF dst, USE src);
|
||||
format %{ "SLLX $src,48,$dst\n\t"
|
||||
"SRLX $dst,16,O7\n\t"
|
||||
"OR $dst,O7,$dst\n\t"
|
||||
"SRLX $dst,32,O7\n\t"
|
||||
"OR $dst,O7,$dst\t! replicate4C" %}
|
||||
ins_encode( enc_repl4s(src, dst) );
|
||||
ins_pipe(ialu_reg);
|
||||
%}
|
||||
|
||||
// Replicate scalar to packed char values into stack slot
|
||||
instruct Repl4C_reg(stackSlotD dst, iRegI src) %{
|
||||
match(Set dst (Replicate4C src));
|
||||
expand %{
|
||||
iRegL tmp;
|
||||
Repl4C_reg_helper(tmp, src);
|
||||
regL_to_stkD(dst, tmp);
|
||||
%}
|
||||
%}
|
||||
|
||||
// Replicate scalar constant to packed char values in Double register
|
||||
instruct Repl4C_immI(regD dst, immI con, o7RegI tmp) %{
|
||||
match(Set dst (Replicate4C con));
|
||||
effect(KILL tmp);
|
||||
format %{ "LDDF [$constanttablebase + $constantoffset],$dst\t! load from constant table: Repl4C($con)" %}
|
||||
ins_encode %{
|
||||
// XXX This is a quick fix for 6833573.
|
||||
//__ ldf(FloatRegisterImpl::D, $constanttablebase, $constantoffset(replicate_immI($con$$constant, 4, 2)), $dst$$FloatRegister);
|
||||
RegisterOrConstant con_offset = __ ensure_simm13_or_reg($constantoffset(replicate_immI($con$$constant, 4, 2)), $tmp$$Register);
|
||||
__ ldf(FloatRegisterImpl::D, $constanttablebase, con_offset, as_DoubleFloatRegister($dst$$reg));
|
||||
%}
|
||||
ins_pipe(loadConFD);
|
||||
%}
|
||||
|
||||
// Replicate scalar to packed short values into stack slot
|
||||
instruct Repl4S_reg_helper(iRegL dst, iRegI src) %{
|
||||
effect(DEF dst, USE src);
|
||||
format %{ "SLLX $src,48,$dst\n\t"
|
||||
"SRLX $dst,16,O7\n\t"
|
||||
"OR $dst,O7,$dst\n\t"
|
||||
"SRLX $dst,32,O7\n\t"
|
||||
"OR $dst,O7,$dst\t! replicate4S" %}
|
||||
ins_encode( enc_repl4s(src, dst) );
|
||||
ins_pipe(ialu_reg);
|
||||
%}
|
||||
|
||||
// Replicate scalar to packed short values into stack slot
|
||||
instruct Repl4S_reg(stackSlotD dst, iRegI src) %{
|
||||
match(Set dst (Replicate4S src));
|
||||
expand %{
|
||||
iRegL tmp;
|
||||
Repl4S_reg_helper(tmp, src);
|
||||
regL_to_stkD(dst, tmp);
|
||||
%}
|
||||
%}
|
||||
|
||||
// Replicate scalar constant to packed short values in Double register
|
||||
instruct Repl4S_immI(regD dst, immI con, o7RegI tmp) %{
|
||||
match(Set dst (Replicate4S con));
|
||||
effect(KILL tmp);
|
||||
format %{ "LDDF [$constanttablebase + $constantoffset],$dst\t! load from constant table: Repl4S($con)" %}
|
||||
ins_encode %{
|
||||
// XXX This is a quick fix for 6833573.
|
||||
//__ ldf(FloatRegisterImpl::D, $constanttablebase, $constantoffset(replicate_immI($con$$constant, 4, 2)), $dst$$FloatRegister);
|
||||
RegisterOrConstant con_offset = __ ensure_simm13_or_reg($constantoffset(replicate_immI($con$$constant, 4, 2)), $tmp$$Register);
|
||||
__ ldf(FloatRegisterImpl::D, $constanttablebase, con_offset, as_DoubleFloatRegister($dst$$reg));
|
||||
%}
|
||||
ins_pipe(loadConFD);
|
||||
%}
|
||||
|
||||
// Replicate scalar to packed int values in Double register
|
||||
instruct Repl2I_reg_helper(iRegL dst, iRegI src) %{
|
||||
effect(DEF dst, USE src);
|
||||
format %{ "SLLX $src,32,$dst\n\t"
|
||||
"SRLX $dst,32,O7\n\t"
|
||||
"OR $dst,O7,$dst\t! replicate2I" %}
|
||||
ins_encode( enc_repl2i(src, dst));
|
||||
ins_pipe(ialu_reg);
|
||||
%}
|
||||
|
||||
// Replicate scalar to packed int values in Double register
|
||||
instruct Repl2I_reg(stackSlotD dst, iRegI src) %{
|
||||
match(Set dst (Replicate2I src));
|
||||
expand %{
|
||||
iRegL tmp;
|
||||
Repl2I_reg_helper(tmp, src);
|
||||
regL_to_stkD(dst, tmp);
|
||||
%}
|
||||
%}
|
||||
|
||||
// Replicate scalar zero constant to packed int values in Double register
|
||||
instruct Repl2I_immI(regD dst, immI con, o7RegI tmp) %{
|
||||
match(Set dst (Replicate2I con));
|
||||
effect(KILL tmp);
|
||||
format %{ "LDDF [$constanttablebase + $constantoffset],$dst\t! load from constant table: Repl2I($con)" %}
|
||||
ins_encode %{
|
||||
// XXX This is a quick fix for 6833573.
|
||||
//__ ldf(FloatRegisterImpl::D, $constanttablebase, $constantoffset(replicate_immI($con$$constant, 2, 4)), $dst$$FloatRegister);
|
||||
RegisterOrConstant con_offset = __ ensure_simm13_or_reg($constantoffset(replicate_immI($con$$constant, 2, 4)), $tmp$$Register);
|
||||
__ ldf(FloatRegisterImpl::D, $constanttablebase, con_offset, as_DoubleFloatRegister($dst$$reg));
|
||||
%}
|
||||
ins_pipe(loadConFD);
|
||||
%}
|
||||
|
||||
//----------Control Flow Instructions------------------------------------------
|
||||
// Compare Instructions
|
||||
// Compare Integers
|
||||
@ -10742,6 +10475,308 @@ instruct storeS_reversed(indIndexMemory dst, iRegI src) %{
|
||||
ins_pipe(istore_mem_reg);
|
||||
%}
|
||||
|
||||
// ====================VECTOR INSTRUCTIONS=====================================
|
||||
|
||||
// Load Aligned Packed values into a Double Register
|
||||
instruct loadV8(regD dst, memory mem) %{
|
||||
predicate(n->as_LoadVector()->memory_size() == 8);
|
||||
match(Set dst (LoadVector mem));
|
||||
ins_cost(MEMORY_REF_COST);
|
||||
size(4);
|
||||
format %{ "LDDF $mem,$dst\t! load vector (8 bytes)" %}
|
||||
ins_encode %{
|
||||
__ ldf(FloatRegisterImpl::D, $mem$$Address, as_DoubleFloatRegister($dst$$reg));
|
||||
%}
|
||||
ins_pipe(floadD_mem);
|
||||
%}
|
||||
|
||||
// Store Vector in Double register to memory
|
||||
instruct storeV8(memory mem, regD src) %{
|
||||
predicate(n->as_StoreVector()->memory_size() == 8);
|
||||
match(Set mem (StoreVector mem src));
|
||||
ins_cost(MEMORY_REF_COST);
|
||||
size(4);
|
||||
format %{ "STDF $src,$mem\t! store vector (8 bytes)" %}
|
||||
ins_encode %{
|
||||
__ stf(FloatRegisterImpl::D, as_DoubleFloatRegister($src$$reg), $mem$$Address);
|
||||
%}
|
||||
ins_pipe(fstoreD_mem_reg);
|
||||
%}
|
||||
|
||||
// Store Zero into vector in memory
|
||||
instruct storeV8B_zero(memory mem, immI0 zero) %{
|
||||
predicate(n->as_StoreVector()->memory_size() == 8);
|
||||
match(Set mem (StoreVector mem (ReplicateB zero)));
|
||||
ins_cost(MEMORY_REF_COST);
|
||||
size(4);
|
||||
format %{ "STX $zero,$mem\t! store zero vector (8 bytes)" %}
|
||||
ins_encode %{
|
||||
__ stx(G0, $mem$$Address);
|
||||
%}
|
||||
ins_pipe(fstoreD_mem_zero);
|
||||
%}
|
||||
|
||||
instruct storeV4S_zero(memory mem, immI0 zero) %{
|
||||
predicate(n->as_StoreVector()->memory_size() == 8);
|
||||
match(Set mem (StoreVector mem (ReplicateS zero)));
|
||||
ins_cost(MEMORY_REF_COST);
|
||||
size(4);
|
||||
format %{ "STX $zero,$mem\t! store zero vector (4 shorts)" %}
|
||||
ins_encode %{
|
||||
__ stx(G0, $mem$$Address);
|
||||
%}
|
||||
ins_pipe(fstoreD_mem_zero);
|
||||
%}
|
||||
|
||||
instruct storeV2I_zero(memory mem, immI0 zero) %{
|
||||
predicate(n->as_StoreVector()->memory_size() == 8);
|
||||
match(Set mem (StoreVector mem (ReplicateI zero)));
|
||||
ins_cost(MEMORY_REF_COST);
|
||||
size(4);
|
||||
format %{ "STX $zero,$mem\t! store zero vector (2 ints)" %}
|
||||
ins_encode %{
|
||||
__ stx(G0, $mem$$Address);
|
||||
%}
|
||||
ins_pipe(fstoreD_mem_zero);
|
||||
%}
|
||||
|
||||
instruct storeV2F_zero(memory mem, immF0 zero) %{
|
||||
predicate(n->as_StoreVector()->memory_size() == 8);
|
||||
match(Set mem (StoreVector mem (ReplicateF zero)));
|
||||
ins_cost(MEMORY_REF_COST);
|
||||
size(4);
|
||||
format %{ "STX $zero,$mem\t! store zero vector (2 floats)" %}
|
||||
ins_encode %{
|
||||
__ stx(G0, $mem$$Address);
|
||||
%}
|
||||
ins_pipe(fstoreD_mem_zero);
|
||||
%}
|
||||
|
||||
// Replicate scalar to packed byte values into Double register
|
||||
instruct Repl8B_reg(regD dst, iRegI src, iRegL tmp, o7RegL tmp2) %{
|
||||
predicate(n->as_Vector()->length() == 8 && UseVIS >= 3);
|
||||
match(Set dst (ReplicateB src));
|
||||
effect(DEF dst, USE src, TEMP tmp, KILL tmp2);
|
||||
format %{ "SLLX $src,56,$tmp\n\t"
|
||||
"SRLX $tmp, 8,$tmp2\n\t"
|
||||
"OR $tmp,$tmp2,$tmp\n\t"
|
||||
"SRLX $tmp,16,$tmp2\n\t"
|
||||
"OR $tmp,$tmp2,$tmp\n\t"
|
||||
"SRLX $tmp,32,$tmp2\n\t"
|
||||
"OR $tmp,$tmp2,$tmp\t! replicate8B\n\t"
|
||||
"MOVXTOD $tmp,$dst\t! MoveL2D" %}
|
||||
ins_encode %{
|
||||
Register Rsrc = $src$$Register;
|
||||
Register Rtmp = $tmp$$Register;
|
||||
Register Rtmp2 = $tmp2$$Register;
|
||||
__ sllx(Rsrc, 56, Rtmp);
|
||||
__ srlx(Rtmp, 8, Rtmp2);
|
||||
__ or3 (Rtmp, Rtmp2, Rtmp);
|
||||
__ srlx(Rtmp, 16, Rtmp2);
|
||||
__ or3 (Rtmp, Rtmp2, Rtmp);
|
||||
__ srlx(Rtmp, 32, Rtmp2);
|
||||
__ or3 (Rtmp, Rtmp2, Rtmp);
|
||||
__ movxtod(Rtmp, as_DoubleFloatRegister($dst$$reg));
|
||||
%}
|
||||
ins_pipe(ialu_reg);
|
||||
%}
|
||||
|
||||
// Replicate scalar to packed byte values into Double stack
|
||||
instruct Repl8B_stk(stackSlotD dst, iRegI src, iRegL tmp, o7RegL tmp2) %{
|
||||
predicate(n->as_Vector()->length() == 8 && UseVIS < 3);
|
||||
match(Set dst (ReplicateB src));
|
||||
effect(DEF dst, USE src, TEMP tmp, KILL tmp2);
|
||||
format %{ "SLLX $src,56,$tmp\n\t"
|
||||
"SRLX $tmp, 8,$tmp2\n\t"
|
||||
"OR $tmp,$tmp2,$tmp\n\t"
|
||||
"SRLX $tmp,16,$tmp2\n\t"
|
||||
"OR $tmp,$tmp2,$tmp\n\t"
|
||||
"SRLX $tmp,32,$tmp2\n\t"
|
||||
"OR $tmp,$tmp2,$tmp\t! replicate8B\n\t"
|
||||
"STX $tmp,$dst\t! regL to stkD" %}
|
||||
ins_encode %{
|
||||
Register Rsrc = $src$$Register;
|
||||
Register Rtmp = $tmp$$Register;
|
||||
Register Rtmp2 = $tmp2$$Register;
|
||||
__ sllx(Rsrc, 56, Rtmp);
|
||||
__ srlx(Rtmp, 8, Rtmp2);
|
||||
__ or3 (Rtmp, Rtmp2, Rtmp);
|
||||
__ srlx(Rtmp, 16, Rtmp2);
|
||||
__ or3 (Rtmp, Rtmp2, Rtmp);
|
||||
__ srlx(Rtmp, 32, Rtmp2);
|
||||
__ or3 (Rtmp, Rtmp2, Rtmp);
|
||||
__ set ($dst$$disp + STACK_BIAS, Rtmp2);
|
||||
__ stx (Rtmp, Rtmp2, $dst$$base$$Register);
|
||||
%}
|
||||
ins_pipe(ialu_reg);
|
||||
%}
|
||||
|
||||
// Replicate scalar constant to packed byte values in Double register
|
||||
instruct Repl8B_immI(regD dst, immI13 con, o7RegI tmp) %{
|
||||
predicate(n->as_Vector()->length() == 8);
|
||||
match(Set dst (ReplicateB con));
|
||||
effect(KILL tmp);
|
||||
format %{ "LDDF [$constanttablebase + $constantoffset],$dst\t! load from constant table: Repl8B($con)" %}
|
||||
ins_encode %{
|
||||
// XXX This is a quick fix for 6833573.
|
||||
//__ ldf(FloatRegisterImpl::D, $constanttablebase, $constantoffset(replicate_immI($con$$constant, 8, 1)), $dst$$FloatRegister);
|
||||
RegisterOrConstant con_offset = __ ensure_simm13_or_reg($constantoffset(replicate_immI($con$$constant, 8, 1)), $tmp$$Register);
|
||||
__ ldf(FloatRegisterImpl::D, $constanttablebase, con_offset, as_DoubleFloatRegister($dst$$reg));
|
||||
%}
|
||||
ins_pipe(loadConFD);
|
||||
%}
|
||||
|
||||
// Replicate scalar to packed char/short values into Double register
|
||||
instruct Repl4S_reg(regD dst, iRegI src, iRegL tmp, o7RegL tmp2) %{
|
||||
predicate(n->as_Vector()->length() == 4 && UseVIS >= 3);
|
||||
match(Set dst (ReplicateS src));
|
||||
effect(DEF dst, USE src, TEMP tmp, KILL tmp2);
|
||||
format %{ "SLLX $src,48,$tmp\n\t"
|
||||
"SRLX $tmp,16,$tmp2\n\t"
|
||||
"OR $tmp,$tmp2,$tmp\n\t"
|
||||
"SRLX $tmp,32,$tmp2\n\t"
|
||||
"OR $tmp,$tmp2,$tmp\t! replicate4S\n\t"
|
||||
"MOVXTOD $tmp,$dst\t! MoveL2D" %}
|
||||
ins_encode %{
|
||||
Register Rsrc = $src$$Register;
|
||||
Register Rtmp = $tmp$$Register;
|
||||
Register Rtmp2 = $tmp2$$Register;
|
||||
__ sllx(Rsrc, 48, Rtmp);
|
||||
__ srlx(Rtmp, 16, Rtmp2);
|
||||
__ or3 (Rtmp, Rtmp2, Rtmp);
|
||||
__ srlx(Rtmp, 32, Rtmp2);
|
||||
__ or3 (Rtmp, Rtmp2, Rtmp);
|
||||
__ movxtod(Rtmp, as_DoubleFloatRegister($dst$$reg));
|
||||
%}
|
||||
ins_pipe(ialu_reg);
|
||||
%}
|
||||
|
||||
// Replicate scalar to packed char/short values into Double stack
|
||||
instruct Repl4S_stk(stackSlotD dst, iRegI src, iRegL tmp, o7RegL tmp2) %{
|
||||
predicate(n->as_Vector()->length() == 4 && UseVIS < 3);
|
||||
match(Set dst (ReplicateS src));
|
||||
effect(DEF dst, USE src, TEMP tmp, KILL tmp2);
|
||||
format %{ "SLLX $src,48,$tmp\n\t"
|
||||
"SRLX $tmp,16,$tmp2\n\t"
|
||||
"OR $tmp,$tmp2,$tmp\n\t"
|
||||
"SRLX $tmp,32,$tmp2\n\t"
|
||||
"OR $tmp,$tmp2,$tmp\t! replicate4S\n\t"
|
||||
"STX $tmp,$dst\t! regL to stkD" %}
|
||||
ins_encode %{
|
||||
Register Rsrc = $src$$Register;
|
||||
Register Rtmp = $tmp$$Register;
|
||||
Register Rtmp2 = $tmp2$$Register;
|
||||
__ sllx(Rsrc, 48, Rtmp);
|
||||
__ srlx(Rtmp, 16, Rtmp2);
|
||||
__ or3 (Rtmp, Rtmp2, Rtmp);
|
||||
__ srlx(Rtmp, 32, Rtmp2);
|
||||
__ or3 (Rtmp, Rtmp2, Rtmp);
|
||||
__ set ($dst$$disp + STACK_BIAS, Rtmp2);
|
||||
__ stx (Rtmp, Rtmp2, $dst$$base$$Register);
|
||||
%}
|
||||
ins_pipe(ialu_reg);
|
||||
%}
|
||||
|
||||
// Replicate scalar constant to packed char/short values in Double register
|
||||
instruct Repl4S_immI(regD dst, immI con, o7RegI tmp) %{
|
||||
predicate(n->as_Vector()->length() == 4);
|
||||
match(Set dst (ReplicateS con));
|
||||
effect(KILL tmp);
|
||||
format %{ "LDDF [$constanttablebase + $constantoffset],$dst\t! load from constant table: Repl4S($con)" %}
|
||||
ins_encode %{
|
||||
// XXX This is a quick fix for 6833573.
|
||||
//__ ldf(FloatRegisterImpl::D, $constanttablebase, $constantoffset(replicate_immI($con$$constant, 4, 2)), $dst$$FloatRegister);
|
||||
RegisterOrConstant con_offset = __ ensure_simm13_or_reg($constantoffset(replicate_immI($con$$constant, 4, 2)), $tmp$$Register);
|
||||
__ ldf(FloatRegisterImpl::D, $constanttablebase, con_offset, as_DoubleFloatRegister($dst$$reg));
|
||||
%}
|
||||
ins_pipe(loadConFD);
|
||||
%}
|
||||
|
||||
// Replicate scalar to packed int values into Double register
|
||||
instruct Repl2I_reg(regD dst, iRegI src, iRegL tmp, o7RegL tmp2) %{
|
||||
predicate(n->as_Vector()->length() == 2 && UseVIS >= 3);
|
||||
match(Set dst (ReplicateI src));
|
||||
effect(DEF dst, USE src, TEMP tmp, KILL tmp2);
|
||||
format %{ "SLLX $src,32,$tmp\n\t"
|
||||
"SRLX $tmp,32,$tmp2\n\t"
|
||||
"OR $tmp,$tmp2,$tmp\t! replicate2I\n\t"
|
||||
"MOVXTOD $tmp,$dst\t! MoveL2D" %}
|
||||
ins_encode %{
|
||||
Register Rsrc = $src$$Register;
|
||||
Register Rtmp = $tmp$$Register;
|
||||
Register Rtmp2 = $tmp2$$Register;
|
||||
__ sllx(Rsrc, 32, Rtmp);
|
||||
__ srlx(Rtmp, 32, Rtmp2);
|
||||
__ or3 (Rtmp, Rtmp2, Rtmp);
|
||||
__ movxtod(Rtmp, as_DoubleFloatRegister($dst$$reg));
|
||||
%}
|
||||
ins_pipe(ialu_reg);
|
||||
%}
|
||||
|
||||
// Replicate scalar to packed int values into Double stack
|
||||
instruct Repl2I_stk(stackSlotD dst, iRegI src, iRegL tmp, o7RegL tmp2) %{
|
||||
predicate(n->as_Vector()->length() == 2 && UseVIS < 3);
|
||||
match(Set dst (ReplicateI src));
|
||||
effect(DEF dst, USE src, TEMP tmp, KILL tmp2);
|
||||
format %{ "SLLX $src,32,$tmp\n\t"
|
||||
"SRLX $tmp,32,$tmp2\n\t"
|
||||
"OR $tmp,$tmp2,$tmp\t! replicate2I\n\t"
|
||||
"STX $tmp,$dst\t! regL to stkD" %}
|
||||
ins_encode %{
|
||||
Register Rsrc = $src$$Register;
|
||||
Register Rtmp = $tmp$$Register;
|
||||
Register Rtmp2 = $tmp2$$Register;
|
||||
__ sllx(Rsrc, 32, Rtmp);
|
||||
__ srlx(Rtmp, 32, Rtmp2);
|
||||
__ or3 (Rtmp, Rtmp2, Rtmp);
|
||||
__ set ($dst$$disp + STACK_BIAS, Rtmp2);
|
||||
__ stx (Rtmp, Rtmp2, $dst$$base$$Register);
|
||||
%}
|
||||
ins_pipe(ialu_reg);
|
||||
%}
|
||||
|
||||
// Replicate scalar zero constant to packed int values in Double register
|
||||
instruct Repl2I_immI(regD dst, immI con, o7RegI tmp) %{
|
||||
predicate(n->as_Vector()->length() == 2);
|
||||
match(Set dst (ReplicateI con));
|
||||
effect(KILL tmp);
|
||||
format %{ "LDDF [$constanttablebase + $constantoffset],$dst\t! load from constant table: Repl2I($con)" %}
|
||||
ins_encode %{
|
||||
// XXX This is a quick fix for 6833573.
|
||||
//__ ldf(FloatRegisterImpl::D, $constanttablebase, $constantoffset(replicate_immI($con$$constant, 2, 4)), $dst$$FloatRegister);
|
||||
RegisterOrConstant con_offset = __ ensure_simm13_or_reg($constantoffset(replicate_immI($con$$constant, 2, 4)), $tmp$$Register);
|
||||
__ ldf(FloatRegisterImpl::D, $constanttablebase, con_offset, as_DoubleFloatRegister($dst$$reg));
|
||||
%}
|
||||
ins_pipe(loadConFD);
|
||||
%}
|
||||
|
||||
// Replicate scalar to packed float values into Double stack
|
||||
instruct Repl2F_stk(stackSlotD dst, regF src) %{
|
||||
predicate(n->as_Vector()->length() == 2);
|
||||
match(Set dst (ReplicateF src));
|
||||
ins_cost(MEMORY_REF_COST*2);
|
||||
format %{ "STF $src,$dst.hi\t! packed2F\n\t"
|
||||
"STF $src,$dst.lo" %}
|
||||
opcode(Assembler::stf_op3);
|
||||
ins_encode(simple_form3_mem_reg(dst, src), form3_mem_plus_4_reg(dst, src));
|
||||
ins_pipe(fstoreF_stk_reg);
|
||||
%}
|
||||
|
||||
// Replicate scalar zero constant to packed float values in Double register
|
||||
instruct Repl2F_immF(regD dst, immF con, o7RegI tmp) %{
|
||||
predicate(n->as_Vector()->length() == 2);
|
||||
match(Set dst (ReplicateF con));
|
||||
effect(KILL tmp);
|
||||
format %{ "LDDF [$constanttablebase + $constantoffset],$dst\t! load from constant table: Repl2F($con)" %}
|
||||
ins_encode %{
|
||||
// XXX This is a quick fix for 6833573.
|
||||
//__ ldf(FloatRegisterImpl::D, $constanttablebase, $constantoffset(replicate_immF($con$$constant)), $dst$$FloatRegister);
|
||||
RegisterOrConstant con_offset = __ ensure_simm13_or_reg($constantoffset(replicate_immF($con$$constant)), $tmp$$Register);
|
||||
__ ldf(FloatRegisterImpl::D, $constanttablebase, con_offset, as_DoubleFloatRegister($dst$$reg));
|
||||
%}
|
||||
ins_pipe(loadConFD);
|
||||
%}
|
||||
|
||||
//----------PEEPHOLE RULES-----------------------------------------------------
|
||||
// These must follow all instruction definitions as they use the names
|
||||
// defined in the instructions definitions.
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 1997, 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
|
||||
@ -217,6 +217,8 @@ void VM_Version::initialize() {
|
||||
// Currently not supported anywhere.
|
||||
FLAG_SET_DEFAULT(UseFPUForSpilling, false);
|
||||
|
||||
MaxVectorSize = 8;
|
||||
|
||||
assert((InteriorEntryAlignment % relocInfo::addr_unit()) == 0, "alignment is not a multiple of NOP size");
|
||||
#endif
|
||||
|
||||
|
@ -1637,6 +1637,13 @@ void Assembler::movaps(XMMRegister dst, XMMRegister src) {
|
||||
emit_byte(0xC0 | encode);
|
||||
}
|
||||
|
||||
void Assembler::movlhps(XMMRegister dst, XMMRegister src) {
|
||||
NOT_LP64(assert(VM_Version::supports_sse(), ""));
|
||||
int encode = simd_prefix_and_encode(dst, src, src, VEX_SIMD_NONE);
|
||||
emit_byte(0x16);
|
||||
emit_byte(0xC0 | encode);
|
||||
}
|
||||
|
||||
void Assembler::movb(Register dst, Address src) {
|
||||
NOT_LP64(assert(dst->has_byte_register(), "must have byte register"));
|
||||
InstructionMark im(this);
|
||||
@ -1686,6 +1693,14 @@ void Assembler::movdl(XMMRegister dst, Address src) {
|
||||
emit_operand(dst, src);
|
||||
}
|
||||
|
||||
void Assembler::movdl(Address dst, XMMRegister src) {
|
||||
NOT_LP64(assert(VM_Version::supports_sse2(), ""));
|
||||
InstructionMark im(this);
|
||||
simd_prefix(dst, src, VEX_SIMD_66);
|
||||
emit_byte(0x7E);
|
||||
emit_operand(src, dst);
|
||||
}
|
||||
|
||||
void Assembler::movdqa(XMMRegister dst, XMMRegister src) {
|
||||
NOT_LP64(assert(VM_Version::supports_sse2(), ""));
|
||||
int encode = simd_prefix_and_encode(dst, src, VEX_SIMD_66);
|
||||
@ -1716,6 +1731,35 @@ void Assembler::movdqu(Address dst, XMMRegister src) {
|
||||
emit_operand(src, dst);
|
||||
}
|
||||
|
||||
// Move Unaligned 256bit Vector
|
||||
void Assembler::vmovdqu(XMMRegister dst, XMMRegister src) {
|
||||
assert(UseAVX, "");
|
||||
bool vector256 = true;
|
||||
int encode = vex_prefix_and_encode(dst, xnoreg, src, VEX_SIMD_F3, vector256);
|
||||
emit_byte(0x6F);
|
||||
emit_byte(0xC0 | encode);
|
||||
}
|
||||
|
||||
void Assembler::vmovdqu(XMMRegister dst, Address src) {
|
||||
assert(UseAVX, "");
|
||||
InstructionMark im(this);
|
||||
bool vector256 = true;
|
||||
vex_prefix(dst, xnoreg, src, VEX_SIMD_F3, vector256);
|
||||
emit_byte(0x6F);
|
||||
emit_operand(dst, src);
|
||||
}
|
||||
|
||||
void Assembler::vmovdqu(Address dst, XMMRegister src) {
|
||||
assert(UseAVX, "");
|
||||
InstructionMark im(this);
|
||||
bool vector256 = true;
|
||||
// swap src<->dst for encoding
|
||||
assert(src != xnoreg, "sanity");
|
||||
vex_prefix(src, xnoreg, dst, VEX_SIMD_F3, vector256);
|
||||
emit_byte(0x7F);
|
||||
emit_operand(src, dst);
|
||||
}
|
||||
|
||||
// Uses zero extension on 64bit
|
||||
|
||||
void Assembler::movl(Register dst, int32_t imm32) {
|
||||
@ -2529,6 +2573,13 @@ void Assembler::punpckldq(XMMRegister dst, XMMRegister src) {
|
||||
emit_byte(0xC0 | encode);
|
||||
}
|
||||
|
||||
void Assembler::punpcklqdq(XMMRegister dst, XMMRegister src) {
|
||||
NOT_LP64(assert(VM_Version::supports_sse2(), ""));
|
||||
int encode = simd_prefix_and_encode(dst, dst, src, VEX_SIMD_66);
|
||||
emit_byte(0x6C);
|
||||
emit_byte(0xC0 | encode);
|
||||
}
|
||||
|
||||
void Assembler::push(int32_t imm32) {
|
||||
// in 64bits we push 64bits onto the stack but only
|
||||
// take a 32bit immediate
|
||||
@ -3112,6 +3163,13 @@ void Assembler::vxorpd(XMMRegister dst, XMMRegister nds, Address src) {
|
||||
emit_operand(dst, src);
|
||||
}
|
||||
|
||||
void Assembler::vxorpd(XMMRegister dst, XMMRegister nds, XMMRegister src, bool vector256) {
|
||||
assert(VM_Version::supports_avx(), "");
|
||||
int encode = vex_prefix_and_encode(dst, nds, src, VEX_SIMD_66, vector256);
|
||||
emit_byte(0x57);
|
||||
emit_byte(0xC0 | encode);
|
||||
}
|
||||
|
||||
void Assembler::vxorps(XMMRegister dst, XMMRegister nds, Address src) {
|
||||
assert(VM_Version::supports_avx(), "");
|
||||
InstructionMark im(this);
|
||||
@ -3120,6 +3178,48 @@ void Assembler::vxorps(XMMRegister dst, XMMRegister nds, Address src) {
|
||||
emit_operand(dst, src);
|
||||
}
|
||||
|
||||
void Assembler::vxorps(XMMRegister dst, XMMRegister nds, XMMRegister src, bool vector256) {
|
||||
assert(VM_Version::supports_avx(), "");
|
||||
int encode = vex_prefix_and_encode(dst, nds, src, VEX_SIMD_NONE, vector256);
|
||||
emit_byte(0x57);
|
||||
emit_byte(0xC0 | encode);
|
||||
}
|
||||
|
||||
void Assembler::vpxor(XMMRegister dst, XMMRegister nds, XMMRegister src, bool vector256) {
|
||||
assert(VM_Version::supports_avx2() || (!vector256) && VM_Version::supports_avx(), "");
|
||||
int encode = vex_prefix_and_encode(dst, nds, src, VEX_SIMD_66, vector256);
|
||||
emit_byte(0xEF);
|
||||
emit_byte(0xC0 | encode);
|
||||
}
|
||||
|
||||
void Assembler::vinsertf128h(XMMRegister dst, XMMRegister nds, XMMRegister src) {
|
||||
assert(VM_Version::supports_avx(), "");
|
||||
bool vector256 = true;
|
||||
int encode = vex_prefix_and_encode(dst, nds, src, VEX_SIMD_66, vector256, VEX_OPCODE_0F_3A);
|
||||
emit_byte(0x18);
|
||||
emit_byte(0xC0 | encode);
|
||||
// 0x00 - insert into lower 128 bits
|
||||
// 0x01 - insert into upper 128 bits
|
||||
emit_byte(0x01);
|
||||
}
|
||||
|
||||
void Assembler::vinserti128h(XMMRegister dst, XMMRegister nds, XMMRegister src) {
|
||||
assert(VM_Version::supports_avx2(), "");
|
||||
bool vector256 = true;
|
||||
int encode = vex_prefix_and_encode(dst, nds, src, VEX_SIMD_66, vector256, VEX_OPCODE_0F_3A);
|
||||
emit_byte(0x38);
|
||||
emit_byte(0xC0 | encode);
|
||||
// 0x00 - insert into lower 128 bits
|
||||
// 0x01 - insert into upper 128 bits
|
||||
emit_byte(0x01);
|
||||
}
|
||||
|
||||
void Assembler::vzeroupper() {
|
||||
assert(VM_Version::supports_avx(), "");
|
||||
(void)vex_prefix_and_encode(xmm0, xmm0, xmm0, VEX_SIMD_NONE);
|
||||
emit_byte(0x77);
|
||||
}
|
||||
|
||||
|
||||
#ifndef _LP64
|
||||
// 32bit only pieces of the assembler
|
||||
@ -7405,6 +7505,24 @@ void MacroAssembler::movbyte(ArrayAddress dst, int src) {
|
||||
movb(as_Address(dst), src);
|
||||
}
|
||||
|
||||
void MacroAssembler::movdl(XMMRegister dst, AddressLiteral src) {
|
||||
if (reachable(src)) {
|
||||
movdl(dst, as_Address(src));
|
||||
} else {
|
||||
lea(rscratch1, src);
|
||||
movdl(dst, Address(rscratch1, 0));
|
||||
}
|
||||
}
|
||||
|
||||
void MacroAssembler::movq(XMMRegister dst, AddressLiteral src) {
|
||||
if (reachable(src)) {
|
||||
movq(dst, as_Address(src));
|
||||
} else {
|
||||
lea(rscratch1, src);
|
||||
movq(dst, Address(rscratch1, 0));
|
||||
}
|
||||
}
|
||||
|
||||
void MacroAssembler::movdbl(XMMRegister dst, AddressLiteral src) {
|
||||
if (reachable(src)) {
|
||||
if (UseXmmLoadAndClearUpper) {
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user