Skip to content

Commit 0abe6d6

Browse files
committed
Sync gc/extconf_base.rb
1 parent d764343 commit 0abe6d6

1 file changed

Lines changed: 40 additions & 2 deletions

File tree

gc/extconf_base.rb

Lines changed: 40 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,49 @@
44

55
srcdir = File.join(__dir__, "..")
66
$INCFLAGS << " -I#{srcdir}"
7-
87
$CPPFLAGS << " -DBUILDING_MODULAR_GC"
98

109
append_cflags("-fPIC")
1110

11+
DTRACE_RULES = <<~MAKE
12+
13+
probes.stamp: $(GC_DTRACE_OBJS)
14+
$(Q) if test -f $@ -o -f $(GC_DTRACE_OBJ); then \
15+
$(RM) $(GC_DTRACE_OBJS) $@; \
16+
$(ECHO) rebuilding objects which were modified by "dtrace -G"; \
17+
$(MAKE) $(GC_DTRACE_OBJS); \
18+
fi
19+
$(Q) touch $@
20+
21+
$(GC_DTRACE_OBJ): $(top_srcdir)/probes.d $(GC_DTRACE_REBUILD:yes=probes.stamp)
22+
$(ECHO) processing GC probes in object files
23+
$(Q) CC="$(CC)" CFLAGS="$(CFLAGS) $(INCFLAGS) $(CPPFLAGS)" $(GC_DTRACE) -G -C $(INCFLAGS) -s $(top_srcdir)/probes.d -o $@ $(GC_DTRACE_OBJS)
24+
MAKE
25+
1226
def create_gc_makefile(name, &block)
13-
create_makefile("librubygc.#{name}", &block)
27+
dtrace_obj = ENV.fetch("DTRACE_OBJ", "")
28+
dtrace_enabled = (name == "default" && !dtrace_obj.empty?)
29+
30+
if name == "default"
31+
$INCFLAGS << " -I$(topdir)"
32+
$headers << "$(topdir)/probes.h"
33+
$cleanfiles << "probes.stamp"
34+
end
35+
36+
create_makefile("librubygc.#{name}") do |conf|
37+
conf = block.call(conf) if block
38+
next conf unless dtrace_enabled
39+
40+
gc_objs = $objs.join(" ")
41+
conf = Array(conf).join.sub(/^OBJS = .*$/, "OBJS = #{gc_objs} #{dtrace_obj}")
42+
conf + <<~MAKE
43+
44+
\tGC_DTRACE = #{ENV.fetch("DTRACE")}
45+
\tGC_DTRACE_OBJ = #{dtrace_obj}
46+
\tGC_DTRACE_OBJS = #{gc_objs}
47+
\tGC_DTRACE_REBUILD = #{ENV.fetch("DTRACE_REBUILD", "")}
48+
MAKE
49+
end
50+
51+
File.write("Makefile", DTRACE_RULES, mode: "ab") if dtrace_enabled
1452
end

0 commit comments

Comments
 (0)