Skip to content

guyrish/Cesium

 
 

Repository files navigation

Cesium Status Enfer

Cesium is a fully managed C compiler for CLI platform (.NET).

What? Cesium compiles standard C source code to a .NET assembly. No unmanaged/mixed mode (a-lá C++/CLI) code is generated; everything is fully managed (but may be unsafe).

Why? C programs are very useful in the modern world, and solve practical tasks. At the same time, deploying C code alongside .NET code may be tricky (especially if your application supports multiple platforms). Cesium is designed to resolve the problems of C code deployment, and lift it to the managed state (so it is cross-platform in the same way the underlying CIL code it is compiled to).

Implementation Status

TL;DR: is it ready for use?

Unfortunately, not yet. You won't be able to use Cesium for anything useful today. Probably, you'll be able to start after the next milestone is implemented. Stay tuned!

Dashboard

Have a question? Welcome to the discussions section!

Looking to contribute? Check open issues with the "help wanted" label. Cesium is a big project which lives thanks to its contributors.

If you're interested in certain project area, check the per-area issue labels:

Sneak peek

Currently, Cesium is able to compile a "Hello, world" C17 example to a .NET assembly:

#include <stdio.h>

int main(int argc, char *argv[])
{
    puts("Hello, world!");
    return 42;
}

The next milestone is #61: sha1collisiondetection, which is 0% complete.

Documentation

Usage

$ dotnet run --project Cesium.Compiler -- <path to the input .c file> <path to the output assembly>

For example, this will generate an assembly executable by .NET 6, .NET Framework, or Mono:

$ dotnet run --project Cesium.Compiler -- Cesium.Samples/minimal.c out.exe
$ dotnet ./out.exe # run with .NET 6
$ ./out.exe # only on Windows, run with .NET Framework
$ mono ./out.exe # run with Mono

Testing

In order to test changes please run following for fast-cycle testing

$ dotnet test

And if you want to run integration tests

$ pwsh -c ./Cesium.IntegrationTests/Run-Tests.ps1 -NoBuild

(don't pass -NoBuild if you want to automatically rebuild the compiler before running the integration tests)

If you debug integration tests and want to run just single test

pwsh -c ./Cesium.IntegrationTests/Run-Tests.ps1 -TestCaseName quoted_include_fallback.c

where quoted_include_fallback.c is path within Cesium.IntegrationTests folder.

About

C compiler for the CLI platform

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • C# 94.6%
  • PowerShell 4.0%
  • C 1.4%