[erlang-questions] : : : build 64bit Erlang on Solairs
Wed May 7 10:01:55 CEST 2008
On Wed, May 07, 2008 at 01:43:29PM +0800, Raymond Xiong wrote:
> On 05/06/08, Raimo Niskanen wrote:
> > http://www.erlang.org/download/snapshots/otp_src_R12B-3.tar.gz
> > Do not take the one 06-May-2008 02:54 since it accidentally
> > does not have my erts/configure.in changes. I am interested in
> > knowing how much is missing in a snapshot release (7-may)
> > for your builds to work as you need.
> I gave it a quick try and it worked fine with the following
> $ env CC=gcc CFLAGS='-m64 -O3' LDFLAGS="-m64" CPPFLAGS="-I
> /usr/include/gd2" CXX=g++ ./configure --prefix=/export/tmp_b
> --with-ssl=/usr/sfw --enable-dynamic-ssl-lib
> See more below...
> > > $ gpatch -p0 < erts_configure.patch
> > > $ env CC=gcc CFLAGS='-m64 -O3' LDFLAGS="-m64" CPPFLAGS="-I /usr/include/gd2" CXX=g++ ./configure --prefix=/usr --with-ssl=/usr/sfw --enable-dynamic-ssl-lib
> > > $ gmake
> > >
> > I agree it must be the right(tm) way to do it to specify
> > CC="gcc" and CFLAGS="-m64". I believe that for the "ld"
> > linker the correct LDFLAGS should be -64, but I do not
> > recall how they are passed. However I think the configure
> > script should detect that the compiler produces 8-byte
> > integers and figure out the linker flags. At least there
> > is already such code in erts/configure.in.
> Yes, I also think it is a bit weird to define "-m64" in LDFLAGS,
> but that is the only way to get it working. If you don't set it
> (or set it to "-64"), the build would fail when it generates
> beam executable file. See following log:
> gcc -o /export/tmp_a/otp_src_R12B-1/bin/sparc-sun-solaris2.11/beam \
> -64 obj/sparc-sun-solaris2.11/opt/plain/erl_main.o ...
> gcc: unrecognized option `-64'
> ld: fatal: file obj/sparc-sun-solaris2.11/opt/plain/erl_main.o: wrong ELF class: ELFCLASS64
> ld: fatal: File processing errors. No output written to /export/tmp_a/otp_src_R12B-1/bin/sparc-sun-solaris2.11/beam
> The reason is in the follwing lines in erts/emulator/Makefile.in:
> $(BINDIR)/$(EMULATOR_EXECUTABLE): $(INIT_OBJS) $(OBJS)
> $(PURIFY) $(LD) -o $(BINDIR)/$(EMULATOR_EXECUTABLE) \
> $(HIPEBEAMLDFLAGS) $(LDFLAGS) $(DEXPORT) $(INIT_OBJS) $(OBJS) $(LIBS)
> That's why I asked in previous mail if it's beter to include
> CFLAGS in above lines. But as you mentioned, it is probably
> not a good practice. I googled on the net and found using
> -m64 in LDFLAGs seems to be a popular solution to such issue.
> So I am OK with this usage.
It seems $(LD) is really gcc (from your build log), and I am
not surprised gcc wants -m64. Probably our 'ld' wrapper
script that adds -64 to /usr/ccs/bin/ld is not actually used.
I have now checked erts/configure.in and it sets LD='$(CC)'.
To be even more formally right you might add LD=gcc to your
build command line, to justify LDFLAGS=-m64.
> erlang-questions mailing list
/ Raimo Niskanen, Erlang/OTP, Ericsson AB
More information about the erlang-questions