More progress. More work.
[tripe-android] / Makefile
index c4f471a..6e5ca0e 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -30,8 +30,10 @@ VERSION                      := $(shell ./auto-version)
 ###--------------------------------------------------------------------------
 ### Build parameters.
 
+abs_builddir           := $(shell pwd)
+
 ## Where to put the object files.
-OUTDIR                  = out/
+OUTDIR                  = out
 
 ## Native C compiler.
 CC                      = gcc
@@ -134,14 +136,14 @@ clean::
 ### Native C code.
 
 out/%.o: %.c
-       $(call v_tag,CC)mkdir -p $(OUTDIR) && \
+       $(call v_tag,CC)mkdir -p $(OUTDIR)/ && \
                $(CC) -c $(ALL_CFLAGS) -MMD -o$@ $<
 
 ALL_SOURCES             =
 DISTFILES              += $(ALL_SOURCES)
 
-objects                         = $(patsubst %.c,$(OUTDIR)%$2,$1)
-CLEANFILES             += $(OUTDIR)*.o $(OUTDIR)*.d
+objects                         = $(patsubst %.c,$(OUTDIR)/%$2,$1)
+CLEANFILES             += $(OUTDIR)/*.o $(OUTDIR)/*.d
 
 ###--------------------------------------------------------------------------
 ### Java classes.
@@ -150,25 +152,25 @@ CLEANFILES                += $(OUTDIR)*.o $(OUTDIR)*.d
 ## unpredictable names.  Rather than try to guess stable outputs for these
 ## sources, we make artificial `timestamp' files and uses these in our
 ## dependencies.
-CLASSDIR                = $(OUTDIR)cls/
-stamps                  = $(patsubst %,$(OUTDIR)%.stamp,$1)
+CLASSDIR                = $(OUTDIR)/cls
+stamps                  = $(patsubst %,$(OUTDIR)/%.$1-stamp,$2)
 
 clean::; rm -rf $(CLASSDIR)
-CLEANFILES             += $(OUTDIR)*.stamp
+CLEANFILES             += $(OUTDIR)/*.class-stamp
 
 ## Compiling actual Java code.  Note that this confuses the resident Scala
 ## compiler, so we have to reset it here.
 CLSISH                 += java
-$(OUTDIR)%.stamp: %.java
-       $(call v_tag,JAVAC)mkdir -p $(CLASSDIR) && \
+$(OUTDIR)/%.class-stamp: %.java
+       $(call v_tag,JAVAC)mkdir -p $(CLASSDIR)/ && \
                $(JAVAC) -d $(CLASSDIR) -cp $(CLASSDIR) $(JAVAFLAGS) $< && \
                echo built >$@
        $(V_AT)$(SCALAC_RESET)
 
 ## Compiling Scala code.
 CLSEXT                 += scala
-$(OUTDIR)%.stamp: %.scala
-       $(call v_tag,SCALAC)mkdir -p $(CLASSDIR) && \
+$(OUTDIR)/%.class-stamp: %.scala
+       $(call v_tag,SCALAC)mkdir -p $(CLASSDIR)/ && \
                $(SCALAC) -d $(CLASSDIR) -cp $(CLASSDIR) $(SCALAFLAGS) $< && \
                echo built >$@
 
@@ -178,12 +180,12 @@ $(OUTDIR)%.stamp: %.scala
 SHLIBS                 += toy
 toy_SOURCES             = jni.c
 
-shlibfile               = $(patsubst %,$(OUTDIR)lib%.so,$1)
+shlibfile               = $(patsubst %,$(OUTDIR)/lib%.so,$1)
 SHLIBFILES              = $(call shlibfile,$(SHLIBS))
 TARGETS                        += $(SHLIBFILES)
 ALL_SOURCES            += $(foreach l,$(SHLIBS),$($l_SOURCES))
 
-$(SHLIBFILES): $(OUTDIR)lib%.so: $$(call objects,$$($$*_SOURCES),.o)
+$(SHLIBFILES): $(OUTDIR)/lib%.so: $$(call objects,$$($$*_SOURCES),.o)
        $(call v_tag,LD)$(LD) $(LDFLAGS.so) -o$@ $^ $(LIBS)
 
 ###--------------------------------------------------------------------------
@@ -210,16 +212,59 @@ class-deps                 = $(subst $(COMMA), ,$(word 2,$(subst :, ,$1)))
 
 CLASS_NAMES             = $(foreach c,$(CLASSES),$(call class-name,$c))
 
-all:: $(call stamps,$(CLASS_NAMES))
+all:: $(call stamps,class,$(CLASS_NAMES))
 
-$(foreach c,$(CLASSES),$(eval $(call stamps,$(call class-name,$c)): \
-       $(call stamps,$(call class-deps,$c))))
+$(foreach c,$(CLASSES),$(eval $(call stamps,class,$(call class-name,$c)): \
+       $(call stamps,class,$(call class-deps,$c))))
 
 DISTFILES              += $(foreach c,$(CLASSES),\
                                $(foreach e,$(CLSEXT),\
                                  $(wildcard $(call class-name,$c).$e)))
 
 ###--------------------------------------------------------------------------
+### External packages.
+
+EXTPREFIX               = $(abs_builddir)/$(OUTDIR)/inst
+
+join-paths              = $(if $(filter /%,$2),$2,$1/$2)
+ext-srcdir              = $(or $($1_SRCDIR),../$1)
+
+EXTERNALS              += adns
+adns_CONFIG             = --disable-dynamic
+
+EXTERNALS              += mLib
+mLib_DEPS               = adns
+mLib_CONFIG             = --enable-static --disable-shared --with-adns
+
+EXTERNALS              += catacomb
+catacomb_DEPS           = mLib
+catacomb_CONFIG                 = --enable-static --disable-shared
+
+EXTERNALS              += tripe
+tripe_DEPS              = mLib catacomb
+tripe_CONFIG            = --without-wireshark --with-adns --with-tunnel=slip
+
+all:: $(call stamps,ext,$(EXTERNALS))
+CLEANFILES             += $(OUTDIR)/*.ext-stamp
+clean::; rm -rf $(OUTDIR)/inst $(OUTDIR)/build
+
+$(call stamps,ext,$(EXTERNALS)): \
+               $(OUTDIR)/%.ext-stamp: $$(call stamps,ext,$$($$*_DEPS))
+       $(V_AT)rm -rf $(OUTDIR)/build/$*/
+       $(V_AT)mkdir -p $(OUTDIR)/build/$*/
+       cd $(OUTDIR)/build/$*/ && \
+       $(call join-paths,../../..,$(call ext-srcdir,$*))/configure \
+               --prefix=$(EXTPREFIX) \
+               $($*_CONFIG) \
+               CFLAGS="-O2 -g -fPIC -Wall -I$(EXTPREFIX)/include" \
+               LDFLAGS="-L$(EXTPREFIX)/lib" \
+               PKG_CONFIG="pkg-config --static" \
+               PKG_CONFIG_LIBDIR=$(EXTPREFIX)/lib/pkgconfig
+       $(MAKE) -C$(OUTDIR)/build/$*/
+       $(MAKE) -C$(OUTDIR)/build/$*/ -s install
+       $(V_AT)echo done >$@
+
+###--------------------------------------------------------------------------
 ### Distribution arrangements.
 
 DISTFILES              += COPYING
