From add12df6af78d7fa550e967027f1c3cb781c6d91 Mon Sep 17 00:00:00 2001 From: Harald Welte Date: Tue, 12 Dec 2017 15:51:39 +0100 Subject: Add master make file which helps to iterate over all directories --- Makefile | 54 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 54 insertions(+) create mode 100644 Makefile (limited to 'Makefile') diff --git a/Makefile b/Makefile new file mode 100644 index 00000000..e0171292 --- /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))) \ + ) -- cgit v1.2.3