Diff for /wikisrc/pkgsrc/gcc.mdwn between versions 1.2 and 1.4

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.

Removed from v.1.2  
changed lines
  Added in v.1.4


CVSweb for NetBSD wikisrc <wikimaster@NetBSD.org> software: FreeBSD-CVSweb