64-bit Ruby on Solaris?

Apparently I’m cursed. I’m nearing the point of re-installing the OS
from scratch and rebuilding everything without using the GNU binutils
package, which I suspect is the cause of my problems.

Also, for the build you did above can you show me your environment
settings and the Makefile perhaps?

Regards,

Dan

···

-----Original Message-----
From: ts [mailto:decoux@moulon.inra.fr]
Sent: Sunday, November 02, 2003 8:08 AM
To: ruby-talk@ruby-lang.org
Cc: ruby-talk@ruby-lang.org
Subject: Re: 64-bit Ruby on Solaris?

root@sp5wd-b1-/usr/ccs/lib/sparcv9-548>file *

I really don’t understand. With this

nasun% gcc -v
Reading specs from
/opt/gcc332/lib/gcc-lib/sparc-sun-solaris2.8/3.3.2/specs
Configured with: /j/ts/gcc-3.3.2/configure
–with-as=/usr/ccs/bin/as --with-ld=/usr/ccs/bin/ld
–prefix=/opt/gcc332 Thread model: posix gcc version 3.3.2 nasun%

nasun% CC=‘gcc -m64 -mcpu=ultrasparc’ ./configure
–prefix=$HOME/local/r181 […] nasun% make […] nasun% make
install […] nasun%

nasun% cd ~/local/r181/bin
nasun% file ruby
ruby: ELF 64-bit MSB executable SPARCV9 Version 1,
UltraSPARC1
Extensions Required, dynamically linked, not stripped
nasun%

nasun% ruby -vrbigdecimal -e ‘p BigDecimal::new(“12”)’
ruby 1.8.1 (2003-10-31) [sparc-solaris2.8]
#BigDecimal:10022e690,‘0.12E2’,9(18)
nasun%

Guy Decoux

Also, for the build you did above can you show me your environment
settings and the Makefile perhaps?

For the environment I've just made

    export PATH=/opt/gcc332/bin:$PATH

Makefile (generated by ruby)

···

------------------------------------------------------------

SHELL = /bin/sh

#### Start of system configuration section. ####

srcdir = .
VPATH = $(srcdir)/missing

CC = gcc -m64 -mcpu=ultrasparc
YACC = bison -y
PURIFY =
AUTOCONF = autoconf

prefix = /home/msys/decoux/local/r181
exec_prefix = ${prefix}
bindir = ${exec_prefix}/bin
sbindir = ${exec_prefix}/sbin
libdir = ${exec_prefix}/lib
libexecdir = ${exec_prefix}/libexec
arch = sparc-solaris2.8
sitearch = sparc-solaris2.8
sitedir = ${prefix}/lib/ruby/site_ruby

CFLAGS = -g -O2
CPPFLAGS = -I. -I$(srcdir)
LDFLAGS = $(CFLAGS)
EXTLDFLAGS =
XLDFLAGS = -L. $(EXTLDFLAGS)
EXTLIBS =
LIBS = -ldl -lm $(EXTLIBS)
MISSING = flock$U.o isinf$U.o
LDSHARED = $(CC) -Wl,-G
DLDFLAGS = $(EXTLDFLAGS)
SOLIBS =
MAINLIBS =

RUBY_INSTALL_NAME=ruby
RUBY_SO_NAME=$(RUBY_INSTALL_NAME)
EXEEXT =
PROGRAM=$(RUBY_INSTALL_NAME)$(EXEEXT)
RUBY = $(RUBY_INSTALL_NAME)
MINIRUBY = ./miniruby$(EXEEXT)

#### End of system configuration section. ####

MAJOR= 1
MINOR= 8
TEENY= 1

LIBRUBY_A = lib$(RUBY_SO_NAME)-static.a
LIBRUBY_SO = lib$(RUBY_SO_NAME).so.$(MAJOR).$(MINOR).$(TEENY)
LIBRUBY_ALIASES= lib$(RUBY_SO_NAME).so
LIBRUBY = $(LIBRUBY_A)
LIBRUBYARG = $(LIBRUBYARG_STATIC)
LIBRUBYARG_STATIC = -l$(RUBY_SO_NAME)-static
LIBRUBYARG_SHARED =

