version 1.2, 2017/11/26 01:20:23
|
version 1.4, 2017/11/26 15:37:02
|
Line 18 build gcc versions (typically newer vers
|
Line 18 build gcc versions (typically newer vers
|
in a compiler within ${PREFIX}, e.g. /usr/pkg/gcc6/bin/gcc. This |
in a compiler within ${PREFIX}, e.g. /usr/pkg/gcc6/bin/gcc. This |
compiler can then be used to compile other packages. |
compiler can then be used to compile other packages. |
|
|
Issues with using base system gcc are typically that it is too old, |
The Issue with using base system gcc is typically that it is too old, |
such as gcc 4.5 with NetBSD 6, which cannot compile c++11. |
such as gcc 4.5 with NetBSD 6, which cannot compile c++11. |
|
|
Issues when using pkgsrc gcc are that |
Issues when using pkgsrc gcc are that |
Line 47 This section attempts to gather all the
|
Line 47 This section attempts to gather all the
|
version used in any included library. |
version used in any included library. |
|
|
- All packages that use C++ should be built with the same compiler |
- All packages that use C++ should be built with the same compiler |
version. Because these typically also include C, the version used |
version. Because these in the general case may include C, the |
for C++ must be at least as new as the version used for any used C |
version used for C++ must be at least as new as the version used |
package. |
for any used C package. |
|
|
- pkgsrc should avoid building gcc unless it is more or less |
- pkgsrc should avoid building gcc unless it is more or less |
necessary to build packges. (As an example, if the base system |
necessary to build packges. (As an example, if the base system |
Line 102 sound while mimimizing complexity.
|
Line 102 sound while mimimizing complexity.
|
package building will fail. We call the resulting |
package building will fail. We call the resulting |
PKGSRC_GCC_VERSION or PKGSRC_GXX_VERSION the chosen version. |
PKGSRC_GCC_VERSION or PKGSRC_GXX_VERSION the chosen version. |
|
|
- When building a program using C or C++, the chosen version is not |
- When building a program using C or C++, if the chosen version is |
provided by the base system, and the chosen version is not |
not provided by the base system, and the chosen version is not |
installed via pkgsrc, then it (and its dependencies) will be built |
installed via pkgsrc, then it (and its dependencies) will be built |
from pkgsrc in a special bootstrap mode. When building in |
from pkgsrc in a special bootstrap mode. When building in |
bootstrap mode, the version selection logic is ignored and the |
bootstrap mode, the version selection logic is ignored and the |
Line 151 exist.
|
Line 151 exist.
|
\todo: Discuss adjusting options to minimize dependencies, including |
\todo: Discuss adjusting options to minimize dependencies, including |
gcc-inplace-math and nls. |
gcc-inplace-math and nls. |
|
|
|
### Differing GCC and GXX versions |
|
|
|
Perhaps it is a mistake to allow the chosen GCC and GXX versions to |
|
differ. If we require them to be the same, then essentially all |
|
systems with a base system compiler older than gcc 5 will have to |
|
bootstrap the compiler. For now, we allow them to differ and will |
|
permit the defaults to differ. |
|
|
### Default versions for various systems |
### Default versions for various systems |
|
|
Note that if any particular system (or bulk build), a newer gcc has to |
Note that if for any particular system's set of installed packages (or |
be built, it does not hurt incrementally to have built it earlier. |
bulk build), a newer gcc has to be built, it does not hurt to have |
|
built it earlier. |
|
|
When the base system is old (e.g., gcc 4.5 in NetBSD 6, or 4.1, in |
When the base system is old (e.g., gcc 4.5 in NetBSD 6, or 4.1, in |
NetBSD 5), then it is clear that a newer version must be built. For |
NetBSD 5), then it is clear that a newer version must be built. For |
these, PKGSRC_GXX_VERSION should default to a newish gcc, avoiding |
these, PKGSRC_GXX_VERSION should default to a newish gcc, avoiding |
being so new as to cause building issues. Currently, gcc6 is probably |
being so new as to cause building issues. Currently, gcc5 is probably |
a good choice. PKGSRC_GCC_VERSION should probably default to the |
a good choice, with gcc6 compiling significantly but not vastly fewer |
system version if it can build C99, or match PKGSRC_GXX_VERSION, if |
packages. PKGSRC_GCC_VERSION should probably default to the system |
the system version is too old. Perhaps gcc 4.5 would be used, but 4.1 |
version if it can build all C99 programs, or match PKGSRC_GXX_VERSION, |
not used. \todo Discuss. |
if the system version is too old. Perhaps gcc 4.5 would be used, but |
|
4.1 not used. \todo Discuss. |
|
|
When the base system is almost new enough, the decision about the |
When the base system is almost new enough, the decision about the |
default is more complicated. A key example is gcc 4.8, found in |
default is more complicated. A key example is gcc 4.8, found in |
Line 175 fail, and the general rule of moving to
|
Line 185 fail, and the general rule of moving to
|
generally-acceptable version applies, which currently leads to gcc6. |
generally-acceptable version applies, which currently leads to gcc6. |
This is in effect a declaration that "almost new enough" does not |
This is in effect a declaration that "almost new enough" does not |
count as new enough. Thus the plan for NetBSD 7 is to set |
count as new enough. Thus the plan for NetBSD 7 is to set |
PKGSRC_GCC_VERSION to 4.8 and PKGSRC_GXX_VERSION to 6. |
PKGSRC_GCC_VERSION to 4.8 and PKGSRC_GXX_VERSION to 5. |
|
|
When the base system is new, e.g. gcc 5 or gcc 6 it should simply be |
When the base system is new enough, e.g. gcc 5, 6 or 7 it should |
used. By "new enough", we mean that almost no programs in pkgsrc fail |
simply be used. By "new enough", we mean that almost no programs in |
to build with it, which implies that it supports (almost all) C++14 |
pkgsrc fail to build with it, which implies that it supports (almost |
programs. Our current definiton of new enough is gcc 5. |
all) C++14 programs. Our current definiton of new enough is gcc 5. |
|
|
### Limited mixed versions |
### Limited mixed versions |
|
|
Line 219 not worsened by the above design. \todo
|
Line 229 not worsened by the above design. \todo
|
is the base system version if >= 4.5 (or 4.4?), and otherwise 6, |
is the base system version if >= 4.5 (or 4.4?), and otherwise 6, |
and that PKGSRC_GXX_VERSION is the base system version if >= 5, and |
and that PKGSRC_GXX_VERSION is the base system version if >= 5, and |
otherwise 6. |
otherwise 6. |
|
|
|
### Later steps |
|
|
|
- Address fortran. |