summaryrefslogtreecommitdiffstats
path: root/Makefile
diff options
context:
space:
mode:
authorHarald Welte <laforge@gnumonks.org>2017-12-12 15:51:39 +0100
committerHarald Welte <laforge@gnumonks.org>2017-12-12 15:51:39 +0100
commitadd12df6af78d7fa550e967027f1c3cb781c6d91 (patch)
tree4499b045d27f7bf6f1a75470411c22591a92c547 /Makefile
parentf6bd980fdd73bd108801505b78af219b36751193 (diff)
Add master make file which helps to iterate over all directories
Diffstat (limited to 'Makefile')
-rw-r--r--Makefile54
1 files changed, 54 insertions, 0 deletions
diff --git a/Makefile b/Makefile
new file mode 100644
index 0000000..e017129
--- /dev/null
+++ b/Makefile
@@ -0,0 +1,54 @@
+SUBDIRS=bsc bsc-nat ggsn_tests gprs_gb lapdm mgw msc_tests selftest sysinfo
+
+PARALLEL_MAKE:=-j4
+
+# This master makefile allows you to do things like
+# make clean (remove all generated binary, c++ and symlinks)
+# make compile (compile ttcn3 into c++)
+# make all (compile c++ into executable)
+#
+# as well as per-subdirectory targets like
+#
+# make bsc/clean
+# make bsc/compile
+# make bsc/all
+# make bsc (equivalent to bsc/all)
+
+default: all
+
+compile: $(foreach dir,$(SUBDIRS),$(dir)/compile)
+clean: $(foreach dir,$(SUBDIRS),$(dir)/clean)
+all: $(foreach dir,$(SUBDIRS),$(dir)/all)
+
+define DIR_Makefile_template
+$(1)/Makefile:
+ (cd $(1) && ./gen_links.sh && ./regen_makefile.sh)
+endef
+
+define DIR_compile_template
+.PHONY: $(1)/compile
+$(1)/compile: $(1)/Makefile
+ $(MAKE) -C $(1) compile
+endef
+
+define DIR_clean_template
+.PHONY: $(1)/clean
+$(1)/clean: $(1)/Makefile
+ $(MAKE) -C $(1) clean
+ (cd $(1) && ../rmlinks.sh && rm Makefile)
+endef
+
+define DIR_all_template
+$(1): $(1)/all
+.PHONY: $(1)/all
+$(1)/all: $(1)/Makefile
+ $(MAKE) -C $(1) compile
+ $(MAKE) $(PARALLEL_MAKE) -C $(1)
+endef
+
+$(foreach dir,$(SUBDIRS), \
+ $(eval $(call DIR_Makefile_template,$(dir))) \
+ $(eval $(call DIR_compile_template,$(dir))) \
+ $(eval $(call DIR_clean_template,$(dir))) \
+ $(eval $(call DIR_all_template,$(dir))) \
+ )