From cdd806a98909494c6188409697aeb4d810c56200 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=BCrgen=20Buchm=C3=BCller?= Date: Thu, 4 Jun 2020 14:30:16 +0200 Subject: [PATCH] mruby: build for host with clang Trying to build for i686 native with gcc, or trying to cross build with i686 as the host architecture, the build fails. This seems to be a problem with either i686 gcc or the binutils (linker). For now build with clang for native and for the host when cross compiling to work around the problems. TODO: find the real reason why the compiler or linker packages for i686 are broken and switch back to using gcc. --- srcpkgs/mruby/template | 103 +++++++++++++++++++++++++++++------------ 1 file changed, 74 insertions(+), 29 deletions(-) diff --git a/srcpkgs/mruby/template b/srcpkgs/mruby/template index 068e8810ccc..831e21e9a07 100644 --- a/srcpkgs/mruby/template +++ b/srcpkgs/mruby/template @@ -1,8 +1,8 @@ # Template file for 'mruby' pkgname=mruby version=2.1.0 -revision=1 -hostmakedepends="bison ruby" +revision=2 +hostmakedepends="bison clang ruby" short_desc="Lightweight implementation of the Ruby language (Ruby 1.9)" maintainer="Jürgen Buchmüller " license="MIT" @@ -10,35 +10,59 @@ homepage="https://mruby.org/" distfiles="https://github.com/mruby/mruby/archive/${version}.tar.gz>${pkgname}-${version}.tar.gz" checksum=d6733742a07e553c52ab71df08b0604b3b571768bbc0c2729fbf0389d1bb5d13 lib32disabled=yes +# I cannot get clang to link a PIE executable +nopie=yes -if [ "$XBPS_TARGET_WORDSIZE" = 32 ]; then - broken="Currently fails to build for 32 bit architectures" -fi +# Note: we use clang to build for the host because with gcc the build fails +# for i686 (native) and also when i686 is the host architecture for cross builds. +LIBS="m" do_configure() { vsed -i mrbgems/mruby-compiler/core/parse.y -e "s;%pure-parser;%define api.pure;" - cat <<-EOF > xbps_config.rb - MRuby::Build.new do |conf| - toolchain :gcc - conf.gem "#{root}/mrbgems/mruby-bin-mruby" - conf.gem "#{root}/mrbgems/mruby-bin-mrbc" - conf.cc do |cc| - cc.command = 'gcc' - cc.flags = [ENV['CFLAGS_host'] || %w()] - cc.include_paths = ["#{root}/include"] - end - conf.linker do |linker| - linker.command = 'gcc' - linker.libraries = 'm' - end - conf.archiver do |archiver| - archiver.command = 'ar' - end - end - EOF - if [ "$CROSS_BUILD" ]; then - cat <<-EOF >> xbps_config.rb + if [ -z "$CROSS_BUILD" ]; then + # Native build + cat <<-EOF > xbps_config.rb + MRuby::Build.new do |conf| + toolchain :clang + conf.gem "#{root}/mrbgems/mruby-bin-mruby" + conf.gem "#{root}/mrbgems/mruby-bin-mrbc" + conf.cc do |cc| + cc.command = 'clang' + cc.flags = [ENV['CFLAGS'] || %w()] + cc.include_paths = ["#{root}/include"] + end + conf.linker do |linker| + linker.command = 'clang' + linker.flags = [ENV['LDFLAGS'] || %w()] + linker.libraries = [ENV['LIBS'] || 'm'] + end + conf.archiver do |archiver| + archiver.command = 'ar' + end + end + EOF + else + # Cross build + cat <<-EOF > xbps_config.rb + MRuby::Build.new do |conf| + toolchain :clang + conf.gem "#{root}/mrbgems/mruby-bin-mruby" + conf.gem "#{root}/mrbgems/mruby-bin-mrbc" + conf.cc do |cc| + cc.command = 'clang' + cc.flags = [ENV['CFLAGS_host'] || %w()] + cc.include_paths = ["#{root}/include"] + end + conf.linker do |linker| + linker.command = 'clang' + linker.flags = [ENV['LDFLAGS_host'] || %w()] + linker.libraries = [ENV['LIBS'] || 'm'] + end + conf.archiver do |archiver| + archiver.command = 'ar' + end + end MRuby::CrossBuild.new('${XBPS_CROSS_TRIPLET}') do |conf| toolchain :gcc conf.gem "#{root}/mrbgems/mruby-bin-mruby" @@ -54,8 +78,8 @@ do_configure() { end conf.linker do |linker| linker.command = ENV['CC'] || '${XBPS_CROSS_TRIPLET}-gcc' - linker.libraries = ENV['LIBS'] || 'm' - linker.flags_after_libraries = [ENV['LDFLAGS'] || %w()] + linker.flags = [ENV['LDFLAGS'] || %w()] + linker.libraries = [ENV['LIBS'] || 'm'] linker.library_paths = '${XBPS_CROSS_BASE}/usr/lib' end conf.archiver do |archiver| @@ -67,7 +91,28 @@ do_configure() { } do_build() { - MRUBY_CONFIG=xbps_config.rb ruby ./minirake + # Enable verbosity and/or trace + # vsed -i minirake -e '/^$rake_failed/a $verbose = 1' + # vsed -i minirake -e '/^$rake_failed/a $trace = 1' + + # Set the number of parallel jobs from $makejobs + vsed -i minirake -e "s;^\(\$rake_jobs =\).*;\1 ${makejobs/-j/};" + + # clang does not understand -fstack-clash-protection + CFLAGS="${CFLAGS/-fstack-clash-protection/}" + + if [ "$CROSS_BUILD" ]; then + CFLAGS_host="${CFLAGS_host/-fstack-clash-protection/}" + echo "CFLAGS_host : $CFLAGS_host" + echo "LDFLAGS_host : $LDFLAGS_host" + fi + echo "CFLAGS : $CFLAGS" + echo "LDFLAGS : $LDFLAGS" + echo "LIBS : $LIBS" + CFLAGS="$CFLAGS" CFLAGS_host="$CFLAGS_host" \ + LDFLAGS="$LDFLAGS" LDFLAGS_host="$LDFLAGS_host" \ + LIBS="$LIBS" MRUBY_CONFIG=xbps_config.rb VERBOS=1 \ + ruby minirake } do_install() {