[PATCH] Support Sourcery CodeBench MIPS toolchain

Simon Atanasyan simon at atanasyan.com
Tue Apr 9 02:16:46 PDT 2013


Hi chandlerc, rafael.espindola,

Sourcery CodeBench and modern FSF Mips toolchains require a bit more
complicated algorithm to calculate headers, libraries and sysroot
paths than implemented by Clang driver now. The main problem is that all
these paths depend on a set of command line arguments additionally to a target
triple value. For example, let $TC is a toolchain installation directory.
If we compile big-endian 32-bit mips code, crtbegin.o is in
the $TC/lib/gcc/mips-linux-gnu/4.7.2 folder and the toolchain's linker
requires --sysroot=$TC/mips-linux-gnu/libc argument. If we compile
little-endian 32-bit soft-float mips code, crtbegin.o is in
the $TC/lib/gcc/mips-linux-gnu/4.7.2/soft-float/el folder and the toolchain's
linker requires --sysroot=$TC/mips-linux-gnu/libc/soft-float/el argument.

This patch supports Sourcery CodeBench toolchain directories tree.
The FSF's tree slightly differs and is not supported yet.

1. Calculate MultiarchSuffix using all necessary command line options
   and use this MultiarchSuffix to detect crtbegin.o location in the
   GCCInstallationDetector::ScanLibDirForGCCTriple() routine.
2. If a user does not provide --sysroot argument to the driver explicitly,
   calculate new sysroot value based on command line options. Then
   use this calculated sysroot path:
   a. Use this sysroot in the Linux::Linux() constructor to populate
      file search paths list.
   b. Use this sysroot in the Linux::AddClangSystemIncludeArgs() routine
      to find Mips toolchain specific include headers directories.
   c. Pass the sysroot argument to the linker.

http://llvm-reviews.chandlerc.com/D644