@@ -230,17 +275,17 @@ distdir                    = $(PACKAGE)-$(VERSION)
 DISTTAR                         = $(distdir).tar.gz
 
 distdir:
-       rm -rf $(OUTDIR)$(distdir)
-       mkdir $(OUTDIR)$(distdir)
-       echo $(VERSION) >$(OUTDIR)$(distdir)/RELEASE
+       rm -rf $(OUTDIR)/$(distdir)
+       mkdir $(OUTDIR)/$(distdir)/
+       echo $(VERSION) >$(OUTDIR)/$(distdir)/RELEASE
        set -e; for i in $(DISTFILES); do \
-         case $$i in */*) mkdir -p $(OUTDIR)$(distdir)/$${i%/*} ;; esac; \
-         cp $$i $(OUTDIR)$(distdir)/; \
+         case $$i in */*) mkdir -p $(OUTDIR)/$(distdir)/$${i%/*}/ ;; esac; \
+         cp $$i $(OUTDIR)/$(distdir)/; \
        done
 .PHONY: distdir
 
 dist: distdir
-       set -e; cd $(OUTDIR); tar chozf ../$(DISTTAR) $(distdir)
+       set -e; cd $(OUTDIR)/; tar chozf ../$(DISTTAR) $(distdir)
        rm -rf $(distdir)
 .PHONY: dist