CxGo is a tool for translating C source code to Go (aka transpiler, source-to-source compiler).
It uses cc v3 for preprocessing and parsing C (no clang/gcc dependencies!) and a custom type-checker and AST translation layer to make the best output possible.
The only requirement is: C code must compile with cxgo
, including headers.
Having said that, cxgo
uses a few tricks to make this process easier.
TL;DR for the project goals:
Check the FAQ for more common question about the project.
The project is experimental! Do not rely on it in production and other sensitive environments!
Although it was successfully tested on multiple projects, it might change the behavior of the code due to yet unknown bugs.
Compiler test results:
Transpiled projects:
go install github.com/gotranspile/cxgo/cmd/cxgo@latest
or download the latest release from Github.
The fastest way to try it is:
cxgo file main.c
For more details, check our examples section.
It will guide you through basic usage patterns as well as a more advanced ones (on real-world projects).
You may also check FAQ if you have any issues.
The following C features are currently accepted by cxgo
, but may be implemented partially or not implemented at all:
static
(#4)auto
(#5)union
with C-identical data layout (#7)packed
structs (#8)asm
case
in weird places (#9)goto
forbidden by Go (there is a workaround, though, see #10)setjmp
(will compile, but panics at runtime)#ifdef
paths for different OS/envsJoin our community! We'd like to hear back from you!
See CONTRIBUTING.
MIT