diff --git a/Makefile b/Makefile index c5c91ae3e..c8a753590 100644 --- a/Makefile +++ b/Makefile @@ -24,11 +24,16 @@ COLLECTORS = \ 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 +BUILD_CFLAGS_optdebug = -Og -g +BUILD_CFLAGS_debug = -O0 -g + +BUILD_CPPFLAGS_opt = -DNDEBUG +BUILD_CPPFLAGS_optdebug = -DGC_DEBUG=1 +BUILD_CPPFLAGS_debug = -DGC_DEBUG=1 BUILD_CFLAGS = $(BUILD_CFLAGS_$(or $(BUILD),$(DEFAULT_BUILD))) +BUILD_CPPFLAGS = $(BUILD_CPPFLAGS_$(or $(BUILD),$(DEFAULT_BUILD))) USE_LTTNG_0 := USE_LTTNG_1 := 1 @@ -40,7 +45,7 @@ TRACEPOINT_LIBS = $(LTTNG_LIBS) CC = gcc CFLAGS = -Wall -flto -fno-strict-aliasing -fvisibility=hidden -Wno-unused $(BUILD_CFLAGS) -CPPFLAGS = -Iapi $(TRACEPOINT_CPPFLAGS) +CPPFLAGS = -Iapi $(TRACEPOINT_CPPFLAGS) $(BUILD_CPPFLAGS) LDFLAGS = -lpthread -flto=auto $(TRACEPOINT_LIBS) DEPFLAGS = -MMD -MP -MF $(@:obj/%.o=.deps/%.d) COMPILE = $(CC) $(CFLAGS) $(CPPFLAGS) $(DEPFLAGS) -o $@ @@ -63,30 +68,30 @@ obj/gc-options.o: src/gc-options.c | .deps obj obj/gc-tracepoint.o: src/gc-tracepoint.c | .deps obj $(COMPILE) -c $< obj/%.gc-ephemeron.o: src/gc-ephemeron.c | .deps obj - $(COMPILE) -include benchmarks/$*-embedder.h -c $< + $(COMPILE) -DGC_EMBEDDER=\"../benchmarks/$*-embedder.h\" -c $< obj/%.gc-finalizer.o: src/gc-finalizer.c | .deps obj - $(COMPILE) -include benchmarks/$*-embedder.h -c $< + $(COMPILE) -DGC_EMBEDDER=\"../benchmarks/$*-embedder.h\" -c $< GC_STEM_bdw = bdw -GC_CFLAGS_bdw = -DGC_CONSERVATIVE_ROOTS=1 -DGC_CONSERVATIVE_TRACE=1 +GC_CPPFLAGS_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_CPPFLAGS_semi = -DGC_PRECISE_ROOTS=1 GC_LIBS_semi = -lm GC_STEM_pcc = pcc -GC_CFLAGS_pcc = -DGC_PRECISE_ROOTS=1 -DGC_PARALLEL=1 +GC_CPPFLAGS_pcc = -DGC_PRECISE_ROOTS=1 -DGC_PARALLEL=1 GC_LIBS_pcc = -lm GC_STEM_generational_pcc = $(GC_STEM_pcc) -GC_CFLAGS_generational_pcc = $(GC_CFLAGS_pcc) -DGC_GENERATIONAL=1 +GC_CPPFLAGS_generational_pcc = $(GC_CPPFLAGS_pcc) -DGC_GENERATIONAL=1 GC_LIBS_generational_pcc = $(GC_LIBS_pcc) define mmc_variant GC_STEM_$(1) = mmc -GC_CFLAGS_$(1) = $(2) +GC_CPPFLAGS_$(1) = $(2) GC_LIBS_$(1) = -lm endef @@ -112,14 +117,14 @@ $(eval $(call trace_mmc_variants)) 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 -gc_cflags = $(call make_gc_var,GC_CFLAGS_,$(1)) +gc_cppflags = $(call make_gc_var,GC_CPPFLAGS_,$(1)) gc_impl_cflags = $(call make_gc_var,GC_IMPL_CFLAGS_,$(1)) gc_libs = $(call make_gc_var,GC_LIBS_,$(1)) define benchmark_template 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 $$< + $$(COMPILE) $(call gc_cppflags,$(2)) $(call gc_impl_cflags,$(2)) -DGC_EMBEDDER=\"../benchmarks/$(1)-embedder.h\" -c $$< obj/$(1).$(2).o: benchmarks/$(1).c | .deps obj - $$(COMPILE) $(call gc_cflags,$(2)) -include api/$(call gc_attrs,$(2)) -c $$< + $$(COMPILE) $(call gc_cppflags,$(2)) -include api/$(call gc_attrs,$(2)) -c $$< 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/gc-tracepoint.o obj/$(1).gc-ephemeron.o obj/$(1).gc-finalizer.o | bin $$(LINK) $$^ $(call gc_libs,$(2)) endef diff --git a/embed.am b/embed.am index caa701af6..83c89d172 100644 --- a/embed.am +++ b/embed.am @@ -4,7 +4,7 @@ # whippet/ subdirectory: # # noinst_LTLIBRARIES = -# WHIPPET_EMBEDDER_CPPFLAGS = -include src/my-embedder.h +# WHIPPET_EMBEDDER_H = $(srcdir)/src/my-embedder.h # include whippet/embed.am # # my-embedder.h should provide the various hooks that Whippet needs to @@ -12,9 +12,8 @@ # # The result is a libwhippet.la. To compile and link against it: # -# AM_CFLAGS = $(WHIPPET_CPPFLAGS) $(WHIPPET_CFLAGS) $(WHIPPET_TO_EMBEDDER_CPPFLAGS) +# AM_CPPFLAGS = $(WHIPPET_CPPFLAGS) # LDADD = libwhippet.la -# AM_LDFLAGS = $(WHIPPET_TO_EMBEDDER_LDFLAGS) # # The assumption is that the embedder will build a single copy of # Whippet, specialized against a single collector, a single set of @@ -93,72 +92,70 @@ libwhippet_la_SOURCES = \ %D%/src/swar.h \ %D%/src/tracer.h -WHIPPET_CFLAGS_bdw = -DGC_CONSERVATIVE_ROOTS=1 -DGC_CONSERVATIVE_TRACE=1 -WHIPPET_CFLAGS_semi = -DGC_PRECISE_ROOTS=1 -WHIPPET_CFLAGS_pcc = -DGC_PRECISE_ROOTS=1 -DGC_PARALLEL=1 -WHIPPET_CFLAGS_generational_pcc = $(WHIPPET_CFLAGS_pcc) -DGC_GENERATIONAL=1 -WHIPPET_CFLAGS_mmc = \ +WHIPPET_CPPFLAGS_bdw = -DGC_CONSERVATIVE_ROOTS=1 -DGC_CONSERVATIVE_TRACE=1 +WHIPPET_CPPFLAGS_semi = -DGC_PRECISE_ROOTS=1 +WHIPPET_CPPFLAGS_pcc = -DGC_PRECISE_ROOTS=1 -DGC_PARALLEL=1 +WHIPPET_CPPFLAGS_generational_pcc = $(WHIPPET_CPPFLAGS_pcc) -DGC_GENERATIONAL=1 +WHIPPET_CPPFLAGS_mmc = \ -DGC_PRECISE_ROOTS=1 -WHIPPET_CFLAGS_generational_mmc = \ +WHIPPET_CPPFLAGS_generational_mmc = \ -DGC_PRECISE_ROOTS=1 -DGC_GENERATIONAL=1 -WHIPPET_CFLAGS_parallel_mmc = \ +WHIPPET_CPPFLAGS_parallel_mmc = \ -DGC_PRECISE_ROOTS=1 -DGC_PARALLEL=1 -WHIPPET_CFLAGS_parallel_generational_mmc = \ +WHIPPET_CPPFLAGS_parallel_generational_mmc = \ -DGC_PRECISE_ROOTS=1 -DGC_GENERATIONAL=1 -DGC_PARALLEL=1 -WHIPPET_CFLAGS_stack_conservative_mmc = \ +WHIPPET_CPPFLAGS_stack_conservative_mmc = \ -DGC_CONSERVATIVE_ROOTS=1 -WHIPPET_CFLAGS_stack_conservative_generational_mmc = \ +WHIPPET_CPPFLAGS_stack_conservative_generational_mmc = \ -DGC_CONSERVATIVE_ROOTS=1 -DGC_GENERATIONAL=1 -WHIPPET_CFLAGS_stack_conservative_parallel_mmc = \ +WHIPPET_CPPFLAGS_stack_conservative_parallel_mmc = \ -DGC_CONSERVATIVE_ROOTS=1 -DGC_PARALLEL=1 -WHIPPET_CFLAGS_stack_conservative_parallel_generational_mmc = \ +WHIPPET_CPPFLAGS_stack_conservative_parallel_generational_mmc = \ -DGC_CONSERVATIVE_ROOTS=1 -DGC_GENERATIONAL=1 -DGC_PARALLEL=1 -WHIPPET_CFLAGS_heap_conservative_mmc = \ +WHIPPET_CPPFLAGS_heap_conservative_mmc = \ -DGC_CONSERVATIVE_ROOTS=1 -DGC_CONSERVATIVE_TRACE=1 -WHIPPET_CFLAGS_heap_conservative_generational_mmc = \ +WHIPPET_CPPFLAGS_heap_conservative_generational_mmc = \ -DGC_CONSERVATIVE_ROOTS=1 -DGC_CONSERVATIVE_TRACE=1 -DGC_GENERATIONAL=1 -WHIPPET_CFLAGS_heap_conservative_parallel_mmc = \ +WHIPPET_CPPFLAGS_heap_conservative_parallel_mmc = \ -DGC_CONSERVATIVE_ROOTS=1 -DGC_CONSERVATIVE_TRACE=1 -DGC_PARALLEL=1 -WHIPPET_CFLAGS_heap_conservative_parallel_generational_mmc = \ +WHIPPET_CPPFLAGS_heap_conservative_parallel_generational_mmc = \ -DGC_CONSERVATIVE_ROOTS=1 -DGC_CONSERVATIVE_TRACE=1 -DGC_GENERATIONAL=1 -DGC_PARALLEL=1 -WHIPPET_CFLAGS = $(WHIPPET_CFLAGS_$(subst -,_,$(WHIPPET_COLLECTOR))) +WHIPPET_CPPFLAGS = $(WHIPPET_CPPFLAGS_$(subst -,_,$(WHIPPET_COLLECTOR))) +WHIPPET_CPPFLAGS += -I$(srcdir)/%D%/api WHIPPET_IMPL_CFLAGS = WHIPPET_LIBS = -lm -WHIPPET_CPPFLAGS = -I$(srcdir)/%D%/api -WHIPPET_TO_EMBEDDER_CPPFLAGS = $(WHIPPET_CPPFLAGS) if WHIPPET_ENABLE_DEBUG -WHIPPET_CFLAGS += -DGC_DEBUG=1 +WHIPPET_CPPFLAGS += -DGC_DEBUG=1 endif if WHIPPET_COLLECTOR_SEMI libwhippet_la_SOURCES += %D%/src/semi.c -WHIPPET_TO_EMBEDDER_CPPFLAGS += -include $(srcdir)/%D%/api/semi-attrs.h +WHIPPET_CPPFLAGS += -DWHIPPET_ATTRS=\"$(srcdir)/%D%/api/semi-attrs.h\" endif if WHIPPET_COLLECTOR_PCC libwhippet_la_SOURCES += %D%/src/pcc.c -WHIPPET_TO_EMBEDDER_CPPFLAGS += -include $(srcdir)/%D%/api/pcc-attrs.h +WHIPPET_CPPFLAGS += -DWHIPPET_ATTRS=\"$(srcdir)/%D%/api/pcc-attrs.h\" endif if WHIPPET_COLLECTOR_BDW libwhippet_la_SOURCES += %D%/src/bdw.c WHIPPET_IMPL_CFLAGS += $(WHIPPET_BDW_CFLAGS) WHIPPET_LIBS += $(WHIPPET_BDW_LIBS) -WHIPPET_TO_EMBEDDER_CPPFLAGS += -include $(srcdir)/%D%/api/bdw-attrs.h +WHIPPET_CPPFLAGS += -DWHIPPET_ATTRS=\"$(srcdir)/%D%/api/bdw-attrs.h\" endif if WHIPPET_COLLECTOR_MMC libwhippet_la_SOURCES += %D%/src/mmc.c -WHIPPET_TO_EMBEDDER_CPPFLAGS += -include $(srcdir)/%D%/api/mmc-attrs.h +WHIPPET_CPPFLAGS += -DWHIPPET_ATTRS=\"$(srcdir)/%D%/api/mmc-attrs.h\" endif # add to cflags: -flto -fvisibility=hidden -fno-strict-aliasing libwhippet_common_la_CPPFLAGS = $(WHIPPET_CPPFLAGS) libwhippet_common_la_CFLAGS = -Wall -Wno-unused $(CFLAGS) -libwhippet_common_la_CFLAGS += $(WHIPPET_CFLAGS) libwhippet_common_la_LDFLAGS = -lpthread $(LDFLAGS) libwhippet_common_la_LIBADD = $(LIBS) @@ -171,7 +168,8 @@ if !WHIPPET_ENABLE_DEBUG libwhippet_common_la_CFLAGS += -DNDEBUG endif -libwhippet_la_CPPFLAGS = $(libwhippet_common_la_CPPFLAGS) $(WHIPPET_EMBEDDER_CPPFLAGS) +libwhippet_la_CPPFLAGS = $(libwhippet_common_la_CPPFLAGS) +libwhippet_la_CPPFLAGS += -DGC_EMBEDDER=\"$(WHIPPET_EMBEDDER_H)\" libwhippet_la_CFLAGS = $(libwhippet_common_la_CFLAGS) libwhippet_la_CFLAGS += $(WHIPPET_IMPL_CFLAGS) libwhippet_la_LDFLAGS = $(libwhippet_common_la_LDFLAGS) $(WHIPPET_LIBS) diff --git a/embed.mk b/embed.mk index 0d2de0df5..1fdef7d8b 100644 --- a/embed.mk +++ b/embed.mk @@ -1,11 +1,19 @@ -GC_COLLECTOR ?= semi +GC_COLLECTOR ?= pcc +GC_EMBEDDER_H ?= whippet-embedder.h +GC_EMBEDDER_CPPFLAGS ?= +GC_EMBEDDER_CFLAGS ?= DEFAULT_BUILD := opt -BUILD_CFLAGS_opt = -O2 -g -DNDEBUG -BUILD_CFLAGS_optdebug = -O2 -g -DGC_DEBUG=1 -BUILD_CFLAGS_debug = -O0 -g -DGC_DEBUG=1 +BUILD_CPPFLAGS_opt = -DNDEBUG +BUILD_CPPFLAGS_optdebug = -DGC_DEBUG=1 +BUILD_CPPFLAGS_debug = -DGC_DEBUG=1 +BUILD_CFLAGS_opt = -O2 -g +BUILD_CFLAGS_optdebug = -O2 -g +BUILD_CFLAGS_debug = -O0 -g + +GC_BUILD_CPPFLAGS = $(BUILD_CPPFLAGS_$(or $(GC_BUILD),$(DEFAULT_BUILD))) GC_BUILD_CFLAGS = $(BUILD_CFLAGS_$(or $(GC_BUILD),$(DEFAULT_BUILD))) V ?= 1 @@ -23,39 +31,40 @@ GC_TRACEPOINT_LIBS = $(GC_LTTNG_LIBS) GC_V = $(v_$(V)) GC_CC = gcc GC_CFLAGS = -Wall -flto -fno-strict-aliasing -fvisibility=hidden -Wno-unused $(GC_BUILD_CFLAGS) -GC_CPPFLAGS = -I$(WHIPPET)api $(GC_TRACEPOINT_CPPFLAGS) +GC_CPPFLAGS = -I$(GC_BASE)api $(GC_TRACEPOINT_CPPFLAGS) $(GC_BUILD_CPPFLAGS) GC_LDFLAGS = -lpthread -flto=auto $(GC_TRACEPOINT_LIBS) GC_DEPFLAGS = GC_COMPILE = $(GC_V)$(GC_CC) $(GC_CFLAGS) $(GC_CPPFLAGS) $(GC_DEPFLAGS) -o $@ GC_LINK = $(GC_V)$(GC_CC) $(GC_LDFLAGS) -o $@ GC_PLATFORM = gnu-linux GC_OBJDIR = +GC_EMBEDDER_CPPFLAGS += -DGC_EMBEDDER=\"$(GC_EMBEDDER_H)\" -$(GC_OBJDIR)gc-platform.o: $(WHIPPET)src/gc-platform-$(GC_PLATFORM).c +$(GC_OBJDIR)gc-platform.o: $(GC_BASE)src/gc-platform-$(GC_PLATFORM).c $(GC_COMPILE) -c $< -$(GC_OBJDIR)gc-stack.o: $(WHIPPET)src/gc-stack.c +$(GC_OBJDIR)gc-stack.o: $(GC_BASE)src/gc-stack.c $(GC_COMPILE) -c $< -$(GC_OBJDIR)gc-options.o: $(WHIPPET)src/gc-options.c +$(GC_OBJDIR)gc-options.o: $(GC_BASE)src/gc-options.c $(GC_COMPILE) -c $< -$(GC_OBJDIR)gc-tracepoint.o: $(WHIPPET)src/gc-tracepoint.c +$(GC_OBJDIR)gc-tracepoint.o: $(GC_BASE)src/gc-tracepoint.c $(GC_COMPILE) -c $< -$(GC_OBJDIR)gc-ephemeron.o: $(WHIPPET)src/gc-ephemeron.c - $(GC_COMPILE) $(EMBEDDER_TO_GC_CFLAGS) -c $< -$(GC_OBJDIR)gc-finalizer.o: $(WHIPPET)src/gc-finalizer.c - $(GC_COMPILE) $(EMBEDDER_TO_GC_CFLAGS) -c $< +$(GC_OBJDIR)gc-ephemeron.o: $(GC_BASE)src/gc-ephemeron.c + $(GC_COMPILE) $(GC_EMBEDDER_CFLAGS) -c $< +$(GC_OBJDIR)gc-finalizer.o: $(GC_BASE)src/gc-finalizer.c + $(GC_COMPILE) $(GC_EMBEDDER_CFLAGS) -c $< GC_STEM_bdw = bdw -GC_CFLAGS_bdw = -DGC_CONSERVATIVE_ROOTS=1 -DGC_CONSERVATIVE_TRACE=1 +GC_CPPFLAGS_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_CPPFLAGS_semi = -DGC_PRECISE_ROOTS=1 GC_LIBS_semi = -lm GC_STEM_pcc = pcc -GC_CFLAGS_pcc = -DGC_PRECISE_ROOTS=1 -DGC_PARALLEL=1 -GC_LIBS_pcc = -lm +GC_CPPFLAGS_pcc = -DGC_PRECISE_ROOTS=1 -DGC_PARALLEL=1 +GC_LIBS_pcc = -lm GC_STEM_generational_pcc = $(GC_STEM_pcc) GC_CFLAGS_generational_pcc = $(GC_CFLAGS_pcc) -DGC_GENERATIONAL=1 @@ -63,7 +72,7 @@ GC_LIBS_generational_pcc = $(GC_LIBS_pcc) define mmc_variant GC_STEM_$(1) = mmc -GC_CFLAGS_$(1) = $(2) +GC_CPPFLAGS_$(1) = $(2) GC_LIBS_$(1) = -lm endef @@ -88,18 +97,17 @@ $(eval $(call trace_mmc_variants)) gc_var = $($(1)$(subst -,_,$(2))) gc_impl = $(call gc_var,GC_STEM_,$(1)).c gc_attrs = $(call gc_var,GC_STEM_,$(1))-attrs.h -gc_cflags = $(call gc_var,GC_CFLAGS_,$(1)) +gc_cppflags = $(call gc_var,GC_CPPFLAGS_,$(1)) gc_impl_cflags = $(call gc_var,GC_IMPL_CFLAGS_,$(1)) gc_libs = $(call gc_var,GC_LIBS_,$(1)) GC_IMPL = $(call gc_impl,$(GC_COLLECTOR)) -GC_CFLAGS += $(call gc_cflags,$(GC_COLLECTOR)) +GC_CPPFLAGS += $(call gc_cppflags,$(GC_COLLECTOR)) +GC_CPPFLAGS += -DWHIPPET_ATTRS=\"$(GC_BASE)api/$(GC_IMPL)-attrs.h\" GC_IMPL_CFLAGS = $(call gc_impl_cflags,$(GC_COLLECTOR)) -GC_ATTRS = $(WHIPPET)api/$(call gc_attrs,$(GC_COLLECTOR)) -GC_TO_EMBEDDER_CFLAGS = -include $(GC_ATTRS) GC_LIBS = $(call gc_libs,$(GC_COLLECTOR)) -$(GC_OBJDIR)gc-impl.o: $(WHIPPET)src/$(call gc_impl,$(GC_COLLECTOR)) +$(GC_OBJDIR)gc-impl.o: $(GC_BASE)src/$(call gc_impl,$(GC_COLLECTOR)) $(GC_COMPILE) $(GC_IMPL_CFLAGS) $(EMBEDDER_TO_GC_CFLAGS) -c $< GC_OBJS=$(foreach O,gc-platform.o gc-stack.o gc-options.o gc-tracepoint.o gc-ephemeron.o gc-finalizer.o gc-impl.o,$(GC_OBJDIR)$(O)) diff --git a/src/gc-ephemeron.c b/src/gc-ephemeron.c index 0f1f9720a..7ef5b53f6 100644 --- a/src/gc-ephemeron.c +++ b/src/gc-ephemeron.c @@ -6,7 +6,7 @@ #include "address-hash.h" #include "debug.h" -#include "gc-embedder-api.h" +#include "embedder-api-impl.h" #include "gc-ephemeron-internal.h" // # Overview diff --git a/src/gc-finalizer.c b/src/gc-finalizer.c index ae795cccf..d3a4fa91e 100644 --- a/src/gc-finalizer.c +++ b/src/gc-finalizer.c @@ -6,7 +6,7 @@ #define GC_IMPL 1 #include "debug.h" -#include "gc-embedder-api.h" +#include "embedder-api-impl.h" #include "gc-ephemeron-internal.h" // for gc_visit_ephemeron_key #include "gc-finalizer-internal.h" diff --git a/src/gc-internal.h b/src/gc-internal.h index 715b72a99..fe1cdf66c 100644 --- a/src/gc-internal.h +++ b/src/gc-internal.h @@ -5,6 +5,7 @@ #error internal header file, not part of API #endif +#include "embedder-api-impl.h" #include "gc-ephemeron-internal.h" #include "gc-finalizer-internal.h" #include "gc-options-internal.h"