how to select a particular gcc-toolchain in clang?

12,794

An valid path for --gcc-toolchain is apparently "/usr" as clang seem to look for gcc in

$PREFIX/{include|lib}/gcc/$PLATFORM/$VERSION/*

so as a workaround you can trick clang to use a particular version by creating a filesystem with overlay-fs or symlinking a folder-structure containing only one folder

mkdir $MYTOOLCHAIN
cd $MYTOOLCHAIN
ln -s /usr/include include #for headerfiles
ln -s /usr/bin bin #for tools like ld
mkdir -p lib/gcc/x86_64-linux-gnu/ #clang will deduce what to select
cd lib/gcc/x86_64-linux-gnu/
#link the toolchain we want here
ln -s /usr/lib/gcc/x86_64-linux-gnu/$VERSION $VERSION 
#usage: clang++ --gcc-toolchain=$MYTOOLCHAIN main.cpp

however maybe there is a better way by instructing clang to pick the version via a flag...

Share:
12,794

Related videos on Youtube

Gaetano
Author by

Gaetano

Updated on September 14, 2022

Comments

  • Gaetano
    Gaetano over 1 year

    Clang automatically selects the gcc-version with the highest version:

    $ clang++ -v main.cpp
    clang version 3.8.1-12 
    (tags/RELEASE_381/final)
    Target: x86_64-pc-linux-gnu
    Thread model: posix
    InstalledDir: /usr/bin
    Found candidate GCC installation: /usr/bin/../lib/gcc/x86_64-linux-gnu/4.9
    Found candidate GCC installation: /usr/bin/../lib/gcc/x86_64-linux-gnu/4.9.4
    Found candidate GCC installation: /usr/bin/../lib/gcc/x86_64-linux-gnu/5.4.1
    Found candidate GCC installation: /usr/bin/../lib/gcc/x86_64-linux-gnu/6.2.0
    Found candidate GCC installation: /usr/bin/../lib/gcc/x86_64-linux-gnu/7.0.1
    Found candidate GCC installation: /usr/lib/gcc/x86_64-linux-gnu/4.9
    Found candidate GCC installation: /usr/lib/gcc/x86_64-linux-gnu/4.9.4
    Found candidate GCC installation: /usr/lib/gcc/x86_64-linux-gnu/5.4.1
    Found candidate GCC installation: /usr/lib/gcc/x86_64-linux-gnu/6.2.0
    Found candidate GCC installation: /usr/lib/gcc/x86_64-linux-gnu/7.0.1
    Selected GCC installation: /usr/bin/../lib/gcc/x86_64-linux-gnu/7.0.1
    

    how can i force clang to use a different gcc installation, say 5.4.1 ?

    i tried to call clang with --gcc-toolchain="/usr/lib/gcc/x86_64-linux-gnu/5.4.1" but without success.

    • bolov
      bolov about 7 years
      it look like you need to build clang from source with --gcc-toolchain
    • Gaetano
      Gaetano about 7 years
      @bolov building clang with --gcc-toolchain wont enable me to pick the version i want (after compilation) nor is particularly practicable
    • bolov
      bolov about 7 years
      agreed. I was just saying that the answer there indicate there is no way to specify it the way you want. And yeah, I am pretty disappointing if there really is no way of doing it (excluding workarounds).
  • proski
    proski about 6 years
    For clang 3.8 and older, make sure that $VERSION is the full version number. For instance, if /usr/lib/gcc/x86_64-linux-gnu/5.4.1 is a link to /usr/lib/gcc/x86_64-linux-gnu/5, use "5.4.1", not "5". clang-3.9+ can deal with short toolchain versions.