mirror of
https://github.com/JetBrains/JetBrainsRuntime.git
synced 2025-12-11 03:49:40 +01:00
Compare commits
465 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
650aac0d5e | ||
|
|
660252e4ca | ||
|
|
a7f5555be7 | ||
|
|
ef7e44d123 | ||
|
|
70623bf3ab | ||
|
|
7f6f9bba4e | ||
|
|
d9350fdee2 | ||
|
|
919df15706 | ||
|
|
1c78bebc35 | ||
|
|
cddf07210d | ||
|
|
9f17fd50fc | ||
|
|
3fa8795fb3 | ||
|
|
3cd8332ef3 | ||
|
|
b4c5895713 | ||
|
|
71c74c0b70 | ||
|
|
87333a2f62 | ||
|
|
34063e3656 | ||
|
|
0042095350 | ||
|
|
90f4e99281 | ||
|
|
5b7fbbf597 | ||
|
|
d83447ce3b | ||
|
|
41ffa08140 | ||
|
|
3110f8bbe6 | ||
|
|
205dc9cf8b | ||
|
|
4e637a8f80 | ||
|
|
376e043f9d | ||
|
|
c23b39b47b | ||
|
|
9817a2f423 | ||
|
|
c2f20c5030 | ||
|
|
23494ba5e1 | ||
|
|
a8a3c94590 | ||
|
|
a7b9262623 | ||
|
|
5238f9a66e | ||
|
|
55b82e40b3 | ||
|
|
24677fd4bb | ||
|
|
5107b3609e | ||
|
|
20730872fc | ||
|
|
e6408227d1 | ||
|
|
bfd962e674 | ||
|
|
2fef43b669 | ||
|
|
901ebe2983 | ||
|
|
47bb8608ad | ||
|
|
48ad58fa77 | ||
|
|
80fc527638 | ||
|
|
20906872f6 | ||
|
|
4246df5345 | ||
|
|
8a55a875e1 | ||
|
|
371977df55 | ||
|
|
6c1ac6f6bb | ||
|
|
5d3d8d0b84 | ||
|
|
9b01d7e0bb | ||
|
|
44ae1fd86b | ||
|
|
b614bef576 | ||
|
|
24c9ac5300 | ||
|
|
a337e0b71b | ||
|
|
cca26ba2b7 | ||
|
|
564fea623a | ||
|
|
a714bf1b0b | ||
|
|
655033b76c | ||
|
|
5b56f65379 | ||
|
|
9c0b5ee904 | ||
|
|
906081c12d | ||
|
|
9322a179db | ||
|
|
01d0ba69ce | ||
|
|
65c322fa70 | ||
|
|
639aa5d99f | ||
|
|
8bb18682d4 | ||
|
|
d9aab5025e | ||
|
|
4dae92ce29 | ||
|
|
0f95eb5efc | ||
|
|
3e188b4775 | ||
|
|
c7df814ec7 | ||
|
|
f88b8fb20f | ||
|
|
b1c7936406 | ||
|
|
ea25b80875 | ||
|
|
953bec36ab | ||
|
|
9abdcd4a3c | ||
|
|
515f1281e1 | ||
|
|
d586b5d037 | ||
|
|
62bcdf7ecd | ||
|
|
3a32124e5c | ||
|
|
ad3844358d | ||
|
|
5f132a5ec3 | ||
|
|
05990a73d8 | ||
|
|
967c2d5685 | ||
|
|
7a8796bd49 | ||
|
|
222b2457ed | ||
|
|
7757ae0cbf | ||
|
|
7724283600 | ||
|
|
dd1899ba62 | ||
|
|
7778b7d006 | ||
|
|
6380aca7b2 | ||
|
|
2f003be07e | ||
|
|
afe29376fe | ||
|
|
d78b757097 | ||
|
|
74ea92ce42 | ||
|
|
257d0ce0f2 | ||
|
|
c5eaaaa070 | ||
|
|
f28ac57f94 | ||
|
|
724e5ecfb3 | ||
|
|
6674423523 | ||
|
|
769dd50182 | ||
|
|
61eb5a0549 | ||
|
|
ec0a9ee8a6 | ||
|
|
183fdef181 | ||
|
|
25e07fb041 | ||
|
|
7162ad011c | ||
|
|
92e727c8e4 | ||
|
|
b2cf8c4cb0 | ||
|
|
babd792880 | ||
|
|
703702096b | ||
|
|
e99b3f4ffe | ||
|
|
e86fa474a7 | ||
|
|
6bf8610fc8 | ||
|
|
b1d745897b | ||
|
|
845106af13 | ||
|
|
959d0a9ebb | ||
|
|
a5312cbadb | ||
|
|
18688c3a56 | ||
|
|
319150fde0 | ||
|
|
fd15ca5e44 | ||
|
|
2467d2f247 | ||
|
|
81be4b2f15 | ||
|
|
822deb6ee6 | ||
|
|
83042670bb | ||
|
|
8949fccef9 | ||
|
|
b32f33b69a | ||
|
|
9e9db7f831 | ||
|
|
10f5782aff | ||
|
|
81a35920fd | ||
|
|
85e21b3a30 | ||
|
|
eeac68872b | ||
|
|
496da3014d | ||
|
|
72f39bf20c | ||
|
|
4e6d9a8f7e | ||
|
|
0dcbdaafba | ||
|
|
efea116274 | ||
|
|
5ad6116c61 | ||
|
|
363fac131c | ||
|
|
01465313ff | ||
|
|
ab2c8f811a | ||
|
|
c12876f991 | ||
|
|
56e12ecc3a | ||
|
|
a09b38f3e4 | ||
|
|
f67940dd4b | ||
|
|
447af5923f | ||
|
|
f33eb9a9bd | ||
|
|
2102c5a5b6 | ||
|
|
4fa0ac5256 | ||
|
|
3caba25f6b | ||
|
|
ed98ea0a88 | ||
|
|
e228ec4078 | ||
|
|
284879b3fc | ||
|
|
5a5c90dd1c | ||
|
|
c0e2ed86c1 | ||
|
|
d44a2451e6 | ||
|
|
700a5c6ee0 | ||
|
|
64b949310f | ||
|
|
9a3320a64e | ||
|
|
3506d44c57 | ||
|
|
ebff918cc7 | ||
|
|
88ab075a6d | ||
|
|
684361a3d9 | ||
|
|
c3026d4a59 | ||
|
|
8d8d00ff00 | ||
|
|
e8332c76e9 | ||
|
|
30d429cc25 | ||
|
|
25c830b9d5 | ||
|
|
b6ea800f9b | ||
|
|
59b8489a0c | ||
|
|
3d880fa194 | ||
|
|
9b8e06e699 | ||
|
|
7ccbee4177 | ||
|
|
3e967d8f8d | ||
|
|
80d5f4b66d | ||
|
|
ed2bca8140 | ||
|
|
8af0bcb7fe | ||
|
|
28047d6a0f | ||
|
|
b3aacc5029 | ||
|
|
4156261cf3 | ||
|
|
9972f3d338 | ||
|
|
10e48f968d | ||
|
|
80b413a5b5 | ||
|
|
1c489c5ec5 | ||
|
|
9c0a331d78 | ||
|
|
8fbd614bf3 | ||
|
|
fbd1f6e3be | ||
|
|
7f58c7c7ad | ||
|
|
ddd6138b95 | ||
|
|
74f09797c9 | ||
|
|
ebb8d12592 | ||
|
|
01025ec99e | ||
|
|
f41a30cb5c | ||
|
|
7ffcd7343f | ||
|
|
5a3a2dc308 | ||
|
|
152b0d6143 | ||
|
|
d560ac115b | ||
|
|
157b8fa41b | ||
|
|
80d3fce897 | ||
|
|
20911d0ab6 | ||
|
|
575a9f82e2 | ||
|
|
d719297988 | ||
|
|
b62f8968fe | ||
|
|
291e3f0b9a | ||
|
|
6aeb6eaccb | ||
|
|
ad23559529 | ||
|
|
0fa038b4e0 | ||
|
|
d5d2e78faa | ||
|
|
47a8760b93 | ||
|
|
903c4c0c7f | ||
|
|
cec06a0b40 | ||
|
|
9c642ad1d2 | ||
|
|
7be853ba86 | ||
|
|
8bb2411d34 | ||
|
|
5f629e503c | ||
|
|
973fdc81a1 | ||
|
|
6a310eb049 | ||
|
|
c2e8d5a017 | ||
|
|
6f6f1d3bea | ||
|
|
0733ebe2f2 | ||
|
|
9c3545d4fb | ||
|
|
ceccaf4577 | ||
|
|
5f949b5751 | ||
|
|
1ea36e2324 | ||
|
|
fcae0353d2 | ||
|
|
70f397b4a2 | ||
|
|
f49f25c60d | ||
|
|
d4c5fca16a | ||
|
|
07155682a1 | ||
|
|
8be3009d08 | ||
|
|
8cdc205b73 | ||
|
|
74be91da45 | ||
|
|
d540138a54 | ||
|
|
2e051041e3 | ||
|
|
55ec94e302 | ||
|
|
22544e7a7c | ||
|
|
08c6d03264 | ||
|
|
914bc61d4b | ||
|
|
0ea3bcf8a8 | ||
|
|
d6538dc298 | ||
|
|
38c34d56b0 | ||
|
|
6f3e1a0593 | ||
|
|
8cc4cb76b5 | ||
|
|
89f1772d07 | ||
|
|
360754471c | ||
|
|
aca74a151c | ||
|
|
8bc04a0b28 | ||
|
|
1743a11163 | ||
|
|
5721eadb16 | ||
|
|
73016372e3 | ||
|
|
10d4078b95 | ||
|
|
685f6679fe | ||
|
|
1672690b20 | ||
|
|
1f784d2ce5 | ||
|
|
6da011c932 | ||
|
|
638632979d | ||
|
|
71637b6902 | ||
|
|
f6cc90e927 | ||
|
|
54412491e8 | ||
|
|
211c061e3e | ||
|
|
49aa62455c | ||
|
|
374a36e20e | ||
|
|
d37f7326ce | ||
|
|
e78edc79b7 | ||
|
|
1f5caa619e | ||
|
|
d08e6eb258 | ||
|
|
5221180d4e | ||
|
|
84e2bbbb3c | ||
|
|
ffd1ab1498 | ||
|
|
3390fc82dd | ||
|
|
8e0655095b | ||
|
|
df3f6e087e | ||
|
|
15bdd03998 | ||
|
|
b2e9ddaa89 | ||
|
|
6573cbf346 | ||
|
|
124ddb9b47 | ||
|
|
1c502686ea | ||
|
|
4752833181 | ||
|
|
ae79d50df2 | ||
|
|
921375e418 | ||
|
|
d8089b90e5 | ||
|
|
8159d98a99 | ||
|
|
8831f6fde2 | ||
|
|
cf5f4f736f | ||
|
|
3b337824c0 | ||
|
|
f65906c1bc | ||
|
|
d5cd2350a8 | ||
|
|
b9f111d166 | ||
|
|
25cc8761f1 | ||
|
|
075c55b713 | ||
|
|
28f46567e4 | ||
|
|
aa6143b6c3 | ||
|
|
c363db8ed0 | ||
|
|
228c21635b | ||
|
|
1e3c417915 | ||
|
|
6b6dde5a11 | ||
|
|
b74620c703 | ||
|
|
3236415bda | ||
|
|
b8e234fb52 | ||
|
|
67cc344382 | ||
|
|
cd25bf4b6e | ||
|
|
79b3216615 | ||
|
|
89a8feeaff | ||
|
|
fb2076c572 | ||
|
|
3276deb50c | ||
|
|
b2b4d40c73 | ||
|
|
25570f8d69 | ||
|
|
afd497eecc | ||
|
|
6dc21336ea | ||
|
|
676c5a2769 | ||
|
|
48255b9ff3 | ||
|
|
10b80ccca6 | ||
|
|
b86fae01ab | ||
|
|
e91b6584eb | ||
|
|
1c8d337aaa | ||
|
|
1f8baaf6f0 | ||
|
|
8e21ad5768 | ||
|
|
a08d48f9b1 | ||
|
|
9a271f468a | ||
|
|
227d6c722e | ||
|
|
c188598ddd | ||
|
|
a13f8a7da1 | ||
|
|
b5637a7e2e | ||
|
|
d0d065e65c | ||
|
|
62be90fc38 | ||
|
|
a60a81b964 | ||
|
|
fb9f7dee15 | ||
|
|
e4cc1a46cb | ||
|
|
2ee6f63c19 | ||
|
|
119c20297b | ||
|
|
f1487754e6 | ||
|
|
ccf7724f51 | ||
|
|
8b54dc6ea9 | ||
|
|
43349040a2 | ||
|
|
ae09b79839 | ||
|
|
8a2b4598e4 | ||
|
|
04d30a320f | ||
|
|
9c52f1e17a | ||
|
|
9500be57ff | ||
|
|
aeb1e1d09e | ||
|
|
0d408009f6 | ||
|
|
4fd78c5611 | ||
|
|
00c30b04f4 | ||
|
|
18582cee62 | ||
|
|
ffadb2c6a5 | ||
|
|
08a51f1378 | ||
|
|
895f5c3cd5 | ||
|
|
589854449e | ||
|
|
a2f9b747a4 | ||
|
|
d8037e4c8d | ||
|
|
442e4b0e54 | ||
|
|
6f1b52ab16 | ||
|
|
408baee12e | ||
|
|
b4f55953e0 | ||
|
|
bb1c4324e9 | ||
|
|
ebe7692e1d | ||
|
|
c6064021fd | ||
|
|
478bf4b32a | ||
|
|
9c6c879e23 | ||
|
|
5e99983092 | ||
|
|
a9eb740a31 | ||
|
|
3505949495 | ||
|
|
fb2cf39b23 | ||
|
|
b89fe033cb | ||
|
|
08757b8a99 | ||
|
|
b979c4ebe0 | ||
|
|
24043fa401 | ||
|
|
c14183f376 | ||
|
|
35b39b9d65 | ||
|
|
143e0d9e1c | ||
|
|
2ab9ff2658 | ||
|
|
accba3a5e1 | ||
|
|
6ac22bda1f | ||
|
|
2f5dfb27c2 | ||
|
|
21f5431109 | ||
|
|
2c45db0933 | ||
|
|
fc3506df22 | ||
|
|
6fda647450 | ||
|
|
19e3f0756e | ||
|
|
b4b43de210 | ||
|
|
f4749d4e50 | ||
|
|
0844683a0e | ||
|
|
21cc7bf277 | ||
|
|
12b9a4edbb | ||
|
|
8fbd047f8c | ||
|
|
de965a866a | ||
|
|
966d2c0cd4 | ||
|
|
7e677a587b | ||
|
|
7eb98442e1 | ||
|
|
1e5b3e3ded | ||
|
|
79f7de8d0f | ||
|
|
76b8a9a6b7 | ||
|
|
2aa10d79aa | ||
|
|
ef3763175d | ||
|
|
5802f97caf | ||
|
|
1e258cff36 | ||
|
|
cd5df1082a | ||
|
|
9c35d5e4d1 | ||
|
|
cfefd5fc47 | ||
|
|
a483db078d | ||
|
|
a1878f7d14 | ||
|
|
29f70d33d7 | ||
|
|
2216719923 | ||
|
|
8536f548db | ||
|
|
51b47903db | ||
|
|
147f804a82 | ||
|
|
e9b83f5d6f | ||
|
|
9014f4ced0 | ||
|
|
7788603b2e | ||
|
|
c53bbad396 | ||
|
|
f3b6368c39 | ||
|
|
2663894371 | ||
|
|
7dfe1cb86c | ||
|
|
330ba0e873 | ||
|
|
36d57e3669 | ||
|
|
a431f9851d | ||
|
|
6f32be5139 | ||
|
|
0f2dd1c15e | ||
|
|
badaff577b | ||
|
|
52ca21c92a | ||
|
|
2276a38632 | ||
|
|
3610a76e25 | ||
|
|
e0782017fe | ||
|
|
25c0370a8b | ||
|
|
eff152a7be | ||
|
|
5c58d27aac | ||
|
|
36eee7c8c8 | ||
|
|
b6bee3c9e9 | ||
|
|
366a5c5175 | ||
|
|
67b1f9248b | ||
|
|
7d367a5123 | ||
|
|
99bfc33cce | ||
|
|
9c23b8bad0 | ||
|
|
ac4a9defca | ||
|
|
18e3872928 | ||
|
|
31ec802d7e | ||
|
|
228b4f6d7f | ||
|
|
5f4a2405a7 | ||
|
|
b296b69382 | ||
|
|
04a9a14193 | ||
|
|
6b158b4089 | ||
|
|
ac3b6a6442 | ||
|
|
0bae010a3b | ||
|
|
913a550c76 | ||
|
|
370f0c73b3 | ||
|
|
c791cfaf95 | ||
|
|
5ada196961 | ||
|
|
302540691b | ||
|
|
25f18c20d9 | ||
|
|
3874f44d1c | ||
|
|
811c047ec1 | ||
|
|
45435c5485 | ||
|
|
b0d292378a | ||
|
|
1ad2cb3303 | ||
|
|
2b51b9ab1a | ||
|
|
ddd9274a10 | ||
|
|
0c39548e00 | ||
|
|
9f5d367ff9 | ||
|
|
fac11519c4 | ||
|
|
e36810fd84 | ||
|
|
3a11096dee | ||
|
|
8081077ff5 | ||
|
|
f6d90bb347 | ||
|
|
be8df60f79 | ||
|
|
a04e185cd1 |
@@ -1,6 +1,7 @@
|
||||
^build/
|
||||
^dist/
|
||||
/nbproject/private/
|
||||
nbproject/private/
|
||||
^webrev
|
||||
^.hgtip
|
||||
^.bridge2
|
||||
.DS_Store
|
||||
|
||||
7
.hgtags
7
.hgtags
@@ -176,3 +176,10 @@ cecd7026f30cbd83b0601925a7a5e059aec98138 jdk8-b49
|
||||
b67041a6cb508da18d2f5c7687e6a31e08bea4fc jdk8-b52
|
||||
c7aa5cca1c01689a7b1a92411daf83684af05a33 jdk8-b53
|
||||
7c6aa31ff1b2ae48c1c686ebe1aadf0c3da5be15 jdk8-b54
|
||||
319f583f66db47395fa86127dd3ddb729eb7c64f jdk8-b55
|
||||
ffe6bce5a521be40146af2ac03c509b7bac30595 jdk8-b56
|
||||
2c21c080b11b93efb3851e39e1363e45da805943 jdk8-b57
|
||||
479d3302a26d7607ba271d66973e59ebf58825b6 jdk8-b58
|
||||
3bd874584fc01aae92fbc8827e2bd04d8b6ace04 jdk8-b59
|
||||
5e3adc681779037a2d33b7be6f75680619085492 jdk8-b60
|
||||
cdaa6122185f9bf512dcd6600f56bfccc4824e8c jdk8-b61
|
||||
|
||||
@@ -176,3 +176,10 @@ c97b99424815c43818e3cc3ffcdd1a60f3198b52 jdk8-b49
|
||||
8d24def5ceb3b8f2e857f2e18b2804fc59eecf8d jdk8-b52
|
||||
febd7ff5280067ca482faaeb9418ae88764c1a35 jdk8-b53
|
||||
c1a277c6022affbc6855bdfb039511e73fbe2395 jdk8-b54
|
||||
b85b44cced2406792cfb9baab1377ff03e7001d8 jdk8-b55
|
||||
76844579fa4b30929731115b237e477181a82394 jdk8-b56
|
||||
522dfac8ca4d07c0b74025d4ac3b6e5feefbb829 jdk8-b57
|
||||
9367024804874faf8e958adeb333682bab1c0c47 jdk8-b58
|
||||
dae9821589ccd2611bdf7084269b98e819091770 jdk8-b59
|
||||
e07f499b9dccb529ecf74172cf6ac11a195ec57a jdk8-b60
|
||||
20ff117b509075c3aec4ee3a57990ecd5db5df9c jdk8-b61
|
||||
|
||||
14
Makefile
14
Makefile
@@ -1,5 +1,5 @@
|
||||
#
|
||||
# Copyright (c) 1995, 2011, Oracle and/or its affiliates. All rights reserved.
|
||||
# Copyright (c) 1995, 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,6 +23,16 @@
|
||||
# questions.
|
||||
#
|
||||
|
||||
# If NEWBUILD is defined, use the new build-infra Makefiles and configure.
|
||||
# See NewMakefile.gmk for more information.
|
||||
|
||||
ifeq ($(NEWBUILD),true)
|
||||
|
||||
# The new top level Makefile
|
||||
include NewMakefile.gmk
|
||||
|
||||
else # Original Makefile logic
|
||||
|
||||
BUILD_PARENT_DIRECTORY=.
|
||||
|
||||
# Basename of any originally supplied ALT_OUTPUTDIR directory
|
||||
@@ -557,3 +567,5 @@ include ./make/jprt.gmk
|
||||
# Force target
|
||||
FRC:
|
||||
|
||||
endif # Original Makefile logic
|
||||
|
||||
|
||||
211
NewMakefile.gmk
Normal file
211
NewMakefile.gmk
Normal file
@@ -0,0 +1,211 @@
|
||||
#
|
||||
# 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. 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.
|
||||
#
|
||||
|
||||
# Utilities used in this Makefile
|
||||
BASENAME=basename
|
||||
CAT=cat
|
||||
CD=cd
|
||||
CMP=cmp
|
||||
CP=cp
|
||||
ECHO=echo
|
||||
MKDIR=mkdir
|
||||
PWD=pwd
|
||||
SH=sh
|
||||
ifeq ($(PLATFORM),windows)
|
||||
ZIP=zip
|
||||
else
|
||||
# store symbolic links as the link
|
||||
ZIP=zip -y
|
||||
endif
|
||||
# Insure we have a path that looks like it came from pwd
|
||||
# (This is mostly for Windows sake and drive letters)
|
||||
define UnixPath # path
|
||||
$(shell (cd "$1" && $(PWD)))
|
||||
endef
|
||||
|
||||
# Current root directory
|
||||
CURRENT_DIRECTORY := $(shell $(PWD))
|
||||
|
||||
# Build directory root
|
||||
BUILD_DIR_ROOT = $(CURRENT_DIRECTORY)/build
|
||||
|
||||
# All configured Makefiles to run
|
||||
ALL_MAKEFILES = $(wildcard $(BUILD_DIR_ROOT)/*-*/Makefile)
|
||||
|
||||
# All bundles to create
|
||||
ALL_IMAGE_DIRS = $(wildcard $(BUILD_DIR_ROOT)/*-*/images/*-image)
|
||||
|
||||
# Build all the standard 'all', 'images', and 'clean' targets
|
||||
all images clean: checks
|
||||
@if [ "$(ALL_MAKEFILES)" = "" ] ; then \
|
||||
$(ECHO) "ERROR: No configurations to build"; exit 1; \
|
||||
fi
|
||||
@for bdir in $(dir $(ALL_MAKEFILES)) ; do \
|
||||
$(ECHO) "$(CD) $${bdir} && $(MAKE) $(EXTRA_MAKE_ARGS) $@" ; \
|
||||
$(CD) $${bdir} && $(MAKE) $(EXTRA_MAKE_ARGS) $@ ; \
|
||||
done
|
||||
|
||||
# Bundle creation
|
||||
bundles:
|
||||
@if [ "$(ALL_IMAGE_DIRS)" = "" ] ; then \
|
||||
$(ECHO) "ERROR: No images to bundle"; exit 1; \
|
||||
fi
|
||||
@for i in $(ALL_IMAGE_DIRS) ; do \
|
||||
$(MKDIR) -p $${i}/../../bundles && \
|
||||
$(RM) $${i}/../../bundles/`$(BASENAME) $${i}`.zip && \
|
||||
$(ECHO) "$(CD) $${i} && $(ZIP) -q -r ../../bundles/`$(BASENAME) $${i}`.zip ." && \
|
||||
$(CD) $${i} && $(ZIP) -q -r ../../bundles/`$(BASENAME) $${i}`.zip . ; \
|
||||
done
|
||||
|
||||
# Clobber all the built files
|
||||
clobber::
|
||||
$(RM) -r $(BUILD_DIR_ROOT)
|
||||
|
||||
# Make various checks to insure the build will be successful
|
||||
# Possibilities:
|
||||
# * Check that if any closed repo is provided, they all must be.
|
||||
# * Check that all open repos exist, at least until we are ready for some
|
||||
# kind of partial build.
|
||||
checks:
|
||||
@$(ECHO) "No checks yet"
|
||||
|
||||
# Keep track of phony targets
|
||||
PHONY_LIST += all images clean clobber checks
|
||||
|
||||
###########################################################################
|
||||
# To help in adoption of the new configure&&make build process, a bridge
|
||||
# build will use the old settings to run configure and do the build.
|
||||
|
||||
# Build with the configure bridge
|
||||
bridgeBuild: bridge2configure images
|
||||
|
||||
# Bridge from old Makefile ALT settings to configure options
|
||||
bridge2configure: .bridge2configureOpts
|
||||
$(CD) common/makefiles && sh ../autoconf/configure $(strip $(shell $(CAT) $<))
|
||||
|
||||
# Create a file with configure options created from old Makefile mechanisms.
|
||||
.bridge2configureOpts: .bridge2configureOptsLatest
|
||||
$(RM) $@
|
||||
$(CP) $< $@
|
||||
|
||||
# In case make was invoked from a specific path
|
||||
_MAKE_COMMAND_PATH:=$(firstword $(MAKE))
|
||||
ifneq ($(dir $(_MAKE_COMMAND_PATH)),./)
|
||||
# This could be removed someday if JPRT was fixed and we could assume that
|
||||
# the path to make was always in PATH.
|
||||
MAKE_BINDIR:=$(call UnixPath,$(dir $(_MAKE_COMMAND_PATH)))
|
||||
NEWPATH:=$(MAKE_BINDIR):${PATH}
|
||||
PATH:=$(NEWPATH)
|
||||
export PATH
|
||||
MAKE_COMMAND=$(MAKE_BINDIR)/$(notdir $(_MAKE_COMMAND_PATH))
|
||||
else
|
||||
MAKE_COMMAND=$(_MAKE_COMMAND_PATH)
|
||||
endif
|
||||
|
||||
# Use this file to only change when obvious things have changed
|
||||
.bridge2configureOptsLatest: FRC
|
||||
$(RM) $@.tmp
|
||||
@$(ECHO) " MAKE=$(MAKE_COMMAND) " >> $@.tmp
|
||||
@$(ECHO) " --with-debug-level=$(if $(DEBUG_LEVEL),$(DEBUG_LEVEL),release) " >> $@.tmp
|
||||
ifdef ARCH_DATA_MODEL
|
||||
@$(ECHO) " --with-target-bits=$(ARCH_DATA_MODEL) " >> $@.tmp
|
||||
endif
|
||||
ifdef ALT_PARALLEL_COMPILE_JOBS
|
||||
@$(ECHO) " --with-num-cores=$(ALT_PARALLEL_COMPILE_JOBS) " >> $@.tmp
|
||||
endif
|
||||
ifdef ALT_BOOTDIR
|
||||
@$(ECHO) " --with-boot-jdk=$(call UnixPath,$(ALT_BOOTDIR)) " >> $@.tmp
|
||||
endif
|
||||
ifdef ALT_CUPS_HEADERS_PATH
|
||||
@$(ECHO) " --with-cups-include=$(call UnixPath,$(ALT_CUPS_HEADERS_PATH)) " >> $@.tmp
|
||||
endif
|
||||
ifdef ALT_FREETYPE_HEADERS_PATH
|
||||
@$(ECHO) " --with-freetype=$(call UnixPath,$(ALT_FREETYPE_HEADERS_PATH)/..) " >> $@.tmp
|
||||
endif
|
||||
@if [ -f $@ ] ; then \
|
||||
if ! $(CMP) $@ $@.tmp > /dev/null ; then \
|
||||
$(CP) $@.tmp $@ ; \
|
||||
fi ; \
|
||||
else \
|
||||
$(CP) $@.tmp $@ ; \
|
||||
fi
|
||||
$(RM) $@.tmp
|
||||
|
||||
# Clobber all the built files
|
||||
clobber:: bridge2clobber
|
||||
bridge2clobber::
|
||||
$(RM) .bridge2*
|
||||
|
||||
# Keep track of phony targets
|
||||
PHONY_LIST += bridge2configure bridgeBuild bridge2clobber
|
||||
|
||||
###########################################################################
|
||||
# Javadocs
|
||||
#
|
||||
|
||||
javadocs:
|
||||
cd common/makefiles && $(MAKE) -f MakefileJavadoc.gmk
|
||||
|
||||
# Keep track of phony targets
|
||||
PHONY_LIST += javadocs
|
||||
|
||||
###########################################################################
|
||||
# JPRT targets
|
||||
|
||||
ifndef JPRT_ARCHIVE_BUNDLE
|
||||
JPRT_ARCHIVE_BUNDLE=/tmp/jprt_bundles/j2sdk-image.zip
|
||||
endif
|
||||
|
||||
jprt_build_product: DEBUG_LEVEL=release
|
||||
jprt_build_product: BUILD_DIRNAME=*-release
|
||||
jprt_build_product: jprt_build_generic
|
||||
|
||||
jprt_build_fastdebug: DEBUG_LEVEL=fastdebug
|
||||
jprt_build_fastdebug: BUILD_DIRNAME=*-fastdebug
|
||||
jprt_build_fastdebug: jprt_build_generic
|
||||
|
||||
jprt_build_debug: DEBUG_LEVEL=slowdebug
|
||||
jprt_build_debug: BUILD_DIRNAME=*-debug
|
||||
jprt_build_debug: jprt_build_generic
|
||||
|
||||
jprt_build_generic: EXTRA_MAKE_ARGS=LOG=nofile,info
|
||||
jprt_build_generic: $(JPRT_ARCHIVE_BUNDLE)
|
||||
|
||||
$(JPRT_ARCHIVE_BUNDLE): bridgeBuild bundles
|
||||
$(MKDIR) -p $(@D)
|
||||
$(RM) $@
|
||||
$(CP) $(BUILD_DIR_ROOT)/$(BUILD_DIRNAME)/bundles/j2sdk-image.zip $@
|
||||
|
||||
# Keep track of phony targets
|
||||
PHONY_LIST += jprt_build_product jprt_build_fastdebug jprt_build_debug \
|
||||
jprt_build_generic
|
||||
|
||||
###########################################################################
|
||||
# Phony targets
|
||||
.PHONY: $(PHONY_LIST)
|
||||
|
||||
# Force target
|
||||
FRC:
|
||||
|
||||
@@ -96,7 +96,8 @@
|
||||
</li>
|
||||
<li>Windows only:
|
||||
<ul>
|
||||
<li>Unix Command Tools (<a href="#cygwin">CYGWIN</a>)</li>
|
||||
<li>Unix Command Tools (<a href="#cygwin">CYGWIN</a>) <strong>or</strong></li>
|
||||
<li>Minimalist GNU for Windows (<a href="#msys">MinGW/MSYS</a>)</li>
|
||||
<li><a href="#dxsdk">DirectX 9.0 SDK</a> </li>
|
||||
</ul>
|
||||
</li>
|
||||
@@ -161,7 +162,7 @@
|
||||
<blockquote>
|
||||
This file often describes specific requirements for what we call the
|
||||
"minimum build environments" (MBE) for this
|
||||
specific release of the JDK,
|
||||
specific release of the JDK,
|
||||
Building with the MBE will generate the most compatible
|
||||
bits that install on, and run correctly on, the most variations
|
||||
of the same base OS and hardware architecture.
|
||||
@@ -241,16 +242,16 @@
|
||||
</tbody>
|
||||
</table>
|
||||
<p>
|
||||
These same sources do indeed build on many more systems than the
|
||||
above older generation systems, again the above is just a minimum.
|
||||
These same sources do indeed build on many more systems than the
|
||||
above older generation systems, again the above is just a minimum.
|
||||
<p>
|
||||
Compilation problems with newer or different C/C++ compilers is a
|
||||
common problem.
|
||||
Similarly, compilation problems related to changes to the
|
||||
Compilation problems with newer or different C/C++ compilers is a
|
||||
common problem.
|
||||
Similarly, compilation problems related to changes to the
|
||||
<tt>/usr/include</tt> or system header files is also a
|
||||
common problem with newer or unreleased OS versions.
|
||||
Please report these types of problems as bugs so that they
|
||||
can be dealt with accordingly.
|
||||
common problem with newer or unreleased OS versions.
|
||||
Please report these types of problems as bugs so that they
|
||||
can be dealt with accordingly.
|
||||
</blockquote>
|
||||
<!-- ------------------------------------------------------ -->
|
||||
<hr>
|
||||
@@ -266,15 +267,15 @@
|
||||
<p>
|
||||
<blockquote>
|
||||
After installing <a href="http://fedoraproject.org">Fedora</a> 9
|
||||
you need to install several build dependencies. The simplest
|
||||
way to do it is to execute the following commands as user
|
||||
you need to install several build dependencies. The simplest
|
||||
way to do it is to execute the following commands as user
|
||||
<tt>root</tt>:
|
||||
<p/>
|
||||
<code>yum-builddep java-1.6.0-openjdk</code>
|
||||
<p/>
|
||||
<code>yum install gcc gcc-c++</code>
|
||||
<p/>
|
||||
In addition, it's necessary to set a few environment variables for the build:
|
||||
In addition, it's necessary to set a few environment variables for the build:
|
||||
|
||||
<p/>
|
||||
<code>export LANG=C ALT_BOOTDIR=/usr/lib/jvm/java-openjdk</code>
|
||||
@@ -283,15 +284,15 @@
|
||||
<p>
|
||||
<blockquote>
|
||||
After installing <a href="http://fedoraproject.org">Fedora</a> 10
|
||||
you need to install several build dependencies. The simplest
|
||||
way to do it is to execute the following commands as user
|
||||
you need to install several build dependencies. The simplest
|
||||
way to do it is to execute the following commands as user
|
||||
<tt>root</tt>:
|
||||
<p/>
|
||||
<code>yum-builddep java-1.6.0-openjdk</code>
|
||||
<p/>
|
||||
<code>yum install gcc gcc-c++</code>
|
||||
<p/>
|
||||
In addition, it's necessary to set a few environment variables for the build:
|
||||
In addition, it's necessary to set a few environment variables for the build:
|
||||
|
||||
<p/>
|
||||
<code>export LANG=C ALT_BOOTDIR=/usr/lib/jvm/java-openjdk</code>
|
||||
@@ -300,15 +301,15 @@
|
||||
<p>
|
||||
<blockquote>
|
||||
After installing <a href="http://fedoraproject.org">Fedora</a> 11
|
||||
you need to install several build dependencies. The simplest
|
||||
way to do it is to execute the following commands as user
|
||||
you need to install several build dependencies. The simplest
|
||||
way to do it is to execute the following commands as user
|
||||
<tt>root</tt>:
|
||||
<p/>
|
||||
<code>yum-builddep java-1.6.0-openjdk</code>
|
||||
<p/>
|
||||
<code>yum install gcc gcc-c++</code>
|
||||
<p/>
|
||||
In addition, it's necessary to set a few environment variables for the build:
|
||||
In addition, it's necessary to set a few environment variables for the build:
|
||||
|
||||
<p/>
|
||||
<code>export LANG=C ALT_BOOTDIR=/usr/lib/jvm/java-openjdk</code>
|
||||
@@ -360,16 +361,16 @@
|
||||
<h4>Debian 5.0 (Lenny)</h4>
|
||||
<p>
|
||||
<blockquote>
|
||||
After installing <a href="http://debian.org">Debian</a> 5
|
||||
you need to install several build dependencies.
|
||||
The simplest way to install the build dependencies is to
|
||||
execute the following commands as user <tt>root</tt>:
|
||||
After installing <a href="http://debian.org">Debian</a> 5
|
||||
you need to install several build dependencies.
|
||||
The simplest way to install the build dependencies is to
|
||||
execute the following commands as user <tt>root</tt>:
|
||||
<p/>
|
||||
<code>aptitude build-dep openjdk-6</code>
|
||||
<p/>
|
||||
<code>aptitude install openjdk-6-jdk libmotif-dev</code>
|
||||
<p/>
|
||||
In addition, it's necessary to set a few environment variables for the build:
|
||||
In addition, it's necessary to set a few environment variables for the build:
|
||||
<p/>
|
||||
<code>export LANG=C ALT_BOOTDIR=/usr/lib/jvm/java-6-openjdk</code>
|
||||
</blockquote>
|
||||
@@ -380,52 +381,52 @@
|
||||
<h4>Ubuntu 8.04</h4>
|
||||
<p>
|
||||
<blockquote>
|
||||
After installing <a href="http://ubuntu.org">Ubuntu</a> 8.04
|
||||
you need to install several build dependencies.
|
||||
After installing <a href="http://ubuntu.org">Ubuntu</a> 8.04
|
||||
you need to install several build dependencies.
|
||||
<p/>
|
||||
First, you need to enable the universe repository in the
|
||||
Software Sources application and reload the repository
|
||||
information. The Software Sources application is available
|
||||
under the System/Administration menu.
|
||||
First, you need to enable the universe repository in the
|
||||
Software Sources application and reload the repository
|
||||
information. The Software Sources application is available
|
||||
under the System/Administration menu.
|
||||
<p/>
|
||||
The simplest way to install the build dependencies is to
|
||||
execute the following commands:
|
||||
The simplest way to install the build dependencies is to
|
||||
execute the following commands:
|
||||
<p/>
|
||||
<code>sudo aptitude build-dep openjdk-6</code>
|
||||
<p/>
|
||||
<code>sudo aptitude install openjdk-6-jdk</code>
|
||||
<p/>
|
||||
In addition, it's necessary to set a few environment variables for the build:
|
||||
In addition, it's necessary to set a few environment variables for the build:
|
||||
<p/>
|
||||
<code>export LANG=C ALT_BOOTDIR=/usr/lib/jvm/java-6-openjdk</code>
|
||||
</blockquote>
|
||||
<h4>Ubuntu 8.10</h4>
|
||||
<p>
|
||||
<blockquote>
|
||||
After installing <a href="http://ubuntu.org">Ubuntu</a> 8.10
|
||||
you need to install several build dependencies. The simplest
|
||||
way to do it is to execute the following commands:
|
||||
After installing <a href="http://ubuntu.org">Ubuntu</a> 8.10
|
||||
you need to install several build dependencies. The simplest
|
||||
way to do it is to execute the following commands:
|
||||
<p/>
|
||||
<code>sudo aptitude build-dep openjdk-6</code>
|
||||
<p/>
|
||||
<code>sudo aptitude install openjdk-6-jdk</code>
|
||||
<p/>
|
||||
In addition, it's necessary to set a few environment variables for the build:
|
||||
In addition, it's necessary to set a few environment variables for the build:
|
||||
<p/>
|
||||
<code>export LANG=C ALT_BOOTDIR=/usr/lib/jvm/java-6-openjdk</code>
|
||||
</blockquote>
|
||||
<h4>Ubuntu 9.04</h4>
|
||||
<p>
|
||||
<blockquote>
|
||||
After installing <a href="http://ubuntu.org">Ubuntu</a> 9.04
|
||||
you need to install several build dependencies. The simplest
|
||||
way to do it is to execute the following commands:
|
||||
After installing <a href="http://ubuntu.org">Ubuntu</a> 9.04
|
||||
you need to install several build dependencies. The simplest
|
||||
way to do it is to execute the following commands:
|
||||
<p/>
|
||||
<code>sudo aptitude build-dep openjdk-6</code>
|
||||
<p/>
|
||||
<code>sudo aptitude install openjdk-6-jdk</code>
|
||||
<p/>
|
||||
In addition, it's necessary to set a few environment variables for the build:
|
||||
In addition, it's necessary to set a few environment variables for the build:
|
||||
<p/>
|
||||
<code>export LANG=C ALT_BOOTDIR=/usr/lib/jvm/java-6-openjdk</code>
|
||||
</blockquote>
|
||||
@@ -436,20 +437,20 @@
|
||||
<h4>OpenSUSE 11.1</h4>
|
||||
<p>
|
||||
<blockquote>
|
||||
After installing <a href="http://opensuse.org">OpenSUSE</a> 11.1
|
||||
you need to install several build dependencies.
|
||||
The simplest way to install the build dependencies is to
|
||||
execute the following commands:
|
||||
After installing <a href="http://opensuse.org">OpenSUSE</a> 11.1
|
||||
you need to install several build dependencies.
|
||||
The simplest way to install the build dependencies is to
|
||||
execute the following commands:
|
||||
<p/>
|
||||
<code>sudo zypper source-install -d java-1_6_0-openjdk</code>
|
||||
<p/>
|
||||
<code>sudo zypper install make</code>
|
||||
<p/>
|
||||
In addition, it is necessary to set a few environment variables for the build:
|
||||
In addition, it is necessary to set a few environment variables for the build:
|
||||
<p/>
|
||||
<code>export LANG=C ALT_BOOTDIR=/usr/lib/jvm/java-1.6.0-openjdk</code>
|
||||
<p/>
|
||||
Finally, you need to unset the <code>JAVA_HOME</code> environment variable:
|
||||
Finally, you need to unset the <code>JAVA_HOME</code> environment variable:
|
||||
<p/>
|
||||
<code>export -n JAVA_HOME</code>
|
||||
</blockquote>
|
||||
@@ -460,14 +461,14 @@
|
||||
<h4>Mandriva Linux One 2009 Spring</h4>
|
||||
<p>
|
||||
<blockquote>
|
||||
After installing <a href="http://mandriva.org">Mandriva</a> Linux One 2009 Spring
|
||||
you need to install several build dependencies.
|
||||
The simplest way to install the build dependencies is to
|
||||
execute the following commands as user <tt>root</tt>:
|
||||
After installing <a href="http://mandriva.org">Mandriva</a> Linux One 2009 Spring
|
||||
you need to install several build dependencies.
|
||||
The simplest way to install the build dependencies is to
|
||||
execute the following commands as user <tt>root</tt>:
|
||||
<p/>
|
||||
<code>urpmi java-1.6.0-openjdk-devel ant make gcc gcc-c++ freetype-devel zip unzip libcups2-devel libxrender1-devel libalsa2-devel libstc++-static-devel libxtst6-devel libxi-devel</code>
|
||||
<p/>
|
||||
In addition, it is necessary to set a few environment variables for the build:
|
||||
In addition, it is necessary to set a few environment variables for the build:
|
||||
<p/>
|
||||
<code>export LANG=C ALT_BOOTDIR=/usr/lib/jvm/java-1.6.0-openjdk</code>
|
||||
</blockquote>
|
||||
@@ -478,18 +479,18 @@
|
||||
<h4>OpenSolaris 2009.06</h4>
|
||||
<p>
|
||||
<blockquote>
|
||||
After installing <a href="http://opensolaris.org">OpenSolaris</a> 2009.06
|
||||
you need to install several build dependencies.
|
||||
The simplest way to install the build dependencies is to
|
||||
execute the following commands:
|
||||
After installing <a href="http://opensolaris.org">OpenSolaris</a> 2009.06
|
||||
you need to install several build dependencies.
|
||||
The simplest way to install the build dependencies is to
|
||||
execute the following commands:
|
||||
<p/>
|
||||
<code>pfexec pkg install SUNWgmake SUNWj6dev SUNWant sunstudioexpress SUNWcups SUNWzip SUNWunzip SUNWxwhl SUNWxorg-headers SUNWaudh SUNWfreetype2</code>
|
||||
<p/>
|
||||
In addition, it is necessary to set a few environment variables for the build:
|
||||
In addition, it is necessary to set a few environment variables for the build:
|
||||
<p/>
|
||||
<code>export LANG=C ALT_COMPILER_PATH=/opt/SunStudioExpress/bin/ ALT_CUPS_HEADERS_PATH=/usr/include/</code>
|
||||
<p/>
|
||||
Finally, you need to make sure that the build process can find the Sun Studio compilers:
|
||||
Finally, you need to make sure that the build process can find the Sun Studio compilers:
|
||||
<p/>
|
||||
<code>export PATH=$PATH:/opt/SunStudioExpress/bin/</code>
|
||||
</blockquote>
|
||||
@@ -687,31 +688,20 @@
|
||||
</li>
|
||||
<li>
|
||||
<strong>Windows:</strong>
|
||||
Make sure you start your build inside a bash/sh/ksh shell
|
||||
and are using a <tt>make.exe</tt> utility built for that
|
||||
environment (a cygwin <tt>make.exe</tt> is not the same
|
||||
as a <tt>make.exe</tt> built for something like
|
||||
<a href="http://www.mkssoftware.com/">MKS</a>).
|
||||
<br>
|
||||
<b>WARNING:</b> Watch out on some make 3.81 versions, it may
|
||||
not work due to a lack of support for MS-DOS drive letter paths
|
||||
like <tt>C:/</tt> or <tt>C:\</tt>.
|
||||
<br>
|
||||
You may be able to use the information at the
|
||||
<a href="http://developer.mozilla.org/en/docs/Windows_build_prerequisites_using_cygwin#make" target="_blank">
|
||||
mozilla developer center</a>
|
||||
on this topic.
|
||||
<br>
|
||||
It's hoped that when make 3.82 starts shipping in a future cygwin
|
||||
release that this MS-DOS path issue will be fixed.
|
||||
<br>
|
||||
It may be possible to download the version at
|
||||
<a href="http://www.cmake.org/files/cygwin/make.exe">
|
||||
www.cmake.org make.exe</a>.
|
||||
<br>
|
||||
It might be necessary for you to build your own GNU make 3.81,
|
||||
see the <a href="#buildgmake">"Building GNU make"</a> section
|
||||
in that case.
|
||||
Make sure you start your build inside a bash/sh/ksh shell and are
|
||||
using a <tt>make.exe</tt> utility built for that environment.<br/>
|
||||
<strong>MKS</strong> builds need a native Windows version of GNU make
|
||||
(see <a href="#buildgmake">Building GNU make</a>).<br/>
|
||||
<strong>Cygwin</strong> builds need
|
||||
a make version which was specially compiled for the Cygwin environment
|
||||
(see <a href="#buildgmake">Building GNU make</a>). <strong>WARNING:</strong>
|
||||
the OpenJDK build with the make utility provided by Cygwin will <strong>not</strong>
|
||||
work because it does not support drive letters in paths. Make sure that
|
||||
your version of make will be found before the Cygwins default make by
|
||||
setting an appropriate <tt>PATH</tt> environment variable or by removing
|
||||
Cygwin's make after you built your own make version.<br/>
|
||||
<strong>MinGW/MSYS</strong> builds can use the default make which
|
||||
comes with the environment.
|
||||
</li>
|
||||
</ul>
|
||||
<p>
|
||||
@@ -727,7 +717,7 @@
|
||||
<!-- ------------------------------------------------------ -->
|
||||
<h4><a name="buildgmake">Building GNU make</a></h4>
|
||||
<blockquote>
|
||||
First step is to get the GNU make 3.81 source from
|
||||
First step is to get the GNU make 3.81 (or newer) source from
|
||||
<a href="http://ftp.gnu.org/pub/gnu/make/" target="_blank">
|
||||
ftp.gnu.org/pub/gnu/make/</a>.
|
||||
Building is a little different depending on the OS and unix toolset
|
||||
@@ -742,12 +732,24 @@
|
||||
<tt>./configure && gmake CC=gcc</tt>
|
||||
</li>
|
||||
<li>
|
||||
<strong>Windows for CYGWIN:</strong>
|
||||
<tt>./configure && make</tt>
|
||||
<strong>Windows for CYGWIN:</strong><br/>
|
||||
<tt>./configure</tt><br/>
|
||||
Add the line <tt>#define HAVE_CYGWIN_SHELL 1</tt> to the end of <tt>config.h</tt><br/>
|
||||
<tt>make</tt><br/>
|
||||
<br/>
|
||||
This should produce <tt>make.exe</tt> in the current directory.
|
||||
</li>
|
||||
<li>
|
||||
<strong>Windows for MKS: (CYGWIN is recommended)</strong>
|
||||
<tt>./configure && make -f Makefile.win32</tt>
|
||||
<strong>Windows for MKS:</strong><br/>
|
||||
Edit <tt>config.h.W32</tt> and uncomment the line <tt>#define HAVE_MKS_SHELL 1</tt><br/>
|
||||
Set the environment for your native compiler (e.g. by calling:<br/>
|
||||
<tt>"C:\Program Files\Microsoft SDKs\Windows\v7.1\Bin\SetEnv.cmd" /Release /xp /x64)</tt>
|
||||
<tt>nmake -f NMakefile.win32</tt>
|
||||
<br/>
|
||||
This should produce <tt>WinDebug/make.exe</tt> and <tt>WinRel/make.exe</tt>
|
||||
<br/>
|
||||
If you get the error: <tt>NMAKE : fatal error U1045: spawn failed : Permission denied</tt>
|
||||
you have to set the <tt>Read & execute</tt> permission for the file <tt>subproc.bat</tt>.
|
||||
</li>
|
||||
</ul>
|
||||
</blockquote>
|
||||
@@ -894,39 +896,135 @@
|
||||
<h4><a name="paths">Windows Paths</a></h4>
|
||||
<blockquote>
|
||||
<strong>Windows:</strong>
|
||||
Note that GNU make is a historic utility and is based very
|
||||
heavily on shell scripting, so it does not tolerate the Windows habit
|
||||
Note that GNU make, the shell and other Unix-tools required during the build
|
||||
do not tolerate the Windows habit
|
||||
of having spaces in pathnames or the use of the <tt>\</tt>characters in pathnames.
|
||||
Luckily on most Windows systems, you can use <tt>/</tt>instead of \, and
|
||||
there is always a 'short' pathname without spaces for any path that
|
||||
contains spaces.
|
||||
Unfortunately, this short pathname can be somewhat dynamic and the
|
||||
formula is difficult to explain.
|
||||
You can use <tt>cygpath</tt> utility to map pathnames with spaces
|
||||
or the <tt>\</tt>character into the <tt>C:/</tt> style of pathname
|
||||
(called 'mixed'), e.g.
|
||||
<tt>cygpath -s -m "<i>path</i>"</tt>.
|
||||
Luckily on most Windows systems, you can use <tt>/</tt>instead of <tt>\</tt>, and
|
||||
there is always a short <a href="http://en.wikipedia.org/wiki/8.3_filename">
|
||||
"8.3" pathname</a> without spaces for any path that contains spaces.
|
||||
Unfortunately, this short pathname is somewhat dynamic (i.e. dependant on the
|
||||
other files and directories inside a given directory) and can not be
|
||||
algorithmicly calculated by only looking at a specific path name.
|
||||
<p>
|
||||
The makefiles will try to translate any pathnames supplied
|
||||
to it into the <tt>C:/</tt> style automatically.
|
||||
</p>
|
||||
<p>
|
||||
Note that use of CYGWIN creates a unique problem with regards to
|
||||
Special care has to be taken if native Windows applications
|
||||
like <tt>nmake</tt> or <tt>cl</tt> are called with file arguments processed
|
||||
by Unix-tools like <tt>make</tt> or <tt>sh</tt>!
|
||||
</p>
|
||||
</blockquote>
|
||||
<!-- ------------------------------------------------------ -->
|
||||
<h4><a name="paths">Windows build environments</a></h4>
|
||||
<blockquote>
|
||||
Building on Windows requires a Unix-like environment, notably a Unix-like shell.
|
||||
There are several such environments available of which
|
||||
<a href="http://www.mkssoftware.com/products/tk/ds_tkdev.asp">MKS</a>,
|
||||
<a href="http://www.cygwin.com/">Cygwin</a> and
|
||||
<a href="http://www.mingw.org/wiki/MSYS">MinGW/MSYS</a> are currently supported for
|
||||
the OpenJDK build. One of the differences of these three systems is the way
|
||||
they handle Windows path names, particularly path names which contain
|
||||
spaces, backslashes as path separators and possibly drive letters. Depending
|
||||
on the use case and the specifics of each environment these path problems can
|
||||
be solved by a combination of quoting whole paths, translating backslashes to
|
||||
forward slashes, escaping backslashes with additional backslashes and
|
||||
translating the path names to their <a href="http://en.wikipedia.org/wiki/8.3_filename">
|
||||
"8.3" version</a>.
|
||||
<p>
|
||||
As of this writing (MKS ver. 9.4, Cygwin ver. 1.7.9, MinGW/MSYS 1.0.17),
|
||||
MKS builds are known to be the fastest Windows builds while MingGW/MSYS
|
||||
builds are slightly slower (about 10%) than MKS builds and Cygwin builds
|
||||
require nearly twice the time (about 180%) of MKS builds (e.g. on a
|
||||
DualCore i7 notebook with 8GB of RAM, HDD and 64-bit Windows 7 operating system
|
||||
the complete OpenJDK 8 product build takes about 49min with MKS, 54min with
|
||||
MinGW/MSYS and 88min with Cygwin).
|
||||
</p>
|
||||
<p>
|
||||
Mixing tools from the different Unix emulation environments is not a good
|
||||
idea and will probably not work!
|
||||
</p>
|
||||
<p>
|
||||
<strong>MKS:</strong> is a commercial product which includes
|
||||
all the Unix utilities which are required to build the OpenJDK except GNU
|
||||
make. In pre-OpenJDK times it was the only supported build environment on
|
||||
Windows. The MKS tools support Windows paths with drive letters and
|
||||
forward slashes as path separator. Paths in environment variables like (for
|
||||
example) <tt>PATH</tt> are separated by semicolon '<tt>;</tt>'.
|
||||
</p>
|
||||
<p>
|
||||
Recent versions of MKS provide the <tt>dosname</tt> utility to convert paths
|
||||
with spaces to short (8.3) path names,e .g.
|
||||
<tt>dosname -s "<i>path</i>"</tt>.
|
||||
</p>
|
||||
<p>
|
||||
If you are using the MKS environment, you need a native Windows version
|
||||
of Gnu make <a href="#buildgmake">which you can easily build yourself</a>.
|
||||
</p>
|
||||
<p>
|
||||
<strong>Cygwin:</strong>
|
||||
is an open source, Linux-like environment which tries to emulate
|
||||
a complete POSIX layer on Windows. It tries to be smart about path names
|
||||
and can usually handle all kinds of paths if they are correctly quoted
|
||||
or escaped although internally it maps drive letters <tt><drive>:</tt>
|
||||
to a virtual directory <tt>/cygdrive/<drive></tt>.
|
||||
</p>
|
||||
<p>
|
||||
You can always use the <tt>cygpath</tt> utility to map pathnames with spaces
|
||||
or the backslash character into the <tt>C:/</tt> style of pathname
|
||||
(called 'mixed'), e.g. <tt>cygpath -s -m "<i>path</i>"</tt>.
|
||||
</p>
|
||||
<p>
|
||||
Note that the use of CYGWIN creates a unique problem with regards to
|
||||
setting <a href="#path"><tt>PATH</tt></a>. Normally on Windows
|
||||
the <tt>PATH</tt> variable contains directories
|
||||
separated with the ";" character (Solaris and Linux uses ":").
|
||||
separated with the ";" character (Solaris and Linux use ":").
|
||||
With CYGWIN, it uses ":", but that means that paths like "C:/path"
|
||||
cannot be placed in the CYGWIN version of <tt>PATH</tt> and
|
||||
instead CYGWIN uses something like <tt>/cygdrive/c/path</tt>
|
||||
which CYGWIN understands, but only CYGWIN understands.
|
||||
So be careful with paths on Windows.
|
||||
</p>
|
||||
<p>
|
||||
If you are using the Cygwin environment, you need to
|
||||
<a href="#buildgmake">compile your own version</a>
|
||||
of GNU make because the default Cygwin make can not handle drive letters in paths.
|
||||
</p>
|
||||
<p>
|
||||
<strong>MinGW/MSYS:</strong>
|
||||
MinGW ("Minimalist GNU for Windows") is a collection of free Windows
|
||||
specific header files and import libraries combined with GNU toolsets that
|
||||
allow one to produce native Windows programs that do not rely on any
|
||||
3rd-party C runtime DLLs. MSYS is a supplement to MinGW which allows building
|
||||
applications and programs which rely on traditional UNIX tools to
|
||||
be present. Among others this includes tools like <tt>bash</tt> and <tt>make</tt>.
|
||||
</p>
|
||||
<p>
|
||||
Like Cygwin, MinGW/MSYS can handle different types of path formats. They
|
||||
are internally converted to paths with forward slashes and drive letters
|
||||
<tt><drive>:</tt> replaced by a virtual
|
||||
directory <tt>/<drive></tt>. Additionally, MSYS automatically
|
||||
detects binaries compiled for the MSYS environment and feeds them with the
|
||||
internal, Unix-style path names. If native Windows applications are called
|
||||
from within MSYS programs their path arguments are automatically converted
|
||||
back to Windows style path names with drive letters and backslashes as
|
||||
path separators. This may cause problems for Windows applications which
|
||||
use forward slashes as parameter separator (e.g. <tt>cl /nologo /I</tt>)
|
||||
because MSYS may wrongly <a href="http://mingw.org/wiki/Posix_path_conversion">
|
||||
replace such parameters by drive letters</a>.
|
||||
</p>
|
||||
<p>
|
||||
If you are using the MinGW/MSYS system you can use the default make
|
||||
version supplied by the environment.
|
||||
</p>
|
||||
</blockquote>
|
||||
<!-- ------------------------------------------------------ -->
|
||||
<h4><a name="windows_checklist">Basic Windows Check List</a></h4>
|
||||
<blockquote>
|
||||
<ol>
|
||||
<li>
|
||||
Install the
|
||||
<a href="#cygwin">CYGWIN product</a>.
|
||||
Install one of the
|
||||
<a href="#cygwin">CYGWIN</a>, <a href="#msys">MinGW/MSYS</a> or
|
||||
<a href="http://www.mkssoftware.com/products/tk/ds_tkdev.asp">MKS</a> environments.
|
||||
</li>
|
||||
<li>
|
||||
Install the
|
||||
@@ -1097,9 +1195,9 @@
|
||||
<a href="http://www.oracle.com/technetwork/server-storage/solarisstudio/downloads/index.htm" target="_blank">
|
||||
Sun Studio 12 Update 1 Compilers</a>
|
||||
(containing version 5.10 of the C and C++ compilers) is required,
|
||||
including specific patches.
|
||||
including specific patches.
|
||||
<p>
|
||||
The Solaris SPARC patch list is:
|
||||
The Solaris SPARC patch list is:
|
||||
<ul>
|
||||
<li>
|
||||
118683-05: SunOS 5.10: Patch for profiling libraries and assembler
|
||||
@@ -1286,7 +1384,8 @@
|
||||
The XRender header file is included with the other X11 header files
|
||||
in the package <strong>SFWxwinc</strong> on new enough versions of
|
||||
Solaris and will be installed in
|
||||
<tt>/usr/X11/include/X11/extensions/Xrender.h</tt>
|
||||
<tt>/usr/X11/include/X11/extensions/Xrender.h</tt> or
|
||||
<tt>/usr/openwin/share/include/X11/extensions/Xrender.h</tt>
|
||||
</p><p>
|
||||
<strong>Linux:</strong>
|
||||
XRender header files are required for building the
|
||||
@@ -1456,7 +1555,9 @@
|
||||
<td>Devel</td>
|
||||
<td>make</td>
|
||||
<td>The GNU version of the 'make' utility built for CYGWIN.<br>
|
||||
<b>NOTE</b>: See <a href="#gmake">the GNU make section</a></td>
|
||||
<b>NOTE</b>: the Cygwin make can not be used to build the
|
||||
OpenJDK. You only need it to build your own version of make
|
||||
(see <a href="#gmake">the GNU make section</a>)</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>m4.exe</td>
|
||||
@@ -1521,6 +1622,21 @@
|
||||
So it's important that the Visual Studio paths in PATH preceed
|
||||
the CYGWIN path <tt>/usr/bin</tt>.
|
||||
</blockquote>
|
||||
<strong> Minimalist GNU for Windows (<a name="msys">MinGW/MSYS</a>)</strong>
|
||||
<blockquote>
|
||||
Alternatively, the set of unix command tools for the OpenJDK build on
|
||||
Windows can be supplied by
|
||||
<a href="http://www.mingw.org/wiki/MSYS" target="_blank">MinGW/MSYS</a>.
|
||||
<p>
|
||||
In addition to the tools which will be installed by default, you have
|
||||
to manually install the <tt>msys-zip</tt> and <tt>msys-unzip</tt> packages.
|
||||
This can be easily done with the MinGW command line installer:<br/>
|
||||
<tt><br/>
|
||||
mingw-get.exe install msys-zip<br/>
|
||||
mingw-get.exe install msys-unzip<br/>
|
||||
</tt>
|
||||
</p>
|
||||
</blockquote>
|
||||
<strong><a name="dxsdk">Microsoft DirectX 9.0 SDK header files and libraries</a></strong>
|
||||
<blockquote>
|
||||
Microsoft DirectX 9.0 SDK (Summer 2004)
|
||||
@@ -1781,10 +1897,10 @@
|
||||
</dd>
|
||||
<dt><a name="ALT_OPENWIN_HOME"><tt>ALT_OPENWIN_HOME</tt></a></dt>
|
||||
<dd>
|
||||
The top-level directory of the libraries and include files for the platform's
|
||||
graphical programming environment. The default location is platform specific.
|
||||
For example, on Linux it defaults to <tt>/usr/X11R6/</tt>.
|
||||
</dd>
|
||||
The top-level directory of the libraries and include files for the platform's
|
||||
graphical programming environment. The default location is platform specific.
|
||||
For example, on Linux it defaults to <tt>/usr/X11R6/</tt>.
|
||||
</dd>
|
||||
<dt><strong>Windows specific:</strong></dt>
|
||||
<dd>
|
||||
<dl>
|
||||
@@ -1792,9 +1908,9 @@
|
||||
<dd>
|
||||
The location of the
|
||||
Microsoft Windows SDK where some tools will be
|
||||
located.
|
||||
The default is whatever WINDOWSSDKDIR is set to
|
||||
(or WindowsSdkDir) or the path
|
||||
located.
|
||||
The default is whatever WINDOWSSDKDIR is set to
|
||||
(or WindowsSdkDir) or the path
|
||||
<br>
|
||||
<tt>c:\Program Files\Microsoft SDKs\Windows\v7.0a</tt>
|
||||
</dd>
|
||||
@@ -1823,17 +1939,17 @@
|
||||
is that <a href="#ALT_COMPILER_PATH"><tt>ALT_COMPILER_PATH</tt></a> is set
|
||||
to point to the cross-compiler and that any cross-compilation specific flags
|
||||
are passed using <a href="#EXTRA_CFLAGS"><tt>EXTRA_CFLAGS</tt></a>.
|
||||
The <a href="#ALT_OPENWIN_HOME"><tt>ALT_OPENWIN_HOME</tt></a> variable should
|
||||
also be set to point to the graphical header files (e.g. X11) provided with
|
||||
the cross-compiler.
|
||||
The <a href="#ALT_OPENWIN_HOME"><tt>ALT_OPENWIN_HOME</tt></a> variable should
|
||||
also be set to point to the graphical header files (e.g. X11) provided with
|
||||
the cross-compiler.
|
||||
When cross-compiling we skip execution of any demos etc that may be built, and
|
||||
also skip binary-file verification.
|
||||
</dd>
|
||||
<dt><tt><a name="EXTRA_CFLAGS">EXTRA_CFLAGS</a></tt> </dt>
|
||||
<dd>
|
||||
Used to pass cross-compilation options to the cross-compiler.
|
||||
Used to pass cross-compilation options to the cross-compiler.
|
||||
These are added to the <tt>CFLAGS</tt> and <tt>CXXFLAGS</tt> variables.
|
||||
</dd>
|
||||
</dd>
|
||||
<dt><tt><a name="USE_ONLY_BOOTDIR_TOOLS">USE_ONLY_BOOTDIR_TOOLS</a></tt> </dt>
|
||||
<dd>
|
||||
Used primarily for cross-compilation builds (and always set in that case)
|
||||
@@ -1868,23 +1984,23 @@
|
||||
<dt><tt><a name="BUILD_HEADLESS_ONLY"></a>BUILD_HEADLESS_ONLY</tt> </dt>
|
||||
<dd>
|
||||
Used when the build environment has no graphical capabilities at all. This
|
||||
excludes building anything that requires graphical libraries to be available.
|
||||
excludes building anything that requires graphical libraries to be available.
|
||||
</dd>
|
||||
<dt><tt><a name="JAVASE_EMBEDDED"></a>JAVASE_EMBEDDED</tt> </dt>
|
||||
<dd>
|
||||
Used to indicate this is a build of the Oracle Java SE Embedded product.
|
||||
This will enable the directives included in the SE-Embedded specific build
|
||||
files.
|
||||
Used to indicate this is a build of the Oracle Java SE Embedded product.
|
||||
This will enable the directives included in the SE-Embedded specific build
|
||||
files.
|
||||
</dd>
|
||||
<dt><tt><a name="LIBZIP_CAN_USE_MMAP">LIBZIP_CAN_USE_MMAP</a></tt> </dt>
|
||||
<dd>
|
||||
If set to false, disables the use of mmap by the zip utility. Otherwise,
|
||||
mmap will be used.
|
||||
If set to false, disables the use of mmap by the zip utility. Otherwise,
|
||||
mmap will be used.
|
||||
</dd>
|
||||
<dt><tt><a name="COMPRESS_JARS"></a>COMPRESS_JARS</tt> </dt>
|
||||
<dd>
|
||||
If set to true, causes certain jar files that would otherwise be built without
|
||||
compression, to use compression.
|
||||
If set to true, causes certain jar files that would otherwise be built without
|
||||
compression, to use compression.
|
||||
</dd>
|
||||
</dl>
|
||||
</dd>
|
||||
|
||||
@@ -23,18 +23,38 @@
|
||||
#
|
||||
|
||||
script_dir=`dirname $0`
|
||||
closed_script_dir="$script_dir/../../jdk/make/closed/autoconf"
|
||||
|
||||
# Create a timestamp as seconds since epoch
|
||||
TIMESTAMP=`date +%s`
|
||||
if test "x`uname -s`" = "xSunOS"; then
|
||||
# date +%s is not available on Solaris, use this workaround
|
||||
# from http://solarisjedi.blogspot.co.uk/2006/06/solaris-date-command-and-epoch-time.html
|
||||
TIMESTAMP=`/usr/bin/truss /usr/bin/date 2>&1 | nawk -F= '/^time\(\)/ {gsub(/ /,"",$2);print $2}'`
|
||||
# On Solaris /bin/sh doesn't support test -e but /usr/bin/test does.
|
||||
TEST=`which test`
|
||||
else
|
||||
TIMESTAMP=`date +%s`
|
||||
TEST="test"
|
||||
fi
|
||||
|
||||
if $TEST "$CUSTOM_CONFIG_DIR" = ""; then
|
||||
custom_script_dir="$script_dir/../../jdk/make/closed/autoconf"
|
||||
else
|
||||
custom_script_dir=$CUSTOM_CONFIG_DIR
|
||||
fi
|
||||
|
||||
custom_hook=$custom_script_dir/custom-hook.m4
|
||||
|
||||
echo Generating generated-configure.sh
|
||||
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.
|
||||
if $TEST -e $custom_hook; then
|
||||
echo Generating custom generated-configure.sh
|
||||
# We have custom sources available; also generate configure script
|
||||
# with custom 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
|
||||
sed -e "s|AC_DEFUN_ONCE(\[CUSTOM_HOOK\])|m4_include([$custom_hook])|" | autoconf -W all -I$script_dir - > $custom_script_dir/generated-configure.sh
|
||||
rm -rf autom4te.cache
|
||||
else
|
||||
echo No custom hook found: $custom_hook
|
||||
fi
|
||||
|
||||
@@ -34,7 +34,7 @@ AC_DEFUN([ADD_JVM_ARG_IF_OK],
|
||||
fi
|
||||
])
|
||||
|
||||
AC_DEFUN([WHICHCMD],
|
||||
AC_DEFUN([SET_FULL_PATH],
|
||||
[
|
||||
# Translate "gcc -E" into "`which gcc` -E" ie
|
||||
# extract the full path to the binary and at the
|
||||
@@ -46,7 +46,7 @@ AC_DEFUN([WHICHCMD],
|
||||
cdr="${tmp#* }"
|
||||
# On windows we want paths without spaces.
|
||||
if test "x$OPENJDK_BUILD_OS" = "xwindows"; then
|
||||
WHICHCMD_SPACESAFE(car)
|
||||
SET_FULL_PATH_SPACESAFE(car)
|
||||
else
|
||||
# "which" is not portable, but is used here
|
||||
# because we know that the command exists!
|
||||
@@ -66,15 +66,19 @@ AC_DEFUN([SPACESAFE],
|
||||
HAS_SPACE=`echo "[$]$1" | grep " "`
|
||||
if test "x$HAS_SPACE" != x; then
|
||||
if test "x$OPENJDK_BUILD_OS" = "xwindows"; then
|
||||
# First convert it to DOS-style, short mode (no spaces)
|
||||
$1=`$CYGPATH -s -m -a "[$]$1"`
|
||||
$1=`$CYGPATH -u "[$]$1"`
|
||||
# Now it's case insensitive; let's make it lowercase to improve readability
|
||||
$1=`$ECHO "[$]$1" | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvqxyz'`
|
||||
# Now convert it back to Unix-stile (cygpath)
|
||||
$1=`$CYGPATH -u "[$]$1"`
|
||||
else
|
||||
AC_MSG_ERROR([You cannot have spaces in $2! "[$]$1"])
|
||||
fi
|
||||
fi
|
||||
])
|
||||
|
||||
AC_DEFUN([WHICHCMD_SPACESAFE],
|
||||
AC_DEFUN([SET_FULL_PATH_SPACESAFE],
|
||||
[
|
||||
# Translate long cygdrive or C:\sdfsf path
|
||||
# into a short mixed mode path that has no
|
||||
@@ -148,15 +152,16 @@ AC_DEFUN_ONCE([BASIC_INIT],
|
||||
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`
|
||||
])
|
||||
|
||||
# Setup basic configuration paths, and platform-specific stuff related to PATHs.
|
||||
AC_DEFUN_ONCE([BASIC_SETUP_PATHS],
|
||||
[
|
||||
# Locate the directory of this script.
|
||||
SCRIPT="[$]0"
|
||||
REMOVE_SYMBOLIC_LINKS(SCRIPT)
|
||||
AUTOCONF_DIR=`dirname [$]0`
|
||||
|
||||
# Where is the source? It is located two levels above the configure script.
|
||||
CURDIR="$PWD"
|
||||
cd "$AUTOCONF_DIR/../.."
|
||||
@@ -172,18 +177,12 @@ 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=":"
|
||||
@@ -194,6 +193,36 @@ if test "x$OPENJDK_BUILD_OS" = "xwindows"; then
|
||||
PATH_SEP=";"
|
||||
fi
|
||||
AC_SUBST(PATH_SEP)
|
||||
|
||||
# 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
|
||||
else
|
||||
SYS_ROOT=/
|
||||
fi
|
||||
AC_SUBST(SYS_ROOT)
|
||||
|
||||
AC_ARG_WITH([tools-dir], [AS_HELP_STRING([--with-tools-dir],
|
||||
[search this directory for (cross-compiling) 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 (for cross-compiling)])],
|
||||
[
|
||||
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
|
||||
])
|
||||
|
||||
])
|
||||
|
||||
AC_DEFUN_ONCE([BASIC_SETUP_OUTPUT_DIR],
|
||||
@@ -236,7 +265,13 @@ AC_SUBST(OUTPUT_ROOT, $OUTPUT_ROOT)
|
||||
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.
|
||||
# The hotspot-spec.gmk file contains legacy variables for the hotspot make system.
|
||||
AC_CONFIG_FILES([$OUTPUT_ROOT/hotspot-spec.gmk:$AUTOCONF_DIR/hotspot-spec.gmk.in])
|
||||
# The bootcycle-spec.gmk file contains support for boot cycle builds.
|
||||
AC_CONFIG_FILES([$OUTPUT_ROOT/bootcycle-spec.gmk:$AUTOCONF_DIR/bootcycle-spec.gmk.in])
|
||||
# The compare.sh is used to compare the build output to other builds.
|
||||
AC_CONFIG_FILES([$OUTPUT_ROOT/compare.sh:$AUTOCONF_DIR/compare.sh.in])
|
||||
# Spec.sh is currently used by compare-objects.sh
|
||||
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
|
||||
@@ -261,6 +296,79 @@ AC_SUBST(BUILD_LOG_WRAPPER)
|
||||
|
||||
#%%% Simple tools %%%
|
||||
|
||||
# Check if we have found a usable version of make
|
||||
# $1: the path to a potential make binary (or empty)
|
||||
# $2: the description on how we found this
|
||||
AC_DEFUN([BASIC_CHECK_MAKE_VERSION],
|
||||
[
|
||||
MAKE_CANDIDATE="$1"
|
||||
DESCRIPTION="$2"
|
||||
if test "x$MAKE_CANDIDATE" != x; then
|
||||
AC_MSG_NOTICE([Testing potential make at $MAKE_CANDIDATE, found using $DESCRIPTION])
|
||||
SET_FULL_PATH(MAKE_CANDIDATE)
|
||||
MAKE_VERSION_STRING=`$MAKE_CANDIDATE --version | $HEAD -n 1`
|
||||
IS_GNU_MAKE=`$ECHO $MAKE_VERSION_STRING | $GREP 'GNU Make'`
|
||||
if test "x$IS_GNU_MAKE" = x; then
|
||||
AC_MSG_NOTICE([Found potential make at $MAKE_CANDIDATE, however, this is not GNU Make. Ignoring.])
|
||||
else
|
||||
IS_MODERN_MAKE=`$ECHO $MAKE_VERSION_STRING | $GREP '3.8[[12346789]]'`
|
||||
if test "x$IS_MODERN_MAKE" = x; then
|
||||
AC_MSG_NOTICE([Found GNU make at $MAKE_CANDIDATE, however this is not version 3.81 or later. (it is: $MAKE_VERSION_STRING). Ignoring.])
|
||||
else
|
||||
FOUND_MAKE=$MAKE_CANDIDATE
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
])
|
||||
|
||||
# Goes looking for a usable version of GNU make.
|
||||
AC_DEFUN([BASIC_CHECK_GNU_MAKE],
|
||||
[
|
||||
# We need to find a recent version of GNU make. Especially on Solaris, this can be tricky.
|
||||
if test "x$MAKE" != x; then
|
||||
# User has supplied a make, test it.
|
||||
if test ! -f "$MAKE"; then
|
||||
AC_MSG_ERROR([The specified make (by MAKE=$MAKE) is not found.])
|
||||
fi
|
||||
BASIC_CHECK_MAKE_VERSION("$MAKE", [user supplied MAKE=])
|
||||
if test "x$FOUND_MAKE" = x; then
|
||||
AC_MSG_ERROR([The specified make (by MAKE=$MAKE) is not GNU make 3.81 or newer.])
|
||||
fi
|
||||
else
|
||||
# Try our hardest to locate a correct version of GNU make
|
||||
AC_PATH_PROGS(CHECK_GMAKE, gmake)
|
||||
BASIC_CHECK_MAKE_VERSION("$CHECK_GMAKE", [gmake in PATH])
|
||||
|
||||
if test "x$FOUND_MAKE" = x; then
|
||||
AC_PATH_PROGS(CHECK_MAKE, make)
|
||||
BASIC_CHECK_MAKE_VERSION("$CHECK_MAKE", [make in PATH])
|
||||
fi
|
||||
|
||||
if test "x$FOUND_MAKE" = x; then
|
||||
if test "x$TOOLS_DIR" != x; then
|
||||
# We have a tools-dir, check that as well before giving up.
|
||||
OLD_PATH=$PATH
|
||||
PATH=$TOOLS_DIR:$PATH
|
||||
AC_PATH_PROGS(CHECK_TOOLSDIR_GMAKE, gmake)
|
||||
BASIC_CHECK_MAKE_VERSION("$CHECK_TOOLSDIR_GMAKE", [gmake in tools-dir])
|
||||
if test "x$FOUND_MAKE" = x; then
|
||||
AC_PATH_PROGS(CHECK_TOOLSDIR_MAKE, make)
|
||||
BASIC_CHECK_MAKE_VERSION("$CHECK_TOOLSDIR_MAKE", [make in tools-dir])
|
||||
fi
|
||||
PATH=$OLD_PATH
|
||||
fi
|
||||
fi
|
||||
|
||||
if test "x$FOUND_MAKE" = x; then
|
||||
AC_MSG_ERROR([Cannot find 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
|
||||
fi
|
||||
|
||||
MAKE=$FOUND_MAKE
|
||||
AC_SUBST(MAKE)
|
||||
AC_MSG_NOTICE([Using GNU make 3.81 (or later) at $FOUND_MAKE (version: $MAKE_VERSION_STRING)])
|
||||
])
|
||||
|
||||
AC_DEFUN([BASIC_CHECK_FIND_DELETE],
|
||||
[
|
||||
# Test if find supports -delete
|
||||
@@ -283,10 +391,30 @@ AC_DEFUN([BASIC_CHECK_FIND_DELETE],
|
||||
rmdir $DELETEDIR
|
||||
])
|
||||
|
||||
# Test that variable $1 denoting a program is not empty. If empty, exit with an error.
|
||||
# $1: variable to check
|
||||
# $2: executable name to print in warning (optional)
|
||||
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
|
||||
if test "x[$]$1" = x; then
|
||||
if test "x$2" = x; then
|
||||
PROG_NAME=translit($1,A-Z,a-z)
|
||||
else
|
||||
PROG_NAME=$2
|
||||
fi
|
||||
AC_MSG_NOTICE([Could not find $PROG_NAME!])
|
||||
AC_MSG_ERROR([Cannot continue])
|
||||
fi
|
||||
])
|
||||
|
||||
# Does AC_PATH_PROG followed by CHECK_NONEMPTY.
|
||||
# Arguments as AC_PATH_PROG:
|
||||
# $1: variable to set
|
||||
# $2: executable name to look for
|
||||
AC_DEFUN([BASIC_REQUIRE_PROG],
|
||||
[
|
||||
AC_PATH_PROGS($1, $2)
|
||||
CHECK_NONEMPTY($1, $2)
|
||||
])
|
||||
|
||||
AC_DEFUN_ONCE([BASIC_SETUP_TOOLS],
|
||||
@@ -295,90 +423,68 @@ AC_DEFUN_ONCE([BASIC_SETUP_TOOLS],
|
||||
# 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.
|
||||
# needed to download the devkit.
|
||||
|
||||
# First are all the simple required tools.
|
||||
BASIC_REQUIRE_PROG(BASENAME, basename)
|
||||
BASIC_REQUIRE_PROG(CAT, cat)
|
||||
BASIC_REQUIRE_PROG(CHMOD, chmod)
|
||||
BASIC_REQUIRE_PROG(CMP, cmp)
|
||||
BASIC_REQUIRE_PROG(CP, cp)
|
||||
BASIC_REQUIRE_PROG(CPIO, cpio)
|
||||
BASIC_REQUIRE_PROG(CUT, cut)
|
||||
BASIC_REQUIRE_PROG(DATE, date)
|
||||
BASIC_REQUIRE_PROG(DF, df)
|
||||
BASIC_REQUIRE_PROG(DIFF, [gdiff diff])
|
||||
BASIC_REQUIRE_PROG(ECHO, echo)
|
||||
BASIC_REQUIRE_PROG(EXPR, expr)
|
||||
BASIC_REQUIRE_PROG(FILE, file)
|
||||
BASIC_REQUIRE_PROG(FIND, find)
|
||||
BASIC_REQUIRE_PROG(HEAD, head)
|
||||
BASIC_REQUIRE_PROG(LN, ln)
|
||||
BASIC_REQUIRE_PROG(LS, ls)
|
||||
BASIC_REQUIRE_PROG(MKDIR, mkdir)
|
||||
BASIC_REQUIRE_PROG(MV, mv)
|
||||
BASIC_REQUIRE_PROG(PRINTF, printf)
|
||||
BASIC_REQUIRE_PROG(SH, sh)
|
||||
BASIC_REQUIRE_PROG(SORT, sort)
|
||||
BASIC_REQUIRE_PROG(TAIL, tail)
|
||||
BASIC_REQUIRE_PROG(TAR, tar)
|
||||
BASIC_REQUIRE_PROG(TEE, tee)
|
||||
BASIC_REQUIRE_PROG(TOUCH, touch)
|
||||
BASIC_REQUIRE_PROG(TR, tr)
|
||||
BASIC_REQUIRE_PROG(UNIQ, uniq)
|
||||
BASIC_REQUIRE_PROG(UNZIP, unzip)
|
||||
BASIC_REQUIRE_PROG(WC, wc)
|
||||
BASIC_REQUIRE_PROG(XARGS, xargs)
|
||||
BASIC_REQUIRE_PROG(ZIP, zip)
|
||||
|
||||
# Then required tools that require some special treatment.
|
||||
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_GREP
|
||||
CHECK_NONEMPTY(GREP)
|
||||
AC_PROG_EGREP
|
||||
CHECK_NONEMPTY(EGREP)
|
||||
AC_PROG_FGREP
|
||||
CHECK_NONEMPTY(FGREP)
|
||||
AC_PROG_SED
|
||||
CHECK_NONEMPTY(SED)
|
||||
|
||||
AC_PATH_PROGS(NAWK, [nawk gawk awk])
|
||||
CHECK_NONEMPTY(NAWK)
|
||||
|
||||
BASIC_CHECK_GNU_MAKE
|
||||
|
||||
BASIC_REQUIRE_PROG(RM, rm)
|
||||
RM="$RM -f"
|
||||
|
||||
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)
|
||||
# Non-required basic tools
|
||||
|
||||
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
|
||||
@@ -390,16 +496,11 @@ 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_PROGS(READELF, [readelf greadelf])
|
||||
AC_PATH_PROGS(OBJDUMP, [objdump gobjdump])
|
||||
AC_PATH_PROG(HG, hg)
|
||||
])
|
||||
|
||||
|
||||
|
||||
AC_DEFUN_ONCE([BASIC_COMPILE_UNCYGDRIVE],
|
||||
[
|
||||
# When using cygwin, we need a wrapper binary that renames
|
||||
@@ -433,6 +534,8 @@ if test "x$OPENJDK_BUILD_OS" = xwindows; then
|
||||
fi
|
||||
AC_MSG_RESULT([yes])
|
||||
rm -f $OUTPUT_ROOT/uncygdrive?.??? $OUTPUT_ROOT/uncygdrive.obj
|
||||
# The path to uncygdrive to use should be Unix-style
|
||||
UNCYGDRIVE="$OUTPUT_ROOT/uncygdrive.exe"
|
||||
fi
|
||||
|
||||
AC_SUBST(UNCYGDRIVE)
|
||||
|
||||
@@ -23,22 +23,186 @@
|
||||
# questions.
|
||||
#
|
||||
|
||||
# Fixes paths on windows to be mixed mode short.
|
||||
AC_DEFUN([BOOTJDK_WIN_FIX_PATH],
|
||||
# Execute the check given as argument, and verify the result
|
||||
# If the Boot JDK was previously found, do nothing
|
||||
# $1 A command line (typically autoconf macro) to execute
|
||||
AC_DEFUN([BOOTJDK_DO_CHECK],
|
||||
[
|
||||
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"
|
||||
if test "x$BOOT_JDK_FOUND" = xno; then
|
||||
# Now execute the test
|
||||
$1
|
||||
|
||||
# If previous step claimed to have found a JDK, check it to see if it seems to be valid.
|
||||
if test "x$BOOT_JDK_FOUND" = xmaybe; then
|
||||
# Do we have a bin/java?
|
||||
if test ! -x "$BOOT_JDK/bin/java"; then
|
||||
AC_MSG_NOTICE([Potential Boot JDK found at $BOOT_JDK did not contain bin/java; ignoring])
|
||||
BOOT_JDK_FOUND=no
|
||||
else
|
||||
# Do we have a bin/javac?
|
||||
if test ! -x "$BOOT_JDK/bin/javac"; then
|
||||
AC_MSG_NOTICE([Potential Boot JDK found at $BOOT_JDK did not contain bin/javac; ignoring])
|
||||
AC_MSG_NOTICE([(This might be an JRE instead of an JDK)])
|
||||
BOOT_JDK_FOUND=no
|
||||
else
|
||||
# Do we have an rt.jar? (On MacOSX it is called classes.jar)
|
||||
if test ! -f "$BOOT_JDK/jre/lib/rt.jar" && test ! -f "$BOOT_JDK/../Classes/classes.jar"; then
|
||||
AC_MSG_NOTICE([Potential Boot JDK found at $BOOT_JDK did not contain an rt.jar; ignoring])
|
||||
BOOT_JDK_FOUND=no
|
||||
else
|
||||
# Oh, this is looking good! We probably have found a proper JDK. Is it the correct version?
|
||||
BOOT_JDK_VERSION=`"$BOOT_JDK/bin/java" -version 2>&1 | head -n 1`
|
||||
|
||||
# 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
|
||||
AC_MSG_NOTICE([Potential Boot JDK found at $BOOT_JDK is incorrect JDK version ($BOOT_JDK_VERSION); ignoring])
|
||||
AC_MSG_NOTICE([(Your Boot JDK must be version 7 or 8)])
|
||||
BOOT_JDK_FOUND=no
|
||||
else
|
||||
# We're done! :-)
|
||||
BOOT_JDK_FOUND=yes
|
||||
SPACESAFE(BOOT_JDK,[the path to the Boot JDK])
|
||||
AC_MSG_CHECKING([for Boot JDK])
|
||||
AC_MSG_RESULT([$BOOT_JDK ($BOOT_JDK_VERSION)])
|
||||
fi # end check jdk version
|
||||
fi # end check rt.jar
|
||||
fi # end check javac
|
||||
fi # end check java
|
||||
fi # end check boot jdk found
|
||||
fi
|
||||
])
|
||||
|
||||
# Test: Is bootjdk explicitely set by command line arguments?
|
||||
AC_DEFUN([BOOTJDK_CHECK_ARGUMENTS],
|
||||
[
|
||||
if test "x$with_boot_jdk" != x; then
|
||||
BOOT_JDK=$with_boot_jdk
|
||||
BOOT_JDK_FOUND=maybe
|
||||
AC_MSG_NOTICE([Found potential Boot JDK using configure arguments])
|
||||
fi
|
||||
])
|
||||
|
||||
# Test: Is bootjdk available from builddeps?
|
||||
AC_DEFUN([BOOTJDK_CHECK_BUILDDEPS],
|
||||
[
|
||||
BDEPS_CHECK_MODULE(BOOT_JDK, bootjdk, xxx, [BOOT_JDK_FOUND=maybe], [BOOT_JDK_FOUND=no])
|
||||
])
|
||||
|
||||
# Test: Is $JAVA_HOME set?
|
||||
AC_DEFUN([BOOTJDK_CHECK_JAVA_HOME],
|
||||
[
|
||||
if test "x$JAVA_HOME" != x; then
|
||||
if test "x$OPENJDK_TARGET_OS" = xwindows; then
|
||||
# On Windows, JAVA_HOME is likely in DOS-style
|
||||
JAVA_HOME_PROCESSED="`$CYGPATH -u "$JAVA_HOME"`"
|
||||
else
|
||||
JAVA_HOME_PROCESSED="$JAVA_HOME"
|
||||
fi
|
||||
if test ! -d "$JAVA_HOME_PROCESSED"; then
|
||||
AC_MSG_NOTICE([Your JAVA_HOME points to a non-existing directory!])
|
||||
else
|
||||
# Aha, the user has set a JAVA_HOME
|
||||
# let us use that as the Boot JDK.
|
||||
BOOT_JDK="$JAVA_HOME_PROCESSED"
|
||||
BOOT_JDK_FOUND=maybe
|
||||
AC_MSG_NOTICE([Found potential Boot JDK using JAVA_HOME])
|
||||
fi
|
||||
fi
|
||||
])
|
||||
|
||||
AC_DEFUN([BOOTJDK_MISSING_ERROR],
|
||||
# Test: Is there a java or javac in the PATH, which is a symlink to the JDK?
|
||||
AC_DEFUN([BOOTJDK_CHECK_JAVA_IN_PATH_IS_SYMLINK],
|
||||
[
|
||||
AC_MSG_NOTICE([This might be fixed by explicitely setting --with-boot-jdk])
|
||||
AC_MSG_ERROR([Cannot continue])
|
||||
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.
|
||||
SET_FULL_PATH_SPACESAFE(BINARY)
|
||||
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
|
||||
# Looks like we found ourselves an JDK
|
||||
BOOT_JDK_FOUND=maybe
|
||||
AC_MSG_NOTICE([Found potential Boot JDK using java(c) in PATH])
|
||||
fi
|
||||
fi
|
||||
])
|
||||
|
||||
# Test: Is there a /usr/libexec/java_home? (Typically on MacOSX)
|
||||
AC_DEFUN([BOOTJDK_CHECK_LIBEXEC_JAVA_HOME],
|
||||
[
|
||||
if test -x /usr/libexec/java_home; then
|
||||
BOOT_JDK=`/usr/libexec/java_home`
|
||||
BOOT_JDK_FOUND=maybe
|
||||
AC_MSG_NOTICE([Found potential Boot JDK using /usr/libexec/java_home])
|
||||
fi
|
||||
])
|
||||
|
||||
# Look for a jdk in the given path. If there are multiple, try to select the newest.
|
||||
# If found, set BOOT_JDK and BOOT_JDK_FOUND.
|
||||
# $1 = Path to directory containing jdk installations.
|
||||
# $2 = String to append to the found JDK directory to get the proper JDK home
|
||||
AC_DEFUN([BOOTJDK_FIND_BEST_JDK_IN_DIRECTORY],
|
||||
[
|
||||
BOOT_JDK_PREFIX="$1"
|
||||
BOOT_JDK_SUFFIX="$2"
|
||||
BEST_JDK_FOUND=`$LS "$BOOT_JDK_PREFIX" 2> /dev/null | $GREP jdk | $SORT -r | $HEAD -n 1 `
|
||||
if test "x$BEST_JDK_FOUND" != x; then
|
||||
BOOT_JDK="${BOOT_JDK_PREFIX}/${BEST_JDK_FOUND}${BOOT_JDK_SUFFIX}"
|
||||
if test -d "$BOOT_JDK"; then
|
||||
BOOT_JDK_FOUND=maybe
|
||||
AC_MSG_NOTICE([Found potential Boot JDK using well-known locations (in $BOOT_JDK_PREFIX)])
|
||||
fi
|
||||
fi
|
||||
])
|
||||
|
||||
# Call BOOTJDK_FIND_BEST_JDK_IN_DIRECTORY, but use the given
|
||||
# environmental variable as base for where to look.
|
||||
# $1 Name of an environmal variable, assumed to point to the Program Files directory.
|
||||
AC_DEFUN([BOOTJDK_FIND_BEST_JDK_IN_WINDOWS_VIRTUAL_DIRECTORY],
|
||||
[
|
||||
if test "x[$]$1" != x; then
|
||||
BOOTJDK_FIND_BEST_JDK_IN_DIRECTORY([`$CYGPATH -u "[$]$1"`/Java])
|
||||
fi
|
||||
])
|
||||
|
||||
# Test: Is there a JDK installed in default, well-known locations?
|
||||
AC_DEFUN([BOOTJDK_CHECK_WELL_KNOWN_LOCATIONS],
|
||||
[
|
||||
if test "x$OPENJDK_TARGET_OS" = xwindows; then
|
||||
BOOTJDK_DO_CHECK([BOOTJDK_FIND_BEST_JDK_IN_WINDOWS_VIRTUAL_DIRECTORY([ProgramW6432])])
|
||||
BOOTJDK_DO_CHECK([BOOTJDK_FIND_BEST_JDK_IN_WINDOWS_VIRTUAL_DIRECTORY([PROGRAMW6432])])
|
||||
BOOTJDK_DO_CHECK([BOOTJDK_FIND_BEST_JDK_IN_WINDOWS_VIRTUAL_DIRECTORY([PROGRAMFILES])])
|
||||
BOOTJDK_DO_CHECK([BOOTJDK_FIND_BEST_JDK_IN_WINDOWS_VIRTUAL_DIRECTORY([ProgramFiles])])
|
||||
BOOTJDK_DO_CHECK([BOOTJDK_FIND_BEST_JDK_IN_DIRECTORY([/cygdrive/c/Program Files/Java])])
|
||||
elif test "x$OPENJDK_TARGET_OS" = xmacosx; then
|
||||
BOOTJDK_DO_CHECK([BOOTJDK_FIND_BEST_JDK_IN_DIRECTORY([/Library/Java/JavaVirtualMachines],[/Contents/Home])])
|
||||
BOOTJDK_DO_CHECK([BOOTJDK_FIND_BEST_JDK_IN_DIRECTORY([/System/Library/Java/JavaVirtualMachines],[/Contents/Home])])
|
||||
fi
|
||||
])
|
||||
|
||||
# Check that a command-line tool in the Boot JDK is correct
|
||||
# $1 = name of variable to assign
|
||||
# $2 = name of binary
|
||||
AC_DEFUN([BOOTJDK_CHECK_TOOL_IN_BOOTJDK],
|
||||
[
|
||||
AC_MSG_CHECKING([for $2 in Boot JDK])
|
||||
$1=$BOOT_JDK/bin/$2
|
||||
if test ! -x [$]$1; then
|
||||
AC_MSG_RESULT(not found)
|
||||
AC_MSG_NOTICE([Your Boot JDK seems broken. This might be fixed by explicitely setting --with-boot-jdk])
|
||||
AC_MSG_ERROR([Could not find $2 in the Boot JDK])
|
||||
fi
|
||||
AC_MSG_RESULT(ok)
|
||||
])
|
||||
|
||||
###############################################################################
|
||||
@@ -51,204 +215,74 @@ 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
|
||||
|
||||
# We look for the Boot JDK through various means, going from more certain to
|
||||
# more of a guess-work. After each test, BOOT_JDK_FOUND is set to "yes" if
|
||||
# we detected something (if so, the path to the jdk is in BOOT_JDK). But we
|
||||
# must check if this is indeed valid; otherwise we'll continue looking.
|
||||
|
||||
# Test: Is bootjdk explicitely set by command line arguments?
|
||||
BOOTJDK_DO_CHECK([BOOTJDK_CHECK_ARGUMENTS])
|
||||
if test "x$with_boot_jdk" != x && test "x$BOOT_JDK_FOUND" = xno; then
|
||||
# Having specified an argument which is incorrect will produce an instant failure;
|
||||
# we should not go on looking
|
||||
AC_MSG_ERROR([The path given by --with-boot-jdk does not contain a valid Boot JDK])
|
||||
fi
|
||||
|
||||
# Test: Is bootjdk available from builddeps?
|
||||
BOOTJDK_DO_CHECK([BOOTJDK_CHECK_BUILDDEPS])
|
||||
|
||||
# Test: Is $JAVA_HOME set?
|
||||
BOOTJDK_DO_CHECK([BOOTJDK_CHECK_JAVA_HOME])
|
||||
|
||||
# Test: Is there a /usr/libexec/java_home? (Typically on MacOSX)
|
||||
BOOTJDK_DO_CHECK([BOOTJDK_CHECK_LIBEXEC_JAVA_HOME])
|
||||
|
||||
# Test: Is there a java or javac in the PATH, which is a symlink to the JDK?
|
||||
BOOTJDK_DO_CHECK([BOOTJDK_CHECK_JAVA_IN_PATH_IS_SYMLINK])
|
||||
|
||||
# Test: Is there a JDK installed in default, well-known locations?
|
||||
BOOTJDK_DO_CHECK([BOOTJDK_CHECK_WELL_KNOWN_LOCATIONS])
|
||||
|
||||
# If we haven't found anything yet, we've truly lost. Give up.
|
||||
if test "x$BOOT_JDK_FOUND" = xno; then
|
||||
BDEPS_CHECK_MODULE(BOOT_JDK, boot-jdk, xxx, [BOOT_JDK_FOUND=yes], [BOOT_JDK_FOUND=no])
|
||||
HELP_MSG_MISSING_DEPENDENCY([openjdk])
|
||||
AC_MSG_NOTICE([Could not find a valid Boot JDK. $HELP_MSG])
|
||||
AC_MSG_NOTICE([This might be fixed by explicitely setting --with-boot-jdk])
|
||||
AC_MSG_ERROR([Cannot continue])
|
||||
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.
|
||||
# Setup proper paths for what we found
|
||||
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
|
||||
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
|
||||
BOOT_RTJAR="$BOOT_JDK/../Classes/classes.jar"
|
||||
if test -f "$BOOT_RTJAR"; then
|
||||
# Remove the ..
|
||||
BOOT_RTJAR="`cd ${BOOT_RTJAR%/*} && pwd`/${BOOT_RTJAR##*/}"
|
||||
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)
|
||||
BOOT_TOOLSJAR="$BOOT_JDK/lib/tools.jar"
|
||||
BOOT_JDK="$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])
|
||||
AC_SUBST(BOOT_JDK)
|
||||
|
||||
# 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)
|
||||
# Setup tools from the Boot JDK.
|
||||
BOOTJDK_CHECK_TOOL_IN_BOOTJDK(JAVA,java)
|
||||
BOOTJDK_CHECK_TOOL_IN_BOOTJDK(JAVAC,javac)
|
||||
BOOTJDK_CHECK_TOOL_IN_BOOTJDK(JAVAH,javah)
|
||||
BOOTJDK_CHECK_TOOL_IN_BOOTJDK(JAVAP,javap)
|
||||
BOOTJDK_CHECK_TOOL_IN_BOOTJDK(JAR,jar)
|
||||
BOOTJDK_CHECK_TOOL_IN_BOOTJDK(RMIC,rmic)
|
||||
BOOTJDK_CHECK_TOOL_IN_BOOTJDK(NATIVE2ASCII,native2ascii)
|
||||
|
||||
# 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
|
||||
# Finally, set some other options...
|
||||
|
||||
# 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],
|
||||
|
||||
43
common/autoconf/bootcycle-spec.gmk.in
Normal file
43
common/autoconf/bootcycle-spec.gmk.in
Normal file
@@ -0,0 +1,43 @@
|
||||
#
|
||||
# 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.
|
||||
#
|
||||
|
||||
# Support for building boot cycle builds
|
||||
|
||||
# First include the real base spec.gmk file
|
||||
include @SPEC@
|
||||
|
||||
# Check that the user did not try to specify a different java to use for compiling.
|
||||
ifneq ($(firstword $(SJAVAC_SERVER_JAVA)),$(firstword $(JAVA)))
|
||||
$(error Bootcycle builds are not possible if --with-sjavac-server-java is specified)
|
||||
endif
|
||||
|
||||
# Override specific values to do a boot cycle build
|
||||
|
||||
# The bootcycle build has a different output directory
|
||||
BUILD_OUTPUT:=@BUILD_OUTPUT@/bootcycle-build
|
||||
|
||||
# Use a different Boot JDK
|
||||
BOOT_JDK:=@BUILD_OUTPUT@/images/j2sdk-image
|
||||
BOOT_RTJAR:=@BUILD_OUTPUT@/images/j2sdk-image/jre/lib/rt.jar
|
||||
32
common/autoconf/build-aux/config.guess
vendored
32
common/autoconf/build-aux/config.guess
vendored
@@ -22,17 +22,39 @@
|
||||
# questions.
|
||||
#
|
||||
|
||||
# This is a wrapper for the config.guess from autoconf. The latter does not properly
|
||||
# detect amd64 systems, since that require isainfo instead of uname. Instead of patching
|
||||
# the autoconf system (which might easily get lost in a future update), we wrap it and
|
||||
# fix the broken property, if needed.
|
||||
# This is a wrapper for the config.guess from autoconf. The latter does not
|
||||
# properly detect 64 bit systems on all platforms. Instead of patching the
|
||||
# autoconf system (which might easily get lost in a future update), we wrap it
|
||||
# and fix the broken property, if needed.
|
||||
|
||||
DIR=`dirname $0`
|
||||
OUT=`. $DIR/autoconf-config.guess`
|
||||
|
||||
# Test and fix solaris on x86_64
|
||||
echo $OUT | grep i386-pc-solaris > /dev/null 2> /dev/null
|
||||
if test $? = 0; then
|
||||
# isainfo -n returns either i386 or amd64 on Intel systems
|
||||
# isainfo -n returns either i386 or amd64
|
||||
REAL_CPU=`isainfo -n`
|
||||
OUT=$REAL_CPU`echo $OUT | sed -e 's/[^-]*//'`
|
||||
fi
|
||||
|
||||
# Test and fix solaris on sparcv9
|
||||
echo $OUT | grep sparc-sun-solaris > /dev/null 2> /dev/null
|
||||
if test $? = 0; then
|
||||
# isainfo -n returns either sparc or sparcv9
|
||||
REAL_CPU=`isainfo -n`
|
||||
OUT=$REAL_CPU`echo $OUT | sed -e 's/[^-]*//'`
|
||||
fi
|
||||
|
||||
# Test and fix cygwin on x86_64
|
||||
echo $OUT | grep 86-pc-cygwin > /dev/null 2> /dev/null
|
||||
if test $? = 0; then
|
||||
case `echo $PROCESSOR_IDENTIFIER | cut -f1 -d' '` in
|
||||
intel64|Intel64|INTEL64|em64t|EM64T|amd64|AMD64|8664|x86_64)
|
||||
REAL_CPU=x86_64
|
||||
OUT=$REAL_CPU`echo $OUT | sed -e 's/[^-]*//'`
|
||||
;;
|
||||
esac
|
||||
fi
|
||||
|
||||
echo $OUT
|
||||
|
||||
@@ -30,27 +30,19 @@ AC_DEFUN([BPERF_CHECK_CORES],
|
||||
FOUND_CORES=no
|
||||
|
||||
if test -f /proc/cpuinfo; then
|
||||
# Looks like a Linux system
|
||||
# Looks like a Linux (or cygwin) system
|
||||
NUM_CORES=`cat /proc/cpuinfo | grep -c processor`
|
||||
FOUND_CORES=yes
|
||||
fi
|
||||
|
||||
if test -x /usr/sbin/psrinfo; then
|
||||
elif 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
|
||||
elif 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`
|
||||
@@ -66,31 +58,26 @@ AC_DEFUN([BPERF_CHECK_CORES],
|
||||
AC_DEFUN([BPERF_CHECK_MEMORY_SIZE],
|
||||
[
|
||||
AC_MSG_CHECKING([for memory size])
|
||||
# Default to 1024MB
|
||||
# Default to 1024 MB
|
||||
MEMORY_SIZE=1024
|
||||
FOUND_MEM=no
|
||||
|
||||
if test -f /proc/cpuinfo; then
|
||||
# Looks like a Linux system
|
||||
if test -f /proc/meminfo; then
|
||||
# Looks like a Linux (or cygwin) 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
|
||||
elif 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
|
||||
elif 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
|
||||
elif test "x$build_os" = xwindows; then
|
||||
# Windows, but without cygwin
|
||||
MEMORY_SIZE=`systeminfo | grep 'Total Physical Memory:' | awk '{ print [$]4 }' | sed 's/,//'`
|
||||
FOUND_MEM=yes
|
||||
fi
|
||||
@@ -98,7 +85,7 @@ AC_DEFUN([BPERF_CHECK_MEMORY_SIZE],
|
||||
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!])
|
||||
AC_MSG_RESULT([could not detect memory size defaulting to 1024 MB!])
|
||||
fi
|
||||
])
|
||||
|
||||
@@ -240,46 +227,30 @@ 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"])])
|
||||
AC_ARG_WITH(sjavac-server-java, [AS_HELP_STRING([--with-sjavac-server-java],
|
||||
[use this java binary for running the sjavac background server and other long running java tasks in the build process,
|
||||
e.g. ---with-sjavac-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$with_sjavac_server_java" != x; then
|
||||
SJAVAC_SERVER_JAVA="$with_sjavac_server_java"
|
||||
FOUND_VERSION=`$SJAVAC_SERVER_JAVA -version 2>&1 | grep " version \""`
|
||||
if test "x$FOUND_VERSION" = x; then
|
||||
AC_MSG_ERROR([Could not execute server java: $SERVER_JAVA])
|
||||
AC_MSG_ERROR([Could not execute server java: $SJAVAC_SERVER_JAVA])
|
||||
fi
|
||||
else
|
||||
SERVER_JAVA=""
|
||||
SJAVAC_SERVER_JAVA=""
|
||||
# Hotspot specific options.
|
||||
ADD_JVM_ARG_IF_OK([-XX:+UseParallelOldGC],SERVER_JAVA,[$JAVA])
|
||||
ADD_JVM_ARG_IF_OK([-verbosegc],SERVER_JAVA,[$JAVA])
|
||||
ADD_JVM_ARG_IF_OK([-verbosegc],SJAVAC_SERVER_JAVA,[$JAVA])
|
||||
# JRockit specific options.
|
||||
ADD_JVM_ARG_IF_OK([-Xverbose:gc],SERVER_JAVA,[$JAVA])
|
||||
SERVER_JAVA="$JAVA $SERVER_JAVA"
|
||||
ADD_JVM_ARG_IF_OK([-Xverbose:gc],SJAVAC_SERVER_JAVA,[$JAVA])
|
||||
SJAVAC_SERVER_JAVA="$JAVA $SJAVAC_SERVER_JAVA"
|
||||
fi
|
||||
AC_SUBST(SERVER_JAVA)
|
||||
AC_SUBST(SJAVAC_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"
|
||||
AC_ARG_WITH(sjavac-server-cores, [AS_HELP_STRING([--with-sjavac-server-cores],
|
||||
[use at most this number of concurrent threads on the sjavac server @<:@probed@:>@])])
|
||||
if test "x$with_sjavac_server_cores" != x; then
|
||||
SJAVAC_SERVER_CORES="$with_sjavac_server_cores"
|
||||
else
|
||||
if test "$NUM_CORES" -gt 16; then
|
||||
# We set this arbitrary limit because we want to limit the heap
|
||||
@@ -287,86 +258,49 @@ else
|
||||
# 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"
|
||||
SJAVAC_SERVER_CORES="16"
|
||||
else
|
||||
JAVAC_SERVER_CORES="$NUM_CORES"
|
||||
SJAVAC_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])
|
||||
ADD_JVM_ARG_IF_OK([-d64],SJAVAC_SERVER_JAVA,[$SJAVAC_SERVER_JAVA])
|
||||
ADD_JVM_ARG_IF_OK([-Xms10G -Xmx10G],SJAVAC_SERVER_JAVA,[$SJAVAC_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])
|
||||
ADD_JVM_ARG_IF_OK([-d64],SJAVAC_SERVER_JAVA,[$SJAVAC_SERVER_JAVA])
|
||||
ADD_JVM_ARG_IF_OK([-Xms6G -Xmx6G],SJAVAC_SERVER_JAVA,[$SJAVAC_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])
|
||||
ADD_JVM_ARG_IF_OK([-d64],SJAVAC_SERVER_JAVA,[$SJAVAC_SERVER_JAVA])
|
||||
ADD_JVM_ARG_IF_OK([-Xms1G -Xmx3G],SJAVAC_SERVER_JAVA,[$SJAVAC_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])
|
||||
ADD_JVM_ARG_IF_OK([-Xms1G -Xmx2500M],SJAVAC_SERVER_JAVA,[$SJAVAC_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])
|
||||
ADD_JVM_ARG_IF_OK([-Xms700M -Xmx1400M],SJAVAC_SERVER_JAVA,[$SJAVAC_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])
|
||||
ADD_JVM_ARG_IF_OK([-Xms400M -Xmx1100M],SJAVAC_SERVER_JAVA,[$SJAVAC_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])
|
||||
ADD_JVM_ARG_IF_OK([-Xms256M -Xmx512M],SJAVAC_SERVER_JAVA,[$SJAVAC_SERVER_JAVA])
|
||||
fi
|
||||
|
||||
ADD_JVM_ARG_IF_OK([-XX:PermSize=32m],SJAVAC_SERVER_JAVA,[$SJAVAC_SERVER_JAVA])
|
||||
ADD_JVM_ARG_IF_OK([-XX:MaxPermSize=160m],SJAVAC_SERVER_JAVA,[$SJAVAC_SERVER_JAVA])
|
||||
ADD_JVM_ARG_IF_OK([-XX:ThreadStackSize=$STACK_SIZE],SJAVAC_SERVER_JAVA,[$SJAVAC_SERVER_JAVA])
|
||||
|
||||
MAX_COMPILERS_IN_HEAP=`expr $MAX_HEAP_MEM / 501`
|
||||
if test "$JAVAC_SERVER_CORES" -gt "$MAX_COMPILERS_IN_HEAP"; then
|
||||
if test "$SJAVAC_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])
|
||||
SJAVAC_SERVER_CORES="$MAX_COMPILERS_IN_HEAP"
|
||||
AC_MSG_RESULT([yes, to $SJAVAC_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_SUBST(SJAVAC_SERVER_CORES)
|
||||
|
||||
AC_MSG_CHECKING([whether to use sjavac])
|
||||
AC_ARG_ENABLE([sjavac], [AS_HELP_STRING([--enable-sjavac],
|
||||
@@ -375,4 +309,11 @@ AC_ARG_ENABLE([sjavac], [AS_HELP_STRING([--enable-sjavac],
|
||||
AC_MSG_RESULT([$ENABLE_SJAVAC])
|
||||
AC_SUBST(ENABLE_SJAVAC)
|
||||
|
||||
if test "x$ENABLE_SJAVAC" = xyes; then
|
||||
SJAVAC_SERVER_DIR="$OUTPUT_ROOT/javacservers"
|
||||
else
|
||||
SJAVAC_SERVER_DIR=
|
||||
fi
|
||||
AC_SUBST(SJAVAC_SERVER_DIR)
|
||||
|
||||
])
|
||||
|
||||
@@ -31,7 +31,7 @@
|
||||
|
||||
# Translate a configuration triplet/quadruplet into something
|
||||
# known by this configuration file.
|
||||
# If no rewrite was found, then rewritten_target=${OPENJDK_TARGET_SYSTEM}
|
||||
# If no rewrite was found, then rewritten_target=${OPENJDK_TARGET_AUTOCONF_NAME}
|
||||
REWRITE_i686_pc_linux_gnu=i686-unknown-linux-gnu
|
||||
REWRITE_i386_pc_solaris2_10=i686-sun-solaris2_10
|
||||
|
||||
|
||||
@@ -52,19 +52,19 @@ AC_DEFUN_ONCE([BDEPS_SCAN_FOR_BUILDDEPS],
|
||||
fi
|
||||
# Create build and target names that use _ instead of "-" and ".".
|
||||
# This is necessary to use them in variable names.
|
||||
build_var=`echo ${OPENJDK_BUILD_SYSTEM} | tr '-' '_' | tr '.' '_'`
|
||||
target_var=`echo ${OPENJDK_TARGET_SYSTEM} | tr '-' '_' | tr '.' '_'`
|
||||
build_var=`echo ${OPENJDK_BUILD_AUTOCONF_NAME} | tr '-' '_' | tr '.' '_'`
|
||||
target_var=`echo ${OPENJDK_TARGET_AUTOCONF_NAME} | tr '-' '_' | tr '.' '_'`
|
||||
# Extract rewrite information for build and target
|
||||
eval rewritten_build=\${REWRITE_${build_var}}
|
||||
if test "x$rewritten_build" = x; then
|
||||
rewritten_build=${OPENJDK_BUILD_SYSTEM}
|
||||
rewritten_build=${OPENJDK_BUILD_AUTOCONF_NAME}
|
||||
echo Build stays the same $rewritten_build
|
||||
else
|
||||
echo Rewriting build for builddeps into $rewritten_build
|
||||
fi
|
||||
eval rewritten_target=\${REWRITE_${target_var}}
|
||||
if test "x$rewritten_target" = x; then
|
||||
rewritten_target=${OPENJDK_TARGET_SYSTEM}
|
||||
rewritten_target=${OPENJDK_TARGET_AUTOCONF_NAME}
|
||||
echo Target stays the same $rewritten_target
|
||||
else
|
||||
echo Rewriting target for builddeps into $rewritten_target
|
||||
|
||||
1669
common/autoconf/compare.sh.in
Normal file
1669
common/autoconf/compare.sh.in
Normal file
File diff suppressed because it is too large
Load Diff
67
common/autoconf/configure
vendored
67
common/autoconf/configure
vendored
@@ -2,7 +2,12 @@
|
||||
|
||||
CONFIGURE_COMMAND_LINE="$@"
|
||||
conf_script_dir=`dirname $0`
|
||||
conf_closed_script_dir="$conf_script_dir/../../jdk/make/closed/autoconf"
|
||||
|
||||
if [ "$CUSTOM_CONFIG_DIR" = "" ]; then
|
||||
conf_custom_script_dir="$conf_script_dir/../../jdk/make/closed/autoconf"
|
||||
else
|
||||
conf_custom_script_dir=$CUSTOM_CONFIG_DIR
|
||||
fi
|
||||
|
||||
###
|
||||
### Test that the generated configure is up-to-date
|
||||
@@ -14,8 +19,12 @@ TEST=`which test`
|
||||
print_error_not_up_to_date() {
|
||||
echo "Error: The configure source files is newer than the generated files."
|
||||
echo "Please run 'sh autogen.sh' to update the generated files."
|
||||
echo "Note that this test might trigger incorrectly sometimes due to hg timestamps".
|
||||
}
|
||||
|
||||
# NOTE: This test can occasionally go wrong due to the way mercurial handles
|
||||
# timestamps. It it supposed to aid during development of build-infra, but should
|
||||
# go away before making this the default build system.
|
||||
for file in configure.ac *.m4 ; do
|
||||
if $TEST $file -nt generated-configure.sh; then
|
||||
print_error_not_up_to_date
|
||||
@@ -23,26 +32,32 @@ for file in configure.ac *.m4 ; do
|
||||
fi
|
||||
done
|
||||
|
||||
if $TEST -e $conf_closed_script_dir/generated-configure.sh; then
|
||||
# If closed source configure is available, make sure it is up-to-date as well.
|
||||
for file in configure.ac *.m4 $conf_closed_script_dir/*.m4; do
|
||||
if $TEST $file -nt $conf_closed_script_dir/generated-configure.sh; then
|
||||
if $TEST -e $conf_custom_script_dir/generated-configure.sh; then
|
||||
# If custom source configure is available, make sure it is up-to-date as well.
|
||||
for file in configure.ac *.m4 $conf_custom_script_dir/*.m4; do
|
||||
if $TEST $file -nt $conf_custom_script_dir/generated-configure.sh; then
|
||||
print_error_not_up_to_date
|
||||
exit 1
|
||||
fi
|
||||
done
|
||||
|
||||
# Test if open configure is newer than closed configure, if so, closed needs to
|
||||
# be regenerated.
|
||||
# Test if open configure is newer than custom configure, if so, custom needs to
|
||||
# be regenerated. This test is required to ensure consistency with custom source.
|
||||
conf_open_configure_timestamp=`grep DATE_WHEN_GENERATED: $conf_script_dir/generated-configure.sh | cut -d" " -f 3`
|
||||
conf_closed_configure_timestamp=`grep DATE_WHEN_GENERATED: $conf_closed_script_dir/generated-configure.sh | cut -d" " -f 3`
|
||||
if $TEST $conf_open_configure_timestamp -gt $conf_closed_configure_timestamp; then
|
||||
print_error_not_up_to_date
|
||||
conf_custom_configure_timestamp=`grep DATE_WHEN_GENERATED: $conf_custom_script_dir/generated-configure.sh | cut -d" " -f 3`
|
||||
if $TEST $conf_open_configure_timestamp -gt $conf_custom_configure_timestamp; then
|
||||
echo "Error: The generated configure file contains changes not present in the custom generated file."
|
||||
echo "Please run 'sh autogen.sh' to update the generated files."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
fi
|
||||
|
||||
# Autoconf calls the configure script recursively sometimes.
|
||||
# Don't start logging twice in that case
|
||||
if $TEST "x$conf_debug_configure" = xtrue; then
|
||||
conf_debug_configure=recursive
|
||||
fi
|
||||
###
|
||||
### Process command-line arguments
|
||||
###
|
||||
@@ -63,6 +78,12 @@ do
|
||||
--with-extra-cxxflags=*)
|
||||
conf_extra_cxxflags=`expr "X$conf_option" : '[^=]*=\(.*\)'`
|
||||
continue ;;
|
||||
--debug-configure)
|
||||
if $TEST "x$conf_debug_configure" != xrecursive; then
|
||||
conf_debug_configure=true
|
||||
export conf_debug_configure
|
||||
fi
|
||||
continue ;;
|
||||
*)
|
||||
conf_processed_arguments="$conf_processed_arguments $conf_option" ;;
|
||||
esac
|
||||
@@ -104,13 +125,29 @@ conf_processed_arguments="--enable-option-checking=fatal $conf_processed_argumen
|
||||
###
|
||||
### Call the configure script
|
||||
###
|
||||
if $TEST -e $conf_closed_script_dir/generated-configure.sh; then
|
||||
# Closed source configure available; run that instead
|
||||
. $conf_closed_script_dir/generated-configure.sh $conf_processed_arguments --with-extra-cflags="$conf_extra_cflags" --with-extra-cxxflags="$conf_extra_cxxflags"
|
||||
if $TEST -e $conf_custom_script_dir/generated-configure.sh; then
|
||||
# Custom source configure available; run that instead
|
||||
echo Running custom generated-configure.sh
|
||||
conf_script_to_run=$conf_custom_script_dir/generated-configure.sh
|
||||
else
|
||||
. $conf_script_dir/generated-configure.sh $conf_processed_arguments --with-extra-cflags="$conf_extra_cflags" --with-extra-cxxflags="$conf_extra_cxxflags"
|
||||
echo Running generated-configure.sh
|
||||
conf_script_to_run=$conf_script_dir/generated-configure.sh
|
||||
fi
|
||||
|
||||
if $TEST "x$conf_debug_configure" != x; then
|
||||
# Turn on shell debug output if requested (initial or recursive)
|
||||
set -x
|
||||
fi
|
||||
|
||||
if $TEST "x$conf_debug_configure" = xtrue; then
|
||||
# Turn on logging, but don't turn on twice when called recursive
|
||||
conf_debug_logfile=./debug-configure.log
|
||||
(exec 3>&1 ; (. $conf_script_to_run $conf_processed_arguments --with-extra-cflags="$conf_extra_cflags" --with-extra-cxxflags="$conf_extra_cxxflags" 2>&1 1>&3 ) | tee -a $conf_debug_logfile 1>&2 ; exec 3>&-) | tee -a $conf_debug_logfile
|
||||
else
|
||||
. $conf_script_to_run $conf_processed_arguments --with-extra-cflags="$conf_extra_cflags" --with-extra-cxxflags="$conf_extra_cxxflags"
|
||||
fi
|
||||
|
||||
conf_result_code=$?
|
||||
###
|
||||
### Post-processing
|
||||
###
|
||||
@@ -119,3 +156,5 @@ fi
|
||||
if $TEST -d "$OUTPUT_ROOT"; then
|
||||
mv -f config.log "$OUTPUT_ROOT" 2> /dev/null
|
||||
fi
|
||||
|
||||
exit $conf_result_code
|
||||
|
||||
@@ -53,9 +53,9 @@ m4_include([source-dirs.m4])
|
||||
m4_include([toolchain.m4])
|
||||
|
||||
# This line needs to be here, verbatim, after all includes.
|
||||
# It is replaced with closed functionality when building
|
||||
# closed sources.
|
||||
AC_DEFUN_ONCE([CLOSED_HOOK])
|
||||
# It is replaced with custom functionality when building
|
||||
# custom sources.
|
||||
AC_DEFUN_ONCE([CUSTOM_HOOK])
|
||||
|
||||
###############################################################################
|
||||
#
|
||||
@@ -65,6 +65,12 @@ AC_DEFUN_ONCE([CLOSED_HOOK])
|
||||
|
||||
# Basic initialization that must happen first of all
|
||||
BASIC_INIT
|
||||
|
||||
# Now we can determine OpenJDK build and target platforms. This is required to
|
||||
# have early on.
|
||||
PLATFORM_SETUP_OPENJDK_BUILD_AND_TARGET
|
||||
|
||||
# Continue setting up basic stuff.
|
||||
BASIC_SETUP_PATHS
|
||||
BASIC_SETUP_LOGGING
|
||||
|
||||
@@ -75,28 +81,18 @@ HELP_SETUP_DEPENDENCY_HELP
|
||||
# Without these, we can't properly run the rest of the configure script.
|
||||
BASIC_SETUP_TOOLS
|
||||
|
||||
# Check if pkg-config is available.
|
||||
PKG_PROG_PKG_CONFIG
|
||||
|
||||
# After basic tools have been setup, we can check build os specific details.
|
||||
PLATFORM_SETUP_OPENJDK_BUILD_OS_VERSION
|
||||
|
||||
# Setup builddeps, for automatic downloading of tools we need.
|
||||
# This is needed before we can call BDEPS_CHECK_MODULE, which is done in
|
||||
# boot-jdk setup, but we need to have basic tools setup first.
|
||||
BDEPS_CONFIGURE_BUILDDEPS
|
||||
BDEPS_SCAN_FOR_BUILDDEPS
|
||||
|
||||
# Check if pkg-config is available.
|
||||
PKG_PROG_PKG_CONFIG
|
||||
|
||||
###############################################################################
|
||||
#
|
||||
# Determine OpenJDK build and target platforms.
|
||||
#
|
||||
###############################################################################
|
||||
|
||||
PLATFORM_SETUP_OPENJDK_BUILD_AND_TARGET
|
||||
PLATFORM_SETUP_OPENJDK_BUILD_OS_VERSION
|
||||
|
||||
# With knowledge of the build platform, setup more basic things.
|
||||
BASIC_SETUP_PATH_SEP
|
||||
BASIC_SETUP_SEARCHPATH
|
||||
|
||||
###############################################################################
|
||||
#
|
||||
# Determine OpenJDK variants, options and version numbers.
|
||||
@@ -148,7 +144,7 @@ TOOLCHAIN_SETUP_PATHS
|
||||
# FIXME: Currently we must test this after paths but before flags. Fix!
|
||||
|
||||
# And we can test some aspects on the target using configure macros.
|
||||
PLATFORM_TEST_OPENJDK_TARGET_BITS
|
||||
PLATFORM_SETUP_OPENJDK_TARGET_BITS
|
||||
PLATFORM_SETUP_OPENJDK_TARGET_ENDIANNESS
|
||||
|
||||
# Configure flags for the tools
|
||||
@@ -213,8 +209,8 @@ BPERF_SETUP_CCACHE
|
||||
# Check for some common pitfalls
|
||||
BASIC_TEST_USABILITY_ISSUES
|
||||
|
||||
# At the end, call the closed hook. (Dummy macro if no closed sources available)
|
||||
CLOSED_HOOK
|
||||
# At the end, call the custom hook. (Dummy macro if no custom sources available)
|
||||
CUSTOM_HOOK
|
||||
|
||||
# We're messing a bit with internal autoconf variables to put the config.status
|
||||
# in the output directory instead of the current directory.
|
||||
@@ -222,5 +218,8 @@ CONFIG_STATUS="$OUTPUT_ROOT/config.status"
|
||||
# Create the actual output files. Now the main work of configure is done.
|
||||
AC_OUTPUT
|
||||
|
||||
# Make the compare script executable
|
||||
$CHMOD +x $OUTPUT_ROOT/compare.sh
|
||||
|
||||
# Finally output some useful information to the user
|
||||
HELP_PRINT_SUMMARY_AND_WARNINGS
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
90
common/autoconf/hotspot-spec.gmk.in
Normal file
90
common/autoconf/hotspot-spec.gmk.in
Normal file
@@ -0,0 +1,90 @@
|
||||
#
|
||||
# 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.
|
||||
#
|
||||
|
||||
|
||||
# Chaining of spec files
|
||||
HOTSPOT_SPEC:=$(dir $(SPEC))hotspot-spec.gmk
|
||||
override SPEC=$(HOTSPOT_SPEC)
|
||||
# Now include the base spec.gmk file
|
||||
include $(BASE_SPEC)
|
||||
|
||||
# Additional legacy variables defined for Hotspot
|
||||
|
||||
@SET_OPENJDK@
|
||||
|
||||
# Legacy defines controlled by the SUPPORT_HEADLESS and SUPPORT_HEADFUL options.
|
||||
@BUILD_HEADLESS@
|
||||
|
||||
# Legacy setting: OPT or DBG
|
||||
VARIANT:=@VARIANT@
|
||||
# Legacy setting: true or false
|
||||
FASTDEBUG:=@FASTDEBUG@
|
||||
# Legacy setting: debugging the class files?
|
||||
DEBUG_CLASSFILES:=@DEBUG_CLASSFILES@
|
||||
|
||||
ALT_CUPS_HEADERS_PATH:=$(patsubst -I%,%,$(filter -I%,@CUPS_CFLAGS@))
|
||||
|
||||
# The HOSTCC/HOSTCXX is Hotspot terminology for the BUILD_CC/BUILD_CXX, i.e. the
|
||||
# compiler that produces code that can be run on the build platform.
|
||||
HOSTCC:=@UNCYGDRIVE@ @BUILD_CC@
|
||||
HOSTCXX:=@UNCYGDRIVE@ @BUILD_CXX@
|
||||
|
||||
####################################################
|
||||
#
|
||||
# Legacy Hotspot support
|
||||
|
||||
# If cross compiling, then define CROSS_COMPILE_ARCH:=cpu_name here.
|
||||
@DEFINE_CROSS_COMPILE_ARCH@
|
||||
|
||||
# Old name for OPENJDK_TARGET_OS (aix,bsd,hpux,linux,macosx,solaris,windows etc)
|
||||
PLATFORM=$(OPENJDK_TARGET_OS)
|
||||
# 32 or 64 bit
|
||||
ARCH_DATA_MODEL=$(OPENJDK_TARGET_CPU_BITS)
|
||||
|
||||
ALT_BOOTDIR=$(BOOT_JDK)
|
||||
# Can be /sparcv9 or /amd64 on Solaris
|
||||
ISA_DIR=$(OPENJDK_TARGET_CPU_ISADIR)
|
||||
# Yet another name for arch used for an extra subdir below the jvm lib.
|
||||
# Uses i386 and amd64, instead of x86 and x86_64.
|
||||
LIBARCH=$(OPENJDK_TARGET_CPU_LEGACY_LIB)
|
||||
# Old name for OPENJDK_TARGET_CPU, uses i586 and amd64, instead of x86 and x86_64.
|
||||
ARCH=$(OPENJDK_TARGET_CPU_LEGACY)
|
||||
# Legacy setting for building for a 64 bit machine.
|
||||
# If yes then this expands to _LP64:=1
|
||||
@LP64@
|
||||
|
||||
ALT_OUTPUTDIR=$(HOTSPOT_OUTPUTDIR)
|
||||
ALT_EXPORT_PATH=$(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@
|
||||
|
||||
|
||||
EXTRA_CFLAGS=@LEGACY_EXTRA_CFLAGS@
|
||||
EXTRA_CXXFLAGS=@LEGACY_EXTRA_CXXFLAGS@
|
||||
EXTRA_LDFLAGS=@LEGACY_EXTRA_LDFLAGS@
|
||||
@@ -30,7 +30,7 @@ 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
|
||||
# but the custom make system may add other variants
|
||||
#
|
||||
# Effectively the JDK variant gives a name to a specific set of
|
||||
# modules to compile into the JDK. In the future, these modules
|
||||
@@ -38,22 +38,14 @@ AC_DEFUN_ONCE([JDKOPT_SETUP_JDK_VARIANT],
|
||||
#
|
||||
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@:>@])])
|
||||
[JDK variant to build (normal) @<:@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])
|
||||
AC_MSG_ERROR([The available JDK variants are: normal])
|
||||
fi
|
||||
|
||||
AC_SUBST(JAVASE_EMBEDDED)
|
||||
AC_SUBST(MINIMIZE_RAM_USAGE)
|
||||
|
||||
AC_SUBST(JDK_VARIANT)
|
||||
|
||||
AC_MSG_RESULT([$JDK_VARIANT])
|
||||
@@ -77,11 +69,7 @@ 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
|
||||
with_jvm_variants="server"
|
||||
fi
|
||||
|
||||
JVM_VARIANTS=",$with_jvm_variants,"
|
||||
@@ -125,6 +113,11 @@ AC_SUBST(JVM_VARIANT_KERNEL)
|
||||
AC_SUBST(JVM_VARIANT_ZERO)
|
||||
AC_SUBST(JVM_VARIANT_ZEROSHARK)
|
||||
|
||||
if test "x$OPENJDK_TARGET_OS" = "xmacosx"; then
|
||||
MACOSX_UNIVERSAL="true"
|
||||
fi
|
||||
|
||||
AC_SUBST(MACOSX_UNIVERSAL)
|
||||
|
||||
])
|
||||
|
||||
@@ -223,6 +216,14 @@ fi
|
||||
|
||||
HOTSPOT_TARGET="$HOTSPOT_TARGET docs export_$HOTSPOT_EXPORT"
|
||||
|
||||
# On Macosx universal binaries are produced, but they only contain
|
||||
# 64 bit intel. This invalidates control of which jvms are built
|
||||
# from configure, but only server is valid anyway. Fix this
|
||||
# when hotspot makefiles are rewritten.
|
||||
if test "x$MACOSX_UNIVERSAL" = xtrue; then
|
||||
HOTSPOT_TARGET=universal_product
|
||||
fi
|
||||
|
||||
#####
|
||||
|
||||
AC_SUBST(DEBUG_LEVEL)
|
||||
@@ -289,14 +290,12 @@ 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
|
||||
|
||||
@@ -305,23 +304,6 @@ 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)
|
||||
|
||||
###############################################################################
|
||||
#
|
||||
@@ -373,25 +355,21 @@ AC_SUBST(CACERTS_FILE)
|
||||
#
|
||||
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
|
||||
# default no, except for on closed-jdk
|
||||
#
|
||||
ENABLE_JFR=no
|
||||
|
||||
# Is the JFR source present
|
||||
|
||||
#
|
||||
# For closed && !embedded default is yes if the source is present
|
||||
# For closed default is yes
|
||||
#
|
||||
if test "x${OPENJDK}" != "xtrue" && test "x$JDK_VARIANT" != "xembedded" && test -d "$SRC_ROOT/jdk/src/closed/share/native/oracle/jfr"; then
|
||||
if test "x${OPENJDK}" != "xtrue"; then
|
||||
ENABLE_JFR=yes
|
||||
fi
|
||||
|
||||
@@ -469,7 +447,7 @@ 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"
|
||||
HOTSPOT_MAKE_ARGS="$HOTSPOT_TARGET"
|
||||
AC_SUBST(HOTSPOT_MAKE_ARGS)
|
||||
|
||||
# The name of the Service Agent jar.
|
||||
@@ -494,11 +472,6 @@ 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}],
|
||||
@@ -549,3 +522,11 @@ AC_SUBST(ZIP_DEBUGINFO_FILES)
|
||||
AC_SUBST(CFLAGS_DEBUG_SYMBOLS)
|
||||
AC_SUBST(CXXFLAGS_DEBUG_SYMBOLS)
|
||||
])
|
||||
|
||||
# Support for customization of the build process. Some build files
|
||||
# will include counterparts from this location, if they exist. This allows
|
||||
# for a degree of customization of the build targets and the rules/recipes
|
||||
# to create them
|
||||
AC_ARG_WITH([custom-make-dir], [AS_HELP_STRING([--with-custom-make-dir],
|
||||
[directory containing custom build/make files])], [CUSTOM_MAKE_DIR=$with_custom_make_dir])
|
||||
AC_SUBST(CUSTOM_MAKE_DIR)
|
||||
|
||||
@@ -73,6 +73,10 @@ if test "x$OPENJDK" = "xfalse"; then
|
||||
FREETYPE2_NOT_NEEDED=yes
|
||||
fi
|
||||
|
||||
if test "x$SUPPORT_HEADFUL" = xno; then
|
||||
X11_NOT_NEEDED=yes
|
||||
fi
|
||||
|
||||
###############################################################################
|
||||
#
|
||||
# Check for MacOSX support for OpenJDK. If this exists, try to build a JVM
|
||||
@@ -518,9 +522,7 @@ 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)
|
||||
|
||||
###############################################################################
|
||||
@@ -629,7 +631,7 @@ 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"
|
||||
LIBCXX="/usr/lib${OPENJDK_TARGET_CPU_ISADIR}/libCrun.so.1"
|
||||
fi
|
||||
|
||||
# TODO better (platform agnostic) test
|
||||
|
||||
@@ -23,279 +23,86 @@
|
||||
# questions.
|
||||
#
|
||||
|
||||
AC_DEFUN([PLATFORM_EXTRACT_TARGET_AND_BUILD_AND_LEGACY_VARS],
|
||||
[
|
||||
# Expects $host_os $host_cpu $build_os and $build_cpu
|
||||
# and $with_target_bits to have been setup!
|
||||
#
|
||||
# Translate the standard triplet(quadruplet) definition
|
||||
# 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
|
||||
#
|
||||
# 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_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 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)
|
||||
|
||||
PLATFORM_EXTRACT_VARS_FROM_OS_TO(OPENJDK_TARGET,$host_os)
|
||||
PLATFORM_EXTRACT_VARS_FROM_CPU_TO(OPENJDK_TARGET,$host_cpu)
|
||||
|
||||
PLATFORM_EXTRACT_VARS_FROM_OS_TO(OPENJDK_BUILD,$build_os)
|
||||
PLATFORM_EXTRACT_VARS_FROM_CPU_TO(OPENJDK_BUILD,$build_cpu)
|
||||
|
||||
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_OPENJDK_TARGET_CPU1) ...
|
||||
if test "x$OPENJDK_TARGET_OS" = xmacosx && test "x$OPENJDK_TARGET_CPU" = xx64; then
|
||||
LEGACY_OPENJDK_TARGET_CPU1="x86_64"
|
||||
fi
|
||||
|
||||
PLATFORM_SET_RELEASE_FILE_OS_VALUES
|
||||
])
|
||||
|
||||
AC_DEFUN([PLATFORM_EXTRACT_VARS_FROM_OS_TO],
|
||||
[
|
||||
PLATFORM_EXTRACT_VARS_FROM_OS($2)
|
||||
$1_OS="$VAR_OS"
|
||||
$1_OS_FAMILY="$VAR_OS_FAMILY"
|
||||
$1_OS_API="$VAR_OS_API"
|
||||
|
||||
AC_SUBST($1_OS)
|
||||
AC_SUBST($1_OS_FAMILY)
|
||||
AC_SUBST($1_OS_API)
|
||||
|
||||
if test "x$$1_OS_API" = xposix; then
|
||||
LEGACY_$1_OS_API="solaris"
|
||||
fi
|
||||
if test "x$$1_OS_API" = xwinapi; then
|
||||
LEGACY_$1_OS_API="windows"
|
||||
fi
|
||||
AC_SUBST(LEGACY_$1_OS_API)
|
||||
])
|
||||
|
||||
AC_DEFUN([PLATFORM_EXTRACT_VARS_FROM_CPU_TO],
|
||||
[
|
||||
PLATFORM_EXTRACT_VARS_FROM_CPU($2)
|
||||
$1_CPU="$VAR_CPU"
|
||||
$1_CPU_ARCH="$VAR_CPU_ARCH"
|
||||
$1_CPU_BITS="$VAR_CPU_BITS"
|
||||
$1_CPU_ENDIAN="$VAR_CPU_ENDIAN"
|
||||
|
||||
AC_SUBST($1_CPU)
|
||||
AC_SUBST($1_CPU_ARCH)
|
||||
AC_SUBST($1_CPU_BITS)
|
||||
AC_SUBST($1_CPU_ENDIAN)
|
||||
|
||||
# Also store the legacy naming of the cpu.
|
||||
# Ie i586 and amd64 instead of ia32 and x64
|
||||
LEGACY_$1_CPU1="$VAR_LEGACY_CPU"
|
||||
AC_SUBST(LEGACY_$1_CPU1)
|
||||
|
||||
# And the second legacy naming of the cpu.
|
||||
# Ie i386 and amd64 instead of ia32 and x64.
|
||||
LEGACY_$1_CPU2="$LEGACY_$1_CPU1"
|
||||
if test "x$LEGACY_$1_CPU1" = xi586; then
|
||||
LEGACY_$1_CPU2=i386
|
||||
fi
|
||||
AC_SUBST(LEGACY_$1_CPU2)
|
||||
|
||||
# And the third legacy naming of the cpu.
|
||||
# Ie only amd64 or sparcv9, used for the ISA_DIR on Solaris.
|
||||
LEGACY_$1_CPU3=""
|
||||
if test "x$$1_CPU" = xx64; then
|
||||
LEGACY_$1_CPU3=amd64
|
||||
fi
|
||||
if test "x$$1_CPU" = xsparcv9; then
|
||||
LEGACY_$1_CPU3=sparcv9
|
||||
fi
|
||||
AC_SUBST(LEGACY_$1_CPU3)
|
||||
])
|
||||
|
||||
# Support macro for PLATFORM_EXTRACT_TARGET_AND_BUILD.
|
||||
# Converts autoconf style CPU name to OpenJDK style, into
|
||||
# VAR_CPU, VAR_CPU_ARCH, VAR_CPU_BITS and VAR_CPU_ENDIAN.
|
||||
AC_DEFUN([PLATFORM_EXTRACT_VARS_FROM_CPU],
|
||||
[
|
||||
# First argument is the cpu name from the trip/quad
|
||||
case "$1" in
|
||||
x86_64)
|
||||
VAR_CPU=x64
|
||||
VAR_CPU=x86_64
|
||||
VAR_CPU_ARCH=x86
|
||||
VAR_CPU_BITS=64
|
||||
VAR_CPU_ENDIAN=little
|
||||
VAR_LEGACY_CPU=amd64
|
||||
;;
|
||||
i?86)
|
||||
VAR_CPU=ia32
|
||||
VAR_CPU=x86
|
||||
VAR_CPU_ARCH=x86
|
||||
VAR_CPU_BITS=32
|
||||
VAR_CPU_ENDIAN=little
|
||||
VAR_LEGACY_CPU=i586
|
||||
;;
|
||||
alpha*)
|
||||
VAR_CPU=alpha
|
||||
VAR_CPU_ARCH=alpha
|
||||
VAR_CPU_BITS=64
|
||||
VAR_CPU_ENDIAN=big
|
||||
VAR_LEGACY_CPU=alpha
|
||||
;;
|
||||
arm*)
|
||||
VAR_CPU=arm
|
||||
VAR_CPU_ARCH=arm
|
||||
VAR_CPU_BITS=32
|
||||
VAR_CPU_ENDIAN=little
|
||||
VAR_LEGACY_CPU=arm
|
||||
;;
|
||||
mips)
|
||||
VAR_CPU=mips
|
||||
VAR_CPU_ARCH=mips
|
||||
VAR_CPU_BITS=woot
|
||||
VAR_CPU_ENDIAN=woot
|
||||
VAR_LEGACY_CPU=mips
|
||||
;;
|
||||
mipsel)
|
||||
VAR_CPU=mipsel
|
||||
VAR_CPU_ARCH=mips
|
||||
VAR_CPU_BITS=woot
|
||||
VAR_CPU_ENDIAN=woot
|
||||
VAR_LEGACY_CPU=mipsel
|
||||
;;
|
||||
powerpc)
|
||||
VAR_CPU=ppc
|
||||
VAR_CPU_ARCH=ppc
|
||||
VAR_CPU_BITS=32
|
||||
VAR_CPU_ENDIAN=big
|
||||
VAR_LEGACY_CPU=ppc
|
||||
;;
|
||||
powerpc64)
|
||||
VAR_CPU=ppc64
|
||||
VAR_CPU_ARCH=ppc
|
||||
VAR_CPU_BITS=64
|
||||
VAR_CPU_ENDIAN=big
|
||||
VAR_LEGACY_CPU=ppc64
|
||||
;;
|
||||
sparc)
|
||||
VAR_CPU=sparc
|
||||
VAR_CPU_ARCH=sparc
|
||||
VAR_CPU_BITS=32
|
||||
VAR_CPU_ENDIAN=big
|
||||
VAR_LEGACY_CPU=sparc
|
||||
;;
|
||||
sparc64)
|
||||
sparcv9)
|
||||
VAR_CPU=sparcv9
|
||||
VAR_CPU_ARCH=sparc
|
||||
VAR_CPU_BITS=64
|
||||
VAR_CPU_ENDIAN=big
|
||||
VAR_LEGACY_CPU=sparcv9
|
||||
;;
|
||||
s390)
|
||||
VAR_CPU=s390
|
||||
VAR_CPU_ARCH=s390
|
||||
VAR_CPU_BITS=32
|
||||
VAR_CPU_ENDIAN=woot
|
||||
VAR_LEGACY_CPU=s390
|
||||
VAR_LEGACY_CPU=s390
|
||||
;;
|
||||
s390x)
|
||||
VAR_CPU=s390x
|
||||
VAR_CPU_ARCH=s390
|
||||
VAR_CPU_BITS=64
|
||||
VAR_CPU_ENDIAN=woot
|
||||
VAR_LEGACY_CPU=s390x
|
||||
;;
|
||||
*)
|
||||
AC_MSG_ERROR([unsupported cpu $1])
|
||||
;;
|
||||
esac
|
||||
|
||||
# Workaround cygwin not knowing about 64 bit.
|
||||
if test "x$VAR_OS" = "xwindows"; then
|
||||
if test "x$PROCESSOR_IDENTIFIER" != "x"; then
|
||||
PROC_ARCH=`echo $PROCESSOR_IDENTIFIER | $CUT -f1 -d' '`
|
||||
case "$PROC_ARCH" in
|
||||
intel64|Intel64|INTEL64|em64t|EM64T|amd64|AMD64|8664|x86_64)
|
||||
VAR_CPU=x64
|
||||
VAR_CPU_BITS=64
|
||||
VAR_LEGACY_CPU=amd64
|
||||
;;
|
||||
esac
|
||||
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_target_bits" = "x64"; then
|
||||
VAR_CPU=x64
|
||||
VAR_CPU_BITS=64
|
||||
VAR_LEGACY_CPU=amd64
|
||||
fi
|
||||
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
|
||||
])
|
||||
|
||||
# Support macro for PLATFORM_EXTRACT_TARGET_AND_BUILD.
|
||||
# Converts autoconf style OS name to OpenJDK style, into
|
||||
# VAR_OS and VAR_OS_API.
|
||||
AC_DEFUN([PLATFORM_EXTRACT_VARS_FROM_OS],
|
||||
[
|
||||
case "$1" in
|
||||
*linux*)
|
||||
VAR_OS=linux
|
||||
VAR_OS_API=posix
|
||||
VAR_OS_FAMILY=gnu
|
||||
;;
|
||||
*solaris*)
|
||||
VAR_OS=solaris
|
||||
VAR_OS_API=posix
|
||||
VAR_OS_FAMILY=sysv
|
||||
;;
|
||||
*darwin*)
|
||||
VAR_OS=macosx
|
||||
VAR_OS_API=posix
|
||||
VAR_OS_FAMILY=bsd
|
||||
;;
|
||||
*bsd*)
|
||||
VAR_OS=bsd
|
||||
VAR_OS_API=posix
|
||||
VAR_OS_FAMILY=bsd
|
||||
;;
|
||||
*cygwin*|*windows*)
|
||||
VAR_OS=windows
|
||||
VAR_OS_API=winapi
|
||||
VAR_OS_FAMILY=windows
|
||||
;;
|
||||
*)
|
||||
AC_MSG_ERROR([unsupported operating system $1])
|
||||
@@ -303,6 +110,208 @@ AC_DEFUN([PLATFORM_EXTRACT_VARS_FROM_OS],
|
||||
esac
|
||||
])
|
||||
|
||||
# Expects $host_os $host_cpu $build_os and $build_cpu
|
||||
# and $with_target_bits to have been setup!
|
||||
#
|
||||
# Translate the standard triplet(quadruplet) definition
|
||||
# of the target/build system into OPENJDK_TARGET_OS, OPENJDK_TARGET_CPU,
|
||||
# OPENJDK_BUILD_OS, etc.
|
||||
AC_DEFUN([PLATFORM_EXTRACT_TARGET_AND_BUILD],
|
||||
[
|
||||
# Copy the autoconf trip/quadruplet verbatim to OPENJDK_TARGET_AUTOCONF_NAME
|
||||
# (from the autoconf "host") and OPENJDK_BUILD_AUTOCONF_NAME
|
||||
# Note that we might later on rewrite e.g. OPENJDK_TARGET_CPU due to reduced build,
|
||||
# but this will not change the value of OPENJDK_TARGET_AUTOCONF_NAME.
|
||||
OPENJDK_TARGET_AUTOCONF_NAME="$host"
|
||||
OPENJDK_BUILD_AUTOCONF_NAME="$build"
|
||||
AC_SUBST(OPENJDK_TARGET_AUTOCONF_NAME)
|
||||
AC_SUBST(OPENJDK_BUILD_AUTOCONF_NAME)
|
||||
|
||||
# Convert the autoconf OS/CPU value to our own data, into the VAR_OS/CPU variables.
|
||||
PLATFORM_EXTRACT_VARS_FROM_OS($host_os)
|
||||
PLATFORM_EXTRACT_VARS_FROM_CPU($host_cpu)
|
||||
# ... and setup our own variables. (Do this explicitely to facilitate searching)
|
||||
OPENJDK_TARGET_OS="$VAR_OS"
|
||||
OPENJDK_TARGET_OS_API="$VAR_OS_API"
|
||||
OPENJDK_TARGET_CPU="$VAR_CPU"
|
||||
OPENJDK_TARGET_CPU_ARCH="$VAR_CPU_ARCH"
|
||||
OPENJDK_TARGET_CPU_BITS="$VAR_CPU_BITS"
|
||||
OPENJDK_TARGET_CPU_ENDIAN="$VAR_CPU_ENDIAN"
|
||||
AC_SUBST(OPENJDK_TARGET_OS)
|
||||
AC_SUBST(OPENJDK_TARGET_OS_API)
|
||||
AC_SUBST(OPENJDK_TARGET_CPU)
|
||||
AC_SUBST(OPENJDK_TARGET_CPU_ARCH)
|
||||
AC_SUBST(OPENJDK_TARGET_CPU_BITS)
|
||||
AC_SUBST(OPENJDK_TARGET_CPU_ENDIAN)
|
||||
|
||||
# Convert the autoconf OS/CPU value to our own data, into the VAR_OS/CPU variables.
|
||||
PLATFORM_EXTRACT_VARS_FROM_OS($build_os)
|
||||
PLATFORM_EXTRACT_VARS_FROM_CPU($build_cpu)
|
||||
# ..and setup our own variables. (Do this explicitely to facilitate searching)
|
||||
OPENJDK_BUILD_OS="$VAR_OS"
|
||||
OPENJDK_BUILD_OS_API="$VAR_OS_API"
|
||||
OPENJDK_BUILD_CPU="$VAR_CPU"
|
||||
OPENJDK_BUILD_CPU_ARCH="$VAR_CPU_ARCH"
|
||||
OPENJDK_BUILD_CPU_BITS="$VAR_CPU_BITS"
|
||||
OPENJDK_BUILD_CPU_ENDIAN="$VAR_CPU_ENDIAN"
|
||||
AC_SUBST(OPENJDK_BUILD_OS)
|
||||
AC_SUBST(OPENJDK_BUILD_OS_API)
|
||||
AC_SUBST(OPENJDK_BUILD_CPU)
|
||||
AC_SUBST(OPENJDK_BUILD_CPU_ARCH)
|
||||
AC_SUBST(OPENJDK_BUILD_CPU_BITS)
|
||||
AC_SUBST(OPENJDK_BUILD_CPU_ENDIAN)
|
||||
])
|
||||
|
||||
# Check if a reduced build (32-bit on 64-bit platforms) is requested, and modify behaviour
|
||||
# accordingly. Must be done after setting up build and target system, but before
|
||||
# doing anything else with these values.
|
||||
AC_DEFUN([PLATFORM_SETUP_TARGET_CPU_BITS],
|
||||
[
|
||||
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@:>@])])
|
||||
|
||||
# We have three types of compiles:
|
||||
# native == normal compilation, target system == build system
|
||||
# cross == traditional cross compilation, target system != build system; special toolchain needed
|
||||
# reduced == using native compilers, but with special flags (e.g. -m32) to produce 32-bit builds on 64-bit machines
|
||||
#
|
||||
if test "x$OPENJDK_BUILD_AUTOCONF_NAME" != "x$OPENJDK_TARGET_AUTOCONF_NAME"; then
|
||||
# We're doing a proper cross-compilation
|
||||
COMPILE_TYPE="cross"
|
||||
else
|
||||
COMPILE_TYPE="native"
|
||||
fi
|
||||
|
||||
if test "x$with_target_bits" != x; then
|
||||
if test "x$COMPILE_TYPE" = "xcross"; then
|
||||
AC_MSG_ERROR([It is not possible to combine --with-target-bits=X and proper cross-compilation. Choose either.])
|
||||
fi
|
||||
|
||||
if test "x$with_target_bits" = x32 && test "x$OPENJDK_TARGET_CPU_BITS" = x64; then
|
||||
# A reduced build is requested
|
||||
COMPILE_TYPE="reduced"
|
||||
OPENJDK_TARGET_CPU_BITS=32
|
||||
if test "x$OPENJDK_TARGET_CPU_ARCH" = "xx86"; then
|
||||
OPENJDK_TARGET_CPU=x86
|
||||
elif test "x$OPENJDK_TARGET_CPU_ARCH" = "xsparc"; then
|
||||
OPENJDK_TARGET_CPU=sparc
|
||||
else
|
||||
AC_MSG_ERROR([Reduced build (--with-target-bits=32) is only supported on x86_64 and sparcv9])
|
||||
fi
|
||||
elif test "x$with_target_bits" = x64 && test "x$OPENJDK_TARGET_CPU_BITS" = x32; then
|
||||
AC_MSG_ERROR([It is not possible to use --with-target-bits=64 on a 32 bit system. Use proper cross-compilation instead.])
|
||||
elif test "x$with_target_bits" = "x$OPENJDK_TARGET_CPU_BITS"; then
|
||||
AC_MSG_NOTICE([--with-target-bits are set to build platform address size; argument has no meaning])
|
||||
else
|
||||
AC_MSG_ERROR([--with-target-bits can only be 32 or 64, you specified $with_target_bits!])
|
||||
fi
|
||||
fi
|
||||
AC_SUBST(COMPILE_TYPE)
|
||||
|
||||
AC_MSG_CHECKING([for compilation type])
|
||||
AC_MSG_RESULT([$COMPILE_TYPE])
|
||||
])
|
||||
|
||||
# Setup the legacy variables, for controlling the old makefiles.
|
||||
#
|
||||
AC_DEFUN([PLATFORM_SETUP_LEGACY_VARS],
|
||||
[
|
||||
# Also store the legacy naming of the cpu.
|
||||
# Ie i586 and amd64 instead of x86 and x86_64
|
||||
OPENJDK_TARGET_CPU_LEGACY="$OPENJDK_TARGET_CPU"
|
||||
if test "x$OPENJDK_TARGET_CPU" = xx86; then
|
||||
OPENJDK_TARGET_CPU_LEGACY="i586"
|
||||
elif test "x$OPENJDK_TARGET_OS" != xmacosx && test "x$OPENJDK_TARGET_CPU" = xx86_64; then
|
||||
# On all platforms except MacOSX replace x86_64 with amd64.
|
||||
OPENJDK_TARGET_CPU_LEGACY="amd64"
|
||||
fi
|
||||
AC_SUBST(OPENJDK_TARGET_CPU_LEGACY)
|
||||
|
||||
# And the second legacy naming of the cpu.
|
||||
# Ie i386 and amd64 instead of x86 and x86_64.
|
||||
OPENJDK_TARGET_CPU_LEGACY_LIB="$OPENJDK_TARGET_CPU"
|
||||
if test "x$OPENJDK_TARGET_CPU" = xx86; then
|
||||
OPENJDK_TARGET_CPU_LEGACY_LIB="i386"
|
||||
elif test "x$OPENJDK_TARGET_CPU" = xx86_64; then
|
||||
OPENJDK_TARGET_CPU_LEGACY_LIB="amd64"
|
||||
fi
|
||||
AC_SUBST(OPENJDK_TARGET_CPU_LEGACY_LIB)
|
||||
|
||||
# This is the name of the cpu (but using i386 and amd64 instead of
|
||||
# x86 and x86_64, respectively), preceeded by a /, to be used when
|
||||
# locating libraries. On macosx, it's empty, though.
|
||||
OPENJDK_TARGET_CPU_LIBDIR="/$OPENJDK_TARGET_CPU_LEGACY_LIB"
|
||||
if test "x$OPENJDK_TARGET_OS" = xmacosx; then
|
||||
OPENJDK_TARGET_CPU_LIBDIR=""
|
||||
fi
|
||||
AC_SUBST(OPENJDK_TARGET_CPU_LIBDIR)
|
||||
|
||||
# OPENJDK_TARGET_CPU_ISADIR is normally empty. On 64-bit Solaris systems, it is set to
|
||||
# /amd64 or /sparcv9. This string is appended to some library paths, like this:
|
||||
# /usr/lib${OPENJDK_TARGET_CPU_ISADIR}/libexample.so
|
||||
OPENJDK_TARGET_CPU_ISADIR=""
|
||||
if test "x$OPENJDK_TARGET_OS" = xsolaris; then
|
||||
if test "x$OPENJDK_TARGET_CPU" = xx86_64; then
|
||||
OPENJDK_TARGET_CPU_ISADIR="/amd64"
|
||||
elif test "x$OPENJDK_TARGET_CPU" = xsparcv9; then
|
||||
OPENJDK_TARGET_CPU_ISADIR="/sparcv9"
|
||||
fi
|
||||
fi
|
||||
AC_SUBST(OPENJDK_TARGET_CPU_ISADIR)
|
||||
|
||||
# Setup OPENJDK_TARGET_CPU_OSARCH, which is used to set the os.arch Java system property
|
||||
OPENJDK_TARGET_CPU_OSARCH="$OPENJDK_TARGET_CPU"
|
||||
if test "x$OPENJDK_TARGET_OS" = xlinux && test "x$OPENJDK_TARGET_CPU" = xx86; then
|
||||
# On linux only, we replace x86 with i386.
|
||||
OPENJDK_TARGET_CPU_OSARCH="i386"
|
||||
elif test "x$OPENJDK_TARGET_OS" != xmacosx && test "x$OPENJDK_TARGET_CPU" = xx86_64; then
|
||||
# On all platforms except macosx, we replace x86_64 with amd64.
|
||||
OPENJDK_TARGET_CPU_OSARCH="amd64"
|
||||
fi
|
||||
AC_SUBST(OPENJDK_TARGET_CPU_OSARCH)
|
||||
|
||||
OPENJDK_TARGET_CPU_JLI="$OPENJDK_TARGET_CPU"
|
||||
if test "x$OPENJDK_TARGET_CPU" = xx86; then
|
||||
OPENJDK_TARGET_CPU_JLI="i386"
|
||||
elif test "x$OPENJDK_TARGET_OS" != xmacosx && test "x$OPENJDK_TARGET_CPU" = xx86_64; then
|
||||
# On all platforms except macosx, we replace x86_64 with amd64.
|
||||
OPENJDK_TARGET_CPU_JLI="amd64"
|
||||
fi
|
||||
# Now setup the -D flags for building libjli.
|
||||
OPENJDK_TARGET_CPU_JLI_CFLAGS="-DLIBARCHNAME='\"$OPENJDK_TARGET_CPU_JLI\"'"
|
||||
if test "x$OPENJDK_TARGET_OS" = xsolaris; then
|
||||
if test "x$OPENJDK_TARGET_CPU_ARCH" = xsparc; then
|
||||
OPENJDK_TARGET_CPU_JLI_CFLAGS="$OPENJDK_TARGET_CPU_JLI_CFLAGS -DLIBARCH32NAME='\"sparc\"' -DLIBARCH64NAME='\"sparcv9\"'"
|
||||
elif test "x$OPENJDK_TARGET_CPU_ARCH" = xx86; then
|
||||
OPENJDK_TARGET_CPU_JLI_CFLAGS="$OPENJDK_TARGET_CPU_JLI_CFLAGS -DLIBARCH32NAME='\"i386\"' -DLIBARCH64NAME='\"amd64\"'"
|
||||
fi
|
||||
fi
|
||||
AC_SUBST(OPENJDK_TARGET_CPU_JLI_CFLAGS)
|
||||
|
||||
# Setup OPENJDK_TARGET_OS_API_DIR, used in source paths.
|
||||
if test "x$OPENJDK_TARGET_OS_API" = xposix; then
|
||||
OPENJDK_TARGET_OS_API_DIR="solaris"
|
||||
fi
|
||||
if test "x$OPENJDK_TARGET_OS_API" = xwinapi; then
|
||||
OPENJDK_TARGET_OS_API_DIR="windows"
|
||||
fi
|
||||
AC_SUBST(OPENJDK_TARGET_OS_API_DIR)
|
||||
|
||||
if test "x$OPENJDK_TARGET_CPU_BITS" = x64; then
|
||||
A_LP64="LP64:="
|
||||
ADD_LP64="-D_LP64=1"
|
||||
fi
|
||||
AC_SUBST(LP64,$A_LP64)
|
||||
|
||||
if test "x$COMPILE_TYPE" = "xcross"; then
|
||||
# FIXME: ... or should this include reduced builds..?
|
||||
DEFINE_CROSS_COMPILE_ARCH="CROSS_COMPILE_ARCH:=$OPENJDK_TARGET_CPU_LEGACY"
|
||||
else
|
||||
DEFINE_CROSS_COMPILE_ARCH=""
|
||||
fi
|
||||
AC_SUBST(DEFINE_CROSS_COMPILE_ARCH)
|
||||
])
|
||||
|
||||
AC_DEFUN([PLATFORM_SET_RELEASE_FILE_OS_VALUES],
|
||||
[
|
||||
if test "x$OPENJDK_TARGET_OS" = "xsolaris"; then
|
||||
@@ -315,7 +324,11 @@ AC_DEFUN([PLATFORM_SET_RELEASE_FILE_OS_VALUES],
|
||||
fi
|
||||
if test "x$OPENJDK_TARGET_OS" = "xwindows"; then
|
||||
REQUIRED_OS_NAME=Windows
|
||||
REQUIRED_OS_VERSION=5.1
|
||||
if test "x$OPENJDK_TARGET_CPU_BITS" = "x64"; then
|
||||
REQUIRED_OS_VERSION=5.2
|
||||
else
|
||||
REQUIRED_OS_VERSION=5.1
|
||||
fi
|
||||
fi
|
||||
if test "x$OPENJDK_TARGET_OS" = "xmacosx"; then
|
||||
REQUIRED_OS_NAME=Darwin
|
||||
@@ -338,42 +351,10 @@ 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
|
||||
PLATFORM_EXTRACT_TARGET_AND_BUILD
|
||||
PLATFORM_SETUP_TARGET_CPU_BITS
|
||||
PLATFORM_SET_RELEASE_FILE_OS_VALUES
|
||||
PLATFORM_SETUP_LEGACY_VARS
|
||||
])
|
||||
|
||||
AC_DEFUN_ONCE([PLATFORM_SETUP_OPENJDK_BUILD_OS_VERSION],
|
||||
@@ -391,7 +372,26 @@ AC_SUBST(OS_VERSION_MINOR)
|
||||
AC_SUBST(OS_VERSION_MICRO)
|
||||
])
|
||||
|
||||
AC_DEFUN_ONCE([PLATFORM_TEST_OPENJDK_TARGET_BITS],
|
||||
# Support macro for PLATFORM_SETUP_OPENJDK_TARGET_BITS.
|
||||
# Add -mX to various FLAGS variables.
|
||||
AC_DEFUN([PLATFORM_SET_COMPILER_TARGET_BITS_FLAGS],
|
||||
[
|
||||
# keep track of c/cxx flags that we added outselves...
|
||||
# to prevent emitting warning...
|
||||
ADDED_CFLAGS=" -m${OPENJDK_TARGET_CPU_BITS}"
|
||||
ADDED_CXXFLAGS=" -m${OPENJDK_TARGET_CPU_BITS}"
|
||||
ADDED_LDFLAGS=" -m${OPENJDK_TARGET_CPU_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}"
|
||||
])
|
||||
|
||||
AC_DEFUN_ONCE([PLATFORM_SETUP_OPENJDK_TARGET_BITS],
|
||||
[
|
||||
###############################################################################
|
||||
#
|
||||
@@ -399,72 +399,47 @@ AC_DEFUN_ONCE([PLATFORM_TEST_OPENJDK_TARGET_BITS],
|
||||
# (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"
|
||||
if test "x$OPENJDK_TARGET_OS" = xsolaris; then
|
||||
# Always specify -m flags on Solaris
|
||||
PLATFORM_SET_COMPILER_TARGET_BITS_FLAGS
|
||||
elif test "x$COMPILE_TYPE" = xreduced; then
|
||||
if test "x$OPENJDK_TARGET_OS" != xwindows; then
|
||||
# Specify -m if running reduced on other Posix platforms
|
||||
PLATFORM_SET_COMPILER_TARGET_BITS_FLAGS
|
||||
fi
|
||||
fi
|
||||
|
||||
# Make compilation sanity check
|
||||
AC_CHECK_HEADERS([stdio.h], , [
|
||||
AC_MSG_NOTICE([Failed to compile stdio.h. This likely implies missing compile dependencies.])
|
||||
if test "x$COMPILE_TYPE" = xreduced; then
|
||||
AC_MSG_NOTICE([You are doing a reduced build. Check that you have 32-bit libraries installed.])
|
||||
elif test "x$COMPILE_TYPE" = xcross; then
|
||||
AC_MSG_NOTICE([You are doing a cross-compilation. Check that you have all target platform libraries installed.])
|
||||
fi
|
||||
AC_MSG_ERROR([Cannot continue.])
|
||||
])
|
||||
|
||||
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$SIZEOF_INT_P" != "x$ac_cv_sizeof_int_p"; then
|
||||
# Workaround autoconf bug, see http://lists.gnu.org/archive/html/autoconf/2010-07/msg00004.html
|
||||
SIZEOF_INT_P="$ac_cv_sizeof_int_p"
|
||||
fi
|
||||
|
||||
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
|
||||
if test "x$SIZEOF_INT_P" = x; then
|
||||
# The test failed, lets stick to the assumed value.
|
||||
AC_MSG_WARN([The number of bits in the target could not be determined, using $OPENJDK_TARGET_CPU_BITS.])
|
||||
else
|
||||
ARCH_DATA_MODEL=`expr 8 \* $ac_cv_sizeof_int_p`
|
||||
TESTED_TARGET_CPU_BITS=`expr 8 \* $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}"
|
||||
if test "x$TESTED_TARGET_CPU_BITS" != "x$OPENJDK_TARGET_CPU_BITS"; then
|
||||
AC_MSG_ERROR([The tested number of bits in the target ($TESTED_TARGET_CPU_BITS) differs from the number of bits expected to be found in the target ($OPENJDK_TARGET_CPU_BITS)])
|
||||
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_MSG_RESULT([$OPENJDK_TARGET_CPU_BITS bits])
|
||||
])
|
||||
|
||||
AC_DEFUN_ONCE([PLATFORM_SETUP_OPENJDK_TARGET_ENDIANNESS],
|
||||
@@ -478,21 +453,7 @@ AC_C_BIGENDIAN([ENDIAN="big"],[ENDIAN="little"],[ENDIAN="unknown"],[ENDIAN="univ
|
||||
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"
|
||||
AC_MSG_ERROR([The tested endian in the target ($ENDIAN) differs from the endian expected to be found in the target ($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?
|
||||
#
|
||||
#
|
||||
])
|
||||
|
||||
@@ -250,31 +250,8 @@ 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"
|
||||
BUILD_OUTPUT="$OUTPUT_ROOT"
|
||||
AC_SUBST(BUILD_OUTPUT)
|
||||
|
||||
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,7 +23,11 @@
|
||||
# questions.
|
||||
#
|
||||
|
||||
# Configured @DATE_WHEN_CONFIGURED@ to build for a @OPENJDK_TARGET_SYSTEM@ system,
|
||||
# Configured @DATE_WHEN_CONFIGURED@ to build
|
||||
# for target system @OPENJDK_TARGET_OS@-@OPENJDK_TARGET_CPU@
|
||||
# (called @OPENJDK_TARGET_AUTOCONF_NAME@ by autoconf)
|
||||
# on build system @OPENJDK_BUILD_OS@-@OPENJDK_BUILD_CPU@
|
||||
# (called @OPENJDK_BUILD_AUTOCONF_NAME@ by autoconf)
|
||||
# using 'configure @CONFIGURE_COMMAND_LINE@'
|
||||
|
||||
# When calling macros, the spaces between arguments are
|
||||
@@ -40,6 +44,17 @@ DQUOTE:="
|
||||
define NEWLINE:=
|
||||
endef
|
||||
|
||||
# A self-referential reference to this file.
|
||||
SPEC:=@SPEC@
|
||||
|
||||
# Specify where the spec file is.
|
||||
MAKE_ARGS="SPEC=$(SPEC)"
|
||||
|
||||
# TODO The logic for finding and setting MAKE is currently not working
|
||||
# well on windows. Disable it TEMPORARILY there for now.
|
||||
ifneq (@OPENJDK_TARGET_OS@,windows)
|
||||
MAKE:=@MAKE@
|
||||
endif
|
||||
|
||||
# Pass along the verbosity setting.
|
||||
ifeq (,$(findstring VERBOSE=,$(MAKE)))
|
||||
@@ -51,27 +66,16 @@ ifeq (,$(findstring -R,$(MAKE)))
|
||||
MAKE:=$(MAKE) -R
|
||||
endif
|
||||
|
||||
# Specify where the spec file is.
|
||||
ifeq (,$(findstring SPEC=,$(MAKE)))
|
||||
MAKE:=$(MAKE) SPEC=@SPEC@
|
||||
endif
|
||||
|
||||
# Specify where the common include directory for makefiles is.
|
||||
ifeq (,$(findstring -I @SRC_ROOT@/common/makefiles,$(MAKE)))
|
||||
MAKE:=$(MAKE) -I @SRC_ROOT@/common/makefiles
|
||||
endif
|
||||
|
||||
# A self-referential reference to this file.
|
||||
SPEC:=@SPEC@
|
||||
|
||||
# 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@
|
||||
@@ -79,12 +83,20 @@ OPENJDK_TARGET_CPU_ARCH:=@OPENJDK_TARGET_CPU_ARCH@
|
||||
OPENJDK_TARGET_CPU_BITS:=@OPENJDK_TARGET_CPU_BITS@
|
||||
OPENJDK_TARGET_CPU_ENDIAN:=@OPENJDK_TARGET_CPU_ENDIAN@
|
||||
|
||||
COMPILE_TYPE:=@COMPILE_TYPE@
|
||||
|
||||
# Legacy support
|
||||
OPENJDK_TARGET_CPU_ISADIR:=@OPENJDK_TARGET_CPU_ISADIR@
|
||||
OPENJDK_TARGET_CPU_LIBDIR:=@OPENJDK_TARGET_CPU_LIBDIR@
|
||||
OPENJDK_TARGET_CPU_LEGACY:=@OPENJDK_TARGET_CPU_LEGACY@
|
||||
OPENJDK_TARGET_CPU_LEGACY_LIB:=@OPENJDK_TARGET_CPU_LEGACY_LIB@
|
||||
OPENJDK_TARGET_CPU_OSARCH:=@OPENJDK_TARGET_CPU_OSARCH@
|
||||
OPENJDK_TARGET_CPU_JLI_CFLAGS:=@OPENJDK_TARGET_CPU_JLI_CFLAGS@
|
||||
OPENJDK_TARGET_OS_API_DIR:=@OPENJDK_TARGET_OS_API_DIR@
|
||||
|
||||
# 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@
|
||||
@@ -96,21 +108,6 @@ OPENJDK_BUILD_CPU_ENDIAN:=@OPENJDK_BUILD_CPU_ENDIAN@
|
||||
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
|
||||
@LP64@
|
||||
ENDIAN:=@OPENJDK_TARGET_CPU_ENDIAN@
|
||||
@SET_OPENJDK@
|
||||
JIGSAW:=@JIGSAW@
|
||||
LIBM:=-lm
|
||||
@@ -143,6 +140,9 @@ JAXWS_TOPDIR:=@JAXWS_TOPDIR@
|
||||
HOTSPOT_TOPDIR:=@HOTSPOT_TOPDIR@
|
||||
COPYRIGHT_YEAR:=@COPYRIGHT_YEAR@
|
||||
|
||||
# Location where build customization files may be found
|
||||
CUSTOM_MAKE_DIR:=@CUSTOM_MAKE_DIR@
|
||||
|
||||
# Information gathered from the version.numbers file.
|
||||
JDK_MAJOR_VERSION:=@JDK_MAJOR_VERSION@
|
||||
JDK_MINOR_VERSION:=@JDK_MINOR_VERSION@
|
||||
@@ -171,17 +171,12 @@ DEBUG_LEVEL:=@DEBUG_LEVEL@
|
||||
# The JDK variant is a name for a specific set of modules to be compiled for the JDK.
|
||||
JDK_VARIANT:=@JDK_VARIANT@
|
||||
|
||||
# Legacy defines controlling the JDK variant embedded.
|
||||
@JAVASE_EMBEDDED@
|
||||
@MINIMIZE_RAM_USAGE@
|
||||
|
||||
# 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@
|
||||
# Legacy defines controlled by the SUPPORT_HEADLESS and SUPPORT_HEADFUL options.
|
||||
@BUILD_HEADLESS@
|
||||
@BUILD_HEADLESS_ONLY@
|
||||
|
||||
# These are the libjvms that we want to build.
|
||||
# The java launcher uses the default.
|
||||
@@ -194,53 +189,43 @@ 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@
|
||||
# Universal binaries on macosx
|
||||
MACOSX_UNIVERSAL=@MACOSX_UNIVERSAL@
|
||||
|
||||
# Legacy setting: -debug or -fastdebug
|
||||
# Still used in version string...
|
||||
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.
|
||||
# JDK_OUTPUTDIR specifies 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.
|
||||
# layout for the jdk and the jre inside the IMAGES_OUTPUTDIR 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@
|
||||
BUILD_OUTPUT:=@BUILD_OUTPUT@
|
||||
LANGTOOLS_OUTPUTDIR=$(BUILD_OUTPUT)/langtools
|
||||
CORBA_OUTPUTDIR=$(BUILD_OUTPUT)/corba
|
||||
JAXP_OUTPUTDIR=$(BUILD_OUTPUT)/jaxp
|
||||
JAXWS_OUTPUTDIR=$(BUILD_OUTPUT)/jaxws
|
||||
HOTSPOT_OUTPUTDIR=$(BUILD_OUTPUT)/hotspot
|
||||
JDK_OUTPUTDIR=$(BUILD_OUTPUT)/jdk
|
||||
IMAGES_OUTPUTDIR=$(BUILD_OUTPUT)/images
|
||||
|
||||
# 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)
|
||||
LANGTOOLS_DIST=$(LANGTOOLS_OUTPUTDIR)/dist
|
||||
CORBA_DIST=$(CORBA_OUTPUTDIR)/dist
|
||||
JAXP_DIST=$(JAXP_OUTPUTDIR)/dist
|
||||
JAXWS_DIST=$(JAXWS_OUTPUTDIR)/dist
|
||||
HOTSPOT_DIST=$(HOTSPOT_OUTPUTDIR)/dist
|
||||
|
||||
# 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@
|
||||
BOOT_TOOLSJAR=$(BOOT_JDK)/lib/tools.jar
|
||||
|
||||
# When compiling Java source to be run by the boot jdk
|
||||
# use these extra flags, eg -source 6 -target 6
|
||||
@@ -248,30 +233,18 @@ 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@
|
||||
# Enable sjavac support = use a javac server,
|
||||
# multi core javac compilation and dependency tracking.
|
||||
ENABLE_SJAVAC:=@ENABLE_SJAVAC@
|
||||
# Store sjavac server synchronization files here, and
|
||||
# the sjavac server log files.
|
||||
SJAVAC_SERVER_DIR:=@SJAVAC_SERVER_DIR@
|
||||
# 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@
|
||||
SJAVAC_SERVER_CORES:=@SJAVAC_SERVER_CORES@
|
||||
|
||||
# The OpenJDK makefiles should be changed to using the standard
|
||||
# configure output ..._CFLAGS and ..._LIBS. In the meantime we
|
||||
@@ -280,7 +253,6 @@ FREETYPE2_LIB_PATH:=@FREETYPE2_LIB_PATH@
|
||||
FREETYPE2_LIBS:=@FREETYPE2_LIBS@
|
||||
FREETYPE2_CFLAGS:=@FREETYPE2_CFLAGS@
|
||||
USING_SYSTEM_FT_LIB=@USING_SYSTEM_FT_LIB@
|
||||
ALT_CUPS_HEADERS_PATH:=$(patsubst -I%,%,$(filter -I%,@CUPS_CFLAGS@))
|
||||
CUPS_CFLAGS:=@CUPS_CFLAGS@
|
||||
|
||||
PACKAGE_PATH=@PACKAGE_PATH@
|
||||
@@ -288,8 +260,6 @@ 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@
|
||||
@@ -338,7 +308,7 @@ OBJC:=@CCACHE@ @OBJC@
|
||||
CPP:=@UNCYGDRIVE@ @CPP@
|
||||
#CPPFLAGS:=@CPPFLAGS@
|
||||
|
||||
# The linker can be gcc or ld on posix systems, or link.exe on winapi systems.
|
||||
# The linker can be gcc or ld on posix systems, or link.exe on windows systems.
|
||||
LD:=@UNCYGDRIVE@ @LD@
|
||||
|
||||
# LDFLAGS used to link the jdk native libraries (C-code)
|
||||
@@ -353,6 +323,9 @@ LDEXE:=@UNCYGDRIVE@ @LDEXE@
|
||||
LDFLAGS_JDKEXE:=@LDFLAGS_JDKEXE@
|
||||
LDFLAGS_JDKEXE_SUFFIX:=@LDFLAGS_JDKEXE_SUFFIX@
|
||||
|
||||
# LDFLAGS specific to C++ linking.
|
||||
LDFLAGS_CXX_JDK:=@LDFLAGS_CXX_JDK@
|
||||
|
||||
# Sometimes a different linker is needed for c++ libs
|
||||
LDCXX:=@UNCYGDRIVE@ @LDCXX@
|
||||
# The flags for linking libstdc++ linker.
|
||||
@@ -361,28 +334,22 @@ 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.
|
||||
@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:=@UNCYGDRIVE@ @HOSTCC@
|
||||
HOSTCXX:=@UNCYGDRIVE@ @HOSTCXX@
|
||||
# And of course, the jdk spells HOSTCC as NIO_CC/HOST_CC
|
||||
HOST_CC:=@UNCYGDRIVE@ @HOSTCC@
|
||||
NIO_CC:=@UNCYGDRIVE@ @HOSTCC@
|
||||
|
||||
HOST_LD:=@UNCYGDRIVE@ @HOSTLD@
|
||||
# BUILD_CC/BUILD_LD is a compiler/linker that generates code that is runnable on the
|
||||
# build platform.
|
||||
BUILD_CC:=@UNCYGDRIVE@ @BUILD_CC@
|
||||
BUILD_LD:=@UNCYGDRIVE@ @BUILD_LD@
|
||||
|
||||
AS:=@UNCYGDRIVE@ @AS@
|
||||
ASFLAGS:=@ASFLAGS@
|
||||
|
||||
# AR is used to create a static library (is ar in posix, lib.exe in winapi)
|
||||
# AR is used to create a static library (is ar in posix, lib.exe in windows)
|
||||
AR:=@UNCYGDRIVE@ @AR@
|
||||
ARFLAGS:=@ARFLAGS@
|
||||
|
||||
NM:=@UNCYGDRIVE@ @NM@
|
||||
STRIP:=@UNCYGDRIVE@ @STRIP@
|
||||
MCS:=@UNCYGDRIVE@ @MCS@
|
||||
NM:=@NM@
|
||||
STRIP:=@STRIP@
|
||||
MCS:=@MCS@
|
||||
|
||||
LIPO:=@LIPO@
|
||||
|
||||
# Command to create a shared library
|
||||
SHARED_LIBRARY_FLAGS:=@SHARED_LIBRARY_FLAGS@
|
||||
@@ -414,6 +381,7 @@ 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@
|
||||
SET_EXECUTABLE_ORIGIN=@SET_EXECUTABLE_ORIGIN@
|
||||
|
||||
# Different OS:es have different ways of naming shared libraries.
|
||||
# The SHARED_LIBRARY macro takes "verify" as and argument and returns:
|
||||
@@ -432,21 +400,20 @@ POST_MCS_CMD:=@POST_MCS_CMD@
|
||||
|
||||
JAVA_FLAGS:=@BOOT_JDK_JVMARGS@
|
||||
|
||||
JAVA=@UNCYGDRIVE@ @JAVA@ $(JAVA_FLAGS)
|
||||
JAVA=@UNCYGDRIVE@ $(BOOT_JDK)/bin/java $(JAVA_FLAGS)
|
||||
|
||||
JAVAC:=@UNCYGDRIVE@ @JAVAC@
|
||||
JAVAC_FLAGS:=@JAVAC_FLAGS@
|
||||
JAVAC=@UNCYGDRIVE@ $(BOOT_JDK)/bin/javac
|
||||
# Hotspot sets this variable before reading the SPEC when compiling sa-jdi.jar. Avoid
|
||||
# overriding that value by using ?=.
|
||||
JAVAC_FLAGS?=@JAVAC_FLAGS@
|
||||
|
||||
JAVAH:=@UNCYGDRIVE@ @JAVAH@
|
||||
JAVAH=@UNCYGDRIVE@ $(BOOT_JDK)/bin/javah
|
||||
|
||||
JAR:=@UNCYGDRIVE@ @JAR@
|
||||
JAR=@UNCYGDRIVE@ $(BOOT_JDK)/bin/jar
|
||||
|
||||
RMIC:=@UNCYGDRIVE@ @RMIC@
|
||||
RMIC=@UNCYGDRIVE@ $(BOOT_JDK)/bin/rmic
|
||||
|
||||
NATIVE2ASCII:=@UNCYGDRIVE@ @NATIVE2ASCII@
|
||||
|
||||
BOOT_JAR_CMD:=@UNCYGDRIVE@ @JAR@
|
||||
BOOT_JAR_JFLAGS:=
|
||||
NATIVE2ASCII=@UNCYGDRIVE@ $(BOOT_JDK)/bin/native2ascii
|
||||
|
||||
# Base flags for RC
|
||||
# Guarding this against resetting value. Legacy make files include spec multiple
|
||||
@@ -456,11 +423,12 @@ RC_FLAGS:=@RC_FLAGS@
|
||||
endif
|
||||
|
||||
# A specific java binary with specific options can be used to run
|
||||
# the long running background javac server and other long running tasks.
|
||||
SERVER_JAVA:=@UNCYGDRIVE@ @SERVER_JAVA@
|
||||
# the long running background sjavac servers and other long running tasks.
|
||||
SJAVAC_SERVER_JAVA:=@UNCYGDRIVE@ @SJAVAC_SERVER_JAVA@
|
||||
|
||||
# Tools adhering to a minimal and common standard of posix compliance.
|
||||
AWK:=@AWK@
|
||||
BASENAME:=@BASENAME@
|
||||
CAT:=@CAT@
|
||||
CCACHE:=@CCACHE@
|
||||
# CD is going away, but remains to cater for legacy makefiles.
|
||||
@@ -520,8 +488,6 @@ 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@
|
||||
@@ -559,17 +525,6 @@ 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
|
||||
@@ -634,5 +589,5 @@ 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
|
||||
# Include the custom-spec.gmk file if it exists
|
||||
-include $(dir @SPEC@)/custom-spec.gmk
|
||||
|
||||
@@ -23,505 +23,14 @@
|
||||
# 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@"
|
||||
FIND="@FIND@"
|
||||
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@"
|
||||
POST_STRIP_CMD="@POST_STRIP_CMD@"
|
||||
|
||||
@@ -31,6 +31,19 @@ AC_DEFUN_ONCE([TOOLCHAIN_SETUP_VISUAL_STUDIO_ENV],
|
||||
# the set env variables into the spec file.
|
||||
SETUPDEVENV="# No special vars"
|
||||
if test "x$OPENJDK_BUILD_OS" = "xwindows"; then
|
||||
# Store path to cygwin link.exe to help excluding it when searching for
|
||||
# VS linker.
|
||||
AC_PATH_PROG(CYGWIN_LINK, link)
|
||||
AC_MSG_CHECKING([if the first found link.exe is actually the Cygwin link tool])
|
||||
"$CYGWIN_LINK" --version > /dev/null
|
||||
if test $? -eq 0 ; then
|
||||
AC_MSG_RESULT([yes])
|
||||
else
|
||||
AC_MSG_RESULT([no])
|
||||
# This might be the VS linker. Don't exclude it later on.
|
||||
CYGWIN_LINK=""
|
||||
fi
|
||||
|
||||
# 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
|
||||
@@ -57,12 +70,12 @@ if test "x$OPENJDK_BUILD_OS" = "xwindows"; then
|
||||
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)
|
||||
case "$OPENJDK_TARGET_CPU" in
|
||||
x86)
|
||||
VARSBAT_ARCH=x86
|
||||
;;
|
||||
*)
|
||||
VARSBAT_ARCH=$LEGACY_OPENJDK_TARGET_CPU1
|
||||
x86_64)
|
||||
VARSBAT_ARCH=amd64
|
||||
;;
|
||||
esac
|
||||
# Lets extract the variables that are set by vcvarsall.bat/vsvars32.bat/vsvars64.bat
|
||||
@@ -122,9 +135,6 @@ 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.
|
||||
@@ -153,44 +163,28 @@ AC_DEFUN_ONCE([TOOLCHAIN_SETUP_PATHS],
|
||||
# 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"
|
||||
if test "x$COMPILE_TYPE" = "xcross"; then
|
||||
# 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])
|
||||
# once. Also, we need to do this before adding a tools dir to the path,
|
||||
# otherwise we might pick up cross-compilers which don't use standard naming.
|
||||
# Otherwise, we'll set the BUILD_tools to the native tools, but that'll have
|
||||
# to wait until they are properly discovered.
|
||||
AC_PATH_PROGS(BUILD_CC, [cl cc gcc])
|
||||
SET_FULL_PATH(BUILD_CC)
|
||||
AC_PATH_PROGS(BUILD_CXX, [cl CC g++])
|
||||
SET_FULL_PATH(BUILD_CXX)
|
||||
AC_PATH_PROG(BUILD_LD, ld)
|
||||
SET_FULL_PATH(BUILD_LD)
|
||||
fi
|
||||
AC_SUBST(BUILD_CC)
|
||||
AC_SUBST(BUILD_CXX)
|
||||
AC_SUBST(BUILD_LD)
|
||||
|
||||
# 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.
|
||||
DEVKIT=
|
||||
BDEPS_CHECK_MODULE(DEVKIT, devkit, xxx,
|
||||
[# Found devkit
|
||||
PATH="$DEVKIT/bin:$PATH"
|
||||
@@ -218,21 +212,6 @@ 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
|
||||
@@ -251,7 +230,7 @@ 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)
|
||||
SET_FULL_PATH(CC)
|
||||
|
||||
AC_PROG_CXX([cl CC g++])
|
||||
if test "x$CXX" = xCC && test "x$OPENJDK_BUILD_OS" = xmacosx; then
|
||||
@@ -259,7 +238,7 @@ if test "x$CXX" = xCC && test "x$OPENJDK_BUILD_OS" = xmacosx; then
|
||||
# c++ code. Override.
|
||||
CXX="g++"
|
||||
fi
|
||||
WHICHCMD(CXX)
|
||||
SET_FULL_PATH(CXX)
|
||||
|
||||
if test "x$CXX" = x || test "x$CC" = x; then
|
||||
HELP_MSG_MISSING_DEPENDENCY([devkit])
|
||||
@@ -268,7 +247,7 @@ fi
|
||||
|
||||
if test "x$OPENJDK_BUILD_OS" != xwindows; then
|
||||
AC_PROG_OBJC
|
||||
WHICHCMD(OBJC)
|
||||
SET_FULL_PATH(OBJC)
|
||||
else
|
||||
OBJC=
|
||||
fi
|
||||
@@ -279,19 +258,11 @@ 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"
|
||||
AC_SUBST(LD)
|
||||
# LDEXE is the linker to use, when creating executables.
|
||||
AC_SUBST(LDEXE)
|
||||
# Linking C++ libraries.
|
||||
@@ -299,8 +270,10 @@ AC_SUBST(LDCXX)
|
||||
# Linking C++ executables.
|
||||
AC_SUBST(LDEXECXX)
|
||||
|
||||
AC_CHECK_TOOL(AR, ar)
|
||||
WHICHCMD(AR)
|
||||
if test "x$OPENJDK_BUILD_OS" != xwindows; then
|
||||
AC_CHECK_TOOL(AR, ar)
|
||||
SET_FULL_PATH(AR)
|
||||
fi
|
||||
if test "x$OPENJDK_BUILD_OS" = xmacosx; then
|
||||
ARFLAGS="-r"
|
||||
else
|
||||
@@ -316,25 +289,31 @@ AS_IF([test "x$OPENJDK_BUILD_OS" = xwindows], [
|
||||
EXE_OUT_OPTION=-out:
|
||||
LD_OUT_OPTION=-out:
|
||||
AR_OUT_OPTION=-out:
|
||||
# On Windows, reject /usr/bin/link, which is a cygwin
|
||||
# On Windows, reject /usr/bin/link (as determined in CYGWIN_LINK), which is a cygwin
|
||||
# program for something completely different.
|
||||
AC_CHECK_PROG([WINLD], [link],[link],,, [/usr/bin/link])
|
||||
AC_CHECK_PROG([WINLD], [link],[link],,, [$CYGWIN_LINK])
|
||||
# Since we must ignore the first found link, WINLD will contain
|
||||
# the full path to the link.exe program.
|
||||
WHICHCMD_SPACESAFE([WINLD])
|
||||
SET_FULL_PATH_SPACESAFE([WINLD])
|
||||
printf "Windows linker was found at $WINLD\n"
|
||||
AC_MSG_CHECKING([if the found link.exe is actually the Visual Studio linker])
|
||||
"$WINLD" --version > /dev/null
|
||||
if test $? -eq 0 ; then
|
||||
AC_MSG_RESULT([no])
|
||||
AC_MSG_ERROR([This is the Cygwin link tool. Please check your PATH and rerun configure.])
|
||||
else
|
||||
AC_MSG_RESULT([yes])
|
||||
fi
|
||||
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])
|
||||
SET_FULL_PATH_SPACESAFE([MT])
|
||||
# The resource compiler
|
||||
AC_CHECK_PROG([RC], [rc], [rc],,, [/usr/bin/rc])
|
||||
WHICHCMD_SPACESAFE([RC])
|
||||
SET_FULL_PATH_SPACESAFE([RC])
|
||||
|
||||
RC_FLAGS="-nologo /l 0x409 /r"
|
||||
AS_IF([test "x$VARIANT" = xOPT], [
|
||||
@@ -354,12 +333,12 @@ AS_IF([test "x$OPENJDK_BUILD_OS" = xwindows], [
|
||||
|
||||
# lib.exe is used to create static libraries.
|
||||
AC_CHECK_PROG([WINAR], [lib],[lib],,,)
|
||||
WHICHCMD_SPACESAFE([WINAR])
|
||||
SET_FULL_PATH_SPACESAFE([WINAR])
|
||||
AR="$WINAR"
|
||||
ARFLAGS="-nologo -NODEFAULTLIB:MSVCRT"
|
||||
|
||||
AC_CHECK_PROG([DUMPBIN], [dumpbin], [dumpbin],,,)
|
||||
WHICHCMD_SPACESAFE([DUMPBIN])
|
||||
SET_FULL_PATH_SPACESAFE([DUMPBIN])
|
||||
|
||||
COMPILER_TYPE=CL
|
||||
CCXXFLAGS="$CCXXFLAGS -nologo"
|
||||
@@ -368,10 +347,20 @@ AC_SUBST(RC_FLAGS)
|
||||
AC_SUBST(COMPILER_TYPE)
|
||||
|
||||
AC_PROG_CPP
|
||||
WHICHCMD(CPP)
|
||||
SET_FULL_PATH(CPP)
|
||||
|
||||
AC_PROG_CXXCPP
|
||||
WHICHCMD(CXXCPP)
|
||||
SET_FULL_PATH(CXXCPP)
|
||||
|
||||
if test "x$COMPILE_TYPE" != "xcross"; then
|
||||
# If we are not cross compiling, use the same compilers for
|
||||
# building the build platform executables. The cross-compilation
|
||||
# case needed to be done earlier, but this can only be done after
|
||||
# the native tools have been localized.
|
||||
BUILD_CC="$CC"
|
||||
BUILD_CXX="$CXX"
|
||||
BUILD_LD="$LD"
|
||||
fi
|
||||
|
||||
# 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
|
||||
@@ -386,27 +375,24 @@ fi
|
||||
# Find the right assembler.
|
||||
if test "x$OPENJDK_BUILD_OS" = xsolaris; then
|
||||
AC_PATH_PROG(AS, as)
|
||||
WHICHCMD(AS)
|
||||
ASFLAGS=" "
|
||||
SET_FULL_PATH(AS)
|
||||
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_PROGS(NM, [gnm nm])
|
||||
SET_FULL_PATH(NM)
|
||||
AC_PATH_PROG(STRIP, strip)
|
||||
WHICHCMD(STRIP)
|
||||
SET_FULL_PATH(STRIP)
|
||||
AC_PATH_PROG(MCS, mcs)
|
||||
WHICHCMD(MCS)
|
||||
else
|
||||
SET_FULL_PATH(MCS)
|
||||
elif test "x$OPENJDK_BUILD_OS" != xwindows; then
|
||||
AC_CHECK_TOOL(NM, nm)
|
||||
WHICHCMD(NM)
|
||||
SET_FULL_PATH(NM)
|
||||
AC_CHECK_TOOL(STRIP, strip)
|
||||
WHICHCMD(STRIP)
|
||||
SET_FULL_PATH(STRIP)
|
||||
fi
|
||||
|
||||
###
|
||||
@@ -421,6 +407,11 @@ if test "x$OBJCOPY" = x; then
|
||||
AC_PATH_TOOL(OBJCOPY, objcopy)
|
||||
fi
|
||||
|
||||
if test "x$OPENJDK_TARGET_OS" = "xmacosx"; then
|
||||
AC_PATH_PROG(LIPO, lipo)
|
||||
SET_FULL_PATH(LIPO)
|
||||
fi
|
||||
|
||||
# Restore old path without tools dir
|
||||
PATH="$OLD_PATH"
|
||||
])
|
||||
@@ -449,15 +440,13 @@ if test "x$GCC" = xyes; then
|
||||
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'
|
||||
SET_SHARED_LIBRARY_ORIGIN='-Xlinker -z -Xlinker origin -Xlinker -rpath -Xlinker \$$$$ORIGIN[$]1'
|
||||
SET_EXECUTABLE_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
|
||||
@@ -470,6 +459,7 @@ if test "x$GCC" = xyes; then
|
||||
SET_SHARED_LIBRARY_NAME='-Xlinker -install_name -Xlinker @rpath/[$]1'
|
||||
SET_SHARED_LIBRARY_MAPFILE=''
|
||||
SET_SHARED_LIBRARY_ORIGIN='-Xlinker -rpath -Xlinker @loader_path/.'
|
||||
SET_EXECUTABLE_ORIGIN="$SET_SHARED_LIBRARY_ORIGIN"
|
||||
POST_STRIP_CMD="$STRIP -S"
|
||||
fi
|
||||
else
|
||||
@@ -480,7 +470,7 @@ else
|
||||
LIBRARY_PREFIX=lib
|
||||
SHARED_LIBRARY='lib[$]1.so'
|
||||
STATIC_LIBRARY='lib[$]1.a'
|
||||
SHARED_LIBRARY_FLAGS="-z defs -xildoff -ztext -G"
|
||||
SHARED_LIBRARY_FLAGS="-G"
|
||||
SHARED_LIBRARY_SUFFIX='.so'
|
||||
STATIC_LIBRARY_SUFFIX='.a'
|
||||
OBJ_SUFFIX='.o'
|
||||
@@ -489,7 +479,8 @@ else
|
||||
SET_SHARED_LIBRARY_MAPFILE='-M[$]1'
|
||||
C_FLAG_REORDER='-xF'
|
||||
CXX_FLAG_REORDER='-xF'
|
||||
SET_SHARED_LIBRARY_ORIGIN='-R \$$$$ORIGIN/[$]1'
|
||||
SET_SHARED_LIBRARY_ORIGIN='-R\$$$$ORIGIN[$]1'
|
||||
SET_EXECUTABLE_ORIGIN="$SET_SHARED_LIBRARY_ORIGIN"
|
||||
CFLAGS_JDK="${CFLAGS_JDK} -D__solaris__"
|
||||
CXXFLAGS_JDK="${CXXFLAGS_JDK} -D__solaris__"
|
||||
CFLAGS_JDKLIB_EXTRA='-xstrconst'
|
||||
@@ -511,6 +502,7 @@ else
|
||||
SET_SHARED_LIBRARY_NAME=''
|
||||
SET_SHARED_LIBRARY_MAPFILE=''
|
||||
SET_SHARED_LIBRARY_ORIGIN=''
|
||||
SET_EXECUTABLE_ORIGIN=''
|
||||
fi
|
||||
fi
|
||||
|
||||
@@ -527,6 +519,7 @@ AC_SUBST(SET_SHARED_LIBRARY_MAPFILE)
|
||||
AC_SUBST(C_FLAG_REORDER)
|
||||
AC_SUBST(CXX_FLAG_REORDER)
|
||||
AC_SUBST(SET_SHARED_LIBRARY_ORIGIN)
|
||||
AC_SUBST(SET_EXECUTABLE_ORIGIN)
|
||||
AC_SUBST(POST_STRIP_CMD)
|
||||
AC_SUBST(POST_MCS_CMD)
|
||||
|
||||
@@ -542,6 +535,25 @@ AC_DEFUN_ONCE([TOOLCHAIN_SETUP_COMPILER_FLAGS_FOR_OPTIMIZATION],
|
||||
# Setup the opt flags for different compilers
|
||||
# and different operating systems.
|
||||
#
|
||||
|
||||
#
|
||||
# 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
|
||||
|
||||
C_FLAG_DEPS="-MMD -MF"
|
||||
CXX_FLAG_DEPS="-MMD -MF"
|
||||
|
||||
@@ -566,7 +578,7 @@ case $COMPILER_TYPE in
|
||||
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"
|
||||
CXXFLAGS_DEBUG_SYMBOLS="-g1"
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
@@ -578,52 +590,56 @@ case $COMPILER_TYPE in
|
||||
#
|
||||
# Forte has different names for this with their C++ compiler...
|
||||
#
|
||||
C_FLAG_DEPS="-xMMD -xMF"
|
||||
CXX_FLAG_DEPS="-xMMD -xMF"
|
||||
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"
|
||||
# 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=""
|
||||
case $OPENJDK_TARGET_CPU_ARCH in
|
||||
x86)
|
||||
C_O_FLAG_HIGHEST="-xO4 -Wu,-O4~yz $CC_HIGHEST -xregs=no%frameptr"
|
||||
C_O_FLAG_HI="-xO4 -Wu,-O4~yz -xregs=no%frameptr"
|
||||
C_O_FLAG_NORM="-xO2 -Wu,-O2~yz -xregs=no%frameptr"
|
||||
C_O_FLAG_NONE="-xregs=no%frameptr"
|
||||
CXX_O_FLAG_HIGHEST="-xO4 -Qoption ube -O4~yz $CC_HIGHEST -xregs=no%frameptr"
|
||||
CXX_O_FLAG_HI="-xO4 -Qoption ube -O4~yz -xregs=no%frameptr"
|
||||
CXX_O_FLAG_NORM="-xO2 -Qoption ube -O2~yz -xregs=no%frameptr"
|
||||
CXX_O_FLAG_NONE="-xregs=no%frameptr"
|
||||
if test "x$OPENJDK_TARGET_CPU" = xx86; then
|
||||
C_O_FLAG_HIGHEST="$C_O_FLAG_HIGHEST -xchip=pentium"
|
||||
CXX_O_FLAG_HIGHEST="$CXX_O_FLAG_HIGHEST -xchip=pentium"
|
||||
fi
|
||||
;;
|
||||
sparc)
|
||||
CFLAGS_JDK="${CFLAGS_JDK} -xmemalign=4s"
|
||||
@@ -647,9 +663,11 @@ CC_HIGHEST="$CC_HIGHEST -xlibmil"
|
||||
;;
|
||||
CL )
|
||||
D_FLAG=
|
||||
C_O_FLAG_HI="-O2"
|
||||
C_O_FLAG_HIGHEST="-O2"
|
||||
C_O_FLAG_HI="-O1"
|
||||
C_O_FLAG_NORM="-O1"
|
||||
C_O_FLAG_NONE="-Od"
|
||||
CXX_O_FLAG_HIGHEST="$C_O_FLAG_HIGHEST"
|
||||
CXX_O_FLAG_HI="$C_O_FLAG_HI"
|
||||
CXX_O_FLAG_NORM="$C_O_FLAG_NORM"
|
||||
CXX_O_FLAG_NONE="$C_O_FLAG_NONE"
|
||||
@@ -680,15 +698,15 @@ 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"])
|
||||
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"])
|
||||
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"])
|
||||
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],
|
||||
@@ -704,6 +722,15 @@ CFLAGS_JDK="${CFLAGS_JDK} $with_extra_cflags"
|
||||
CXXFLAGS_JDK="${CXXFLAGS_JDK} $with_extra_cxxflags"
|
||||
LDFLAGS_JDK="${LDFLAGS_JDK} $with_extra_ldflags"
|
||||
|
||||
# Hotspot needs these set in their legacy form
|
||||
LEGACY_EXTRA_CFLAGS=$with_extra_cflags
|
||||
LEGACY_EXTRA_CXXFLAGS=$with_extra_cxxflags
|
||||
LEGACY_EXTRA_LDFLAGS=$with_extra_ldflags
|
||||
|
||||
AC_SUBST(LEGACY_EXTRA_CFLAGS)
|
||||
AC_SUBST(LEGACY_EXTRA_CXXFLAGS)
|
||||
AC_SUBST(LEGACY_EXTRA_LDFLAGS)
|
||||
|
||||
###############################################################################
|
||||
#
|
||||
# Now setup the CFLAGS and LDFLAGS for the JDK build.
|
||||
@@ -729,43 +756,36 @@ case $COMPILER_NAME in
|
||||
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"
|
||||
CCXXFLAGS_JDK="$CCXXFLAGS $CCXXFLAGS_JDK -DTRACING -DMACRO_MEMSYS_OPS -DBREAKPTS"
|
||||
case $OPENJDK_TARGET_CPU_ARCH in
|
||||
x86 )
|
||||
CCXXFLAGS_JDK="$CCXXFLAGS_JDK -DcpuIntel -Di586 -Di386"
|
||||
CFLAGS_JDK="$CFLAGS_JDK -erroff=E_BAD_PRAGMA_PACK_VALUE"
|
||||
;;
|
||||
esac
|
||||
|
||||
CFLAGS_JDK="$CFLAGS_JDK -xc99=%none -xCC -errshort=tags -Xa -v -mt -W0,-noglobal"
|
||||
CXXFLAGS_JDK="$CXXFLAGS_JDK -errtags=yes +w -mt -features=no%except -DCC_NOEX -norunpath -xnolib"
|
||||
|
||||
LDFLAGS_JDK="$LDFLAGS_JDK -z defs -xildoff -ztext"
|
||||
LDFLAGS_CXX_JDK="$LDFLAGS_CXX_JDK -norunpath -xnolib"
|
||||
;;
|
||||
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 )
|
||||
case $OPENJDK_TARGET_CPU in
|
||||
x86 )
|
||||
CCXXFLAGS_JDK="$CCXXFLAGS_JDK -D_X86_ -Dx86"
|
||||
;;
|
||||
amd64 )
|
||||
x86_64 )
|
||||
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"
|
||||
@@ -774,11 +794,17 @@ CCXXFLAGS_JDK="$CCXXFLAGS_JDK $ADD_LP64"
|
||||
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"
|
||||
if test "x$OPENJDK_TARGET_CPU_ENDIAN" = xlittle; then
|
||||
# The macro _LITTLE_ENDIAN needs to be defined the same to avoid the
|
||||
# Sun C compiler warning message: warning: macro redefined: _LITTLE_ENDIAN
|
||||
# (The Solaris X86 system defines this in file /usr/include/sys/isa_defs.h).
|
||||
# Note: -Dmacro is the same as #define macro 1
|
||||
# -Dmacro= is the same as #define macro
|
||||
if test "x$OPENJDK_TARGET_OS" = xsolaris; then
|
||||
CCXXFLAGS_JDK="$CCXXFLAGS_JDK -D_LITTLE_ENDIAN="
|
||||
else
|
||||
CCXXFLAGS_JDK="$CCXXFLAGS_JDK -D_LITTLE_ENDIAN"
|
||||
fi
|
||||
else
|
||||
CCXXFLAGS_JDK="$CCXXFLAGS_JDK -D_BIG_ENDIAN"
|
||||
fi
|
||||
@@ -793,27 +819,29 @@ if test "x$OPENJDK_TARGET_OS" = xsolaris; then
|
||||
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"
|
||||
if test "x$OPENJDK_TARGET_OS" = xsolaris; then
|
||||
CCXXFLAGS_JDK="$CCXXFLAGS_JDK -DTRIMMED"
|
||||
fi
|
||||
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 -DARCH='\"$OPENJDK_TARGET_CPU_LEGACY\"' -D$OPENJDK_TARGET_CPU_LEGACY"
|
||||
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/$OPENJDK_TARGET_OS_API_DIR/javavm/export \
|
||||
-I${JDK_TOPDIR}/src/share/native/common \
|
||||
-I${JDK_TOPDIR}/src/$LEGACY_OPENJDK_TARGET_OS_API/native/common"
|
||||
-I${JDK_TOPDIR}/src/$OPENJDK_TARGET_OS_API_DIR/native/common"
|
||||
|
||||
# The shared libraries are compiled using the picflag.
|
||||
CFLAGS_JDKLIB="$CCXXFLAGS_JDK $CFLAGS_JDK $PICFLAG $CFLAGS_JDKLIB_EXTRA"
|
||||
@@ -833,7 +861,7 @@ CXXFLAGS_JDKEXE="$CCXXFLAGS_JDK $CXXFLAGS_JDK"
|
||||
# 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
|
||||
if test "x$OPENJDK_TARGET_CPU" = xx86; then
|
||||
LDFLAGS_JDK="$LDFLAGS_JDK -safeseh"
|
||||
fi
|
||||
# TODO: make -debug optional "--disable-full-debug-symbols"
|
||||
@@ -861,20 +889,18 @@ else
|
||||
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"
|
||||
-L${JDK_OUTPUTDIR}/lib${OPENJDK_TARGET_CPU_LIBDIR}/server \
|
||||
-L${JDK_OUTPUTDIR}/lib${OPENJDK_TARGET_CPU_LIBDIR}/client \
|
||||
-L${JDK_OUTPUTDIR}/lib${OPENJDK_TARGET_CPU_LIBDIR}"
|
||||
|
||||
LDFLAGS_JDKLIB_SUFFIX="-ljava -ljvm"
|
||||
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"
|
||||
if test "x$OPENJDK_TARGET_OS" = xlinux; then
|
||||
LDFLAGS_JDKEXE="$LDFLAGS_JDKEXE -Xlinker --allow-shlib-undefined"
|
||||
fi
|
||||
fi
|
||||
|
||||
@@ -905,4 +931,5 @@ AC_SUBST(LDFLAGS_JDKLIB)
|
||||
AC_SUBST(LDFLAGS_JDKEXE)
|
||||
AC_SUBST(LDFLAGS_JDKLIB_SUFFIX)
|
||||
AC_SUBST(LDFLAGS_JDKEXE_SUFFIX)
|
||||
AC_SUBST(LDFLAGS_CXX_JDK)
|
||||
])
|
||||
|
||||
77
common/bin/boot_cycle.sh
Normal file
77
common/bin/boot_cycle.sh
Normal file
@@ -0,0 +1,77 @@
|
||||
#!/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.
|
||||
#
|
||||
|
||||
# The boot_cycle.sh script performs two complete image builds (no javadoc though....)
|
||||
# where the second build uses the first build as the boot jdk.
|
||||
#
|
||||
# This is useful to verify that the build is self hoisting and assists
|
||||
# in flushing out bugs. You can follow up with compare_objects.sh to check
|
||||
# that the two boot_cycle_?/images/j2sdk are identical. They should be.
|
||||
#
|
||||
# Usage:
|
||||
# Specify the configure arguments to boot_cycle.sh, for example:
|
||||
#
|
||||
# sh common/bin/boot_cycle.sh --enable-debug --with-jvm-variants=server
|
||||
#
|
||||
# The same arguments will be used for both builds, except of course --with-boot-jdk
|
||||
# that will be adjusted to boot_cycle_1 for the second build.
|
||||
|
||||
SCRIPT_DIR=`pwd`/`dirname $0`
|
||||
ROOT_DIR=`(cd $SCRIPT_DIR/../.. ; pwd)`
|
||||
BUILD_DIR=$ROOT_DIR/build
|
||||
mkdir -p $BUILD_DIR
|
||||
AUTOCONF_DIR=`(cd $SCRIPT_DIR/../autoconf ; pwd)`
|
||||
BOOT_CYCLE_1_DIR=$BUILD_DIR/boot_cycle_1
|
||||
BOOT_CYCLE_2_DIR=$BUILD_DIR/boot_cycle_2
|
||||
|
||||
# Create the boot cycle dirs in the build directory.
|
||||
mkdir -p $BOOT_CYCLE_1_DIR
|
||||
mkdir -p $BOOT_CYCLE_2_DIR
|
||||
|
||||
cd $BOOT_CYCLE_1_DIR
|
||||
# Configure!
|
||||
sh $AUTOCONF_DIR/configure "$@"
|
||||
# Now build!
|
||||
make images
|
||||
|
||||
if ! test -x $BOOT_CYCLE_1_DIR/images/j2sdk-image/bin/java ; then
|
||||
echo Failed to build the executable $BOOT_CYCLE_1_DIR/images/j2sdk-image/bin/java
|
||||
exit 1
|
||||
fi
|
||||
|
||||
cd $BOOT_CYCLE_2_DIR
|
||||
# Pickup the configure arguments, but drop any --with-boot-jdk=....
|
||||
# and add the correct --with-boot-jdk=...boot_cycle_1... at the end.
|
||||
ARGUMENTS="`cat $BOOT_CYCLE_1_DIR/configure-arguments|sed 's/--with-boot-jdk=[^ ]*//'` --with-boot-jdk=$BOOT_CYCLE_1_DIR/images/j2sdk-image"
|
||||
# Configure using these adjusted arguments.
|
||||
sh $AUTOCONF_DIR/configure $ARGUMENTS
|
||||
# Now build!
|
||||
make images
|
||||
|
||||
if ! test -x $BOOT_CYCLE_2_DIR/images/j2sdk-image/bin/java ; then
|
||||
echo Failed to build the final executable $BOOT_CYCLE_2_DIR/images/j2sdk-image/bin/java
|
||||
exit 1
|
||||
fi
|
||||
|
||||
|
||||
@@ -30,7 +30,7 @@
|
||||
#
|
||||
|
||||
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 "bash ./common/bin/compare-objects.sh old_jdk_build_dir new_jdk_build_dir <pattern>"
|
||||
echo ""
|
||||
echo "Compare object files"
|
||||
echo ""
|
||||
|
||||
184
common/bin/test_builds.sh
Normal file
184
common/bin/test_builds.sh
Normal file
@@ -0,0 +1,184 @@
|
||||
#!/bin/bash
|
||||
|
||||
set -x
|
||||
set -e
|
||||
|
||||
options="$*"
|
||||
option="$1"
|
||||
|
||||
tmp=/tmp/test_builds.$$
|
||||
rm -f -r ${tmp}
|
||||
mkdir -p ${tmp}
|
||||
|
||||
errMessages=${tmp}/error_messages.txt
|
||||
|
||||
#######
|
||||
# Error function
|
||||
error() # message
|
||||
{
|
||||
echo "ERROR: $1" | tee -a ${errMessages}
|
||||
}
|
||||
# Check errors
|
||||
checkErrors()
|
||||
{
|
||||
if [ -s ${errMessages} ] ; then
|
||||
cat ${errMessages}
|
||||
exit 1
|
||||
fi
|
||||
}
|
||||
#######
|
||||
|
||||
os="`uname -s`"
|
||||
arch="`uname -p`"
|
||||
make=make
|
||||
|
||||
if [ "${os}" = "SunOS" ] ; then
|
||||
make=gmake
|
||||
export J7="/opt/java/jdk1.7.0"
|
||||
elif [ "${os}" = "Darwin" ] ; then
|
||||
export J7="/Library/Java/JavaVirtualMachines/1.7.0.jdk/Contents/Home"
|
||||
elif [ "${os}" = "Linux" -a "${arch}" = "x86_64" ] ; then
|
||||
export J7="/usr/lib/jvm/java-7-openjdk-amd64/"
|
||||
else
|
||||
echo "What os/arch is this: ${os}/${arch}"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Must have a jdk7
|
||||
if [ ! -d ${J7} ] ; then
|
||||
echo "No JDK7 found at: ${J7}"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# What sources we use
|
||||
fromroot="http://hg.openjdk.java.net/build-infra/jdk8"
|
||||
|
||||
# Where we do it
|
||||
root="testbuilds"
|
||||
mkdir -p ${root}
|
||||
|
||||
# Three areas, last three are cloned from first to insure sameness
|
||||
t0=${root}/t0
|
||||
t1=${root}/t1
|
||||
t2=${root}/t2
|
||||
t3=${root}/t3
|
||||
repolist="${t0} ${t1} ${t2} ${t3}"
|
||||
|
||||
# Optional complete clobber
|
||||
if [ "${option}" = "clobber" ] ; then
|
||||
for i in ${repolist} ; do
|
||||
rm -f -r ${i}
|
||||
done
|
||||
fi
|
||||
|
||||
# Get top repos
|
||||
if [ ! -d ${t0}/.hg ] ; then
|
||||
rm -f -r ${t0}
|
||||
hg clone ${fromroot} ${t0}
|
||||
fi
|
||||
for i in ${t1} ${t2} ${t3} ; do
|
||||
if [ ! -d ${i}/.hg ] ; then
|
||||
hg clone ${t0} ${i}
|
||||
fi
|
||||
done
|
||||
|
||||
# Get repos updated
|
||||
for i in ${repolist} ; do
|
||||
( \
|
||||
set -e \
|
||||
&& cd ${i} \
|
||||
&& sh ./get_source.sh \
|
||||
|| error "Cannot get source" \
|
||||
) 2>&1 | tee ${i}.get_source.txt
|
||||
checkErrors
|
||||
done
|
||||
|
||||
# Optional clean
|
||||
if [ "${option}" = "clean" ] ; then
|
||||
for i in ${repolist} ; do
|
||||
rm -f -r ${i}/build
|
||||
rm -f -r ${i}/*/build
|
||||
rm -f -r ${i}/*/dist
|
||||
done
|
||||
fi
|
||||
|
||||
# Check changes on working set files
|
||||
for i in ${repolist} ; do
|
||||
( \
|
||||
set -e \
|
||||
&& cd ${i} \
|
||||
&& sh ./make/scripts/hgforest.sh status \
|
||||
|| error "Cannot check status" \
|
||||
) 2>&1 | tee ${i}.hg.status.txt
|
||||
checkErrors
|
||||
done
|
||||
|
||||
# Configure for build-infra building
|
||||
for i in ${t1} ${t2} ; do
|
||||
( \
|
||||
set -e \
|
||||
&& cd ${i}/common/makefiles \
|
||||
&& sh ../autoconf/configure --with-boot-jdk=${J7} \
|
||||
|| error "Cannot configure" \
|
||||
) 2>&1 | tee ${i}.config.txt
|
||||
checkErrors
|
||||
done
|
||||
|
||||
# Do build-infra builds
|
||||
for i in ${t1} ${t2} ; do
|
||||
( \
|
||||
set -e \
|
||||
&& cd ${i}/common/makefiles \
|
||||
&& ${make} \
|
||||
FULL_VERSION:=1.8.0-internal-b00 \
|
||||
JRE_RELEASE_VERSION:=1.8.0-internal-b00 \
|
||||
USER_RELEASE_SUFFIX:=compare \
|
||||
RELEASE:=1.8.0-internal \
|
||||
VERBOSE= \
|
||||
LIBARCH= \
|
||||
all images \
|
||||
|| error "Cannot build" \
|
||||
) 2>&1 | tee ${i}.build.txt
|
||||
checkErrors
|
||||
done
|
||||
|
||||
# Compare build-infra builds
|
||||
( \
|
||||
sh ${t0}/common/bin/compareimage.sh \
|
||||
${t1}/build/*/images/j2sdk-image \
|
||||
${t2}/build/*/images/j2sdk-image \
|
||||
|| error "Cannot compare" \
|
||||
) 2>&1 | tee ${root}/build-infra-comparison.txt
|
||||
checkErrors
|
||||
|
||||
# Do old build
|
||||
unset JAVA_HOME
|
||||
export ALT_BOOTDIR="${J7}"
|
||||
( \
|
||||
cd ${t3} \
|
||||
&& ${make} FULL_VERSION='"1.8.0-internal" sanity \
|
||||
|| error "Cannot sanity" \
|
||||
) 2>&1 | tee ${t3}.sanity.txt
|
||||
checkErrors
|
||||
( \
|
||||
cd ${t3} \
|
||||
&& ${make} \
|
||||
FULL_VERSION='"1.8.0-internal" \
|
||||
JRE_RELEASE_VERSION:=1.8.0-internal-b00 \
|
||||
USER_RELEASE_SUFFIX:=compare \
|
||||
RELEASE:=1.8.0-internal \
|
||||
|| error "Cannot build old way" \
|
||||
) 2>&1 | tee ${t3}.build.txt
|
||||
checkErrors
|
||||
|
||||
# Compare old build to build-infra build
|
||||
( \
|
||||
sh ${t0}/common/bin/compareimage.sh \
|
||||
${t3}/build/*/j2sdk-image \
|
||||
${t1}/build/*/images/j2sdk-image \
|
||||
|| error "Cannot compare" \
|
||||
) 2>&1 | tee ${root}/build-comparison.txt
|
||||
checkErrors
|
||||
|
||||
exit 0
|
||||
|
||||
100
common/bin/unicode2x.sed
Normal file
100
common/bin/unicode2x.sed
Normal file
@@ -0,0 +1,100 @@
|
||||
s/\\u0020/\x20/g
|
||||
s/\\u003A/\x3A/g
|
||||
s/\\u006B/\x6B/g
|
||||
s/\\u0075/\x75/g
|
||||
s/\\u00A0/\xA0/g
|
||||
s/\\u00A3/\xA3/g
|
||||
s/\\u00B0/\xB0/g
|
||||
s/\\u00B7/\xB7/g
|
||||
s/\\u00BA/\xBA/g
|
||||
s/\\u00BF/\xBF/g
|
||||
s/\\u00C0/\xC0/g
|
||||
s/\\u00C1/\xC1/g
|
||||
s/\\u00C2/\xC2/g
|
||||
s/\\u00C4/\xC4/g
|
||||
s/\\u00C5/\xC5/g
|
||||
s/\\u00C8/\xC8/g
|
||||
s/\\u00C9/\xC9/g
|
||||
s/\\u00CA/\xCA/g
|
||||
s/\\u00CD/\xCD/g
|
||||
s/\\u00CE/\xCE/g
|
||||
s/\\u00D3/\xD3/g
|
||||
s/\\u00D4/\xD4/g
|
||||
s/\\u00D6/\xD6/g
|
||||
s/\\u00DA/\xDA/g
|
||||
s/\\u00DC/\xDC/g
|
||||
s/\\u00DD/\xDD/g
|
||||
s/\\u00DF/\xDF/g
|
||||
s/\\u00E0/\xE0/g
|
||||
s/\\u00E1/\xE1/g
|
||||
s/\\u00E2/\xE2/g
|
||||
s/\\u00E3/\xE3/g
|
||||
s/\\u00E4/\xE4/g
|
||||
s/\\u00E5/\xE5/g
|
||||
s/\\u00E6/\xE6/g
|
||||
s/\\u00E7/\xE7/g
|
||||
s/\\u00E8/\xE8/g
|
||||
s/\\u00E9/\xE9/g
|
||||
s/\\u00EA/\xEA/g
|
||||
s/\\u00EB/\xEB/g
|
||||
s/\\u00EC/\xEC/g
|
||||
s/\\u00ED/\xED/g
|
||||
s/\\u00EE/\xEE/g
|
||||
s/\\u00EF/\xEF/g
|
||||
s/\\u00F1/\xF1/g
|
||||
s/\\u00F2/\xF2/g
|
||||
s/\\u00F3/\xF3/g
|
||||
s/\\u00F4/\xF4/g
|
||||
s/\\u00F5/\xF5/g
|
||||
s/\\u00F6/\xF6/g
|
||||
s/\\u00F9/\xF9/g
|
||||
s/\\u00FA/\xFA/g
|
||||
s/\\u00FC/\xFC/g
|
||||
s/\\u0020/\x20/g
|
||||
s/\\u003f/\x3f/g
|
||||
s/\\u006f/\x6f/g
|
||||
s/\\u0075/\x75/g
|
||||
s/\\u00a0/\xa0/g
|
||||
s/\\u00a3/\xa3/g
|
||||
s/\\u00b0/\xb0/g
|
||||
s/\\u00ba/\xba/g
|
||||
s/\\u00bf/\xbf/g
|
||||
s/\\u00c1/\xc1/g
|
||||
s/\\u00c4/\xc4/g
|
||||
s/\\u00c5/\xc5/g
|
||||
s/\\u00c8/\xc8/g
|
||||
s/\\u00c9/\xc9/g
|
||||
s/\\u00ca/\xca/g
|
||||
s/\\u00cd/\xcd/g
|
||||
s/\\u00d6/\xd6/g
|
||||
s/\\u00dc/\xdc/g
|
||||
s/\\u00dd/\xdd/g
|
||||
s/\\u00df/\xdf/g
|
||||
s/\\u00e0/\xe0/g
|
||||
s/\\u00e1/\xe1/g
|
||||
s/\\u00e2/\xe2/g
|
||||
s/\\u00e3/\xe3/g
|
||||
s/\\u00e4/\xe4/g
|
||||
s/\\u00e5/\xe5/g
|
||||
s/\\u00e7/\xe7/g
|
||||
s/\\u00e8/\xe8/g
|
||||
s/\\u00e9/\xe9/g
|
||||
s/\\u00ea/\xea/g
|
||||
s/\\u00eb/\xeb/g
|
||||
s/\\u00ec/\xec/g
|
||||
s/\\u00ed/\xed/g
|
||||
s/\\u00ee/\xee/g
|
||||
s/\\u00ef/\xef/g
|
||||
s/\\u00f0/\xf0/g
|
||||
s/\\u00f1/\xf1/g
|
||||
s/\\u00f2/\xf2/g
|
||||
s/\\u00f3/\xf3/g
|
||||
s/\\u00f4/\xf4/g
|
||||
s/\\u00f5/\xf5/g
|
||||
s/\\u00f6/\xf6/g
|
||||
s/\\u00f7/\xf7/g
|
||||
s/\\u00f8/\xf8/g
|
||||
s/\\u00f9/\xf9/g
|
||||
s/\\u00fa/\xfa/g
|
||||
s/\\u00fc/\xfc/g
|
||||
s/\\u00ff/\xff/g
|
||||
49
common/makefiles/HotspotWrapper.gmk
Normal file
49
common/makefiles/HotspotWrapper.gmk
Normal file
@@ -0,0 +1,49 @@
|
||||
#
|
||||
# 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.
|
||||
#
|
||||
|
||||
# Include the legacy hotspot-spec.gmk (which in turns includes spec.gmk)
|
||||
BASE_SPEC:=$(SPEC)
|
||||
include $(dir $(SPEC))hotspot-spec.gmk
|
||||
include MakeBase.gmk
|
||||
|
||||
# Inclusion of this pseudo-target will cause make to execute this file
|
||||
# serially, regardless of -j. Recursively called makefiles will not be
|
||||
# affected, however. This is required for correct dependency management.
|
||||
.NOTPARALLEL:
|
||||
|
||||
default: all
|
||||
|
||||
# Get all files except .hg in the hotspot directory.
|
||||
HOTSPOT_FILES := $(shell $(FIND) $(HOTSPOT_TOPDIR) -name ".hg" -prune -o -print)
|
||||
|
||||
$(HOTSPOT_OUTPUTDIR)/_hotspot.timestamp: $(HOTSPOT_FILES)
|
||||
@($(CD) $(HOTSPOT_TOPDIR)/make && $(MAKE) -j1 $(HOTSPOT_MAKE_ARGS) SPEC=$(HOTSPOT_SPEC) BASE_SPEC=$(BASE_SPEC))
|
||||
$(TOUCH) $@
|
||||
|
||||
hotspot: $(HOTSPOT_OUTPUTDIR)/_hotspot.timestamp
|
||||
|
||||
all: hotspot
|
||||
|
||||
.PHONY: default all hotspot
|
||||
@@ -23,40 +23,14 @@
|
||||
# questions.
|
||||
#
|
||||
|
||||
# The complexity of this makefile is not the fault of make, but the fault
|
||||
# of javac and javah. The basic problems are:
|
||||
#
|
||||
# 1) Compiling a single Java source file unpredictably generates anything
|
||||
# between zero (0!) and an infinite number of .class files!
|
||||
# 2) There is no hint, for which classes javah needs to be run,
|
||||
# and it happily generates .h files for classes with no native methods.
|
||||
# 3) javac and javah do not cleanup anything, for example if an internal
|
||||
# class (potentially with native methods) is removed from a Java source file.
|
||||
#
|
||||
# This makefile is a tribute to GNU make. And yes, it was harder to write than it is
|
||||
# to read. The include/excludes of directories and files are only a temporary measure
|
||||
# to work around the messy jdk sources that put platform specific code in src/share/classes.
|
||||
#
|
||||
# We should move most of the functionality of this makefile into a
|
||||
# smart javac/javah/javadoc/jar combo tool. sjavac ?
|
||||
#
|
||||
# I.e. 1) It always generates a single output, a zip-file from a number of source roots.
|
||||
# The zip file contains information that enable incremental builds with full
|
||||
# dependency tracking between packages.
|
||||
# 2) It automatically generates the right .h files.
|
||||
# 3) It keeps its house clean.
|
||||
# *) Generates intermediate files to be used for javadoc generation later.
|
||||
# and does all the other useful things that this makefile does, such as:
|
||||
# use all cores for compilation, reuse the running JVM for all compilations,
|
||||
# and has pubapi dependency tracking to minimize the number of files
|
||||
# that need to be recompiled during an incremental build.
|
||||
#
|
||||
# A zip file, or several zip files combined, can then be converted to a .jar file, or to a .jmod file.
|
||||
#
|
||||
# This would make this makefile much much simpler. I.e. make can be used
|
||||
# for its real purpose, track dependencies and trigger a recompile if a
|
||||
# dependency has changed.
|
||||
#
|
||||
# This makefile is much simpler now that it can use the smart javac wrapper
|
||||
# for dependency tracking between java packages and incremental compiles.
|
||||
# It could be even more simple if we added support for incremental jar updates
|
||||
# directly from the smart javac wrapper.
|
||||
|
||||
# Cleaning/copying properties here is not a good solution. The properties
|
||||
# should be cleaned/copied by a annotation processor in sjavac.
|
||||
|
||||
# When you read this source. Remember that $(sort ...) has the side effect
|
||||
# of removing duplicates. It is actually this side effect that is
|
||||
# desired whenever sort is used below!
|
||||
@@ -67,25 +41,15 @@ endif
|
||||
|
||||
FALSE_FIND_PATTERN:=-name FILE_NAME_THAT_DOESNT_EXIST
|
||||
|
||||
# If compilation of java package fails, then the public api file for that
|
||||
# package will not be genereated. We add this fallback rule to generate
|
||||
# an empty pubapi file.
|
||||
%.api:
|
||||
if test ! -f $@; then $(MKDIR) -p $(@D); $(TOUCH) $@; fi
|
||||
|
||||
define SetupJavaCompiler
|
||||
# param 1 is for example BOOT_JAVAC or NEW_JAVAC
|
||||
# This is the name later used to decide which java compiler to use.
|
||||
# param 2-9 are named args.
|
||||
# JVM:=The jvm used to run the javac/javah command
|
||||
# JAVAC:=The javac jar and bootstrap classpath changes, or just bin/javac if JVM is left out
|
||||
# JAVAH:=The javah jar and bootstrap classpath changes, or just bin/javah if JVM is left out
|
||||
# FLAGS:=Flags to be supplied to javac
|
||||
# MODE:=SINGLE_THREADED_BATCH (primarily for old javac) or MULTI_CORE_CONCURRENT
|
||||
# only for MULTI_CORE_CONCURRENT are the options below relevant:
|
||||
# SERVER_DIR:=Use a javac server (-XDserver) and store the server related files here
|
||||
# SERVER_JVM:=Use this JVM for the server. Defaults to the JVM above.
|
||||
# USE_DEPS:=true means use -XDdeps,-XDpubapi and -XDnativeapi to track java dependencies
|
||||
$(if $2,$1_$(strip $2))
|
||||
$(if $3,$1_$(strip $3))
|
||||
$(if $4,$1_$(strip $4))
|
||||
@@ -96,21 +60,17 @@ define SetupJavaCompiler
|
||||
$(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))
|
||||
# A javac server has been requested.
|
||||
# The port file contains the tcp/ip on which the server listens
|
||||
# and the cookie necessary to talk to the server.
|
||||
$1_JAVAC_PORTFILE:=$$($1_SERVER_DIR)/$1.port
|
||||
ifeq ($$($1_SERVER_JVM),)
|
||||
# You can use a different JVM to run the background javac server.
|
||||
# But if not set, it defaults to the same JVM that is used to start
|
||||
# the javac command.
|
||||
$1_SERVER_JVM:=$$($1_JVM)
|
||||
endif
|
||||
# Set the $1_REMOTE to spawn a background javac server.
|
||||
$1_REMOTE:=-XDserver:portfile=$$($1_JAVAC_PORTFILE),poolsize=$(JAVAC_SERVER_CORES),javac=$$(subst $$(SPACE),%20,$$(subst $$(COMMA),%2C,$$(strip $$($1_SERVER_JVM) $$($1_JAVAC))))
|
||||
ifeq ($$(ENABLE_SJAVAC),yes)
|
||||
# The port file contains the tcp/ip on which the server listens
|
||||
# and the cookie necessary to talk to the server.
|
||||
$1_JAVAC_PORTFILE:=$$($1_SERVER_DIR)/server.port
|
||||
# You can use a different JVM to run the background javac server.
|
||||
ifeq ($$($1_SERVER_JVM),)
|
||||
# It defaults to the same JVM that is used to start the javac command.
|
||||
$1_SERVER_JVM:=$$($1_JVM)
|
||||
endif
|
||||
# Set the $1_REMOTE to spawn a background javac server.
|
||||
$1_REMOTE:=-XDserver:portfile=$$($1_JAVAC_PORTFILE),poolsize=$(SJAVAC_SERVER_CORES),id=$1,javac=$$(subst $$(SPACE),%20,$$(subst $$(COMMA),%2C,$$(strip $$($1_SERVER_JVM) $$($1_JAVAC))))
|
||||
endif
|
||||
endef
|
||||
|
||||
@@ -127,7 +87,7 @@ define SetupArchive
|
||||
# JAR:=Jar file to create
|
||||
# MANIFEST:=Optional manifest file template.
|
||||
# JARMAIN:=Optional main class to add to manifest
|
||||
# JARINDEX :=
|
||||
# JARINDEX:=true means generate the index in the jar file.
|
||||
# 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.
|
||||
@@ -152,9 +112,6 @@ define SetupArchive
|
||||
$1_MANIFEST_FILE:=$$(dir $$($1_JAR))_the.$$($1_JARNAME)_manifest
|
||||
$1_DELETESS_FILE:=$$(dir $$($1_JAR))_the.$$($1_JARNAME)_deletess
|
||||
$1_DELETES_FILE:=$$(dir $$($1_JAR))_the.$$($1_JARNAME)_deletes
|
||||
$1_PUBAPI_NOTIFICATIONS_FILE:=$$(dir $$($1_JAR))_the.$$($1_JARNAME)_pubapi_notifications
|
||||
$1_NATIVEAPI_NOTIFICATIONS_FILE:=$$(dir $$($1_JAR))_the.$$($1_JARNAME)_native_notifications
|
||||
$1_NATIVEAPI_FILE:=$$(dir $$($1_JAR))_the.$$($1_JARNAME)_native
|
||||
$1_BIN:=$$(dir $$($1_JAR))
|
||||
|
||||
ifeq (,$$($1_SUFFIXES))
|
||||
@@ -180,6 +137,7 @@ define SetupArchive
|
||||
$1_GREP_EXCLUDES:=| $(GREP) -v -f $$($1_BIN)/_the.$$($1_JARNAME)_exclude
|
||||
endif
|
||||
|
||||
# Check if this jar needs to have its index generated.
|
||||
ifneq (,$$($1_JARINDEX))
|
||||
$1_JARINDEX = (cd $$(dir $$@) && $(JAR) -i $$(notdir $$@))
|
||||
else
|
||||
@@ -188,14 +146,17 @@ define SetupArchive
|
||||
# When this macro is run in the same makefile as the java compilation, dependencies are transfered
|
||||
# in make variables. When the macro is run in a different makefile than the java compilation, the
|
||||
# dependencies need to be found in the filesystem.
|
||||
$1_ALL_SRCS:=$$(foreach src,$$($1_SRCS),$$(shell ($(FIND) $$(src) -type f \
|
||||
ifneq (,$2)
|
||||
$1_DEPS:=$2
|
||||
else
|
||||
$1_DEPS:=$$(foreach src,$$($1_SRCS),$$(shell ($(FIND) $$(src) -type f \
|
||||
-a \( $$($1_FIND_PATTERNS) \) $$($1_GREP_INCLUDES) \
|
||||
$$($1_GREP_EXCLUDES) && $(ECHO) $$($1_EXTRA_FILES))))
|
||||
ifeq (,$$($1_SKIP_METAINF))
|
||||
$1_ALL_SRCS+=$$(foreach src,$$($1_SRCS),$$(shell $(FIND) $$(src)/META-INF -type f 2> /dev/null))
|
||||
$$($1_GREP_EXCLUDES) && $(ECHO) $$(addprefix $$(src)/,$$($1_EXTRA_FILES)))))
|
||||
ifeq (,$$($1_SKIP_METAINF))
|
||||
$1_DEPS+=$$(foreach src,$$($1_SRCS),$$(shell $(FIND) $$(src)/META-INF -type f 2> /dev/null))
|
||||
endif
|
||||
endif
|
||||
|
||||
|
||||
# Utility macros, to make the shell script receipt somewhat easier to dechipher.
|
||||
|
||||
# The capture contents macro finds all files (matching the patterns, typically
|
||||
@@ -208,19 +169,12 @@ define SetupArchive
|
||||
# The capture deletes macro finds all deleted files and concatenates them. The resulting file
|
||||
# tells us what to remove from the jar-file.
|
||||
$1_CAPTURE_DELETES=$$(foreach src,$$($1_SRCS),($(FIND) $$(src) -name _the.package.deleted -newer $$@ -exec $(SED) 's|$$(src)||g' \{\} >> $$($1_DELETES_FILE) \;) &&)
|
||||
# The capture pubapi notifications scans for pubapi change notifications. If such notifications are
|
||||
# found, then we will build the classes leading up to the jar again, to take into account the new timestamps
|
||||
# on the changed pubapi files.
|
||||
$1_CAPTURE_PUBAPI_NOTIFICATIONS=$$(foreach src,$$($1_SRCS),\
|
||||
(cd $$(src) && \
|
||||
$(FIND) . -name _the.package.api.notify -exec dirname \{\} \; >> $$($1_PUBAPI_NOTIFICATIONS_FILE) ; \
|
||||
true) &&)
|
||||
# The update contents macro updates the jar file with the previously capture contents.
|
||||
$1_UPDATE_CONTENTS=$$(foreach src,$$($1_SRCS),\
|
||||
(cd $$(src) && \
|
||||
if [ -s _the.$$($1_JARNAME)_contents ]; then \
|
||||
$(ECHO) " updating" `$(WC) -l _the.$$($1_JARNAME)_contents | $(AWK) '{ print $$$$1 }'` files && \
|
||||
$(JAR) uf $$@ @_the.$$($1_JARNAME)_contents; \
|
||||
$(JAR) $$($1_JAR_UPDATE_OPTIONS) $$@ @_the.$$($1_JARNAME)_contents; \
|
||||
fi) &&)
|
||||
# The s-variants of the above macros are used when the jar is created from scratch.
|
||||
$1_SCAPTURE_CONTENTS=$$(foreach src,$$($1_SRCS),\
|
||||
@@ -234,30 +188,25 @@ define SetupArchive
|
||||
$$(src)/_the.$$($1_JARNAME)_contents) && )
|
||||
endif
|
||||
$1_SUPDATE_CONTENTS=$$(foreach src,$$($1_SRCS),\
|
||||
(cd $$(src) && $(JAR) uf $$@ @$$(src)/_the.$$($1_JARNAME)_contents) &&)
|
||||
(cd $$(src) && $(JAR) $$($1_JAR_UPDATE_OPTIONS) $$@ @$$(src)/_the.$$($1_JARNAME)_contents) &&)
|
||||
|
||||
# The TOUCH macro is used to make sure all timestamps are identical for package files and the pubapi files.
|
||||
# If we do not do this, we get random recompilations, the next time we run make, since the order of package building is random,
|
||||
# ie independent of package --dependes on-> public api of another package. This is of course
|
||||
# due to the fact that Java source often (always?) has circular dependencies. (Thus there is no correct order
|
||||
# to compile packages, and we can just as well do them in a random order. Which we do.)
|
||||
$1_TOUCH_API_FILES=$$(foreach src,$$($1_SRCS),\
|
||||
($(FIND) $$(src) -name _the.package.api -exec $(TOUCH) -r $$($1_JAR) \{\} \; ; true) && \
|
||||
($(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
|
||||
$1_JAR_UPDATE_OPTIONS := u0f
|
||||
ifeq ($(COMPRESS_JARS), true)
|
||||
$1_JAR_CREATE_OPTIONS := cfm
|
||||
$1_JAR_UPDATE_OPTIONS := uf
|
||||
endif
|
||||
else
|
||||
$1_JAR_CREATE_OPTIONS := cfm
|
||||
$1_JAR_UPDATE_OPTIONS := uf
|
||||
endif
|
||||
|
||||
# Here is the rule that creates/updates the jar file.
|
||||
$$($1_JAR) : $2 $$($1_ALL_SRC)
|
||||
$$($1_JAR) : $$($1_DEPS)
|
||||
$(MKDIR) -p $$($1_BIN)
|
||||
if [ -n "$$($1_MANIFEST)" ]; then \
|
||||
$(SED) -e "s#@@RELEASE@@#$(RELEASE)#" \
|
||||
@@ -272,46 +221,28 @@ define SetupArchive
|
||||
$(PRINTF) "$$($1_EXTRA_MANIFEST_ATTR)\n" >> $$($1_MANIFEST_FILE); \
|
||||
fi
|
||||
+if [ -s $$@ ]; then \
|
||||
$(RM) -r $$($1_PUBAPI_NOTIFICATIONS_FILE) && \
|
||||
$$($1_CAPTURE_PUBAPI_NOTIFICATIONS) \
|
||||
if [ -s $$($1_PUBAPI_NOTIFICATIONS_FILE) ]; then \
|
||||
$(ECHO) Public api change detected in: && \
|
||||
$(CAT) $$($1_PUBAPI_NOTIFICATIONS_FILE) | $(TR) '/' '.' | $(SED) 's|^..||g' | $(SED) 's|\.$$$$||g' | $(AWK) '{print " "$$$$1}' && \
|
||||
$$(foreach src,$$($1_SRCS),($(FIND) $$(src) -name _the.package.api.notify $(FIND_DELETE); true) &&) \
|
||||
$(MAKE) -f $(word 1,$(MAKEFILE_LIST)) $$($1_JAR) ; \
|
||||
else \
|
||||
$(ECHO) Modifying $$($1_NAME) && \
|
||||
$$($1_CAPTURE_CONTENTS) \
|
||||
$$($1_CAPTURE_METAINF) \
|
||||
$(RM) $$($1_DELETES_FILE) && \
|
||||
$$($1_CAPTURE_DELETES) \
|
||||
$(CAT) $$($1_DELETES_FILE) > $$($1_DELETESS_FILE) && \
|
||||
if [ -s $$($1_DELETESS_FILE) ]; then \
|
||||
$(ECHO) " deleting" `$(WC) -l $$($1_DELETESS_FILE) | $(AWK) '{ print $$$$1 }'` files && \
|
||||
$(ZIP) -q -d $$@ `$(CAT) $$($1_DELETESS_FILE)` ; \
|
||||
fi && \
|
||||
$$($1_UPDATE_CONTENTS) true && \
|
||||
$$($1_JARINDEX) && \
|
||||
$$($1_TOUCH_API_FILES) true && \
|
||||
$$(foreach src,$$($1_SRCS),($(FIND) $$(src) -name _the.package.api.notify $(FIND_DELETE); true) &&) true ; \
|
||||
fi ; \
|
||||
$(ECHO) Modifying $$($1_NAME) && \
|
||||
$$($1_CAPTURE_CONTENTS) \
|
||||
$$($1_CAPTURE_METAINF) \
|
||||
$(RM) $$($1_DELETES_FILE) && \
|
||||
$$($1_CAPTURE_DELETES) \
|
||||
$(CAT) $$($1_DELETES_FILE) > $$($1_DELETESS_FILE) && \
|
||||
if [ -s $$($1_DELETESS_FILE) ]; then \
|
||||
$(ECHO) " deleting" `$(WC) -l $$($1_DELETESS_FILE) | $(AWK) '{ print $$$$1 }'` files && \
|
||||
$(ZIP) -q -d $$@ `$(CAT) $$($1_DELETESS_FILE)` ; \
|
||||
fi && \
|
||||
$$($1_UPDATE_CONTENTS) true && \
|
||||
$$($1_JARINDEX) && true ; \
|
||||
else \
|
||||
$(ECHO) Creating $$($1_NAME) && $(JAR) $$($1_JAR_CREATE_OPTIONS) $$@ $$($1_MANIFEST_FILE) && \
|
||||
$$($1_SCAPTURE_CONTENTS) \
|
||||
$$($1_SCAPTURE_METAINF) \
|
||||
$$($1_SUPDATE_CONTENTS) \
|
||||
$$($1_JARINDEX) && \
|
||||
$$($1_TOUCH_API_FILES) true && \
|
||||
$(RM) -r $$($1_NATIVEAPI_NOTIFICATIONS_FILE) $$($1_NATIVEAPI_FILE) && \
|
||||
$$(foreach src,$$($1_SRCS),($(FIND) $$(src) -name "*.notify" $(FIND_DELETE); true) &&) true ; \
|
||||
$$($1_JARINDEX) && true ; \
|
||||
fi;
|
||||
|
||||
endef
|
||||
|
||||
define append_to
|
||||
$(ECHO) "$1" >> $2
|
||||
endef
|
||||
|
||||
define SetupZipArchive
|
||||
# param 1 is for example ZIP_MYSOURCE
|
||||
# param 2,3,4,5,6,7,8,9 are named args.
|
||||
@@ -343,7 +274,7 @@ define SetupZipArchive
|
||||
ifneq ($$($1_EXCLUDES),)
|
||||
$1_SRC_EXCLUDES := $$(foreach i,$$($1_SRC),$$(addprefix $$i/,$$(addsuffix /%,$$($1_EXCLUDES))))
|
||||
$1_ZIP_EXCLUDES := $$(addprefix -x$(SPACE)$(DQUOTE),$$(addsuffix /*$(DQUOTE),$$($1_EXCLUDES)))
|
||||
$1_ALL_SRCS := $$(filter-out $$($1_SRC_EXCLUDES),$$($1_SRCS))
|
||||
$1_ALL_SRCS := $$(filter-out $$($1_SRC_EXCLUDES),$$($1_SRC))
|
||||
endif
|
||||
|
||||
# Use a slightly shorter name for logging, but with enough path to identify this zip.
|
||||
@@ -381,7 +312,8 @@ endef
|
||||
# This macro is used only for properties files that are to be
|
||||
# copied over to the classes directory in cleaned form:
|
||||
# Previously this was inconsistently done in different repositories.
|
||||
# This is the new clean standard.
|
||||
# This is the new clean standard. Though it is to be superseded by
|
||||
# a standard annotation processor from with sjavac.
|
||||
define add_file_to_copy_and_clean
|
||||
# param 1 = BUILD_MYPACKAGE
|
||||
# parma 2 = The source file to copy and clean.
|
||||
@@ -391,109 +323,8 @@ define add_file_to_copy_and_clean
|
||||
# Now we can setup the depency that will trigger the copying.
|
||||
$$($1_BIN)$$($2_TARGET) : $2
|
||||
$(MKDIR) -p $$(@D)
|
||||
$(ECHO) Cleaning $$($2_TARGET)
|
||||
$(CAT) $$< | $(SED) -e 's/\([^\\]\):/\1\\:/g' -e 's/\([^\\]\)=/\1\\=/g' -e 's/#.*/#/g' \
|
||||
| $(SED) \
|
||||
-e 's/\\u0020/\x20/g' \
|
||||
-e 's/\\u003A/\x3A/g' \
|
||||
-e 's/\\u006B/\x6B/g' \
|
||||
-e 's/\\u0075/\x75/g' \
|
||||
-e 's/\\u00A0/\xA0/g' \
|
||||
-e 's/\\u00A3/\xA3/g' \
|
||||
-e 's/\\u00B0/\xB0/g' \
|
||||
-e 's/\\u00B7/\xB7/g' \
|
||||
-e 's/\\u00BA/\xBA/g' \
|
||||
-e 's/\\u00BF/\xBF/g' \
|
||||
-e 's/\\u00C0/\xC0/g' \
|
||||
-e 's/\\u00C1/\xC1/g' \
|
||||
-e 's/\\u00C2/\xC2/g' \
|
||||
-e 's/\\u00C4/\xC4/g' \
|
||||
-e 's/\\u00C5/\xC5/g' \
|
||||
-e 's/\\u00C8/\xC8/g' \
|
||||
-e 's/\\u00C9/\xC9/g' \
|
||||
-e 's/\\u00CA/\xCA/g' \
|
||||
-e 's/\\u00CD/\xCD/g' \
|
||||
-e 's/\\u00CE/\xCE/g' \
|
||||
-e 's/\\u00D3/\xD3/g' \
|
||||
-e 's/\\u00D4/\xD4/g' \
|
||||
-e 's/\\u00D6/\xD6/g' \
|
||||
-e 's/\\u00DA/\xDA/g' \
|
||||
-e 's/\\u00DC/\xDC/g' \
|
||||
-e 's/\\u00DD/\xDD/g' \
|
||||
-e 's/\\u00DF/\xDF/g' \
|
||||
-e 's/\\u00E0/\xE0/g' \
|
||||
-e 's/\\u00E1/\xE1/g' \
|
||||
-e 's/\\u00E2/\xE2/g' \
|
||||
-e 's/\\u00E3/\xE3/g' \
|
||||
-e 's/\\u00E4/\xE4/g' \
|
||||
-e 's/\\u00E5/\xE5/g' \
|
||||
-e 's/\\u00E6/\xE6/g' \
|
||||
-e 's/\\u00E7/\xE7/g' \
|
||||
-e 's/\\u00E8/\xE8/g' \
|
||||
-e 's/\\u00E9/\xE9/g' \
|
||||
-e 's/\\u00EA/\xEA/g' \
|
||||
-e 's/\\u00EB/\xEB/g' \
|
||||
-e 's/\\u00EC/\xEC/g' \
|
||||
-e 's/\\u00ED/\xED/g' \
|
||||
-e 's/\\u00EE/\xEE/g' \
|
||||
-e 's/\\u00EF/\xEF/g' \
|
||||
-e 's/\\u00F1/\xF1/g' \
|
||||
-e 's/\\u00F2/\xF2/g' \
|
||||
-e 's/\\u00F3/\xF3/g' \
|
||||
-e 's/\\u00F4/\xF4/g' \
|
||||
-e 's/\\u00F5/\xF5/g' \
|
||||
-e 's/\\u00F6/\xF6/g' \
|
||||
-e 's/\\u00F9/\xF9/g' \
|
||||
-e 's/\\u00FA/\xFA/g' \
|
||||
-e 's/\\u00FC/\xFC/g' \
|
||||
-e 's/\\u0020/\x20/g' \
|
||||
-e 's/\\u003f/\x3f/g' \
|
||||
-e 's/\\u006f/\x6f/g' \
|
||||
-e 's/\\u0075/\x75/g' \
|
||||
-e 's/\\u00a0/\xa0/g' \
|
||||
-e 's/\\u00a3/\xa3/g' \
|
||||
-e 's/\\u00b0/\xb0/g' \
|
||||
-e 's/\\u00ba/\xba/g' \
|
||||
-e 's/\\u00bf/\xbf/g' \
|
||||
-e 's/\\u00c1/\xc1/g' \
|
||||
-e 's/\\u00c4/\xc4/g' \
|
||||
-e 's/\\u00c5/\xc5/g' \
|
||||
-e 's/\\u00c8/\xc8/g' \
|
||||
-e 's/\\u00c9/\xc9/g' \
|
||||
-e 's/\\u00ca/\xca/g' \
|
||||
-e 's/\\u00cd/\xcd/g' \
|
||||
-e 's/\\u00d6/\xd6/g' \
|
||||
-e 's/\\u00dc/\xdc/g' \
|
||||
-e 's/\\u00dd/\xdd/g' \
|
||||
-e 's/\\u00df/\xdf/g' \
|
||||
-e 's/\\u00e0/\xe0/g' \
|
||||
-e 's/\\u00e1/\xe1/g' \
|
||||
-e 's/\\u00e2/\xe2/g' \
|
||||
-e 's/\\u00e3/\xe3/g' \
|
||||
-e 's/\\u00e4/\xe4/g' \
|
||||
-e 's/\\u00e5/\xe5/g' \
|
||||
-e 's/\\u00e7/\xe7/g' \
|
||||
-e 's/\\u00e8/\xe8/g' \
|
||||
-e 's/\\u00e9/\xe9/g' \
|
||||
-e 's/\\u00ea/\xea/g' \
|
||||
-e 's/\\u00eb/\xeb/g' \
|
||||
-e 's/\\u00ec/\xec/g' \
|
||||
-e 's/\\u00ed/\xed/g' \
|
||||
-e 's/\\u00ee/\xee/g' \
|
||||
-e 's/\\u00ef/\xef/g' \
|
||||
-e 's/\\u00f0/\xf0/g' \
|
||||
-e 's/\\u00f1/\xf1/g' \
|
||||
-e 's/\\u00f2/\xf2/g' \
|
||||
-e 's/\\u00f3/\xf3/g' \
|
||||
-e 's/\\u00f4/\xf4/g' \
|
||||
-e 's/\\u00f5/\xf5/g' \
|
||||
-e 's/\\u00f6/\xf6/g' \
|
||||
-e 's/\\u00f7/\xf7/g' \
|
||||
-e 's/\\u00f8/\xf8/g' \
|
||||
-e 's/\\u00f9/\xf9/g' \
|
||||
-e 's/\\u00fa/\xfa/g' \
|
||||
-e 's/\\u00fc/\xfc/g' \
|
||||
-e 's/\\u00ff/\xff/g' \
|
||||
| $(SED) -f "$(SRC_ROOT)/common/bin/unicode2x.sed" \
|
||||
| $(SED) -e '/^#/d' -e '/^$$$$/d' \
|
||||
-e :a -e '/\\$$$$/N; s/\\\n//; ta' \
|
||||
-e 's/^[ \t]*//;s/[ \t]*$$$$//' \
|
||||
@@ -504,122 +335,6 @@ define add_file_to_copy_and_clean
|
||||
$1_ALL_COPY_CLEAN_TARGETS += $$($1_BIN)$$($2_TARGET)
|
||||
endef
|
||||
|
||||
define add_java_package
|
||||
# param 1 = BUILD_MYPACKAGE
|
||||
# param 2 = the package target file (_the.package)
|
||||
# param 3 = src roots, all of them, separated with space
|
||||
# param 4 = bin root
|
||||
# param 5 = include these dependecies
|
||||
# param 6 = not used
|
||||
# param 7 = if non-empty, then use -Xdeps and -Xpubapi
|
||||
# param 8 = xremote configuration, or empty.
|
||||
# param 9 = javac command
|
||||
# param 10 = javac flags
|
||||
# param 11 = exclude these files!
|
||||
# param 12 = only include these files!
|
||||
# param 13 = javah command
|
||||
# param 14 = override src roots to be passed into -sourcepath, ugly ugly ugly, do not use this!
|
||||
# it is only here to workaround ugly things in the source code in the jdk that ought
|
||||
# to be fixed instead!
|
||||
ifdef $2_USED_BY
|
||||
$$(error Attempting to add the package $2 from $3 which is already added with sources from $$($2_USED_BY))
|
||||
endif
|
||||
$2_USED_BY:=$3
|
||||
# Remove the _the.package file to get the target bin dir for the classes in this package.
|
||||
$2_PACKAGE_BDIR:=$(dir $2)
|
||||
# The source roots separated with a path separator (: or ; depending on os)
|
||||
# (The patsubst is necessary to trim away unnecessary spaces.)
|
||||
ifneq ($(14),)
|
||||
$2_SRCROOTSC:=$(subst $(SPACE),$(PATH_SEP),$(strip $(patsubst %,%,$(14))))
|
||||
else
|
||||
$2_SRCROOTSC:=$(subst $(SPACE),$(PATH_SEP),$(strip $(patsubst %,%,$3)))
|
||||
endif
|
||||
# Suffix the package path to the src roots, to get a list of all possible source locations
|
||||
# for this package.
|
||||
$2_PACKAGE_SDIRS:=$$(foreach i,$3,$$(subst $4,$$i,$$($2_PACKAGE_BDIR)))
|
||||
# Use wildcard in all potential source locations to find the actual sources.
|
||||
$2_PACKAGE_SRCS:=$$(filter-out $(11),$$(wildcard $$(addsuffix *.java,$$($2_PACKAGE_SDIRS))))
|
||||
ifneq ($(12),)
|
||||
# Filter on include file filter if set.
|
||||
$2_PACKAGE_SRCS:=$$(filter $(12),$$($2_PACKAGE_SRCS))
|
||||
endif
|
||||
# Generate a proper package name from the file name.
|
||||
$2_PACKAGE:=$(patsubst .%.,%,$(subst /,.,$(subst $4,,$(dir $2))))
|
||||
# Use a javac server for this package?
|
||||
$2_REMOTE:=$8
|
||||
|
||||
# Include previously generated information about what classes are output by this package
|
||||
# and what sources were used for the compile.
|
||||
-include $$($2_PACKAGE_BDIR)_the.package.d
|
||||
|
||||
# Include the notify, file, that exists if the package has been compiled during a previous make round.
|
||||
# I.e. we are now dealing with a compile triggered by a pubapi change.
|
||||
-include $$($2_PACKAGE_BDIR)_the.package.notify
|
||||
|
||||
# If the notify file existed, then $$($2_NOTIFIED) will be equal to true.
|
||||
# Use this information to block dependency tracking for this package.
|
||||
# This is necessary to cut the circular dependency chains that are so common in Java sources.
|
||||
|
||||
ifneq ($$($2_NOTIFIED),true)
|
||||
# No need to block, since this package has not yet been recompiled.
|
||||
# Thus include previously generated dependency information. (if it exists)
|
||||
-include $$($2_PACKAGE_BDIR)_the.package.dddd
|
||||
# else
|
||||
# $$(info WAS NOTIFIED $2)
|
||||
endif
|
||||
|
||||
# Should we create proper dependencies between packages?
|
||||
ifneq ($7,)
|
||||
# The flag: -XDpubapi:file=foo,package=mypack,notify writes a file foo that contains a
|
||||
# database of the public api of the classes supplied on the command line and are
|
||||
# inside the package mypack. If foo already exists, javac will only write to foo,
|
||||
# if there is a change in the pubapi. I.e. we can use the timestamp of this file
|
||||
# for triggering dependencies. "notify" means create a "file" suffixed with notify
|
||||
# if the pubapi really changed.
|
||||
$2_PUBAPI=-XDpubapi=file=$$($2_PACKAGE_BDIR)_the.package.api,notify,package=$$($2_PACKAGE)
|
||||
# The flag: -XDnativeapi:file=foo,package=mypack,notify works similar to pubabi, but
|
||||
# instead tracks native methods. This file can be used to trigger dependencies for
|
||||
# native compilations.
|
||||
$2_NATIVEAPI=-XDnativeapi=file=$$($2_PACKAGE_BDIR)_the.package.native,notify,package=$$($2_PACKAGE)
|
||||
# The flag -XDdeps:file=foo.deps,groupon=package writes a foo.deps file containing packages dependencies:
|
||||
# java.net : java.io java.lang
|
||||
# I.e. the classes in .net depend on the public apis of java.io and java.lang
|
||||
# The dependencies can be grouped on classes instead (groupon=class)
|
||||
# java.net.Bar : java.io.Socket java.lang.String
|
||||
$2_DEPS:=-XDdeps=file=$$($2_PACKAGE_BDIR)_the.package.deps,groupon=package
|
||||
# The next command rewrites the deps output from javac into a proper makefile dependency.
|
||||
# The dependencies are always to an .api file generated by the pubapi option above.
|
||||
# This is necessary since java package dependencies are almost always circular.
|
||||
$2_APPEND_DEPS:=($(CAT) $$($2_PACKAGE_BDIR)_the.package.deps | $(TR) '.' '/' | $(AWK) '{ print "$4/" $$$$3 }' | sort > $$($2_PACKAGE_BDIR)_the.package.ddd && $(GREP) -f $$($2_PACKAGE_BDIR)_the.package.ddd $5 | $(AWK) '{ print "$(dir $2)_the.package : " $$$$1 "_the.package.api" }' > $$($2_PACKAGE_BDIR)_the.package.dddd ; true)
|
||||
else
|
||||
# If not using dependencies, use $2 as fallback to trigger regeneration of javah header files.
|
||||
# This will generate a surplus of header files, but this does not hurt compilation.
|
||||
$2_NATIVEAPICHANGE_TRIGGER:=$2
|
||||
$2_FETCH_NATIVEAPICHANGE_CLASSES:=$(CAT) $$($2_PACKAGE_BDIR)_the.package.now|$(GREP) -v '\$$$$'|$(SED) -e 's|$4/||g'|$(SED) 's|.class||g'| $(TR) '/' '.'
|
||||
endif
|
||||
|
||||
# The _the.package file is dependent on the java files inside the package.
|
||||
# Fill the _the.package file with a list of the java files and compile them
|
||||
# to class files.
|
||||
$2 : $$($2_PACKAGE_SRCS)
|
||||
$(MKDIR) -p $$($2_PACKAGE_BDIR)
|
||||
$(RM) $2.tmp
|
||||
$$(call ListPathsSafely,$2_PACKAGE_SRCS,\n, >> $2.tmp)
|
||||
$(ECHO) $$($2_PACKAGE_BDIR)*.class | $(GREP) -v \*.class | $(TR) ' ' '\n' > $$($2_PACKAGE_BDIR)_the.package.prev
|
||||
$(RM) $$($2_PACKAGE_BDIR)*.class $$($2_PACKAGE_BDIR)*.notify $$($2_PACKAGE_BDIR)*.deleted
|
||||
$(ECHO) Compiling `$(WC) $2.tmp | $(TR) -s ' ' | $(CUT) -f 2 -d ' '` files in package $(patsubst $4/%/,%,$(dir $2.tmp))
|
||||
$9 $$($2_REMOTE) $$($2_DEPS) $$($2_PUBAPI) $$($2_NATIVEAPI) $(10) -implicit:none -sourcepath "$$($2_SRCROOTSC)" -d $4 @$2.tmp
|
||||
$(ECHO) $$($2_PACKAGE_BDIR)*.class | $(GREP) -v \*.class | $(TR) ' ' '\n' > $$($2_PACKAGE_BDIR)_the.package.now
|
||||
($(GREP) -xvf $$($2_PACKAGE_BDIR)_the.package.now $$($2_PACKAGE_BDIR)_the.package.prev > $$($2_PACKAGE_BDIR)_the.package.deleted;true)
|
||||
$(ECHO) $1_CLASSES += `$(CAT) $$($2_PACKAGE_BDIR)_the.package.now` | \
|
||||
$(SED) 's/\$$$$/\$$$$\$$$$/g' > $$($2_PACKAGE_BDIR)_the.package.d
|
||||
$(ECHO) $1_JAVAS += $$($2_PACKAGE_SRCS) >> $$($2_PACKAGE_BDIR)_the.package.d
|
||||
$(ECHO) $2_NOTIFIED:=true > $$($2_PACKAGE_BDIR)_the.package.notify
|
||||
$$($2_APPEND_DEPS)
|
||||
$$($2_COPY_FILES)
|
||||
$(MV) -f $2.tmp $2
|
||||
endef
|
||||
|
||||
define remove_string
|
||||
$2 := $$(subst $1,,$$($2))
|
||||
endef
|
||||
@@ -664,140 +379,101 @@ define SetupJavaCompilation
|
||||
$(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)
|
||||
ifneq (SINGLE_THREADED_BATCH,$$($1_MODE))
|
||||
ifneq (MULTI_CORE_CONCURRENT,$$($1_MODE))
|
||||
# Extract the info from the java compiler setup.
|
||||
$1_REMOTE := $$($$($1_SETUP)_REMOTE)
|
||||
$1_JVM := $$($$($1_SETUP)_JVM)
|
||||
$1_JAVAC := $$($$($1_SETUP)_JAVAC)
|
||||
$1_FLAGS := $$($$($1_SETUP)_FLAGS) $(JAVAC_FLAGS) $$($1_ADD_JAVAC_FLAGS)
|
||||
ifeq ($$($1_JAVAC),)
|
||||
$$(error The Java compilation $1 refers to a non-existant java compiler setup $$($1_SETUP))
|
||||
endif
|
||||
endif
|
||||
$1_USE_DEPS := $$($$($1_SETUP)_USE_DEPS)
|
||||
$1_REMOTE := $$($$($1_SETUP)_REMOTE)
|
||||
$1_JVM := $$($$($1_SETUP)_JVM)
|
||||
$1_JAVAC := $$($$($1_SETUP)_JAVAC)
|
||||
$1_JAVAH := $$($$($1_SETUP)_JAVAH)
|
||||
$1_FLAGS := $$($$($1_SETUP)_FLAGS) $(JAVAC_FLAGS) $$($1_ADD_JAVAC_FLAGS)
|
||||
|
||||
# Handle addons and overrides.
|
||||
$1_SRC:=$$(call ADD_SRCS,$$($1_SRC))
|
||||
# Make sure the dirs exist.
|
||||
$$(shell $(MKDIR) -p $$($1_SRC) $$($1_BIN))
|
||||
# Find all files in the source trees.
|
||||
$1_ALL_SRCS := $$(filter-out $(OVR_SRCS),$$(foreach i,$$($1_SRC),$$(shell $(FIND) $$i -type f)))
|
||||
# Extract the java files.
|
||||
ifneq ($$($1_EXCLUDE_FILES),)
|
||||
$1_EXCLUDE_FILES_PATTERN:=$$(addprefix %,$$($1_EXCLUDE_FILES))
|
||||
endif
|
||||
$1_SRCS := $$(filter-out $$($1_EXCLUDE_FILES_PATTERN),$$(filter %.java,$$($1_ALL_SRCS)))
|
||||
ifneq ($$($1_INCLUDE_FILES),)
|
||||
$1_INCLUDE_FILES:=$$(foreach i,$$($1_SRC),$$(addprefix $$i/,$$($1_INCLUDE_FILES)))
|
||||
$1_SRCS := $$(filter $$($1_INCLUDE_FILES), $$($1_SRCS))
|
||||
endif
|
||||
$1_PKGS := $$(sort $$(dir $$($1_SRCS)))
|
||||
# Remove the source root from each found path.
|
||||
$$(foreach i,$$($1_SRC),$$(eval $$(call remove_string,$$i,$1_PKGS)))
|
||||
$1_PKGS := $$(sort $$($1_PKGS))
|
||||
# There can be only a single bin dir root, no need to foreach over the roots.
|
||||
$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))))
|
||||
$1_PKG_INCLUDES := $$(addprefix /,$$(addsuffix /%,$$($1_INCLUDES)))
|
||||
$1_BIN_INCLUDES := $$(addprefix $$($1_BIN)/,$$(addsuffix /%,$$($1_INCLUDES)))
|
||||
$1_SRCS := $$(filter $$($1_SRC_INCLUDES),$$($1_SRCS))
|
||||
$1_PKGS := $$(filter $$($1_PKG_INCLUDES),$$($1_PKGS))
|
||||
$1_BINS := $$(filter $$($1_BIN_INCLUDES),$$($1_BINS))
|
||||
endif
|
||||
ifneq ($$($1_EXCLUDES),)
|
||||
$1_SRC_EXCLUDES := $$(foreach i,$$($1_SRC),$$(addprefix $$i/,$$(addsuffix /%,$$($1_EXCLUDES))))
|
||||
$1_PKG_EXCLUDES := $$(addprefix /,$$(addsuffix /%,$$($1_EXCLUDES)))
|
||||
$1_BIN_EXCLUDES := $$(addprefix $$($1_BIN)/,$$(addsuffix /%,$$($1_EXCLUDES)))
|
||||
$1_SRCS := $$(filter-out $$($1_SRC_EXCLUDES),$$($1_SRCS))
|
||||
$1_PKGS := $$(filter-out $$($1_PKG_EXCLUDES),$$($1_PKGS))
|
||||
$1_BINS := $$(filter-out $$($1_BIN_EXCLUDES),$$($1_BINS))
|
||||
endif
|
||||
|
||||
# Find all files to be copied from source to bin.
|
||||
ifneq (,$$($1_COPY))
|
||||
# Rewrite list of patterns into a find statement.
|
||||
$1_COPY_PATTERN:=$(FALSE_FIND_PATTERN) $$(patsubst %,$(SPACE)-o$(SPACE)-name$(SPACE)$(DQUOTE)*%$(DQUOTE),$$($1_COPY))
|
||||
# Search for all files to be copied.
|
||||
$1_ALL_COPIES := $$(foreach i,$$($1_SRC), $$(shell $(FIND) $$i \( $$($1_COPY_PATTERN) \) -a -type f))
|
||||
# Copy these explicitly
|
||||
$1_ALL_COPIES += $$($1_COPY_FILES)
|
||||
# Copy must also respect filters.
|
||||
ifneq (,$$($1_INCLUDES))
|
||||
$1_ALL_COPIES := $$(filter $$($1_SRC_INCLUDES),$$($1_ALL_COPIES))
|
||||
# Handle addons and overrides.
|
||||
$1_SRC:=$$(call ADD_SRCS,$$($1_SRC))
|
||||
# Make sure the dirs exist.
|
||||
$$(shell $(MKDIR) -p $$($1_SRC) $$($1_BIN))
|
||||
# Find all files in the source trees.
|
||||
$1_ALL_SRCS := $$(filter-out $(OVR_SRCS),$$(foreach i,$$($1_SRC),$$(shell $(FIND) $$i -type f)))
|
||||
# Extract the java files.
|
||||
ifneq ($$($1_EXCLUDE_FILES),)
|
||||
$1_EXCLUDE_FILES_PATTERN:=$$(addprefix %,$$($1_EXCLUDE_FILES))
|
||||
endif
|
||||
ifneq (,$$($1_EXCLUDES))
|
||||
$1_ALL_COPIES := $$(filter-out $$($1_SRC_EXCLUDES),$$($1_ALL_COPIES))
|
||||
$1_SRCS := $$(filter-out $$($1_EXCLUDE_FILES_PATTERN),$$(filter %.java,$$($1_ALL_SRCS)))
|
||||
ifneq ($$($1_INCLUDE_FILES),)
|
||||
$1_INCLUDE_FILES:=$$(foreach i,$$($1_SRC),$$(addprefix $$i/,$$($1_INCLUDE_FILES)))
|
||||
$1_SRCS := $$(filter $$($1_INCLUDE_FILES), $$($1_SRCS))
|
||||
endif
|
||||
ifneq (,$$($1_EXCLUDE_FILES))
|
||||
$1_ALL_COPIES := $$(filter-out $$($1_EXCLUDE_FILES_PATTERN),$$($1_ALL_COPIES))
|
||||
endif
|
||||
# All files below META-INF are always copied.
|
||||
$1_ALL_COPIES += $$(foreach i,$$($1_SRC), $$(shell $(FIND) $$i/META-INF -type f 2> /dev/null))
|
||||
ifneq (,$$($1_ALL_COPIES))
|
||||
# Yep, there are files to be copied!
|
||||
$1_ALL_COPY_TARGETS:=
|
||||
$$(foreach i,$$($1_ALL_COPIES),$$(eval $$(call add_file_to_copy,$1,$$i)))
|
||||
# Now we can depend on $$($1_ALL_COPY_TARGETS) to copy all files!
|
||||
endif
|
||||
endif
|
||||
|
||||
# Find all property files to be copied and cleaned from source to bin.
|
||||
ifneq (,$$($1_CLEAN))
|
||||
# Rewrite list of patterns into a find statement.
|
||||
$1_CLEAN_PATTERN:=$(FALSE_FIND_PATTERN) $$(patsubst %,$(SPACE)-o$(SPACE)-name$(SPACE)$(DQUOTE)*%$(DQUOTE),$$($1_CLEAN))
|
||||
# Search for all files to be copied.
|
||||
$1_ALL_CLEANS := $$(foreach i,$$($1_SRC), $$(shell $(FIND) $$i \( $$($1_CLEAN_PATTERN) \) -a -type f))
|
||||
# Copy and clean must also respect filters.
|
||||
ifneq (,$$($1_INCLUDES))
|
||||
$1_ALL_CLEANS := $$(filter $$($1_SRC_INCLUDES),$$($1_ALL_CLEANS))
|
||||
endif
|
||||
ifneq (,$$($1_EXCLUDES))
|
||||
$1_ALL_CLEANS := $$(filter-out $$($1_SRC_EXCLUDES),$$($1_ALL_CLEANS))
|
||||
endif
|
||||
ifneq (,$$($1_EXCLUDE_FILES))
|
||||
$1_ALL_CLEANS := $$(filter-out $$($1_EXCLUDE_FILES_PATTERN),$$($1_ALL_CLEANS))
|
||||
endif
|
||||
ifneq (,$$($1_ALL_CLEANS))
|
||||
# Yep, there are files to be copied and cleaned!
|
||||
$1_ALL_COPY_CLEAN_TARGETS:=
|
||||
$$(foreach i,$$($1_ALL_CLEANS),$$(eval $$(call add_file_to_copy_and_clean,$1,$$i)))
|
||||
# Now we can depend on $$($1_ALL_COPY_CLEAN_TARGETS) to copy all files!
|
||||
endif
|
||||
endif
|
||||
# Now we have a list of all java files to compile: $$($1_SRCS)
|
||||
|
||||
# Find all the directories that contain java sources, each directory
|
||||
# corresponds to a package because we expect the source
|
||||
# code to be organized in this standardized way!
|
||||
$1_SDIRS := $$(sort $$(dir $$($1_SRCS)))
|
||||
# Now prefix each package with the bin root.
|
||||
$1_BDIRS := $$(foreach i,$$($1_PKGS),$$(addprefix $$($1_BIN),$$i))
|
||||
# Now create a list of the packages that are about to compile. This list is
|
||||
# later used to filter out dependencies that point outside of this set.
|
||||
$$(shell $(RM) $$($1_BIN)/_the.list_of_packages)
|
||||
$$(eval $$(call ListPathsSafelyNow,$1_BDIRS,\n, >> $$($1_BIN)/_the.list_of_packages))
|
||||
# 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)))"
|
||||
|
||||
ifeq ($$($1_MODE),SINGLE_THREADED_BATCH)
|
||||
# Ok, we will feed all the found java files into a single javac invocation.
|
||||
# There can be no dependency checking, nor incremental builds. It is
|
||||
# the best we can do with the old javac. If the javac supports a javac server
|
||||
# then we can use the javac server.
|
||||
# Prepend the source/bin path to the filter expressions.
|
||||
ifneq ($$($1_INCLUDES),)
|
||||
$1_SRC_INCLUDES := $$(foreach i,$$($1_SRC),$$(addprefix $$i/,$$(addsuffix /%,$$($1_INCLUDES))))
|
||||
$1_SRCS := $$(filter $$($1_SRC_INCLUDES),$$($1_SRCS))
|
||||
endif
|
||||
ifneq ($$($1_EXCLUDES),)
|
||||
$1_SRC_EXCLUDES := $$(foreach i,$$($1_SRC),$$(addprefix $$i/,$$(addsuffix /%,$$($1_EXCLUDES))))
|
||||
$1_SRCS := $$(filter-out $$($1_SRC_EXCLUDES),$$($1_SRCS))
|
||||
endif
|
||||
|
||||
# We can depend on this target file to trigger a regeneration of all the sources
|
||||
$1 := $$($1_ALL_COPY_TARGETS) $$($1_ALL_COPY_CLEAN_TARGETS) $$($1_BIN)/_the.batch
|
||||
# Find all files to be copied from source to bin.
|
||||
ifneq (,$$($1_COPY))
|
||||
# Rewrite list of patterns into a find statement.
|
||||
$1_COPY_PATTERN:=$(FALSE_FIND_PATTERN) $$(patsubst %,$(SPACE)-o$(SPACE)-name$(SPACE)$(DQUOTE)*%$(DQUOTE),$$($1_COPY))
|
||||
# Search for all files to be copied.
|
||||
$1_ALL_COPIES := $$(foreach i,$$($1_SRC), $$(shell $(FIND) $$i \( $$($1_COPY_PATTERN) \) -a -type f))
|
||||
# Copy these explicitly
|
||||
$1_ALL_COPIES += $$($1_COPY_FILES)
|
||||
# Copy must also respect filters.
|
||||
ifneq (,$$($1_INCLUDES))
|
||||
$1_ALL_COPIES := $$(filter $$($1_SRC_INCLUDES),$$($1_ALL_COPIES))
|
||||
endif
|
||||
ifneq (,$$($1_EXCLUDES))
|
||||
$1_ALL_COPIES := $$(filter-out $$($1_SRC_EXCLUDES),$$($1_ALL_COPIES))
|
||||
endif
|
||||
ifneq (,$$($1_EXCLUDE_FILES))
|
||||
$1_ALL_COPIES := $$(filter-out $$($1_EXCLUDE_FILES_PATTERN),$$($1_ALL_COPIES))
|
||||
endif
|
||||
# All files below META-INF are always copied.
|
||||
$1_ALL_COPIES += $$(foreach i,$$($1_SRC), $$(shell $(FIND) $$i/META-INF -type f 2> /dev/null))
|
||||
ifneq (,$$($1_ALL_COPIES))
|
||||
# Yep, there are files to be copied!
|
||||
$1_ALL_COPY_TARGETS:=
|
||||
$$(foreach i,$$($1_ALL_COPIES),$$(eval $$(call add_file_to_copy,$1,$$i)))
|
||||
# Now we can depend on $$($1_ALL_COPY_TARGETS) to copy all files!
|
||||
endif
|
||||
endif
|
||||
|
||||
# Find all property files to be copied and cleaned from source to bin.
|
||||
ifneq (,$$($1_CLEAN))
|
||||
# Rewrite list of patterns into a find statement.
|
||||
$1_CLEAN_PATTERN:=$(FALSE_FIND_PATTERN) $$(patsubst %,$(SPACE)-o$(SPACE)-name$(SPACE)$(DQUOTE)*%$(DQUOTE),$$($1_CLEAN))
|
||||
# Search for all files to be copied.
|
||||
$1_ALL_CLEANS := $$(foreach i,$$($1_SRC), $$(shell $(FIND) $$i \( $$($1_CLEAN_PATTERN) \) -a -type f))
|
||||
# Copy and clean must also respect filters.
|
||||
ifneq (,$$($1_INCLUDES))
|
||||
$1_ALL_CLEANS := $$(filter $$($1_SRC_INCLUDES),$$($1_ALL_CLEANS))
|
||||
endif
|
||||
ifneq (,$$($1_EXCLUDES))
|
||||
$1_ALL_CLEANS := $$(filter-out $$($1_SRC_EXCLUDES),$$($1_ALL_CLEANS))
|
||||
endif
|
||||
ifneq (,$$($1_EXCLUDE_FILES))
|
||||
$1_ALL_CLEANS := $$(filter-out $$($1_EXCLUDE_FILES_PATTERN),$$($1_ALL_CLEANS))
|
||||
endif
|
||||
ifneq (,$$($1_ALL_CLEANS))
|
||||
# Yep, there are files to be copied and cleaned!
|
||||
$1_ALL_COPY_CLEAN_TARGETS:=
|
||||
$$(foreach i,$$($1_ALL_CLEANS),$$(eval $$(call add_file_to_copy_and_clean,$1,$$i)))
|
||||
# Now we can depend on $$($1_ALL_COPY_CLEAN_TARGETS) to copy all files!
|
||||
endif
|
||||
endif
|
||||
|
||||
# Prep the source paths.
|
||||
ifneq ($$($1_JAVAC_SOURCE_PATH_UGLY_OVERRIDE),)
|
||||
@@ -807,113 +483,73 @@ ifeq ($$($1_MODE),SINGLE_THREADED_BATCH)
|
||||
endif
|
||||
|
||||
ifneq (,$$($1_HEADERS))
|
||||
$1_HEADERS_ARG := -h $$($1_HEADERS)
|
||||
$1_HEADERS_ARG := -h $$($1_HEADERS)
|
||||
endif
|
||||
|
||||
# Create a sed expression to remove the source roots and to replace / with .
|
||||
# and remove .java at the end.
|
||||
$1_REWRITE_INTO_CLASSES:=$$(foreach i,$$($1_SRC),-e 's|$$i/||g') -e 's|/|.|g' -e 's|.java$$$$||g'
|
||||
|
||||
# Here is the batch rules that depends on all the sources.
|
||||
$$($1_BIN)/_the.batch: $$($1_SRCS) $$($1_DEPENDS)
|
||||
$(MKDIR) -p $$(@D)
|
||||
$(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
|
||||
# Ok, we have a modern javac server running!
|
||||
# Since a single Java file can generate zero to an infinity number of .class files
|
||||
# the exact number and names of the .class files will only be known after the compile.
|
||||
# Thus after the compile, a list of the generated classes will be stored in _the.package.d
|
||||
# which is included by the makefile during the next compile. These .d files will
|
||||
# add the generated class names to the BUILD_MYPACKAGE_CLASSES variable and used java file names
|
||||
# to the BUILD_MYPACKAGE_JAVAS variable.
|
||||
$1_CLASSES :=
|
||||
$1_JAVAS :=
|
||||
# Create a file in each package that represents the package dependency.
|
||||
# This file (_the.package) will also contain a list of the source files
|
||||
# to be compiled for this package.
|
||||
$1 := $$(sort $$(patsubst %,%_the.package,$$($1_BDIRS)))
|
||||
# Now call add_java_package for each package to create the dependencies.
|
||||
$$(foreach p,$$($1),$$(eval $$(call add_java_package,$1,$$p,$$($1_SRC),$$($1_BIN),$$($1_BIN)/_the.list_of_packages,NOTUSED,$$($1_USE_DEPS),$$($1_REMOTE),$$($1_JVM) $$($1_JAVAC),$$($1_FLAGS),$$($1_EXCLUDE_FILES_PATTERN) $(OVR_SRCS),$$($1_INCLUDE_FILES),$$($1_JVM) $$($1_JAVAH),$$($1_JAVAC_SOURCE_PATH_UGLY_OVERRIDE))))
|
||||
# All dependencies are setup, now we only need to depend on $1 (aka $(BUILD_MYPACKAGE))
|
||||
# and they will automatically be built!
|
||||
ifeq ($$($1_DISABLE_SJAVAC)x$$(ENABLE_SJAVAC),xyes)
|
||||
# Using sjavac to compile.
|
||||
$1 := $$($1_ALL_COPY_TARGETS) $$($1_ALL_COPY_CLEAN_TARGETS) $$($1_BIN)/javac_state
|
||||
|
||||
# Now add on any files to copy targets
|
||||
$1 := $$($1_ALL_COPY_TARGETS) $$($1_ALL_COPY_CLEAN_TARGETS) $$($1)
|
||||
# Remove the set of found classes from the set of all previously known classes
|
||||
# and the remainder is the set of missing classes.
|
||||
$1_MISSING_CLASSES:=$$(filter-out $$($1_BINS),$$($1_CLASSES))
|
||||
$1_PKGS_MISSING_CLASSES:=$$(sort $$(dir $$($1_MISSING_CLASSES)))
|
||||
# Remove the set of found java files from the set of all previously known java files
|
||||
# the remainder is Java files that have gone missing.
|
||||
$1_MISSING_JAVAS:=$$(filter-out $$($1_SRCS),$$($1_JAVAS))
|
||||
$1_PKGS_MISSING_JAVAS:=$$(sort $$(dir $$($1_MISSING_JAVAS)))
|
||||
# Remove each source root from the found paths.
|
||||
$$(foreach i,$$($1_SRC),$$(eval $$(call remove_string,$$i,$1_PKGS_MISSING_JAVAS)))
|
||||
# Finally remove duplicates and prefix with the binary path instead.
|
||||
$1_PKGS_MISSING_JAVAS:= $$(addprefix $$($1_BIN),$$(sort $$($1_PKGS_MISSING_JAVAS)))
|
||||
$$($1_BIN)/javac_state: $$($1_SRCS) $$($1_DEPENDS)
|
||||
$(MKDIR) -p $$(@D)
|
||||
$$(call ListPathsSafely,$1_SRCS,\n, >> $$($1_BIN)/_the.batch.tmp)
|
||||
$(ECHO) Compiling $1
|
||||
$$($1_JVM) $$(word 1,$$($1_JAVAC)) com.sun.tools.sjavac.Main \
|
||||
$$($1_REMOTE) $$($1_SJAVAC_ARGS) --permit-unidentified-artifacts -mfl $$($1_BIN)/_the.batch.tmp \
|
||||
$$($1_FLAGS) \
|
||||
-implicit:none -d $$($1_BIN) $$($1_HEADERS_ARG)
|
||||
else
|
||||
# Using plain javac to batch compile everything.
|
||||
$1 := $$($1_ALL_COPY_TARGETS) $$($1_ALL_COPY_CLEAN_TARGETS) $$($1_BIN)/_the.batch
|
||||
|
||||
# Remove the set of all theoretical classes from the set of found classes.
|
||||
# the remainder is the set of superfluous classes.
|
||||
$1_SUPERFLUOUS_CLASSES:=$$(sort $$(filter-out $$($1_CLASSES),$$($1_BINS)))
|
||||
$1_PKGS_SUPERFLUOUS_CLASSES:=$$(sort $$(dir $$($1_SUPERFLUOUS_CLASSES)))
|
||||
|
||||
# Now delete the _the.package files inside the problematic dirs.
|
||||
# This will force a rebuild of these packages!
|
||||
$1_FOO:=$$(sort $$($1_PKGS_MISSING_CLASSES) \
|
||||
$$($1_PKGS_SUPERFLUOUS_CLASSES) \
|
||||
$$($1_PKGS_MISSING_JAVAS))
|
||||
# ifneq (,$$($1_FOO))
|
||||
# $$(info MESSED UP PACKAGES $$($1_FOO))
|
||||
# endif
|
||||
|
||||
$$(shell $(RM) $$(addsuffix _the.package,$$(sort $$($1_PKGS_MISSING_CLASSES) \
|
||||
$$($1_PKGS_SUPERFLUOUS_CLASSES) \
|
||||
$$($1_PKGS_MISSING_JAVAS))))
|
||||
|
||||
# Normal makefile dependencies based on timestamps will detect the normal use case
|
||||
# when Java files are simply added or modified.
|
||||
endif
|
||||
|
||||
ifneq (,$$($1_JAR))
|
||||
|
||||
ifeq (,$$($1_SUFFIXES))
|
||||
$1_SUFFIXES:=.class $$($1_CLEAN) $$($1_COPY)
|
||||
# When not using sjavac, pass along all sources to javac using an @file.
|
||||
$$($1_BIN)/_the.batch: $$($1_SRCS) $$($1_DEPENDS)
|
||||
$(MKDIR) -p $$(@D)
|
||||
$(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 for $1
|
||||
($$($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)
|
||||
endif
|
||||
|
||||
# A jar file was specified. Set it up.
|
||||
$$(eval $$(call SetupArchive,ARCHIVE_$1,$$($1),\
|
||||
SRCS:=$$($1_BIN),\
|
||||
SUFFIXES:=$$($1_SUFFIXES),\
|
||||
EXCLUDE:=$$($1_EXCLUDES),\
|
||||
INCLUDES:=$$($1_INCLUDES),\
|
||||
EXTRA_FILES:=$$($1_ALL_COPY_TARGETS) $$($1_ALL_COPY_CLEAN_TARGETS),\
|
||||
JAR:=$$($1_JAR),\
|
||||
JARMAIN:=$$($1_JARMAIN),\
|
||||
MANIFEST:=$$($1_MANIFEST),\
|
||||
EXTRA_MANIFEST_ATTR:=$$($1_EXTRA_MANIFEST_ATTR),\
|
||||
JARINDEX:=$$($1_JARINDEX),\
|
||||
HEADERS:=$$($1_HEADERS),\
|
||||
SETUP:=$$($1_SETUP)))
|
||||
endif
|
||||
# Check if a jar file was specified, then setup the rules for the jar.
|
||||
ifneq (,$$($1_JAR))
|
||||
# If no suffixes was explicitly set for this jar file.
|
||||
# Use class and the cleaned/copied properties file suffixes as the default
|
||||
# for the types of files to be put into the jar.
|
||||
ifeq (,$$($1_SUFFIXES))
|
||||
$1_SUFFIXES:=.class $$($1_CLEAN) $$($1_COPY)
|
||||
endif
|
||||
|
||||
ifneq (,$$($1_SRCZIP))
|
||||
# A srczip file was specified. Set it up.
|
||||
$$(eval $$(call SetupZipArchive,ARCHIVE_$1,\
|
||||
$$(eval $$(call SetupArchive,ARCHIVE_$1,$$($1),\
|
||||
SRCS:=$$($1_BIN),\
|
||||
SUFFIXES:=$$($1_SUFFIXES),\
|
||||
EXCLUDE:=$$($1_EXCLUDES),\
|
||||
INCLUDES:=$$($1_INCLUDES),\
|
||||
EXTRA_FILES:=$$($1_ALL_COPY_TARGETS) $$($1_ALL_COPY_CLEAN_TARGETS),\
|
||||
JAR:=$$($1_JAR),\
|
||||
JARMAIN:=$$($1_JARMAIN),\
|
||||
MANIFEST:=$$($1_MANIFEST),\
|
||||
EXTRA_MANIFEST_ATTR:=$$($1_EXTRA_MANIFEST_ATTR),\
|
||||
JARINDEX:=$$($1_JARINDEX),\
|
||||
HEADERS:=$$($1_HEADERS),\
|
||||
SETUP:=$$($1_SETUP)))
|
||||
endif
|
||||
|
||||
# Check if a srczip was specified, then setup the rules for the srczip.
|
||||
ifneq (,$$($1_SRCZIP))
|
||||
$$(eval $$(call SetupZipArchive,ARCHIVE_$1,\
|
||||
SRC:=$$($1_SRC),\
|
||||
ZIP:=$$($1_SRCZIP),\
|
||||
INCLUDES:=$$($1_INCLUDES),\
|
||||
EXCLUDES:=$$($1_EXCLUDES),\
|
||||
EXCLUDE_FILES:=$$($1_EXCLUDE_FILES)))
|
||||
endif
|
||||
endif
|
||||
|
||||
endef
|
||||
|
||||
@@ -138,7 +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))
|
||||
$(if $(findstring --jobserver,$(MAKEFLAGS)), $(error make -j is not supported, use make JOBS=n))
|
||||
$(call PrintStartMessage)
|
||||
$(call StartTimer)
|
||||
endef
|
||||
|
||||
@@ -57,9 +57,25 @@ endef
|
||||
define ParseLogLevel
|
||||
ifeq ($$(origin VERBOSE),undefined)
|
||||
# Setup logging according to LOG (but only if VERBOSE is not given)
|
||||
|
||||
# If the "nofile" argument is given, act on it and strip it away
|
||||
ifneq ($$(findstring nofile,$$(LOG)),)
|
||||
# Reset the build log wrapper, regardless of other values
|
||||
override BUILD_LOG_WRAPPER=
|
||||
# COMMA is defined in spec.gmk, but that is not included yet
|
||||
COMMA=,
|
||||
# First try to remove ",nofile" if it exists
|
||||
LOG_STRIPPED1=$$(subst $$(COMMA)nofile,,$$(LOG))
|
||||
# Otherwise just remove "nofile"
|
||||
LOG_STRIPPED2=$$(subst nofile,,$$(LOG_STRIPPED1))
|
||||
# We might have ended up with a leading comma. Remove it
|
||||
LOG_STRIPPED3=$$(strip $$(patsubst $$(COMMA)%,%,$$(LOG_STRIPPED2)))
|
||||
override LOG:=$$(LOG_STRIPPED3)
|
||||
endif
|
||||
|
||||
ifeq ($$(LOG),)
|
||||
# Set LOG to "warn" as default if not set (and no VERBOSE given)
|
||||
LOG=warn
|
||||
override LOG=warn
|
||||
endif
|
||||
ifeq ($$(LOG),warn)
|
||||
VERBOSE=-s
|
||||
@@ -182,4 +198,11 @@ define PrintEndMessage
|
||||
$(call CheckEnvironment)
|
||||
endef
|
||||
|
||||
# Cleans the component given as $1
|
||||
define CleanComponent
|
||||
@$(PRINTF) "Cleaning $1 build artifacts ..."
|
||||
@($(CD) $(OUTPUT_ROOT) && $(RM) -r $1)
|
||||
@$(PRINTF) " done\n"
|
||||
endef
|
||||
|
||||
endif # _MAKEHELPERS_GMK
|
||||
|
||||
@@ -26,6 +26,11 @@
|
||||
# This must be the first rule
|
||||
default: all
|
||||
|
||||
# Inclusion of this pseudo-target will cause make to execute this file
|
||||
# serially, regardless of -j. Recursively called makefiles will not be
|
||||
# affected, however. This is required for correct dependency management.
|
||||
.NOTPARALLEL:
|
||||
|
||||
# Locate this Makefile
|
||||
ifeq ($(filter /%,$(lastword $(MAKEFILE_LIST))),)
|
||||
makefile_path:=$(CURDIR)/$(lastword $(MAKEFILE_LIST))
|
||||
@@ -41,18 +46,18 @@ $(eval $(call ParseLogLevel))
|
||||
$(eval $(call SetupLogging))
|
||||
$(eval $(call ParseConfAndSpec))
|
||||
|
||||
# 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 clean dist-clean:
|
||||
@$(foreach spec,$(SPEC),($(MAKE) -f $(makefile_path) SPEC=$(spec) $(VERBOSE) VERBOSE=$(VERBOSE) $@ $(MAKE_ARGS)) &&) true
|
||||
all clean dist-clean:
|
||||
langtools corba jaxp jaxws hotspot jdk images overlay-images install:
|
||||
langtools-only corba-only jaxp-only jaxws-only hotspot-only jdk-only images-only overlay-images-only install-only:
|
||||
clean-langtools clean-corba clean-jaxp clean-jaxws clean-hotspot clean-jdk clean-images:
|
||||
@$(foreach spec,$(SPEC),($(MAKE) -f $(makefile_path) SPEC=$(spec) $(VERBOSE) VERBOSE=$(VERBOSE) $@) &&) true
|
||||
|
||||
.PHONY: all jdk hotspot jaxws jaxp corba langtools install images clean dist-clean
|
||||
.PHONY: all clean dist-clean
|
||||
.PHONY: langtools corba jaxp jaxws hotspot jdk images overlay-images install
|
||||
.PHONY: langtools-only corba-only jaxp-only jaxws-only hotspot-only jdk-only images-only overlay-images-only install-only
|
||||
.PHONY: clean-langtools clean-corba clean-jaxp clean-jaxws clean-hotspot clean-jdk clean-images
|
||||
|
||||
else
|
||||
### This is the main part of the Makefile, for the normal case with SPEC specifying a single existing spec.gmk file.
|
||||
@@ -77,77 +82,110 @@ ifneq (,$(BUILD_LOG))
|
||||
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)/*)
|
||||
ifneq (,$(SJAVAC_SERVER_DIR))
|
||||
$(shell $(MKDIR) -p $(SJAVAC_SERVER_DIR) && $(RM) -rf $(SJAVAC_SERVER_DIR)/*)
|
||||
endif
|
||||
# Clean out any notifications from the previous build.
|
||||
$(shell find $(OUTPUT_ROOT) -name "_the.*.notify" $(FIND_DELETE))
|
||||
$(shell $(FIND) $(OUTPUT_ROOT) -name "_the.*.notify" $(FIND_DELETE))
|
||||
|
||||
# Reset the build timers.
|
||||
$(eval $(call ResetTimers))
|
||||
|
||||
# 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
|
||||
MAKE_ARGS:=$(MAKE_ARGS) -j$(JOBS)
|
||||
|
||||
### Main targets
|
||||
|
||||
all: jdk
|
||||
@$(if $(JAVAC_SERVERS),rm -rf $(JAVAC_SERVERS)/*.port)
|
||||
@$(if $(SJAVAC_SERVER_DIR),$(RM) -rf $(SJAVAC_SERVER_DIR)/*.port)
|
||||
@$(call AtRootMakeEnd)
|
||||
.PHONY: all
|
||||
|
||||
langtools: start-make langtools-only
|
||||
langtools-only:
|
||||
@$(call MakeStart,langtools,all)
|
||||
@($(CD) $(LANGTOOLS_TOPDIR)/makefiles && $(BUILD_LOG_WRAPPER) $(MAKE) -j$(JOBS) $(MAKE_ARGS))
|
||||
@($(CD) $(LANGTOOLS_TOPDIR)/makefiles && $(BUILD_LOG_WRAPPER) $(MAKE) $(MAKE_ARGS))
|
||||
@$(call MakeFinish,langtools,all)
|
||||
|
||||
corba: langtools corba-only
|
||||
corba-only:
|
||||
@$(call MakeStart,corba,all)
|
||||
@($(CD) $(CORBA_TOPDIR)/makefiles && $(BUILD_LOG_WRAPPER) $(MAKE) -j$(JOBS) $(MAKE_ARGS))
|
||||
@($(CD) $(CORBA_TOPDIR)/makefiles && $(BUILD_LOG_WRAPPER) $(MAKE) $(MAKE_ARGS))
|
||||
@$(call MakeFinish,corba,all)
|
||||
|
||||
jaxp: langtools jaxp-only
|
||||
jaxp-only:
|
||||
@$(call MakeStart,jaxp,all)
|
||||
@($(CD) $(JAXP_TOPDIR)/makefiles && $(BUILD_LOG_WRAPPER) $(MAKE) -j$(JOBS) $(MAKE_ARGS))
|
||||
@($(CD) $(JAXP_TOPDIR)/makefiles && $(BUILD_LOG_WRAPPER) $(MAKE) $(MAKE_ARGS))
|
||||
@$(call MakeFinish,jaxp,all)
|
||||
|
||||
jaxws: langtools jaxp jaxws-only
|
||||
jaxws-only:
|
||||
@$(call MakeStart,jaxws,all)
|
||||
@($(CD) $(JAXWS_TOPDIR)/makefiles && $(BUILD_LOG_WRAPPER) $(MAKE) -j$(JOBS) $(MAKE_ARGS))
|
||||
@($(CD) $(JAXWS_TOPDIR)/makefiles && $(BUILD_LOG_WRAPPER) $(MAKE) $(MAKE_ARGS))
|
||||
@$(call MakeFinish,jaxws,all)
|
||||
|
||||
hotspot: langtools hotspot-only
|
||||
hotspot-only:
|
||||
@$(call MakeStart,hotspot,all)
|
||||
@($(CD) $(HOTSPOT_TOPDIR)/make && $(BUILD_LOG_WRAPPER) $(MAKE) -j1 $(HOTSPOT_MAKE_ARGS) $(MAKE_ARGS))
|
||||
@($(CD) $(SRC_ROOT)/common/makefiles && $(BUILD_LOG_WRAPPER) $(MAKE) $(MAKE_ARGS) -f HotspotWrapper.gmk)
|
||||
@$(call MakeFinish,hotspot,all)
|
||||
|
||||
jdk: langtools corba jaxp jaxws hotspot jdk-only
|
||||
jdk-only:
|
||||
@$(call MakeStart,jdk,all)
|
||||
@($(CD) $(JDK_TOPDIR)/makefiles && $(BUILD_LOG_WRAPPER) $(MAKE) -j$(JOBS) $(MAKE_ARGS))
|
||||
@($(CD) $(JDK_TOPDIR)/makefiles && $(BUILD_LOG_WRAPPER) $(MAKE) $(MAKE_ARGS) $(JDK_TARGET))
|
||||
@$(call MakeFinish,jdk,all)
|
||||
|
||||
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) -j$(JOBS) $(JDK_MAKE_ARGS) $(MAKE_ARGS) images)
|
||||
@($(CD) $(JDK_TOPDIR)/makefiles && $(BUILD_LOG_WRAPPER) $(MAKE) $(MAKE_ARGS) images)
|
||||
@$(call MakeFinish,jdk-images,$@)
|
||||
@$(if $(JAVAC_SERVERS),rm -rf $(JAVAC_SERVERS)/*.port)
|
||||
@$(if $(SJAVAC_SERVER_DIR),$(RM) -rf $(SJAVAC_SERVER_DIR)/*.port)
|
||||
@$(call AtRootMakeEnd)
|
||||
|
||||
overlay-images: source-tips start-make jdk langtools corba jaxp jaxws hotspot overlay-images-only
|
||||
overlay-images-only:
|
||||
@$(call MakeStart,jdk-overlay-images,$@)
|
||||
@($(CD) $(JDK_TOPDIR)/makefiles && $(BUILD_LOG_WRAPPER) $(MAKE) $(MAKE_ARGS) overlay-images)
|
||||
@$(call MakeFinish,jdk-overlay-images,$@)
|
||||
@$(if $(SJAVAC_SERVER_DIR),$(RM) -rf $(SJAVAC_SERVER_DIR)/*.port)
|
||||
@$(call AtRootMakeEnd)
|
||||
|
||||
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)
|
||||
@($(CD) $(JDK_TOPDIR)/makefiles && $(BUILD_LOG_WRAPPER) $(MAKE) $(MAKE_ARGS) install)
|
||||
@$(call MakeFinish,jdk-images,$@)
|
||||
@$(if $(JAVAC_SERVERS),rm -rf $(JAVAC_SERVERS)/*.port)
|
||||
@$(if $(SJAVAC_SERVER_DIR),$(RM) -rf $(SJAVAC_SERVER_DIR)/*.port)
|
||||
@$(call AtRootMakeEnd)
|
||||
|
||||
docs: start-make jdk docs-only
|
||||
docs-only:
|
||||
@$(call MakeStart,docs,$@)
|
||||
@($(CD) $(SRC_ROOT)/common/makefiles/javadoc && $(BUILD_LOG_WRAPPER) $(MAKE) $(MAKE_ARGS) -f Javadoc.gmk docs)
|
||||
@$(call MakeFinish,docs,$@)
|
||||
@$(if $(SJAVAC_SERVER_DIR),$(RM) -rf $(SJAVAC_SERVER_DIR)/*.port)
|
||||
@$(call AtRootMakeEnd)
|
||||
|
||||
|
||||
.PHONY: langtools corba jaxp jaxws hotspot jdk images install
|
||||
.PHONY: langtools-only corba-only jaxp-only jaxws-only hotspot-only jdk-only images-only install-only
|
||||
|
||||
start-make:
|
||||
@$(call AtRootMakeStart)
|
||||
.PHONY: start-make
|
||||
|
||||
.PHONY: jdk hotspot jaxws jaxp corba langtools install images start-make
|
||||
bootcycle-images:
|
||||
@$(ECHO) Boot cycle build step 1: Building the JDK image normally
|
||||
@($(CD) $(SRC_ROOT)/common/makefiles && $(BUILD_LOG_WRAPPER) $(MAKE) SPEC=$(SPEC) images)
|
||||
@$(ECHO) Boot cycle build step 2: Building a new JDK image using previously built image
|
||||
@($(CD) $(SRC_ROOT)/common/makefiles && $(BUILD_LOG_WRAPPER) $(MAKE) SPEC=$(dir $(SPEC))bootcycle-spec.gmk images)
|
||||
|
||||
test: start-make
|
||||
@$(call MakeStart,test,$(if $(TEST),$(TEST),all))
|
||||
@@ -167,8 +205,8 @@ $(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 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`)
|
||||
clean: clean-langtools clean-corba clean-jaxp clean-jaxws clean-hotspot clean-jdk clean-images clean-bootcycle-build
|
||||
@($(CD) $(OUTPUT_ROOT) && $(RM) -r tmp source_tips build.log*)
|
||||
@$(ECHO) Cleaned everything except the build configuration.
|
||||
.PHONY: clean
|
||||
|
||||
@@ -178,11 +216,24 @@ dist-clean:
|
||||
@$(ECHO) Cleaned everything, you will have to re-run configure.
|
||||
.PHONY: dist-clean
|
||||
|
||||
clean-langtools:
|
||||
$(call CleanComponent,langtools)
|
||||
clean-corba:
|
||||
$(call CleanComponent,corba)
|
||||
clean-jaxp:
|
||||
$(call CleanComponent,jaxp)
|
||||
clean-jaxws:
|
||||
$(call CleanComponent,jaxws)
|
||||
clean-hotspot:
|
||||
$(call CleanComponent,hotspot)
|
||||
clean-jdk:
|
||||
@(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
|
||||
$(call CleanComponent,jdk)
|
||||
clean-images:
|
||||
$(call CleanComponent,images)
|
||||
clean-bootcycle-build:
|
||||
$(call CleanComponent,bootcycle-build)
|
||||
|
||||
.PHONY: clean-langtools clean-corba clean-jaxp clean-jaxws clean-hotspot clean-jdk clean-images
|
||||
|
||||
endif
|
||||
|
||||
@@ -195,24 +246,39 @@ help:
|
||||
$(info =====================)
|
||||
$(info )
|
||||
$(info Common make targets)
|
||||
$(info . make [all] # Compile all code but do not create images)
|
||||
$(info . make images # Create complete j2sdk and j2re images)
|
||||
$(info . make install # Install the generated images locally)
|
||||
$(info . make clean # Remove all files generated by make, but not those generated by configure)
|
||||
$(info . make dist-clean # Remove all files generated by both make and configure)
|
||||
$(info . make help # Give some help on using make)
|
||||
$(info . make test # Run tests, default is all tests (see TEST below))
|
||||
$(info . make [all] # Compile all code but do not create images)
|
||||
$(info . make images # Create complete j2sdk and j2re images)
|
||||
$(info . make overlay-images # Create limited images for sparc 64 bit platforms)
|
||||
$(info . make bootcycle-images # Build images twice, second time with newly build JDK)
|
||||
$(info . make install # Install the generated images locally)
|
||||
$(info . make clean # Remove all files generated by make, but not those)
|
||||
$(info . # generated by configure)
|
||||
$(info . make dist-clean # Remove all files, including configuration)
|
||||
$(info . make help # Give some help on using make)
|
||||
$(info . make test # Run tests, default is all tests (see TEST below))
|
||||
$(info )
|
||||
$(info Targets for specific components)
|
||||
$(info (Component is any of langtools, corba, jaxp, jaxws, hotspot, jdk or images))
|
||||
$(info . make <component> # Build <component> and everything it depends on. )
|
||||
$(info . make <component>-only # Build <component> only, without dependencies. This)
|
||||
$(info . # is faster but can result in incorrect build results!)
|
||||
$(info . make clean-<component> # Remove files generated by make for <component>)
|
||||
$(info )
|
||||
$(info Useful make variables)
|
||||
$(info . make CONF= # Build all configurations (note, assignment is empty))
|
||||
$(info . make CONF=<substring> # Build the configuration(s) with a name matching the given substring)
|
||||
$(info . make CONF= # Build all configurations (note, assignment is empty))
|
||||
$(info . make CONF=<substring> # Build the configuration(s) with a name matching)
|
||||
$(info . # <substring>)
|
||||
$(info )
|
||||
$(info . make LOG=<loglevel> # Change loglevel from warn (default) to the given loglevel)
|
||||
$(info . # Available loglevels are: warn, info, debug and trace)
|
||||
$(info . # To see executed command lines, use LOG=info)
|
||||
$(info . make LOG=<loglevel> # Change the log level from warn to <loglevel>)
|
||||
$(info . # Available log levels are:)
|
||||
$(info . # 'warn' (default), 'info', 'debug' and 'trace')
|
||||
$(info . # To see executed command lines, use LOG=info)
|
||||
$(info )
|
||||
$(info . make test TEST=<test> # Only run the given test or tests, e.g.)
|
||||
$(info . # make test TEST="jdk_lang jdk_net")
|
||||
$(info . make JOBS=<n> # Run <n> parallel make jobs)
|
||||
$(info . # Note that -jN does not work as expected!)
|
||||
$(info )
|
||||
$(info . make test TEST=<test> # Only run the given test or tests, e.g.)
|
||||
$(info . # make test TEST="jdk_lang jdk_net")
|
||||
$(info )
|
||||
.PHONY: help
|
||||
FRC: # Force target
|
||||
|
||||
@@ -55,22 +55,22 @@ define add_native_source
|
||||
|
||||
ifneq (,$$(filter %.c,$2))
|
||||
# Compile as a C file
|
||||
$1_$2_FLAGS=$4 $$($1_$(notdir $2)_CFLAGS) -c
|
||||
$1_$2_FLAGS=$4 $$($1_$(notdir $2)_CFLAGS) -DTHIS_FILE='"$$(<F)"' -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) -c
|
||||
$1_$2_FLAGS=-x objective-c $4 $$($1_$(notdir $2)_CFLAGS) -DTHIS_FILE='"$$(<F)"' -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_FLAGS=$8 -DTHIS_FILE='"$$(<F)"'
|
||||
$1_$2_COMP=$(AS)
|
||||
$1_$2_DEP_FLAG:=
|
||||
else
|
||||
# Compile as a C++ file
|
||||
$1_$2_FLAGS=$6 $$($1_$(notdir $2)_CXXFLAGS) -c
|
||||
$1_$2_FLAGS=$6 $$($1_$(notdir $2)_CXXFLAGS) -DTHIS_FILE='"$$(<F)"' -c
|
||||
$1_$2_COMP=$7
|
||||
$1_$2_DEP_FLAG:=$(CXX_FLAG_DEPS)
|
||||
endif
|
||||
@@ -98,7 +98,6 @@ define add_native_source
|
||||
$$($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) $(CC_OUT_OPTION)$$($1_$2_OBJ) $2
|
||||
endif
|
||||
endif
|
||||
@@ -129,6 +128,7 @@ define SetupNativeCompilation
|
||||
# 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)
|
||||
# OPTIMIZATION sets optimization level to NONE, LOW, HIGH, HIGHEST
|
||||
$(if $2,$1_$(strip $2))
|
||||
$(if $3,$1_$(strip $3))
|
||||
$(if $4,$1_$(strip $4))
|
||||
@@ -149,7 +149,11 @@ define SetupNativeCompilation
|
||||
$(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))
|
||||
$(if $(22),$1_$(strip $(22)))
|
||||
$(if $(23),$1_$(strip $(23)))
|
||||
$(if $(24),$1_$(strip $(24)))
|
||||
$(if $(25),$1_$(strip $(25)))
|
||||
$(if $(26),$(error Internal makefile error: Too many arguments to SetupNativeCompilation, please update NativeCompilation.gmk))
|
||||
|
||||
ifneq (,$$($1_BIN))
|
||||
$$(error BIN has been replaced with OBJECT_DIR)
|
||||
@@ -315,6 +319,17 @@ define SetupNativeCompilation
|
||||
$1_EXTRA_CXXFLAGS+=$$($1_CXXFLAGS_$(OPENJDK_TARGET_OS)_release)
|
||||
endif
|
||||
|
||||
ifneq (,$$($1_DEBUG_SYMBOLS))
|
||||
ifeq ($(ENABLE_DEBUG_SYMBOLS), yes)
|
||||
# Programs don't get the debug symbols added in the old build. It's not clear if
|
||||
# this is intentional.
|
||||
ifeq ($$($1_PROGRAM),)
|
||||
$1_EXTRA_CFLAGS+=$(CFLAGS_DEBUG_SYMBOLS)
|
||||
$1_EXTRA_CXXFLAGS+=$(CXXFLAGS_DEBUG_SYMBOLS)
|
||||
endif
|
||||
endif
|
||||
endif
|
||||
|
||||
ifeq ($$($1_CXXFLAGS),)
|
||||
$1_CXXFLAGS:=$$($1_CFLAGS)
|
||||
endif
|
||||
@@ -327,40 +342,20 @@ 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)
|
||||
$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)
|
||||
$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)
|
||||
$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)
|
||||
$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))
|
||||
$$(error Unknown value for OPTIMIZATION: $$($1_OPTIMIZATION))
|
||||
endif
|
||||
|
||||
# Now create a list of the packages that are about to compile. Used when sending source
|
||||
@@ -375,7 +370,7 @@ define SetupNativeCompilation
|
||||
$$($1_CXXFLAGS) $$($1_EXTRA_CXXFLAGS),$(CXX),$$($1_ASFLAGS))))
|
||||
|
||||
# On windows we need to create a resource file
|
||||
ifeq ($(OPENJDK_TARGET_OS_API), winapi)
|
||||
ifeq ($(OPENJDK_TARGET_OS), windows)
|
||||
ifneq (,$$($1_VERSIONINFO_RESOURCE))
|
||||
$1_RES:=$$($1_OBJECT_DIR)/$$($1_BASENAME).res
|
||||
$$($1_RES): $$($1_VERSIONINFO_RESOURCE)
|
||||
@@ -409,8 +404,8 @@ define SetupNativeCompilation
|
||||
endif
|
||||
endif
|
||||
|
||||
# Pickup extra OPENJDK_TARGET_OS_API dependent variables (posix or winapi) and
|
||||
# (linux,solaris,windows,bsd) for LDFLAGS and LDFLAGS_SUFFIX
|
||||
# Pickup extra OPENJDK_TARGET_OS_API and/or OPENJDK_TARGET_OS dependent variables
|
||||
# for LDFLAGS and LDFLAGS_SUFFIX
|
||||
$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))
|
||||
@@ -432,9 +427,10 @@ define SetupNativeCompilation
|
||||
"-map:$$($1_OBJECT_DIR)/$$($1_LIBRARY).map"
|
||||
endif
|
||||
|
||||
$$($1_OUTPUT_DIR)/% : $$($1_OBJECT_DIR)/%
|
||||
ifneq ($$($1_OUTPUT_DIR),$$($1_OBJECT_DIR))
|
||||
$$($1_OUTPUT_DIR)/% : $$($1_OBJECT_DIR)/%
|
||||
$(CP) $$< $$@
|
||||
|
||||
endif
|
||||
|
||||
ifeq ($(OPENJDK_TARGET_OS), solaris)
|
||||
# gobjcopy crashes on "empty" section headers with the SHF_ALLOC flag set.
|
||||
@@ -509,8 +505,10 @@ define SetupNativeCompilation
|
||||
"-map:$$($1_OBJECT_DIR)/$$($1_PROGRAM).map"
|
||||
endif
|
||||
|
||||
$$($1_OUTPUT_DIR)/% : $$($1_OBJECT_DIR)/%
|
||||
ifneq ($$($1_OUTPUT_DIR),$$($1_OBJECT_DIR))
|
||||
$$($1_OUTPUT_DIR)/% : $$($1_OBJECT_DIR)/%
|
||||
$(CP) $$< $$@
|
||||
endif
|
||||
|
||||
ifeq ($(OPENJDK_TARGET_OS), solaris)
|
||||
# gobjcopy crashes on "empty" section headers with the SHF_ALLOC flag set.
|
||||
|
||||
293
common/makefiles/javadoc/CORE_PKGS.gmk
Normal file
293
common/makefiles/javadoc/CORE_PKGS.gmk
Normal file
@@ -0,0 +1,293 @@
|
||||
#
|
||||
# Copyright (c) 2001, 2011, 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.
|
||||
#
|
||||
|
||||
# EXCLUDE_PKGS is the list of packages to exclude from the
|
||||
# Java API Specification. Do not add these to CORE_PKGS.
|
||||
# The concatenation of EXCLUDE_PKGS and CORE_PKGS
|
||||
# should make up the list of all packages under the
|
||||
# src/shared/classes directory of the JDK source tree.
|
||||
#
|
||||
EXCLUDE_PKGS = \
|
||||
java.awt.peer \
|
||||
java.awt.dnd.peer \
|
||||
sun.* \
|
||||
com.sun.* \
|
||||
org.apache.* \
|
||||
org.jcp.* \
|
||||
org.w3c.dom.css \
|
||||
org.w3c.dom.html \
|
||||
org.w3c.dom.stylesheets \
|
||||
org.w3c.dom.traversal \
|
||||
org.w3c.dom.ranges \
|
||||
org.w3c.dom.views \
|
||||
org.omg.stub.javax.management.remote.rmi
|
||||
|
||||
#
|
||||
# ACTIVE_JSR_PKGS are packages that are part of an active JSR process--
|
||||
# one that is doing its own review. These packages are not included when
|
||||
# creating diff pages for the platform's JCP process.
|
||||
#
|
||||
# (see /java/pubs/apisrc/jdk/6.0/beta/make/docs/active_jsr_pkgs)
|
||||
# Note:
|
||||
# This is a list of regular expressions. So foo.* matches "foo" and "foo.bar".
|
||||
#
|
||||
ACTIVE_JSR_PKGS= \
|
||||
java.lang.invoke \
|
||||
java.sql \
|
||||
javax.activation \
|
||||
javax.annotation.* \
|
||||
javax.jws.* \
|
||||
javax.lang.* \
|
||||
javax.management.* \
|
||||
javax.script \
|
||||
javax.sql.* \
|
||||
javax.tools.* \
|
||||
javax.xml.* \
|
||||
org.w3c.* \
|
||||
org.xml.sax
|
||||
|
||||
#
|
||||
# CORE_PKGS is the list of packages that form the
|
||||
# Java API Specification.
|
||||
#
|
||||
### ***IMPORTANT NOTE***
|
||||
### There is also a "REGEXP" variable in the docs/makefile that
|
||||
### determines which table the packages go in on the main page.
|
||||
### Currently, there is only table ("Platform Packages") and
|
||||
### everything goes in it, so REGEXP is "*". But if that policy
|
||||
### changes, packages added will need to be reflected in that
|
||||
### list of wildcard expressions, as well.
|
||||
###
|
||||
CORE_PKGS = \
|
||||
java.applet \
|
||||
java.awt \
|
||||
java.awt.color \
|
||||
java.awt.datatransfer \
|
||||
java.awt.dnd \
|
||||
java.awt.event \
|
||||
java.awt.font \
|
||||
java.awt.geom \
|
||||
java.awt.im \
|
||||
java.awt.im.spi \
|
||||
java.awt.image \
|
||||
java.awt.image.renderable \
|
||||
java.awt.print \
|
||||
java.beans \
|
||||
java.beans.beancontext \
|
||||
java.io \
|
||||
java.lang \
|
||||
java.lang.annotation \
|
||||
java.lang.instrument \
|
||||
java.lang.invoke \
|
||||
java.lang.management \
|
||||
java.lang.ref \
|
||||
java.lang.reflect \
|
||||
java.math \
|
||||
java.net \
|
||||
java.nio \
|
||||
java.nio.channels \
|
||||
java.nio.channels.spi \
|
||||
java.nio.charset \
|
||||
java.nio.charset.spi \
|
||||
java.nio.file \
|
||||
java.nio.file.attribute \
|
||||
java.nio.file.spi \
|
||||
java.rmi \
|
||||
java.rmi.activation \
|
||||
java.rmi.dgc \
|
||||
java.rmi.registry \
|
||||
java.rmi.server \
|
||||
java.security \
|
||||
java.security.acl \
|
||||
java.security.cert \
|
||||
java.security.interfaces \
|
||||
java.security.spec \
|
||||
java.sql \
|
||||
java.text \
|
||||
java.text.spi \
|
||||
java.util \
|
||||
java.util.concurrent \
|
||||
java.util.concurrent.atomic \
|
||||
java.util.concurrent.locks \
|
||||
java.util.jar \
|
||||
java.util.logging \
|
||||
java.util.prefs \
|
||||
java.util.regex \
|
||||
java.util.spi \
|
||||
java.util.zip \
|
||||
javax.accessibility \
|
||||
javax.activation \
|
||||
javax.activity \
|
||||
javax.annotation \
|
||||
javax.annotation.processing \
|
||||
javax.crypto \
|
||||
javax.crypto.interfaces \
|
||||
javax.crypto.spec \
|
||||
javax.imageio \
|
||||
javax.imageio.event \
|
||||
javax.imageio.metadata \
|
||||
javax.imageio.plugins.jpeg \
|
||||
javax.imageio.plugins.bmp \
|
||||
javax.imageio.spi \
|
||||
javax.imageio.stream \
|
||||
javax.jws \
|
||||
javax.jws.soap \
|
||||
javax.lang.model \
|
||||
javax.lang.model.element \
|
||||
javax.lang.model.type \
|
||||
javax.lang.model.util \
|
||||
javax.management \
|
||||
javax.management.loading \
|
||||
javax.management.monitor \
|
||||
javax.management.relation \
|
||||
javax.management.openmbean \
|
||||
javax.management.timer \
|
||||
javax.management.modelmbean \
|
||||
javax.management.remote \
|
||||
javax.management.remote.rmi \
|
||||
javax.naming \
|
||||
javax.naming.directory \
|
||||
javax.naming.event \
|
||||
javax.naming.ldap \
|
||||
javax.naming.spi \
|
||||
javax.net \
|
||||
javax.net.ssl \
|
||||
javax.print \
|
||||
javax.print.attribute \
|
||||
javax.print.attribute.standard \
|
||||
javax.print.event \
|
||||
javax.rmi \
|
||||
javax.rmi.CORBA \
|
||||
javax.rmi.ssl \
|
||||
javax.script \
|
||||
javax.security.auth \
|
||||
javax.security.auth.callback \
|
||||
javax.security.auth.kerberos \
|
||||
javax.security.auth.login \
|
||||
javax.security.auth.spi \
|
||||
javax.security.auth.x500 \
|
||||
javax.security.cert \
|
||||
javax.security.sasl \
|
||||
javax.sound.sampled \
|
||||
javax.sound.sampled.spi \
|
||||
javax.sound.midi \
|
||||
javax.sound.midi.spi \
|
||||
javax.sql \
|
||||
javax.sql.rowset \
|
||||
javax.sql.rowset.serial \
|
||||
javax.sql.rowset.spi \
|
||||
javax.swing \
|
||||
javax.swing.border \
|
||||
javax.swing.colorchooser \
|
||||
javax.swing.filechooser \
|
||||
javax.swing.event \
|
||||
javax.swing.table \
|
||||
javax.swing.text \
|
||||
javax.swing.text.html \
|
||||
javax.swing.text.html.parser \
|
||||
javax.swing.text.rtf \
|
||||
javax.swing.tree \
|
||||
javax.swing.undo \
|
||||
javax.swing.plaf \
|
||||
javax.swing.plaf.basic \
|
||||
javax.swing.plaf.metal \
|
||||
javax.swing.plaf.multi \
|
||||
javax.swing.plaf.nimbus \
|
||||
javax.swing.plaf.synth \
|
||||
javax.tools \
|
||||
javax.tools.annotation \
|
||||
javax.transaction \
|
||||
javax.transaction.xa \
|
||||
javax.xml.parsers \
|
||||
javax.xml.bind \
|
||||
javax.xml.bind.annotation \
|
||||
javax.xml.bind.annotation.adapters \
|
||||
javax.xml.bind.attachment \
|
||||
javax.xml.bind.helpers \
|
||||
javax.xml.bind.util \
|
||||
javax.xml.soap \
|
||||
javax.xml.ws \
|
||||
javax.xml.ws.handler \
|
||||
javax.xml.ws.handler.soap \
|
||||
javax.xml.ws.http \
|
||||
javax.xml.ws.soap \
|
||||
javax.xml.ws.spi \
|
||||
javax.xml.ws.spi.http \
|
||||
javax.xml.ws.wsaddressing \
|
||||
javax.xml.transform \
|
||||
javax.xml.transform.sax \
|
||||
javax.xml.transform.dom \
|
||||
javax.xml.transform.stax \
|
||||
javax.xml.transform.stream \
|
||||
javax.xml \
|
||||
javax.xml.crypto \
|
||||
javax.xml.crypto.dom \
|
||||
javax.xml.crypto.dsig \
|
||||
javax.xml.crypto.dsig.dom \
|
||||
javax.xml.crypto.dsig.keyinfo \
|
||||
javax.xml.crypto.dsig.spec \
|
||||
javax.xml.datatype \
|
||||
javax.xml.validation \
|
||||
javax.xml.namespace \
|
||||
javax.xml.xpath \
|
||||
javax.xml.stream \
|
||||
javax.xml.stream.events \
|
||||
javax.xml.stream.util \
|
||||
org.ietf.jgss \
|
||||
org.omg.CORBA \
|
||||
org.omg.CORBA.DynAnyPackage \
|
||||
org.omg.CORBA.ORBPackage \
|
||||
org.omg.CORBA.TypeCodePackage \
|
||||
org.omg.stub.java.rmi \
|
||||
org.omg.CORBA.portable \
|
||||
org.omg.CORBA_2_3 \
|
||||
org.omg.CORBA_2_3.portable \
|
||||
org.omg.CosNaming \
|
||||
org.omg.CosNaming.NamingContextExtPackage \
|
||||
org.omg.CosNaming.NamingContextPackage \
|
||||
org.omg.SendingContext \
|
||||
org.omg.PortableServer \
|
||||
org.omg.PortableServer.CurrentPackage \
|
||||
org.omg.PortableServer.POAPackage \
|
||||
org.omg.PortableServer.POAManagerPackage \
|
||||
org.omg.PortableServer.ServantLocatorPackage \
|
||||
org.omg.PortableServer.portable \
|
||||
org.omg.PortableInterceptor \
|
||||
org.omg.PortableInterceptor.ORBInitInfoPackage \
|
||||
org.omg.Messaging \
|
||||
org.omg.IOP \
|
||||
org.omg.IOP.CodecFactoryPackage \
|
||||
org.omg.IOP.CodecPackage \
|
||||
org.omg.Dynamic \
|
||||
org.omg.DynamicAny \
|
||||
org.omg.DynamicAny.DynAnyPackage \
|
||||
org.omg.DynamicAny.DynAnyFactoryPackage \
|
||||
org.w3c.dom \
|
||||
org.w3c.dom.events \
|
||||
org.w3c.dom.bootstrap \
|
||||
org.w3c.dom.ls \
|
||||
org.xml.sax \
|
||||
org.xml.sax.ext \
|
||||
org.xml.sax.helpers
|
||||
1184
common/makefiles/javadoc/Javadoc.gmk
Normal file
1184
common/makefiles/javadoc/Javadoc.gmk
Normal file
File diff suppressed because it is too large
Load Diff
106
common/makefiles/javadoc/NON_CORE_PKGS.gmk
Normal file
106
common/makefiles/javadoc/NON_CORE_PKGS.gmk
Normal file
@@ -0,0 +1,106 @@
|
||||
#
|
||||
# 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
|
||||
# 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 the package names of all the "non-core"
|
||||
# API published in the Java 2 SDK documentation. "Non-core" means
|
||||
# it includes all published API outside of the JDK API specification.
|
||||
#
|
||||
# These environment variables are used by javadoc in
|
||||
# make/docs/Makefile and are referenced by the localization
|
||||
# team when determining which APIs to extract javadoc
|
||||
# comments from.
|
||||
|
||||
DOMAPI_PKGS = com.sun.java.browser.dom \
|
||||
org.w3c.dom \
|
||||
org.w3c.dom.bootstrap \
|
||||
org.w3c.dom.ls \
|
||||
org.w3c.dom.ranges \
|
||||
org.w3c.dom.traversal \
|
||||
org.w3c.dom.html \
|
||||
org.w3c.dom.stylesheets \
|
||||
org.w3c.dom.css \
|
||||
org.w3c.dom.events \
|
||||
org.w3c.dom.views
|
||||
|
||||
JDI_PKGS = com.sun.jdi \
|
||||
com.sun.jdi.event \
|
||||
com.sun.jdi.request \
|
||||
com.sun.jdi.connect \
|
||||
com.sun.jdi.connect.spi
|
||||
|
||||
MGMT_PKGS = com.sun.management
|
||||
|
||||
JAAS_PKGS = com.sun.security.auth \
|
||||
com.sun.security.auth.callback \
|
||||
com.sun.security.auth.login \
|
||||
com.sun.security.auth.module
|
||||
|
||||
JGSS_PKGS = com.sun.security.jgss
|
||||
|
||||
OLD_JSSE_PKGS = com.sun.net.ssl
|
||||
|
||||
HTTPSERVER_PKGS = com.sun.net.httpserver \
|
||||
com.sun.net.httpserver.spi
|
||||
|
||||
NIO_PKGS = com.sun.nio.file
|
||||
|
||||
DOCLETAPI_PKGS = com.sun.javadoc
|
||||
|
||||
TAGLETAPI_FILE = com/sun/tools/doclets/Taglet.java
|
||||
|
||||
TAGLETAPI_PKGS = com.sun.tools.doclets
|
||||
|
||||
ATTACH_PKGS = com.sun.tools.attach \
|
||||
com.sun.tools.attach.spi
|
||||
|
||||
JCONSOLE_PKGS = com.sun.tools.jconsole
|
||||
|
||||
TREEAPI_PKGS = com.sun.source.tree \
|
||||
com.sun.source.util
|
||||
|
||||
SMARTCARDIO_PKGS = javax.smartcardio
|
||||
|
||||
SCTPAPI_PKGS = com.sun.nio.sctp
|
||||
|
||||
ifeq ($(PLATFORM), macosx)
|
||||
APPLE_EXT_PKGS = com.apple.concurrent \
|
||||
com.apple.eawt \
|
||||
com.apple.eawt.event \
|
||||
com.apple.eio
|
||||
endif
|
||||
|
||||
# non-core packages in rt.jar
|
||||
NON_CORE_PKGS = $(DOMAPI_PKGS) \
|
||||
$(MGMT_PKGS) \
|
||||
$(JAAS_PKGS) \
|
||||
$(JGSS_PKGS) \
|
||||
$(NIO_PKGS) \
|
||||
$(OLD_JSSE_PKGS) \
|
||||
$(HTTPSERVER_PKGS) \
|
||||
$(SMARTCARDIO_PKGS) \
|
||||
$(SCTPAPI_PKGS) \
|
||||
$(APPLE_EXT_PKGS)
|
||||
|
||||
49
common/makefiles/javadoc/Notes.html
Normal file
49
common/makefiles/javadoc/Notes.html
Normal file
@@ -0,0 +1,49 @@
|
||||
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
|
||||
<html>
|
||||
<head>
|
||||
<title>Doc Process Notes</title>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<h3><a name="REGEXP"></a><br>
|
||||
REGEXP</h3>
|
||||
<p> REGEXP is a list of wildcard patterns that determines which packages listed
|
||||
in CORE_PKGS.gmk go into which summary-table on the main API index page. It
|
||||
was motivated by the need to divide the world into "core packages"
|
||||
(java.*) and "extension packages" (javax.*). In time, the distinction
|
||||
went away. The whole table is now called "Platform Packages"--which
|
||||
eliminated the need for this list of regular expressions. But it lingered on,
|
||||
accreting all of the packages in the JVM, one by one. I pruned it back to "*",
|
||||
so it now covers every package in the Java platform API docs. If some separation
|
||||
is needed in the future, it can grow back into a colon-separated list, starting
|
||||
with this, which is in all respects equivalent to "*" at this point
|
||||
in time:</p>
|
||||
<blockquote>
|
||||
<pre>REGEXP = "java.*:javax.*:org.ietf*:org.omg.</pre>
|
||||
</blockquote>
|
||||
<h3><a name="releaseTargets"></a><br>
|
||||
Release Targets</h3>
|
||||
<p> (Thanks to Kelly O'Hair for this info.)</p>
|
||||
<p> The <tt>rel-coredocs</tt> and <tt>rel-docs</tt> targets were added by Eric
|
||||
Armstrong. <tt>rel-coredocs</tt> assumes the kind of large, 32-bit machine used
|
||||
in the javapubs group's docs-release process. It specifies memory settings accordingly
|
||||
to maximize performance.</p>
|
||||
<p> The performance settings, like the sanity check, are most important for the
|
||||
core docs--the platform APIs. Running javadoc on those APIs takes a significant
|
||||
amount of time and memory. Setting the initial heap size as large as possible
|
||||
is important to prevent thrashing as the heap grows. Setting the maximum as
|
||||
large as necessary is also important to keep the job from failing.</p>
|
||||
<blockquote>
|
||||
<p> <tt>-J-Xmx512</tt> sets a maximum of 512, which became necessary in 6.0<br>
|
||||
<tt>-J-Xms256</tt> sets starting size to 256 (default is 8)</p>
|
||||
</blockquote>
|
||||
<p> <tt>rel-coredocs</tt> also includes a sanity check to help ensure that <tt>BUILD_NUMBER</tt>
|
||||
and <tt>MILESTONE</tt> are specified properly when docs are built outside of
|
||||
the normal release engineering process, with the intention of releasing them
|
||||
on the web or in a downloaded docs bundle. (When invoked in release engineering's
|
||||
control build, the values are always set properly. But when the targets are
|
||||
run by themselves, they default to b00 and "internal"--which silently
|
||||
sabotage the result of a build that can take many hours to complete.</p>
|
||||
</body>
|
||||
</html>
|
||||
@@ -176,3 +176,10 @@ d20d9eb9f093adbf392918c703960ad24c93a331 jdk8-b50
|
||||
80689ff9cb499837513f18a1136dac7f0686cd55 jdk8-b52
|
||||
63aeb7a2472fb299134ad7388e0a111a5340b02d jdk8-b53
|
||||
16c82fc74695bab9b9e0fb05c086a5a08ba0082f jdk8-b54
|
||||
e8a0e84383d6fbd303ce44bd355fb25972b13286 jdk8-b55
|
||||
bf1bb47414e178beff67dc255fc3b97bf401f679 jdk8-b56
|
||||
f3ab4163ae012965fc8acdfc25ce0fece8d6906d jdk8-b57
|
||||
18462a19f7bd66d38015f61ea549a5e0c0c889a3 jdk8-b58
|
||||
d54dc53e223ed9ce7d5f4d2cd02ad9d5def3c2db jdk8-b59
|
||||
207ef43ba69ead6cbbab415d81834545e4d46747 jdk8-b60
|
||||
0e08ba7648fb3faa0986cb217887d7c4990977f3 jdk8-b61
|
||||
|
||||
@@ -151,16 +151,26 @@ CD = cd # intrinsic unix command
|
||||
ifeq ($(PLATFORM),windows)
|
||||
ifdef USING_CYGWIN
|
||||
# Intrinsic unix command, with backslash-escaped character interpretation
|
||||
ECHO = $(UNIXCOMMAND_PATH)echo -e
|
||||
ZIPEXE = $(UNIXCOMMAND_PATH)zip
|
||||
UNZIP = $(UNIXCOMMAND_PATH)unzip
|
||||
ECHO = $(UNIXCOMMAND_PATH)echo -e
|
||||
ZIPEXE = $(UNIXCOMMAND_PATH)zip
|
||||
UNZIP = $(UNIXCOMMAND_PATH)unzip
|
||||
# Some CYGWIN nawk versions require BINMODE=w for proper '\r' interpretation
|
||||
NAWK = $(UNIXCOMMAND_PATH)awk -v BINMODE=w
|
||||
else
|
||||
ZIPEXE = $(UTILS_DEVTOOL_PATH)zip
|
||||
UNZIP = $(UTILS_DEVTOOL_PATH)unzip
|
||||
ifdef USING_MSYS
|
||||
ECHO = $(UTILS_COMMAND_PATH)echo -e
|
||||
ZIPEXE = $(UTILS_DEVTOOL_PATH)zip
|
||||
UNZIP = $(UTILS_DEVTOOL_PATH)unzip
|
||||
NAWK = $(UNIXCOMMAND_PATH)awk
|
||||
else
|
||||
ZIPEXE = $(UTILS_DEVTOOL_PATH)zip
|
||||
UNZIP = $(UTILS_DEVTOOL_PATH)unzip
|
||||
NAWK = $(UNIXCOMMAND_PATH)awk
|
||||
endif
|
||||
endif
|
||||
# Re-define some utilities
|
||||
LEX =# override GNU Make intrinsic: no lex on windows
|
||||
NAWK = $(UNIXCOMMAND_PATH)awk
|
||||
SHA1SUM = $(UNIXCOMMAND_PATH)openssl sha1
|
||||
endif
|
||||
|
||||
# Linux specific
|
||||
|
||||
@@ -91,6 +91,15 @@ define OptFullPath
|
||||
$(shell if [ "$1" != "" -a -d "$1" ]; then $(CYGPATH_CMD) "$1"; else echo "$1"; fi)
|
||||
endef
|
||||
else
|
||||
ifdef USING_MSYS
|
||||
DOSPATH_CMD:=$(shell cd $(JDK_TOPDIR) 2> $(DEV_NULL) && pwd)/make/tools/msys_build_scripts/dospath.sh
|
||||
define FullPath
|
||||
$(subst \,/,$(shell $(DOSPATH_CMD) $1))
|
||||
endef
|
||||
define OptFullPath
|
||||
$(shell if [ "$1" != "" -a -d "$1" ]; then (cd $1 && pwd); else echo "$1"; fi)
|
||||
endef
|
||||
else
|
||||
# Temporary until we upgrade to MKS 8.7, MKS pwd returns mixed mode path
|
||||
define FullPath
|
||||
$(shell cd $1 2> $(DEV_NULL) && pwd)
|
||||
@@ -99,6 +108,7 @@ define OptFullPath
|
||||
$(shell if [ "$1" != "" -a -d "$1" ]; then (cd $1 && pwd); else echo "$1"; fi)
|
||||
endef
|
||||
endif
|
||||
endif
|
||||
|
||||
# System drive
|
||||
ifdef SYSTEMDRIVE
|
||||
@@ -112,14 +122,21 @@ _system_drive:=$(call CheckValue,_system_drive,C:)
|
||||
|
||||
# UNIXCOMMAND_PATH: path to where the most common Unix commands are.
|
||||
# NOTE: Must end with / so that it could be empty, allowing PATH usage.
|
||||
ifndef UNIXCOMMAND_PATH
|
||||
ifdef ALT_UNIXCOMMAND_PATH
|
||||
# With cygwin, use this as is; don't use FullPath on it.
|
||||
ifdef ALT_UNIXCOMMAND_PATH
|
||||
ifdef USING_CYGWIN
|
||||
UNIXCOMMAND_PATH :=$(call PrefixPath,$(ALT_UNIXCOMMAND_PATH))
|
||||
else
|
||||
xALT_UNIXCOMMAND_PATH :="$(subst \,/,$(ALT_UNIXCOMMAND_PATH))"
|
||||
fxALT_UNIXCOMMAND_PATH :=$(call FullPath,$(xALT_UNIXCOMMAND_PATH))
|
||||
UNIXCOMMAND_PATH :=$(call PrefixPath,$(fxALT_UNIXCOMMAND_PATH))
|
||||
endif
|
||||
else
|
||||
ifdef USING_CYGWIN
|
||||
UNIXCOMMAND_PATH :=$(call PrefixPath,/usr/bin)
|
||||
else
|
||||
ifdef USING_CYGWIN
|
||||
UNIXCOMMAND_PATH :=$(call PrefixPath,/usr/bin)
|
||||
ifdef USING_MSYS
|
||||
UNIXCOMMAND_PATH :=$(call PrefixPath,/bin)
|
||||
else
|
||||
ifdef ROOTDIR
|
||||
xROOTDIR :="$(subst \,/,$(ROOTDIR))"
|
||||
@@ -131,41 +148,35 @@ ifndef UNIXCOMMAND_PATH
|
||||
ifneq ($(_rootdir),)
|
||||
UNIXCOMMAND_PATH :=$(call PrefixPath,$(_rootdir)/mksnt)
|
||||
endif
|
||||
endif
|
||||
endif
|
||||
UNIXCOMMAND_PATH:=$(call AltCheckSpaces,UNIXCOMMAND_PATH)
|
||||
export UNIXCOMMAND_PATH
|
||||
endif # USING_MSYS
|
||||
endif # USING_CYGWIN
|
||||
endif
|
||||
UNIXCOMMAND_PATH:=$(call AltCheckSpaces,UNIXCOMMAND_PATH)
|
||||
export UNIXCOMMAND_PATH
|
||||
|
||||
# Get version of MKS or CYGWIN
|
||||
ifdef USING_CYGWIN
|
||||
ifndef CYGWIN_VER
|
||||
_CYGWIN_VER :=$(shell $(UNAME))
|
||||
CYGWIN_VER :=$(call GetVersion,$(_CYGWIN_VER))
|
||||
export CYGWIN_VER
|
||||
ifdef USING_MKS
|
||||
_MKS_VER :=$(shell $(MKSINFO) 2>&1 | $(GREP) Release | $(TAIL) -1 | $(SED) -e 's@.*\(Release.*\)@\1@')
|
||||
MKS_VER :=$(call GetVersion,$(_MKS_VER))
|
||||
# At this point, we can re-define FullPath to use DOSNAME_CMD
|
||||
CHECK_MKS87:=$(call CheckVersions,$(MKS_VER),8.7)
|
||||
TRY_DOSNAME:=false
|
||||
ifeq ($(CHECK_MKS87),same)
|
||||
TRY_DOSNAME:=true
|
||||
endif
|
||||
else # MKS
|
||||
_MKS_VER :=$(shell $(MKSINFO) 2>&1 | $(GREP) Release | $(TAIL) -1 | $(SED) -e 's@.*\(Release.*\)@\1@')
|
||||
MKS_VER :=$(call GetVersion,$(_MKS_VER))
|
||||
# At this point, we can re-define FullPath to use DOSNAME_CMD
|
||||
CHECK_MKS87:=$(call CheckVersions,$(MKS_VER),8.7)
|
||||
TRY_DOSNAME:=false
|
||||
ifeq ($(CHECK_MKS87),same)
|
||||
TRY_DOSNAME:=true
|
||||
endif
|
||||
# Newer should be ok
|
||||
ifeq ($(CHECK_MKS87),newer)
|
||||
TRY_DOSNAME:=true
|
||||
endif
|
||||
ifeq ($(TRY_DOSNAME),true)
|
||||
ifeq ($(shell $(UNIXCOMMAND_PATH)dosname -s $(_system_drive)/ 2> $(DEV_NULL)),$(_system_drive)/)
|
||||
_DOSNAME=$(UNIXCOMMAND_PATH)dosname
|
||||
DOSNAME_CMD:=$(_DOSNAME) -s
|
||||
# Newer should be ok
|
||||
ifeq ($(CHECK_MKS87),newer)
|
||||
TRY_DOSNAME:=true
|
||||
endif
|
||||
ifeq ($(TRY_DOSNAME),true)
|
||||
ifeq ($(shell $(UNIXCOMMAND_PATH)dosname -s $(_system_drive)/ 2> $(DEV_NULL)),$(_system_drive)/)
|
||||
_DOSNAME=$(UNIXCOMMAND_PATH)dosname
|
||||
DOSNAME_CMD:=$(_DOSNAME) -s
|
||||
define FullPath
|
||||
$(subst //,/,$(shell echo $1 | $(DOSNAME_CMD) 2> $(DEV_NULL)))
|
||||
endef
|
||||
endif # test dosname -s
|
||||
endif # TRY_DOSNAME
|
||||
endif # test dosname -s
|
||||
endif # TRY_DOSNAME
|
||||
endif # MKS
|
||||
|
||||
# We try to get references to what we need via the default component
|
||||
@@ -240,6 +251,8 @@ endif
|
||||
# DEVTOOLS_PATH: for other tools required for building (such as zip, etc.)
|
||||
# NOTE: Must end with / so that it could be empty, allowing PATH usage.
|
||||
ifndef DEVTOOLS_PATH
|
||||
# DEVTOOLS_PATH: for other tools required for building (such as zip, etc.)
|
||||
# NOTE: Must end with / so that it could be empty, allowing PATH usage.
|
||||
ifdef ALT_DEVTOOLS_PATH
|
||||
xALT_DEVTOOLS_PATH :="$(subst \,/,$(ALT_DEVTOOLS_PATH))"
|
||||
fxALT_DEVTOOLS_PATH :=$(call FullPath,$(xALT_DEVTOOLS_PATH))
|
||||
@@ -248,10 +261,14 @@ ifndef DEVTOOLS_PATH
|
||||
ifdef USING_CYGWIN
|
||||
DEVTOOLS_PATH :=$(UNIXCOMMAND_PATH)
|
||||
else
|
||||
xDEVTOOLS_PATH :="$(_system_drive)/utils"
|
||||
fxDEVTOOLS_PATH :=$(call FullPath,$(xDEVTOOLS_PATH))
|
||||
DEVTOOLS_PATH :=$(call PrefixPath,$(fxDEVTOOLS_PATH))
|
||||
endif
|
||||
ifdef USING_MSYS
|
||||
DEVTOOLS_PATH :=$(UNIXCOMMAND_PATH)
|
||||
else
|
||||
xDEVTOOLS_PATH :="$(_system_drive)/utils"
|
||||
fxDEVTOOLS_PATH :=$(call FullPath,$(xDEVTOOLS_PATH))
|
||||
DEVTOOLS_PATH :=$(call PrefixPath,$(fxDEVTOOLS_PATH))
|
||||
endif # USING_MSYS
|
||||
endif # USING_CYGWIN
|
||||
endif
|
||||
DEVTOOLS_PATH:=$(call AltCheckSpaces,DEVTOOLS_PATH)
|
||||
export DEVTOOLS_PATH
|
||||
|
||||
@@ -65,6 +65,8 @@ PLATFORM_SHARED=done
|
||||
# REQUIRED_WINDOWS_NAME windows only: basic name of windows
|
||||
# REQUIRED_WINDOWS_VERSION windows only: specific version of windows
|
||||
# USING_CYGWIN windows only: true or false
|
||||
# USING_MSYS windows only: true or false
|
||||
# USING_MKS windows only: true or false
|
||||
# WINDOWS_NT_VERSION_STRING windows only: long version name
|
||||
# REQUIRED_OS_VERSION required OS version, e.g. 5.10, 2.4
|
||||
# REQUIRED_FREE_SPACE minimum disk space needed for outputdir
|
||||
@@ -327,6 +329,8 @@ endif
|
||||
# Windows with and without CYGWIN will be slightly different
|
||||
ifeq ($(SYSTEM_UNAME), Windows_NT)
|
||||
PLATFORM = windows
|
||||
USING_MKS = true
|
||||
export USING_MKS
|
||||
OS_VERSION := $(shell uname -r)
|
||||
WINDOWS_NT_VERSION_STRING=Windows_NT
|
||||
REQUIRED_MKS_VER=6.1
|
||||
@@ -339,6 +343,11 @@ ifneq (,$(findstring CYGWIN,$(SYSTEM_UNAME)))
|
||||
WINDOWS_NT_VERSION_STRING=CYGWIN_NT
|
||||
REQUIRED_CYGWIN_VER=4.0
|
||||
endif
|
||||
ifneq (,$(findstring MINGW,$(SYSTEM_UNAME)))
|
||||
PLATFORM = windows
|
||||
USING_MSYS = true
|
||||
export USING_MSYS
|
||||
endif
|
||||
|
||||
# Platform settings specific to Windows
|
||||
ifeq ($(PLATFORM), windows)
|
||||
|
||||
@@ -48,10 +48,8 @@ $(eval $(call SetupJavaCompiler,GENERATE_OLDBYTECODE,\
|
||||
JVM:=$(JAVA),\
|
||||
JAVAC:=$(JAVAC_JARS),\
|
||||
FLAGS:=$(BOOT_JDK_SOURCETARGET) -bootclasspath $(BOOT_RTJAR) $(DISABLE_CORBA_WARNINGS),\
|
||||
SERVER_DIR:=$(JAVAC_SERVERS),\
|
||||
SERVER_JVM:=$(SERVER_JAVA),\
|
||||
MODE:=$(JAVAC_USE_MODE),\
|
||||
USE_DEPS:=$(JAVAC_USE_DEPS)))
|
||||
SERVER_DIR:=$(SJAVAC_SERVER_DIR),\
|
||||
SERVER_JVM:=$(SJAVAC_SERVER_JAVA)))
|
||||
|
||||
# The "generate new bytecode" uses the new compiler to generate bytecode
|
||||
# for the new jdk that is being built. The code compiled by this setup
|
||||
@@ -59,13 +57,9 @@ $(eval $(call SetupJavaCompiler,GENERATE_OLDBYTECODE,\
|
||||
$(eval $(call SetupJavaCompiler,GENERATE_NEWBYTECODE,\
|
||||
JVM:=$(JAVA),\
|
||||
JAVAC:=$(JAVAC_JARS),\
|
||||
FLAGS:=-Xprefer:source -XDignore.symbol.file=true \
|
||||
-cp $(BOOT_JDK)/lib/tools.jar \
|
||||
$(DISABLE_CORBA_WARNINGS),\
|
||||
SERVER_DIR:=$(JAVAC_SERVERS),\
|
||||
SERVER_JVM:=$(SERVER_JAVA),\
|
||||
MODE:=$(JAVAC_USE_MODE),\
|
||||
USE_DEPS:=$(JAVAC_USE_DEPS)))
|
||||
FLAGS:=-cp $(BOOT_TOOLSJAR) -XDignore.symbol.file=true $(DISABLE_CORBA_WARNINGS),\
|
||||
SERVER_DIR:=$(SJAVAC_SERVER_DIR),\
|
||||
SERVER_JVM:=$(SJAVAC_SERVER_JAVA)))
|
||||
|
||||
$(eval $(call SetupJavaCompilation,BUILD_STRIPPROP,\
|
||||
SETUP:=GENERATE_OLDBYTECODE,\
|
||||
|
||||
@@ -1631,7 +1631,7 @@ public class StubGenerator extends sun.rmi.rmic.iiop.Generator {
|
||||
|
||||
// Write data members...
|
||||
p.pln();
|
||||
p.pln("private " + getName(theType) + " target = null;");
|
||||
p.pln("volatile private " + getName(theType) + " target = null;");
|
||||
p.pln();
|
||||
|
||||
// Write the ids...
|
||||
@@ -1695,6 +1695,10 @@ public class StubGenerator extends sun.rmi.rmic.iiop.Generator {
|
||||
|
||||
if (remoteMethods.length > 0) {
|
||||
p.plnI("try {");
|
||||
p.pln(getName(theType) + " target = this.target;");
|
||||
p.plnI("if (target == null) {");
|
||||
p.pln("throw new java.io.IOException();");
|
||||
p.pOln("}");
|
||||
p.plnI(idExtInputStream + " "+in+" = ");
|
||||
p.pln("(" + idExtInputStream + ") "+_in+";");
|
||||
p.pO();
|
||||
|
||||
@@ -274,3 +274,16 @@ e3619706a7253540a2d94e9e841acaab8ace7038 jdk8-b49
|
||||
9e3ae661284dc04185b029d85440fe7811f1ed07 hs24-b21
|
||||
e8fb566b94667f88462164defa654203f0ab6820 jdk8-b54
|
||||
09ea7e0752b306b8ae74713aeb4eb6263e1c6836 hs24-b22
|
||||
af0c8a0808516317333dcf9af15567cdd52761ce jdk8-b55
|
||||
6124ff4218296c91e4a72f1a76c064892d39d61b jdk8-b56
|
||||
9b076bc3ab67d42d1d02144ef8dcd6006a7fc0d6 hs25-b01
|
||||
d70102c4cb73158902acaa6016f47c7bc14e0d67 jdk8-b57
|
||||
5f54277c67f755a377999bff904ab48aa63ddaf9 hs25-b02
|
||||
6bb378c50828e9d76fb2653d1712c66ea8fc47db jdk8-b58
|
||||
f2e12eb74117c917c0bb264694c02de4a6a15a10 hs25-b03
|
||||
8a1a6b9b4f20fd2f6a12441d638e51f19a82db19 jdk8-b59
|
||||
1cc7a2a11d00832e3d07f81f3744a6883422db7e hs25-b04
|
||||
3cfd05b2219a29649741a52637696f06acf24a4e jdk8-b60
|
||||
b261523fe66c40a02968f0aa7e73602491bb3386 hs25-b05
|
||||
4547dc71db765276e027b0c2780b724bae0a07d3 jdk8-b61
|
||||
d0337c31c8be7716369b4e7c3bd5f352983c6a06 hs25-b06
|
||||
|
||||
@@ -38,10 +38,10 @@ Available commands:
|
||||
assert true | false <font color="red">turn on/off asserts in SA code</font>
|
||||
attach pid | exec core <font color="red">attach SA to a process or core</font>
|
||||
class name <font color="red">find a Java class from debuggee and print oop</font>
|
||||
classes <font color="red">print all loaded Java classes with klassOop</font>
|
||||
classes <font color="red">print all loaded Java classes with Klass*</font>
|
||||
detach <font color="red">detach SA from current target</font>
|
||||
dis address [ length ] <font color="red">disassemble (sparc/x86) specified number of instructions from given address</font>
|
||||
dumpclass { address | name } [ directory ] <font color="red">dump .class file for given klassOop or class name</font>
|
||||
dumpclass { address | name } [ directory ] <font color="red">dump .class file for given Klass* or class name</font>
|
||||
dumpheap [ file ] <font color="red">dump heap in hprof binary format</font>
|
||||
echo [ true | false ] <font color="red">turn on/off command echo mode</font>
|
||||
examine [ address/count ] | [ address,address] <font color="red">show contents of memory from given address</font>
|
||||
@@ -51,7 +51,7 @@ Available commands:
|
||||
help [ command ] <font color="red">print help message for all commands or just given command</font>
|
||||
history <font color="red">show command history. usual !command-number syntax works.</font>
|
||||
inspect expression <font color="red">inspect a given oop</font>
|
||||
jdis address <font color="red">show bytecode disassembly of a given methodOop</font>
|
||||
jdis address <font color="red">show bytecode disassembly of a given Method*</font>
|
||||
jhisto <font color="red">show Java heap histogram</font>
|
||||
jseval script <font color="red">evaluate a given string as JavaScript code</font>
|
||||
jsload file <font color="red">load and evaluate a JavaScript file</font>
|
||||
@@ -59,7 +59,7 @@ Available commands:
|
||||
livenmethods <font color="red">show all live nmethods</font>
|
||||
mem address [ length ] <font color="red">show contents of memory -- also shows closest ELF/COFF symbol if found</font>
|
||||
pmap <font color="red">show Solaris pmap-like output</font>
|
||||
print expression <font color="red">print given klassOop, methodOop or arbitrary address</font>
|
||||
print expression <font color="red">print given Klass*, Method* or arbitrary address</font>
|
||||
printas type expression <font color="red">print given address as given HotSpot type. eg. print JavaThread <address></font>
|
||||
printstatics [ type ] <font color="red">print static fields of given HotSpot type (or all types if none specified)</font>
|
||||
pstack [-v] <font color="red">show mixed mode stack trace for all Java, non-Java threads. -v is verbose mode</font>
|
||||
|
||||
@@ -1,254 +0,0 @@
|
||||
/*
|
||||
* Copyright (c) 2003, 2004, 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.
|
||||
*
|
||||
*/
|
||||
|
||||
import java.io.*;
|
||||
import java.util.*;
|
||||
|
||||
|
||||
/**
|
||||
<p> This class finds transitive closure of dependencies from a given
|
||||
root set of classes. If your project has lots of .class files and you
|
||||
want to ship only those .class files which are used (transitively)
|
||||
from a root set of classes, then you can use this utility. </p> <p>
|
||||
How does it work?</p>
|
||||
|
||||
<p> We walk through all constant pool entries of a given class and
|
||||
find all modified UTF-8 entries. Anything that looks like a class name is
|
||||
considered as a class and we search for that class in the given
|
||||
classpath. If we find a .class of that name, then we add that class to
|
||||
list.</p>
|
||||
|
||||
<p> We could have used CONSTANT_ClassInfo type constants only. But
|
||||
that will miss classes used through Class.forName or xyz.class
|
||||
construct. But, if you refer to a class name in some other string we
|
||||
would include it as dependency :(. But this is quite unlikely
|
||||
anyway. To look for exact Class.forName argument(s) would involve
|
||||
bytecode analysis. Also, we handle only simple reflection. If you
|
||||
accept name of a class from externally (for eg properties file or
|
||||
command line args for example, this utility will not be able to find
|
||||
that dependency. In such cases, include those classes in the root set.
|
||||
</p>
|
||||
*/
|
||||
|
||||
public class ClosureFinder {
|
||||
private Collection roots; // root class names Collection<String>
|
||||
private Map visitedClasses; // set of all dependencies as a Map
|
||||
private String classPath; // classpath to look for .class files
|
||||
private String[] pathComponents; // classpath components
|
||||
private static final boolean isWindows = File.separatorChar != '/';
|
||||
|
||||
public ClosureFinder(Collection roots, String classPath) {
|
||||
this.roots = roots;
|
||||
this.classPath = classPath;
|
||||
parseClassPath();
|
||||
}
|
||||
|
||||
// parse classPath into pathComponents array
|
||||
private void parseClassPath() {
|
||||
List paths = new ArrayList();
|
||||
StringTokenizer st = new StringTokenizer(classPath, File.pathSeparator);
|
||||
while (st.hasMoreTokens())
|
||||
paths.add(st.nextToken());
|
||||
|
||||
Object[] arr = paths.toArray();
|
||||
pathComponents = new String[arr.length];
|
||||
System.arraycopy(arr, 0, pathComponents, 0, arr.length);
|
||||
}
|
||||
|
||||
// if output is aleady not computed, compute it now
|
||||
// result is a map from class file name to base path where the .class was found
|
||||
public Map find() {
|
||||
if (visitedClasses == null) {
|
||||
visitedClasses = new HashMap();
|
||||
computeClosure();
|
||||
}
|
||||
return visitedClasses;
|
||||
}
|
||||
|
||||
// compute closure for all given root classes
|
||||
private void computeClosure() {
|
||||
for (Iterator rootsItr = roots.iterator(); rootsItr.hasNext();) {
|
||||
String name = (String) rootsItr.next();
|
||||
name = name.substring(0, name.indexOf(".class"));
|
||||
computeClosure(name);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// looks up for .class in pathComponents and returns
|
||||
// base path if found, else returns null
|
||||
private String lookupClassFile(String classNameAsPath) {
|
||||
for (int i = 0; i < pathComponents.length; i++) {
|
||||
File f = new File(pathComponents[i] + File.separator +
|
||||
classNameAsPath + ".class");
|
||||
if (f.exists()) {
|
||||
if (isWindows) {
|
||||
String name = f.getName();
|
||||
// Windows reports special devices AUX,NUL,CON as files
|
||||
// under any directory. It does not care about file extention :-(
|
||||
if (name.compareToIgnoreCase("AUX.class") == 0 ||
|
||||
name.compareToIgnoreCase("NUL.class") == 0 ||
|
||||
name.compareToIgnoreCase("CON.class") == 0) {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
return pathComponents[i];
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
|
||||
// from JVM spec. 2'nd edition section 4.4
|
||||
private static final int CONSTANT_Class = 7;
|
||||
private static final int CONSTANT_FieldRef = 9;
|
||||
private static final int CONSTANT_MethodRef = 10;
|
||||
private static final int CONSTANT_InterfaceMethodRef = 11;
|
||||
private static final int CONSTANT_String = 8;
|
||||
private static final int CONSTANT_Integer = 3;
|
||||
private static final int CONSTANT_Float = 4;
|
||||
private static final int CONSTANT_Long = 5;
|
||||
private static final int CONSTANT_Double = 6;
|
||||
private static final int CONSTANT_NameAndType = 12;
|
||||
private static final int CONSTANT_Utf8 = 1;
|
||||
|
||||
// whether a given string may be a class name?
|
||||
private boolean mayBeClassName(String internalClassName) {
|
||||
int len = internalClassName.length();
|
||||
for (int s = 0; s < len; s++) {
|
||||
char c = internalClassName.charAt(s);
|
||||
if (!Character.isJavaIdentifierPart(c) && c != '/')
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
// compute closure for a given class
|
||||
private void computeClosure(String className) {
|
||||
if (visitedClasses.get(className) != null) return;
|
||||
String basePath = lookupClassFile(className);
|
||||
if (basePath != null) {
|
||||
visitedClasses.put(className, basePath);
|
||||
try {
|
||||
File classFile = new File(basePath + File.separator + className + ".class");
|
||||
FileInputStream fis = new FileInputStream(classFile);
|
||||
DataInputStream dis = new DataInputStream(fis);
|
||||
// look for .class signature
|
||||
if (dis.readInt() != 0xcafebabe) {
|
||||
System.err.println(classFile.getAbsolutePath() + " is not a valid .class file");
|
||||
return;
|
||||
}
|
||||
|
||||
// ignore major and minor version numbers
|
||||
dis.readShort();
|
||||
dis.readShort();
|
||||
|
||||
// read number of constant pool constants
|
||||
int numConsts = (int) dis.readShort();
|
||||
String[] strings = new String[numConsts];
|
||||
|
||||
// zero'th entry is unused
|
||||
for (int cpIndex = 1; cpIndex < numConsts; cpIndex++) {
|
||||
int constType = (int) dis.readByte();
|
||||
switch (constType) {
|
||||
case CONSTANT_Class:
|
||||
case CONSTANT_String:
|
||||
dis.readShort(); // string name index;
|
||||
break;
|
||||
|
||||
case CONSTANT_FieldRef:
|
||||
case CONSTANT_MethodRef:
|
||||
case CONSTANT_InterfaceMethodRef:
|
||||
case CONSTANT_NameAndType:
|
||||
case CONSTANT_Integer:
|
||||
case CONSTANT_Float:
|
||||
// all these are 4 byte constants
|
||||
dis.readInt();
|
||||
break;
|
||||
|
||||
case CONSTANT_Long:
|
||||
case CONSTANT_Double:
|
||||
// 8 byte constants
|
||||
dis.readLong();
|
||||
// occupies 2 cp entries
|
||||
cpIndex++;
|
||||
break;
|
||||
|
||||
|
||||
case CONSTANT_Utf8: {
|
||||
strings[cpIndex] = dis.readUTF();
|
||||
break;
|
||||
}
|
||||
|
||||
default:
|
||||
System.err.println("invalid constant pool entry");
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
// now walk thru the string constants and look for class names
|
||||
for (int s = 0; s < numConsts; s++) {
|
||||
if (strings[s] != null && mayBeClassName(strings[s]))
|
||||
computeClosure(strings[s].replace('/', File.separatorChar));
|
||||
}
|
||||
|
||||
} catch (IOException exp) {
|
||||
// ignore for now
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
// a sample main that accepts roots classes in a file and classpath as args
|
||||
public static void main(String[] args) {
|
||||
if (args.length != 2) {
|
||||
System.err.println("Usage: ClosureFinder <root class file> <class path>");
|
||||
System.exit(1);
|
||||
}
|
||||
|
||||
List roots = new ArrayList();
|
||||
try {
|
||||
FileInputStream fis = new FileInputStream(args[0]);
|
||||
DataInputStream dis = new DataInputStream(fis);
|
||||
String line = null;
|
||||
while ((line = dis.readLine()) != null) {
|
||||
if (isWindows) {
|
||||
line = line.replace('/', File.separatorChar);
|
||||
}
|
||||
roots.add(line);
|
||||
}
|
||||
} catch (IOException exp) {
|
||||
System.err.println(exp.getMessage());
|
||||
System.exit(2);
|
||||
}
|
||||
|
||||
ClosureFinder cf = new ClosureFinder(roots, args[1]);
|
||||
Map out = cf.find();
|
||||
Iterator res = out.keySet().iterator();
|
||||
for(; res.hasNext(); ) {
|
||||
String className = (String) res.next();
|
||||
System.out.println(className + ".class");
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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
|
||||
@@ -41,10 +41,7 @@ endif
|
||||
PKGLIST = \
|
||||
sun.jvm.hotspot \
|
||||
sun.jvm.hotspot.asm \
|
||||
sun.jvm.hotspot.asm.amd64 \
|
||||
sun.jvm.hotspot.asm.ia64 \
|
||||
sun.jvm.hotspot.asm.sparc \
|
||||
sun.jvm.hotspot.asm.x86 \
|
||||
sun.jvm.hotspot.bugspot \
|
||||
sun.jvm.hotspot.bugspot.tree \
|
||||
sun.jvm.hotspot.c1 \
|
||||
@@ -138,10 +135,7 @@ com.sun.java.swing.ui
|
||||
FILELIST = \
|
||||
sun/jvm/hotspot/*.java \
|
||||
sun/jvm/hotspot/asm/*.java \
|
||||
sun/jvm/hotspot/asm/amd64/*.java \
|
||||
sun/jvm/hotspot/asm/ia64/*.java \
|
||||
sun/jvm/hotspot/asm/sparc/*.java \
|
||||
sun/jvm/hotspot/asm/x86/*.java \
|
||||
sun/jvm/hotspot/bugspot/*.java \
|
||||
sun/jvm/hotspot/bugspot/tree/*.java \
|
||||
sun/jvm/hotspot/c1/*.java \
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
#!/bin/sh
|
||||
#
|
||||
# Copyright (c) 2003, 2009, 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
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
#!/bin/sh
|
||||
#
|
||||
# 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
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2002, 2007, 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
|
||||
@@ -31,7 +31,13 @@
|
||||
#import <mach/mach.h>
|
||||
#import <mach/mach_types.h>
|
||||
#import <sys/sysctl.h>
|
||||
#import <stdio.h>
|
||||
#import <stdarg.h>
|
||||
#import <stdlib.h>
|
||||
#import <strings.h>
|
||||
#import <dlfcn.h>
|
||||
#import <limits.h>
|
||||
#import <errno.h>
|
||||
|
||||
jboolean debug = JNI_FALSE;
|
||||
|
||||
@@ -60,6 +66,9 @@ static task_t getTask(JNIEnv *env, jobject this_obj) {
|
||||
#define CHECK_EXCEPTION if ((*env)->ExceptionOccurred(env)) { return;}
|
||||
#define THROW_NEW_DEBUGGER_EXCEPTION_(str, value) { throw_new_debugger_exception(env, str); return value; }
|
||||
#define THROW_NEW_DEBUGGER_EXCEPTION(str) { throw_new_debugger_exception(env, str); return;}
|
||||
#define CHECK_EXCEPTION_CLEAR if ((*env)->ExceptionOccurred(env)) { (*env)->ExceptionClear(env); }
|
||||
#define CHECK_EXCEPTION_CLEAR_VOID if ((*env)->ExceptionOccurred(env)) { (*env)->ExceptionClear(env); return; }
|
||||
#define CHECK_EXCEPTION_CLEAR_(value) if ((*env)->ExceptionOccurred(env)) { (*env)->ExceptionClear(env); return value; }
|
||||
|
||||
static void throw_new_debugger_exception(JNIEnv* env, const char* errMsg) {
|
||||
(*env)->ThrowNew(env, (*env)->FindClass(env, "sun/jvm/hotspot/debugger/DebuggerException"), errMsg);
|
||||
@@ -404,3 +413,164 @@ JNF_COCOA_ENTER(env);
|
||||
}
|
||||
JNF_COCOA_EXIT(env);
|
||||
}
|
||||
|
||||
/*
|
||||
* Class: sun_jvm_hotspot_asm_Disassembler
|
||||
* Method: load_library
|
||||
* Signature: (Ljava/lang/String;)L
|
||||
*/
|
||||
JNIEXPORT jlong JNICALL Java_sun_jvm_hotspot_asm_Disassembler_load_1library(JNIEnv * env,
|
||||
jclass disclass,
|
||||
jstring jrepath_s,
|
||||
jstring libname_s) {
|
||||
uintptr_t func = 0;
|
||||
const char* error_message = NULL;
|
||||
const char* java_home;
|
||||
jboolean isCopy;
|
||||
uintptr_t *handle = NULL;
|
||||
|
||||
const char * jrepath = (*env)->GetStringUTFChars(env, jrepath_s, &isCopy); // like $JAVA_HOME/jre/lib/sparc/
|
||||
const char * libname = (*env)->GetStringUTFChars(env, libname_s, &isCopy);
|
||||
char buffer[128];
|
||||
|
||||
/* Load the hsdis library */
|
||||
void* hsdis_handle;
|
||||
hsdis_handle = dlopen(libname, RTLD_LAZY | RTLD_GLOBAL);
|
||||
if (hsdis_handle == NULL) {
|
||||
snprintf(buffer, sizeof(buffer), "%s%s", jrepath, libname);
|
||||
hsdis_handle = dlopen(buffer, RTLD_LAZY | RTLD_GLOBAL);
|
||||
}
|
||||
if (hsdis_handle != NULL) {
|
||||
func = (uintptr_t)dlsym(hsdis_handle, "decode_instructions_virtual");
|
||||
}
|
||||
if (func == 0) {
|
||||
error_message = dlerror();
|
||||
fprintf(stderr, "%s\n", error_message);
|
||||
}
|
||||
|
||||
(*env)->ReleaseStringUTFChars(env, libname_s, libname);
|
||||
(*env)->ReleaseStringUTFChars(env, jrepath_s, jrepath);
|
||||
|
||||
if (func == 0) {
|
||||
/* Couldn't find entry point. error_message should contain some
|
||||
* platform dependent error message.
|
||||
*/
|
||||
THROW_NEW_DEBUGGER_EXCEPTION(error_message);
|
||||
}
|
||||
return (jlong)func;
|
||||
}
|
||||
|
||||
/* signature of decode_instructions_virtual from hsdis.h */
|
||||
typedef void* (*decode_func)(uintptr_t start_va, uintptr_t end_va,
|
||||
unsigned char* start, uintptr_t length,
|
||||
void* (*event_callback)(void*, const char*, void*),
|
||||
void* event_stream,
|
||||
int (*printf_callback)(void*, const char*, ...),
|
||||
void* printf_stream,
|
||||
const char* options);
|
||||
|
||||
/* container for call back state when decoding instructions */
|
||||
typedef struct {
|
||||
JNIEnv* env;
|
||||
jobject dis;
|
||||
jobject visitor;
|
||||
jmethodID handle_event;
|
||||
jmethodID raw_print;
|
||||
char buffer[4096];
|
||||
} decode_env;
|
||||
|
||||
|
||||
/* event callback binding to Disassembler.handleEvent */
|
||||
static void* event_to_env(void* env_pv, const char* event, void* arg) {
|
||||
decode_env* denv = (decode_env*)env_pv;
|
||||
JNIEnv* env = denv->env;
|
||||
jstring event_string = (*env)->NewStringUTF(env, event);
|
||||
jlong result = (*env)->CallLongMethod(env, denv->dis, denv->handle_event, denv->visitor,
|
||||
event_string, (jlong) (uintptr_t)arg);
|
||||
/* ignore exceptions for now */
|
||||
CHECK_EXCEPTION_CLEAR_((void *)0);
|
||||
return (void*)(uintptr_t)result;
|
||||
}
|
||||
|
||||
/* printing callback binding to Disassembler.rawPrint */
|
||||
static int printf_to_env(void* env_pv, const char* format, ...) {
|
||||
jstring output;
|
||||
va_list ap;
|
||||
int cnt;
|
||||
decode_env* denv = (decode_env*)env_pv;
|
||||
JNIEnv* env = denv->env;
|
||||
size_t flen = strlen(format);
|
||||
const char* raw = NULL;
|
||||
|
||||
if (flen == 0) return 0;
|
||||
if (flen < 2 ||
|
||||
strchr(format, '%') == NULL) {
|
||||
raw = format;
|
||||
} else if (format[0] == '%' && format[1] == '%' &&
|
||||
strchr(format+2, '%') == NULL) {
|
||||
// happens a lot on machines with names like %foo
|
||||
flen--;
|
||||
raw = format+1;
|
||||
}
|
||||
if (raw != NULL) {
|
||||
jstring output = (*env)->NewStringUTF(env, raw);
|
||||
(*env)->CallVoidMethod(env, denv->dis, denv->raw_print, denv->visitor, output);
|
||||
CHECK_EXCEPTION_CLEAR;
|
||||
return (int) flen;
|
||||
}
|
||||
va_start(ap, format);
|
||||
cnt = vsnprintf(denv->buffer, sizeof(denv->buffer), format, ap);
|
||||
va_end(ap);
|
||||
|
||||
output = (*env)->NewStringUTF(env, denv->buffer);
|
||||
(*env)->CallVoidMethod(env, denv->dis, denv->raw_print, denv->visitor, output);
|
||||
CHECK_EXCEPTION_CLEAR;
|
||||
return cnt;
|
||||
}
|
||||
|
||||
/*
|
||||
* Class: sun_jvm_hotspot_asm_Disassembler
|
||||
* Method: decode
|
||||
* Signature: (Lsun/jvm/hotspot/asm/InstructionVisitor;J[BLjava/lang/String;J)V
|
||||
*/
|
||||
JNIEXPORT void JNICALL Java_sun_jvm_hotspot_asm_Disassembler_decode(JNIEnv * env,
|
||||
jobject dis,
|
||||
jobject visitor,
|
||||
jlong startPc,
|
||||
jbyteArray code,
|
||||
jstring options_s,
|
||||
jlong decode_instructions_virtual) {
|
||||
jboolean isCopy;
|
||||
jbyte* start = (*env)->GetByteArrayElements(env, code, &isCopy);
|
||||
jbyte* end = start + (*env)->GetArrayLength(env, code);
|
||||
const char * options = (*env)->GetStringUTFChars(env, options_s, &isCopy);
|
||||
jclass disclass = (*env)->GetObjectClass(env, dis);
|
||||
|
||||
decode_env denv;
|
||||
denv.env = env;
|
||||
denv.dis = dis;
|
||||
denv.visitor = visitor;
|
||||
|
||||
/* find Disassembler.handleEvent callback */
|
||||
denv.handle_event = (*env)->GetMethodID(env, disclass, "handleEvent",
|
||||
"(Lsun/jvm/hotspot/asm/InstructionVisitor;Ljava/lang/String;J)J");
|
||||
CHECK_EXCEPTION_CLEAR_VOID
|
||||
|
||||
/* find Disassembler.rawPrint callback */
|
||||
denv.raw_print = (*env)->GetMethodID(env, disclass, "rawPrint",
|
||||
"(Lsun/jvm/hotspot/asm/InstructionVisitor;Ljava/lang/String;)V");
|
||||
CHECK_EXCEPTION_CLEAR_VOID
|
||||
|
||||
/* decode the buffer */
|
||||
(*(decode_func)(uintptr_t)decode_instructions_virtual)(startPc,
|
||||
startPc + end - start,
|
||||
(unsigned char*)start,
|
||||
end - start,
|
||||
&event_to_env, (void*) &denv,
|
||||
&printf_to_env, (void*) &denv,
|
||||
options);
|
||||
|
||||
/* cleanup */
|
||||
(*env)->ReleaseByteArrayElements(env, code, start, JNI_ABORT);
|
||||
(*env)->ReleaseStringUTFChars(env, options_s, options);
|
||||
}
|
||||
|
||||
@@ -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
|
||||
@@ -210,7 +210,6 @@ static map_info* core_lookup(struct ps_prochandle *ph, uintptr_t addr)
|
||||
// mapped. This structure gets written to a file. It is not a class,
|
||||
// so that the compilers don't add any compiler-private data to it.
|
||||
|
||||
// Refer to CompactingPermGenGen::n_regions in compactingPermGenGen.hpp
|
||||
#define NUM_SHARED_MAPS 4
|
||||
|
||||
// Refer to FileMapInfo::_current_version in filemap.hpp
|
||||
@@ -234,7 +233,7 @@ struct FileMapHeader {
|
||||
char _read_only; // read only space?
|
||||
char _allow_exec; // executable code in space?
|
||||
|
||||
} _space[NUM_SHARED_MAPS]; // was _space[CompactingPermGenGen::n_regions];
|
||||
} _space[NUM_SHARED_MAPS];
|
||||
|
||||
// Ignore the rest of the FileMapHeader. We don't need those fields here.
|
||||
};
|
||||
|
||||
@@ -36,25 +36,33 @@ SOURCES = salibelf.c \
|
||||
|
||||
INCLUDES = -I${JAVA_HOME}/include -I${JAVA_HOME}/include/linux
|
||||
|
||||
OBJS = $(SOURCES:.c=.o)
|
||||
OBJS = $(SOURCES:%.c=$(ARCH)/%.o) $(ARCH)/sadis.o
|
||||
|
||||
LIBS = -lthread_db
|
||||
|
||||
CFLAGS = -c -fPIC -g -D_GNU_SOURCE -D$(ARCH) $(INCLUDES) -D_FILE_OFFSET_BITS=64
|
||||
CFLAGS = -c -fPIC -g -D_GNU_SOURCE -D$(ARCH) $(INCLUDES) -I$(ARCH)
|
||||
|
||||
LIBSA = $(ARCH)/libsaproc.so
|
||||
|
||||
all: $(LIBSA)
|
||||
|
||||
LinuxDebuggerLocal.o: LinuxDebuggerLocal.c
|
||||
$(JAVAH) -jni -classpath ../../../build/classes \
|
||||
$(ARCH):
|
||||
mkdir $(ARCH)
|
||||
|
||||
$(ARCH)/LinuxDebuggerLocal.o: LinuxDebuggerLocal.c
|
||||
$(JAVAH) -jni -classpath ../../../build/classes -d $(ARCH) \
|
||||
sun.jvm.hotspot.debugger.x86.X86ThreadContext \
|
||||
sun.jvm.hotspot.debugger.sparc.SPARCThreadContext \
|
||||
sun.jvm.hotspot.debugger.amd64.AMD64ThreadContext
|
||||
$(GCC) $(CFLAGS) $<
|
||||
$(GCC) $(CFLAGS) $< -o $@
|
||||
|
||||
.c.obj:
|
||||
$(GCC) $(CFLAGS)
|
||||
$(ARCH)/sadis.o: ../../share/native/sadis.c
|
||||
$(JAVAH) -jni -classpath ../../../build/classes -d $(ARCH) \
|
||||
sun.jvm.hotspot.asm.Disassembler
|
||||
$(GCC) $(CFLAGS) $< -o $@
|
||||
|
||||
$(ARCH)/%.o: %.c
|
||||
$(GCC) $(CFLAGS) $< -o $@
|
||||
|
||||
ifndef LDNOMAP
|
||||
LFLAGS_LIBSA = -Xlinker --version-script=mapfile
|
||||
@@ -68,9 +76,8 @@ ifneq ($(_HAS_HASH_STYLE_GNU),)
|
||||
endif
|
||||
LFLAGS_LIBSA += $(LDFLAGS_HASH_STYLE)
|
||||
|
||||
$(LIBSA): $(OBJS) mapfile
|
||||
if [ ! -d $(ARCH) ] ; then mkdir $(ARCH) ; fi
|
||||
$(GCC) -shared $(LFLAGS_LIBSA) -o $(LIBSA) $(OBJS) $(LIBS)
|
||||
$(LIBSA): $(ARCH) $(OBJS) mapfile
|
||||
$(GCC) -shared $(LFLAGS_LIBSA) -o $(LIBSA) $(OBJS) $(LIBS)
|
||||
|
||||
test.o: test.c
|
||||
$(GCC) -c -o test.o -g -D_GNU_SOURCE -D$(ARCH) $(INCLUDES) test.c
|
||||
@@ -79,7 +86,4 @@ test: test.o
|
||||
$(GCC) -o test test.o -L$(ARCH) -lsaproc $(LIBS)
|
||||
|
||||
clean:
|
||||
rm -rf $(LIBSA)
|
||||
rm -rf $(OBJS)
|
||||
rmdir $(ARCH)
|
||||
|
||||
rm -fr $(ARCH)
|
||||
|
||||
@@ -1,7 +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
|
||||
@@ -22,7 +20,6 @@
|
||||
# or visit www.oracle.com if you need additional information or have any
|
||||
# questions.
|
||||
#
|
||||
#
|
||||
|
||||
# Define public interface.
|
||||
|
||||
@@ -40,6 +37,10 @@ SUNWprivate_1.1 {
|
||||
Java_sun_jvm_hotspot_debugger_linux_LinuxDebuggerLocal_readBytesFromProcess0;
|
||||
Java_sun_jvm_hotspot_debugger_linux_LinuxDebuggerLocal_getThreadIntegerRegisterSet0;
|
||||
|
||||
# Disassembler interface
|
||||
Java_sun_jvm_hotspot_asm_Disassembler_decode;
|
||||
Java_sun_jvm_hotspot_asm_Disassembler_load_1library;
|
||||
|
||||
# proc_service.h functions - to be used by libthread_db
|
||||
ps_getpid;
|
||||
ps_pglobal_lookup;
|
||||
|
||||
@@ -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
|
||||
@@ -209,7 +209,6 @@ static map_info* core_lookup(struct ps_prochandle *ph, uintptr_t addr)
|
||||
// mapped. This structure gets written to a file. It is not a class,
|
||||
// so that the compilers don't add any compiler-private data to it.
|
||||
|
||||
// Refer to CompactingPermGenGen::n_regions in compactingPermGenGen.hpp
|
||||
#define NUM_SHARED_MAPS 4
|
||||
|
||||
// Refer to FileMapInfo::_current_version in filemap.hpp
|
||||
@@ -233,7 +232,7 @@ struct FileMapHeader {
|
||||
char _read_only; // read only space?
|
||||
char _allow_exec; // executable code in space?
|
||||
|
||||
} _space[NUM_SHARED_MAPS]; // was _space[CompactingPermGenGen::n_regions];
|
||||
} _space[NUM_SHARED_MAPS];
|
||||
|
||||
// Ignore the rest of the FileMapHeader. We don't need those fields here.
|
||||
};
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
#
|
||||
# Copyright (c) 2002, 2009, 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
|
||||
@@ -27,7 +27,7 @@
|
||||
# sparcv9: Build the 64 bit sparcv9 version in ./sparcv9
|
||||
# i386: Build the 32 bit i386 version in ./i386
|
||||
|
||||
.PHONY: sparc sparcv9 i386
|
||||
.PHONY: sparc sparcv9 i386 amd64
|
||||
|
||||
ARCH_ORIG = $(shell uname -p)
|
||||
|
||||
@@ -36,6 +36,8 @@ RM := /usr/bin/rm
|
||||
MKDIRS := /usr/bin/mkdir -p
|
||||
|
||||
CLASSES_DIR = ../../../../build/classes
|
||||
SAPROC_INCLUDES=-I${JAVA_HOME}/include -I${JAVA_HOME}/include/solaris
|
||||
SADIS=../../../share/native/sadis.c
|
||||
|
||||
ifeq "$(ARCH_ORIG)" "i386"
|
||||
ALL_TARGET = i386 $(filter amd64,$(shell isalist))
|
||||
@@ -43,6 +45,11 @@ else
|
||||
ALL_TARGET = sparc sparcv9
|
||||
endif
|
||||
|
||||
CFLAGS/i386 =
|
||||
CFLAGS/amd64 = -xarch=amd64
|
||||
CFLAGS/sparc = -xarch=v8
|
||||
CFLAGS/sparv9 = -xarch=v9
|
||||
|
||||
all:: $(ALL_TARGET)
|
||||
|
||||
javahomecheck::
|
||||
@@ -51,34 +58,13 @@ javahomecheck::
|
||||
exit 1 ; \
|
||||
fi
|
||||
|
||||
i386:: javahomecheck
|
||||
i386 amd64 sparc sparcv9:: javahomecheck
|
||||
$(MKDIRS) $@
|
||||
@javah -classpath $(CLASSES_DIR) -jni sun.jvm.hotspot.debugger.proc.ProcDebuggerLocal
|
||||
CC -G -KPIC -I${JAVA_HOME}/include -I${JAVA_HOME}/include/solaris saproc.cpp \
|
||||
-M mapfile -o $@/libsaproc.so -ldemangle
|
||||
CC -o $@/libsaproc_audit.so -G -Kpic -z defs saproc_audit.cpp -lmapmalloc -ldl -lc
|
||||
|
||||
amd64:: javahomecheck
|
||||
$(MKDIRS) $@
|
||||
@javah -classpath $(CLASSES_DIR) -jni sun.jvm.hotspot.debugger.proc.ProcDebuggerLocal
|
||||
CC -G -KPIC -xarch=amd64 -I${JAVA_HOME}/include -I${JAVA_HOME}/include/solaris saproc.cpp \
|
||||
-M mapfile -o $@/libsaproc.so -ldemangle
|
||||
CC -xarch=amd64 -o $@/libsaproc_audit.so -G -Kpic -z defs saproc_audit.cpp -lmapmalloc -ldl -lc
|
||||
|
||||
sparc:: javahomecheck
|
||||
$(MKDIRS) $@
|
||||
@javah -classpath $(CLASSES_DIR) -jni sun.jvm.hotspot.debugger.proc.ProcDebuggerLocal
|
||||
CC -G -KPIC -xarch=v8 -I${JAVA_HOME}/include -I${JAVA_HOME}/include/solaris saproc.cpp \
|
||||
-M mapfile -o $@/libsaproc.so -ldemangle
|
||||
CC -xarch=v8 -o $@/libsaproc_audit.so -G -Kpic -z defs saproc_audit.cpp -lmapmalloc -ldl -lc
|
||||
|
||||
sparcv9:: javahomecheck
|
||||
$(MKDIRS) $@
|
||||
@javah -classpath $(CLASSES_DIR) -jni sun.jvm.hotspot.debugger.proc.ProcDebuggerLocal
|
||||
CC -G -KPIC -xarch=v9 -I${JAVA_HOME}/include -I${JAVA_HOME}/include/solaris saproc.cpp \
|
||||
-M mapfile -o $@/libsaproc.so -ldemangle
|
||||
CC -xarch=v9 -o $@/libsaproc_audit.so -G -Kpic -z defs saproc_audit.cpp -lmapmalloc -ldl -lc
|
||||
@$(JAVA_HOME)/bin/javah -classpath $(CLASSES_DIR) -d $@ -jni sun.jvm.hotspot.asm.Disassembler sun.jvm.hotspot.debugger.proc.ProcDebuggerLocal
|
||||
CC $(CFLAGS/$@) -c -g -Kpic ${SAPROC_INCLUDES} -I$@ saproc.cpp -o $@/saproc.o
|
||||
cc $(CFLAGS/$@) -c -g -Kpic ${SAPROC_INCLUDES} -I$@ $(SADIS) -o $@/sadis.o
|
||||
CC $(CFLAGS/$@) -g -G -Kpic $@/saproc.o $@/sadis.o -M mapfile -o $@/libsaproc.so -ldemangle
|
||||
CC $(CFLAGS/$@) -o $@/libsaproc_audit.so -G -Kpic -z defs saproc_audit.cpp -lmapmalloc -ldl -lc
|
||||
|
||||
clean::
|
||||
$(RM) -rf sun_jvm_hotspot_debugger_proc_ProcDebuggerLocal.h
|
||||
$(RM) -rf sparc sparcv9 i386
|
||||
$(RM) -rf sparc sparcv9 i386 amd64
|
||||
|
||||
@@ -1,7 +1,5 @@
|
||||
#
|
||||
|
||||
#
|
||||
# Copyright (c) 2003, 2009, 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
|
||||
@@ -22,10 +20,8 @@
|
||||
# or visit www.oracle.com if you need additional information or have any
|
||||
# questions.
|
||||
#
|
||||
#
|
||||
|
||||
# Define public interface.
|
||||
|
||||
SUNWprivate_1.1 {
|
||||
global:
|
||||
Java_sun_jvm_hotspot_debugger_proc_ProcDebuggerLocal_attach0__Ljava_lang_String_2;
|
||||
@@ -47,6 +43,9 @@ SUNWprivate_1.1 {
|
||||
Java_sun_jvm_hotspot_debugger_proc_ProcDebuggerLocal_writeBytesToProcess0;
|
||||
# this is needed by saproc_audit.c to redirect opens in libproc.so
|
||||
libsaproc_open;
|
||||
local:
|
||||
# Disassembler interface
|
||||
Java_sun_jvm_hotspot_asm_Disassembler_decode;
|
||||
Java_sun_jvm_hotspot_asm_Disassembler_load_1library;
|
||||
local:
|
||||
*;
|
||||
};
|
||||
|
||||
@@ -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
|
||||
@@ -510,7 +510,6 @@ wrapper_fill_cframe_list(void *cd, const prgregset_t regs, uint_t argc,
|
||||
// mapped. This structure gets written to a file. It is not a class, so
|
||||
// that the compilers don't add any compiler-private data to it.
|
||||
|
||||
// Refer to CompactingPermGenGen::n_regions in compactingPermGenGen.hpp
|
||||
const int NUM_SHARED_MAPS = 4;
|
||||
|
||||
// Refer to FileMapInfo::_current_version in filemap.hpp
|
||||
@@ -531,7 +530,7 @@ struct FileMapHeader {
|
||||
bool _read_only; // read only space?
|
||||
bool _allow_exec; // executable code in space?
|
||||
|
||||
} _space[NUM_SHARED_MAPS]; // was _space[CompactingPermGenGen::n_regions];
|
||||
} _space[NUM_SHARED_MAPS];
|
||||
|
||||
// Ignore the rest of the FileMapHeader. We don't need those fields here.
|
||||
};
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
#
|
||||
# Copyright (c) 2002, 2005, 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
|
||||
@@ -35,6 +35,8 @@ WINDBG_LIB32=$(WINDBG_HOME)/sdk/lib/i386
|
||||
WINDBG_LIB_IA64=$(WINDBG_HOME)/sdk/lib/ia64
|
||||
WINDBG_LIB_AMD64=$(WINDBG_HOME)/sdk/lib/amd64
|
||||
|
||||
SADIS=../../../share/native/sadis.c
|
||||
|
||||
# These do not need to be optimized (don't run a lot of code) and it
|
||||
# will be useful to have the assertion checks in place
|
||||
|
||||
@@ -57,23 +59,29 @@ ia64: ia64/$(SAWINDBGDLL)
|
||||
|
||||
amd64: amd64/$(SAWINDBGDLL)
|
||||
|
||||
i386/$(SAWINDBGDLL) : sawindbg.cpp
|
||||
i386/$(SAWINDBGDLL) : sawindbg.cpp $(SADIS)
|
||||
@ mkdir -p i386
|
||||
@ $(JAVAH) -jni -classpath ../../../../build/classes sun.jvm.hotspot.debugger.windbg.WindbgDebuggerLocal sun.jvm.hotspot.debugger.x86.X86ThreadContext
|
||||
@ $(JAVAH) -jni -classpath ../../../../build/classes sun.jvm.hotspot.debugger.windbg.WindbgDebuggerLocal sun.jvm.hotspot.debugger.x86.X86ThreadContext
|
||||
@ $(JAVAH) -jni -classpath ../../../../build/classes sun.jvm.hotspot.asm.Disassembler
|
||||
@ $(CPP32) /I$(JAVA_HOME)/include /I$(JAVA_HOME)/include/win32 /I$(WINDBG_INCLUDE) $(CFLAGS32) /Fp"i386/sawindbg.pch" /Fo"i386/" /Fd"i386/" /c sawindbg.cpp
|
||||
$(LINK32) /out:$@ /DLL i386/sawindbg.obj $(LIBS32)
|
||||
@ $(CPP32) /I$(JAVA_HOME)/include /I$(JAVA_HOME)/include/win32 /I$(WINDBG_INCLUDE) $(CFLAGS32) /Fp"i386/sadis.pch" /Fo"i386/" /Fd"i386/" /c $(SADIS)
|
||||
$(LINK32) /out:$@ /DLL i386/sawindbg.obj i386/sadis.obj $(LIBS32)
|
||||
|
||||
ia64/$(SAWINDBGDLL) : sawindbg.cpp
|
||||
ia64/$(SAWINDBGDLL) : sawindbg.cpp $(SADIS)
|
||||
@ mkdir -p ia64
|
||||
@ $(JAVAH) -jni -classpath ../../../../build/classes sun.jvm.hotspot.debugger.windbg.WindbgDebuggerLocal sun.jvm.hotspot.debugger.ia64.IA64ThreadContext
|
||||
@ $(JAVAH) -jni -classpath ../../../../build/classes sun.jvm.hotspot.asm.Disassembler
|
||||
@ $(CPP64) /I$(JAVA_HOME)/include /I$(JAVA_HOME)/include/win32 /I$(WINDBG_INCLUDE) $(CFLAGS64) /Fp"ia64/sawindbg.pch" /Fo"ia64/" /Fd"ia64/" /c sawindbg.cpp
|
||||
$(LINK64) /out:$@ /DLL ia64/sawindbg.obj $(LIBS_IA64)
|
||||
@ $(CPP64) /I$(JAVA_HOME)/include /I$(JAVA_HOME)/include/win32 /I$(WINDBG_INCLUDE) $(CFLAGS64) /Fp"ia64/sadis.pch" /Fo"ia64/" /Fd"ia64/" /c $(SADIS)
|
||||
$(LINK64) /out:$@ /DLL ia64/sawindbg.obj ia64/sadis.obj $(LIBS_IA64)
|
||||
|
||||
amd64/$(SAWINDBGDLL) : sawindbg.cpp
|
||||
amd64/$(SAWINDBGDLL) : sawindbg.cpp $(SADIS)
|
||||
@ mkdir -p amd64
|
||||
@ $(JAVAH) -jni -classpath ../../../../build/classes sun.jvm.hotspot.debugger.windbg.WindbgDebuggerLocal sun.jvm.hotspot.debugger.amd64.AMD64ThreadContext
|
||||
@ $(JAVAH) -jni -classpath ../../../../build/classes sun.jvm.hotspot.asm.Disassembler
|
||||
@ $(CPP64) /I$(JAVA_HOME)/include /I$(JAVA_HOME)/include/win32 /I$(WINDBG_INCLUDE) $(CFLAGS64) /Fp"amd64/sawindbg.pch" /Fo"amd64/" /Fd"amd64/" /c sawindbg.cpp
|
||||
$(LINK64) /out:$@ /DLL amd64/sawindbg.obj $(LIBS_AMD64)
|
||||
@ $(CPP64) /I$(JAVA_HOME)/include /I$(JAVA_HOME)/include/win32 /I$(WINDBG_INCLUDE) $(CFLAGS64) /Fp"amd64/sadis.pch" /Fo"amd64/" /Fd"amd64/" /c $(SADIS)
|
||||
$(LINK64) /out:$@ /DLL amd64/sawindbg.obj amd64/sadis.obj $(LIBS_AMD64)
|
||||
|
||||
clean:
|
||||
rm *.h
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2005, 2011, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2005, 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
|
||||
@@ -42,6 +42,7 @@ import sun.jvm.hotspot.memory.*;
|
||||
import sun.jvm.hotspot.oops.*;
|
||||
import sun.jvm.hotspot.opto.*;
|
||||
import sun.jvm.hotspot.ci.*;
|
||||
import sun.jvm.hotspot.asm.*;
|
||||
import sun.jvm.hotspot.runtime.*;
|
||||
import sun.jvm.hotspot.utilities.*;
|
||||
import sun.jvm.hotspot.utilities.soql.*;
|
||||
@@ -564,6 +565,71 @@ public class CommandProcessor {
|
||||
}
|
||||
}
|
||||
},
|
||||
// decode raw address
|
||||
new Command("dis", "dis address [length]", false) {
|
||||
public void doit(Tokens t) {
|
||||
int tokens = t.countTokens();
|
||||
if (tokens != 1 && tokens != 2) {
|
||||
usage();
|
||||
return;
|
||||
}
|
||||
String name = t.nextToken();
|
||||
Address addr = null;
|
||||
int len = 0x10; // default length
|
||||
try {
|
||||
addr = VM.getVM().getDebugger().parseAddress(name);
|
||||
} catch (NumberFormatException e) {
|
||||
out.println(e);
|
||||
return;
|
||||
}
|
||||
if (tokens == 2) {
|
||||
try {
|
||||
len = Integer.parseInt(t.nextToken());
|
||||
} catch (NumberFormatException e) {
|
||||
out.println(e);
|
||||
return;
|
||||
}
|
||||
}
|
||||
HTMLGenerator generator = new HTMLGenerator(false);
|
||||
out.println(generator.genHTMLForRawDisassembly(addr, len));
|
||||
}
|
||||
|
||||
},
|
||||
// decode codeblob or nmethod
|
||||
new Command("disassemble", "disassemble address", false) {
|
||||
public void doit(Tokens t) {
|
||||
int tokens = t.countTokens();
|
||||
if (tokens != 1) {
|
||||
usage();
|
||||
return;
|
||||
}
|
||||
String name = t.nextToken();
|
||||
Address addr = null;
|
||||
try {
|
||||
addr = VM.getVM().getDebugger().parseAddress(name);
|
||||
} catch (NumberFormatException e) {
|
||||
out.println(e);
|
||||
return;
|
||||
}
|
||||
|
||||
HTMLGenerator generator = new HTMLGenerator(false);
|
||||
out.println(generator.genHTML(addr));
|
||||
}
|
||||
},
|
||||
// print Java bytecode disassembly
|
||||
new Command("jdis", "jdis address", false) {
|
||||
public void doit(Tokens t) {
|
||||
int tokens = t.countTokens();
|
||||
if (tokens != 1) {
|
||||
usage();
|
||||
return;
|
||||
}
|
||||
Address a = VM.getVM().getDebugger().parseAddress(t.nextToken());
|
||||
Method m = (Method)Metadata.instantiateWrapperFor(a);
|
||||
HTMLGenerator html = new HTMLGenerator(false);
|
||||
out.println(html.genHTML(m));
|
||||
}
|
||||
},
|
||||
new Command("revptrs", "revptrs address", false) {
|
||||
public void doit(Tokens t) {
|
||||
int tokens = t.countTokens();
|
||||
@@ -634,29 +700,57 @@ public class CommandProcessor {
|
||||
} else {
|
||||
String s = t.nextToken();
|
||||
if (s.equals("-a")) {
|
||||
HeapVisitor iterator = new DefaultHeapVisitor() {
|
||||
public boolean doObj(Oop obj) {
|
||||
if (obj instanceof MethodData) {
|
||||
Method m = ((MethodData)obj).getMethod();
|
||||
out.println("MethodData " + obj.getHandle() + " for " +
|
||||
SystemDictionary sysDict = VM.getVM().getSystemDictionary();
|
||||
sysDict.allClassesDo(new SystemDictionary.ClassVisitor() {
|
||||
public void visit(Klass k) {
|
||||
if (k instanceof InstanceKlass) {
|
||||
MethodArray methods = ((InstanceKlass)k).getMethods();
|
||||
for (int i = 0; i < methods.length(); i++) {
|
||||
Method m = methods.at(i);
|
||||
MethodData mdo = m.getMethodData();
|
||||
if (mdo != null) {
|
||||
out.println("MethodData " + mdo.getAddress() + " for " +
|
||||
"method " + m.getMethodHolder().getName().asString() + "." +
|
||||
m.getName().asString() +
|
||||
m.getSignature().asString() + "@" + m.getHandle());
|
||||
((MethodData)obj).printDataOn(out);
|
||||
m.getSignature().asString() + "@" + m.getAddress());
|
||||
mdo.printDataOn(out);
|
||||
}
|
||||
return false;
|
||||
}
|
||||
};
|
||||
VM.getVM().getObjectHeap().iteratePerm(iterator);
|
||||
}
|
||||
}
|
||||
}
|
||||
);
|
||||
} else {
|
||||
Address a = VM.getVM().getDebugger().parseAddress(s);
|
||||
OopHandle handle = a.addOffsetToAsOopHandle(0);
|
||||
MethodData mdo = (MethodData)VM.getVM().getObjectHeap().newOop(handle);
|
||||
MethodData mdo = (MethodData) Metadata.instantiateWrapperFor(a);
|
||||
mdo.printDataOn(out);
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
new Command("printall", "printall", false) {
|
||||
// Print every MDO in the heap or the one referenced by expression.
|
||||
public void doit(Tokens t) {
|
||||
if (t.countTokens() != 0) {
|
||||
usage();
|
||||
} else {
|
||||
SystemDictionary sysDict = VM.getVM().getSystemDictionary();
|
||||
sysDict.allClassesDo(new SystemDictionary.ClassVisitor() {
|
||||
public void visit(Klass k) {
|
||||
if (k instanceof InstanceKlass && ((InstanceKlass)k).getConstants().getCache() != null) {
|
||||
MethodArray methods = ((InstanceKlass)k).getMethods();
|
||||
for (int i = 0; i < methods.length(); i++) {
|
||||
Method m = methods.at(i);
|
||||
HTMLGenerator gen = new HTMLGenerator(false);
|
||||
out.println(gen.genHTML(m));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
);
|
||||
}
|
||||
}
|
||||
},
|
||||
new Command("dumpideal", "dumpideal { -a | id }", false) {
|
||||
// Do a full dump of the nodes reachabile from root in each compiler thread.
|
||||
public void doit(Tokens t) {
|
||||
@@ -1229,7 +1323,7 @@ public class CommandProcessor {
|
||||
}
|
||||
};
|
||||
VM.getVM().getObjectHeap().iterateRaw(iterator);
|
||||
} else if (type.equals("heap") || type.equals("perm")) {
|
||||
} else if (type.equals("heap")) {
|
||||
HeapVisitor iterator = new DefaultHeapVisitor() {
|
||||
public boolean doObj(Oop obj) {
|
||||
int index = 0;
|
||||
@@ -1246,11 +1340,7 @@ public class CommandProcessor {
|
||||
return false;
|
||||
}
|
||||
};
|
||||
if (type.equals("heap")) {
|
||||
VM.getVM().getObjectHeap().iterate(iterator);
|
||||
} else {
|
||||
VM.getVM().getObjectHeap().iteratePerm(iterator);
|
||||
}
|
||||
} else if (type.equals("codecache")) {
|
||||
CodeCacheVisitor v = new CodeCacheVisitor() {
|
||||
public void prologue(Address start, Address end) {
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2000, 2010, 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
|
||||
@@ -998,7 +998,7 @@ public class HSDB implements ObjectHistogramPanel.Listener, SAListener {
|
||||
curFrame.addressOfInterpreterFrameLocal((int) interpreterFrameMethod.getMaxLocals() + offset),
|
||||
"Interpreter locals area for frame with SP = " + curFrame.getSP()));
|
||||
}
|
||||
String methodAnno = "Interpreter frame methodOop";
|
||||
String methodAnno = "Interpreter frame Method*";
|
||||
if (interpreterFrameMethod == null) {
|
||||
methodAnno += " (BAD OOP)";
|
||||
}
|
||||
@@ -1054,13 +1054,6 @@ public class HSDB implements ObjectHistogramPanel.Listener, SAListener {
|
||||
}
|
||||
}
|
||||
|
||||
if (bad) {
|
||||
// Try perm gen
|
||||
if (heap.permGen().isIn(handle)) {
|
||||
anno = "PermGen ";
|
||||
bad = false;
|
||||
}
|
||||
}
|
||||
} else if (collHeap instanceof ParallelScavengeHeap) {
|
||||
ParallelScavengeHeap heap = (ParallelScavengeHeap) collHeap;
|
||||
if (heap.youngGen().isIn(handle)) {
|
||||
@@ -1069,9 +1062,6 @@ public class HSDB implements ObjectHistogramPanel.Listener, SAListener {
|
||||
} else if (heap.oldGen().isIn(handle)) {
|
||||
anno = "PSOldGen ";
|
||||
bad = false;
|
||||
} else if (heap.permGen().isIn(handle)) {
|
||||
anno = "PSPermGen ";
|
||||
bad = false;
|
||||
}
|
||||
} else {
|
||||
// Optimistically assume the oop isn't bad
|
||||
|
||||
@@ -43,10 +43,6 @@ import sun.jvm.hotspot.utilities.*;
|
||||
* highest-level factory for VM data structures. It makes it simple
|
||||
* to start up the debugging system. </P>
|
||||
*
|
||||
* <P> FIXME: need to add a way to configure the paths to dbx and the
|
||||
* DSO from the outside. However, this should work for now for
|
||||
* internal use. </P>
|
||||
*
|
||||
* <P> FIXME: especially with the addition of remote debugging, this
|
||||
* has turned into a mess; needs rethinking. </P>
|
||||
*/
|
||||
@@ -87,30 +83,7 @@ public class HotSpotAgent {
|
||||
|
||||
private String[] jvmLibNames;
|
||||
|
||||
// FIXME: make these configurable, i.e., via a dotfile; also
|
||||
// consider searching within the JDK from which this Java executable
|
||||
// comes to find them
|
||||
private static final String defaultDbxPathPrefix = "/net/jano.sfbay/export/disk05/hotspot/sa";
|
||||
private static final String defaultDbxSvcAgentDSOPathPrefix = "/net/jano.sfbay/export/disk05/hotspot/sa";
|
||||
|
||||
static void showUsage() {
|
||||
System.out.println(" You can also pass these -D options to java to specify where to find dbx and the \n" +
|
||||
" Serviceability Agent plugin for dbx:");
|
||||
System.out.println(" -DdbxPathName=<path-to-dbx-executable>\n" +
|
||||
" Default is derived from dbxPathPrefix");
|
||||
System.out.println(" or");
|
||||
System.out.println(" -DdbxPathPrefix=<xxx>\n" +
|
||||
" where xxx is the path name of a dir structure that contains:\n" +
|
||||
" <os>/<arch>/bin/dbx\n" +
|
||||
" The default is " + defaultDbxPathPrefix);
|
||||
System.out.println(" and");
|
||||
System.out.println(" -DdbxSvcAgentDSOPathName=<path-to-dbx-serviceability-agent-module>\n" +
|
||||
" Default is determined from dbxSvcAgentDSOPathPrefix");
|
||||
System.out.println(" or");
|
||||
System.out.println(" -DdbxSvcAgentDSOPathPrefix=<xxx>\n" +
|
||||
" where xxx is the pathname of a dir structure that contains:\n" +
|
||||
" <os>/<arch>/bin/lib/libsvc_agent_dbx.so\n" +
|
||||
" The default is " + defaultDbxSvcAgentDSOPathPrefix);
|
||||
}
|
||||
|
||||
public HotSpotAgent() {
|
||||
|
||||
@@ -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
|
||||
@@ -50,6 +50,7 @@ public class HotSpotTypeDataBase extends BasicTypeDataBase {
|
||||
private static final int C_INT8_SIZE = 1;
|
||||
private static final int C_INT32_SIZE = 4;
|
||||
private static final int C_INT64_SIZE = 8;
|
||||
private static int pointerSize = UNINITIALIZED_SIZE;
|
||||
|
||||
private static final boolean DEBUG;
|
||||
static {
|
||||
@@ -185,6 +186,9 @@ public class HotSpotTypeDataBase extends BasicTypeDataBase {
|
||||
long size = entryAddr.getCIntegerAt(typeEntrySizeOffset, C_INT64_SIZE, true);
|
||||
|
||||
createType(typeName, superclassName, isOopType, isIntegerType, isUnsigned, size);
|
||||
if (pointerSize == UNINITIALIZED_SIZE && typeName.equals("void*")) {
|
||||
pointerSize = (int)size;
|
||||
}
|
||||
}
|
||||
|
||||
entryAddr = entryAddr.addOffsetTo(typeEntryArrayStride);
|
||||
@@ -678,7 +682,11 @@ public class HotSpotTypeDataBase extends BasicTypeDataBase {
|
||||
}
|
||||
}
|
||||
result = new BasicPointerType(this, typeName, targetType);
|
||||
result.setSize(UNINITIALIZED_SIZE);
|
||||
if (pointerSize == UNINITIALIZED_SIZE && !typeName.equals("void*")) {
|
||||
// void* must be declared early so that other pointer types can use that to set their size.
|
||||
throw new InternalError("void* type hasn't been seen when parsing " + typeName);
|
||||
}
|
||||
result.setSize(pointerSize);
|
||||
addType(result);
|
||||
return result;
|
||||
}
|
||||
@@ -731,9 +739,11 @@ public class HotSpotTypeDataBase extends BasicTypeDataBase {
|
||||
"had its size redefined (old was " + curType.getSize() + ", new is " + size + ").");
|
||||
}
|
||||
|
||||
if (!typeNameIsPointerType(typeName)) {
|
||||
System.err.println("Warning: the type \"" + typeName + "\" (declared in the remote VM in VMStructs::localHotSpotVMTypes) " +
|
||||
"had its size declared as " + size + " twice. Continuing.");
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
@@ -1,207 +0,0 @@
|
||||
/*
|
||||
* Copyright (c) 2000, 2011, 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;
|
||||
|
||||
import sun.jvm.hotspot.debugger.*;
|
||||
import sun.jvm.hotspot.debugger.proc.*;
|
||||
|
||||
// A test of the debugger backend. This should be used to connect to
|
||||
// the helloWorld.cpp program.
|
||||
|
||||
public class TestDebugger {
|
||||
|
||||
private static void usage() {
|
||||
System.out.println("usage: java TestDebugger [pid]");
|
||||
System.out.println("pid must be the process ID of the helloWorld process");
|
||||
System.exit(1);
|
||||
}
|
||||
|
||||
public static void main(String[] args) {
|
||||
try {
|
||||
if (args.length != 1) {
|
||||
usage();
|
||||
}
|
||||
|
||||
int pid = 0;
|
||||
try {
|
||||
pid = Integer.parseInt(args[0]);
|
||||
}
|
||||
catch (NumberFormatException e) {
|
||||
usage();
|
||||
}
|
||||
|
||||
JVMDebugger debugger = new ProcDebuggerLocal(null, true);
|
||||
|
||||
try {
|
||||
debugger.attach(pid);
|
||||
}
|
||||
catch (DebuggerException e) {
|
||||
System.err.print("Error attaching to process ID " + pid + ": ");
|
||||
if (e.getMessage() != null) {
|
||||
System.err.print(e.getMessage());
|
||||
}
|
||||
System.err.println();
|
||||
System.exit(1);
|
||||
}
|
||||
|
||||
// HACK: configure debugger with primitive type sizes to get
|
||||
// Java types going
|
||||
debugger.configureJavaPrimitiveTypeSizes(1, 1, 2, 8, 4, 4, 8, 2);
|
||||
|
||||
// FIXME: figure out how to canonicalize and/or eliminate
|
||||
// loadobject specification
|
||||
String loadObjectName = "-";
|
||||
|
||||
// long strAddr = debugger.lookup("helloWorld", "helloWorldString");
|
||||
Address addr = debugger.lookup(loadObjectName, "helloWorldString");
|
||||
if (addr == null) {
|
||||
System.err.println("Error looking up symbol \"helloWorldString\" in context \"" +
|
||||
loadObjectName + "\"");
|
||||
System.exit(1);
|
||||
}
|
||||
|
||||
// This is a pointer which points to the start of storage.
|
||||
// Dereference it.
|
||||
addr = addr.getAddressAt(0);
|
||||
|
||||
// Read the number of bytes we know we need
|
||||
int helloWorldLen = 13;
|
||||
byte[] data = new byte[helloWorldLen];
|
||||
for (int i = 0; i < helloWorldLen; ++i) {
|
||||
data[i] = (byte) addr.getCIntegerAt(i, 1, false);
|
||||
}
|
||||
|
||||
// Convert to characters
|
||||
char[] chars = new char[data.length];
|
||||
for (int i = 0; i < data.length; ++i) {
|
||||
chars[i] = (char) data[i];
|
||||
}
|
||||
String helloWorldStr = new String(chars);
|
||||
|
||||
System.out.println("Successfully read string \"" + helloWorldStr + "\" from target process\n");
|
||||
|
||||
// Test all Java data types (see helloWorld.cpp)
|
||||
byte expectedByteValue = (byte) 132;
|
||||
short expectedShortValue = (short) 27890;
|
||||
int expectedIntValue = 1020304050;
|
||||
long expectedLongValue = 102030405060708090L;
|
||||
float expectedFloatValue = 35.4F;
|
||||
double expectedDoubleValue = 1.23456789;
|
||||
byte byteValue = 0;
|
||||
short shortValue = 0;
|
||||
int intValue = 0;
|
||||
long longValue = 0;
|
||||
float floatValue = 0;
|
||||
double doubleValue = 0;
|
||||
|
||||
addr = debugger.lookup(loadObjectName, "testByte");
|
||||
if (addr == null) {
|
||||
System.err.println("Error looking up symbol \"testByte\" in context \"" +
|
||||
loadObjectName + "\"");
|
||||
System.exit(1);
|
||||
}
|
||||
byteValue = addr.getJByteAt(0);
|
||||
if (byteValue != expectedByteValue) {
|
||||
System.err.println("Error: unexpected byte value (got " +
|
||||
byteValue + ", expected " + expectedByteValue + ")");
|
||||
System.exit(1);
|
||||
}
|
||||
|
||||
addr = debugger.lookup(loadObjectName, "testShort");
|
||||
if (addr == null) {
|
||||
System.err.println("Error looking up symbol \"testShort\" in context \"" +
|
||||
loadObjectName + "\"");
|
||||
System.exit(1);
|
||||
}
|
||||
shortValue = addr.getJShortAt(0);
|
||||
if (shortValue != expectedShortValue) {
|
||||
System.err.println("Error: unexpected short value (got " +
|
||||
shortValue + ", expected " + expectedShortValue + ")");
|
||||
System.exit(1);
|
||||
}
|
||||
|
||||
addr = debugger.lookup(loadObjectName, "testInt");
|
||||
if (addr == null) {
|
||||
System.err.println("Error looking up symbol \"testInt\" in context \"" +
|
||||
loadObjectName + "\"");
|
||||
System.exit(1);
|
||||
}
|
||||
intValue = addr.getJIntAt(0);
|
||||
if (intValue != expectedIntValue) {
|
||||
System.err.println("Error: unexpected int value (got " +
|
||||
intValue + ", expected " + expectedIntValue + ")");
|
||||
System.exit(1);
|
||||
}
|
||||
|
||||
addr = debugger.lookup(loadObjectName, "testLong");
|
||||
if (addr == null) {
|
||||
System.err.println("Error looking up symbol \"testLong\" in context \"" +
|
||||
loadObjectName + "\"");
|
||||
System.exit(1);
|
||||
}
|
||||
longValue = addr.getJLongAt(0);
|
||||
if (longValue != expectedLongValue) {
|
||||
System.err.println("Error: unexpected long value (got " +
|
||||
longValue + ", expected " + expectedLongValue + ")");
|
||||
System.exit(1);
|
||||
}
|
||||
|
||||
addr = debugger.lookup(loadObjectName, "testFloat");
|
||||
if (addr == null) {
|
||||
System.err.println("Error looking up symbol \"testFloat\" in context \"" +
|
||||
loadObjectName + "\"");
|
||||
System.exit(1);
|
||||
}
|
||||
floatValue = addr.getJFloatAt(0);
|
||||
if (floatValue != expectedFloatValue) {
|
||||
System.err.println("Error: unexpected float value (got " +
|
||||
floatValue + ", expected " + expectedFloatValue + ")");
|
||||
System.exit(1);
|
||||
}
|
||||
|
||||
addr = debugger.lookup(loadObjectName, "testDouble");
|
||||
if (addr == null) {
|
||||
System.err.println("Error looking up symbol \"testDouble\" in context \"" +
|
||||
loadObjectName + "\"");
|
||||
System.exit(1);
|
||||
}
|
||||
doubleValue = addr.getJDoubleAt(0);
|
||||
if (doubleValue != expectedDoubleValue) {
|
||||
System.err.println("Error: unexpected double value (got " +
|
||||
doubleValue + ", expected " + expectedDoubleValue + ")");
|
||||
System.exit(1);
|
||||
}
|
||||
|
||||
System.err.println("All tests passed successfully.");
|
||||
|
||||
debugger.detach();
|
||||
}
|
||||
catch (AddressException e) {
|
||||
System.err.println("Error occurred during test:");
|
||||
e.printStackTrace();
|
||||
System.exit(1);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,97 +0,0 @@
|
||||
/*
|
||||
* Copyright (c) 2002, 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.asm;
|
||||
|
||||
public abstract class AbstractInstruction implements Instruction {
|
||||
protected final String name;
|
||||
|
||||
public AbstractInstruction(String name) {
|
||||
this.name = name;
|
||||
}
|
||||
|
||||
public String getName() {
|
||||
return name;
|
||||
}
|
||||
|
||||
// some type testers
|
||||
public boolean isIllegal() {
|
||||
return false;
|
||||
}
|
||||
|
||||
public boolean isArithmetic() {
|
||||
return false;
|
||||
}
|
||||
|
||||
public boolean isLogical() {
|
||||
return false;
|
||||
}
|
||||
|
||||
public boolean isShift() {
|
||||
return false;
|
||||
}
|
||||
|
||||
public boolean isMove() {
|
||||
return false;
|
||||
}
|
||||
|
||||
public boolean isBranch() {
|
||||
return false;
|
||||
}
|
||||
|
||||
public boolean isCall() {
|
||||
return false;
|
||||
}
|
||||
|
||||
public boolean isReturn() {
|
||||
return false;
|
||||
}
|
||||
|
||||
public boolean isLoad() {
|
||||
return false;
|
||||
}
|
||||
|
||||
public boolean isStore() {
|
||||
return false;
|
||||
}
|
||||
|
||||
public boolean isFloat() {
|
||||
return false;
|
||||
}
|
||||
|
||||
public boolean isTrap() {
|
||||
return false;
|
||||
}
|
||||
|
||||
public boolean isNoop() {
|
||||
return false;
|
||||
}
|
||||
|
||||
// convert the instruction as String given currentPc
|
||||
// and SymbolFinder
|
||||
|
||||
public String asString(long currentPc, SymbolFinder symFinder) {
|
||||
return name;
|
||||
}
|
||||
}
|
||||
@@ -1,31 +0,0 @@
|
||||
/*
|
||||
* Copyright (c) 2002, 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.asm;
|
||||
|
||||
public interface ArithmeticInstruction extends Instruction, RTLOperations {
|
||||
public Operand[] getArithmeticSources();
|
||||
public Operand getArithmeticDestination();
|
||||
public int getOperation(); // one of RTLOperations
|
||||
}
|
||||
@@ -1,88 +0,0 @@
|
||||
/*
|
||||
* Copyright (c) 2002, 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.asm;
|
||||
|
||||
// address is calculated as (base + (index * scale) + displacement)
|
||||
// optionally index is auto incremented or decremented
|
||||
|
||||
public abstract class BaseIndexScaleDispAddress extends IndirectAddress {
|
||||
private final Register base, index;
|
||||
private final int scale;
|
||||
private final long disp;
|
||||
private boolean isAutoIncr;
|
||||
private boolean isAutoDecr;
|
||||
|
||||
public BaseIndexScaleDispAddress(Register base, Register index, long disp, int scale) {
|
||||
this.base = base;
|
||||
this.index = index;
|
||||
this.disp = disp;
|
||||
this.scale = scale;
|
||||
}
|
||||
|
||||
public BaseIndexScaleDispAddress(Register base, Register index, long disp) {
|
||||
this(base, index, disp, 1);
|
||||
}
|
||||
|
||||
public BaseIndexScaleDispAddress(Register base, Register index) {
|
||||
this(base, index, 0L, 1);
|
||||
}
|
||||
|
||||
public BaseIndexScaleDispAddress(Register base, long disp) {
|
||||
this(base, null, disp, 1);
|
||||
}
|
||||
|
||||
public Register getBase() {
|
||||
return base;
|
||||
}
|
||||
|
||||
public Register getIndex() {
|
||||
return index;
|
||||
}
|
||||
|
||||
public int getScale() {
|
||||
return scale;
|
||||
}
|
||||
|
||||
public long getDisplacement() {
|
||||
return disp;
|
||||
}
|
||||
|
||||
// is the index auto decremented or incremented?
|
||||
public boolean isAutoIncrement() {
|
||||
return isAutoIncr;
|
||||
}
|
||||
|
||||
public void setAutoIncrement(boolean value) {
|
||||
isAutoIncr = value;
|
||||
}
|
||||
|
||||
public boolean isAutoDecrement() {
|
||||
return isAutoDecr;
|
||||
}
|
||||
|
||||
public void setAutoDecrement(boolean value) {
|
||||
isAutoDecr = value;
|
||||
}
|
||||
}
|
||||
@@ -1,33 +0,0 @@
|
||||
/*
|
||||
* Copyright (c) 2002, 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.asm;
|
||||
|
||||
public interface CPUHelper {
|
||||
public Disassembler createDisassembler(long startPc, byte[] code);
|
||||
public Register getIntegerRegister(int num);
|
||||
public Register getFloatRegister(int num);
|
||||
public Register getStackPointer();
|
||||
public Register getFramePointer();
|
||||
}
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2002, 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
|
||||
@@ -24,22 +24,134 @@
|
||||
|
||||
package sun.jvm.hotspot.asm;
|
||||
|
||||
public abstract class Disassembler {
|
||||
protected long startPc;
|
||||
protected byte[] code;
|
||||
import java.io.PrintStream;
|
||||
import java.util.Observer;
|
||||
import java.util.Observable;
|
||||
import sun.jvm.hotspot.code.CodeBlob;
|
||||
import sun.jvm.hotspot.code.NMethod;
|
||||
import sun.jvm.hotspot.debugger.Address;
|
||||
import sun.jvm.hotspot.runtime.VM;
|
||||
|
||||
public Disassembler(long startPc, byte[] code) {
|
||||
public class Disassembler {
|
||||
private static String options = "";
|
||||
private static long decode_function;
|
||||
|
||||
protected long startPc;
|
||||
protected byte[] code;
|
||||
private CodeBlob blob;
|
||||
private NMethod nmethod;
|
||||
|
||||
public static void decode(InstructionVisitor visitor, CodeBlob blob) {
|
||||
decode(visitor, blob, blob.codeBegin(), blob.codeEnd());
|
||||
}
|
||||
|
||||
public static void decode(InstructionVisitor visitor, CodeBlob blob, Address begin, Address end) {
|
||||
int codeSize = (int)end.minus(begin);
|
||||
long startPc = VM.getAddressValue(begin);
|
||||
byte[] code = new byte[codeSize];
|
||||
for (int i = 0; i < code.length; i++)
|
||||
code[i] = begin.getJByteAt(i);
|
||||
Disassembler dis = new Disassembler(startPc, code);
|
||||
dis.decode(visitor);
|
||||
}
|
||||
|
||||
private Disassembler(long startPc, byte[] code) {
|
||||
this.startPc = startPc;
|
||||
this.code = code;
|
||||
|
||||
// Lazily load hsdis
|
||||
if (decode_function == 0) {
|
||||
StringBuilder path = new StringBuilder(System.getProperty("java.home"));
|
||||
String sep = System.getProperty("file.separator");
|
||||
String os = System.getProperty("os.name");
|
||||
String libname = "hsdis";
|
||||
String arch = System.getProperty("os.arch");
|
||||
if (os.lastIndexOf("Windows", 0) != -1) {
|
||||
path.append(sep + "bin" + sep);
|
||||
libname += ".dll";
|
||||
} else if (os.lastIndexOf("SunOS", 0) != -1) {
|
||||
if (arch.equals("x86") || arch.equals("i386")) {
|
||||
path.append(sep + "lib" + sep + "i386" + sep);
|
||||
libname += "-i386" + ".so";
|
||||
} else if (arch.equals("amd64")) {
|
||||
path.append(sep + "lib" + sep + "amd64" + sep);
|
||||
libname += "-amd64" + ".so";
|
||||
} else {
|
||||
path.append(sep + "lib" + sep + arch + sep);
|
||||
libname += "-" + arch + ".so";
|
||||
}
|
||||
} else if (os.lastIndexOf("Linux", 0) != -1) {
|
||||
if (arch.equals("x86") || arch.equals("i386")) {
|
||||
path.append(sep + "lib" + sep + "i386" + sep);
|
||||
libname += "-i386.so";
|
||||
} else if (arch.equals("amd64") || arch.equals("x86_64")) {
|
||||
path.append(sep + "lib" + sep + "amd64" + sep);
|
||||
libname += "-amd64.so";
|
||||
} else {
|
||||
path.append(sep + "lib" + sep + arch + sep);
|
||||
libname += "-" + arch + ".so";
|
||||
}
|
||||
} else if (os.lastIndexOf("Mac OS X", 0) != -1) {
|
||||
path.append(sep + "lib" + sep);
|
||||
libname += "-amd64" + ".dylib"; // x86_64 => amd64
|
||||
} else {
|
||||
path.append(sep + "lib" + sep + "arch" + sep);
|
||||
libname += "-" + arch + ".so";
|
||||
}
|
||||
decode_function = load_library(path.toString(), libname);
|
||||
}
|
||||
}
|
||||
|
||||
public long getStartPC() {
|
||||
return startPc;
|
||||
private static native long load_library(String installed_jrepath, String hsdis_library_name);
|
||||
|
||||
private native void decode(InstructionVisitor visitor, long pc, byte[] code,
|
||||
String options, long decode_function);
|
||||
|
||||
private void decode(InstructionVisitor visitor) {
|
||||
visitor.prologue();
|
||||
decode(visitor, startPc, code, options, decode_function);
|
||||
visitor.epilogue();
|
||||
}
|
||||
|
||||
public byte[] getCode() {
|
||||
return code;
|
||||
private boolean match(String event, String tag) {
|
||||
if (!event.startsWith(tag))
|
||||
return false;
|
||||
int taglen = tag.length();
|
||||
if (taglen == event.length()) return true;
|
||||
char delim = event.charAt(taglen);
|
||||
return delim == ' ' || delim == '/' || delim == '=';
|
||||
}
|
||||
|
||||
public abstract void decode(InstructionVisitor visitor);
|
||||
// This is called from the native code to process various markers
|
||||
// in the dissassembly.
|
||||
private long handleEvent(InstructionVisitor visitor, String event, long arg) {
|
||||
if (match(event, "insn")) {
|
||||
try {
|
||||
visitor.beginInstruction(arg);
|
||||
} catch (Throwable e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
} else if (match(event, "/insn")) {
|
||||
try {
|
||||
visitor.endInstruction(arg);
|
||||
} catch (Throwable e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
} else if (match(event, "addr")) {
|
||||
if (arg != 0) {
|
||||
visitor.printAddress(arg);
|
||||
}
|
||||
return arg;
|
||||
} else if (match(event, "mach")) {
|
||||
// output().printf("[Disassembling for mach='%s']\n", arg);
|
||||
} else {
|
||||
// ignore unrecognized markup
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
// This called from the native code to perform printing
|
||||
private void rawPrint(InstructionVisitor visitor, String s) {
|
||||
visitor.print(s);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,53 +0,0 @@
|
||||
/*
|
||||
* Copyright (c) 2002, 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.asm;
|
||||
|
||||
public interface Instruction {
|
||||
public String getName();
|
||||
|
||||
// total size in bytes (operands + opcode).
|
||||
// for eg. in sparc it is always 4 (= 32bits)
|
||||
public int getSize();
|
||||
|
||||
// some type testers
|
||||
public boolean isIllegal();
|
||||
public boolean isArithmetic();
|
||||
public boolean isLogical();
|
||||
public boolean isShift();
|
||||
public boolean isMove();
|
||||
public boolean isBranch();
|
||||
public boolean isCall();
|
||||
public boolean isReturn();
|
||||
public boolean isLoad();
|
||||
public boolean isStore();
|
||||
public boolean isFloat();
|
||||
public boolean isTrap();
|
||||
public boolean isNoop();
|
||||
|
||||
// convert the instruction as String given currentPc
|
||||
// and SymbolFinder
|
||||
|
||||
public String asString(long currentPc, SymbolFinder symFinder);
|
||||
}
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2002, 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
|
||||
@@ -26,6 +26,9 @@ package sun.jvm.hotspot.asm;
|
||||
|
||||
public interface InstructionVisitor {
|
||||
public void prologue();
|
||||
public void visit(long currentPc, Instruction instr);
|
||||
public void beginInstruction(long currentPc);
|
||||
public void printAddress(long address);
|
||||
public void print(String format);
|
||||
public void endInstruction(long endPc);
|
||||
public void epilogue();
|
||||
}
|
||||
|
||||
@@ -1,30 +0,0 @@
|
||||
/*
|
||||
* Copyright (c) 2002, 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.asm;
|
||||
|
||||
public interface LoadInstruction extends MemoryInstruction {
|
||||
public Address getLoadSource();
|
||||
public Register[] getLoadDestinations();
|
||||
}
|
||||
@@ -1,31 +0,0 @@
|
||||
/*
|
||||
* Copyright (c) 2002, 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.asm;
|
||||
|
||||
public interface LogicInstruction extends Instruction, RTLOperations {
|
||||
public Operand[] getLogicSources();
|
||||
public Operand getLogicDestination();
|
||||
public int getOperation(); // one of RTLOperations
|
||||
}
|
||||
@@ -1,30 +0,0 @@
|
||||
/*
|
||||
* Copyright (c) 2002, 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.asm;
|
||||
|
||||
public interface MemoryInstruction extends RTLDataTypes {
|
||||
public int getDataType(); // one of the RTLDataTypes.
|
||||
public boolean isConditional(); // conditional store like swap or v9 like non-faulting loads
|
||||
}
|
||||
@@ -1,32 +0,0 @@
|
||||
/*
|
||||
* Copyright (c) 2002, 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.asm;
|
||||
|
||||
public interface MoveInstruction extends Instruction {
|
||||
public ImmediateOrRegister getMoveSource();
|
||||
public Register getMoveDestination();
|
||||
// for condition moves
|
||||
public boolean isConditional();
|
||||
}
|
||||
@@ -1,53 +0,0 @@
|
||||
/*
|
||||
* Copyright (c) 2002, 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.asm;
|
||||
|
||||
public interface RTLDataTypes {
|
||||
|
||||
// HALF = 16 bits, WORD = 32 bits, DWORD = 64 bits and QWORD = 128 bits.
|
||||
|
||||
public static final int RTLDT_SIGNED_BYTE = 0;
|
||||
public static final int RTLDT_UNSIGNED_BYTE = 1;
|
||||
public static final int RTLDT_SIGNED_HALF = 2;
|
||||
public static final int RTLDT_UNSIGNED_HALF = 3;
|
||||
public static final int RTLDT_SIGNED_WORD = 4;
|
||||
public static final int RTLDT_UNSIGNED_WORD = 5;
|
||||
public static final int RTLDT_SIGNED_DWORD = 6;
|
||||
public static final int RTLDT_UNSIGNED_DWORD = 7;
|
||||
public static final int RTLDT_SIGNED_QWORD = 8;
|
||||
public static final int RTLDT_UNSIGNED_QWORD = 9;
|
||||
|
||||
// float is 4 bytes, double is 8 bytes, extended double is 10 bytes
|
||||
// and quad is 16 bytes.
|
||||
|
||||
public static final int RTLDT_FL_SINGLE = 10;
|
||||
public static final int RTLDT_FL_DOUBLE = 11;
|
||||
public static final int RTLDT_FL_EXT_DOUBLE = 12;
|
||||
public static final int RTLDT_FL_QUAD = 13;
|
||||
|
||||
public static final int RTLDT_STRING = 14;
|
||||
|
||||
public static final int RTLDT_UNKNOWN = Integer.MAX_VALUE;
|
||||
}
|
||||
@@ -1,62 +0,0 @@
|
||||
/*
|
||||
* Copyright (c) 2002, 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.asm;
|
||||
|
||||
public interface RTLOperations {
|
||||
|
||||
// arithmetic operations
|
||||
public static final int RTLOP_ADD = 0;
|
||||
// with carry
|
||||
public static final int RTLOP_ADDC = 1;
|
||||
public static final int RTLOP_SUB = 2;
|
||||
// with carry
|
||||
public static final int RTLOP_SUBC = 3;
|
||||
public static final int RTLOP_SMUL = 4;
|
||||
public static final int RTLOP_UMUL = 5;
|
||||
public static final int RTLOP_SDIV = 6;
|
||||
public static final int RTLOP_UDIV = 7;
|
||||
|
||||
public static final int RTLOP_MAX_ARITHMETIC = RTLOP_UDIV;
|
||||
|
||||
// logical operations
|
||||
public static final int RTLOP_AND = 8;
|
||||
public static final int RTLOP_OR = 9;
|
||||
public static final int RTLOP_NOT = 10;
|
||||
public static final int RTLOP_NAND = 11;
|
||||
public static final int RTLOP_NOR = 12;
|
||||
public static final int RTLOP_XOR = 13;
|
||||
public static final int RTLOP_XNOR = 14;
|
||||
|
||||
public static final int RTLOP_MAX_LOGICAL = RTLOP_XNOR;
|
||||
|
||||
// shift operations
|
||||
public static final int RTLOP_SRL = 15;
|
||||
public static final int RTLOP_SRA = 16;
|
||||
public static final int RTLOP_SLL = 17;
|
||||
|
||||
public static final int RTLOP_MAX_SHIFT = RTLOP_SLL;
|
||||
|
||||
public static final int RTLOP_UNKNOWN = Integer.MAX_VALUE;
|
||||
}
|
||||
@@ -1,28 +0,0 @@
|
||||
/*
|
||||
* Copyright (c) 2002, 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.asm;
|
||||
|
||||
public interface ReturnInstruction extends BranchInstruction {
|
||||
}
|
||||
@@ -1,31 +0,0 @@
|
||||
/*
|
||||
* Copyright (c) 2002, 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.asm;
|
||||
|
||||
public interface ShiftInstruction extends Instruction, RTLOperations {
|
||||
public Operand getShiftSource();
|
||||
public Operand getShiftLength(); // number of bits to shift
|
||||
public Operand getShiftDestination();
|
||||
}
|
||||
@@ -1,30 +0,0 @@
|
||||
/*
|
||||
* Copyright (c) 2002, 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.asm;
|
||||
|
||||
public interface StoreInstruction extends MemoryInstruction {
|
||||
public Register[] getStoreSources();
|
||||
public Address getStoreDestination();
|
||||
}
|
||||
@@ -1,90 +0,0 @@
|
||||
/*
|
||||
* Copyright (c) 2003, 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.asm.amd64;
|
||||
|
||||
import sun.jvm.hotspot.utilities.Assert;
|
||||
|
||||
public class AMD64FloatRegisters {
|
||||
|
||||
public static int getNumRegisters() {
|
||||
return NUM_REGIXMMERS;
|
||||
}
|
||||
|
||||
public static AMD64FloatRegister getRegister(int regNum) {
|
||||
if (Assert.ASSERTS_ENABLED) {
|
||||
Assert.that(regNum > -1 && regNum < NUM_REGIXMMERS, "invalid float register number!");
|
||||
}
|
||||
return registers[regNum];
|
||||
}
|
||||
|
||||
public static String getRegisterName(int i) {
|
||||
return "XMM(" + i + ")";
|
||||
}
|
||||
|
||||
public static final AMD64FloatRegister XMM0;
|
||||
public static final AMD64FloatRegister XMM1;
|
||||
public static final AMD64FloatRegister XMM2;
|
||||
public static final AMD64FloatRegister XMM3;
|
||||
public static final AMD64FloatRegister XMM4;
|
||||
public static final AMD64FloatRegister XMM5;
|
||||
public static final AMD64FloatRegister XMM6;
|
||||
public static final AMD64FloatRegister XMM7;
|
||||
public static final AMD64FloatRegister XMM8;
|
||||
public static final AMD64FloatRegister XMM9;
|
||||
public static final AMD64FloatRegister XMM10;
|
||||
public static final AMD64FloatRegister XMM11;
|
||||
public static final AMD64FloatRegister XMM12;
|
||||
public static final AMD64FloatRegister XMM13;
|
||||
public static final AMD64FloatRegister XMM14;
|
||||
public static final AMD64FloatRegister XMM15;
|
||||
|
||||
public static final int NUM_REGIXMMERS = 16;
|
||||
|
||||
private static final AMD64FloatRegister[] registers;
|
||||
|
||||
static {
|
||||
XMM0 = new AMD64FloatRegister(0);
|
||||
XMM1 = new AMD64FloatRegister(1);
|
||||
XMM2 = new AMD64FloatRegister(2);
|
||||
XMM3 = new AMD64FloatRegister(3);
|
||||
XMM4 = new AMD64FloatRegister(4);
|
||||
XMM5 = new AMD64FloatRegister(5);
|
||||
XMM6 = new AMD64FloatRegister(6);
|
||||
XMM7 = new AMD64FloatRegister(7);
|
||||
XMM8 = new AMD64FloatRegister(8);
|
||||
XMM9 = new AMD64FloatRegister(9);
|
||||
XMM10 = new AMD64FloatRegister(10);
|
||||
XMM11 = new AMD64FloatRegister(11);
|
||||
XMM12 = new AMD64FloatRegister(12);
|
||||
XMM13 = new AMD64FloatRegister(13);
|
||||
XMM14 = new AMD64FloatRegister(14);
|
||||
XMM15 = new AMD64FloatRegister(15);
|
||||
|
||||
registers = new AMD64FloatRegister[] {
|
||||
XMM0, XMM1, XMM2, XMM3, XMM4, XMM5, XMM6, XMM7,
|
||||
XMM8, XMM9, XMM10, XMM11, XMM12, XMM13, XMM14, XMM15
|
||||
};
|
||||
}
|
||||
}
|
||||
@@ -1,92 +0,0 @@
|
||||
/*
|
||||
* Copyright (c) 2003, 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.asm.amd64;
|
||||
|
||||
import sun.jvm.hotspot.utilities.*;
|
||||
|
||||
public class AMD64Registers {
|
||||
public static final int NUM_REGISTERS = 16;
|
||||
|
||||
public static final AMD64Register RAX;
|
||||
public static final AMD64Register RCX;
|
||||
public static final AMD64Register RDX;
|
||||
public static final AMD64Register RBX;
|
||||
public static final AMD64Register RSP;
|
||||
public static final AMD64Register RBP;
|
||||
public static final AMD64Register RSI;
|
||||
public static final AMD64Register RDI;
|
||||
public static final AMD64Register R8;
|
||||
public static final AMD64Register R9;
|
||||
public static final AMD64Register R10;
|
||||
public static final AMD64Register R11;
|
||||
public static final AMD64Register R12;
|
||||
public static final AMD64Register R13;
|
||||
public static final AMD64Register R14;
|
||||
public static final AMD64Register R15;
|
||||
|
||||
private static final AMD64Register[] registers;
|
||||
|
||||
static {
|
||||
RAX = new AMD64Register(0, "rax");
|
||||
RCX = new AMD64Register(1, "rcx");
|
||||
RDX = new AMD64Register(2, "rdx");
|
||||
RBX = new AMD64Register(3, "rbx");
|
||||
RSP = new AMD64Register(4, "rsp");
|
||||
RBP = new AMD64Register(5, "rbp");
|
||||
RSI = new AMD64Register(6, "rsi");
|
||||
RDI = new AMD64Register(7, "rdi");
|
||||
R8 = new AMD64Register(8, "r8" );
|
||||
R9 = new AMD64Register(9, "r9" );
|
||||
R10 = new AMD64Register(10,"r10");
|
||||
R11 = new AMD64Register(11,"r11");
|
||||
R12 = new AMD64Register(12,"r12");
|
||||
R13 = new AMD64Register(13,"r13");
|
||||
R14 = new AMD64Register(14,"r14");
|
||||
R15 = new AMD64Register(15,"r15");
|
||||
registers = new AMD64Register[] {
|
||||
RAX, RCX, RDX, RBX, RSP, RBP, RSI, RDI,
|
||||
R8, R9, R10, R11, R12, R13, R14, R15
|
||||
};
|
||||
}
|
||||
|
||||
public static int getNumberOfRegisters() {
|
||||
return NUM_REGISTERS;
|
||||
}
|
||||
|
||||
public static AMD64Register getRegister(int regNum) {
|
||||
if (Assert.ASSERTS_ENABLED) {
|
||||
Assert.that(regNum > -1 && regNum < NUM_REGISTERS, "invalid integer register number!");
|
||||
}
|
||||
return registers[regNum];
|
||||
}
|
||||
|
||||
//Return the register name
|
||||
public static String getRegisterName(int regNum) {
|
||||
if (Assert.ASSERTS_ENABLED) {
|
||||
Assert.that(regNum > -1 && regNum < NUM_REGISTERS, "invalid integer register number!");
|
||||
}
|
||||
return registers[regNum].toString();
|
||||
}
|
||||
}
|
||||
@@ -1,320 +0,0 @@
|
||||
/*
|
||||
* Copyright (c) 2003, 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.asm.ia64;
|
||||
|
||||
import sun.jvm.hotspot.utilities.Assert;
|
||||
|
||||
public class IA64FloatRegisters {
|
||||
public static int getNumRegisters() {
|
||||
return 128;
|
||||
}
|
||||
|
||||
public static IA64FloatRegister getRegister(int i) {
|
||||
Assert.that(i >= 0 && i < 128, "float register number is invalid");
|
||||
return registers[i];
|
||||
}
|
||||
|
||||
public static String getRegisterName(int i) {
|
||||
return "%f" + i;
|
||||
}
|
||||
|
||||
public static final IA64FloatRegister F0;
|
||||
public static final IA64FloatRegister F1;
|
||||
public static final IA64FloatRegister F2;
|
||||
public static final IA64FloatRegister F3;
|
||||
public static final IA64FloatRegister F4;
|
||||
public static final IA64FloatRegister F5;
|
||||
public static final IA64FloatRegister F6;
|
||||
public static final IA64FloatRegister F7;
|
||||
public static final IA64FloatRegister F8;
|
||||
public static final IA64FloatRegister F9;
|
||||
public static final IA64FloatRegister F10;
|
||||
public static final IA64FloatRegister F11;
|
||||
public static final IA64FloatRegister F12;
|
||||
public static final IA64FloatRegister F13;
|
||||
public static final IA64FloatRegister F14;
|
||||
public static final IA64FloatRegister F15;
|
||||
public static final IA64FloatRegister F16;
|
||||
public static final IA64FloatRegister F17;
|
||||
public static final IA64FloatRegister F18;
|
||||
public static final IA64FloatRegister F19;
|
||||
public static final IA64FloatRegister F20;
|
||||
public static final IA64FloatRegister F21;
|
||||
public static final IA64FloatRegister F22;
|
||||
public static final IA64FloatRegister F23;
|
||||
public static final IA64FloatRegister F24;
|
||||
public static final IA64FloatRegister F25;
|
||||
public static final IA64FloatRegister F26;
|
||||
public static final IA64FloatRegister F27;
|
||||
public static final IA64FloatRegister F28;
|
||||
public static final IA64FloatRegister F29;
|
||||
public static final IA64FloatRegister F30;
|
||||
public static final IA64FloatRegister F31;
|
||||
public static final IA64FloatRegister F32;
|
||||
public static final IA64FloatRegister F33;
|
||||
public static final IA64FloatRegister F34;
|
||||
public static final IA64FloatRegister F35;
|
||||
public static final IA64FloatRegister F36;
|
||||
public static final IA64FloatRegister F37;
|
||||
public static final IA64FloatRegister F38;
|
||||
public static final IA64FloatRegister F39;
|
||||
public static final IA64FloatRegister F40;
|
||||
public static final IA64FloatRegister F41;
|
||||
public static final IA64FloatRegister F42;
|
||||
public static final IA64FloatRegister F43;
|
||||
public static final IA64FloatRegister F44;
|
||||
public static final IA64FloatRegister F45;
|
||||
public static final IA64FloatRegister F46;
|
||||
public static final IA64FloatRegister F47;
|
||||
public static final IA64FloatRegister F48;
|
||||
public static final IA64FloatRegister F49;
|
||||
public static final IA64FloatRegister F50;
|
||||
public static final IA64FloatRegister F51;
|
||||
public static final IA64FloatRegister F52;
|
||||
public static final IA64FloatRegister F53;
|
||||
public static final IA64FloatRegister F54;
|
||||
public static final IA64FloatRegister F55;
|
||||
public static final IA64FloatRegister F56;
|
||||
public static final IA64FloatRegister F57;
|
||||
public static final IA64FloatRegister F58;
|
||||
public static final IA64FloatRegister F59;
|
||||
public static final IA64FloatRegister F60;
|
||||
public static final IA64FloatRegister F61;
|
||||
public static final IA64FloatRegister F62;
|
||||
public static final IA64FloatRegister F63;
|
||||
public static final IA64FloatRegister F64;
|
||||
public static final IA64FloatRegister F65;
|
||||
public static final IA64FloatRegister F66;
|
||||
public static final IA64FloatRegister F67;
|
||||
public static final IA64FloatRegister F68;
|
||||
public static final IA64FloatRegister F69;
|
||||
public static final IA64FloatRegister F70;
|
||||
public static final IA64FloatRegister F71;
|
||||
public static final IA64FloatRegister F72;
|
||||
public static final IA64FloatRegister F73;
|
||||
public static final IA64FloatRegister F74;
|
||||
public static final IA64FloatRegister F75;
|
||||
public static final IA64FloatRegister F76;
|
||||
public static final IA64FloatRegister F77;
|
||||
public static final IA64FloatRegister F78;
|
||||
public static final IA64FloatRegister F79;
|
||||
public static final IA64FloatRegister F80;
|
||||
public static final IA64FloatRegister F81;
|
||||
public static final IA64FloatRegister F82;
|
||||
public static final IA64FloatRegister F83;
|
||||
public static final IA64FloatRegister F84;
|
||||
public static final IA64FloatRegister F85;
|
||||
public static final IA64FloatRegister F86;
|
||||
public static final IA64FloatRegister F87;
|
||||
public static final IA64FloatRegister F88;
|
||||
public static final IA64FloatRegister F89;
|
||||
public static final IA64FloatRegister F90;
|
||||
public static final IA64FloatRegister F91;
|
||||
public static final IA64FloatRegister F92;
|
||||
public static final IA64FloatRegister F93;
|
||||
public static final IA64FloatRegister F94;
|
||||
public static final IA64FloatRegister F95;
|
||||
public static final IA64FloatRegister F96;
|
||||
public static final IA64FloatRegister F97;
|
||||
public static final IA64FloatRegister F98;
|
||||
public static final IA64FloatRegister F99;
|
||||
public static final IA64FloatRegister F100;
|
||||
public static final IA64FloatRegister F101;
|
||||
public static final IA64FloatRegister F102;
|
||||
public static final IA64FloatRegister F103;
|
||||
public static final IA64FloatRegister F104;
|
||||
public static final IA64FloatRegister F105;
|
||||
public static final IA64FloatRegister F106;
|
||||
public static final IA64FloatRegister F107;
|
||||
public static final IA64FloatRegister F108;
|
||||
public static final IA64FloatRegister F109;
|
||||
public static final IA64FloatRegister F110;
|
||||
public static final IA64FloatRegister F111;
|
||||
public static final IA64FloatRegister F112;
|
||||
public static final IA64FloatRegister F113;
|
||||
public static final IA64FloatRegister F114;
|
||||
public static final IA64FloatRegister F115;
|
||||
public static final IA64FloatRegister F116;
|
||||
public static final IA64FloatRegister F117;
|
||||
public static final IA64FloatRegister F118;
|
||||
public static final IA64FloatRegister F119;
|
||||
public static final IA64FloatRegister F120;
|
||||
public static final IA64FloatRegister F121;
|
||||
public static final IA64FloatRegister F122;
|
||||
public static final IA64FloatRegister F123;
|
||||
public static final IA64FloatRegister F124;
|
||||
public static final IA64FloatRegister F125;
|
||||
public static final IA64FloatRegister F126;
|
||||
public static final IA64FloatRegister F127;
|
||||
public static final int NUM_REGISTERS = 128;
|
||||
private static final IA64FloatRegister registers[];
|
||||
|
||||
static {
|
||||
F0 = new IA64FloatRegister(0);
|
||||
F1 = new IA64FloatRegister(1);
|
||||
F2 = new IA64FloatRegister(2);
|
||||
F3 = new IA64FloatRegister(3);
|
||||
F4 = new IA64FloatRegister(4);
|
||||
F5 = new IA64FloatRegister(5);
|
||||
F6 = new IA64FloatRegister(6);
|
||||
F7 = new IA64FloatRegister(7);
|
||||
F8 = new IA64FloatRegister(8);
|
||||
F9 = new IA64FloatRegister(9);
|
||||
F10 = new IA64FloatRegister(10);
|
||||
F11 = new IA64FloatRegister(11);
|
||||
F12 = new IA64FloatRegister(12);
|
||||
F13 = new IA64FloatRegister(13);
|
||||
F14 = new IA64FloatRegister(14);
|
||||
F15 = new IA64FloatRegister(15);
|
||||
F16 = new IA64FloatRegister(16);
|
||||
F17 = new IA64FloatRegister(17);
|
||||
F18 = new IA64FloatRegister(18);
|
||||
F19 = new IA64FloatRegister(19);
|
||||
F20 = new IA64FloatRegister(20);
|
||||
F21 = new IA64FloatRegister(21);
|
||||
F22 = new IA64FloatRegister(22);
|
||||
F23 = new IA64FloatRegister(23);
|
||||
F24 = new IA64FloatRegister(24);
|
||||
F25 = new IA64FloatRegister(25);
|
||||
F26 = new IA64FloatRegister(26);
|
||||
F27 = new IA64FloatRegister(27);
|
||||
F28 = new IA64FloatRegister(28);
|
||||
F29 = new IA64FloatRegister(29);
|
||||
F30 = new IA64FloatRegister(30);
|
||||
F31 = new IA64FloatRegister(31);
|
||||
F32 = new IA64FloatRegister(32);
|
||||
F33 = new IA64FloatRegister(33);
|
||||
F34 = new IA64FloatRegister(34);
|
||||
F35 = new IA64FloatRegister(35);
|
||||
F36 = new IA64FloatRegister(36);
|
||||
F37 = new IA64FloatRegister(37);
|
||||
F38 = new IA64FloatRegister(38);
|
||||
F39 = new IA64FloatRegister(39);
|
||||
F40 = new IA64FloatRegister(40);
|
||||
F41 = new IA64FloatRegister(41);
|
||||
F42 = new IA64FloatRegister(42);
|
||||
F43 = new IA64FloatRegister(43);
|
||||
F44 = new IA64FloatRegister(44);
|
||||
F45 = new IA64FloatRegister(45);
|
||||
F46 = new IA64FloatRegister(46);
|
||||
F47 = new IA64FloatRegister(47);
|
||||
F48 = new IA64FloatRegister(48);
|
||||
F49 = new IA64FloatRegister(49);
|
||||
F50 = new IA64FloatRegister(50);
|
||||
F51 = new IA64FloatRegister(51);
|
||||
F52 = new IA64FloatRegister(52);
|
||||
F53 = new IA64FloatRegister(53);
|
||||
F54 = new IA64FloatRegister(54);
|
||||
F55 = new IA64FloatRegister(55);
|
||||
F56 = new IA64FloatRegister(56);
|
||||
F57 = new IA64FloatRegister(57);
|
||||
F58 = new IA64FloatRegister(58);
|
||||
F59 = new IA64FloatRegister(59);
|
||||
F60 = new IA64FloatRegister(60);
|
||||
F61 = new IA64FloatRegister(61);
|
||||
F62 = new IA64FloatRegister(62);
|
||||
F63 = new IA64FloatRegister(63);
|
||||
F64 = new IA64FloatRegister(64);
|
||||
F65 = new IA64FloatRegister(65);
|
||||
F66 = new IA64FloatRegister(66);
|
||||
F67 = new IA64FloatRegister(67);
|
||||
F68 = new IA64FloatRegister(68);
|
||||
F69 = new IA64FloatRegister(69);
|
||||
F70 = new IA64FloatRegister(70);
|
||||
F71 = new IA64FloatRegister(71);
|
||||
F72 = new IA64FloatRegister(72);
|
||||
F73 = new IA64FloatRegister(73);
|
||||
F74 = new IA64FloatRegister(74);
|
||||
F75 = new IA64FloatRegister(75);
|
||||
F76 = new IA64FloatRegister(76);
|
||||
F77 = new IA64FloatRegister(77);
|
||||
F78 = new IA64FloatRegister(78);
|
||||
F79 = new IA64FloatRegister(79);
|
||||
F80 = new IA64FloatRegister(80);
|
||||
F81 = new IA64FloatRegister(81);
|
||||
F82 = new IA64FloatRegister(82);
|
||||
F83 = new IA64FloatRegister(83);
|
||||
F84 = new IA64FloatRegister(84);
|
||||
F85 = new IA64FloatRegister(85);
|
||||
F86 = new IA64FloatRegister(86);
|
||||
F87 = new IA64FloatRegister(87);
|
||||
F88 = new IA64FloatRegister(88);
|
||||
F89 = new IA64FloatRegister(89);
|
||||
F90 = new IA64FloatRegister(90);
|
||||
F91 = new IA64FloatRegister(91);
|
||||
F92 = new IA64FloatRegister(92);
|
||||
F93 = new IA64FloatRegister(93);
|
||||
F94 = new IA64FloatRegister(94);
|
||||
F95 = new IA64FloatRegister(95);
|
||||
F96 = new IA64FloatRegister(96);
|
||||
F97 = new IA64FloatRegister(97);
|
||||
F98 = new IA64FloatRegister(98);
|
||||
F99 = new IA64FloatRegister(99);
|
||||
F100 = new IA64FloatRegister(100);
|
||||
F101 = new IA64FloatRegister(101);
|
||||
F102 = new IA64FloatRegister(102);
|
||||
F103 = new IA64FloatRegister(103);
|
||||
F104 = new IA64FloatRegister(104);
|
||||
F105 = new IA64FloatRegister(105);
|
||||
F106 = new IA64FloatRegister(106);
|
||||
F107 = new IA64FloatRegister(107);
|
||||
F108 = new IA64FloatRegister(108);
|
||||
F109 = new IA64FloatRegister(109);
|
||||
F110 = new IA64FloatRegister(110);
|
||||
F111 = new IA64FloatRegister(111);
|
||||
F112 = new IA64FloatRegister(112);
|
||||
F113 = new IA64FloatRegister(113);
|
||||
F114 = new IA64FloatRegister(114);
|
||||
F115 = new IA64FloatRegister(115);
|
||||
F116 = new IA64FloatRegister(116);
|
||||
F117 = new IA64FloatRegister(117);
|
||||
F118 = new IA64FloatRegister(118);
|
||||
F119 = new IA64FloatRegister(119);
|
||||
F120 = new IA64FloatRegister(120);
|
||||
F121 = new IA64FloatRegister(121);
|
||||
F122 = new IA64FloatRegister(122);
|
||||
F123 = new IA64FloatRegister(123);
|
||||
F124 = new IA64FloatRegister(124);
|
||||
F125 = new IA64FloatRegister(125);
|
||||
F126 = new IA64FloatRegister(126);
|
||||
F127 = new IA64FloatRegister(127);
|
||||
|
||||
registers = (new IA64FloatRegister[] {
|
||||
F0, F1, F2, F3, F4, F5, F6, F7, F8, F9,
|
||||
F10, F11, F12, F13, F14, F15, F16, F17, F18, F19,
|
||||
F20, F21, F22, F23, F24, F25, F26, F27, F28, F29,
|
||||
F30, F31, F32, F33, F34, F35, F36, F37, F38, F39,
|
||||
F40, F41, F42, F43, F44, F45, F46, F47, F48, F49,
|
||||
F50, F51, F52, F53, F54, F55, F56, F57, F58, F59,
|
||||
F60, F61, F62, F63, F64, F65, F66, F67, F68, F69,
|
||||
F70, F71, F72, F73, F74, F75, F76, F77, F78, F79,
|
||||
F80, F81, F82, F83, F84, F85, F86, F87, F88, F89,
|
||||
F90, F91, F92, F93, F94, F95, F96, F97, F98, F99,
|
||||
F100, F101, F102, F103, F104, F105, F106, F107, F108, F109,
|
||||
F110, F111, F112, F113, F114, F115, F116, F117, F118, F119,
|
||||
F120, F121, F122, F123, F124, F125, F126, F127
|
||||
});
|
||||
}
|
||||
}
|
||||
@@ -1,54 +0,0 @@
|
||||
/*
|
||||
* Copyright (c) 2003, 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.asm.ia64;
|
||||
|
||||
import sun.jvm.hotspot.asm.*;
|
||||
|
||||
public class IA64Helper implements CPUHelper {
|
||||
public Disassembler createDisassembler(long startPc, byte[] code) {
|
||||
// FIXME: IA64 disassembler not implemented
|
||||
return null;
|
||||
}
|
||||
|
||||
public Register getIntegerRegister(int num) {
|
||||
// FIXME: IA64 disassembler not implemented
|
||||
return null;
|
||||
}
|
||||
|
||||
public Register getFloatRegister(int num) {
|
||||
// FIXME: IA64 disassembler not implemented
|
||||
return null;
|
||||
}
|
||||
|
||||
public Register getStackPointer() {
|
||||
// FIXME: IA64 disassembler not implemented
|
||||
return null;
|
||||
}
|
||||
|
||||
public Register getFramePointer() {
|
||||
// FIXME: IA64 disassembler not implemented
|
||||
return null;
|
||||
}
|
||||
}
|
||||
@@ -1,76 +0,0 @@
|
||||
/*
|
||||
* Copyright (c) 2003, 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.asm.ia64;
|
||||
|
||||
import sun.jvm.hotspot.asm.*;
|
||||
import sun.jvm.hotspot.runtime.*;
|
||||
import sun.jvm.hotspot.utilities.*;
|
||||
|
||||
public class IA64Register extends Register {
|
||||
|
||||
//
|
||||
private static final int STACKED_BASE = 32;
|
||||
private static final int STACKED_END = 127;
|
||||
|
||||
// We put application registers here too rather than separate types
|
||||
private static final int APPL_BASE = 128;
|
||||
|
||||
private static final int nofRegisters = 129; // total number of registers
|
||||
|
||||
/** Constructor for an explicitly numbered register */
|
||||
public IA64Register(int number) {
|
||||
super(number);
|
||||
}
|
||||
|
||||
public int getNumberOfRegisters() {
|
||||
return nofRegisters;
|
||||
}
|
||||
|
||||
public boolean isStacked() {
|
||||
return (32 <= getNumber());
|
||||
}
|
||||
|
||||
/** NOTE: this returns an offset in BYTES in this system! */
|
||||
public long spOffsetInSavedWindow() {
|
||||
return 0;
|
||||
}
|
||||
|
||||
public String toString() {
|
||||
return IA64Registers.getRegisterName(number);
|
||||
}
|
||||
|
||||
public boolean isFramePointer() {
|
||||
return number == APPL_BASE;
|
||||
}
|
||||
|
||||
public boolean isStackPointer() {
|
||||
return number == 12;
|
||||
}
|
||||
|
||||
public boolean isFloat() {
|
||||
return false;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,353 +0,0 @@
|
||||
/*
|
||||
* Copyright (c) 2003, 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.asm.ia64;
|
||||
|
||||
import sun.jvm.hotspot.utilities.*;
|
||||
|
||||
public class IA64Registers {
|
||||
|
||||
public static final IA64Register GR0;
|
||||
public static final IA64Register GR1;
|
||||
public static final IA64Register GR2;
|
||||
public static final IA64Register GR3;
|
||||
public static final IA64Register GR4;
|
||||
public static final IA64Register GR5;
|
||||
public static final IA64Register GR6;
|
||||
public static final IA64Register GR7;
|
||||
public static final IA64Register GR8;
|
||||
public static final IA64Register GR9;
|
||||
public static final IA64Register GR10;
|
||||
public static final IA64Register GR11;
|
||||
public static final IA64Register GR12;
|
||||
public static final IA64Register GR13;
|
||||
public static final IA64Register GR14;
|
||||
public static final IA64Register GR15;
|
||||
public static final IA64Register GR16;
|
||||
public static final IA64Register GR17;
|
||||
public static final IA64Register GR18;
|
||||
public static final IA64Register GR19;
|
||||
public static final IA64Register GR20;
|
||||
public static final IA64Register GR21;
|
||||
public static final IA64Register GR22;
|
||||
public static final IA64Register GR23;
|
||||
public static final IA64Register GR24;
|
||||
public static final IA64Register GR25;
|
||||
public static final IA64Register GR26;
|
||||
public static final IA64Register GR27;
|
||||
public static final IA64Register GR28;
|
||||
public static final IA64Register GR29;
|
||||
public static final IA64Register GR30;
|
||||
public static final IA64Register GR31;
|
||||
public static final IA64Register GR32;
|
||||
public static final IA64Register GR33;
|
||||
public static final IA64Register GR34;
|
||||
public static final IA64Register GR35;
|
||||
public static final IA64Register GR36;
|
||||
public static final IA64Register GR37;
|
||||
public static final IA64Register GR38;
|
||||
public static final IA64Register GR39;
|
||||
public static final IA64Register GR40;
|
||||
public static final IA64Register GR41;
|
||||
public static final IA64Register GR42;
|
||||
public static final IA64Register GR43;
|
||||
public static final IA64Register GR44;
|
||||
public static final IA64Register GR45;
|
||||
public static final IA64Register GR46;
|
||||
public static final IA64Register GR47;
|
||||
public static final IA64Register GR48;
|
||||
public static final IA64Register GR49;
|
||||
public static final IA64Register GR50;
|
||||
public static final IA64Register GR51;
|
||||
public static final IA64Register GR52;
|
||||
public static final IA64Register GR53;
|
||||
public static final IA64Register GR54;
|
||||
public static final IA64Register GR55;
|
||||
public static final IA64Register GR56;
|
||||
public static final IA64Register GR57;
|
||||
public static final IA64Register GR58;
|
||||
public static final IA64Register GR59;
|
||||
public static final IA64Register GR60;
|
||||
public static final IA64Register GR61;
|
||||
public static final IA64Register GR62;
|
||||
public static final IA64Register GR63;
|
||||
public static final IA64Register GR64;
|
||||
public static final IA64Register GR65;
|
||||
public static final IA64Register GR66;
|
||||
public static final IA64Register GR67;
|
||||
public static final IA64Register GR68;
|
||||
public static final IA64Register GR69;
|
||||
public static final IA64Register GR70;
|
||||
public static final IA64Register GR71;
|
||||
public static final IA64Register GR72;
|
||||
public static final IA64Register GR73;
|
||||
public static final IA64Register GR74;
|
||||
public static final IA64Register GR75;
|
||||
public static final IA64Register GR76;
|
||||
public static final IA64Register GR77;
|
||||
public static final IA64Register GR78;
|
||||
public static final IA64Register GR79;
|
||||
public static final IA64Register GR80;
|
||||
public static final IA64Register GR81;
|
||||
public static final IA64Register GR82;
|
||||
public static final IA64Register GR83;
|
||||
public static final IA64Register GR84;
|
||||
public static final IA64Register GR85;
|
||||
public static final IA64Register GR86;
|
||||
public static final IA64Register GR87;
|
||||
public static final IA64Register GR88;
|
||||
public static final IA64Register GR89;
|
||||
public static final IA64Register GR90;
|
||||
public static final IA64Register GR91;
|
||||
public static final IA64Register GR92;
|
||||
public static final IA64Register GR93;
|
||||
public static final IA64Register GR94;
|
||||
public static final IA64Register GR95;
|
||||
public static final IA64Register GR96;
|
||||
public static final IA64Register GR97;
|
||||
public static final IA64Register GR98;
|
||||
public static final IA64Register GR99;
|
||||
public static final IA64Register GR100;
|
||||
public static final IA64Register GR101;
|
||||
public static final IA64Register GR102;
|
||||
public static final IA64Register GR103;
|
||||
public static final IA64Register GR104;
|
||||
public static final IA64Register GR105;
|
||||
public static final IA64Register GR106;
|
||||
public static final IA64Register GR107;
|
||||
public static final IA64Register GR108;
|
||||
public static final IA64Register GR109;
|
||||
public static final IA64Register GR110;
|
||||
public static final IA64Register GR111;
|
||||
public static final IA64Register GR112;
|
||||
public static final IA64Register GR113;
|
||||
public static final IA64Register GR114;
|
||||
public static final IA64Register GR115;
|
||||
public static final IA64Register GR116;
|
||||
public static final IA64Register GR117;
|
||||
public static final IA64Register GR118;
|
||||
public static final IA64Register GR119;
|
||||
public static final IA64Register GR120;
|
||||
public static final IA64Register GR121;
|
||||
public static final IA64Register GR122;
|
||||
public static final IA64Register GR123;
|
||||
public static final IA64Register GR124;
|
||||
public static final IA64Register GR125;
|
||||
public static final IA64Register GR126;
|
||||
public static final IA64Register GR127;
|
||||
|
||||
public static final IA64Register AR_BSP;
|
||||
|
||||
public static final int NUM_REGISTERS = 129;
|
||||
private static final IA64Register registers[];
|
||||
|
||||
static {
|
||||
GR0 = new IA64Register(0);
|
||||
GR1 = new IA64Register(1);
|
||||
GR2 = new IA64Register(2);
|
||||
GR3 = new IA64Register(3);
|
||||
GR4 = new IA64Register(4);
|
||||
GR5 = new IA64Register(5);
|
||||
GR6 = new IA64Register(6);
|
||||
GR7 = new IA64Register(7);
|
||||
GR8 = new IA64Register(8);
|
||||
GR9 = new IA64Register(9);
|
||||
GR10 = new IA64Register(10);
|
||||
GR11 = new IA64Register(11);
|
||||
GR12 = new IA64Register(12);
|
||||
GR13 = new IA64Register(13);
|
||||
GR14 = new IA64Register(14);
|
||||
GR15 = new IA64Register(15);
|
||||
GR16 = new IA64Register(16);
|
||||
GR17 = new IA64Register(17);
|
||||
GR18 = new IA64Register(18);
|
||||
GR19 = new IA64Register(19);
|
||||
GR20 = new IA64Register(20);
|
||||
GR21 = new IA64Register(21);
|
||||
GR22 = new IA64Register(22);
|
||||
GR23 = new IA64Register(23);
|
||||
GR24 = new IA64Register(24);
|
||||
GR25 = new IA64Register(25);
|
||||
GR26 = new IA64Register(26);
|
||||
GR27 = new IA64Register(27);
|
||||
GR28 = new IA64Register(28);
|
||||
GR29 = new IA64Register(29);
|
||||
GR30 = new IA64Register(30);
|
||||
GR31 = new IA64Register(31);
|
||||
GR32 = new IA64Register(32);
|
||||
GR33 = new IA64Register(33);
|
||||
GR34 = new IA64Register(34);
|
||||
GR35 = new IA64Register(35);
|
||||
GR36 = new IA64Register(36);
|
||||
GR37 = new IA64Register(37);
|
||||
GR38 = new IA64Register(38);
|
||||
GR39 = new IA64Register(39);
|
||||
GR40 = new IA64Register(40);
|
||||
GR41 = new IA64Register(41);
|
||||
GR42 = new IA64Register(42);
|
||||
GR43 = new IA64Register(43);
|
||||
GR44 = new IA64Register(44);
|
||||
GR45 = new IA64Register(45);
|
||||
GR46 = new IA64Register(46);
|
||||
GR47 = new IA64Register(47);
|
||||
GR48 = new IA64Register(48);
|
||||
GR49 = new IA64Register(49);
|
||||
GR50 = new IA64Register(50);
|
||||
GR51 = new IA64Register(51);
|
||||
GR52 = new IA64Register(52);
|
||||
GR53 = new IA64Register(53);
|
||||
GR54 = new IA64Register(54);
|
||||
GR55 = new IA64Register(55);
|
||||
GR56 = new IA64Register(56);
|
||||
GR57 = new IA64Register(57);
|
||||
GR58 = new IA64Register(58);
|
||||
GR59 = new IA64Register(59);
|
||||
GR60 = new IA64Register(60);
|
||||
GR61 = new IA64Register(61);
|
||||
GR62 = new IA64Register(62);
|
||||
GR63 = new IA64Register(63);
|
||||
GR64 = new IA64Register(64);
|
||||
GR65 = new IA64Register(65);
|
||||
GR66 = new IA64Register(66);
|
||||
GR67 = new IA64Register(67);
|
||||
GR68 = new IA64Register(68);
|
||||
GR69 = new IA64Register(69);
|
||||
GR70 = new IA64Register(70);
|
||||
GR71 = new IA64Register(71);
|
||||
GR72 = new IA64Register(72);
|
||||
GR73 = new IA64Register(73);
|
||||
GR74 = new IA64Register(74);
|
||||
GR75 = new IA64Register(75);
|
||||
GR76 = new IA64Register(76);
|
||||
GR77 = new IA64Register(77);
|
||||
GR78 = new IA64Register(78);
|
||||
GR79 = new IA64Register(79);
|
||||
GR80 = new IA64Register(80);
|
||||
GR81 = new IA64Register(81);
|
||||
GR82 = new IA64Register(82);
|
||||
GR83 = new IA64Register(83);
|
||||
GR84 = new IA64Register(84);
|
||||
GR85 = new IA64Register(85);
|
||||
GR86 = new IA64Register(86);
|
||||
GR87 = new IA64Register(87);
|
||||
GR88 = new IA64Register(88);
|
||||
GR89 = new IA64Register(89);
|
||||
GR90 = new IA64Register(90);
|
||||
GR91 = new IA64Register(91);
|
||||
GR92 = new IA64Register(92);
|
||||
GR93 = new IA64Register(93);
|
||||
GR94 = new IA64Register(94);
|
||||
GR95 = new IA64Register(95);
|
||||
GR96 = new IA64Register(96);
|
||||
GR97 = new IA64Register(97);
|
||||
GR98 = new IA64Register(98);
|
||||
GR99 = new IA64Register(99);
|
||||
GR100 = new IA64Register(100);
|
||||
GR101 = new IA64Register(101);
|
||||
GR102 = new IA64Register(102);
|
||||
GR103 = new IA64Register(103);
|
||||
GR104 = new IA64Register(104);
|
||||
GR105 = new IA64Register(105);
|
||||
GR106 = new IA64Register(106);
|
||||
GR107 = new IA64Register(107);
|
||||
GR108 = new IA64Register(108);
|
||||
GR109 = new IA64Register(109);
|
||||
GR110 = new IA64Register(110);
|
||||
GR111 = new IA64Register(111);
|
||||
GR112 = new IA64Register(112);
|
||||
GR113 = new IA64Register(113);
|
||||
GR114 = new IA64Register(114);
|
||||
GR115 = new IA64Register(115);
|
||||
GR116 = new IA64Register(116);
|
||||
GR117 = new IA64Register(117);
|
||||
GR118 = new IA64Register(118);
|
||||
GR119 = new IA64Register(119);
|
||||
GR120 = new IA64Register(120);
|
||||
GR121 = new IA64Register(121);
|
||||
GR122 = new IA64Register(122);
|
||||
GR123 = new IA64Register(123);
|
||||
GR124 = new IA64Register(124);
|
||||
GR125 = new IA64Register(125);
|
||||
GR126 = new IA64Register(126);
|
||||
GR127 = new IA64Register(127);
|
||||
|
||||
AR_BSP = new IA64Register(128);
|
||||
|
||||
registers = (new IA64Register[] {
|
||||
GR0, GR1, GR2, GR3, GR4, GR5, GR6, GR7, GR8, GR9,
|
||||
GR10, GR11, GR12, GR13, GR14, GR15, GR16, GR17, GR18, GR19,
|
||||
GR20, GR21, GR22, GR23, GR24, GR25, GR26, GR27, GR28, GR29,
|
||||
GR30, GR31, GR32, GR33, GR34, GR35, GR36, GR37, GR38, GR39,
|
||||
GR40, GR41, GR42, GR43, GR44, GR45, GR46, GR47, GR48, GR49,
|
||||
GR50, GR51, GR52, GR53, GR54, GR55, GR56, GR57, GR58, GR59,
|
||||
GR60, GR61, GR62, GR63, GR64, GR65, GR66, GR67, GR68, GR69,
|
||||
GR70, GR71, GR72, GR73, GR74, GR75, GR76, GR77, GR78, GR79,
|
||||
GR80, GR81, GR82, GR83, GR84, GR85, GR86, GR87, GR88, GR89,
|
||||
GR90, GR91, GR92, GR93, GR94, GR95, GR96, GR97, GR98, GR99,
|
||||
GR100, GR101, GR102, GR103, GR104, GR105, GR106, GR107, GR108, GR109,
|
||||
GR110, GR111, GR112, GR113, GR114, GR115, GR116, GR117, GR118, GR119,
|
||||
GR120, GR121, GR122, GR123, GR124, GR125, GR126, GR127, AR_BSP
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
public static final IA64Register FP = AR_BSP;
|
||||
public static final IA64Register SP = GR12;
|
||||
|
||||
|
||||
/** Prefer to use this instead of the constant above */
|
||||
public static int getNumRegisters() {
|
||||
return NUM_REGISTERS;
|
||||
}
|
||||
|
||||
|
||||
public static String getRegisterName(int regNum) {
|
||||
if (regNum < 0 || regNum >= NUM_REGISTERS) {
|
||||
return "[Illegal register " + regNum + "]";
|
||||
}
|
||||
|
||||
if (Assert.ASSERTS_ENABLED) {
|
||||
Assert.that(regNum > -1 && regNum < NUM_REGISTERS, "invalid integer register number!");
|
||||
}
|
||||
|
||||
if (regNum == 128 ) {
|
||||
return "BSP";
|
||||
}
|
||||
|
||||
if (regNum == 12) {
|
||||
return "SP";
|
||||
}
|
||||
|
||||
return "R" + regNum;
|
||||
|
||||
}
|
||||
|
||||
public static IA64Register getRegister(int regNum) {
|
||||
if (Assert.ASSERTS_ENABLED) {
|
||||
Assert.that(regNum > -1 && regNum < NUM_REGISTERS, "invalid register number!");
|
||||
}
|
||||
|
||||
return registers[regNum];
|
||||
}
|
||||
}
|
||||
@@ -1,41 +0,0 @@
|
||||
/*
|
||||
* Copyright (c) 2002, 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.asm.sparc;
|
||||
|
||||
import sun.jvm.hotspot.asm.*;
|
||||
|
||||
class AlternateSpaceLdstubDecoder extends LdstubDecoder {
|
||||
AlternateSpaceLdstubDecoder(int op3, String name, int dataType) {
|
||||
super(op3, name, dataType);
|
||||
}
|
||||
|
||||
Instruction decodeMemoryInstruction(int instruction,
|
||||
SPARCRegisterIndirectAddress addr,
|
||||
SPARCRegister rd,
|
||||
SPARCInstructionFactory factory) {
|
||||
setAddressSpace(instruction, addr);
|
||||
return factory.newLdstubInstruction(name, addr, rd);
|
||||
}
|
||||
}
|
||||
@@ -1,41 +0,0 @@
|
||||
/*
|
||||
* Copyright (c) 2002, 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.asm.sparc;
|
||||
|
||||
import sun.jvm.hotspot.asm.*;
|
||||
|
||||
class AlternateSpaceLoadDecoder extends LoadDecoder {
|
||||
AlternateSpaceLoadDecoder(int op3, String name, int dataType) {
|
||||
super(op3, name, dataType);
|
||||
}
|
||||
|
||||
Instruction decodeMemoryInstruction(int instruction,
|
||||
SPARCRegisterIndirectAddress addr,
|
||||
SPARCRegister rd,
|
||||
SPARCInstructionFactory factory) {
|
||||
setAddressSpace(instruction, addr);
|
||||
return factory.newLoadInstruction(name, op3, addr, rd, dataType);
|
||||
}
|
||||
}
|
||||
@@ -1,41 +0,0 @@
|
||||
/*
|
||||
* Copyright (c) 2002, 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.asm.sparc;
|
||||
|
||||
import sun.jvm.hotspot.asm.*;
|
||||
|
||||
class AlternateSpaceStoreDecoder extends StoreDecoder {
|
||||
AlternateSpaceStoreDecoder(int op3, String name, int dataType) {
|
||||
super(op3, name, dataType);
|
||||
}
|
||||
|
||||
protected Instruction decodeMemoryInstruction(int instruction,
|
||||
SPARCRegisterIndirectAddress addr,
|
||||
SPARCRegister rd,
|
||||
SPARCInstructionFactory factory) {
|
||||
setAddressSpace(instruction, addr);
|
||||
return factory.newStoreInstruction(name, op3, addr, rd, dataType);
|
||||
}
|
||||
}
|
||||
@@ -1,41 +0,0 @@
|
||||
/*
|
||||
* Copyright (c) 2002, 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.asm.sparc;
|
||||
|
||||
import sun.jvm.hotspot.asm.*;
|
||||
|
||||
class AlternateSpaceSwapDecoder extends SwapDecoder {
|
||||
AlternateSpaceSwapDecoder(int op3, String name, int dataType) {
|
||||
super(op3, name, dataType);
|
||||
}
|
||||
|
||||
Instruction decodeMemoryInstruction(int instruction,
|
||||
SPARCRegisterIndirectAddress addr,
|
||||
SPARCRegister rd,
|
||||
SPARCInstructionFactory factory) {
|
||||
setAddressSpace(instruction, addr);
|
||||
return factory.newSwapInstruction(name, addr, rd);
|
||||
}
|
||||
}
|
||||
@@ -1,41 +0,0 @@
|
||||
/*
|
||||
* Copyright (c) 2002, 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.asm.sparc;
|
||||
|
||||
import sun.jvm.hotspot.asm.*;
|
||||
|
||||
class ArithmeticDecoder extends Format3ADecoder {
|
||||
ArithmeticDecoder(int op3, String name, int rtlOperation) {
|
||||
super(op3, name, rtlOperation);
|
||||
}
|
||||
|
||||
Instruction decodeFormat3AInstruction(int instruction,
|
||||
SPARCRegister rs1,
|
||||
ImmediateOrRegister operand2,
|
||||
SPARCRegister rd,
|
||||
SPARCInstructionFactory factory) {
|
||||
return factory.newArithmeticInstruction(name, op3, rtlOperation, rs1, operand2, rd);
|
||||
}
|
||||
}
|
||||
@@ -1,71 +0,0 @@
|
||||
/*
|
||||
* Copyright (c) 2002, 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.asm.sparc;
|
||||
|
||||
import sun.jvm.hotspot.asm.*;
|
||||
|
||||
abstract class BranchDecoder extends InstructionDecoder {
|
||||
|
||||
// format 2 - condition code names.
|
||||
// Appendix F - Opcodes and Condition Codes - Page 231 - Table F-7.
|
||||
static final String integerConditionNames[] = {
|
||||
"bn", "be", "ble", "bl", "bleu", "bcs", "bneg", "bvs",
|
||||
"ba", "bne", "bg", "bge", "bgu", "bcc", "bpos", "bvc"
|
||||
};
|
||||
|
||||
static final String integerAnnuledConditionNames[] = {
|
||||
"bn,a", "be,a", "ble,a", "bl,a", "bleu,a", "bcs,a", "bneg,a", "bvs,a",
|
||||
"ba,a", "bne,a", "bg,a", "bge,a", "bgu,a", "bcc,a", "bpos,a", "bvc,a"
|
||||
};
|
||||
|
||||
// format 2 - condition code names.
|
||||
// Appendix F - Opcodes and Condition Codes - Page 231 - Table F-7.
|
||||
static final String floatConditionNames[] = {
|
||||
"fbn", "fbne", "fblg", "fbul", "fbl", "fbug", "fbg", "fbu",
|
||||
"fba", "fbe", "fbue", "fbge", "fbuge", "fble", "fbule", "fbo"
|
||||
};
|
||||
|
||||
static final String floatAnnuledConditionNames[] = {
|
||||
"fbn,a", "fbne,a", "fblg,a", "fbul,a", "fbl,a", "fbug,a", "fbg,a", "fbu,a",
|
||||
"fba,a", "fbe,a", "fbue,a", "fbge,a", "fbuge,a", "fble,a", "fbule,a", "fbo,a"
|
||||
};
|
||||
|
||||
static boolean getAnnuledBit(int instruction) {
|
||||
return (instruction & ANNUL_MASK) != 0;
|
||||
}
|
||||
|
||||
Instruction decode(int instruction, SPARCInstructionFactory factory) {
|
||||
boolean isAnnuled = getAnnuledBit(instruction);
|
||||
int conditionCode = getConditionCode(instruction);
|
||||
String conditionName = getConditionName(conditionCode, isAnnuled);
|
||||
int offset = extractSignedIntFromNBits(instruction, 22);
|
||||
// word align the offset by right shifting 2 bits
|
||||
offset <<= 2;
|
||||
PCRelativeAddress addr = new PCRelativeAddress(offset);
|
||||
return factory.newBranchInstruction(conditionName, addr, isAnnuled, conditionCode);
|
||||
}
|
||||
|
||||
abstract String getConditionName(int conditionCode, boolean isAnnuled);
|
||||
}
|
||||
@@ -1,35 +0,0 @@
|
||||
/*
|
||||
* Copyright (c) 2002, 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.asm.sparc;
|
||||
|
||||
import sun.jvm.hotspot.asm.*;
|
||||
|
||||
class CallDecoder extends InstructionDecoder {
|
||||
Instruction decode(int instruction, SPARCInstructionFactory factory) {
|
||||
// sign extend, word align the offset
|
||||
int offset = (instruction & DISP_30_MASK) << 2;
|
||||
return factory.newCallInstruction(new PCRelativeAddress(offset));
|
||||
}
|
||||
}
|
||||
@@ -1,45 +0,0 @@
|
||||
/*
|
||||
* Copyright (c) 2002, 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.asm.sparc;
|
||||
|
||||
// format 2 - condition code names.
|
||||
// Appendix F - Opcodes and Condition Codes - Page 231 - Table F-7.
|
||||
|
||||
class CoprocessorBranchDecoder extends BranchDecoder {
|
||||
private static final String coprocessorConditionNames[] = {
|
||||
"cbn", "cb123", "cb12", "cb13", "cb1", "cb23", "cb2", "cb3",
|
||||
"cba", "cb0", "cb03", "cb02", "cb023", "cb01", "cb013", "cb012"
|
||||
};
|
||||
|
||||
private static final String coprocessorAnnuledConditionNames[] = {
|
||||
"cbn,a", "cb123,a", "cb12,a", "cb13,a", "cb1,a", "cb23,a", "cb2,a", "cb3,a",
|
||||
"cba,a", "cb0,a", "cb03,a", "cb02,a", "cb023,a", "cb01,a", "cb013,a", "cb012,a"
|
||||
};
|
||||
|
||||
String getConditionName(int conditionCode, boolean isAnnuled) {
|
||||
return isAnnuled ? coprocessorAnnuledConditionNames[conditionCode]
|
||||
: coprocessorConditionNames[conditionCode];
|
||||
}
|
||||
}
|
||||
@@ -1,44 +0,0 @@
|
||||
/*
|
||||
* Copyright (c) 2002, 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.asm.sparc;
|
||||
|
||||
import sun.jvm.hotspot.asm.*;
|
||||
|
||||
class CoprocessorDecoder extends InstructionDecoder {
|
||||
private int op3;
|
||||
CoprocessorDecoder(int op3) {
|
||||
this.op3 = op3;
|
||||
}
|
||||
|
||||
Instruction decode(int instruction, SPARCInstructionFactory factory) {
|
||||
int rs1Num = getSourceRegister1(instruction);
|
||||
int rs2Num = getSourceRegister2(instruction);
|
||||
int rdNum = getDestinationRegister(instruction);
|
||||
|
||||
return factory.newCoprocessorInstruction(instruction, op3,
|
||||
(instruction & OPC_MASK) >> OPF_START_BIT,
|
||||
rs1Num, rs2Num, rdNum);
|
||||
}
|
||||
}
|
||||
@@ -1,45 +0,0 @@
|
||||
/*
|
||||
* Copyright (c) 2002, 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.asm.sparc;
|
||||
|
||||
import sun.jvm.hotspot.asm.*;
|
||||
import sun.jvm.hotspot.utilities.Assert;
|
||||
|
||||
class FP2RegisterDecoder extends FloatDecoder {
|
||||
|
||||
FP2RegisterDecoder(int opf, String name, int srcType, int resultType) {
|
||||
super(opf, name, srcType, resultType);
|
||||
}
|
||||
|
||||
Instruction decodeFloatInstruction(int instruction,
|
||||
SPARCRegister rs1, SPARCRegister rs2,
|
||||
SPARCRegister rd,
|
||||
SPARCInstructionFactory factory) {
|
||||
if (Assert.ASSERTS_ENABLED)
|
||||
Assert.that(rs2.isFloat() && rd.isFloat(), "rs2, rd have to be float registers");
|
||||
|
||||
return factory.newFP2RegisterInstruction(name, opf, (SPARCFloatRegister)rs2, (SPARCFloatRegister)rd);
|
||||
}
|
||||
}
|
||||
@@ -1,50 +0,0 @@
|
||||
/*
|
||||
* Copyright (c) 2002, 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.asm.sparc;
|
||||
|
||||
import sun.jvm.hotspot.asm.*;
|
||||
import sun.jvm.hotspot.utilities.Assert;
|
||||
|
||||
class FPArithmeticDecoder extends FloatDecoder {
|
||||
private final int rtlOperation;
|
||||
|
||||
FPArithmeticDecoder(int opf, String name, int rtlOperation,
|
||||
int src1Type, int src2Type, int resultType) {
|
||||
super(opf, name, src1Type, src2Type, resultType);
|
||||
this.rtlOperation = rtlOperation;
|
||||
}
|
||||
|
||||
Instruction decodeFloatInstruction(int instruction,
|
||||
SPARCRegister rs1, SPARCRegister rs2,
|
||||
SPARCRegister rd,
|
||||
SPARCInstructionFactory factory) {
|
||||
if (Assert.ASSERTS_ENABLED)
|
||||
Assert.that(rs1.isFloat() && rs2.isFloat() && rd.isFloat(), "rs1, rs2 and rd must be floats");
|
||||
return factory.newFPArithmeticInstruction(name, opf, rtlOperation,
|
||||
(SPARCFloatRegister)rs1,
|
||||
(SPARCFloatRegister)rs2,
|
||||
(SPARCFloatRegister)rd);
|
||||
}
|
||||
}
|
||||
@@ -1,45 +0,0 @@
|
||||
/*
|
||||
* Copyright (c) 2002, 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.asm.sparc;
|
||||
|
||||
import sun.jvm.hotspot.asm.*;
|
||||
import sun.jvm.hotspot.utilities.Assert;
|
||||
|
||||
class FPMoveDecoder extends FloatDecoder {
|
||||
|
||||
FPMoveDecoder(int opf, String name, int srcType, int resultType) {
|
||||
super(opf, name, srcType, resultType);
|
||||
}
|
||||
|
||||
Instruction decodeFloatInstruction(int instruction,
|
||||
SPARCRegister rs1, SPARCRegister rs2,
|
||||
SPARCRegister rd,
|
||||
SPARCInstructionFactory factory) {
|
||||
if (Assert.ASSERTS_ENABLED)
|
||||
Assert.that(rs2.isFloat() && rd.isFloat(), "rs2, rd have to be float registers");
|
||||
|
||||
return factory.newFPMoveInstruction(name, opf, (SPARCFloatRegister)rs2, (SPARCFloatRegister)rd);
|
||||
}
|
||||
}
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user