Re: Compiling ROOT on "exotic" platforms

View: New views
2 Messages — Rating Filter:   Alert me  

Parent Message unknown Re: Compiling ROOT on "exotic" platforms

by Christian Holm Christensen :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

Hi Boris,

[cc'ed to cint ML, the CINT developers, and Fons]

On Fri, 2007-09-07 at 21:10 +0200, boris wrote:
> On Fri, Sep 07, 2007 at 05:43:54PM +0200, Christian Holm Christensen wrote:
> Hi Christian,
>  
> > Can you send me a log of what changes you made, so that we can merge
> > those upstream.  
>
> Ok here are the files ... there is a simple bash script run.sh which
> copied everything in place ...

Great.  Thanks.

> >         64 bit     | ia64, alpha   | powerpc64[*], s390x[*], sparc64[*]
>
> Mmm I have a powerpc64 here (Apple G5) but only with debian_ppc32
> (at the moment :-) )

OK, not to worry.  powerpc64 is after all an "experimental"
distribution.  I'm not even sure it will ever be released.
 
> >         $ root -l demos.C
> >        
> > Now, click on the buttons in the panel that shows up, starting at the
> > top, proceeding to the bottom.  If you do not have an accelerated 3D
> > graphics card (!) then the "shapes" and "na49view" could take a long
> > time to display.  
>
> I can only use X redirection.

Remeber, you have to do "trusted X forwarding", that is, "ssh -Y ...".

> OK. I tried the demos and got some errors.
> But perhaps these are normal for non intel systems ?

No.  It's a problem in CINT however.

> root -l demos.C
> Processing demos.C...
> Limitation: Variable argument is not supported for this platform demos.C:13:

The problem is, that CINT does know how to deal with functions of the
type

        f(const char* format, ...)
       
on mips - it needs to be told how to do that.  In the file
"cint/inc/G__ci.h" near line 1550, try to change the lines

        #elif (defined(__PPC__)||defined(__ppc__))&&(defined(__linux)||defined(__linux__))
        /**********************************************
         * PowerPC, Linux
         **********************************************/
        #define G__VAARG_INC_COPY_N 4
        #define G__VAARG_PASS_BY_REFERENCE 8
       
to

        #elif (defined(__PPC__)||defined(__ppc__))&&(defined(__linux)||defined(__linux__))
        /**********************************************
         * PowerPC, Linux
         **********************************************/
        #define G__VAARG_INC_COPY_N 4
        #define G__VAARG_PASS_BY_REFERENCE 8
       
        #elif (defined(__mips)&&defined(linux))
        /**********************************************
         * MIPS, Linux
         **********************************************/
        #define G__VAARG_INC_COPY_N 4
        #define G__VAARG_PASS_BY_REFERENCE 8

[that is, add the switch on mips/linux]

Can you try to make that change and rebuild?  Just make the change and
then run "fakeroot debian/rules binary" - that should be enough.
Thanks.

CINT developers: mips is a 32bit big-endian platform, running Linux and
using GCC.  Is it correct to assume that this platform is similar to
powerpc w/Linux and GCC?

> When line 13 is commented out demos.C starts.
>
> This _Limitation: Variable..._ message also appears for:
> fit/fit1.C:52, hist/h1draw.C:47: and geom/geometry.C:8

Right.  Same problem.

> Not sure about this one:
>
> Error in <TFile::TFile>: file na49.root does not exist
> Error: illegal pointer to class object n49 0x0 1786  geom/na49view.C:22:
> *** Interpreter error recovered ***

The file "na49.root" is generated by the script "geom/geometry.C", and
since that fails, it means that the file is not made, so no biggy.

> However the most demos ( and my own simple programs ;-) ) seams to work.

OK, cool.
 
...

> > If you want to do a real stress test, copy the directory
> > "/usr/share/doc/root/test" to somewhere read/write-able by you, and cd
> > there, and build the programs and libraries
> >
> >         $ cp -a /usr/share/doc/root/test .
> >         $ cd test
> >         $ make
>
> test# make
> Makefile.arch:510: *** linuxmips64 invalid architecture.  Stop.
>
> Arrg - I think we missed another one ...

OK, that's easily fixed.   Just add

        ifeq ($(ARCH),linuxmips64)
        # Linux with egcs, gcc 2.9x, gcc 3.x
        CXX           = g++
        CXXFLAGS      = $(OPT2) -Wall -fPIC
        LD            = g++
        LDFLAGS       = $(OPT2)
        SOFLAGS       = -shared
        endif

somewhere near the other "linux*" in Makefile.arch.

Thank you.

Yours,

--
 ___  |  Christian Holm Christensen
  |_| |  -------------------------------------------------------------
    | |  Address: Sankt Hansgade 23, 1. th.  Phone:  (+45) 35 35 96 91
     _|           DK-2200 Copenhagen N       Cell:   (+45) 24 61 85 91
    _|            Denmark                    Office: (+45) 353  25 404
 ____|   Email:   cholm@...               Web:    www.nbi.dk/~cholm
 | |





Re: Re: Compiling ROOT on "exotic" platforms

by Axel Naumann :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

Hi,

Christian Holm Christensen wrote:

>> root -l demos.C
>> Processing demos.C...
>> Limitation: Variable argument is not supported for this platform demos.C:13:
>
> The problem is, that CINT does know how to deal with functions of the
> type
>
>         f(const char* format, ...)
>        
> on mips - it needs to be told how to do that.
[...]
> CINT developers: mips is a 32bit big-endian platform, running Linux and
> using GCC.  Is it correct to assume that this platform is similar to
> powerpc w/Linux and GCC?

It's a start, though it might still have a completely different way of
passing va_list. Boris, could you let us know whether the changes
proposed by Christian already fix it? If not I'll have to dig for
documentation.

Cheers, Axel.