PREP =
SETUP =
EXTSTATIC =

EXTOBJS =
DLDOBJS = $(DMYEXT)
DMYEXT = dmyext.o

MAINOBJ = main.o

OBJS = array.o \
    bignum.o \
    class.o \
    compar.o \
    dir.o \
    dln.o \
    enum.o \
    error.o \
    eval.o \
    file.o \
    gc.o \
    hash.o \
    inits.o \
    io.o \
    marshal.o \
    math.o \
    numeric.o \
    object.o \
    pack.o \
    parse.o \
    process.o \
    prec.o \
    random.o \
    range.o \
    re.o \
    regex.o \
    ruby.o \
    signal.o \
    sprintf.o \
    st.o \
    string.o \
    struct.o \
    time.o \
    util.o \
    variable.o \
    version.o \
    $(MISSING)

MANTYPE = man

SCRIPT_ARGS = --dest-dir="$(DESTDIR)" \
    --make="$(MAKE)" \
    --mflags="$(MFLAGS)" \
    --make-flags="$(MAKEFLAGS)"

all: Makefile miniruby$(EXEEXT) rbconfig.rb $(LIBRUBY)
    @$(MINIRUBY) $(srcdir)/ext/extmk.rb --extstatic="$(EXTSTATIC)" $(SCRIPT_ARGS)

miniruby$(EXEEXT): config.status $(LIBRUBY_A) $(MAINOBJ) $(DMYEXT)
    @rm -f $@
    $(PURIFY) $(CC) $(LDFLAGS) $(MAINOBJ) $(DMYEXT) $(LIBRUBY_A) $(LIBS) -o $@

$(PROGRAM): $(LIBRUBY) $(MAINOBJ) $(EXTOBJS) $(SETUP) miniruby$(EXEEXT)
    @rm -f $@
    $(PURIFY) $(CC) $(LDFLAGS) $(XLDFLAGS) $(MAINLIBS) $(MAINOBJ) $(EXTOBJS) $(LIBRUBYARG) $(LIBS) -o $@

$(LIBRUBY_A): $(OBJS) $(DMYEXT)
    ar rcu $@ $(OBJS) $(DMYEXT)
    @-ranlib $@ 2> /dev/null || true

$(LIBRUBY_SO): $(OBJS) $(DLDOBJS) miniruby$(EXEEXT) $(PREP)
    $(LDSHARED) $(DLDFLAGS) $(OBJS) $(DLDOBJS) $(SOLIBS) -o $@
    @-$(MINIRUBY) -e 'ARGV.each{|link| File.delete link if File.exist? link; \
              File.symlink "$(LIBRUBY_SO)", link}' \
        $(LIBRUBY_ALIASES) || true

ruby.imp: $(LIBRUBY_A)
    @ -Pgp $(LIBRUBY_A) | awk 'BEGIN{print "#!"}; $$2~/^[BD]$$/{print $$1}' | sort -u -o $@
# $(MINIRUBY) $< $@

install: rbconfig.rb
    $(MINIRUBY) $(srcdir)/instruby.rb $(SCRIPT_ARGS) --mantype="$(MANTYPE)"
    $(MINIRUBY) $(srcdir)/ext/extmk.rb $(SCRIPT_ARGS) install

what-where no-install: rbconfig.rb
    $(MINIRUBY) $(srcdir)/instruby.rb -n $(SCRIPT_ARGS) --mantype="$(MANTYPE)"
    $(MINIRUBY) $(srcdir)/ext/extmk.rb -n $(SCRIPT_ARGS) install

clean-ext:
    @-$(MINIRUBY) $(srcdir)/ext/extmk.rb $(SCRIPT_ARGS) clean 2> /dev/null || true

