X-Git-Url: https://git.distorted.org.uk/~mdw/tripe-android/blobdiff_plain/5c2b1515dd14827055bd5c6ad13462b5118c40a9..3bb2303d42adb3f37420f168b009ecfe64f888cd:/Makefile diff --git a/Makefile b/Makefile index e00445f..5edb29a 100644 --- a/Makefile +++ b/Makefile @@ -30,15 +30,17 @@ 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 CFLAGS = -O2 -g -Wall -pedantic -Werror ## Native linker. -LD = gcc +LD = gcc -Wl,-z,defs LDFLAGS.so = -shared ## External `pkg-config' packages required. @@ -105,14 +107,30 @@ V_AT_0 = @ ###-------------------------------------------------------------------------- ### External native packages. -PKGS_CFLAGS := $(foreach p,$(PKGS),$(shell pkg-config --cflags $p)) -PKGS_LIBS := $(foreach p,$(PKGS),$(shell pkg-config --libs $p)) +EXTPREFIX = $(abs_builddir)/$(OUTDIR)/inst + +join-paths = $(if $(filter /%,$2),$2,$1/$2) +ext-srcdir = $(or $($1_SRCDIR),../$1) + +PKG_CONFIG = PKG_CONFIG_LIBDIR=$(OUTDIR)/inst/lib/pkgconfig \ + pkg-config --static + +PKGS_CFLAGS := $(foreach p,$(PKGS),$(shell $(PKG_CONFIG) --cflags $p)) +PKGS_LIBS := $(foreach p,$(PKGS),$(shell $(PKG_CONFIG) --libs $p)) ALL_CFLAGS = $(CFLAGS) -fPIC \ $(addprefix -I,$(JNI_INCLUDES)) \ + -I$(OUTDIR)/inst/include \ + -I$(call ext-srcdir,tripe)/common \ + -I$(call ext-srcdir,tripe)/priv \ + -I$(call ext-srcdir,tripe)/server \ + -I$(OUTDIR)/build/tripe/config \ $(PKGS_CFLAGS) -LIBS = $(PKGS_LIBS) +LIBS = $(OUTDIR)/build/tripe/server/libtripe.a \ + $(OUTDIR)/build/tripe/priv/libpriv.a \ + $(OUTDIR)/build/tripe/common/libcommon.a \ + -L$(OUTDIR)/inst/lib $(PKGS_LIBS) ###-------------------------------------------------------------------------- ### Various other tweaks and overrides. @@ -134,14 +152,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,40 +168,42 @@ 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 >$@ ###-------------------------------------------------------------------------- ### Native-code libraries. -SHLIBS += toy -toy_SOURCES = jni.c +SHLIBS += tripe +tripe_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) +$(call objects,$(tripe_SOURCES),.o): $(call stamps,ext,tripe) + +$(SHLIBFILES): $(OUTDIR)/lib%.so: $$(call objects,$$($$*_SOURCES),.o) $(call v_tag,LD)$(LD) $(LDFLAGS.so) -o$@ $^ $(LIBS) ###-------------------------------------------------------------------------- @@ -198,8 +218,9 @@ CLASSES += util CLASSES += sys:util CLASSES += admin:sys,util CLASSES += tar:util -CLASSES += keys:tar,sys,util -CLASSES += main:sys +CLASSES += progress:sys,util +CLASSES += keys:progress,tar,sys,util +CLASSES += terminal:progress,sys,util ## Machinery for parsing the `CLASSES' list. COMMA = , @@ -208,16 +229,54 @@ 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. + +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 @@ -228,17 +287,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 @@ -249,7 +308,7 @@ all:: $(TARGETS) clean::; rm -f $(CLEANFILES) $(TARGETS) -repl: $(TARGETS) +repl: all $(SCALA_REPL) -cp $(CLASSDIR) -Djava.library.path=$(OUTDIR) .PHONY: repl