[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