clean-local:
    @rm -f $(OBJS) $(MAINOBJ) $(LIBRUBY_A) $(LIBRUBY_SO) $(LIBRUBY_ALIASES)
    @rm -f ext/extinit.c ext/extinit.o dmyext.o
    @rm -f $(PROGRAM) miniruby$(EXEEXT)

clean: clean-ext clean-local

distclean-ext:
    @-$(MINIRUBY) $(srcdir)/ext/extmk.rb $(SCRIPT_ARGS) distclean 2> /dev/null || true

distclean-local: clean-local
    @rm -f Makefile config.h rbconfig.rb
    @rm -f ext/config.cache config.cache config.log config.status
    @rm -f *~ core *.core gmon.out y.tab.c y.output ruby.imp

distclean: distclean-ext distclean-local

realclean: distclean
    @rm -f parse.c
    @rm -f lex.c

test: miniruby$(EXEEXT) rbconfig.rb $(PROGRAM) PHONY
    @./miniruby$(EXEEXT) $(srcdir)/rubytest.rb

rbconfig.rb: miniruby$(EXEEXT) $(srcdir)/mkconfig.rb config.status $(PREP)
    @$(MINIRUBY) $(srcdir)/mkconfig.rb rbconfig.rb

fake.rb: miniruby$(EXEEXT) Makefile
    @echo ' \
    class Object; \
      CROSS_COMPILING = RUBY_PLATFORM; \
      remove_const :RUBY_PLATFORM; \
      remove_const :RUBY_VERSION; \
      RUBY_PLATFORM = "sparc-solaris2.8"; \
      RUBY_VERSION = "1.8.1"; \
    end; \
    if RUBY_PLATFORM =~ /mswin|bccwin|mingw/; \
      class File; \
        remove_const :ALT_SEPARATOR; \
        ALT_SEPARATOR = "\\"; \
      end; \
    end; \
    ' > $@

Makefile: $(srcdir)/Makefile.in

.PRECIOUS: Makefile

.PHONY: test

PHONY:

Makefile: config.status
    MAKE=$(MAKE) $(SHELL) ./config.status
    @{ \
        echo "all:; -@rm -f conftest.mk"; \
        echo "conftest.mk: .force; @echo AUTO_REMAKE"; \
        echo ".force:"; \
    } > conftest.mk || exit 1; \
    $(MAKE) -f conftest.mk | grep '^AUTO_REMAKE$$' >/dev/null 2>&1 || \
    { echo "Makefile updated, restart."; exit 1; }

config.status: $(srcdir)/configure
    MINIRUBY="$(MINIRUBY)" $(SHELL) ./config.status --recheck

$(srcdir)/configure: $(srcdir)/configure.in
    cd $(srcdir) && $(AUTOCONF)

.c.o:
  $(CC) $(CFLAGS) $(CPPFLAGS) -c $<

lex.c: keywords
  if test "$(srcdir)" = "."; then \
    gperf -p -j1 -i 1 -g -o -t -N rb_reserved_word -k1,3,$$ $> > $@; \
  else \
    cp $(srcdir)/lex.c .; \
  fi

.y.c:
  $(YACC) $<
  sed '/^#/s|y\.tab\.c|$@|' y.tab.c > $@
  rm -f y.tab.c

ext/extinit.o: ext/extinit.c $(SETUP)
  $(CC) $(CFLAGS) $(CPPFLAGS) -o $@ -c ext/extinit.c

acosh.o: $(srcdir)/missing/acosh.c
  $(CC) -I. $(CFLAGS) $(CPPFLAGS) -c $(srcdir)/missing/acosh.c

alloca.o: $(srcdir)/missing/alloca.c
  $(CC) -I. $(CFLAGS) $(CPPFLAGS) -c $(srcdir)/missing/alloca.c

