summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Makefile2
-rw-r--r--Makefile-riscos2
-rw-r--r--build/Makefile.common45
-rw-r--r--test/Makefile20
4 files changed, 64 insertions, 5 deletions
diff --git a/Makefile b/Makefile
index 1de428e..da66dba 100644
--- a/Makefile
+++ b/Makefile
@@ -13,6 +13,7 @@ PERL := perl
PKGCONFIG := pkg-config
INSTALL := install
SED := sed
+TOUCH := touch
LCOV := lcov
GENHTML := genhtml
@@ -34,6 +35,7 @@ MVFLAGS :=
ECHOFLAGS :=
MAKEFLAGS :=
PKGCONFIGFLAGS :=
+TOUCHFLAGS :=
EXEEXT :=
diff --git a/Makefile-riscos b/Makefile-riscos
index 77a5977..54cce12 100644
--- a/Makefile-riscos
+++ b/Makefile-riscos
@@ -16,6 +16,7 @@ PERL := perl
PKGCONFIG := pkg-config
INSTALL := install
SED := sed
+TOUCH := touch
LCOV := echo
GENHTML := echo
@@ -37,6 +38,7 @@ MVFLAGS :=
ECHOFLAGS :=
MAKEFLAGS :=
PKGCONFIGFLAGS :=
+TOUCHFLAGS :=
EXEEXT := ,ff8
diff --git a/build/Makefile.common b/build/Makefile.common
index fbcedb4..1925cce 100644
--- a/build/Makefile.common
+++ b/build/Makefile.common
@@ -43,10 +43,11 @@ OBJECTS := $(subst /,_,$(subst .c,.o,$(SOURCES)))
# Rules
release: setup $(addprefix $(RELEASEDIR)/,$(OBJECTS))
- @$(AR) $(ARFLAGS) $(COMPONENT).a $(RELEASEDIR)/*
+ @$(AR) $(ARFLAGS) $(COMPONENT).a $(addprefix $(RELEASEDIR)/,$(OBJECTS))
debug: setup $(addprefix $(DEBUGDIR)/,$(OBJECTS))
- @$(AR) $(ARFLAGS) $(COMPONENT)-debug.a $(DEBUGDIR)/*
+ @$(AR) $(ARFLAGS) $(COMPONENT)-debug.a \
+ $(addprefix $(DEBUGDIR)/,$(OBJECTS))
test: debug $(TARGET_TESTS)
@@ -80,8 +81,8 @@ distclean: clean
-@$(RM) $(RMFLAGS) -r $(TOP)/dist
setup:
- @$(MKDIR) $(MKDIRFLAGS) $(RELEASEDIR)
- @$(MKDIR) $(MKDIRFLAGS) $(DEBUGDIR)
+ @$(MKDIR) $(MKDIRFLAGS) $(RELEASEDIR)/deps
+ @$(MKDIR) $(MKDIRFLAGS) $(DEBUGDIR)/deps
@$(MKDIR) $(MKDIRFLAGS) $(COVERAGEDIR)
export:
@@ -101,6 +102,34 @@ uninstall:
@$(RM) $(RMFLAGS) $(PREFIX)/lib/pkgconfig/$(COMPONENT).pc
@$(RM) $(RMFLAGS) -r $(PREFIX)/include/libcss
+$(RELEASEDIR)/deps/created:
+ @$(MKDIR) $(MKDIRFLAGS) $(RELEASEDIR)/deps
+ @$(TOUCH) $(TOUCHFLAGS) $(RELEASEDIR)/deps/created
+
+$(DEBUGDIR)/deps/created:
+ @$(MKDIR) $(MKDIRFLAGS) $(DEBUGDIR)/deps
+ @$(TOUCH) $(TOUCHFLAGS) $(DEBUGDIR)/deps/created
+
+DEPFILES :=
+
+define do_dep
+DEPFILES += $(2)
+$$(RELEASEDIR)/deps/$(2): $$(RELEASEDIR)/deps/created $(1)
+ @$$(ECHO) $$(ECHOFLAGS) "DEP $(1)"
+ @$$(RM) $$(RMFLAGS) $$(RELEASEDIR)/deps/$(2)
+ @$$(CC) $$(RELEASECFLAGS) -MM -MT \
+ '$$(RELEASEDIR)/deps/$(2) $$(RELEASEDIR)/$(3)' \
+ -MF $$(RELEASEDIR)/deps/$(2) $(1)
+
+$$(DEBUGDIR)/deps/$(2): $$(DEBUGDIR)/deps/created $(1)
+ @$$(ECHO) $$(ECHOFLAGS) "DEP $(1)"
+ @$$(RM) $$(RMFLAGS) $$(DEBUGDIR)/deps/$(2)
+ @$$(CC) $$(DEBUGCFLAGS) -MM -MT \
+ '$$(DEBUGDIR)/deps/$(2) $$(DEBUGDIR)/$(3)' \
+ -MF $$(DEBUGDIR)/deps/$(2) $(1)
+
+endef
+
# Finally, build rules for compilation
define do_compile
$$(RELEASEDIR)/$(2): $(1)
@@ -114,5 +143,13 @@ $$(DEBUGDIR)/$(2): $(1)
endef
$(eval $(foreach SOURCE,$(filter %.c,$(SOURCES)), \
+ $(call do_dep,$(SOURCE),$(subst /,_,$(SOURCE:.c=.d)),$(subst /,_,$(SOURCE:.c=.o)))))
+
+ifneq ($(findstring clean,$(MAKECMDGOALS)),clean)
+-include $(sort $(addprefix $(RELEASEDIR)/deps/,$(DEPFILES)))
+-include $(sort $(addprefix $(DEBUGDIR)/deps/,$(DEPFILES)))
+endif
+
+$(eval $(foreach SOURCE,$(filter %.c,$(SOURCES)), \
$(call do_compile,$(SOURCE),$(subst /,_,$(SOURCE:.c=.o)))))
diff --git a/test/Makefile b/test/Makefile
index eecf6ad..4874633 100644
--- a/test/Makefile
+++ b/test/Makefile
@@ -42,7 +42,8 @@ TESTS_$(d) := $(TESTS_$(d))
ITEMS_CLEAN := $(ITEMS_CLEAN) \
$(addprefix $(d), $(addsuffix $(EXEEXT), $(TESTS_$(d)))) \
$(addprefix $(d), $(addsuffix .gcda, $(TESTS_$(d)))) \
- $(addprefix $(d), $(addsuffix .gcno, $(TESTS_$(d))))
+ $(addprefix $(d), $(addsuffix .gcno, $(TESTS_$(d)))) \
+ $(addprefix $(d), $(addsuffix .d, $(TESTS_$(d))))
ITEMS_DISTCLEAN := $(ITEMS_DISTCLEAN) $(d)log
# Targets for top-level makefile to run
@@ -57,6 +58,16 @@ TARGET_TESTS := $(TARGET_TESTS) test_$(d)
test_$(d): $(d) $(addprefix $(d), $(TESTS_$(d)))
@$(PERL) $(TOP)/$<testrunner.pl $(TOP)/$< $(EXEEXT)
+DEP_$(d) :=
+
+define dep_test
+DEP_$(d) += $(2)
+$(2): $(1)
+ @$$(RM) $$(RMFLAGS) $(2)
+ @$$(CC) $$(DEBUGCFLAGS) -MM -MT '$(2) $(3)' -MF $(2) $(1)
+
+endef
+
# Build rules for each test binary -- they all depend on the debug library
define compile_test
$(2): $$(TOP)/$$(COMPONENT)-debug.a $(1)
@@ -68,6 +79,13 @@ $(2): $$(TOP)/$$(COMPONENT)-debug.a $(1)
endef
$(eval $(foreach TEST,$(addprefix $(d), $(TESTS_$(d))), \
+ $(call dep_test,$(addsuffix .c, $(TEST)),$(addsuffix .d, $(TEST)),$(TEST))))
+
+ifneq ($(findstring clean,$(MAKECMDGOALS)),clean)
+-include $(sort $(DEP_$(d)))
+endif
+
+$(eval $(foreach TEST,$(addprefix $(d), $(TESTS_$(d))), \
$(call compile_test,$(addsuffix .c, $(TEST)),$(TEST))))
# Now include any children we may have