Files:
  lib/Driver/ToolChains.cpp
  lib/Driver/ToolChains.h
  test/Driver/Inputs/mips_toolchain_tree/bin/.keep
  test/Driver/Inputs/mips_toolchain_tree/lib/gcc/mips-linux-gnu/4.6.3/64/crtbegin.o
  test/Driver/Inputs/mips_toolchain_tree/lib/gcc/mips-linux-gnu/4.6.3/64/crtend.o
  test/Driver/Inputs/mips_toolchain_tree/lib/gcc/mips-linux-gnu/4.6.3/crtbegin.o
  test/Driver/Inputs/mips_toolchain_tree/lib/gcc/mips-linux-gnu/4.6.3/crtend.o
  test/Driver/Inputs/mips_toolchain_tree/lib/gcc/mips-linux-gnu/4.6.3/el/64/crtbegin.o
  test/Driver/Inputs/mips_toolchain_tree/lib/gcc/mips-linux-gnu/4.6.3/el/64/crtend.o
  test/Driver/Inputs/mips_toolchain_tree/lib/gcc/mips-linux-gnu/4.6.3/el/crtbegin.o
  test/Driver/Inputs/mips_toolchain_tree/lib/gcc/mips-linux-gnu/4.6.3/el/crtend.o
  test/Driver/Inputs/mips_toolchain_tree/lib/gcc/mips-linux-gnu/4.6.3/include-fixed/64/.keep
  test/Driver/Inputs/mips_toolchain_tree/lib/gcc/mips-linux-gnu/4.6.3/include-fixed/el/64/.keep
  test/Driver/Inputs/mips_toolchain_tree/lib/gcc/mips-linux-gnu/4.6.3/include-fixed/micromips/el/.keep
  test/Driver/Inputs/mips_toolchain_tree/lib/gcc/mips-linux-gnu/4.6.3/include-fixed/micromips/soft-float/el/.keep
  test/Driver/Inputs/mips_toolchain_tree/lib/gcc/mips-linux-gnu/4.6.3/include-fixed/mips16/el/.keep
  test/Driver/Inputs/mips_toolchain_tree/lib/gcc/mips-linux-gnu/4.6.3/include-fixed/mips16/soft-float/el/.keep
  test/Driver/Inputs/mips_toolchain_tree/lib/gcc/mips-linux-gnu/4.6.3/include-fixed/soft-float/64/.keep
  test/Driver/Inputs/mips_toolchain_tree/lib/gcc/mips-linux-gnu/4.6.3/include-fixed/soft-float/el/64/.keep
  test/Driver/Inputs/mips_toolchain_tree/lib/gcc/mips-linux-gnu/4.6.3/include/.keep
  test/Driver/Inputs/mips_toolchain_tree/lib/gcc/mips-linux-gnu/4.6.3/micromips/crtbegin.o
  test/Driver/Inputs/mips_toolchain_tree/lib/gcc/mips-linux-gnu/4.6.3/micromips/crtend.o
  test/Driver/Inputs/mips_toolchain_tree/lib/gcc/mips-linux-gnu/4.6.3/micromips/el/crtbegin.o
  test/Driver/Inputs/mips_toolchain_tree/lib/gcc/mips-linux-gnu/4.6.3/micromips/el/crtend.o
  test/Driver/Inputs/mips_toolchain_tree/lib/gcc/mips-linux-gnu/4.6.3/micromips/soft-float/crtbegin.o
  test/Driver/Inputs/mips_toolchain_tree/lib/gcc/mips-linux-gnu/4.6.3/micromips/soft-float/crtend.o
  test/Driver/Inputs/mips_toolchain_tree/lib/gcc/mips-linux-gnu/4.6.3/micromips/soft-float/el/crtbegin.o
  test/Driver/Inputs/mips_toolchain_tree/lib/gcc/mips-linux-gnu/4.6.3/micromips/soft-float/el/crtend.o
  test/Driver/Inputs/mips_toolchain_tree/lib/gcc/mips-linux-gnu/4.6.3/mips16/crtbegin.o
  test/Driver/Inputs/mips_toolchain_tree/lib/gcc/mips-linux-gnu/4.6.3/mips16/crtend.o
  test/Driver/Inputs/mips_toolchain_tree/lib/gcc/mips-linux-gnu/4.6.3/mips16/el/crtbegin.o
  test/Driver/Inputs/mips_toolchain_tree/lib/gcc/mips-linux-gnu/4.6.3/mips16/el/crtend.o
  test/Driver/Inputs/mips_toolchain_tree/lib/gcc/mips-linux-gnu/4.6.3/mips16/soft-float/crtbegin.o
  test/Driver/Inputs/mips_toolchain_tree/lib/gcc/mips-linux-gnu/4.6.3/mips16/soft-float/crtend.o
  test/Driver/Inputs/mips_toolchain_tree/lib/gcc/mips-linux-gnu/4.6.3/mips16/soft-float/el/crtbegin.o
  test/Driver/Inputs/mips_toolchain_tree/lib/gcc/mips-linux-gnu/4.6.3/mips16/soft-float/el/crtend.o
  test/Driver/Inputs/mips_toolchain_tree/lib/gcc/mips-linux-gnu/4.6.3/soft-float/64/crtbegin.o
  test/Driver/Inputs/mips_toolchain_tree/lib/gcc/mips-linux-gnu/4.6.3/soft-float/64/crtend.o
  test/Driver/Inputs/mips_toolchain_tree/lib/gcc/mips-linux-gnu/4.6.3/soft-float/crtbegin.o
  test/Driver/Inputs/mips_toolchain_tree/lib/gcc/mips-linux-gnu/4.6.3/soft-float/crtend.o
  test/Driver/Inputs/mips_toolchain_tree/lib/gcc/mips-linux-gnu/4.6.3/soft-float/el/64/crtbegin.o
  test/Driver/Inputs/mips_toolchain_tree/lib/gcc/mips-linux-gnu/4.6.3/soft-float/el/64/crtend.o
  test/Driver/Inputs/mips_toolchain_tree/lib/gcc/mips-linux-gnu/4.6.3/soft-float/el/crtbegin.o
  test/Driver/Inputs/mips_toolchain_tree/lib/gcc/mips-linux-gnu/4.6.3/soft-float/el/crtend.o
  test/Driver/Inputs/mips_toolchain_tree/mips-linux-gnu/include/c++/4.6.3/mips-linux-gnu/.keep
  test/Driver/Inputs/mips_toolchain_tree/mips-linux-gnu/lib/el/.keep
  test/Driver/Inputs/mips_toolchain_tree/mips-linux-gnu/lib/micromips/el/.keep
  test/Driver/Inputs/mips_toolchain_tree/mips-linux-gnu/lib/micromips/soft-float/el/.keep
  test/Driver/Inputs/mips_toolchain_tree/mips-linux-gnu/lib/mips16/el/.keep
  test/Driver/Inputs/mips_toolchain_tree/mips-linux-gnu/lib/mips16/soft-float/el/.keep
  test/Driver/Inputs/mips_toolchain_tree/mips-linux-gnu/lib/soft-float/el/.keep
  test/Driver/Inputs/mips_toolchain_tree/mips-linux-gnu/lib64/el/.keep
  test/Driver/Inputs/mips_toolchain_tree/mips-linux-gnu/lib64/soft-float/el/.keep
  test/Driver/Inputs/mips_toolchain_tree/mips-linux-gnu/libc/el/lib/.keep
  test/Driver/Inputs/mips_toolchain_tree/mips-linux-gnu/libc/el/lib64/.keep
  test/Driver/Inputs/mips_toolchain_tree/mips-linux-gnu/libc/el/usr/lib/crt1.o
  test/Driver/Inputs/mips_toolchain_tree/mips-linux-gnu/libc/el/usr/lib/crti.o
  test/Driver/Inputs/mips_toolchain_tree/mips-linux-gnu/libc/el/usr/lib/crtn.o
  test/Driver/Inputs/mips_toolchain_tree/mips-linux-gnu/libc/el/usr/lib64/crt1.o
  test/Driver/Inputs/mips_toolchain_tree/mips-linux-gnu/libc/el/usr/lib64/crti.o
  test/Driver/Inputs/mips_toolchain_tree/mips-linux-gnu/libc/el/usr/lib64/crtn.o
  test/Driver/Inputs/mips_toolchain_tree/mips-linux-gnu/libc/lib/.keep
  test/Driver/Inputs/mips_toolchain_tree/mips-linux-gnu/libc/lib64/.keep
  test/Driver/Inputs/mips_toolchain_tree/mips-linux-gnu/libc/micromips/el/lib/.keep
  test/Driver/Inputs/mips_toolchain_tree/mips-linux-gnu/libc/micromips/el/usr/lib/crt1.o
  test/Driver/Inputs/mips_toolchain_tree/mips-linux-gnu/libc/micromips/el/usr/lib/crti.o
  test/Driver/Inputs/mips_toolchain_tree/mips-linux-gnu/libc/micromips/el/usr/lib/crtn.o
  test/Driver/Inputs/mips_toolchain_tree/mips-linux-gnu/libc/micromips/lib/.keep
  test/Driver/Inputs/mips_toolchain_tree/mips-linux-gnu/libc/micromips/soft-float/el/lib/.keep
  test/Driver/Inputs/mips_toolchain_tree/mips-linux-gnu/libc/micromips/soft-float/el/usr/lib/crt1.o
  test/Driver/Inputs/mips_toolchain_tree/mips-linux-gnu/libc/micromips/soft-float/el/usr/lib/crti.o
  test/Driver/Inputs/mips_toolchain_tree/mips-linux-gnu/libc/micromips/soft-float/el/usr/lib/crtn.o
  test/Driver/Inputs/mips_toolchain_tree/mips-linux-gnu/libc/micromips/soft-float/lib/.keep
  test/Driver/Inputs/mips_toolchain_tree/mips-linux-gnu/libc/micromips/soft-float/usr/lib/crt1.o
  test/Driver/Inputs/mips_toolchain_tree/mips-linux-gnu/libc/micromips/soft-float/usr/lib/crti.o
  test/Driver/Inputs/mips_toolchain_tree/mips-linux-gnu/libc/micromips/soft-float/usr/lib/crtn.o
  test/Driver/Inputs/mips_toolchain_tree/mips-linux-gnu/libc/micromips/usr/lib/crt1.o
  test/Driver/Inputs/mips_toolchain_tree/mips-linux-gnu/libc/micromips/usr/lib/crti.o
  test/Driver/Inputs/mips_toolchain_tree/mips-linux-gnu/libc/micromips/usr/lib/crtn.o
  test/Driver/Inputs/mips_toolchain_tree/mips-linux-gnu/libc/mips16/el/lib/.keep
  test/Driver/Inputs/mips_toolchain_tree/mips-linux-gnu/libc/mips16/el/usr/lib/crt1.o
  test/Driver/Inputs/mips_toolchain_tree/mips-linux-gnu/libc/mips16/el/usr/lib/crti.o
  test/Driver/Inputs/mips_toolchain_tree/mips-linux-gnu/libc/mips16/el/usr/lib/crtn.o
  test/Driver/Inputs/mips_toolchain_tree/mips-linux-gnu/libc/mips16/lib/.keep
  test/Driver/Inputs/mips_toolchain_tree/mips-linux-gnu/libc/mips16/soft-float/el/lib/.keep
  test/Driver/Inputs/mips_toolchain_tree/mips-linux-gnu/libc/mips16/soft-float/el/usr/lib/crt1.o
  test/Driver/Inputs/mips_toolchain_tree/mips-linux-gnu/libc/mips16/soft-float/el/usr/lib/crti.o
  test/Driver/Inputs/mips_toolchain_tree/mips-linux-gnu/libc/mips16/soft-float/el/usr/lib/crtn.o
  test/Driver/Inputs/mips_toolchain_tree/mips-linux-gnu/libc/mips16/soft-float/lib/.keep
  test/Driver/Inputs/mips_toolchain_tree/mips-linux-gnu/libc/mips16/soft-float/usr/lib/crt1.o
  test/Driver/Inputs/mips_toolchain_tree/mips-linux-gnu/libc/mips16/soft-float/usr/lib/crti.o
  test/Driver/Inputs/mips_toolchain_tree/mips-linux-gnu/libc/mips16/soft-float/usr/lib/crtn.o
  test/Driver/Inputs/mips_toolchain_tree/mips-linux-gnu/libc/mips16/usr/lib/crt1.o
  test/Driver/Inputs/mips_toolchain_tree/mips-linux-gnu/libc/mips16/usr/lib/crti.o
  test/Driver/Inputs/mips_toolchain_tree/mips-linux-gnu/libc/mips16/usr/lib/crtn.o
  test/Driver/Inputs/mips_toolchain_tree/mips-linux-gnu/libc/soft-float/el/lib/.keep
  test/Driver/Inputs/mips_toolchain_tree/mips-linux-gnu/libc/soft-float/el/lib64/.keep
  test/Driver/Inputs/mips_toolchain_tree/mips-linux-gnu/libc/soft-float/el/usr/lib/crt1.o
  test/Driver/Inputs/mips_toolchain_tree/mips-linux-gnu/libc/soft-float/el/usr/lib/crti.o
  test/Driver/Inputs/mips_toolchain_tree/mips-linux-gnu/libc/soft-float/el/usr/lib/crtn.o
  test/Driver/Inputs/mips_toolchain_tree/mips-linux-gnu/libc/soft-float/el/usr/lib64/crt1.o
  test/Driver/Inputs/mips_toolchain_tree/mips-linux-gnu/libc/soft-float/el/usr/lib64/crti.o
  test/Driver/Inputs/mips_toolchain_tree/mips-linux-gnu/libc/soft-float/el/usr/lib64/crtn.o
  test/Driver/Inputs/mips_toolchain_tree/mips-linux-gnu/libc/soft-float/lib/.keep
  test/Driver/Inputs/mips_toolchain_tree/mips-linux-gnu/libc/soft-float/lib64/.keep
  test/Driver/Inputs/mips_toolchain_tree/mips-linux-gnu/libc/soft-float/usr/lib/crt1.o
  test/Driver/Inputs/mips_toolchain_tree/mips-linux-gnu/libc/soft-float/usr/lib/crti.o
  test/Driver/Inputs/mips_toolchain_tree/mips-linux-gnu/libc/soft-float/usr/lib/crtn.o
  test/Driver/Inputs/mips_toolchain_tree/mips-linux-gnu/libc/soft-float/usr/lib64/crt1.o
  test/Driver/Inputs/mips_toolchain_tree/mips-linux-gnu/libc/soft-float/usr/lib64/crti.o
  test/Driver/Inputs/mips_toolchain_tree/mips-linux-gnu/libc/soft-float/usr/lib64/crtn.o
  test/Driver/Inputs/mips_toolchain_tree/mips-linux-gnu/libc/usr/include/.keep
  test/Driver/Inputs/mips_toolchain_tree/mips-linux-gnu/libc/usr/lib/crt1.o
  test/Driver/Inputs/mips_toolchain_tree/mips-linux-gnu/libc/usr/lib/crti.o
  test/Driver/Inputs/mips_toolchain_tree/mips-linux-gnu/libc/usr/lib/crtn.o
  test/Driver/Inputs/mips_toolchain_tree/mips-linux-gnu/libc/usr/lib64/crt1.o
  test/Driver/Inputs/mips_toolchain_tree/mips-linux-gnu/libc/usr/lib64/crti.o
  test/Driver/Inputs/mips_toolchain_tree/mips-linux-gnu/libc/usr/lib64/crtn.o
  test/Driver/mips-mg-cc.cpp
  test/Driver/mips-mg-ld.c
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D644.1.patch
Type: text/x-patch
Size: 36361 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20130409/a9f91e5d/attachment.bin>


More information about the cfe-commits mailing list