You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
Larry Xue 1331f8c431 bugfixes 5 years ago
c2logic bugfixes 5 years ago
examples bugfixes 5 years ago
include added drawing,getlink,read/write 5 years ago
.clang-format initial commit 5 years ago
.clang-tidy initial commit 5 years ago
.gitignore commit 5 years ago
.pylintrc bugfixes 5 years ago
.style.yapf initial commit 5 years ago
LICENSE added installation 5 years ago
README.md bugfixes 5 years ago
mypy.ini initial commit 5 years ago
requirements.txt optimized loops/if and added continue 5 years ago
setup.py added installation 5 years ago

README.md

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 goto and 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
  • goto - don't use it