[Openmcl-devel] Clozure CL on Android

Gary Byers gb at clozure.com
Wed Feb 1 12:05:10 PST 2012

On Wed, 1 Feb 2012, Roman Kovalev wrote:

> Thanks for the quick response.
>>> 1. I transferred Android-headers to the device and tried to run
>>> rebuild-ccl:
>>> Error: File #P"ccl:lib;systems.lisp.newest" not found.
>>> Sources needed?
>> Yes, ...
> From http://article.gmane.org/gmane.lisp.openmcl.devel/7511 :
> "get CCL sources onto the device (you can use
> "adb push".)  There's a basic set of interfaces in svn at
> http://svn.clozure.com/publicsvn/openmcl/trunk/android-headers
> and if you copy them to /data/local/ccl/android-headers you should be
> able to use #_/#$ and do
> ? (rebuild-ccl :clean t)"
> Which sources are needed?
> ? only http://svn.clozure.com/publicsvn/openmcl/trunk/android-headers
> ? http://svn.clozure.com/publicsvn/openmcl/trunk/source/compiler/ARM

On a Mac, the device is mounted at /Volumes/NO\ NAME/, so:

$ cd /Volumes/NO\ NAME
$ svn co http://svn.clozure.com/publicsvn/openmcl/trunk/androidarm/ccl

will check out all sources and androidarm-specific binaries, analogous
to what checking out a similar platform-specific URL does for other
platforms.  Getting the android-headers directory this way may be
more convenient than "adb push"ing them from the host device.  Getting
an androidarm-specific kernel and image this way isn't very useful, because
(a) whatever's in svn isn't likely to be up-to-date and (b) you can't run
executable code off of the sdcard on Android.

Unmount the device and connect to it via "adb shell".  The disk or partition
that had been mounted on the Mac (or whatever) will probably be at /sdcard
and/or /mnt/sdcard; there should be a shiny new ccl directory there.  Make
symbolic links from the toplevel subdirectories of /sdcard/ccl to /data/local/ccl.

If you don't understand what you're doing here, don't bother.  It's
possible that someday there'll be a less kludgy way to install CCL on
an Android and it'd probably make sense to wait for that.

> ? ...
>> If you type
> result: 21531
>> If you can get the reader macro to return a value, that package will have at least
>> one symbol in it.
> Why is the result of expression - an empty list?
> expression: (do-external-symbols (s (find-package "ARM-ANDROID")) (print s))

Because you're looking for external (exported) symbols in a a package that
doesn't have any external symbols in it ?

Why you're interested in these symbols at all is beyond me, but you'd find
some symbols if you used DO-SYMBOLS instead of DO-EXTERNAL-SYMBOLS.

>>> 3. Is it possible to using android's graphic and other (java)libraries
>>> with ccl now?
>> No, but that's obiously desirable.
> Does anyone working on this?
>>> 4. In that compiles aarmc as a result?
>> I don't understand.
> CCL running on Dalvik or what?

What.  CCL doesn't "run on" any Java virtual machine.

Like other native applications, it can use the Java Native Interface (JNI)
to communicate with a JVM; if it did this on Android, it would be communicating
with Android's Dalvik JVM, but the only way to know this would be the fact
that some things in the JNI (whatever Google didn't bother to implement) would
be missing.

The JNI tries to abstract away some of the details of the JVM, but it's still
incredibly low-level and hard to deal with; it'd certainly be desirable to
deal with Java at a somewhat higher level.  I'm personally still trying to
understand what's possible, and it'll probably take a while (and may take
several iterations) before anything is really usable.

More information about the Openmcl-devel mailing list