texmacs-dev
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Texmacs-dev] nogencc-0.10


From: David Allouche
Subject: Re: [Texmacs-dev] nogencc-0.10
Date: Tue, 14 May 2002 14:11:32 +0200

On Tuesday 14 May 2002 10:48, Joris van der Hoeven wrote:
> > Added test for "-fno-rtti -fno-exceptions" in configure script.
> > Inspired from a test in ltconfig (in GNU libtools).
>
> What about implicit-templates? Did you test the difference
> in code size and execution speed in the official distribution?

Since I was sure of the result I did not test it, but you insist on it...

normal build, MIXED_TEXMACS, stripped
-rwxr-xr-x    1 david    david     3665256 May 14 13:15 texmacs.bin*

-fno-implicit-templates, MIXED_TEXMACS, stripped
-rwxr-xr-x    1 david    david     3665256 May 14 14:08 texmacs.bin*

diff shows that the binaries are identical.

That is no surprise since the official TeXmas distribution do not use 
templates.

Anyway implicit templates only affect the compilation, and in no way the 
quality of the generated code.

> > Removed MAKE definition in main Makefile to support GNU Make
> > installed as gmake.
>
> ?

From the GNU make documentation

       Recursive `make' commands should always use the variable
    `MAKE', not the explicit command name `make', as shown here:

         subsystem:
                 cd subdir && $(MAKE)

       The value of this variable is the file name with which
    `make' was invoked. If this file name was `/bin/make', then
    the command executed is `cd subdir && /bin/make'. If you use a
    special version of `make' to run the top-level makefile, the
    same special version will be executed for recursive
    invocations.

So the definition of the MAKE variable in the base Makefile was not only 
useless, it was also problematic. Since my new makefiles in the src 
directory use features specific to GNU make, we must be able to use
GNU make recursively even on UNIX systems where it is called gmake.

> > Removed word-alignement compiler options. They provided only the
> > default values on Intel and Sparc, and caused error on Solaris
> > (gcc version 2.95.2 19991024).
>
> This should depend on the architecture;
> the options should be included on Intel and Sparc.

On the Sparc Solaris testing machine at SourceForge, it causes an error. 
Apparently, the version of gcc installed there wants the actual 
alignement value. But later gcc versions (at least the one installed 
here) use the provided value as an exponent of 2.

The consequence on that SourceForge machine is that the compiler cause an 
error because the alignment value is smaller than the word size.

Anyway my gcc manual reads:

For i386:

    `-malign-loops=NUM'
         Align loops to a 2 raised to a NUM byte boundary. If
         `-malign-loops' is not specified, the default is 2 unless
         gas 2.8 (or later) is being used in which case the
         default is to align the loop on a 16 byte boundary if it
         is less than 8 bytes away.

    `-malign-jumps=NUM'
         Align instructions that are only jumped to to a 2 raised
         to a NUM byte boundary. If `-malign-jumps' is not
         specified, the default is 2 if optimizing for a 386, and
         4 if optimizing for a 486 unless gas 2.8 (or later) is
         being used in which case the default is to align the
         instruction on a 16 byte boundary if it is less than 8
         bytes away.

    `-malign-functions=NUM'
         Align the start of functions to a 2 raised to NUM byte
         boundary. If `-malign-functions' is not specified, the
         default is 2 if optimizing for a 386, and 4 if optimizing
         for a 486.

For Sparc:

    `-malign-loops=NUM'
         Align loops to a 2 raised to a NUM byte boundary. If
         `-malign-loops' is not specified, the default is 2.

    `-malign-jumps=NUM'
         Align instructions that are only jumped to to a 2 raised
         to a NUM byte boundary. If `-malign-jumps' is not
         specified, the default is 2.

    `-malign-functions=NUM'
         Align the start of functions to a 2 raised to NUM byte
         boundary. If `-malign-functions' is not specified, the
         default is 2 if compiling for 32 bit sparc, and 5 if
         compiling for 64 bit sparc.

So these options just force what is generally the defaut, and prevent the 
use of more sensible settings in special cases.

> > Removed --no-rtti option, because it caused a link error with
> > gcc-2.95.2.
>
> Please put in a condition for this; I would like to keep this option
> whenever possible. By the way, I do not have this problem with
> gcc-2.95.2.

I had this problem on all the machines running gcc-2.95.2 at SourceForge. 
That is the Sparc Solaris machine and the PPC/RS6000 and Alpha Debian 
machines. At link time I had "undefined symbol xxxxx_typeinfo" errors, or 
something similar.

I am not willing to work out a configure test to detect this problem 
because it is likely to appear only in complex cases. Moreover, since you 
tell me that you cannot reproduce the problem with your version of the 
compiler, we cannot simply test the version of gencc.

> > Added .PHONY targets to accomodate for Cygwin's case insensitive
> > filesystem.
>
> Is that necessary? We did not need that on Cygwin.

That not only necessary, that is also good practice.

If you check the message about compiling for Cygwin on texmacs-users, you 
will see that it is necessary to make MISC by hand. The problem is that 
Cygwin's file-system is case unsensitive, so when you do $(MAKE) MISC it 
does nothing since a "misc" directory already exists and the MISC target 
has no prerequisite.

In your makefile you use a lot of phony targets (see GNU make 
documentation). Not declaring them as such is very bad practice.

> > Assorted minor fixes to makefiles.
> >
> > Tested compilation on:
> > Debian 3.0 on Intel         gcc version 2.95.4 20011002 (Debian prerelease)
> > RH-7.3 on Intel                     gcc version 2.96 20000731
> > RH-7.1 on Alpha                     gcc version 2.96 20000731
> > Solaris8 on Sparc R220              gcc version 2.95.2 19991024 (release)
> > Debian-2.2 on PPC RS/6000   gcc version 2.95.2 20000220 (Debian
> > GNU/Linux) Debian-2.2 on Alpha              gcc version 2.95.2 20000220 
> > (Debian
> > GNU/Linux) FreeBSD 4.5 on Intel             gcc version 2.95.3 20010315
> > (release)
> > Cygwin on Windows98         gcc version 2.95.3-5 (cygwin special)
>
> Great. Did you try to execute the binaries too?
> This is important, because the application sometimes segfaults.

I only tested on Cygwin. I have no way to test an X application on the 
Compaq TestDrive's machines (first three) and on the SourceForge compile 
farm's machines (all the rest but Cygwin).

> > Could not even compile mainline on MacOS X. However, there is a Fink
> > package, so it is possible with a bit hacking.
>
> Strange, the official distribution has been reported to
> compile & execute well.

Probably with some hacking of the makefiles, as I said.

I tried to compile on a SourceForge's Darwin machine, but it was unable 
to find some system header which was present in /sw/include.
FYI, /sw is the standard installation directory of Fink.

> > Removed use of H convenience macro in hashmap.cc and hashmap_extra.cc
> > because it confused Doxygen.
>
> Please postpone this change.

Ok.
-- 

                                  -- David --



reply via email to

[Prev in Thread] Current Thread [Next in Thread]