|
|
5 years ago | |
|---|---|---|
| c2logic | 4 years ago | |
| examples | 5 years ago | |
| include | 5 years ago | |
| .clang-format | 5 years ago | |
| .clang-tidy | 5 years ago | |
| .flake8 | 5 years ago | |
| .gitignore | 5 years ago | |
| .pylintrc | 5 years ago | |
| .style.yapf | 5 years ago | |
| LICENSE | 5 years ago | |
| MANIFEST.in | 5 years ago | |
| README.md | 4 years ago | |
| mypy.ini | 5 years ago | |
| parser.py | 5 years ago | |
| requirements.txt | 5 years ago | |
| setup.py | 4 years ago | |
| skeleton.j2 | 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:
- completely unoptimized.
- the default
- modify variables without using a temporary
- more optimizations
- remove uncalled functions
- constant folding
- turns on some potentially unsafe optimizations
- augmented assignment and pre/postincrement/decrement don't modify
__rax - returning from main becomes equivalent to
end
- augmented assignment and pre/postincrement/decrement don't modify
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 20879 with single data returns (nothing that sets both outx and outy for example)
- 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