Migration to GCC 6.4 as userland compiler

Modulo some minor details, the transition of our userland to GCC 6 is complete.

What does it mean in practice?

  1. All the packages in the main and encumbered repositories were rebuilt then republished.
  2. The component developer/gcc-6 provides now the default oi-userland compiler, GCC 6.4. The previous compiler GCC 4.9 is used only to compile developer/gcc-49 (self) and illumos-gcc.
  3. Any component submitted to oi-userland should now build with GCC 6.4.
  4. The reference compiler for illumos-gate and gfx-drm remains illumos-gcc 4.4.4. Compilation with developer/gcc-6 is possible but not officially supported (for development purposes only). The candidate for the next reference illumos-gate compiler is GCC 7.3.0.
  5. Recompilation of software installed manually is recommended, especially for C++ programs due to ABI incompatibilities.

Known issues:

  1. illumos-gate: As GCC 6 runtime libraries reside in /usr/gcc/6/lib and /usr/gcc/6/lib/$(MACH64), the runpath is embedded in many libraries. If the variable NIGHTLY_OPTIONS contains the flag ‘-r’, the check_rtime stage will fail. Until a fix is agreed upon with illumos-gate developers, the ‘-r’ flag should be removed from NIGHTLY_OPTIONS.
  2. tmux: The latest build cannot handle ‘CTRL^C’ properly, probably because it links to /usr/lib/values-xpg6.o, and libraries suddenly become XPG6-aware.
  3. repository size:  Due to the compiler migration, oi-userland was completely rebuilt, so that the main repository has grown significantly in size. We are likely going to clean it up from old packages this week.


  1. oi-userland dependencies tracking: With pull-request https://github.com/OpenIndiana/oi-userland/pull/3883 , the way the package dependencies resolution is handled has changed. There are two consequences: the time spent in the pkgdepend resolve phase has drastically decreased, but it also means that the build system is more sensitive to the list of dependencies defined by REQUIRED_PACKAGES. Any dependency found by pkgdepend should be present in REQUIRED_PACKAGES; resolve will fail otherwise. Note that on the build server the whole world is installed: be sure to disable unused options explicitly or to test components with all possible dependencies from oi-userland (and add them to REQUIRED_PACKAGES).
  2. build-essential: Due to the previous change we added REQUIRED_PACKAGES to many components and in theory we could shrink build-essential to ‘strictly required’ components (‘gmake env-prep’ is your friend). Some components were already removed from the meta-package.
  3. IIM: The component was finally removed as it was deprecated some time ago; ibus or xkbd should now be preferred.
  4. OpenJDK 8: The component was updated to 1.8.152 as it contains GCC 6 friendly fixes.
  5. JRuby: The component was updated to
  6. LUAJIT: The component was updated to 2.0.5 but may still exhibit linking failures due to portability issues.

Please do not hesitate to raise any issue related to package dependencies during the update phase, or to package regressions that could have unfortunately slipped through testing.