diff --git a/.gitignore b/.gitignore index e00f61d..72e65cb 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,7 @@ *.[ao] *.bak *.new +*.dep *.so* Doxyfile README.html diff --git a/Makefile b/Makefile index ea2a2da..9931a3e 100644 --- a/Makefile +++ b/Makefile @@ -29,7 +29,7 @@ test: lib src $(MAKE) -C test scripts/%: scripts/%.in - sed -e's#@LIBEXEC_PREFIX@#$(LIBEXEC_PREFIX)#' -e's#@PREFIX@#$(PREFIX)#' "$<" >"$@" + sed -e's#@LIBEXEC_PREFIX@#$(LIBEXEC_PREFIX)#' -e's#@PREFIX@#$(PREFIX)#' $< >$@ scripts: scripts/beesd scripts/beesd@.service diff --git a/lib/Makefile b/lib/Makefile index 9ca53af..21460f7 100644 --- a/lib/Makefile +++ b/lib/Makefile @@ -1,8 +1,9 @@ TAG := $(shell git describe --always --dirty || echo UNKNOWN) default: libcrucible.so +%.so: Makefile -OBJS = \ +CRUCIBLE_OBJS = \ chatter.o \ cleanup.o \ crc64.o \ @@ -19,20 +20,26 @@ OBJS = \ uuid.o \ .version.o \ +libcrucible.so: $(CRUCIBLE_OBJS) -luuid + include ../makeflags -depends.mk: *.cc - for x in *.cc; do $(CXX) $(CXXFLAGS) -M "$$x"; done > depends.mk.new - mv -fv depends.mk.new depends.mk +.depends/%.dep: %.cc Makefile + @mkdir -p .depends + $(CXX) $(CXXFLAGS) -M -MF $@ -MT $(<:.cc=.o) $< + +depends.mk: $(CRUCIBLE_OBJS:%.o=.depends/%.dep) + cat $^ > $@.new + mv -f $@.new $@ .version.cc: Makefile ../makeflags *.cc ../include/crucible/*.h - echo "namespace crucible { const char *VERSION = \"$(TAG)\"; }" > .version.new.cc - mv -f .version.new.cc .version.cc + echo "namespace crucible { const char *VERSION = \"$(TAG)\"; }" > $@.new + mv -f $@.new $@ --include depends.mk +include depends.mk -%.o: %.cc ../include/crucible/%.h +%.o: %.cc ../makeflags $(CXX) $(CXXFLAGS) -fPIC -o $@ -c $< -libcrucible.so: $(OBJS) Makefile - $(CXX) $(LDFLAGS) -fPIC -o $@ $(OBJS) -shared -Wl,-soname,$@ -luuid +%.so: + $(CXX) $(LDFLAGS) -fPIC -shared -Wl,-soname,$@ -o $@ $^ diff --git a/src/Makefile b/src/Makefile index 3a69c9a..a820b6a 100644 --- a/src/Makefile +++ b/src/Makefile @@ -3,30 +3,13 @@ PROGRAMS = \ ../bin/fiemap \ ../bin/fiewalk \ -all: $(PROGRAMS) depends.mk +all: $(PROGRAMS) include ../makeflags LIBS = -lcrucible -lpthread LDFLAGS = -L../lib -depends.mk: Makefile *.cc - for x in *.cc; do $(CXX) $(CXXFLAGS) -M "$$x"; done > depends.mk.new - mv -fv depends.mk.new depends.mk - -bees-version.c: Makefile *.cc *.h - echo "const char *BEES_VERSION = \"$(shell git describe --always --dirty || echo UNKNOWN)\";" > bees-version.new.c - mv -f bees-version.new.c bees-version.c - --include depends.mk - -%.o: %.cc %.h - $(CXX) $(CXXFLAGS) -o "$@" -c "$<" - -../bin/%: %.o - @echo Implicit bin rule "$<" '->' "$@" - $(CXX) $(CXXFLAGS) -o "$@" "$<" $(LDFLAGS) $(LIBS) - BEES_OBJS = \ bees.o \ bees-context.o \ @@ -35,11 +18,30 @@ BEES_OBJS = \ bees-roots.o \ bees-thread.o \ bees-types.o \ - bees-version.o \ -../bin/bees: $(BEES_OBJS) - $(CXX) $(CXXFLAGS) -o "$@" $(BEES_OBJS) $(LDFLAGS) $(LIBS) +bees-version.c: bees.h $(BEES_OBJS:.o=.cc) Makefile + echo "const char *BEES_VERSION = \"$(shell git describe --always --dirty || echo UNKNOWN)\";" > bees-version.new.c + mv -f bees-version.new.c bees-version.c + +.depends/%.dep: %.cc Makefile + @mkdir -p .depends + $(CXX) $(CXXFLAGS) -M -MF $@ -MT $(<:.cc=.o) $< + +depends.mk: $(BEES_OBJS:%.o=.depends/%.dep) + cat $^ > $@.new + mv -f $@.new $@ + +include depends.mk + +%.o: %.cc %.h + $(CXX) $(CXXFLAGS) -o $@ -c $< + +../bin/%: %.o + @echo Implicit bin rule "$<" '->' "$@" + $(CXX) $(CXXFLAGS) $(LDFLAGS) -o $@ $< $(LIBS) + +../bin/bees: $(BEES_OBJS) bees-version.o + $(CXX) $(CXXFLAGS) $(LDFLAGS) -o $@ $^ $(LIBS) clean: - -rm -fv bees-version.h - -rm -fv *.o bees-version.c + rm -fv *.o bees-version.c diff --git a/test/Makefile b/test/Makefile index c0091e1..e1ea18b 100644 --- a/test/Makefile +++ b/test/Makefile @@ -17,19 +17,23 @@ include ../makeflags LIBS = -lcrucible -lpthread LDFLAGS = -L../lib -Wl,-rpath=$(shell realpath ../lib) -depends.mk: *.cc - for x in *.cc; do $(CXX) $(CXXFLAGS) -M "$$x"; done > depends.mk.new - mv -fv depends.mk.new depends.mk +.depends/%.dep: %.cc tests.h Makefile + @mkdir -p .depends + $(CXX) $(CXXFLAGS) -M -MF $@ -MT $(<:.cc=.o) $< --include depends.mk +depends.mk: $(PROGRAMS:%=.depends/%.dep) + cat $^ > $@.new + mv -f $@.new $@ + +include depends.mk %.o: %.cc %.h ../makeflags - -echo "Implicit rule %.o: %.cc" >&2 - $(CXX) $(CXXFLAGS) -o "$@" -c "$<" + @echo "Implicit rule %.o: %.cc" + $(CXX) $(CXXFLAGS) -o $@ -c $< %: %.o ../makeflags - -echo "Implicit rule %: %.o" >&2 - $(CXX) $(CXXFLAGS) -o "$@" "$<" $(LDFLAGS) $(LIBS) + @echo "Implicit rule %: %.o" + $(CXX) $(CXXFLAGS) $(LDFLAGS) $(LIBS) -o $@ $< clean: - -rm -fv *.o + rm -fv *.o