diff --git a/builtin.c b/builtin.c index aef5b2c2d4..b725d8b968 100644 --- a/builtin.c +++ b/builtin.c @@ -3,15 +3,15 @@ #include "iseq.h" #include "builtin.h" -#ifdef CROSS_COMPILING +#include "builtin_binary.inc" + +#ifndef BUILTIN_BINARY_SIZE #define INCLUDED_BY_BUILTIN_C 1 #include "mini_builtin.c" #else -#include "builtin_binary.inc" - static const unsigned char * bin4feature(const struct builtin_binary *bb, const char *feature, size_t *psize) { diff --git a/common.mk b/common.mk index 2732a1ea4a..070ca91f75 100644 --- a/common.mk +++ b/common.mk @@ -1301,9 +1301,12 @@ preludes: {$(srcdir)}golf_prelude.c $(ECHO) making $@ $(Q) $(BASERUBY) $(tooldir)/mk_builtin_loader.rb $< -builtin_binary.inc: $(PREP) $(BUILTIN_RB_SRCS) $(srcdir)/template/builtin_binary.inc.tmpl +$(BUILTIN_BINARY:yes=built)in_binary.inc: $(PREP) $(BUILTIN_RB_SRCS) $(srcdir)/template/builtin_binary.inc.tmpl $(Q) $(MINIRUBY) $(tooldir)/generic_erb.rb -o $@ \ - $(srcdir)/template/builtin_binary.inc.tmpl -- --cross=$(CROSS_COMPILING) + $(srcdir)/template/builtin_binary.inc.tmpl + +$(BUILTIN_BINARY:no=builtin)_binary.inc: + $(Q) echo> $@ // empty $(@F) $(BUILTIN_RB_INCS): $(top_srcdir)/tool/mk_builtin_loader.rb diff --git a/configure.ac b/configure.ac index bf6d9af1f1..e0057d974f 100644 --- a/configure.ac +++ b/configure.ac @@ -1489,6 +1489,25 @@ RUBY_CHECK_SIZEOF(float) RUBY_CHECK_SIZEOF(double) RUBY_CHECK_SIZEOF(time_t, [long "long long"], [], [@%:@include ]) RUBY_CHECK_SIZEOF(clock_t, [], [], [@%:@include ]) +AC_SUBST(X_BUILTIN_BINARY, yes) +AS_IF([test "$cross_compiling" = yes], +[dnl miniruby cannot run if cross compiling + X_BUILTIN_BINARY=no +], +[ + AS_CASE([ac_cv_sizeof_voidp], + [[1-9]*], [dnl fixed value + ], + [ + AC_CACHE_CHECK([word size], [rb_cv_word_size], + [for w in 4 8; do + AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[@%:@if SIZEOF_VOIDP != ${w} + @%:@error SIZEOF_VOIDP + @%:@endif]])], [rb_cv_word_size=${w}; break]) + done]) + AS_IF([test -z $rb_cv_word_size], [X_BUILTIN_BINARY=no]) + ]) +]) AC_CACHE_CHECK(packed struct attribute, rb_cv_packed_struct, [rb_cv_packed_struct=no @@ -4482,7 +4501,7 @@ guard=INCLUDE_RUBY_CONFIG_H { echo "#ifndef $guard" echo "#define $guard 1" - grep -v "^#define PACKAGE_" confdefs.h + sed "/^@%:@define PACKAGE_/d;s/ *$//" confdefs.h echo "#endif /* $guard */" } | tr -d '\015' | ( diff --git a/template/Makefile.in b/template/Makefile.in index 93fa02d9d7..9e553affac 100644 --- a/template/Makefile.in +++ b/template/Makefile.in @@ -65,6 +65,7 @@ rubyarchhdrdir = @rubyarchhdrdir@ ruby_version = @ruby_version@ RUBY_VERSION_NAME = @RUBY_VERSION_NAME@ UNIVERSAL_ARCHNAMES = @UNIVERSAL_ARCHNAMES@ +BUILTIN_BINARY = @X_BUILTIN_BINARY@ TESTUI = console TESTS = diff --git a/win32/Makefile.sub b/win32/Makefile.sub index ab1e46a4b0..3d4bbc87e8 100644 --- a/win32/Makefile.sub +++ b/win32/Makefile.sub @@ -433,8 +433,10 @@ THREAD_IMPL_SRC = thread_$(THREAD_MODEL).c !if "$(CROSS_COMPILING)" == "yes" PREP = $(arch)-fake.rb +BUILTIN_BINARY = no !else PREP = miniruby$(EXEEXT) +BUILTIN_BINARY = yes !endif !if !defined(EXTSTATIC)