Skip to content

apache/harmony-classlib

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
README
======


This directory contains the Apache Harmony class library code.


Contents
--------
After checking out the code onto disk at <EXTRACT_DIR> you should find the
following directories under <EXTRACT_DIR> :

*  make     - support for building the source code and packaging the results.

*  depends  - support files (both text and binary) that are required to build
              the class libraries and any native libraries required. Includes
              several third party source files as detailed in the file
              Harmony/depends/oss/README.txt.
               
*  doc      - configuration files and images that are required to generate
              HTML documentation of the Java and C source using the Doxygen
              documentation system. Pre-genenerated HTML is included. 
               
*  modules  - Java, C/C++, assembly source files that can be compiled into the
              class library component files.

*  support  - Java source files used to support test cases across various modules.


Export Notice
-------------

This distribution includes cryptographic software.  The country in 
which you currently reside may have restrictions on the import, 
possession, use, and/or re-export to another country, of 
encryption software.  BEFORE using any encryption software, please 
check your country's laws, regulations and policies concerning the
import, possession, or use, and re-export of encryption software, to 
see if this is permitted.  See http://www.wassenaar.org/ for more
information.

The U.S. Government Department of Commerce, Bureau of Industry and
Security (BIS), has classified this software as Export Commodity 
Control Number (ECCN) 5D002.C.1, which includes information security
software using or performing cryptographic functions with asymmetric
algorithms.  The form and manner of this Apache Software Foundation
distribution makes it eligible for export under the License Exception
ENC Technology Software Unrestricted (TSU) exception (see the BIS 
Export Administration Regulations, Section 740.13) for both object 
code and source code.

The following provides more details on the included cryptographic
software:

