src/jobclient.c: Low-level magic for GNU Make's jobserver protocol.
[distorted-chroot] / Makefile
index fbbc961..2b747dd 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -316,6 +316,39 @@ check-symlink               = $(call check,$1,"\`$2' is not a link to \`$3'", \
        [ -L "$2" ] && [ "$$(readlink "$2")" = "$3" ])
 
 ###--------------------------------------------------------------------------
+### Python extensions.
+
+CC                      = gcc
+CFLAGS                  = -O2 -g -Wall
+
+LD                      = $(CC)
+LDFLAGS                         =
+
+c-source                = $(foreach c,$1,src/$c)
+c-object                = $(foreach c,$1,$(STATE)/obj/$(basename $c).o)
+
+PYEXT_PKGFLAGS         := $(shell pkg-config --cflags python2)
+PYEXT_CFLAGS            = -fPIC -fno-strict-aliasing $(PYEXT_PKGFLAGS)
+PYEXT_LDFLAGS           = -shared
+
+PYEXTS                 += jobclient
+jobclient_SOURCES       = jobclient.c
+
+PYEXT_ALLSRC            = $(foreach x,$(PYEXTS),\
+                               $(call c-source,$($x_SOURCES)))
+PYEXT_ALLOBJ            = $(foreach x,$(PYEXTS),\
+                               $(call c-object,$($x_SOURCES)))
+$(PYEXT_ALLOBJ): $(STATE)/obj/%.o: src/%.c
+       $(V_AT)mkdir -p $(dir $@)
+       $(call v_tag,CC)$(CC) -c $(CFLAGS) $(PYEXT_CFLAGS) -o$@ $<
+
+PYMODULES               = $(foreach x,$(PYEXTS),$(STATE)/lib/python/$x.so)
+all:: $(PYMODULES)
+$(PYMODULES): $(STATE)/lib/python/%.so: $$(call c-object,$$($$*_SOURCES))
+       $(V_AT)mkdir -p $(dir $@)
+       $(call v_tag,LD)$(LD) $(LDFLAGS) $(PYEXT_LDFLAGS) -o$@ $^
+
+###--------------------------------------------------------------------------
 ### Scripts.
 
 SCRIPTS                        += mkbuildchroot
@@ -521,12 +554,12 @@ setup-chroots: $(BUILD_CHROOTS)
 $(BUILD_CHROOTS): chroot/%: $(STATE)/stamp/chroot.%
 .PHONY: setup-chroots $(BUILD_CHROOTS)
 
-$(CHROOT_STAMPS): $(STATE)/stamp/chroot.%: \
-               $$(call chroot-deps,$(STATE)/stamp/cross-tools.,$$*)
+$(CHROOT_STAMPS): $(STATE)/stamp/chroot.%:
        $(V_AT)mkdir -p $(dir $@) log/
        $(MAKE) \
                $(STATE)/bin/mkbuildchroot $(STATE)/bin/install-cross-tools \
-               $(STATE)/etc/schroot/sbuild.schroot
+               $(STATE)/etc/schroot/sbuild.schroot \
+               $$(call chroot-deps,$(STATE)/stamp/cross-tools.,$$*)
        $(call v_tag,CHROOT)$(call v_log,setup-chroot.$*, \
                $(SILENCE_LVM); \
                $(ROOTLY) $(STATE)/bin/mkbuildchroot \