ARMToolChainSelection

Summary

We need to choose the version of each of the major tools needed for building Maverick on ARM.

Release Note

This section should include a paragraph describing the end-user impact of this change. It is meant to be included in the release notes of the first release in which it is implemented. (Not all of these will actually be included in the release notes, at the release manager's discretion; but writing them is a useful exercise.)

It is mandatory.

Rationale

Having best possible toolchain for ARM Cortex-A8/A9 targets.

User stories

There have been many improvements to the ARM tools in the last few months, so although, for example, GCC 4.4 is now quite stable, it is lacking a number of new and important features (tuning for Cortex-A9 Hard-float ABI etc). Switching to GCC 4.5 would look like a useful step forward, but this is still an early release. Are we happy with the risk that might imply? or should we be conservative?

Other tools we should consider during this session are GDB, binutils and eglibc.

Assumptions

  • same upstream versions of toolchain components as default on arm vs. x86 to avoid putting all the porting burden on the ARM community
  • same upstream versions of toolchain components as default in Ubuntu vs. Debian for a similar reason, but this would be less serious than an ARM vs. x86 delta
  • gcc-4.5 packages will be available (but not set as default)
  • gcc 4.5.1 will be released too late to be default in Maverick

Design

You can have subsections that better describe specific parts of the issue.

Implementation

We have few options now.

  1. stay with upstream gcc 4.4
  2. migrate to upstream gcc 4.5
    • 4.5 has some C++ changes that may cause build failures according to doko
    • 4.5.1 is not out until June, too late to switch the default toolchain for maverick
    • 4.5 offers better link-time optimization
      • this may not require shipping it as the default
      • not ready for prime time yet and won't be fixed until 4.6, per Mark
      • Brings around a 10% performance increase (in general) at the moment. Could bring more in the future.
  3. apply backports from CodeSourcery tools

    • CS releases are based on 4.4
    • Code generation is closer to 4.5, while keeping language feature set at 4.4
    • backporting, debugging already done
    • can be coupled with a gcc-4.4-pristine or gcc-4.4-fsf package in the archive to facilitate regression testing and upstreaming of bug reports
    • binutils 2.21-csl should be released on beginning of July

Code Changes

Code changes should include an overview of what needs to change, and in some cases even the specific details.

Migration

Include:

  • data migration, if any
  • redirects from old URLs to new ones, if any
  • how users will be pointed to the new way of doing things, if necessary.

Test/Demo Plan

It's important that we are able to test new features, and demonstrate them to users. Use this section to describe a short plan that anybody can follow that demonstrates the feature is working. This can then be used during testing, and to show off after release. Please add an entry to http://testcases.qa.ubuntu.com/Coverage/NewFeatures for tracking test coverage.

This need not be added or completed until the specification is nearing beta.

Unresolved issues

This should highlight any issues that should be addressed in further specifications, and not problems with the specification itself; since any specification with problems cannot be approved.

BoF agenda and discussion

Toolchain Selection

Discussion

Ubuntu Tool Chain History

  • Tries to follow Debian Compiler.
  • Ubuntu introduced 4.3 before Debian.
  • Debian - a few weeks ahead of Ubuntu for 4.4.
  • Try not to switch to the .0 release but to the .1 release
  • Traditionally only the FSF release

Future Tool Chain

Options for ARM:

  • FSF 4.4
    • 4.5 offers better link-time optimization
      • this may not require shipping it as the default
      • not ready for prime time yet and won't be fixed until 4.6, per Mark
      • Brings around a 10% performance increase (in general) at the moment. Could bring more in the future.
  • FSF 4.5
    • 4.5.1 is not out until June, too late to switch the default toolchain for maverick
    • 4.5 has some C++ changes that may cause build failures according to doko
    • should avoid shipping a different upstream version of gcc as default on arm vs. x86, to avoid putting all the porting burden on the ARM community
    • should avoid shipping a different upstream version of gcc as default in Ubuntu vs. Debian for a similar reason, but this would be less serious than an ARM vs. x86 delta
  • set of aggressive backports to 4.4, based on something like Codesourcery (CS) tools
    • CS releases are based on 4.4
    • Code generation is closer to 4.5, while keeping language feature set at 4.4
    • backporting, debugging already done
    • can be coupled with a gcc-4.4-pristine or gcc-4.4-fsf package in the archive to facilitate regression testing and upstreaming of bug reports
  • Diverging from Debian could pose problems with testing efforts
  • Even if the decision is to go with 4.4 we should have a 4.5 package available
  • What about other architectures IA64/SPARC e.t.c ? Not enough resources to regression test until after the Maverick release.
  • CS offered to help test/fix IA64/SPARC if there are issues if we chose CS's GCC branch/patches
    • Per package dependency on a specific GCC version could be used on troublesome packages.
  • CS release April and October
    • Private trees with code drop every 6 months
      • CS would like to open this up more
  • What about binutils ? CS binutils or FSF binutils.
  • CS recommends taking binutils and gcc as a set
    • no existing solution for a per-architecture binutils version
    • CS only has 2.20 today, but may be amenable to doing a 2.21 release sooner
      • Feature freeze is Aug 26th
      • CS say that by the beginning of July binutils should be updated
    • gdb would be optional
    • CS also works on Eclipse CDT and qemu. A number of changes in QEMU for ARMv6 - v7 instructions.

Action Points

  • Consult doko to get a list of potential C++ build failures on 4.5
  • CS to provide binutils 2.21 build by end of June
  • CS to export SVN repos for GCC and binutils (to track updates)
  • doko to decide whether to take 4.4 CS for arm+x86+powerpc, or for all archs
  • gcc-4.4 pristine packages to be made available
  • doko to double-check that libstdc++ 4.5 is ok with 4.4 g++
  • CS binutils to be taken on all architectures if they pass muster with Matthias generally
  • ensure ARM assembler is building with current OpenJDK


CategorySpec

Specs/M/ARMToolChainSelection (last edited 2010-05-28 16:47:39 by richard-earnshaw)