Apache Harmony contains code that is specifically designed to enable
cryptography.  In particular Apache Harmony contains an implementation
the Java cryptographic extensions.  In addition, binary distributions
of Apache Harmony may contain cryptographic functionality provided by
The Legion of the Bouncy Castle (http://www.bouncycastle.org).


Pre-requisites for Building
---------------------------
In order to build the source code contained in the modules and support
directories, it is necessary to configure the following tools in the user 
environment. That is, the working environment should be such that the PATH 
environment variable contains all of the directories where the executables of
the tools listed below are located and that all of those executables can be 
successfully invoked from the command line.


* C compiler - on Windows, the Microsoft(R) 32-bit C/C++ Compiler and on
               Linux, the GNU project C/C++ Compiler.

* Java compiler - By default, the build scripts are setup to use the Eclipse
                  compiler (ECJ). The ECJ needs to be in the Ant class path
                  to execute correctly. The ECJ JAR is downloaded when the 
                  'fetch-depends' target is run on the top-level build script.
                  Once downloaded copy the JAR from HARMONY_TRUNK/depends/ecj_x.x
                  folder to the ANT_HOME/lib folder.
                  
* Apache Ant - A Java based build tool. See http://ant.apache.org/.
               It's suggested that the ANT_OPTS environment variable be set
               to a value of "-Xms256M -Xmx512M" while running the build scripts
               for Harmony.

* Doxygen - the open source documentation system for a variety of programming 
            languages including C, C++ and Java.
            See http://www.doxygen.org
            

The top-level Ant script <EXTRACT_DIR>/build.xml has a default target 
which builds both the Java source and C source files. It is expected
therefore that, at a minimum, a C compiler and a Java compiler be available.
Doxygen is only necessary if generation of HTML documentation from the
source code is to be carried out by invoking Ant with the "doc" target on
the <EXTRACT_DIR>/build.xml script. As a convenience, pre-generated
HTML files are already stored in subversion.



Building
--------
The simplest way to get started is to change directory into <EXTRACT_DIR> and
then type "ant" to run Apache Ant against the default target of the build.xml
file. Provided that the required compilers are available, Ant will proceed to
compile all the class library source code.


Building Java
-------------
The class files output from the Java compilation will be assembled into a set
of JAR files which reflect the components of the class libraries (see
http://wiki.apache.org/harmony/ClassLibrary for more information). Together with
the required support files, these JAR files will then be laid out in the boot
directory of the following directory tree structure ...

<EXTRACT_DIR>
       |
       \---deploy
             |
             \---jdk
                  |
                  \---jre
                       |
                       +---bin           <- classlibrary native code & launcher
                       |   |
                       |   +---default   <- VM-specific files for launcher's default VM
                       |   +---vm1       <- VM-specific files for 'vm1'
                       |   \---vm2       <- VM-specific files for 'vm2', and so on
                       |
                       \---lib
                           |
                           +---boot      <- common JARs for bootclasspath
                           | 
                           +---ext       <- extensions directory
                           |
                           \---security
    


Building Natives
----------------
Next, the source files contained under <EXTRACT_DIR>/modules will be
built using the available C/C++/ASM compiler. The output from this stage will be the 
creation of a launcher executable (java.exe on Windows, java on Linux) in the 
bin directory of the above layout together with a number of shared libraries
(with the .dll extension on Windows, and .so on Linux). 

On Windows if the native build exits with the message :

fatal error U1052: file 'ntwin32.mak' not found

this is an indication that the required build environment has not been properly
configured in the working console window. 



Build Output
------------
The supplied source is built into a set of Java class libraries and the native 
shared libraries necessary to support their correct functioning. In order to 
be used to run a compiled Java application the built class libraries still
require a virtual machine component. 



Building Documentation
----------------------
Two sets of HTML files can be found under the <EXTRACT_DIR>/doc directory. 

* kernel_doc - contains HTML documentation on the set of Java classes called the
               "kernel classes". These are the set of classes which - under the
               Harmony class library architecture - are closely tied to
               the structure of the VM. 
               Browse <EXTRACT_DIR>/doc/kernel_doc/html/index.html

* vm_doc - contains HTML documentation concerned with how the Java class
           libraries may be used on different VM implementations. This includes
           an overview of the external dependencies of the class libraries 
           and introduces a VM interface through which the class library natives
           and VM can interoperate with one another.        
           Browse <EXTRACT_DIR>/doc/vm_doc/html/index.html

Running the "doc" target of the top-level Ant script
<EXTRACT_DIR>/build.xml will refresh the contents of these directories.
The target makes use of the doxygen tool and so expects the doxygen executable
to be available in the current user environment (i.e the user PATH environment
variable should contain an entry for <DOXYGEN_INSTALL_DIR>/bin ). 



Modifying the Java Build Compiler
---------------------------------
By default, the Java compiler is set to use the ECJ compiler. This value is
set in the HARMONY_TRUNK/make/properties.xml and looks like the following XML
element.

<property name="hy.javac.compiler" value="org.eclipse.jdt.core.JDTCompilerAdapter" />

The compiler can be set to "modern", as per the Ant manual, which will cause Ant
to use the JDK's 'javac' tool. You may also need to change the 'build.compilerarg'
to '-nowarn' instead of the JDT '-warn:none'.


Options for ECJ compiler
------------------------

For more information on configuring the ECJ, check out this document on the batch
compiler - http://dev.eclipse.org/viewcvs/index.cgi/*checkout*/jdt-core-home/howto/batch%20compile/batchCompile.html?rev=HEAD&content-type=text/html.


What's Next ?
-------------

The class libraries do not provide the full JSE API. Instead the included source
is only a subset of the Java 1.5 API.


To test out the functionality of the built class library components a compatible
VM needs to be obtained.  A compatible VM implements the Virtual Machine Interface
as described in the documentation above.


Troubleshooting & Known Problems
--------------------------------

Linux users may need to install an appropriate libc compatibility patch to their
operating system if they see the following error message when attempting to run
a Java application with the built class library components on a compatible VM :

<error: unable to load ICUInterface34 (libstdc++.so.5: cannot open shared object
file: No such file or directory)>

Where to obtain the required patch and the precise means of applying it will 
obviously differ according to Linux distribution. On Debian the advanced package
tool apt-get could be used as follows :

user@server:~$> apt-get install libstdc++5

On a Red Hat Enterprise Linux machine the rpm tool may be used to install the 
equivalent package thus : 

user@server:~$> rpm -Uvh compat-libstdc++-33-3.2.3-47.3.i386.rpm

Consult the system administration documentation of your particular Linux
distribution for more information.

                                  ----------

Linux users may need to update the value of their LD_LIBRARY_PATH environment 
variable if they see the following error message when attempting to run a Java
application with the built class library components on a compatible VM : 

error while loading shared libraries: libhyprt.so: cannot open shared 
object file: No such file or directory

On some systems this error can occur even when the shared library
(e.g. <EXTRACT_DIR>/deploy/jdk/jre/bin/libhyprt.so) has been built correctly
and is present in the correct location. This is not a problem with the built
shared library but instead is dependent on how the operating system locates and 
loads dynamically linked libraries at runtime. Updating the LD_LIBRARY_PATH 
environment variable to include the directory
<EXTRACT_DIR>/deploy/jdk/jre/bin should solve this. An alternative remedy 
would be to add new entries for each of the shared libraries built from the
contributed native source code to the local /etc/ld.so.conf file and then 
running the ldconfig program to rebuild the /etc/ld.so.cache. 

                                  ----------

Linux users may need to update their GNU Make (http://www.gnu.org/software/make/)
to version 3.80 or later if they see the following error message when attempting
to build native source:

: No such file or directory
make: *** [../libvmi.so] Error 1

(The library name may be different)

                                  ----------

If the build fails with an odd error that similar to the following output snippet,
try setting the ANT_OPTS environment variable to "-Xms256M -Xmx512M".

<snippet>
    [javac] ----------
    [javac] 1. ERROR in C:\dev\harmony\enhanced\classlib\trunk\modules\accessibi
lity\src\main\java\javax\accessibility\Accessible.java (at line 0)
    [javac]     /*
    [javac]     ^
    [javac] Internal compiler error
    [javac] java.lang.OutOfMemoryError: Java heap space

    [javac] ----------

BUILD FAILED
C:\dev\harmony\enhanced\classlib\trunk\build.xml:108: The following error occurr
ed while executing this line:
C:\dev\harmony\enhanced\classlib\trunk\make\build-java.xml:143: java.lang.reflec
t.InvocationTargetException
</snippet>