mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
Improve build process and coroutine implementation selection.
This commit is contained in:
parent
91aae651bf
commit
7291fef55c
5 changed files with 50 additions and 47 deletions
|
@ -924,9 +924,8 @@ strlcpy.$(OBJEXT): {$(VPATH)}strlcpy.c
|
|||
strstr.$(OBJEXT): {$(VPATH)}strstr.c
|
||||
nt.$(OBJEXT): {$(VPATH)}nt.c
|
||||
|
||||
COROUTINE_SRC = $(COROUTINE_H:.h=).$(ASMEXT)
|
||||
.coroutine_obj $(COROUTINE_OBJ): \
|
||||
{$(VPATH)}$(COROUTINE_SRC:/ucontext/Context.S=/ucontext/Context.c) \
|
||||
{$(VPATH)}$(COROUTINE_SRC) \
|
||||
$(COROUTINE_H:/Context.h=/.time)
|
||||
$(COROUTINE_H:/Context.h=/.time):
|
||||
$(Q) $(MAKEDIRS) $(@D)
|
||||
|
|
58
configure.ac
58
configure.ac
|
@ -964,7 +964,7 @@ main()
|
|||
AS_IF([test "$target_cpu" = x64], [
|
||||
ac_cv_func___builtin_setjmp=yes
|
||||
ac_cv_func_round=no
|
||||
rb_cv_fiber_coroutine=yes
|
||||
rb_cv_coroutine=yes
|
||||
])
|
||||
ac_cv_func_tgamma=no
|
||||
rb_cv_negative_time_t=yes
|
||||
|
@ -2251,60 +2251,67 @@ AS_IF([test "${universal_binary-no}" = yes ], [
|
|||
AC_DEFINE_UNQUOTED(STACK_GROW_DIRECTION, $dir)
|
||||
])
|
||||
|
||||
AC_ARG_ENABLE(fiber-coroutine,
|
||||
AS_HELP_STRING([--disable-fiber-coroutine], [disable native coroutine implementation for fiber]),
|
||||
[rb_cv_fiber_coroutine=$enableval])
|
||||
AS_CASE(["$rb_cv_fiber_coroutine"], [yes|''], [
|
||||
AC_ARG_WITH(coroutine,
|
||||
AS_HELP_STRING([--with-coroutine=IMPLEMENTATION], [specify the coroutine implementation to use]),
|
||||
[rb_cv_coroutine=$withval])
|
||||
AS_CASE([$rb_cv_coroutine], [yes|''], [
|
||||
AC_MSG_CHECKING(native coroutine implementation for ${target_cpu}-${target_os})
|
||||
AS_CASE(["$target_cpu-$target_os"],
|
||||
[x*64-darwin*], [
|
||||
rb_cv_fiber_coroutine=amd64
|
||||
rb_cv_coroutine=amd64
|
||||
],
|
||||
[x*64-linux], [
|
||||
AS_CASE(["$ac_cv_sizeof_voidp"],
|
||||
[8], [ rb_cv_fiber_coroutine=amd64 ],
|
||||
[4], [ rb_cv_fiber_coroutine=x86 ],
|
||||
[*], [ rb_cv_fiber_coroutine= ]
|
||||
[8], [ rb_cv_coroutine=amd64 ],
|
||||
[4], [ rb_cv_coroutine=x86 ],
|
||||
[*], [ rb_cv_coroutine= ]
|
||||
)
|
||||
],
|
||||
[*86-linux], [
|
||||
rb_cv_fiber_coroutine=x86
|
||||
rb_cv_coroutine=x86
|
||||
],
|
||||
[x64-mingw32], [
|
||||
rb_cv_fiber_coroutine=win64
|
||||
rb_cv_coroutine=win64
|
||||
],
|
||||
[*86-mingw32], [
|
||||
rb_cv_fiber_coroutine=win32
|
||||
rb_cv_coroutine=win32
|
||||
],
|
||||
[armv7*-linux-*], [
|
||||
rb_cv_fiber_coroutine=ucontext
|
||||
rb_cv_coroutine=ucontext
|
||||
],
|
||||
[aarch64-linux], [
|
||||
rb_cv_fiber_coroutine=arm64
|
||||
rb_cv_coroutine=arm64
|
||||
],
|
||||
[powerpc64le-linux], [
|
||||
rb_cv_fiber_coroutine=ppc64le
|
||||
rb_cv_coroutine=ppc64le
|
||||
],
|
||||
[x86_64-openbsd*], [
|
||||
rb_cv_fiber_coroutine=amd64
|
||||
rb_cv_coroutine=amd64
|
||||
],
|
||||
[i386-openbsd*], [
|
||||
rb_cv_fiber_coroutine=x86
|
||||
rb_cv_coroutine=x86
|
||||
],
|
||||
[*-openbsd*], [
|
||||
rb_cv_fiber_coroutine=
|
||||
rb_cv_coroutine=copy
|
||||
],
|
||||
[*], [
|
||||
rb_cv_fiber_coroutine=ucontext
|
||||
rb_cv_coroutine=ucontext
|
||||
]
|
||||
)
|
||||
AC_MSG_RESULT(${rb_cv_fiber_coroutine:-no})
|
||||
])
|
||||
AS_IF([test "${rb_cv_fiber_coroutine:-no}" != no], [
|
||||
COROUTINE_H=coroutine/$rb_cv_fiber_coroutine/Context.h
|
||||
AC_DEFINE_UNQUOTED(FIBER_USE_COROUTINE, ["$COROUTINE_H"])
|
||||
AC_SUBST(X_FIBER_COROUTINE_H, [$COROUTINE_H])
|
||||
AC_MSG_RESULT(${rb_cv_coroutine})
|
||||
])
|
||||
COROUTINE_H=coroutine/$rb_cv_coroutine/Context.h
|
||||
AS_CASE([$rb_cv_coroutine],
|
||||
[copy|ucontext], [
|
||||
COROUTINE_SRC=coroutine/$rb_cv_coroutine/Context.c
|
||||
],
|
||||
[*], [
|
||||
COROUTINE_SRC=coroutine/$rb_cv_coroutine/Context.'$(ASMEXT)'
|
||||
],
|
||||
)
|
||||
AC_DEFINE_UNQUOTED(COROUTINE_H, ["$COROUTINE_H"])
|
||||
AC_SUBST(X_COROUTINE_H, [$COROUTINE_H])
|
||||
AC_SUBST(X_COROUTINE_SRC, [$COROUTINE_SRC])
|
||||
|
||||
AS_IF([test x"$enable_pthread" = xyes], [
|
||||
for pthread_lib in thr pthread pthreads c c_r root; do
|
||||
|
@ -4009,6 +4016,7 @@ config_summary "vendor path" "$vendordir"
|
|||
config_summary "target OS" "$target_os"
|
||||
config_summary "compiler" "$CC"
|
||||
config_summary "with pthread" "$enable_pthread"
|
||||
config_summary "with coroutine" "$rb_cv_coroutine"
|
||||
config_summary "enable shared libs" "$ENABLE_SHARED"
|
||||
config_summary "dynamic library ext" "$DLEXT"
|
||||
config_summary "CFLAGS" "$cflags"
|
||||
|
|
7
cont.c
7
cont.c
|
@ -15,12 +15,7 @@
|
|||
#include "eval_intern.h"
|
||||
#include "mjit.h"
|
||||
|
||||
#ifdef FIBER_USE_COROUTINE
|
||||
#include FIBER_USE_COROUTINE
|
||||
#else
|
||||
// Stack copying implementation, should work everywhere:
|
||||
#include "coroutine/copy/Context.h"
|
||||
#endif
|
||||
#include COROUTINE_H
|
||||
|
||||
#ifndef _WIN32
|
||||
#include <unistd.h>
|
||||
|
|
|
@ -152,8 +152,9 @@ XRUBY_RUBYLIBDIR = @XRUBY_RUBYLIBDIR@
|
|||
XRUBY_RUBYHDRDIR = @XRUBY_RUBYHDRDIR@
|
||||
BOOTSTRAPRUBY = @BOOTSTRAPRUBY@
|
||||
|
||||
COROUTINE_H = @X_FIBER_COROUTINE_H@
|
||||
COROUTINE_H = @X_COROUTINE_H@
|
||||
COROUTINE_OBJ = $(COROUTINE_H:.h=.@OBJEXT@)
|
||||
COROUTINE_SRC = @X_COROUTINE_SRC@
|
||||
|
||||
#### End of system configuration section. ####
|
||||
|
||||
|
|
|
@ -290,19 +290,18 @@ MISSING = $(MISSING) acosh.obj cbrt.obj erf.obj nan.obj tgamma.obj
|
|||
MISSING = $(MISSING) explicit_bzero.obj
|
||||
!endif
|
||||
DLNOBJ = dln.obj
|
||||
|
||||
!if "$(ARCH)" == "x64"
|
||||
COROUTINE_OBJ = coroutine/Win64/Context.obj
|
||||
COROUTINE_OBJ = coroutine/win64/Context.obj
|
||||
COROUTINE_SRC = $(COROUTINE_OBJ:.obj=.asm)
|
||||
!elseif "$(ARCH)" == "i386"
|
||||
COROUTINE_OBJ = coroutine/Win32/Context.obj
|
||||
COROUTINE_OBJ = coroutine/win32/Context.obj
|
||||
COROUTINE_SRC = $(COROUTINE_OBJ:.obj=.asm)
|
||||
!else
|
||||
COROUTINE_OBJ =
|
||||
COROUTINE_OBJ = coroutine/copy/Context.obj
|
||||
COROUTINE_SRC = $(COROUTINE_OBJ:.obj=.c)
|
||||
!endif
|
||||
!if "$(COROUTINE_OBJ)" == ""
|
||||
# get rid of empty value not to leave VPATH only in dependencies
|
||||
COROUTINE_H = coroutine/Win32/Context.h
|
||||
!else
|
||||
COROUTINE_H = $(COROUTINE_OBJ:.obj=.h)
|
||||
!endif
|
||||
|
||||
ARFLAGS = -machine:$(MACHINE) -out:
|
||||
LD = $(CC)
|
||||
|
@ -871,9 +870,7 @@ $(CONFIG_H): $(MKFILES) $(srcdir)/win32/Makefile.sub $(win_srcdir)/Makefile.sub
|
|||
!if "$(MACHINE)" == "x86" || "$(ARCH)" == "x64"
|
||||
#define STACK_GROW_DIRECTION -1
|
||||
!endif
|
||||
!if "$(COROUTINE_OBJ)" != ""
|
||||
#define FIBER_USE_COROUTINE "$(COROUTINE_H)"
|
||||
!endif
|
||||
#define COROUTINE_H "$(COROUTINE_H)"
|
||||
#define DEFAULT_KCODE KCODE_NONE
|
||||
#define LOAD_RELATIVE 1
|
||||
#define DLEXT ".so"
|
||||
|
@ -1235,12 +1232,15 @@ $(ruby_pc): $(RBCONFIG)
|
|||
-output=$@ -mode=$(INSTALL_DATA_MODE) -config=rbconfig.rb \
|
||||
$(srcdir)/template/ruby.pc.in
|
||||
|
||||
{$(srcdir)/coroutine/Win32}.asm{coroutine/Win32}.obj:
|
||||
{$(srcdir)/coroutine/win32}.asm{coroutine/win32}.obj:
|
||||
$(ECHO) assembling $(<:\=/)
|
||||
$(Q) $(AS) $(ASFLAGS) $(XCFLAGS) $(CPPFLAGS) $(COUTFLAG)$@ -c $(<:\=/)
|
||||
{$(srcdir)/coroutine/Win64}.asm{coroutine/Win64}.obj:
|
||||
{$(srcdir)/coroutine/win64}.asm{coroutine/win64}.obj:
|
||||
$(ECHO) assembling $(<:\=/)
|
||||
$(Q) $(AS) $(ASFLAGS) $(XCFLAGS) $(CPPFLAGS) $(COUTFLAG)$@ -c $(<:\=/)
|
||||
{$(srcdir)/coroutine/copy}.c{coroutine/copy}.obj:
|
||||
$(ECHO) compiling $(<:\=/)
|
||||
$(Q) $(CC) $(CFLAGS) $(XCFLAGS) $(CPPFLAGS) $(COUTFLAG)$@ -c $(CSRCFLAG)$(<:\=/)
|
||||
|
||||
{$(srcdir)/enc/trans}.c.obj:
|
||||
$(ECHO) compiling $(<:\=/)
|
||||
|
|
Loading…
Reference in a new issue