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.
This commit is contained in:
Jürgen Buchmüller 2020-06-04 14:30:16 +02:00
parent b9f815e1ab
commit cdd806a989

View file

@ -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 <pullmoll@t-online.de>"
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() {