NDK 使う練習

ってコトで libgauche をナニ。

とりあえず

Gauche-0.9 配下で configure してみる。Makefile 無いとアレなので。

$ ./configure

(中略

This Gauche has been configured with the following parameters:
           version: 0.9
         multibyte: utf8
              slib: /usr/local/slib
            thread: pthreads
  optional modules:  zlib

$

Makefile ができたので src 配下のソレを確認。このあたり?

libgauche.$(SOEXT) : $(libgauche_OBJECTS) $(GCLIB)
        $(LINK) $(libgauche_LDFLAGS) libgauche.$(SOEXT) $(libgauche_OBJECTS) ../gc/.libs/*.o $(LIBS)
        $(POSTBUILD)

libgauche_OBJECTS は以下な模様。

libgauche_OBJECTS = \
        core.$(OBJEXT) vm.$(OBJEXT) compaux.$(OBJEXT) macro.$(OBJEXT) \
        code.$(OBJEXT) error.$(OBJEXT) class.$(OBJEXT) prof.$(OBJEXT) \
        collection.$(OBJEXT) \
        boolean.$(OBJEXT) char.$(OBJEXT) string.$(OBJEXT) list.$(OBJEXT) \
        hash.$(OBJEXT) treemap.$(OBJEXT) bits.$(OBJEXT) \
        port.$(OBJEXT) write.$(OBJEXT) read.$(OBJEXT) \
        vector.$(OBJEXT) weak.$(OBJEXT) symbol.$(OBJEXT) keyword.$(OBJEXT) \
        gloc.$(OBJEXT) compare.$(OBJEXT) regexp.$(OBJEXT) signal.$(OBJEXT) \
        parameter.$(OBJEXT) module.$(OBJEXT) proc.$(OBJEXT) \
        number.$(OBJEXT) bignum.$(OBJEXT) load.$(OBJEXT) paths.$(OBJEXT) \
        promise.$(OBJEXT) repl.$(OBJEXT) autoloads.$(OBJEXT) \
        system.$(OBJEXT) stdlib.$(OBJEXT) extlib.$(OBJEXT) exclib.$(OBJEXT) \
        syslib.$(OBJEXT) intlib.$(OBJEXT) compile.$(OBJEXT) \
        scmlib.$(OBJEXT) objlib.$(OBJEXT)

GCLIB は以下か。

GCLIB = ../gc/libgc.la

ええと gc/Makefile のナニは以下か。

libgc.la: $(libgc_la_OBJECTS) $(libgc_la_DEPENDENCIES) 
        $(LINK) -rpath $(libdir) $(libgc_la_LDFLAGS) $(libgc_la_OBJECTS) $(libgc_la_LIBADD) $(LIBS)

依存してる変数を確認。

am_libgc_la_OBJECTS = allchblk.lo alloc.lo blacklst.lo checksums.lo \
        dbg_mlc.lo dyn_load.lo finalize.lo gc_dlopen.lo gcj_mlc.lo \
        headers.lo malloc.lo mallocx.lo mark.lo mark_rts.lo misc.lo \
        new_hblk.lo obj_map.lo os_dep.lo pcr_interface.lo ptr_chck.lo \
        real_malloc.lo reclaim.lo specific.lo stubborn.lo typd_mlc.lo \
        backgraph.lo thread_local_alloc.lo $(am__objects_1) \
        $(am__objects_2) $(am__objects_3)
nodist_libgc_la_OBJECTS = ./atomic_ops.lo
#nodist_libgc_la_OBJECTS =  \
#       ./atomic_ops_sysdeps.lo
libgc_la_OBJECTS = $(am_libgc_la_OBJECTS) $(nodist_libgc_la_OBJECTS)

あるいは libgc_la_DEPENDENCIES は以下?

libgc_la_DEPENDENCIES =  mach_dep.lo

むむ。.lo って何だば、って言いつつ以下を発見。gc/Makefile の中ッス。

.c.lo:
#       depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.lo$$||'`; \
#       if $(LTCOMPILE) -MT $@ -MD -MP -MF "$$depbase.Tpo" -c -o $@ $<; \
#       then mv -f "$$depbase.Tpo" "$$depbase.Plo"; else rm -f "$$depbase.Tpo"; exit 1; fi
        source='$<' object='$@' libtool=yes \
        DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
        $(LTCOMPILE) -c -o $@ $<

LTCOMPILE は libtool か。むむ、libtool 苦手だなぁ。とりあえず必要なソースは列挙可能な状態になっているのかどうか。

SOURCES_DEST

以下なナニを発見。

am__libgc_la_SOURCES_DIST = allchblk.c alloc.c blacklst.c checksums.c \
        dbg_mlc.c dyn_load.c finalize.c gc_dlopen.c gcj_mlc.c \
        headers.c malloc.c mallocx.c mark.c mark_rts.c misc.c \
        new_hblk.c obj_map.c os_dep.c pcr_interface.c ptr_chck.c \
        real_malloc.c reclaim.c specific.c stubborn.c typd_mlc.c \
        backgraph.c thread_local_alloc.c pthread_support.c \
        pthread_stop_world.c darwin_stop_world.c win32_threads.c
am__objects_1 = pthread_support.lo \
        pthread_stop_world.lo
#am__objects_2 = darwin_stop_world.lo
#am__objects_3 = win32_threads.lo

とりあえず次の日になったみたいなので上記をもとにまたあした。