[meta-virtualization] [PATCH] ruby-shadow: Work around cross compile gem problem

Bruce Ashfield bruce.ashfield at gmail.com
Tue Jan 19 05:53:07 PST 2016


nasty stuff.

Definitely an improvement from what we had before. I've merged this
to master.

Bruce

On Fri, Jan 15, 2016 at 4:31 PM, Jason Wessel <jason.wessel at windriver.com>
wrote:

> Prior to this commit it is not possible to cross build a ruby gem.  In
> fact even on the x86 system the object files for the native gem are
> generated with the wrong compiler (the host compiler instead of the
> cross compiler).
>
> A better way to fix this in the future would be to use only gems that
> supported cross compile tool called rake.  For now the bbclass can
> modify the extconf.rb just before creating the gem and insert some
> code into the Makefile so as to honor the cross compile environment.
>
> Signed-off-by: Jason Wessel <jason.wessel at windriver.com>
> ---
>  classes/ruby.bbclass                           |   31
> ++++++++++++++++++++++++
>  recipes-support/ruby-shadow/ruby-shadow_git.bb |    2 +-
>  2 files changed, 32 insertions(+), 1 deletion(-)
>
> diff --git a/classes/ruby.bbclass b/classes/ruby.bbclass
> index 0c842d5..92226f6 100644
> --- a/classes/ruby.bbclass
> +++ b/classes/ruby.bbclass
> @@ -83,10 +83,41 @@ RUBY_INSTALL_GEMS ?= "${BPN}-${BPV}.gem"
>
>  RUBY_COMPILE_FLAGS ?= 'LANG="en_US.UTF-8" LC_ALL="en_US.UTF-8"'
>
> +ruby_gen_extconf_fix() {
> +       cat<<EOF>append
> +  RbConfig::MAKEFILE_CONFIG['CPPFLAGS'] = ENV['CPPFLAGS'] if
> ENV['CPPFLAGS']
> +  \$CPPFLAGS = ENV['CPPFLAGS'] if ENV['CPPFLAGS']
> +  RbConfig::MAKEFILE_CONFIG['CC'] = ENV['CC'] if ENV['CC']
> +  RbConfig::MAKEFILE_CONFIG['LD'] = ENV['LD'] if ENV['LD']
> +  RbConfig::MAKEFILE_CONFIG['CFLAGS'] = ENV['CFLAGS'] if ENV['CFLAGS']
> +  RbConfig::MAKEFILE_CONFIG['CXXFLAGS'] = ENV['CXXFLAGS'] if
> ENV['CXXFLAGS']
> +EOF
> +       cat append2>>append
> +       sysroot_ruby=${STAGING_INCDIR}/ruby-${RUBY_GEM_VERSION}
> +       ruby_arch=`ls -1 ${sysroot_ruby} |grep -v ruby |tail -1 2>
> /dev/null`
> +       cat<<EOF>>append
> +  system("perl -p -i -e 's#^topdir.*#topdir = ${sysroot_ruby}#' Makefile")
> +  system("perl -p -i -e 's#^hdrdir.*#hdrdir = ${sysroot_ruby}#' Makefile")
> +  system("perl -p -i -e 's#^arch_hdrdir.*#arch_hdrdir =
> ${sysroot_ruby}/\\\\\$(arch)#' Makefile")
> +  system("perl -p -i -e 's#^arch =.*#arch = ${ruby_arch}#' Makefile")
> +  system("perl -p -i -e 's#^LIBPATH =.*#LIBPATH = -L.#' Makefile")
> +EOF
> +}
> +
>  ruby_do_compile() {
> +       if [ -f extconf.rb -a ! -f extconf.rb.orig ] ; then
> +               grep create_makefile extconf.rb > append2 || (exit 0)
> +               ruby_gen_extconf_fix
> +               cp extconf.rb extconf.rb.orig
> +               # Patch extconf.rb for cross compile
> +               cat append >> extconf.rb
> +       fi
>         for gem in ${RUBY_BUILD_GEMS}; do
>                 ${RUBY_COMPILE_FLAGS} gem build $gem
>         done
> +       if [ -f extconf.rb.orig ] ; then
> +               mv extconf.rb.orig extconf.rb
> +       fi
>  }
>
>
> diff --git a/recipes-support/ruby-shadow/ruby-shadow_git.bb
> b/recipes-support/ruby-shadow/ruby-shadow_git.bb
> index 72be016..75588f3 100644
> --- a/recipes-support/ruby-shadow/ruby-shadow_git.bb
> +++ b/recipes-support/ruby-shadow/ruby-shadow_git.bb
> @@ -20,4 +20,4 @@ RDEPENDS_${PN} += " \
>  "
>
>  RUBY_INSTALL_GEMS = "ruby-shadow-${PV}.gem"
> -FILES_${PN}-dbg +=
> "/usr/lib64/ruby/gems/*/gems/ruby-shadow-${PV}/.debug/shadow.so"
> +FILES_${PN}-dbg +=
> "/usr/lib*/ruby/gems/*/gems/ruby-shadow-${PV}/.debug/shadow.so"
> --
> 1.7.9.5
>
> --
> _______________________________________________
> meta-virtualization mailing list
> meta-virtualization at yoctoproject.org
> https://lists.yoctoproject.org/listinfo/meta-virtualization
>



-- 
"Thou shalt not follow the NULL pointer, for chaos and madness await thee
at its end"
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.yoctoproject.org/pipermail/meta-virtualization/attachments/20160119/515d7679/attachment-0001.html>


More information about the meta-virtualization mailing list