Skip to content

GIT Mirror of: A compiler for ARM, X86, MSP430, xtensa and more implemented in pure Python -->

License

Notifications You must be signed in to change notification settings

jsdelivrbot/ppci-mirror

 
 

Repository files navigation

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

About

GIT Mirror of: A compiler for ARM, X86, MSP430, xtensa and more implemented in pure Python -->

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages

  • Python 88.6%
  • C 7.2%
  • Verilog 3.5%
  • LLVM 0.4%
  • Brainfuck 0.2%
  • JavaScript 0.1%