mirror of
https://github.com/openjdk/jdk7u.git
synced 2026-04-21 09:35:59 -05:00
690 lines
28 KiB
HTML
690 lines
28 KiB
HTML
<?xml version="1.0" encoding="utf-8"?>
|
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
|
|
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
|
|
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
|
|
<meta http-equiv="X-UA-Compatible" content="IE=EmulateIE8">
|
|
<head>
|
|
<title>OpenJDK PowerPC/AIX Port</title>
|
|
<style type="text/css" id="internalStyle">
|
|
pre.terminal {
|
|
display: table;
|
|
color: white;
|
|
background-color: black;
|
|
border-style: solid;
|
|
border-width: 1px;
|
|
border-color: darkgray;
|
|
margin: 8px 0px 5px 0px;
|
|
padding: 2px;
|
|
width: auto;
|
|
overflow: auto;
|
|
font-family: monospace;
|
|
}
|
|
div.toc {
|
|
background-color: #ffffee;
|
|
border-bottom: 1px solid #cccccc;
|
|
border-top: 1px solid #cccccc;
|
|
border-left: 1px solid #cccccc;
|
|
border-right: 1px solid #cccccc;
|
|
padding: 5px;
|
|
position: fixed;
|
|
top: 10px;
|
|
right: 10px;
|
|
margin: 0px 5px 5px 5px;
|
|
line-height: 1.5em;
|
|
font-size: 80%;
|
|
}
|
|
div.tocHeader {
|
|
float: right;
|
|
}
|
|
div.toc ul {
|
|
list-style: none;
|
|
margin-left: 10px;
|
|
padding: 0;
|
|
}
|
|
|
|
div.tocBody > ul > li {
|
|
counter-reset: toc2_counter toc3_counter toc4_counter toc5_counter toc6_counter;
|
|
}
|
|
div.tocBody > ul ul > li {
|
|
counter-reset: toc3_counter toc4_counter toc5_counter toc6_counter;
|
|
}
|
|
div.tocBody > ul ul ul > li {
|
|
counter-reset: toc4_counter toc5_counter toc6_counter;
|
|
}
|
|
div.tocBody > ul ul ul ul > li {
|
|
counter-reset: toc5_counter toc6_counter;
|
|
}
|
|
div.tocBody > ul ul ul ul ul > li {
|
|
counter-reset: toc6_counter;
|
|
}
|
|
div.tocBody > ul ul > li:before {
|
|
content: counter(toc2_counter) "\0000a0";
|
|
counter-increment: toc2_counter;
|
|
}
|
|
div.tocBody > ul ul ul > li:before {
|
|
content: counter(toc2_counter) "." counter(toc3_counter) "\0000a0";
|
|
counter-increment: toc3_counter;
|
|
}
|
|
div.tocBody > ul ul ul ul > li:before {
|
|
content: counter(toc2_counter) "." counter(toc3_counter) "." counter(toc4_counter) "\0000a0";
|
|
counter-increment: toc4_counter;
|
|
}
|
|
div.tocBody > ul ul ul ul ul > li:before {
|
|
content: counter(toc2_counter) "." counter(toc3_counter) "." counter(toc4_counter) "." counter(toc5_counter) "\0000a0";
|
|
counter-increment: toc5_counter;
|
|
}
|
|
div.tocBody > ul ul ul ul ul ul > li:before {
|
|
content: counter(toc2_counter) "." counter(toc3_counter) "." counter(toc4_counter) "." counter(toc5_counter) "." counter(toc6_counter) "\0000a0";
|
|
counter-increment: toc6_counter;
|
|
}
|
|
|
|
|
|
body {
|
|
counter-reset: h2_counter h3_counter h4_counter h5_counter h6_counter;
|
|
}
|
|
h1 {
|
|
counter-reset: h2_counter h3_counter h4_counter h5_counter h6_counter;
|
|
}
|
|
h2 {
|
|
counter-reset: h3_counter h4_counter h5_counter h6_counter;
|
|
}
|
|
h3 {
|
|
counter-reset: h4_counter h5_counter h6_counter;
|
|
}
|
|
h4 {
|
|
counter-reset: h5_counter h6_counter;
|
|
}
|
|
h5 {
|
|
counter-reset: h6_counter;
|
|
}
|
|
h2:before {
|
|
content: counter(h2_counter) "\0000a0";
|
|
counter-increment: h2_counter;
|
|
}
|
|
h3:before {
|
|
content: counter(h2_counter) "." counter(h3_counter) "\0000a0";
|
|
counter-increment: h3_counter;
|
|
}
|
|
h4:before {
|
|
content: counter(h2_counter) "." counter(h3_counter) "." counter(h4_counter) "\0000a0";
|
|
counter-increment: h4_counter;
|
|
}
|
|
h5:before {
|
|
content: counter(h2_counter) "." counter(h3_counter) "." counter(h4_counter) "." counter(h5_counter) "\0000a0";
|
|
counter-increment: h5_counter;
|
|
}
|
|
h6:before {
|
|
content: counter(h2_counter) "." counter(h3_counter) "." counter(h4_counter) "." counter(h5_counter) "." counter(h6_counter) "\0000a0";
|
|
counter-increment: h6_counter;
|
|
}
|
|
</style>
|
|
<script>
|
|
function findElements(node, filter) {
|
|
var result = new Array();
|
|
var children = node.childNodes;
|
|
if (children.length === 0) return result;
|
|
for (var i=0; children[i]; i++) {
|
|
var child = children[i];
|
|
if (filter(child)) {
|
|
result.push(child);
|
|
result = result.concat(findElements(child, filter));
|
|
}
|
|
}
|
|
return result;
|
|
}
|
|
|
|
function headingFilter(node) {
|
|
if (node.nodeType === 1 /*Node.ELEMENT_NODE*/ && /[hH][1-6]/.test(node.nodeName)) {
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
function showOrHideTOC(tocID, buttonID) {
|
|
var toc = document.getElementById(tocID);
|
|
var button = document.getElementById(buttonID);
|
|
if (toc.style.display === "none") {
|
|
toc.style.display="block";
|
|
// Use a Unicode "minus" here, to make it the same width like a "plus"
|
|
// (see http://en.wikipedia.org/wiki/Minus_sign#Character_codes)
|
|
button.innerHTML = "[\u2212] ";
|
|
} else {
|
|
toc.style.display="none";
|
|
button.innerHTML = "[+] ";
|
|
}
|
|
}
|
|
|
|
function createTOCHeader() {
|
|
var tocHeader = document.createElement('div');
|
|
tocHeader.setAttribute("class", "tocHeader");
|
|
var a = document.createElement('a');
|
|
a.setAttribute("href","#");
|
|
a.setAttribute("onclick","showOrHideTOC('_TOC_BODY_', '_TOC_EXPAND_BUTTON_'); return false;");
|
|
var span = document.createElement('span');
|
|
span.setAttribute("id", "_TOC_EXPAND_BUTTON_");
|
|
span.appendChild(document.createTextNode("[\u2212] "));
|
|
a.appendChild(span);
|
|
a.appendChild(document.createTextNode("Table of Contents"));
|
|
tocHeader.appendChild(a);
|
|
return tocHeader;
|
|
}
|
|
|
|
function createTOCBody() {
|
|
var tocBody = document.createElement('div');
|
|
tocBody.setAttribute("class", "tocBody");
|
|
tocBody.setAttribute("id", "_TOC_BODY_");
|
|
return tocBody;
|
|
}
|
|
|
|
function createTOCElement(tocHeader, tocBody) {
|
|
var toc = document.createElement('div');
|
|
toc.setAttribute("class", "toc");
|
|
toc.appendChild(tocHeader);
|
|
toc.appendChild(tocBody);
|
|
return toc;
|
|
}
|
|
|
|
function insertAnchor(heading, anchor) {
|
|
var tag = document.createElement('a');
|
|
tag.setAttribute('name', anchor);
|
|
heading.parentNode.insertBefore(tag, heading);
|
|
}
|
|
|
|
function createLink(heading, anchor) {
|
|
var li = document.createElement('li');
|
|
var a = document.createElement('a');
|
|
a.setAttribute('href', "#" + anchor);
|
|
a.innerHTML = heading.innerHTML;
|
|
li.appendChild(a);
|
|
return li;
|
|
}
|
|
|
|
function createTOC(createIndex) {
|
|
if(typeof(createIndex)==='undefined') createIndex = false;
|
|
var headings = findElements(document.body, headingFilter);
|
|
var tocHeader = createTOCHeader();
|
|
var tocBody = createTOCBody();
|
|
var toc = createTOCElement(tocHeader, tocBody);
|
|
var ul = document.createElement('ul');
|
|
tocBody.appendChild(ul);
|
|
var currentLevel = 1;
|
|
for (var i=0; headings[i]; i++) {
|
|
var heading = headings[i];
|
|
var anchor = "_TOC_ANCHOR_" + i + "_";
|
|
// Create anchor just before the heading
|
|
insertAnchor(heading, anchor);
|
|
// Create the corresponding TOC entry which links right to 'anchor'
|
|
var level = parseInt(heading.nodeName.charAt(1), 10);
|
|
while (level > currentLevel) {
|
|
var _ul = document.createElement('ul');
|
|
if (ul.lastChild === null) {
|
|
ul.appendChild(_ul);
|
|
}
|
|
else {
|
|
ul.lastChild.appendChild(_ul);
|
|
}
|
|
ul = _ul;
|
|
currentLevel++;
|
|
}
|
|
while (level < currentLevel) {
|
|
do {
|
|
ul = ul.parentNode;
|
|
} while (ul.nodeName !== "UL");
|
|
currentLevel--;
|
|
}
|
|
ul.appendChild(createLink(heading, anchor));
|
|
}
|
|
document.body.insertBefore(toc, document.body.firstChild);
|
|
}
|
|
</script>
|
|
</head>
|
|
<body onload="createTOC();">
|
|
|
|
<h1>OpenJDK PowerPC Port</h1>
|
|
|
|
<p>
|
|
This file contains some additional build instructions for
|
|
the <a href="http://openjdk.java.net/projects/ppc-aix-port"> OpenJDK PowerPC
|
|
Port for Linux and AIX</a>. It complements the general
|
|
OpenJDK <a href="http://hg.openjdk.java.net/ppc-aix-port/jdk7u/raw-file/tip/README-builds.html">
|
|
README-builds.html</a> file.
|
|
</p>
|
|
|
|
<h2>Building on Linux/PPC64</h2>
|
|
|
|
<p>
|
|
Currently, i.e. all versions after
|
|
revision <a href="http://hg.openjdk.java.net/ppc-aix-port/jdk7u/file/ppc-aix-port-b01"><em>ppc-aix-port-b01</em></a>,
|
|
should successfully build and run on Linux/PPC64. Passing
|
|
<code>CORE_BUILD=true</code> on the build comamnd line will instruct the build
|
|
system to create an interpreter-only version of the VM which is in general about
|
|
an order of magnitude slower than a corresponding server VM with JIT
|
|
compiler. But it is still fully functional (e.g. it passes JVM98) and can even
|
|
be used to bootstrap itself. Starting with
|
|
revision <a href="http://hg.openjdk.java.net/ppc-aix-port/jdk7u/file/ppc-aix-port-b03"><em>ppc-aix-port-b03</em></a>,
|
|
it is possible to build without <code>CORE_BUILD=true</code> and create a
|
|
JIT-enabled version of the VM (containing the C2 "<em>Server</em>" JIT
|
|
compiler).
|
|
</p>
|
|
|
|
<p>
|
|
Our current build system is a Power6 box running
|
|
SLES 10.3 with gcc version 4.1.2 (in general, more recent Linux distributions
|
|
should work as well).
|
|
</p>
|
|
|
|
<h3>Building with the OpenJDK Linux/PPC64 port as bootstrap JDK</h3>
|
|
|
|
<p>
|
|
A precompiled build of <em>ppc-aix-port-b03</em> is available
|
|
for <a href="http://openjdkpower.osuosl.org/OpenJDK/download/bootstrap/openjdk1.7.0-ppc-aix-port-linux-ppc64-b03.tar.bz2">download</a>.
|
|
With it and together with the other build dependencies fulfilled as described
|
|
in the
|
|
main <a href="http://hg.openjdk.java.net/ppc-aix-port/jdk7u/raw-file/tip/README-builds.html">
|
|
README-builds.html</a> file you can build a debug version of the JDK from the
|
|
top-level source directory with the following command line (additionally
|
|
pass <code>CORE_BUILD=true</code> to build an interpreter-only version of the VM):
|
|
</p>
|
|
|
|
<pre class="terminal">
|
|
> make FT_CFLAGS=-m64 LANG=C \
|
|
ALT_BOOTDIR=<path_to>/jdk1.7.0-ppc-aix-port-b01 \
|
|
ARCH_DATA_MODEL=64 \
|
|
HOTSPOT_BUILD_JOBS=8 \
|
|
PARALLEL_COMPILE_JOBS=8 \
|
|
ALT_FREETYPE_LIB_PATH=/usr/local/lib \
|
|
ALT_FREETYPE_HEADERS_PATH=/usr/local/include \
|
|
ANT_HOME=/usr/local/apache-ant-1.8.4 \
|
|
VERBOSE=true \
|
|
CC_INTERP=true \
|
|
OPENJDK=true \
|
|
debug_build 2>&1 | tee build_ppc-aix-port_dbg.log
|
|
</pre>
|
|
|
|
<p>
|
|
After the build finished successfully the results can be found under
|
|
<tt>./build/linux-ppc64-debug/</tt>. Product and fastdebug versions can be
|
|
build with the make targets <tt>product_build</tt> and
|
|
<tt>fastdebug_build</tt> respectively (the build results will be located under
|
|
<tt>./build/linux-ppc64/</tt> and <tt>./build/linux-ppc64-fastdebug/</tt>). On
|
|
our transitional <a
|
|
href="http://cr.openjdk.java.net/~simonis/ppc-aix-port/index.html">ppc-aix-port
|
|
project page</a> you can find the build logs of our regular nightly makes.
|
|
</p>
|
|
|
|
<h4>Problems with pre-installed ANT on newer Linux distros</h4>
|
|
|
|
<p>
|
|
Notice that pre-installed ANT version (i.e. ANT versions installed with the
|
|
corresponding system package manager) may cause problems in conjunction with
|
|
our bootstrap JDK. This is because they use various scripts from the
|
|
<a href="http://www.jpackage.org/">jpackage</a> project to locate specific Java
|
|
libraries and jar files. These scripts (in particular
|
|
<code>set_jvm_dirs()</code>
|
|
in <code>/usr/share/java-utils/java-functions</code>) expect that executing
|
|
"<code>java -fullversion</code>" will return a string starting with "java" but
|
|
our OpenJDK port returns a string starting with "openjdk" instead.
|
|
</p>
|
|
|
|
<p>
|
|
The problem can be easily solved by either editing the regular expressions
|
|
which parse the version string
|
|
in <code>/usr/share/java-utils/java-functions</code> (or the respective file of
|
|
your Linux distribution) or by installing a plain version of ANT
|
|
from <a href="http://ant.apache.org/bindownload.cgi">http://ant.apache.org/bindownload.cgi</a>
|
|
and passing its installation directory to the build via
|
|
the <code>ANT_HOME</code> environment variable.
|
|
</p>
|
|
|
|
<h3>Building with the IBM JDK for Linux/PPC64 as bootstrap JDK</h3>
|
|
|
|
<p>
|
|
It is also possible to build with an <a
|
|
href="http://www.ibm.com/developerworks/java/jdk/linux/download.html#java7">IBM
|
|
JDK 7</a> bootstrap JDK (after all this is how we initially bootstrapped the
|
|
port). But because the IBM JDK uses a different default implementation of the
|
|
<tt>idlj</tt> and <tt>rmic</tt> compilers you will have to add the following
|
|
two additional variables to the build command line to force the IBM JDK to
|
|
fall back to the default Sun/Oracle version of the mentioned compilers (notice
|
|
that the single quotes are crucial here to prevent the immediate expansion of
|
|
<tt>$(ALT_BOOTDIR)</tt>):
|
|
</p>
|
|
|
|
<pre class="terminal">
|
|
IDLJ='$(ALT_BOOTDIR)/bin/java -cp $(ALT_BOOTDIR)/lib/tools.jar com.sun.tools.corba.se.idl.toJavaPortable.Compile'
|
|
RMIC='$(ALT_BOOTDIR)/bin/java -cp $(ALT_BOOTDIR)/lib/tools.jar sun.rmi.rmic.Main'
|
|
</pre>
|
|
|
|
<p>
|
|
We successfully used build <tt>pxp6470-20110827_01</tt> of the IBM JDK but
|
|
there have been <a
|
|
href="http://mail.openjdk.java.net/pipermail/ppc-aix-port-dev/2012-July/thread.html#21">reports</a>
|
|
on the <a
|
|
href="http://mail.openjdk.java.net/mailman/listinfo/ppc-aix-port-dev">ppc-aix-port-dev</a>
|
|
mailing list that newer version of the IBM JDK (starting with build <tt>pxp6470sr1-20120330_01(SR1)</tt>) require some additional
|
|
tweaking. Neil Richards advised in that mail thread to "<em>Just rename lib/ibmorbtools.jar to be something else.
|
|
As the tools.jar tries to chain onto a file of that name, and that file
|
|
contains the rmicext.properties files with the IBM-impl settings, moving
|
|
that file off to one side should consistently cause rmic invocations to
|
|
use the OpenJDK rmic IIOP generator.
|
|
Approaching things this way would also mean one would not need to use
|
|
the RMIC setting.
|
|
(NB: One still need to use the IDLJ setting to use the OpenJDK idlj
|
|
implementation, especially as moving the ibmorbtools.jar file aside also
|
|
eliminates the IBM idlj implementation from the classpath).</em>"
|
|
</p>
|
|
|
|
<p>
|
|
For historical reasons two old build logs of a debug and a product build
|
|
bootstrapped with the IBM JDK are still available for inspection: <a
|
|
href="http://openjdkpower.osuosl.org/OpenJDK/download/build-logs/output_ppc-aix-port_dbg.log">output_ppc-aix-port_dbg.log</a>,
|
|
<a
|
|
href="http://openjdkpower.osuosl.org/OpenJDK/download/build-logs/output_ppc-aix-port_opt.log">output_ppc-aix-port_opt.log</a>.
|
|
</p>
|
|
|
|
<h3>Running the OpenJDK Linux/PPC64 port</h3>
|
|
|
|
<p>
|
|
Running the freshly build VM should give the following output:
|
|
</p>
|
|
|
|
<pre class="terminal">
|
|
> build/linux-ppc64-debug/bin/java -showversion HelloWorld
|
|
openjdk version "1.7.0-internal"
|
|
OpenJDK Runtime Environment (build 1.7.0-internal-jvmtests_2012_12_16_22_14-b00)
|
|
OpenJDK 64-Bit Server VM (build 23.2-b04, mixed mode)
|
|
|
|
HelloWorld
|
|
</pre>
|
|
|
|
<h2>Building on AIX/PPC64</h2>
|
|
|
|
<p>
|
|
Currently, i.e. all versions after revision <a
|
|
href="http://hg.openjdk.java.net/ppc-aix-port/jdk7u/file/ppc-aix-port-b02"><em>ppc-aix-port-b02</em></a>,
|
|
should successfully build and run on AIX. Passing
|
|
<code>CORE_BUILD=true</code> on the build comamnd line will instruct the build
|
|
system to create an interpreter-only version of the VM which is in general about
|
|
an order of magnitude slower than a corresponding server VM with JIT
|
|
compiler. But it is still fully functional (e.g. it passes JVM98) and can even
|
|
be used to bootstrap itself. Starting with
|
|
revision <a href="http://hg.openjdk.java.net/ppc-aix-port/jdk7u/file/ppc-aix-port-b03"><em>ppc-aix-port-b03</em></a>,
|
|
it is possible to build without <code>CORE_BUILD=true</code> and create a
|
|
JIT-enabled version of the VM (containing the C2 "<em>Server</em>" JIT
|
|
compiler).
|
|
</p>
|
|
|
|
<h3>Building with the OpenJDK AIX/PPC64 port as bootstrap JDK</h3>
|
|
|
|
<p>
|
|
A precompiled build of <em>ppc-aix-port-b03</em> is available
|
|
for <a href="http://openjdkpower.osuosl.org/OpenJDK/download/bootstrap/openjdk1.7.0-ppc-aix-port-aix-ppc64-b03.tar.bz2">download</a>.
|
|
We recommend using it or a self compiled OpenJDK version for AIX as bootstrap JDK.
|
|
</p>
|
|
|
|
<h3>Building with the IBM JDK for AIX as bootstrap JDK</h3>
|
|
|
|
<p>
|
|
It is also possible to build with an <a
|
|
href="http://www.ibm.com/developerworks/java/jdk/aix/service.html#java6">IBM
|
|
JDK 6</a> bootstrap JDK (after all this is how we initially bootstrapped the
|
|
port). But because the IBM JDK uses a different default implementation of the
|
|
<tt>idlj</tt> and <tt>rmic</tt> compilers you will have to rename or
|
|
delete <code>lib/ibmorbtools.jar</code> and add the following additional
|
|
variable to the build command line to force the IBM JDK to fall back to the
|
|
default Sun/Oracle version of the IDLJ compiler (notice that the the single
|
|
quotes are crucial here to prevent the immediate expansion of
|
|
<tt>$(ALT_BOOTDIR)</tt>):
|
|
</p>
|
|
|
|
<pre class="terminal">
|
|
IDLJ='$(ALT_BOOTDIR)/bin/java -cp $(ALT_BOOTDIR)/lib/tools.jar com.sun.tools.corba.se.idl.toJavaPortable.Compile'
|
|
</pre>
|
|
|
|
<h3>AIX build dependencies</h3>
|
|
|
|
<p>
|
|
Our current build system is based on AIX 5.3 in order to produce binaries which
|
|
can be run on any AIX version higher than 5.3. However building on
|
|
newer version of AIX should in general work equally well (from time to time we
|
|
build on AIX 7.1 as well). It should be noticed
|
|
that the current build infrastructure only supports the
|
|
commercial <a href="http://www-01.ibm.com/software/awdtools/xlcpp/">XL
|
|
C/C++</a> compilers from IBM so getting a copy of the XL C/C++ compiler suite
|
|
10.1 (or higher) is the first prerequisite that has to be fulfilled. You also
|
|
need to to have the "AIXwindows Application Development Toolkit for X
|
|
Extensions" (i.e. <code>X11.adt.ext</code>) package installed on your
|
|
system. You can check this by doing:
|
|
</p>
|
|
|
|
<pre class="terminal">
|
|
> lslpp -l X11.adt.ext
|
|
Fileset Level State Description
|
|
----------------------------------------------------------------------------
|
|
Path: /usr/lib/objrepos
|
|
X11.adt.ext 7.1.0.0 COMMITTED AIXwindows Application
|
|
Development Toolkit for X
|
|
Extensions
|
|
</pre>
|
|
|
|
<p>
|
|
There are several other build dependencies (mostly described in the
|
|
general <a href="http://hg.openjdk.java.net/ppc-aix-port/jdk7u/raw-file/tip/README-builds.html">
|
|
README-builds.html</a> file) which are a little more complicate to fulfill on
|
|
AIX than on Linux platforms, but they are all freely available as described in
|
|
the following section.
|
|
</p>
|
|
|
|
|
|
<h4>Mercurial & Python</h4>
|
|
|
|
<p>
|
|
The first thing to install
|
|
is <a href="http://mercurial.selenic.com">Mercurial</a>. The
|
|
Mercurial <a href=" http://mercurial.selenic.com/wiki/Download">download
|
|
wiki</a> contains a
|
|
special <a href="http://mercurial.selenic.com/wiki/Download#AIX">AIX</a>
|
|
section which links
|
|
to <a href="http://www.lunch.org.uk/wiki/aix_packages">http://www.lunch.org.uk/wiki/aix_packages</a>. The
|
|
site provides various <a href="http://www.lunch.org.uk/aix/rpms">RPM
|
|
packeges</a> for AIX 5.2 and higher. Download and
|
|
install <a href="http://www.lunch.org.uk/aix/rpms/python-2.4.6-1.aix5.2.ppc.rpm">python-2.4.6-1.aix5.2.ppc.rpm</a>
|
|
and <a href="http://www.lunch.org.uk/aix/rpms/mercurial-2.3.1-0.aix5.2.ppc.rpm">mercurial-2.3.1-0.aix5.2.ppc.rpm</a>
|
|
(with <code>rpm -i <package-name>.rpm</code>). All the "free" software
|
|
packages will be installed by default into the <code>/opt/freeware</code>
|
|
subdirectory under AIX which seems to be the equivalent
|
|
to <code>/usr/local</code> on Linux platforms.
|
|
</p>
|
|
|
|
<p>
|
|
Notice that Python has a lot of dependencies on other freeware packages
|
|
from <code>/opt/freeware</code> and you'll have to download and install them
|
|
first before the installation of Python succeeds. Fortunately these packages can
|
|
be downloaded directly from IBM's
|
|
<a href="http://www-03.ibm.com/systems/power/software/aix/linux/toolbox/alpha.html">AIX
|
|
Toolbox for Linux Applications</a> site (if you don't have the RPM package
|
|
manager installed already you'll first have to get
|
|
the <a href="ftp://public.dhe.ibm.com/aix/freeSoftware/aixtoolbox/INSTALLP/ppc/rpm.rte">AIX
|
|
installp image for the rpm package manager for POWER</a> and install it with
|
|
the command '<code>installp -qacXgd rpm.rte rpm.rte
|
|
</code>'). On my AIX box, I had to install the following additional packages:
|
|
</p>
|
|
|
|
<ul>
|
|
<li><a href="ftp://ftp.software.ibm.com/aix/freeSoftware/aixtoolbox/RPMS/ppc/bzip2/bzip2-1.0.5-3.aix5.3.ppc.rpm">bzip2-1.0.5-3.aix5.3.ppc.rpm</a></li>
|
|
<li><a href="ftp://ftp.software.ibm.com/aix/freeSoftware/aixtoolbox/RPMS/ppc/db/db-3.3.11-4.aix5.1.ppc.rpm">db-3.3.11-4.aix5.1.ppc.rpm</a></li>
|
|
<li><a href="ftp://ftp.software.ibm.com/aix/freeSoftware/aixtoolbox/RPMS/ppc/gdbm/gdbm-1.8.3-5.aix5.2.ppc.rpm">gdbm-1.8.3-5.aix5.2.ppc.rpm</a></li>
|
|
<li><a href="ftp://ftp.software.ibm.com/aix/freeSoftware/aixtoolbox/RPMS/ppc/zlib/zlib-1.2.3-4.aix5.2.ppc.rpm">zlib-1.2.3-4.aix5.2.ppc.rpm</a></li>
|
|
<li><a href="ftp://ftp.software.ibm.com/aix/freeSoftware/aixtoolbox/RPMS/ppc/readline/readline-4.3-2.aix5.1.ppc.rpm">readline-4.3-2.aix5.1.ppc.rpm</a></li>
|
|
</ul>
|
|
|
|
<p>
|
|
Python also requires OpenSSL which is available from the "AIX Toolbox for Linux
|
|
Applications" as well, but only after signing in with a universal IBM user
|
|
ID, which can be obtained for free
|
|
(follow the
|
|
link <a href="http://www.ibm.com/services/forms/preLogin.do?source=aixtbx">AIX
|
|
Toolbox Cryptographic Content</a> on
|
|
the <a href="http://www-03.ibm.com/systems/power/software/aix/linux/toolbox/download.html">IBM
|
|
AIX Toolbox download information</a> page).
|
|
</p>
|
|
|
|
<h4>GNU Make</h4>
|
|
|
|
Unfortunately, the GNU Make package available from the "AIX Toolbox for Linux
|
|
Applications" is too old (version 3.80 vs. 3.82) for building OpenJDK so we
|
|
have to build our own one. Fortunately, that's not too hard:
|
|
|
|
<pre class="terminal">
|
|
> wget http://ftp.gnu.org/gnu/make/make-3.82.tar.gz
|
|
> tar -xzf make-3.82.tar.gz
|
|
> cd make-3.82
|
|
> CC=xlc_r ./configure --prefix=/opt/freeware
|
|
> make
|
|
> make install
|
|
</pre>
|
|
|
|
|
|
<h4>Freetype, Cups and friends</h4>
|
|
|
|
<p>
|
|
Luckily, a sufficiently new version of Freetype is available from the "AIX
|
|
Toolbox for Linux Applications" site as well. We need the Freetype development
|
|
package which itself has dependencies as listed below:
|
|
</p>
|
|
|
|
<ul>
|
|
<li><a href="ftp://ftp.software.ibm.com/aix/freeSoftware/aixtoolbox/RPMS/ppc/freetype2/freetype2-2.3.9-1.aix5.2.ppc.rpm">freetype2-2.3.9-1.aix5.2.ppc.rpm</a></li>
|
|
<li><a href="ftp://ftp.software.ibm.com/aix/freeSoftware/aixtoolbox/RPMS/ppc/freetype2/freetype2-devel-2.3.9-1.aix5.2.ppc.rpm">freetype2-devel-2.3.9-1.aix5.2.ppc.rpm</a></li>
|
|
<li><a href="ftp://ftp.software.ibm.com/aix/freeSoftware/aixtoolbox/RPMS/ppc/zlib/zlib-devel-1.2.3-4.aix5.2.ppc.rpm">zlib-devel-1.2.3-4.aix5.2.ppc.rpm</a></li>
|
|
<li><a href="ftp://ftp.software.ibm.com/aix/freeSoftware/aixtoolbox/RPMS/ppc/pkg-config/pkg-config-0.19-6.aix5.2.ppc.rpm">pkg-config-0.19-6.aix5.2.ppc.rpm</a></li>
|
|
</ul>
|
|
|
|
<p>
|
|
Notice that the Freetype package will only install a single archive
|
|
under <code>/opt/freeware/lib/libfreetype.a</code> but that archive contains
|
|
both 32- and 64-bit versions of the <code>libfreetype.so</code> shared library:
|
|
</p>
|
|
|
|
<pre class="terminal">
|
|
> ar -vt -Xany /opt/freeware/lib/libfreetype.a
|
|
rwxr-xr-x 0/0 966393 Aug 21 01:42 2009 libfreetype.so.6
|
|
rwxr-xr-x 0/0 1048680 Aug 21 01:41 2009 libfreetype.so.6
|
|
</pre>
|
|
|
|
<p>
|
|
During a 64-bit build, the compiler will "magically" find the right version of
|
|
the shared library from the archive.
|
|
</p>
|
|
|
|
<p>
|
|
Unfortunately the "AIX Toolbox for Linux Applications" site provides no Cups
|
|
package, so I
|
|
took <a href="ftp://www.oss4aix.org/latest/aix53/cups-devel-1.6.1-1.aix5.3.ppc.rpm">cups-devel-1.6.1-1.aix5.3.ppc.rpm</a>
|
|
from <a href="http://www.perzl.org/aix/">http://www.perzl.org/aix/</a>, another
|
|
great site with precompiled open source software for AIX. The Cups development
|
|
package has a lot of dependencies, but because the OpenJDK build only needs the
|
|
Cups header files it is enough to force the installation of the Cups
|
|
development package with <code>rpm -i --nodeps
|
|
cups-devel-1.6.1-1.aix5.3.ppc.rpm</code>.
|
|
</p>
|
|
|
|
<p>
|
|
The default AIX <code>tar</code> may give you errors like
|
|
"<code>/usr/bin/tar: arg list too long</code>" during the build
|
|
process so we strongly recommend to install
|
|
the <a href="ftp://ftp.software.ibm.com/aix/freeSoftware/aixtoolbox/RPMS/ppc/tar/tar-1.14-2.aix5.1.ppc.rpm">tar-1.14-2.aix5.1.ppc.rpm</a>
|
|
package from IBM's AIX Toolbox for Linux Applications site.
|
|
</p>
|
|
|
|
<h4>Setting up the <code>PATH</code> and building</h4>
|
|
|
|
<p>
|
|
If you prepend <code>/opt/freeware/bin</code> to you <code>PATH</code>
|
|
environment variable you should be finally able to start the build with the
|
|
following command line (additionally pass <code>CORE_BUILD=true</code> to build
|
|
an interpreter-only version of the VM):
|
|
</p>
|
|
|
|
<pre class="terminal">
|
|
make debug_build \
|
|
ALT_BOOTDIR=/usr/work/openjdk/nb/rs6000_64/last_known_good/output-jdk7u/j2sdk-image \
|
|
ANT_HOME=/sapmnt/depot/tools/gen/java/OpenSource/Ant/1.8.0 \
|
|
ALT_FREETYPE_LIB_PATH=/opt/freeware/lib \
|
|
ALT_FREETYPE_HEADERS_PATH=/opt/freeware/include \
|
|
ALT_CUPS_HEADERS_PATH=/opt/freeware/include \
|
|
VERBOSE=true \
|
|
CC_INTERP=true \
|
|
OPENJDK=true \
|
|
HOTSPOT_BUILD_JOBS=8 \
|
|
PARALLEL_COMPILE_JOBS=8 2>&1 | tee /priv/d046063/OpenJDK/output-ppc-aix-port-debug.log
|
|
</pre>
|
|
|
|
<p>
|
|
After the build finished successfully the results can be found under
|
|
<tt>./build/aix-ppc64-debug/</tt>. Product and fastdebug versions can be
|
|
build with the make targets <tt>product_build</tt> and
|
|
<tt>fastdebug_build</tt> respectively (the build results will be located under
|
|
<tt>./build/aix-ppc64/</tt> and <tt>./build/aix-ppc64-fastdebug/</tt>). On
|
|
our transitional <a
|
|
href="http://cr.openjdk.java.net/~simonis/ppc-aix-port/index.html">ppc-aix-port
|
|
project page</a> you can find the build logs of our regular nightly makes.
|
|
</p>
|
|
|
|
<h3>Running the OpenJDK AIX/PPC64 port</h3>
|
|
|
|
<p>
|
|
Running the freshly build VM should give the following output:
|
|
</p>
|
|
|
|
<pre class="terminal">
|
|
> build/aix-ppc64-debug/bin/java -showversion HelloWorld
|
|
openjdk version "1.7.0-internal-debug"
|
|
OpenJDK Runtime Environment (build 1.7.0-internal-jvmtests_2012_12_16_23_22-b00)
|
|
OpenJDK 64-Bit Server VM (build 23.2-b04, mixed mode)
|
|
|
|
HelloWorld
|
|
</pre>
|
|
|
|
<h4>Fonts and Fontconfig (optional)</h4>
|
|
|
|
<p>
|
|
If you want to run AWT/Swing applications you have to install
|
|
the <a href="ftp://ftp.software.ibm.com/aix/freeSoftware/aixtoolbox/RPMS/ppc/fontconfig/fontconfig-2.4.2-1.aix5.2.ppc.rpm">fontconfig</a>
|
|
package from the "AIX Toolbox for Linux Applications" site as described
|
|
before. You will also have to install at least the "AIXwindows Latin Type1
|
|
Fonts" package (<code>X11.fnt.iso_T1</code>) because Fontconfig
|
|
and the <code>fontconfig.properties</code> file of the OpenJDK currently rely on
|
|
the standard Type1 Postscript fonts. If you want to use other Type 1 or
|
|
TrueType fonts (e.g. <code>X11.fnt.ucs.ttf</code>) you'll probably have to edit
|
|
the
|
|
local <a href="http://www.freedesktop.org/software/fontconfig/fontconfig-user.html">Fontconfig
|
|
configuration file</a> (under <code>/opt/freeware/etc/fonts/local.conf</code>)
|
|
and
|
|
the <a href="http://download.java.net/jdk8/docs/technotes/guides/intl/fontconfig.html"><code><openjdk-path>/jre/lib/fontconfig.properties</code>
|
|
</a> file of your OpenJDK image.
|
|
</p>
|
|
|
|
<p>
|
|
Also remember that we currently dynamically link against Freetype (see build
|
|
dependencies above) so if you copy the build results to another AIX machine you
|
|
have to ensure that the new host has at
|
|
least <a href="ftp://ftp.software.ibm.com/aix/freeSoftware/aixtoolbox/RPMS/ppc/freetype2/freetype2-2.3.9-1.aix5.2.ppc.rpm">freetype2-2.3.9-1.aix5.2.ppc.rpm</a>
|
|
installed.
|
|
</p>
|
|
|
|
<h4>Memory requirements</h4>
|
|
|
|
<p>
|
|
Our VM is currently optimized for server class loads. This means that besides
|
|
the usual Java heap settings which are controlled trough command line options
|
|
the user has to make sure the environment provides reasonable data segment and
|
|
the stack size limits. We recommend setting the stack size limit to 4MB
|
|
(e.g. call '<code>ulimit -s 4000</code>') and the data segment limit to 1GB
|
|
(e.g. call '<code>ulimit -d 1000000</code>'). Higher limits should be OK (the
|
|
current limits can be inspected with '<code>ulimit -a</code>').
|
|
</p>
|
|
|
|
</body>
|
|
</html>
|