aboutsummaryrefslogtreecommitdiff
path: root/Makefile.lib
diff options
context:
space:
mode:
Diffstat (limited to 'Makefile.lib')
-rw-r--r--Makefile.lib63
1 files changed, 63 insertions, 0 deletions
diff --git a/Makefile.lib b/Makefile.lib
new file mode 100644
index 000000000..d681cf741
--- /dev/null
+++ b/Makefile.lib
@@ -0,0 +1,63 @@
+default: all
+
+here = $(dir $(lastword $(MAKEFILE_LIST)))
+
+LIBS =
+
+QUIET = @
+
+%.o: %.cc
+ $(QUIET) g++ -o $@ -c $^ -g -fPIC $(CXXFLAGS) $($@_CXXFLAGS)
+
+%.o: %.c
+ $(QUIET) gcc -o $@ -c $^ -g -fPIC $(CFLAGS) $($@_CFLAGS)
+
+
+# Generate Make rules for libraries.
+libs_list :=
+
+define LIBS_template =
+ _d := $$($(1)_DIR)
+ _objs := $$(foreach src, $$($(1)_SOURCES), $$(_d)$$(basename $$(src)).o)
+ _libs := $$(foreach lib, $$($(1)_LIBS), $$(lib).a)
+ _lib := $$(_d)$(1).a
+
+ $$(_lib): $$(_objs)
+ $(QUIET) ar crs $$@ $$?
+
+ # Propagate CXXFLAGS to the individual object files.
+ $$(foreach obj, $$(_objs), $$(eval $$(obj)_CXXFLAGS=$$($(1)_CXXFLAGS)))
+
+ clean_list += $$(_lib) $$(_objs)
+ libs_list += $$(_lib)
+endef
+
+
+# Generate Make rules for programs.
+programs_list :=
+
+define PROGRAMS_template =
+ _d := $$($(1)_DIR)
+ _objs := $$(foreach src, $$($(1)_SOURCES), $$(_d)$$(basename $$(src)).o)
+ _libs := $$(foreach lib, $$($(1)_LIBS), $$($$(lib)_DIR)$$(lib).a)
+ _prog := $$(_d)$(1)
+
+ $$(_prog): $$(_objs) $$(_libs)
+ $(QUIET) g++ -o $$@ $$^ $$($(1)_LDFLAGS) $$(foreach lib, $$($(1)_LIBS), $$($$(lib)_LDFLAGS))
+
+ # Propagate CXXFLAGS to the individual object files.
+ $$(foreach obj, $$(_objs), $$(eval $$(obj)_CXXFLAGS=$$($(1)_CXXFLAGS)))
+
+ clean_list += $$(_prog) $$(_objs)
+ programs_list += $$(_prog)
+endef
+
+
+# Cleaning stuff.
+clean_list :=
+
+clean:
+ rm -fv $(clean_list)
+
+dryclean:
+ @echo $(clean_list)