diff --git a/Makefile b/Makefile index fcd6c85d4..70d351d68 100644 --- a/Makefile +++ b/Makefile @@ -1,5 +1,5 @@ -TESTS=quads mt-gcbench ephemerons # MT_GCBench MT_GCBench2 -COLLECTORS= \ +TESTS = quads mt-gcbench ephemerons # MT_GCBench MT_GCBench2 +COLLECTORS = \ bdw \ semi \ \ @@ -19,55 +19,50 @@ COLLECTORS= \ stack-conservative-parallel-generational-whippet \ heap-conservative-parallel-generational-whippet -DEFAULT_BUILD:=opt +DEFAULT_BUILD := opt -BUILD_CFLAGS_opt=-O2 -g -DNDEBUG -BUILD_CFLAGS_optdebug=-Og -g -DGC_DEBUG=1 -BUILD_CFLAGS_debug=-O0 -g -DGC_DEBUG=1 +BUILD_CFLAGS_opt = -O2 -g -DNDEBUG +BUILD_CFLAGS_optdebug = -Og -g -DGC_DEBUG=1 +BUILD_CFLAGS_debug = -O0 -g -DGC_DEBUG=1 -BUILD_CFLAGS=$(BUILD_CFLAGS_$(or $(BUILD),$(DEFAULT_BUILD))) +BUILD_CFLAGS = $(BUILD_CFLAGS_$(or $(BUILD),$(DEFAULT_BUILD))) -CC=gcc -CFLAGS=-Wall -flto -fno-strict-aliasing -fvisibility=hidden -Wno-unused $(BUILD_CFLAGS) -CPPFLAGS=-Iapi -LDFLAGS=-lpthread -flto -DEPFLAGS=-MMD -MP -MF $(@:%.o=.deps/%.d) -COMPILE=$(CC) $(CFLAGS) $(CPPFLAGS) $(DEPFLAGS) -o $@ -LINK=$(CC) $(LDFLAGS) -o $@ -PLATFORM=gnu-linux +CC = gcc +CFLAGS = -Wall -flto -fno-strict-aliasing -fvisibility=hidden -Wno-unused $(BUILD_CFLAGS) +CPPFLAGS = -Iapi +LDFLAGS = -lpthread -flto +DEPFLAGS = -MMD -MP -MF $(@:obj/%.o=.deps/%.d) +COMPILE = $(CC) $(CFLAGS) $(CPPFLAGS) $(DEPFLAGS) -o $@ +LINK = $(CC) $(LDFLAGS) -o $@ +PLATFORM = gnu-linux -ALL_TESTS=$(foreach COLLECTOR,$(COLLECTORS),$(addsuffix .$(COLLECTOR),$(TESTS))) +ALL_TESTS = $(foreach COLLECTOR,$(COLLECTORS),$(addsuffix .$(COLLECTOR),$(TESTS))) -all: $(ALL_TESTS) +all: $(ALL_TESTS:%=bin/%) +.deps obj bin: ; mkdir -p $@ -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 $(wildcard $(DEPS)) +include $(wildcard .deps/*) -gc-platform.o: src/gc-platform-$(PLATFORM).c +obj/gc-platform.o: src/gc-platform-$(PLATFORM).c | .deps obj $(COMPILE) -c $< -gc-stack.o: src/gc-stack.c +obj/gc-stack.o: src/gc-stack.c | .deps obj $(COMPILE) -c $< -gc-options.o: src/gc-options.c +obj/gc-options.o: src/gc-options.c | .deps obj $(COMPILE) -c $< -%.gc-ephemeron.o: src/gc-ephemeron.c +obj/%.gc-ephemeron.o: src/gc-ephemeron.c | .deps obj $(COMPILE) -include benchmarks/$*-embedder.h -c $< -GC_STEM_bdw=bdw -GC_CFLAGS_bdw=-DGC_CONSERVATIVE_ROOTS=1 -DGC_CONSERVATIVE_TRACE=1 -GC_IMPL_CFLAGS_bdw=`pkg-config --cflags bdw-gc` -GC_LIBS_bdw=`pkg-config --libs bdw-gc` +GC_STEM_bdw = bdw +GC_CFLAGS_bdw = -DGC_CONSERVATIVE_ROOTS=1 -DGC_CONSERVATIVE_TRACE=1 +GC_IMPL_CFLAGS_bdw = `pkg-config --cflags bdw-gc` +GC_LIBS_bdw = `pkg-config --libs bdw-gc` -GC_STEM_semi=semi -GC_CFLAGS_semi=-DGC_PRECISE_ROOTS=1 +GC_STEM_semi = semi +GC_CFLAGS_semi = -DGC_PRECISE_ROOTS=1 define whippet_variant -GC_STEM_$(1)=whippet -GC_CFLAGS_$(1)=$(2) +GC_STEM_$(1) = whippet +GC_CFLAGS_$(1) = $(2) endef define generational_whippet_variants @@ -89,7 +84,6 @@ endef $(eval $(call trace_whippet_variants)) # $(1) is the benchmark, $(2) is the collector configuration -# gc_stem for bdw: bdw make_gc_var = $$($(1)$(subst -,_,$(2))) gc_impl = $(call make_gc_var,GC_STEM_,$(1)).c gc_attrs = $(call make_gc_var,GC_STEM_,$(1))-attrs.h @@ -97,11 +91,11 @@ gc_cflags = $(call make_gc_var,GC_CFLAGS_,$(1)) gc_impl_cflags = $(call make_gc_var,GC_IMPL_CFLAGS_,$(1)) gc_libs = $(call make_gc_var,GC_LIBS_,$(1)) define benchmark_template -$(1).$(2).gc.o: src/$(call gc_impl,$(2)) +obj/$(1).$(2).gc.o: src/$(call gc_impl,$(2)) | .deps obj $$(COMPILE) $(call gc_cflags,$(2)) $(call gc_impl_cflags,$(2)) -include benchmarks/$(1)-embedder.h -c $$< -$(1).$(2).o: benchmarks/$(1).c +obj/$(1).$(2).o: benchmarks/$(1).c | .deps obj $$(COMPILE) $(call gc_cflags,$(2)) -include api/$(call gc_attrs,$(2)) -c $$< -$(1).$(2): $(1).$(2).gc.o $(1).$(2).o gc-stack.o gc-options.o gc-platform.o $(1).gc-ephemeron.o +bin/$(1).$(2): obj/$(1).$(2).gc.o obj/$(1).$(2).o obj/gc-stack.o obj/gc-options.o obj/gc-platform.o obj/$(1).gc-ephemeron.o | bin $$(LINK) $(call gc_libs,$(2)) $$^ endef @@ -112,8 +106,10 @@ $(foreach BENCHMARK,$(TESTS),\ .PRECIOUS: $(ALL_TESTS) $(OBJS) clean: - rm -f $(ALL_TESTS) $(OBJS) $(DEPS) + rm -f $(ALL_TESTS) + rm -rf .deps obj bin +# Clear some of the default rules. .SUFFIXES: .SECONDARY: %.c:;