diff --git a/.gitignore b/.gitignore index 8dd74cd6b..231806c14 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,3 @@ -/*.d /*.o /*.bdw /*.semi @@ -14,3 +13,4 @@ /*.heap-conservative-generational-whippet /*.heap-conservative-parallel-whippet /*.heap-conservative-parallel-generational-whippet +/.deps/ diff --git a/Makefile b/Makefile index 5f959c210..e959d9384 100644 --- a/Makefile +++ b/Makefile @@ -31,7 +31,8 @@ CC=gcc CFLAGS=-Wall -flto -fno-strict-aliasing -fvisibility=hidden -Wno-unused $(BUILD_CFLAGS) CPPFLAGS=-Iapi LDFLAGS=-lpthread -flto -OUTPUT_OPTION=-MMD -MP -o $@ +DEPFLAGS=-MMD -MP -MF $(@:%.o=.deps/%.d) +OUTPUT_OPTION=$(DEPFLAGS) -o $@ COMPILE=$(CC) $(CFLAGS) $(CPPFLAGS) $(OUTPUT_OPTION) LINK=$(CC) $(LDFLAGS) -o $@ PLATFORM=gnu-linux @@ -40,6 +41,14 @@ ALL_TESTS=$(foreach COLLECTOR,$(COLLECTORS),$(addsuffix .$(COLLECTOR),$(TESTS))) all: $(ALL_TESTS) +OBJS=gc-platform.o gc-stack.o gc-options.o +OBJS+=$(foreach TEST,$(TESTS),$(TEST).gc-ephemeron.o) +OBJS+=$(foreach TEST,$(ALL_TESTS),$(TEST).gc.o $(TEST).o) +DEPS=$(OBJS:%.o=.deps/%.d) +$(OBJS): | .deps +.deps: ; mkdir -p .deps +-include $(DEPS) + gc-platform.o: src/gc-platform.h src/gc-platform-$(PLATFORM).c api/gc-visibility.h $(COMPILE) -c src/gc-platform-$(PLATFORM).c @@ -150,11 +159,7 @@ gc-options.o: src/gc-options.c api/gc-options.h src/gc-options-internal.h %.heap-conservative-parallel-generational-whippet: %.heap-conservative-parallel-generational-whippet.o %.heap-conservative-parallel-generational-whippet.gc.o gc-stack.o gc-options.o gc-platform.o %.gc-ephemeron.o $(LINK) $^ --include gc-platform.d gc-stack.d gc-options.d --include $(foreach COLLECTOR,$(COLLECTORS),gc-ephemeron-$(COLLECTOR).d) --include $(foreach TEST,$(ALL_TESTS),$(TEST).gc.d $(TEST).d) - -.PRECIOUS: $(ALL_TESTS) $(foreach TEST,$(ALL_TESTS),$(TEST).gc.o $(TEST).o) +.PRECIOUS: $(ALL_TESTS) $(OBJS) clean: - rm -f $(ALL_TESTS) *.d *.o + rm -f $(ALL_TESTS) $(OBJS) $(DEPS)