More android + picolisp fun, this time with the full picolisp.  Using the 
android SDK and NDK, I hacked a picolisp/src/makefile to work for android's arm 
processor like this: 

----------- makefile -----------
[snip]

CFLAGS := -c -O2  -pipe \
        -falign-functions=64 -fomit-frame-pointer -fno-strict-aliasing \
        -W -Wimplicit -Wreturn-type -Wunused -Wformat \
        -Wuninitialized -Wstrict-prototypes \
        -D_GNU_SOURCE  -D_FILE_OFFSET_BITS=64
# ?? had: -m32

NDK_ROOT = ~/android/android-ndk-r7
NDK_BIN = 
$(NDK_ROOT)/toolchains/arm-linux-androideabi-4.4.3/prebuilt/linux-x86/bin
SYS_ROOT = $(NDK_ROOT)/platforms/android-8/arch-arm/
CC = $(NDK_BIN)/arm-linux-androideabi-gcc --sysroot=$(SYS_ROOT)
LD = $(NDK_BIN)/arm-linux-androideabi-ld
AR = $(NDK_BIN)/arm-linux-androideabi-ar
RANLIB = $(NDK_BIN)/arm-linux-androideabi-ranlib
STRIP = $(NDK_BIN)/arm-linux-androideabi-strip

        OS = Arm
        PICOLISP-FLAGS = -m32 -rdynamic
        LIB-FLAGS = -lc -lm -ldl
        DYNAMIC-LIB-FLAGS = -m32 -shared -export-dynamic

[snip]
---------------------

Then (to my surprise) picolisp and dynamic libraries were made,

# file ../bin/picolisp  ../lib/ext  ../lib/ht ../lib/z3d  
../bin/picolisp: ELF 32-bit LSB executable, ARM, version 1 (SYSV), dynamically 
linked (uses shared libs), stripped
../lib/ext:      ELF 32-bit LSB shared object, ARM, version 1 (SYSV), stripped
../lib/ht:       ELF 32-bit LSB shared object, ARM, version 1 (SYSV), stripped
../lib/z3d:      ELF 32-bit LSB shared object, ARM, version 1 (SYSV), stripped

So far so good...

Using this android approach generally,

http://gimite.net/en/index.php?Run%20native%20executable%20in%20Android%20App

I placed the picolisp executable in the assets dir and at run-time, copy it 
from assets to /data/data/ in the right place for that app.   

Since I'm using the emulator and I know where the executable was placed, I can 
run it using adb, for some command-line tests:

# adb shell /data/data/com.mytest/picolisp '-de foo ("X") (println "X")'  '-foo 
123' -bye 
123

# adb shell /data/data/com.mytest/picolisp '-de foo ("X") (println (* "X" 2))'  
'-foo 123' -bye 
246

# adb shell /data/data/com.mytest/picolisp '-de foo ("X") (println (* "X" 2))'  
'-foo 12345' -bye 
24690

A bit cumbersome having to unpack the executable and other files from the app's 
.apk (zip archive) to run it ... but it can be done.  And no fiddling with bits 
... no changes to the (full picolisp) source at all.   

Next step is to try to similarly unpack all the libraries and see if a picolisp 
database server application can be run. Then more testing.  And use that with 
android's browser, all within an android app. 

But I'm very confident that the full picolisp will run on the android from what 
I see so far! 

There are ways to call java from C also, so that opens up possibilities of 
using android java libraries from android picolisp too. 

Cheers,

Doug

--
UNSUBSCRIBE: mailto:picolisp@software-lab.de?subject=Unsubscribe

Reply via email to