crypt.o: $(srcdir)/missing/crypt.c
  $(CC) -I. $(CFLAGS) $(CPPFLAGS) -c $(srcdir)/missing/crypt.c

dup2.o: $(srcdir)/missing/dup2.c
  $(CC) -I. $(CFLAGS) $(CPPFLAGS) -c $(srcdir)/missing/dup2.c

fileblocks.o: $(srcdir)/missing/fileblocks.c
  $(CC) -I. $(CFLAGS) $(CPPFLAGS) -c $(srcdir)/missing/fileblocks.c

finite.o: $(srcdir)/missing/finite.c
  $(CC) -I. $(CFLAGS) $(CPPFLAGS) -c $(srcdir)/missing/finite.c

flock.o: $(srcdir)/missing/flock.c
  $(CC) -I. $(CFLAGS) $(CPPFLAGS) -c $(srcdir)/missing/flock.c

isinf.o: $(srcdir)/missing/isinf.c
  $(CC) -I. $(CFLAGS) $(CPPFLAGS) -c $(srcdir)/missing/isinf.c

isnan.o: $(srcdir)/missing/isnan.c
  $(CC) -I. $(CFLAGS) $(CPPFLAGS) -c $(srcdir)/missing/isnan.c

fnmatch.o: $(srcdir)/missing/fnmatch.c
  $(CC) -I. $(CFLAGS) $(CPPFLAGS) -c $(srcdir)/missing/fnmatch.c

memcmp.o: $(srcdir)/missing/memcmp.c
  $(CC) $(CFLAGS) $(CPPFLAGS) -c $(srcdir)/missing/memcmp.c

memmove.o: $(srcdir)/missing/memmove.c
  $(CC) $(CFLAGS) $(CPPFLAGS) -c $(srcdir)/missing/memmove.c

mkdir.o: $(srcdir)/missing/mkdir.c
  $(CC) $(CFLAGS) $(CPPFLAGS) -c $(srcdir)/missing/mkdir.c

vsnprintf.o: $(srcdir)/missing/vsnprintf.c
  $(CC) $(CFLAGS) $(CPPFLAGS) -c $(srcdir)/missing/vsnprintf.c

strcasecmp.o: $(srcdir)/missing/strcasecmp.c
  $(CC) $(CFLAGS) $(CPPFLAGS) -c $(srcdir)/missing/strcasecmp.c

strncasecmp.o: $(srcdir)/missing/strncasecmp.c
  $(CC) $(CFLAGS) $(CPPFLAGS) -c $(srcdir)/missing/strncasecmp.c

strchr.o: $(srcdir)/missing/strchr.c
  $(CC) $(CFLAGS) $(CPPFLAGS) -c $(srcdir)/missing/strchr.c

strerror.o: $(srcdir)/missing/strerror.c
  $(CC) $(CFLAGS) $(CPPFLAGS) -c $(srcdir)/missing/strerror.c

strftime.o: $(srcdir)/missing/strftime.c
  $(CC) -I. $(CFLAGS) $(CPPFLAGS) -c $(srcdir)/missing/strftime.c

strstr.o: $(srcdir)/missing/strstr.c
  $(CC) $(CFLAGS) $(CPPFLAGS) -c $(srcdir)/missing/strstr.c

strtol.o: $(srcdir)/missing/strtol.c
  $(CC) $(CFLAGS) $(CPPFLAGS) -c $(srcdir)/missing/strtol.c

strtoul.o: $(srcdir)/missing/strtoul.c
  $(CC) $(CFLAGS) $(CPPFLAGS) -c $(srcdir)/missing/strtoul.c

x68.o: $(srcdir)/missing/x68.c
  $(CC) $(CFLAGS) $(CPPFLAGS) -c $(srcdir)/missing/x68.c

os2.o: $(srcdir)/missing/os2.c
  $(CC) $(CFLAGS) $(CPPFLAGS) -c $(srcdir)/missing/os2.c

