Project:Ada

Aim of the project
The project maintains the compiler, builder, system library and IDE for ada.

The spark language, based on ada and aimed at safety and security, is also supported.

The reference sources are the one present in the libre.adacore.com site, maintained by AdaCore.

We also hope to integrate gnat-gcc with the standard toolchain packages starting with 6.x/7.x, with new arches added as new bootstraps become available (see the ada-overlay on github for the current packages/eclass).

Current packages
At present packages are part of the project.

gnat-gpl share in fact most of the sources and the binaries with gcc.
 * dev-lang/gnat-gpl-2016 conflict with the sys-devel/gcc-4.9.4 compiler.
 * dev-lang/gnat-gpl-2017 conflict with the sys-devel/gcc-6.3.0 compiler.

Configuration
You need to indicate the One, and only one of the two use flags: to select the compiler that build all the ada packages.
 * the ADA compiler used to build the Ada compiler (if available)
 * the ADA compiler FLAGS, used to build Ada packages
 * optionally the nostrip features (or splitdebug) to retains symbol in the gnat runtime (e.g. catch exception with debugger)
 * gnat_2016 to select dev-lang/gnat-gpl-2016
 * gnat_2017 to select dev-lang/gnat-gpl-2017

Those should be set in the file etc/portage/make.conf

The ADA variable is the name of the gcc compiler that can compile ada files and that will be used to build the ada compiler. If you do not specify the ADA variable, the system gcc compiler will be used instead, if capable.

For some packages like dev-ada/gprbuild, there is a default use flag set for gnat_2016 or gnat_2017, depending of the version of the package.

when the default conflict with the global value use somthing like:

to build for instance =dev-ada/gprbuild-2017 with the 2016 compiler.

There is no need of updating package.use when building the 2017 version gprbuild with the 2017 version of gnat-gpl compiler. The same apply for the 2016 versions of the respective packages.

Build instructions
To build the compiler unfortunately you need an ada/c/c++ compiler already available, to produce an ada/c/c++ compiler.

If you don't have an ada compiler available you must set the bootstrap use flags. In this case the compiler used will be gnat-gpl-2014-x86_64-linux-bin.tar.gz from libre.adacore.com.

Once installed you can use the compiler either
 * by selecting it with gcc-config. In this case you also change the default c/c++ compiler (and this is not supported to upgrade gentoo)
 * by postfixing any ada command with its own version: eg. gnatmake-4.9.4

Similar to the compiler, for gprbuild you need to set the "bootstrap" flag and unset the "shared" flag initially for the first build, then rebuild them in order to be able to use them as shared libs, like this:

as dev-ada/gprbuild needs dev-ada/xmlada and dev-ada/xmlada needs dev-ada/gprbuild; the bootstrap flag breaks the loop.

Compiler upgrade
When you want to use a new ada compiler you need to change the make.conf to reflect this choice

i.e. change the use flag setting, enabling gnat_2017 and disabling gnat_2016 and then rebuild all ada packages starting from dev-ada/gprbuild with the bootstrap use flags