Mercurial > hg > openjdk > jdk7u
view README-ppc.html @ 1308:ad45b14baece default tip
Added tag jdk7u301-ga for changeset 69eb8e28a42d
author | bae |
---|---|
date | Thu, 15 Apr 2021 20:51:26 +0300 |
parents | 974935f4e21d |
children |
line wrap: on
line source
<?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>