README.md
author Jan Vrany <jan.vrany@fit.cvut.cz>
Wed, 29 Aug 2018 21:32:19 +0100
changeset 50 7f439240d923
parent 23 d2d9a2d4d6bf
permissions -rw-r--r--
UDIS86: fixed crash caused by keeping `ud_t` structure on smalltalk heap ...and this the structure may move. Thisx resulted on hard-to-debug heap corruptions because `ud_t.asm_buf` is initializad to a pointer to `ud_t.asm_buf_int`. Therefore when the bytearray moved, the pointer become invalid and subsequent call to `ud_disassemble()` smashed whatever object happened to be where the bytearray were. The fix is straigtforward, use `ExternalBytes`! Sigh.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
23
d2d9a2d4d6bf Added README, licenses and copyright notices.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     1
# DragonFly Experimental Compiler 
d2d9a2d4d6bf Added README, licenses and copyright notices.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     2
d2d9a2d4d6bf Added README, licenses and copyright notices.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     3
**DragonFly** is an experiment aiming to build a compiler for [Smalltalk/X][1]
d2d9a2d4d6bf Added README, licenses and copyright notices.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     4
in Smalltalk on top of [LLVM][2] toolchain (hence the "Dragon" :-)
d2d9a2d4d6bf Added README, licenses and copyright notices.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     5
d2d9a2d4d6bf Added README, licenses and copyright notices.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     6
DragonFly consists of:
d2d9a2d4d6bf Added README, licenses and copyright notices.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     7
d2d9a2d4d6bf Added README, licenses and copyright notices.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     8
* **jv:dragonfly** - contains Smalltalk interface to the Smalltalk/X VM providing an API to allocate and access garbage-collected machine code and data sections.
d2d9a2d4d6bf Added README, licenses and copyright notices.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     9
* **jv:dragonfly/asm** contains a port of Igor Stasenko's AsmJIT i386 and x86_64 assembler (thought x86_64 support is broken)
d2d9a2d4d6bf Added README, licenses and copyright notices.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    10
* **jv:dragonfly/udis86sx** contains Smalltalk binding to [UDIS86][3] i386 and x86_64 disassembler.
d2d9a2d4d6bf Added README, licenses and copyright notices.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    11
* **jv:dragonfly/c1** contains an (unfinished) experimental JIT compiler based on LLVM. Depends on [jv:llvm_s][8].
d2d9a2d4d6bf Added README, licenses and copyright notices.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    12
d2d9a2d4d6bf Added README, licenses and copyright notices.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    13
## Installation 
d2d9a2d4d6bf Added README, licenses and copyright notices.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    14
d2d9a2d4d6bf Added README, licenses and copyright notices.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    15
Since **jv:dragonfly** contains a C code, you need to have working build environment
d2d9a2d4d6bf Added README, licenses and copyright notices.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    16
for building Smalltalk/X jv-branch. For details see [Building Smalltalk/X jv-branch from sources][9].
d2d9a2d4d6bf Added README, licenses and copyright notices.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    17
Following steps assume you have built Smalltalk/X in directory {{{stx_jv}}}.
d2d9a2d4d6bf Added README, licenses and copyright notices.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    18
d2d9a2d4d6bf Added README, licenses and copyright notices.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    19
**1.** Clone the repository:
d2d9a2d4d6bf Added README, licenses and copyright notices.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    20
d2d9a2d4d6bf Added README, licenses and copyright notices.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    21
```
d2d9a2d4d6bf Added README, licenses and copyright notices.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    22
#!bash
d2d9a2d4d6bf Added README, licenses and copyright notices.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    23
    mkdir -p stx_jv/build/jv
d2d9a2d4d6bf Added README, licenses and copyright notices.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    24
    hg clone https://bitbucket.org/janvrany/jv-dragonfly stx_jv/build/jv/dragonfly
d2d9a2d4d6bf Added README, licenses and copyright notices.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    25
```
d2d9a2d4d6bf Added README, licenses and copyright notices.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    26
d2d9a2d4d6bf Added README, licenses and copyright notices.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    27
**2.** Build it:
d2d9a2d4d6bf Added README, licenses and copyright notices.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    28
d2d9a2d4d6bf Added README, licenses and copyright notices.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    29
```
d2d9a2d4d6bf Added README, licenses and copyright notices.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    30
#!bash
d2d9a2d4d6bf Added README, licenses and copyright notices.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    31
cd stx_jv/build/jv/dragonfly
d2d9a2d4d6bf Added README, licenses and copyright notices.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    32
make
d2d9a2d4d6bf Added README, licenses and copyright notices.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    33
```
d2d9a2d4d6bf Added README, licenses and copyright notices.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    34
d2d9a2d4d6bf Added README, licenses and copyright notices.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    35
On Windows, do
d2d9a2d4d6bf Added README, licenses and copyright notices.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    36
d2d9a2d4d6bf Added README, licenses and copyright notices.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    37
```
d2d9a2d4d6bf Added README, licenses and copyright notices.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    38
#!bash
d2d9a2d4d6bf Added README, licenses and copyright notices.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    39
stx_jv\bin\setenv.bat
d2d9a2d4d6bf Added README, licenses and copyright notices.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    40
cd stx_jv\build\jv\dragonfly
d2d9a2d4d6bf Added README, licenses and copyright notices.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    41
mingwmake
d2d9a2d4d6bf Added README, licenses and copyright notices.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    42
```
d2d9a2d4d6bf Added README, licenses and copyright notices.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    43
d2d9a2d4d6bf Added README, licenses and copyright notices.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    44
**3.** To load it into running Smalltalk/X IDE, execute:
d2d9a2d4d6bf Added README, licenses and copyright notices.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    45
d2d9a2d4d6bf Added README, licenses and copyright notices.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    46
```
d2d9a2d4d6bf Added README, licenses and copyright notices.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    47
Smalltalk loadPackage: #'jv:drgonfly'.          "Loads basic support"
d2d9a2d4d6bf Added README, licenses and copyright notices.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    48
Smalltalk loadPackage: #'jv:drgonfly/asm'.      "Loads AsmJIT, a i386 assembler"
d2d9a2d4d6bf Added README, licenses and copyright notices.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    49
Smalltalk loadPackage: #'jv:drgonfly/udis86sx'. "Loads UDIS86, an x86 disassembler"
d2d9a2d4d6bf Added README, licenses and copyright notices.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    50
Smalltalk loadPackage: #'jv:drgonfly/c1'.       "Loads unfinished C1 compiler"
d2d9a2d4d6bf Added README, licenses and copyright notices.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    51
```
d2d9a2d4d6bf Added README, licenses and copyright notices.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    52
d2d9a2d4d6bf Added README, licenses and copyright notices.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    53
Note, that for C1 compiler you need to have also [jv:llvm_s][8]
d2d9a2d4d6bf Added README, licenses and copyright notices.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    54
d2d9a2d4d6bf Added README, licenses and copyright notices.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    55
## Usage 
d2d9a2d4d6bf Added README, licenses and copyright notices.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    56
d2d9a2d4d6bf Added README, licenses and copyright notices.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    57
See various example classes and tests, namely:
d2d9a2d4d6bf Added README, licenses and copyright notices.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    58
d2d9a2d4d6bf Added README, licenses and copyright notices.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    59
* [CompiledCodeObjectExamples][10]
d2d9a2d4d6bf Added README, licenses and copyright notices.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    60
d2d9a2d4d6bf Added README, licenses and copyright notices.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    61
d2d9a2d4d6bf Added README, licenses and copyright notices.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    62
## Author
d2d9a2d4d6bf Added README, licenses and copyright notices.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    63
d2d9a2d4d6bf Added README, licenses and copyright notices.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    64
Jan Vrany `<jan.vrany [at] fit.cvut.cz>`
d2d9a2d4d6bf Added README, licenses and copyright notices.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    65
d2d9a2d4d6bf Added README, licenses and copyright notices.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    66
## License
d2d9a2d4d6bf Added README, licenses and copyright notices.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    67
d2d9a2d4d6bf Added README, licenses and copyright notices.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    68
Different parts are licensed under different licenses.
d2d9a2d4d6bf Added README, licenses and copyright notices.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    69
d2d9a2d4d6bf Added README, licenses and copyright notices.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    70
* **jv:dragonfly** - [MIT][4]
d2d9a2d4d6bf Added README, licenses and copyright notices.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    71
* **jv:dragonfly/asm** - [MIT][5]
d2d9a2d4d6bf Added README, licenses and copyright notices.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    72
* **jv:dragonfly/udis86sx** - [BSD][6]
d2d9a2d4d6bf Added README, licenses and copyright notices.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    73
* **jv:dragonfly/c1** - [free for experimenting, no commercial use][7]
d2d9a2d4d6bf Added README, licenses and copyright notices.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    74
d2d9a2d4d6bf Added README, licenses and copyright notices.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    75
[1]: https://swing.fit.cvut.cz/projects/stx-jv/
d2d9a2d4d6bf Added README, licenses and copyright notices.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    76
[2]: http://llvm.org/
d2d9a2d4d6bf Added README, licenses and copyright notices.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    77
[3]: https://github.com/vmt/udis86
d2d9a2d4d6bf Added README, licenses and copyright notices.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    78
[4]: https://bitbucket.org/janvrany/jv-dragonfly/src/default/license.txt
d2d9a2d4d6bf Added README, licenses and copyright notices.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    79
[5]: https://bitbucket.org/janvrany/jv-dragonfly/src/default/asm/license.txt
d2d9a2d4d6bf Added README, licenses and copyright notices.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    80
[6]: https://bitbucket.org/janvrany/jv-dragonfly/src/default/udis86sx/license.txt
d2d9a2d4d6bf Added README, licenses and copyright notices.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    81
[7]: https://bitbucket.org/janvrany/jv-dragonfly/src/default/c1/license.txt
d2d9a2d4d6bf Added README, licenses and copyright notices.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    82
[8]: https://bitbucket.org/janvrany/jv-llvm-s
d2d9a2d4d6bf Added README, licenses and copyright notices.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    83
[9]: https://swing.fit.cvut.cz/projects/stx-jv/wiki/Documentation/BuildingStXWithRakefiles
d2d9a2d4d6bf Added README, licenses and copyright notices.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    84
[10]: https://bitbucket.org/janvrany/jv-dragonfly/src/default/CompiledCodeObjectExamples.st