using just llvm/clang for building mips llvm

In case anyone is interested....

We don't need to compile llvm/clang using gcc anymore for the building of mips hosted llvm compilers.

We build a linux mips hosted compiler starting with llvm/clang on x86 linux using the normal configure scripts and
then can use that resulting compiler to build further llvm/clang native compilers on the mips linux host.

The cross compiler and native compiler driver for Mips works seamlessly (thanks to Simon Atanasyan) just as gcc does.

For our build slave that is connected to the llvm build bots, we are using our native clang/llvm (built as above) to built the llc
that is used for make check.

I'm doing some more work to automate the testing of the recursed compilers and other verification on the mips target.

Congrats!

And of course thanks to Akira Hatanaka for making the mips 32 code generator solid enough for all of this to work.

Hi Reed,

Very cool. I'd love to know if my pre-compiled Mips toolchain for ELLCC (http://ellcc.org), downloadable from ftp://ellcc.org/pub, can actually run on a Mips. Any idea where I could find a Mips box to try it on?

It was compiled using a clang based x86_64 compiler, by the way.
The ARM binaries work just fine, at least on Fedora ARM Linux running under QEMU.

-Rich

Hi Richard,

I could try it on one of ours. I'll take a look over the weekend. Anything special I need to do?

There are some fsf machines too that can be used for this purpose. I think that Rafael uses them sometimes.
You could ask him how to do that.

These edge pro routers are not too expensive and in principle you just need to nfs mount a file system and all should be cool.
They run debian.

http://www.ubnt.com/edgemax

Our 64 bit compiler seems also to be okay but i have not finished verifying everything.
I'm using a cavium board with support both 32 and 64 bit executables.

Reed

Hi Reed,

I'd be happy if you could try:

tar xvfpz ellcc-mips-linux-2014-Mar-24-07-32-26.tgz
ellcc/bin/ecc -target mips-ellcc-linux helloworld.c # Or some small test.
./a.out

Even better would be to follow that up with

svn co http://ellcc.org/svn/ellcc/trunk ellcc
cd ellcc
./build

That should compile itself with itself. I wouldn't expect you to invest the time to do that. :wink:

-Rich

Geting a seg fault. Have not investigted the cause.

rkotler@mipsswbrd002:~/richard$ tar vfxz ~/Downloads/ellcc-mips-linux-2014-Mar-24-07-32-26.tgz

rkotler@mipsswbrd002:~/richard/ellcc/bin$ gdb ./ecc
GNU gdb (GDB) 7.4.1-debian
Copyright (C) 2012 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law. Type "show copying"
and "show warranty" for details.
This GDB was configured as "mips-linux-gnu".
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>...
Reading symbols from /home/rkotler/richard/ellcc/bin/ecc...done.
(gdb) run
Starting program: /home/rkotler/richard/ellcc/bin/ecc

Program received signal SIGSEGV, Segmentation fault.
0x02ee15dc in __init_tls ()
(gdb) bt
#0 0x02ee15dc in __init_tls ()
#1 0x02ebde44 in __init_libc ()
#2 0x02ebdebc in __libc_start_main ()
#3 0x00416ac4 in _start ()
(gdb)

rkotler@mipsswbrd002:~/richard/ellcc/bin$ ls
FileCheck ecc-c++filt ecc-ld.bfd ecc-size ppc-elf-as
arm-elf-as ecc-elfedit ecc-nm ecc-strings ppc64-elf-as
ecc ecc-embedspu ecc-objcopy ecc-strip sparc-elf-as
ecc++ ecc-gdb ecc-objdump i386-elf-as x86_64-elf-as
ecc-addr2line ecc-gprof ecc-ranlib microblaze-elf-as
ecc-ar ecc-ld ecc-readelf mips-elf-as
rkotler@mipsswbrd002:~/richard/ellcc/bin$ ./ecc
Segmentation fault
rkotler@mipsswbrd002:~/richard/ellcc/bin$ ./ecc-ar
Segmentation fault
rkotler@mipsswbrd002:~/richard/ellcc/bin$

Ah. Ignore my other email.

This build is using musl as the standard C library. It looks as if initializing TLS is failing. I'll look into that.
What is the version of your Linux kernel?

Thanks for trying it out, though.

By the way, these binaries are all statically linked to libc++, libc++abi, musl, and compiler-rt.

-Rich

rkotler@mipsswbrd002:~/richard/ellcc/bin$ uname -a
Linux mipsswbrd002 2.6.32.13-Cavium-Octeon #1 SMP Thu Nov 8 18:12:33 PST 2012 mips64 GNU/Linux
rkotler@mipsswbrd002:~/richard/ellcc/bin$ cat /proc/version
Linux version 2.6.32.13-Cavium-Octeon (bkirby@mipssw006) (gcc version 4.3.3 (Cavium Networks Version: 2_0_0 build 95) ) #1 SMP Thu Nov 8 18:12:33 PST 2012
rkotler@mipsswbrd002:~/richard/ellcc/bin$