The only gcc compiler from pkgsrc DragonFly users should consider: GNAT-Aux

John Marino dragonflybsd at marino.st
Sun Jan 8 08:26:50 PST 2012


The 2011Q4 pkgsrc freeze is over.  That allowed me to commit an upgrade 
to lang/gnat-aux to sync with GCC 4.6.2-RELEASE today.

A lot of work has gone into this compiler which supports:
x86_64-*-dragonfly*
  i386-*-dragonfly*
x86_64-*-netbsd*
  i386-*-netbsdelf*
  i386-*-solaris2*
x86_64-*-freebsd* (through FreeBSD ports)
  i386-*-freebsd* (through FreeBSD ports)

lang/gcc34 breaks (do we need gcc-3x?)
lang/gcc44 is marked NOT-FOR-DRAGONFLY
lang/gcc45 doesn't build (requires unbuildable binutils 2.17 downgrade)
lang/gcc46 breaks during build (obsolete dragonfly.h but needs a lot
more love than that to really work)
Compiler fixing is extremely time consuming and a bit frustrating.
Frankly I'd like to mark lang/gcc34, lang/gcc45, and lang/gcc46 
NOT-FOR-DRAGONFLY as well.  With the quality of lang/gnat-aux, 
these really isn't a need for them.

lang/gnat-aux supports the following five languages: Ada, C, C++, ObjC,
and Fortran.

A question was posed to me on IRC: Why work on lang/gnat-aux rather
than fix lang/gcc46?  The answer is that they serve different purposes.
lang/gcc46 strives for the gcc java language (which due to neglect has
no practical application) and to support NLS.  Additionally it has to
support every NetBSD architecture as well as Linux, *BSD, SunOS, Darwin,
 etc.).  The reason it doesn't support Ada is because Ada requires a 
bootstrap compiler (although technically it could install lang/gnat-aux
and use that as a bootstrap!).  Once gnat-aux is on a system, it can use
itself to build new compilers, but the very first build from source 
requires a downloadable bootstrap.  These are difficult to develop, and
there are currently only seven (matching the seven platforms listed
above).  Since the point of lang/gnat-aux is to provide a perfect Ada
compiler and since lang/gcc46 considers this optional at best, the two
compiler packages really aren't compatible in their goals.  A simpler
answer is that I don't have time to work on multiple compilers.  
lang/gnat-aux is heavily patched, and developing those patches is very
time consuming.

That said, assuming NLS and java aren't required, DragonFly users should
not miss any of the lang/gcc* packages.  I have run gnat-aux testsuites
against the following 9 platforms:
x86_64-*-dragonfly2.13 (very recent)
  i386-*-dragonfly2.13 (very recent)
x86_64-*-netbsd5.1
  i386-*-netbsdelf5.1
x86_64-*-netbsd5.99    (jan 6 kernel, DIRECT_MAP disabled)
  i386-*-netbsdelf5.99 (jan 7 snapshot)
x86_64-*-freebsd8.2
  i386-*-freebsd8.0
  i386-*-solaris2.11   (openIndiana 151a)

Results: http://leaf.dragonflybsd.org/~marino/results/gnataux_test_results.pdf

Observations with an emphasis on DragonFly:
1) All platforms pass Ada/ACATS perfectly
2) All platforms pass Ada/gnat perfectly
3) Only FreeBSD has better Fortran results than DragonFly (by a single test)
4) DragonFly passes ObjC tests perfectly, along with FreeBSD and OpenIndiana
5) Only NetBSD scores better on g++ than DragonFly, but FreeBSD is close behind
6) DragonFly has highest marks on libstdc++, but may have "unfair" advantage
   with updated dejagnu target settings
7) Only NetBSD has higher "C" score than DragonFly, but DragonFly has no
   "unexpected successes" and far fewer unsupported tests.  Bottom line is
   DragonFly has a solid 76,500+ successes on the "C" testsuite, nothing 
   unresolved or unexpected.

================================================
lang/gnat-aux is recognized as external compiler
================================================

> man compilers.conf

lang/gnat-aux can be used with the DragonFly build(7) system.  Installing it
and then setting CCVER=gcc46 will allow building world and/or kernel with
lang/gnat-aux which is based on gcc 4.6.2-RELEASE.  FYI clang (lang/clang),
and pcc (lang/pcc-current) are the two other pkgsrc compilers recognized
by default.  Note that world still breaks with gcc46 so work still needs to
be done to make dragonfly world friendly to the latest gcc release.

TL;DR: lang/gnat-aux-20111026 is the best gcc compiler available for
DragonFly and should be the one used by DragonFly users when the system
compiler isn't good enough, regardless of language needed.

John





More information about the Users mailing list