From f45f287df9f488e70844038f0c7542a60034f7ae Mon Sep 17 00:00:00 2001 From: Peter Zhu Date: Tue, 9 Jul 2024 10:54:15 -0400 Subject: [PATCH 1/2] Move gc_impl.c to gc/gc_impl.c This commit creates a new directory `gc` to put different GC implementations and moves the default GC from gc_impl.c to gc/gc_impl.c. The default GC can be easily switched using the `BUILTIN_GC` variable in Makefile.in. --- .github/workflows/compilers.yml | 4 ++-- common.mk | 5 +++-- gc_impl.c => gc/gc_impl.c | 0 template/Makefile.in | 5 +++++ win32/Makefile.sub | 7 +++++++ 5 files changed, 17 insertions(+), 4 deletions(-) rename gc_impl.c => gc/gc_impl.c (100%) diff --git a/.github/workflows/compilers.yml b/.github/workflows/compilers.yml index 5e9abde523fb39..37c4a7b575b1d9 100644 --- a/.github/workflows/compilers.yml +++ b/.github/workflows/compilers.yml @@ -211,9 +211,9 @@ jobs: - { name: UNIVERSAL_PARSER, env: { cppflags: '-DUNIVERSAL_PARSER' } } - name: SHARED_GC shared_gc: true - shared_gc_dir: '../gc' + shared_gc_dir: '/ruby_gc' env: - append_configure: '--with-shared-gc=../gc' + append_configure: '--with-shared-gc=/ruby_gc' name: ${{ matrix.entry.name }} diff --git a/common.mk b/common.mk index eb1ccbcdeba125..1cd4b1c6a33478 100644 --- a/common.mk +++ b/common.mk @@ -1915,7 +1915,7 @@ shared-gc: probes.h exit 1; \ else \ echo generating $(shared_gc_dir)librubygc.$(SHARED_GC).$(SOEXT); \ - $(LDSHARED) -I$(srcdir)/include -I$(srcdir) -I$(arch_hdrdir) -I. $(XDLDFLAGS) $(cflags) -fPIC -o $(shared_gc_dir)librubygc.$(SHARED_GC).$(SOEXT) $(srcdir)/$(SHARED_GC).c; \ + $(LDSHARED) -I$(srcdir)/include -I$(srcdir) -I$(arch_hdrdir) -I. $(XDLDFLAGS) $(cflags) -fPIC -o $(shared_gc_dir)librubygc.$(SHARED_GC).$(SOEXT) $(srcdir)/gc/$(SHARED_GC).c; \ fi help: PHONY @@ -7506,6 +7506,7 @@ gc_impl.$(OBJEXT): $(CCAN_DIR)/container_of/container_of.h gc_impl.$(OBJEXT): $(CCAN_DIR)/list/list.h gc_impl.$(OBJEXT): $(CCAN_DIR)/str/str.h gc_impl.$(OBJEXT): $(hdrdir)/ruby/ruby.h +gc_impl.$(OBJEXT): $(top_srcdir)/gc/gc_impl.c gc_impl.$(OBJEXT): $(top_srcdir)/internal/bits.h gc_impl.$(OBJEXT): $(top_srcdir)/internal/compilers.h gc_impl.$(OBJEXT): $(top_srcdir)/internal/sanitizers.h @@ -7527,7 +7528,7 @@ gc_impl.$(OBJEXT): {$(VPATH)}darray.h gc_impl.$(OBJEXT): {$(VPATH)}debug.h gc_impl.$(OBJEXT): {$(VPATH)}debug_counter.h gc_impl.$(OBJEXT): {$(VPATH)}defines.h -gc_impl.$(OBJEXT): {$(VPATH)}gc_impl.c +gc_impl.$(OBJEXT): {$(VPATH)}gc/gc_impl.c gc_impl.$(OBJEXT): {$(VPATH)}intern.h gc_impl.$(OBJEXT): {$(VPATH)}internal/abi.h gc_impl.$(OBJEXT): {$(VPATH)}internal/anyargs.h diff --git a/gc_impl.c b/gc/gc_impl.c similarity index 100% rename from gc_impl.c rename to gc/gc_impl.c diff --git a/template/Makefile.in b/template/Makefile.in index 79a23fcdeb2c39..b5da41280232bc 100644 --- a/template/Makefile.in +++ b/template/Makefile.in @@ -67,6 +67,7 @@ RUBY_VERSION_NAME = @RUBY_VERSION_NAME@ UNIVERSAL_ARCHNAMES = @UNIVERSAL_ARCHNAMES@ BUILTIN_BINARY = @X_BUILTIN_BINARY@ +BUILTIN_GC = gc_impl shared_gc_dir = @shared_gc_dir@ TESTUI = console @@ -444,6 +445,10 @@ $(srcdir)/enc/jis/props.h: enc/jis/props.kwd $(CP) $@ $(?:.kwd=.h.blt); \ fi +gc_impl.$(OBJEXT): gc/$(BUILTIN_GC).c probes.h + @$(ECHO) compiling $< + $(Q) $(CC) $(CFLAGS) $(XCFLAGS) $(CPPFLAGS) $(COUTFLAG)$@ -c $< + .c.$(OBJEXT): @$(ECHO) compiling $< $(Q) $(CC) $(CFLAGS) $(XCFLAGS) $(CPPFLAGS) $(COUTFLAG)$@ -c $< diff --git a/win32/Makefile.sub b/win32/Makefile.sub index 46213466eb8985..2b791c0562c67a 100644 --- a/win32/Makefile.sub +++ b/win32/Makefile.sub @@ -443,6 +443,8 @@ PREP = miniruby$(EXEEXT) BUILTIN_BINARY = yes !endif +BUILTIN_GC = default + !if !defined(EXTSTATIC) EXTSTATIC = !endif @@ -1336,6 +1338,11 @@ $(ruby_pc): $(RBCONFIG) $(ECHO) compiling $(<:\=/) $(Q) $(CC) $(CFLAGS) $(XCFLAGS) $(CPPFLAGS) $(COUTFLAG)$@ -c $(CSRCFLAG)$(<:\=/) +BUILTIN_GC_PATH = $(srcdir)/gc/$(BUILTIN_GC).c +gc_impl.obj: $(BUILTIN_GC_PATH) + $(ECHO) compiling $(BUILTIN_GC_PATH:\=/) + $(Q) $(CC) $(CFLAGS) $(XCFLAGS) $(CPPFLAGS) $(COUTFLAG)$@ -c $(CSRCFLAG)$(BUILTIN_GC_PATH:\=/) + {$(srcdir)/missing}.c.asm: $(ECHO) translating $(<:\=/) $(Q) $(CC) $(CFLAGS) $(XCFLAGS) $(CPPFLAGS) -Fa$@ -c $(CSRCFLAG)$(<:\=/) From ca35fffbecc2eb1682bc45c2380a58361f6e9973 Mon Sep 17 00:00:00 2001 From: Peter Zhu Date: Tue, 9 Jul 2024 11:01:44 -0400 Subject: [PATCH 2/2] Rename gc/gc_impl.c to gc/default.c Changing the name makes it clear that this is the default GC in Ruby. --- .github/workflows/compilers.yml | 4 ++-- common.mk | 3 +-- gc/{gc_impl.c => default.c} | 0 template/Makefile.in | 2 +- 4 files changed, 4 insertions(+), 5 deletions(-) rename gc/{gc_impl.c => default.c} (100%) diff --git a/.github/workflows/compilers.yml b/.github/workflows/compilers.yml index 37c4a7b575b1d9..e669a001fde252 100644 --- a/.github/workflows/compilers.yml +++ b/.github/workflows/compilers.yml @@ -263,9 +263,9 @@ jobs: - name: Build shared GC run: > - echo "RUBY_GC_LIBRARY=librubygc.gc_impl.so" >> $GITHUB_ENV && + echo "RUBY_GC_LIBRARY=librubygc.default.so" >> $GITHUB_ENV && mkdir ${{ matrix.entry.shared_gc_dir }} && - make shared-gc SHARED_GC=gc_impl + make shared-gc SHARED_GC=default if: ${{ matrix.entry.shared_gc }} - name: Add to ext/Setup diff --git a/common.mk b/common.mk index 1cd4b1c6a33478..3a9df0d32aebdf 100644 --- a/common.mk +++ b/common.mk @@ -7506,7 +7506,7 @@ gc_impl.$(OBJEXT): $(CCAN_DIR)/container_of/container_of.h gc_impl.$(OBJEXT): $(CCAN_DIR)/list/list.h gc_impl.$(OBJEXT): $(CCAN_DIR)/str/str.h gc_impl.$(OBJEXT): $(hdrdir)/ruby/ruby.h -gc_impl.$(OBJEXT): $(top_srcdir)/gc/gc_impl.c +gc_impl.$(OBJEXT): $(top_srcdir)/gc/default.c gc_impl.$(OBJEXT): $(top_srcdir)/internal/bits.h gc_impl.$(OBJEXT): $(top_srcdir)/internal/compilers.h gc_impl.$(OBJEXT): $(top_srcdir)/internal/sanitizers.h @@ -7528,7 +7528,6 @@ gc_impl.$(OBJEXT): {$(VPATH)}darray.h gc_impl.$(OBJEXT): {$(VPATH)}debug.h gc_impl.$(OBJEXT): {$(VPATH)}debug_counter.h gc_impl.$(OBJEXT): {$(VPATH)}defines.h -gc_impl.$(OBJEXT): {$(VPATH)}gc/gc_impl.c gc_impl.$(OBJEXT): {$(VPATH)}intern.h gc_impl.$(OBJEXT): {$(VPATH)}internal/abi.h gc_impl.$(OBJEXT): {$(VPATH)}internal/anyargs.h diff --git a/gc/gc_impl.c b/gc/default.c similarity index 100% rename from gc/gc_impl.c rename to gc/default.c diff --git a/template/Makefile.in b/template/Makefile.in index b5da41280232bc..fc3739b66f38ba 100644 --- a/template/Makefile.in +++ b/template/Makefile.in @@ -67,7 +67,7 @@ RUBY_VERSION_NAME = @RUBY_VERSION_NAME@ UNIVERSAL_ARCHNAMES = @UNIVERSAL_ARCHNAMES@ BUILTIN_BINARY = @X_BUILTIN_BINARY@ -BUILTIN_GC = gc_impl +BUILTIN_GC = default shared_gc_dir = @shared_gc_dir@ TESTUI = console