[LLVMdev] llvmc for PIC16

Sanjiv Gupta
Mon, 15 Jun 2009 06:30:14 -0000

Mikhail Glushenkov wrote:
>
> Hi Sanjiv,
>
> Sanjiv Gupta <sanjiv.gupta <at> microchip.com> writes:
>
> > The salient features that we want to have in the driver are:
> > [...]
>
> As promised, I've implemented a basic compiler driver for the
> PIC16 toolchain. It's under tools/llvmc/examples/mcc16.
>
Hi Mikhail,
How do you build mcc16 executable?
There are so many confusing things there: driver, plugins, example,
Skelton etc.
The LLVMC-Tutorial doesn't clearly talk about them. Your help is
appreciated.

Thanks,
Sanjiv
>
> Some examples illustrating the features you requested:
>
> > 2. If the user has specified to generate the final executable, then
> > llvm-ld should run on all the .bc files generated by clang and create
a
> > single optimized .bc file for further tools.
>
> $ mcc16 -dry-run foo.c bar.c
> clang-cc foo.c -o /tmp/llvm_6ibgr9/foo.bc
> clang-cc bar.c -o /tmp/llvm_6ibgr9/bar.bc
> llvm-ld /tmp/llvm_6ibgr9/foo.bc /tmp/llvm_6ibgr9/bar.bc \
>     -o /tmp/llvm_6ibgr9/tmp.bc
> llc -f /tmp/llvm_6ibgr9/tmp.bc -o /tmp/llvm_6ibgr9/tmp.s
> native-as /tmp/llvm_6ibgr9/tmp.s -o /tmp/llvm_6ibgr9/tmp.o
> native-ld /tmp/llvm_6ibgr9/tmp.o -o a.out
>
> > 3. -Wo <options> - pass optimizations to the llvm-ld
> > 4. mcc16 -Wl <options> - pass options to native linker.
> > 5. mcc16 -Wa <options> - pass options to native assembler.
>
> $ mcc16 -dry-run -Wo,-opt1 -Wllc,-opt2 -Wa,-opt3 -Wl,-opt4 foo.c
> clang-cc foo.c -o /tmp/llvm_92HLCj/foo.bc
> llvm-ld -opt1 /tmp/llvm_92HLCj/foo.bc -o /tmp/llvm_92HLCj/tmp.bc
> llc -opt2 -f /tmp/llvm_92HLCj/tmp.bc -o /tmp/llvm_92HLCj/tmp.s
> native-as -opt3 /tmp/llvm_92HLCj/tmp.s -o /tmp/llvm_92HLCj/tmp.o
> native-ld -opt4 /tmp/llvm_92HLCj/tmp.o -o a.out
>
> > $ mcc16 -S foo.c
>
> $ mcc16 -dry-run -S foo.c
> clang-cc foo.c -o /tmp/llvm_0uiDCR/foo.bc
> llvm-ld /tmp/llvm_0uiDCR/foo.bc -o /tmp/llvm_0uiDCR/foo.bc
> llc -f /tmp/llvm_0uiDCR/foo.bc -o foo.s
>
> > $ mcc16 -S foo.c bar.c
>
> $ mcc16 -dry-run -S foo.c bar.c
> clang-cc foo.c -o /tmp/llvm_1zAqik/foo.bc
> llvm-ld /tmp/llvm_1zAqik/foo.bc -o /tmp/llvm_1zAqik/foo.bc
> llc -f /tmp/llvm_1zAqik/foo.bc -o foo.s
> clang-cc bar.c -o /tmp/llvm_1zAqik/bar.bc
> llvm-ld /tmp/llvm_1zAqik/bar.bc -o /tmp/llvm_1zAqik/bar.bc
> llc -f /tmp/llvm_1zAqik/bar.bc -o bar.s
>
> > ** Use of -g causes llvm-ld to run with -disable-opt
> > $ mcc16 -S -g foo.c
>
> $ mcc16 -dry-run -S -g foo.c
> clang-cc foo.c -o /tmp/llvm_oQFmVn/foo.bc
> llvm-ld -disable-opt /tmp/llvm_oQFmVn/foo.bc -o /tmp/llvm_oQFmVn/foo.bc
> llc -f /tmp/llvm_oQFmVn/foo.bc -o foo.s
>
> > ** -I is passed to clang-cc, -pre-RA-sched=list-burr to llc.
> > $ mcc16 -S -g -I ../include -pre-RA-sched=list-burr foo.c
>
> $ mcc16 -dry-run -S -g -I ../include -pre-RA-sched=list-burr foo.c
> clang-cc -I ../include foo.c -o /tmp/llvm_5VxNFQ/foo.bc
> llvm-ld -disable-opt /tmp/llvm_5VxNFQ/foo.bc -o /tmp/llvm_5VxNFQ/foo.bc
> llc -pre-RA-sched list-burr -f /tmp/llvm_5VxNFQ/foo.bc -o foo.s
>
> This should be enough to get you started.
>
> I'm always happy to answer any further questions you may have. If
> you want to e-mail me privately, please use the.dead.shall.rise
> <at_sign> gmail dot com for now (our provider problems weren't
> resolved yet).
>
> _______________________________________________
> LLVM Developers mailing list
> LLVMdev at cs.uiuc.edu         http://llvm.cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev
>