Skip to content

SuperStormer/c2logic

Repository files navigation

c2logic

Compiles C code to Mindustry logic. Still in beta, so compiled output may not be fully optimized. Requirements are the pycparser package and the C preprocessor (cpp).

Installation

pip install git+https://github.com/SuperStormer/c2logic

Documentation

Run the command line tool using:

c2logic filename -O optimization_level

where filename is a string and optimization_level is an optional integer.

Optimization Level:

  1. completely unoptimized.
  2. the default
    • modify variables without using a temporary
  3. more optimizations
    • remove uncalled functions
  4. turns on some potentially unsafe optimizations
    • augmented assignment and pre/postincrement/decrement don't modify __rax
    • returning from main becomes equivalent to end

Locals are rewritten as _<varname>_<func_name>. Globals are unchanged.

Special Variables:

  • __rax: similar to x86 rax
  • __rbx: stores left hand side of binary ops to avoid clobbering by the right side
  • __retaddr__<func_name>: stores return address of func call

When writing your code, you must include c2logic/builtins.h, which is located in the python include directory (location depends on system, mine is at ~/.local/include/python3.8/). A quick way to find this is python3 -c "from c2logic.compiler import get_include_path; print(get_include_path())" (use python if you are using windows).

See include/builtins.h for API definitions and examples for API sample usage.

Supported Features

  • all Mindustry instructions as of BE 9420
  • all C control flow structures except switch
  • functions
  • local/global variables

Unsupported Features

  • defining global variables outside of functions - define it in main
  • recursive calls - use iteration
  • structs - split it into multiple variables
  • enums - use an int plus macros
  • block scoped variables - just use locals
  • typedefs - use macros
  • pointers - don't use them
  • switch - use if-else chains

Releases

No releases published

Packages

No packages published