[cfe-dev] [LLVMdev] how to change a compiler from a host to a target in Clang's assembler and linker

Simon Atanasyan satanasyan at mips.com
Fri Jul 6 11:40:58 PDT 2012


Hi,

On Wed, Jul 4, 2012 at 9:21 AM, ETANI NORIKO <noriko-e at fc.ritsumei.ac.jp> wrote:
> Please advise me how to change a compiler from a host one to a target one.

Suppose MIPS toolchain is installed in the $MIPS folder (i.e.
mips-linux-gnu-gcc is in the $MIPS/bin folder). Note, if you want to
generate little-endian code and/or 64-bit code, you have to create the
following links in the $MIPS/bin folder:
* Little-endian 32-bit
    ln -s mips-linux-gnu-ld mipsel-linux-gnu-ld
    ln -s mips-linux-gnu-as mipsel-linux-gnu-as
* Little-endian 64-bit
    ln -s mips-linux-gnu-ld mips64el-linux-gnu-ld
    ln -s mips-linux-gnu-as mips64el-linux-gnu-as
* Big-endian 64-bit
    ln -s mips-linux-gnu-ld mips64-linux-gnu-ld
    ln -s mips-linux-gnu-as mips64-linux-gnu-as

If you use integrated assembler (turned on by -integrated-as option)
you can skip mips-linux-gnu-as links creation.

Exact command line options depends on used toolchain. Examples below
work for Mentor Graphics Toolchain version 2011.09-75
(https://sourcery.mentor.com/GNUToolchain/subscription3130?lite=MIPS).

* Little-endian 32-bit
$ clang -target mipsel-linux-gnu main.c -static \
    --sysroot $MIPS/mips-linux-gnu/libc/el \
    -I$MIPS/mips-linux-gnu/libc/usr/include \
    -B$MIPS/lib/gcc/mips-linux-gnu/4.5.2/el \
    -L$MIPS/lib/gcc/mips-linux-gnu/4.5.2/el \
    -integrated-as

* Big-endian 32-bit
$ clang -target mips-linux-gnu main.c -static \
    --sysroot $MIPS/mips-linux-gnu/libc \
    -I$MIPS/mips-linux-gnu/libc/usr/include \
    -B$MIPS/lib/gcc/mips-linux-gnu/4.5.2 \
    -L$MIPS/lib/gcc/mips-linux-gnu/4.5.2 \
    -integrated-as

* Little-endian 64-bit
$ clang -target mips64el-linux-gnu main.c -static \
    --sysroot $MIPS/mips-linux-gnu/libc/el \
    -I$MIPS/mips-linux-gnu/libc/usr/include \
    -B$MIPS/lib/gcc/mips-linux-gnu/4.5.2/el/64 \
    -L$MIPS/lib/gcc/mips-linux-gnu/4.5.2/el/64

* Big-endian 64-bit
$ clang -target mips64-linux-gnu main.c -static \
    --sysroot $MIPS/mips-linux-gnu/libc \
    -I$MIPS/mips-linux-gnu/libc/usr/include \
    -B$MIPS/lib/gcc/mips-linux-gnu/4.5.2/64 \
    -L$MIPS/lib/gcc/mips-linux-gnu/4.5.2/64

If that does not work for you, could you please provide more information:
1. What command line options do you use?
2. What toolchain do you use and where is it installed?
3. What errors do you get?

--
Simon



More information about the cfe-dev mailing list