AppleCommander/NATIVE-COMPILE

80 lines
3.3 KiB
Plaintext

Notes on attempts to compile AppleCommander natively... ultimately should
be directions!
Issues:
1) Need SWT code and need to compile it for all interested platforms.
2) Unable to handle graphics (images) in native mode. Need to patch code in
compile process for this.
*********************
** LINUX **
*********************
com.webcodepro.applecommander.storage:
=====================================
These are generated in when trying to compile test and storage package. The
JAR file must be valid (used by GCJ itself) and the classpath cannot use any
shortcuts (like "~" in Linux). Commands:
gcj --classpath=AppleCommander-1.1.1b.jar -c *.java
gcj -shared -o storage.so *.o
Note that graphics will be an issue. GraphicsFileFilter needed to be patched
to be (essentially) useless. The SUN JPEGCodec is not available, nor is the
ImageIO library. GCJ uses something less than JDK 1.4, presumably as the
supported JDK level.
com.webcodepro.applecommander.test:
==================================
If JUnit is not available (or wanted), remove any references to JUnit.
(Make sure the assert statements have been removed also.) The main method
should execute tests directly. The full package must be specified, else GCJ
will not be happy with it. Commands used to compile:
gcj --classpath=AppleCommander-1.1.1b.jar -c DoIt.java
gcj --main=com.webcodepro.applecommander.test.DoIt -o DoIt DoIt.o storage.so
"DoIt" was a highly modified version of DiskHelperTest. Have not tested with
real data as of yet - may have same problems as the Windows code.
**********************
** WINDOWS **
**********************
Using MinGW, am able to compile AppleCommander tests. The date issue is known,
and there is a suggested work-around posted here:
http://gcc.gnu.org/ml/java/2002-04/msg00180.html
Basically, force a reference to the classes which cause the error - the problem
lies in classes loaded by reflection, so this forces these classes to be
compiled in. The suggested prelude is:
// static references to these classes ensure that the linker will include them
private static Class c1 = gnu.java.locale.Calendar.class;
private static Class c2 = java.util.GregorianCalendar.class;
private static Class c3 = gnu.gcj.convert.Input_ASCII.class;
private static Class c4 = gnu.gcj.convert.Input_UTF8.class;
private static Class c5 = gnu.gcj.convert.Input_8859_1.class;
private static Class c6 = gnu.java.locale.LocaleInformation.class;
private static Class c7 = gnu.gcj.convert.Output_ASCII.class;
Presumably, this is just needed in one class - probably the class which contains
the main method.
MinGW seems to run (at least in text mode) faster than Cygwin. It also appears
to be related to date type stuff (just an observation, no real meat here).
Command sequence is similar to this.
1) Compile storage package:
cd <...>\storage
gcj --classpath=AppleCommander-1.1.1b.jar -c *.java
Unable to build a *.so file as on Linux with MinGW - but Cygwin does work.
2) Compile DoIt in test:
cd ..\test
gcj --classpath=AppleCommander-1.1.1b.jar -c DoIt.java
gcj --main=com.webcodepro.applecommander.test.DoIt -o DoIt DoIt.o ..\storage\*.o
strip -x DoIt.exe
The executable is 2.7MB and runs to completion!