dl_os2.o: $(srcdir)/missing/dl_os2.c
  $(CC) $(CFLAGS) $(CPPFLAGS) -c $(srcdir)/missing/dl_os2.c

win32.o: $(srcdir)/win32/win32.c
  $(CC) $(CFLAGS) $(CPPFLAGS) -I$(srcdir)/win32 -c $(srcdir)/win32/win32.c

# Prevent GNU make v3 from overflowing arg limit on SysV.
.NOEXPORT:
###
array.o: array.c ruby.h config.h defines.h intern.h missing.h \
  util.h st.h
bignum.o: bignum.c ruby.h config.h defines.h intern.h missing.h
class.o: class.c ruby.h config.h defines.h intern.h missing.h \
  rubysig.h node.h st.h version.h
compar.o: compar.c ruby.h config.h defines.h intern.h missing.h
dir.o: dir.c ruby.h config.h defines.h intern.h missing.h util.h
dln.o: dln.c ruby.h config.h defines.h intern.h missing.h dln.h
dmyext.o: dmyext.c
enum.o: enum.c ruby.h config.h defines.h intern.h missing.h node.h \
  util.h
error.o: error.c ruby.h config.h defines.h intern.h missing.h \
  env.h version.h st.h
eval.o: eval.c ruby.h config.h defines.h intern.h missing.h node.h \
  env.h util.h rubysig.h st.h dln.h
file.o: file.c ruby.h config.h defines.h intern.h missing.h \
  rubyio.h rubysig.h util.h dln.h
gc.o: gc.c ruby.h config.h defines.h intern.h missing.h rubysig.h \
  st.h node.h env.h re.h regex.h
hash.o: hash.c ruby.h config.h defines.h intern.h missing.h st.h \
  util.h rubysig.h version.h
inits.o: inits.c ruby.h config.h defines.h intern.h missing.h
io.o: io.c ruby.h config.h defines.h intern.h missing.h rubyio.h \
  rubysig.h env.h util.h
main.o: main.c ruby.h config.h defines.h intern.h missing.h
marshal.o: marshal.c ruby.h config.h defines.h intern.h missing.h \
  rubyio.h st.h util.h
math.o: math.c ruby.h config.h defines.h intern.h missing.h
numeric.o: numeric.c ruby.h config.h defines.h intern.h missing.h
object.o: object.c ruby.h config.h defines.h intern.h missing.h \
  st.h util.h
pack.o: pack.c ruby.h config.h defines.h intern.h missing.h
parse.o: parse.c ruby.h config.h defines.h intern.h missing.h \
  env.h node.h st.h regex.h util.h lex.c
prec.o: prec.c ruby.h config.h defines.h intern.h missing.h
process.o: process.c ruby.h config.h defines.h intern.h missing.h \
  rubysig.h st.h
random.o: random.c ruby.h config.h defines.h intern.h missing.h
range.o: range.c ruby.h config.h defines.h intern.h missing.h
re.o: re.c ruby.h config.h defines.h intern.h missing.h re.h \
  regex.h
regex.o: regex.c config.h regex.h
ruby.o: ruby.c ruby.h config.h defines.h intern.h missing.h dln.h \
  node.h util.h
signal.o: signal.c ruby.h config.h defines.h intern.h missing.h \
  rubysig.h
sprintf.o: sprintf.c ruby.h config.h defines.h intern.h missing.h
st.o: st.c config.h st.h
string.o: string.c ruby.h config.h defines.h intern.h missing.h \
  re.h regex.h version.h
struct.o: struct.c ruby.h config.h defines.h intern.h missing.h
time.o: time.c ruby.h config.h defines.h intern.h missing.h
util.o: util.c ruby.h config.h defines.h intern.h missing.h util.h
variable.o: variable.c ruby.h config.h defines.h intern.h \
  missing.h env.h node.h st.h util.h
version.o: version.c ruby.h config.h defines.h intern.h missing.h \
  version.h

------------------------------------------------------------

Guy Decoux