From: Borja F. <bor...@gm...> - 2012-08-28 22:24:09
|
Hello, With the latest changes, the backend is reaching the point where it can compile nearly any sort of code. One thing that is missing is support for inline asm which is heavily used in avr-libc, but apart from that it should be able to compile the rest. With a few tweaks i've been able to compile a 2200 line C file that stresses floating point calculations that produces around 22k instructions (C file -> S file) Now I'm getting more interested on getting a very basic toolchain working, Eric we'll need your help here. I've been able to build from a C file to a hex file a very basic main() function. avr-gcc is needed to produce the elf files and to drive the linker, so we'll have to stick with it for a while. The setup I have is messy because avr-gcc is in one folder with avr-libc and clang and llvm in another, so in order to get the toolchain with a decent setup both things should be in the same folder. Also included files default to the system's not the avr specific ones. Maybe others have tried it before, so i want to know how you did it or how hard it was, but in my case my first try was yesterday. Also I'm going to change how register-pairs are represented because avr-as can't understand what r29:r28 is. The llvm asm writer needs a bit of tweaking because avr-as can't understand some asm directives it produces. This is the cmd line i'm using to generate an object file: clang -O3 test.c -o test.o -ccc-host-triple avr-generic-generic -ccc-gcc-name avr-gcc -mmcu=avr5 notice that avr-gcc is passed so that clang can drive it once the .S file is generated. So try compiling a trivial main function to get the hex file generated, you'll need avr-copy (provided by binutils) to convert the elf file to hex, but that is easily handled by makefiles. Also people using windows try doing it aswell since I dont have a setup for it and I'm looking forward for it. Once we get the basic toolchain working, adding support for avr-libc and linking programs with its libraries should be much easier. I look forward for any help here! |
From: Borja F. <bor...@gm...> - 2012-09-05 10:24:30
|
ping Eric. 2012/8/29 Borja Ferrer <bor...@gm...> > Hello, > > With the latest changes, the backend is reaching the point where it can > compile nearly any sort of code. One thing that is missing is support for > inline asm which is heavily used in avr-libc, but apart from that it should > be able to compile the rest. With a few tweaks i've been able to compile a > 2200 line C file that stresses floating point calculations that produces > around 22k instructions (C file -> S file) > > Now I'm getting more interested on getting a very basic toolchain working, > Eric we'll need your help here. I've been able to build from a C file to a > hex file a very basic main() function. avr-gcc is needed to produce the elf > files and to drive the linker, so we'll have to stick with it for a while. > The setup I have is messy because avr-gcc is in one folder with avr-libc > and clang and llvm in another, so in order to get the toolchain with a > decent setup both things should be in the same folder. Also included files > default to the system's not the avr specific ones. Maybe others have tried > it before, so i want to know how you did it or how hard it was, but in my > case my first try was yesterday. > > Also I'm going to change how register-pairs are represented because avr-as > can't understand what r29:r28 is. The llvm asm writer needs a bit of > tweaking because avr-as can't understand some asm directives it produces. > > This is the cmd line i'm using to generate an object file: clang -O3 > test.c -o test.o -ccc-host-triple avr-generic-generic -ccc-gcc-name avr-gcc > -mmcu=avr5 > notice that avr-gcc is passed so that clang can drive it once the .S file > is generated. > > So try compiling a trivial main function to get the hex file generated, > you'll need avr-copy (provided by binutils) to convert the elf file to hex, > but that is easily handled by makefiles. Also people using windows try > doing it aswell since I dont have a setup for it and I'm looking forward > for it. > > Once we get the basic toolchain working, adding support for avr-libc and > linking programs with its libraries should be much easier. I look forward > for any help here! > |
From: Weddington, E. <Eri...@at...> - 2012-09-07 14:37:46
|
Hi Borja! Sorry to respond late to this email... This is really exciting! You said you need help in getting a basic toolchain working. Help me understand in detail, what you have, and where you want to be. We need avr-gcc to run the assembler and linker. From avr-llvm, we have a compiler that will compile C to assembler. I would think that we would need to modify the avr-gcc specs to call the correct (new) executable for the compilation step. If you can give me a few more details on your setup, then let's see where we can go with it. :-) Eric > -----Original Message----- > From: Borja Ferrer [mailto:bor...@gm...] > Sent: Tuesday, August 28, 2012 4:24 PM > To: avr...@li... > Subject: [avr-llvm-devel] Toolchain support needed! > > Hello, > > With the latest changes, the backend is reaching the point where it can > compile nearly any sort of code. One thing that is missing is support for > inline asm which is heavily used in avr-libc, but apart from that it should be > able to compile the rest. With a few tweaks i've been able to compile a 2200 > line C file that stresses floating point calculations that produces around 22k > instructions (C file -> S file) > > Now I'm getting more interested on getting a very basic toolchain working, > Eric we'll need your help here. I've been able to build from a C file to a hex > file a very basic main() function. avr-gcc is needed to produce the elf files > and to drive the linker, so we'll have to stick with it for a while. The setup > I have is messy because avr-gcc is in one folder with avr-libc and clang and > llvm in another, so in order to get the toolchain with a decent setup both > things should be in the same folder. Also included files default to the > system's not the avr specific ones. Maybe others have tried it before, so i > want to know how you did it or how hard it was, but in my case my first try > was yesterday. > > Also I'm going to change how register-pairs are represented because avr-as > can't understand what r29:r28 is. The llvm asm writer needs a bit of tweaking > because avr-as can't understand some asm directives it produces. > > This is the cmd line i'm using to generate an object file: clang -O3 test.c -o > test.o -ccc-host-triple avr-generic-generic -ccc-gcc-name avr-gcc -mmcu=avr5 > notice that avr-gcc is passed so that clang can drive it once the .S file is > generated. > > So try compiling a trivial main function to get the hex file generated, you'll > need avr-copy (provided by binutils) to convert the elf file to hex, but that > is easily handled by makefiles. Also people using windows try doing it aswell > since I dont have a setup for it and I'm looking forward for it. > > Once we get the basic toolchain working, adding support for avr-libc and > linking programs with its libraries should be much easier. I look forward for > any help here! |
From: Borja F. <bor...@gm...> - 2012-09-09 21:53:21
|
Hi Eric, welcome back! Basically the situation is what I wrote in my previous email. We need to get a very basic toolchain working so we can complete the path from the .c to a .hex file. The backend should be able to compile any C code by now, except for new bugs and inline asm. If we're able to compile larger projects with the toolchain then we'll be able to detect more bugs and get a more reliable backend faster. Currently, clang+llc (llc is the program that does the LLVM IR to AVR asm conversion) is able to compile C code to .S text asm files. The missing steps have to be done by avr-gcc, this is: generating the object files, linking them and generating hex files. My current setup is (under linux): an avr-gcc+avr-libc installation as described in the avr-libc manual, and a llvm installation, both in separate folders. If you run this cmd line: clang -O3 test.c -o test.o -ccc-host-triple avr-generic-generic -ccc-gcc-name avr-gcc -mmcu=avr5 clang drives llc to generate the .S file, then with the -ccc-gcc-name avr-gcc param it calls avr-gcc passing that new generated .S file so it can be converted to an object file with the help of the mmcu param indicating for what mcu we're compiling. avr-gcc has some logic inside where to drive the assembler and linker depending on the mmcu param it will call the linker with different options, for example the crt files involved. This is why for now we need avr-gcc, it's used as a driver for the linker and the assembler. Of course in the future we should be able to generate .o ELF files and an integrated assembler with llvm, but that will come later when we have a more mature backend. One important thing is that clang has to use avr-libc's include files not the system's defaults, now when I include stdio.h it's using the linux header file, not the avr specific one. So obviously this has to be fixed, but we need to know first where these files are going to be placed in our toolchain, i guess as a quick hack using the -I param could do it, but in avr-gcc nobody uses it, so we shouldn't add more complexity to the cmd line. If you need any other details, explanation or something I missed out let me know. 2012/9/7 Weddington, Eric <Eri...@at...> > Hi Borja! > > Sorry to respond late to this email... > > This is really exciting! > > You said you need help in getting a basic toolchain working. Help me > understand in detail, what you have, and where you want to be. > > We need avr-gcc to run the assembler and linker. From avr-llvm, we have a > compiler that will compile C to assembler. I would think that we would need > to modify the avr-gcc specs to call the correct (new) executable for the > compilation step. > > If you can give me a few more details on your setup, then let's see where > we can go with it. :-) > > Eric > > > -----Original Message----- > > From: Borja Ferrer [mailto:bor...@gm...] > > Sent: Tuesday, August 28, 2012 4:24 PM > > To: avr...@li... > > Subject: [avr-llvm-devel] Toolchain support needed! > > > > Hello, > > > > With the latest changes, the backend is reaching the point where it can > > compile nearly any sort of code. One thing that is missing is support for > > inline asm which is heavily used in avr-libc, but apart from that it > should be > > able to compile the rest. With a few tweaks i've been able to compile a > 2200 > > line C file that stresses floating point calculations that produces > around 22k > > instructions (C file -> S file) > > > > Now I'm getting more interested on getting a very basic toolchain > working, > > Eric we'll need your help here. I've been able to build from a C file to > a hex > > file a very basic main() function. avr-gcc is needed to produce the elf > files > > and to drive the linker, so we'll have to stick with it for a while. The > setup > > I have is messy because avr-gcc is in one folder with avr-libc and clang > and > > llvm in another, so in order to get the toolchain with a decent setup > both > > things should be in the same folder. Also included files default to the > > system's not the avr specific ones. Maybe others have tried it before, > so i > > want to know how you did it or how hard it was, but in my case my first > try > > was yesterday. > > > > Also I'm going to change how register-pairs are represented because > avr-as > > can't understand what r29:r28 is. The llvm asm writer needs a bit of > tweaking > > because avr-as can't understand some asm directives it produces. > > > > This is the cmd line i'm using to generate an object file: clang -O3 > test.c -o > > test.o -ccc-host-triple avr-generic-generic -ccc-gcc-name avr-gcc > -mmcu=avr5 > > notice that avr-gcc is passed so that clang can drive it once the .S > file is > > generated. > > > > So try compiling a trivial main function to get the hex file generated, > you'll > > need avr-copy (provided by binutils) to convert the elf file to hex, but > that > > is easily handled by makefiles. Also people using windows try doing it > aswell > > since I dont have a setup for it and I'm looking forward for it. > > > > Once we get the basic toolchain working, adding support for avr-libc and > > linking programs with its libraries should be much easier. I look > forward for > > any help here! > > |
From: Borja F. <bor...@gm...> - 2012-09-22 16:04:52
|
ping 2012/9/9 Borja Ferrer <bor...@gm...> > Hi Eric, welcome back! > > Basically the situation is what I wrote in my previous email. We need to > get a very basic toolchain working so we can complete the path from the .c > to a .hex file. The backend should be able to compile any C code by now, > except for new bugs and inline asm. If we're able to compile larger > projects with the toolchain then we'll be able to detect more bugs and get > a more reliable backend faster. > > Currently, clang+llc (llc is the program that does the LLVM IR to AVR asm > conversion) is able to compile C code to .S text asm files. The missing > steps have to be done by avr-gcc, this is: generating the object files, > linking them and generating hex files. > My current setup is (under linux): an avr-gcc+avr-libc installation as > described in the avr-libc manual, and a llvm installation, both in separate > folders. > > If you run this cmd line: clang -O3 test.c -o test.o -ccc-host-triple > avr-generic-generic -ccc-gcc-name avr-gcc -mmcu=avr5 > clang drives llc to generate the .S file, then with the -ccc-gcc-name > avr-gcc param it calls avr-gcc passing that new generated .S file so it can > be converted to an object file with the help of the mmcu param indicating > for what mcu we're compiling. > avr-gcc has some logic inside where to drive the assembler and linker > depending on the mmcu param it will call the linker with different options, > for example the crt files involved. This is why for now we need avr-gcc, > it's used as a driver for the linker and the assembler. Of course in the > future we should be able to generate .o ELF files and an integrated > assembler with llvm, but that will come later when we have a more mature > backend. > > One important thing is that clang has to use avr-libc's include files not > the system's defaults, now when I include stdio.h it's using the linux > header file, not the avr specific one. So obviously this has to be fixed, > but we need to know first where these files are going to be placed in our > toolchain, i guess as a quick hack using the -I param could do it, but in > avr-gcc nobody uses it, so we shouldn't add more complexity to the cmd line. > > If you need any other details, explanation or something I missed out let > me know. > > 2012/9/7 Weddington, Eric <Eri...@at...> > > Hi Borja! >> >> Sorry to respond late to this email... >> >> This is really exciting! >> >> You said you need help in getting a basic toolchain working. Help me >> understand in detail, what you have, and where you want to be. >> >> We need avr-gcc to run the assembler and linker. From avr-llvm, we have a >> compiler that will compile C to assembler. I would think that we would need >> to modify the avr-gcc specs to call the correct (new) executable for the >> compilation step. >> >> If you can give me a few more details on your setup, then let's see where >> we can go with it. :-) >> >> Eric >> >> > -----Original Message----- >> > From: Borja Ferrer [mailto:bor...@gm...] >> > Sent: Tuesday, August 28, 2012 4:24 PM >> > To: avr...@li... >> > Subject: [avr-llvm-devel] Toolchain support needed! >> > >> > Hello, >> > >> > With the latest changes, the backend is reaching the point where it can >> > compile nearly any sort of code. One thing that is missing is support >> for >> > inline asm which is heavily used in avr-libc, but apart from that it >> should be >> > able to compile the rest. With a few tweaks i've been able to compile a >> 2200 >> > line C file that stresses floating point calculations that produces >> around 22k >> > instructions (C file -> S file) >> > >> > Now I'm getting more interested on getting a very basic toolchain >> working, >> > Eric we'll need your help here. I've been able to build from a C file >> to a hex >> > file a very basic main() function. avr-gcc is needed to produce the elf >> files >> > and to drive the linker, so we'll have to stick with it for a while. >> The setup >> > I have is messy because avr-gcc is in one folder with avr-libc and >> clang and >> > llvm in another, so in order to get the toolchain with a decent setup >> both >> > things should be in the same folder. Also included files default to the >> > system's not the avr specific ones. Maybe others have tried it before, >> so i >> > want to know how you did it or how hard it was, but in my case my first >> try >> > was yesterday. >> > >> > Also I'm going to change how register-pairs are represented because >> avr-as >> > can't understand what r29:r28 is. The llvm asm writer needs a bit of >> tweaking >> > because avr-as can't understand some asm directives it produces. >> > >> > This is the cmd line i'm using to generate an object file: clang -O3 >> test.c -o >> > test.o -ccc-host-triple avr-generic-generic -ccc-gcc-name avr-gcc >> -mmcu=avr5 >> > notice that avr-gcc is passed so that clang can drive it once the .S >> file is >> > generated. >> > >> > So try compiling a trivial main function to get the hex file generated, >> you'll >> > need avr-copy (provided by binutils) to convert the elf file to hex, >> but that >> > is easily handled by makefiles. Also people using windows try doing it >> aswell >> > since I dont have a setup for it and I'm looking forward for it. >> > >> > Once we get the basic toolchain working, adding support for avr-libc and >> > linking programs with its libraries should be much easier. I look >> forward for >> > any help here! >> >> > |
From: Weddington, E. <Eri...@at...> - 2012-09-24 22:08:24
|
Hi Borja, I'm looking into it as we speak... However, I will also be traveling to the Maker Faire New York this week. I think I'll have some extra "off-time" for this effort... Eric > -----Original Message----- > From: Borja Ferrer [mailto:bor...@gm...] > Sent: Saturday, September 22, 2012 10:05 AM > To: Weddington, Eric > Cc: avr...@li... > Subject: Re: [avr-llvm-devel] Toolchain support needed! > > ping > > > 2012/9/9 Borja Ferrer <bor...@gm...> > > > Hi Eric, welcome back! > > Basically the situation is what I wrote in my previous email. We need > to get a very basic toolchain working so we can complete the path from the > .c to a .hex file. The backend should be able to compile any C code by now, > except for new bugs and inline asm. If we're able to compile larger > projects with the toolchain then we'll be able to detect more bugs and get > a more reliable backend faster. > > Currently, clang+llc (llc is the program that does the LLVM IR to AVR > asm conversion) is able to compile C code to .S text asm files. The missing > steps have to be done by avr-gcc, this is: generating the object files, > linking them and generating hex files. > My current setup is (under linux): an avr-gcc+avr-libc installation > as described in the avr-libc manual, and a llvm installation, both in > separate folders. > > If you run this cmd line: clang -O3 test.c -o test.o -ccc-host-triple > avr-generic-generic -ccc-gcc-name avr-gcc -mmcu=avr5 > clang drives llc to generate the .S file, then with the -ccc-gcc-name > avr-gcc param it calls avr-gcc passing that new generated .S file so it can > be converted to an object file with the help of the mmcu param indicating > for what mcu we're compiling. > avr-gcc has some logic inside where to drive the assembler and linker > depending on the mmcu param it will call the linker with different options, > for example the crt files involved. This is why for now we need avr-gcc, > it's used as a driver for the linker and the assembler. Of course in the > future we should be able to generate .o ELF files and an integrated > assembler with llvm, but that will come later when we have a more mature > backend. > > One important thing is that clang has to use avr-libc's include files > not the system's defaults, now when I include stdio.h it's using the linux > header file, not the avr specific one. So obviously this has to be fixed, > but we need to know first where these files are going to be placed in our > toolchain, i guess as a quick hack using the -I param could do it, but in > avr-gcc nobody uses it, so we shouldn't add more complexity to the cmd > line. > > If you need any other details, explanation or something I missed out > let me know. > > > 2012/9/7 Weddington, Eric <Eri...@at...> > > > Hi Borja! > > Sorry to respond late to this email... > > This is really exciting! > > You said you need help in getting a basic toolchain working. > Help me understand in detail, what you have, and where you want to be. > > We need avr-gcc to run the assembler and linker. From avr-llvm, > we have a compiler that will compile C to assembler. I would think that we > would need to modify the avr-gcc specs to call the correct (new) executable > for the compilation step. > > If you can give me a few more details on your setup, then let's > see where we can go with it. :-) > > Eric > > > > -----Original Message----- > > From: Borja Ferrer [mailto:bor...@gm...] > > Sent: Tuesday, August 28, 2012 4:24 PM > > To: avr...@li... > > Subject: [avr-llvm-devel] Toolchain support needed! > > > > Hello, > > > > With the latest changes, the backend is reaching the point > where it can > > compile nearly any sort of code. One thing that is missing is > support for > > inline asm which is heavily used in avr-libc, but apart from > that it should be > > able to compile the rest. With a few tweaks i've been able to > compile a 2200 > > line C file that stresses floating point calculations that > produces around 22k > > instructions (C file -> S file) > > > > Now I'm getting more interested on getting a very basic > toolchain working, > > Eric we'll need your help here. I've been able to build from > a C file to a hex > > file a very basic main() function. avr-gcc is needed to > produce the elf files > > and to drive the linker, so we'll have to stick with it for a > while. The setup > > I have is messy because avr-gcc is in one folder with avr- > libc and clang and > > llvm in another, so in order to get the toolchain with a > decent setup both > > things should be in the same folder. Also included files > default to the > > system's not the avr specific ones. Maybe others have tried > it before, so i > > want to know how you did it or how hard it was, but in my > case my first try > > was yesterday. > > > > Also I'm going to change how register-pairs are represented > because avr-as > > can't understand what r29:r28 is. The llvm asm writer needs a > bit of tweaking > > because avr-as can't understand some asm directives it > produces. > > > > This is the cmd line i'm using to generate an object file: > clang -O3 test.c -o > > test.o -ccc-host-triple avr-generic-generic -ccc-gcc-name > avr-gcc -mmcu=avr5 > > notice that avr-gcc is passed so that clang can drive it once > the .S file is > > generated. > > > > So try compiling a trivial main function to get the hex file > generated, you'll > > need avr-copy (provided by binutils) to convert the elf file > to hex, but that > > is easily handled by makefiles. Also people using windows try > doing it aswell > > since I dont have a setup for it and I'm looking forward for > it. > > > > Once we get the basic toolchain working, adding support for > avr-libc and > > linking programs with its libraries should be much easier. I > look forward for > > any help here! > > > > |
From: John M. <ato...@gm...> - 2012-12-13 06:14:24
|
HI Borja, Have you gone any farther with trying to setup a toolchain? It looks like clang can just be installed using the same PREFIX that avr-gcc was installed with in order to keep them in the same folder. The include path is hard coded in clang (except for Windows and Linux targets). So a quick and dirty way would be to make a patch to change it. Clang has Driver & Toolchain classes which I think needs to be modified to support an AVR target. On Tue, Aug 28, 2012 at 3:24 PM, Borja Ferrer <bor...@gm...> wrote: > Hello, > > With the latest changes, the backend is reaching the point where it can > compile nearly any sort of code. One thing that is missing is support for > inline asm which is heavily used in avr-libc, but apart from that it should > be able to compile the rest. With a few tweaks i've been able to compile a > 2200 line C file that stresses floating point calculations that produces > around 22k instructions (C file -> S file) > > Now I'm getting more interested on getting a very basic toolchain working, > Eric we'll need your help here. I've been able to build from a C file to a > hex file a very basic main() function. avr-gcc is needed to produce the elf > files and to drive the linker, so we'll have to stick with it for a while. > The setup I have is messy because avr-gcc is in one folder with avr-libc > and clang and llvm in another, so in order to get the toolchain with a > decent setup both things should be in the same folder. Also included files > default to the system's not the avr specific ones. Maybe others have tried > it before, so i want to know how you did it or how hard it was, but in my > case my first try was yesterday. > > Also I'm going to change how register-pairs are represented because avr-as > can't understand what r29:r28 is. The llvm asm writer needs a bit of > tweaking because avr-as can't understand some asm directives it produces. > > This is the cmd line i'm using to generate an object file: clang -O3 > test.c -o test.o -ccc-host-triple avr-generic-generic -ccc-gcc-name avr-gcc > -mmcu=avr5 > notice that avr-gcc is passed so that clang can drive it once the .S file > is generated. > > So try compiling a trivial main function to get the hex file generated, > you'll need avr-copy (provided by binutils) to convert the elf file to hex, > but that is easily handled by makefiles. Also people using windows try > doing it aswell since I dont have a setup for it and I'm looking forward > for it. > > Once we get the basic toolchain working, adding support for avr-libc and > linking programs with its libraries should be much easier. I look forward > for any help here! > > > ------------------------------------------------------------------------------ > Live Security Virtual Conference > Exclusive live event will cover all the ways today's security and > threat landscape has changed and how IT managers can respond. Discussions > will include endpoint security, mobile security and the latest in malware > threats. http://www.accelacomm.com/jaw/sfrnl04242012/114/50122263/ > _______________________________________________ > avr-llvm-devel mailing list > avr...@li... > https://lists.sourceforge.net/lists/listinfo/avr-llvm-devel > > |
From: John M. <ato...@gm...> - 2012-12-13 07:03:19
|
Also, I've tried (a while ago) to set the include path and tell clang where avr-gcc is using the *./configure* options but it didn't seem to do anything for me. |
From: Borja F. <bor...@gm...> - 2012-12-13 13:05:26
|
Hello John, I haven't tried anything further on this topic. Indeed, those 2 classes in clang you mentioned should be implemented to support our target, the other method is way to hacky. Do you have the time to take a look at this? 2012/12/13 John Myers <ato...@gm...> > Also, I've tried (a while ago) to set the include path and tell clang > where avr-gcc is using the *./configure* options but it didn't seem to do > anything for me. > |
From: John M. <ato...@gm...> - 2012-12-13 21:19:20
|
I'll have some time during my Christmas vacation to work on it. On Thu, Dec 13, 2012 at 5:05 AM, Borja Ferrer <bor...@gm...> wrote: > Hello John, > > I haven't tried anything further on this topic. Indeed, those 2 classes in > clang you mentioned should be implemented to support our target, the other > method is way to hacky. Do you have the time to take a look at this? > > > 2012/12/13 John Myers <ato...@gm...> > >> Also, I've tried (a while ago) to set the include path and tell clang >> where avr-gcc is using the *./configure* options but it didn't seem to >> do anything for me. >> > > |