Expand documentation on the Monicelli standard library.
This commit is contained in:
parent
0531ec531a
commit
8d511f46f4
15
README.md
15
README.md
|
@ -54,23 +54,30 @@ Usage
|
||||||
=====
|
=====
|
||||||
|
|
||||||
###LLVM frontend
|
###LLVM frontend
|
||||||
Monicelli emits LLVM bytecode in its default configuration.
|
Monicelli emits LLVM bitcode in its default configuration.
|
||||||
A typical compilation workflow would be:
|
A typical compilation workflow would be:
|
||||||
|
|
||||||
$ ./mcc example.mc
|
$ ./mcc example.mc
|
||||||
$ llc example.bc
|
$ llc example.bc
|
||||||
$ cc example.s libmcrt.a -o example
|
$ cc example.s libmcrt.a -o example
|
||||||
|
|
||||||
In particular, note that the Monicelli runtime library must be linked to use
|
In particular, note that the Monicelli runtime library must be compiled in or linked to use
|
||||||
all of the I/O functions. Also note the use of the `llc` utility, which is
|
all of the I/O functions. Also note the use of the `llc` utility, which is
|
||||||
provided by LLVM, to produce native assembler from LLVM bitcode.
|
provided by LLVM, to produce native assembler from LLVM bitcode.
|
||||||
|
|
||||||
|
Please be aware that the Monicelli standard library depends on the C stdlib,
|
||||||
|
although this dependency is available on virtually any platform you might
|
||||||
|
dream of compiling Monicelli on.
|
||||||
|
|
||||||
As such, `llvm` utilities are needed for compiling. Only the "low level"
|
As such, `llvm` utilities are needed for compiling. Only the "low level"
|
||||||
utilities (`opt` and `llc`) are needed, not the whole Clang/Clang++ suite.
|
utilities (`opt` and `llc`) are needed, not the whole Clang/Clang++ suite.
|
||||||
Usually, the relevant package goes under the name `llvm`.
|
Usually, the relevant package goes under the name `llvm`.
|
||||||
|
|
||||||
|
A C compiler is used to simplify the assembling and linking step, but it could
|
||||||
|
be skipped altogether with a small effort. If you want to try ;)
|
||||||
|
|
||||||
`mcc` does not optimize the emitted bytecode to ensure readibility when
|
`mcc` does not optimize the emitted bytecode to ensure readibility when
|
||||||
disassembling with `llvm-as`. However, you might want to optimize the code
|
disassembling with `llvm-dis`. However, you might want to optimize the code
|
||||||
using `opt` LLVM utility:
|
using `opt` LLVM utility:
|
||||||
|
|
||||||
$ opt example.bc | llc -o example.s
|
$ opt example.bc | llc -o example.s
|
||||||
|
@ -78,7 +85,7 @@ using `opt` LLVM utility:
|
||||||
in place of the simple `llc` compilation step.
|
in place of the simple `llc` compilation step.
|
||||||
|
|
||||||
###C++ transpiler
|
###C++ transpiler
|
||||||
`mcc` can be compiled as a source to source compiler, which reads Monicelli
|
`mcc` can be configured as a source to source compiler, which reads Monicelli
|
||||||
and outputs a subset of C++.
|
and outputs a subset of C++.
|
||||||
|
|
||||||
A good way to learn on the field is comparing the resulting C++ with the
|
A good way to learn on the field is comparing the resulting C++ with the
|
||||||
|
|
Reference in New Issue
Block a user