GIT Mirror of: A compiler for ARM, X86, MSP430, xtensa and more implemented in pure Python -->
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
docs
examples
librt
ppci
test
tools
.hgignore
.hgtags
.travis.yml
MANIFEST.in
appveyor.yml
bitbucket-pipelines.yml
codecov.yml
license.txt
readme.rst
setup.py
tox.ini

readme.rst

Introduction

The ppci (pure python compiler infrastructure) project is a compiler written entirely in python. It contains language front-ends as well as machine code generation functionality. With this library you can generate (working!) machine code within python!

The project contains the following:

  • A Compiler, an assembler, a linker and a build system
  • Language front-ends: Brainfuck, c3, C, WASM
  • Backends: 6500, arm, avr, msp430, openrisc, risc-v, stm8, x86_64, xtensa

Warning

This project is in alpha state and not ready for production use!

You can try out ppci at godbolt.org: https://godbolt.org/g/eooaPP

Api

Api example to compile c3 code:

>>> import io
>>> from ppci.api import c3c, link
>>> source_file = io.StringIO("""
... module main;
... function void print(string txt) {
... }
... function void main() {
...  print("Hello world");
... }""")
>>> obj = c3c([source_file], [], 'arm')
>>> obj = link([obj])

Example how to assemble some assembly code:

>>> import io
>>> from ppci.api import asm
>>> source_file = io.StringIO("""section code
... pop rbx
... push r10
... mov rdi, 42""")
>>> obj = asm(source_file, 'x86_64')
>>> obj.get_section('code').data
bytearray(b'[ARH\xbf*\x00\x00\x00\x00\x00\x00\x00')

Example of the low level api usage:

>>> from ppci.arch.x86_64 import instructions, registers
>>> i = instructions.Pop(registers.rbx)
>>> i.encode()
b'['

Documentation

Documentation can be found here:

gitter appveyor codecov docstate travis codacygrade codacycoverage downloads conda