Newer
Older
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
Introduction
============
This Directory contains various examples for working with the LLVM tools.
All interesting files are from the LLVM project -
See http://llvm.org and in particular http://www.llvm.org/docs/
for more information.
This collection was prepared by Prof. R. C. Moore, fbi.h-da.de
in May 2017 for the Compiler Construction course. No warranty implied or expressed.
See LICENSE.TXT for the original license.
This version has been prepared for LLVM 4.0 (using Arch Linux in a vagrant box)
in May 2017.
This version can be fairly easily adpated to work with LLVM 3.9.
It does NOT work with earlier versions of LLVM.
All of the example files (fibonacci.cpp, ModuleMaker.cpp and toy*.cpp):
- are available in the LLVM source tree, for example by running the
following:
svn co https://llvm.org/svn/llvm-project/llvm/tags/RELEASE_400/final/
or by downloading the whole source tarball, where you will find a directory
named "examples", from:
http://llvm.org/releases/
or directly from
http://releases.llvm.org/10.0.0/llvm-10.0.0.src.tar.xz
- the directory structure has been simplified, some files have been renamed,
and a new Makefile is provided which is much simpler than the original cmake
system (but not guarenteed to work outside Linux). Test files have also
been added. See below.
Still, it should be emphasized that there is nothing really new here -- apart
from the packaging, everything here is from the LLVM project!
Manifest ("Table of Contents")
===============================
You should have received the following files:
* `fibonacci.cpp`
This is a compiler without a front-end, so to speak,
but with an interpreter built in - see ModuleMaker for
an even simpler example.
* `LICENSE.TXT`
The LLVM Release Open Source License
(taken verbatim from the University of Illinois/NCSA,
https://github.com/llvm/llvm-project/blob/master/llvm/LICENSE.TXT).
* `Makefile`
A Makefile, not supplied by LLVM but written instead
by R. Moore - to make this collection work without the
rest of the LLVM source tree. You will (of course)
need the LLVM tool set installed (clang, clang++ &
llvm-config and the llvm libs, at the very least).
* `ModuleMaker.cpp`
Another example provided in the LLVM source tree.
This file produces binary LLVM bit code for a program
which does nothing but return a status of 5. LLVM
bit code can be run using the LLVM "lli" tool.
Thus, you should be able to do the following:
```
make ModuleMaker
./ModuleMaker >status5.bc
lli status5.bc
echo $? # should print "5"
```
"Hello World" doesn't get much simpler than this!
(Running "make testModuleMaker" does this, by the way).
* `README.md`
This file.
* `KaleidoscopeJIT.h`
A header file used by some of the toy4.cpp - toy9.cpp.
This version works with LLVM 10.
* `tests`
A directory containing files in the Kaleidoscope
language, taken from the LLVM Tutorial, see
https://llvm.org/docs/tutorial/MyFirstLanguageFrontend/index.html
Some, but not all, of these are used by "make tests".
* `toy2.cpp` - `toy9.cpp`
The source code from the Tutorial, Chapters 2 through 9.
All of the above Chapters are available at
https://llvm.org/docs/tutorial/MyFirstLanguageFrontend/index.html
Building
=========
(1) Install clang and the llvm tool kit. You can either compile from source
(see http://www.llvm.org/docs/GettingStarted.html - or perhaps better,
http://clang.llvm.org/get_started.html) or install binaries that you find
elsewhere (you SHOULD get LLVM 10.0.0 - No guarantees are made for older
OR NEWER versions!).
(2) Run `make` (or perhaps `make clean` and then `make`).
(3) If you wish, run `make tests` to run (almost) all the programs delivered
in this colleciton. The output from `make tests` is very long.
Each program can also be tested individually, for example with
`make testFibonacci` or `make testModuleMaker` or `make test5`
(read the Makefile to see all alternatives).
**Note**: `make test9` is broken. We know.
That's why it's not included in `make tests`.
Please feel free to fix it.
Further Reading
===============
These files are only provided to illustrate how LLVM can be used. The code from
the tutorial should be read together with the tutorial.
More information is available:
* Overview of the LLVM Documentation:
http://llvm.org/releases/10.0.0/docs/index.html
* The LLVM ("Kaledeiscope") Tutorial:
https://llvm.org/docs/tutorial/MyFirstLanguageFrontend/index.html
* Guide for Programmers:
http://llvm.org/releases/10.0.0/docs/ProgrammersManual.html
* Guide to the LLVM IR (LLVM Intermediate Representation):
http://llvm.org/releases/10.0.0/docs/LangRef.html