DartleC

DartleC CI pub package

A Dartle extension to compile C projects.

It compiles C code into object files incrementally (compileC task), then generates a binary executable from the object files (linkC task).

DartleC can be used as a command-line utility, dcc, or as a Dartle library (to integrate with other Dartle-based tools).

Using the executable dcc

DartleC can be used as a command-line utility to compile C code.

To use it in that way, activate it with pub:

dart pub global activate dartle_c

After this, running dcc will compile all C files found in a src directory to the out dir, generating a binary executable named a.out.

Tasks

  • compileC - Compiles C source code into object files.
  • linkC - Links object files, creating a binary executable.

linkC depends on compileC and is the default task. Hence, simply running dcc will run both tasks as necessary.

To only compile the C source files without generating an executable, and using a specific cstd version:

dcc compileC :-cstd=c99

The : before the argument to the compileC task is necessary because otherwise Dartle uses the argument instead of passing it on to the task.

Useful options:

# show usage and available options
dcc -h

# show all tasks
dcc -s

# enable verbose (`debug`) output
dcc -l debug

Configuring dcc

To configure dcc, create a dcc.yaml file at the project root directory with contents as shown below (all properties are optional):

compiler: gcc
compiler-args: ["-std=c2x", "-Wall", "-Werror", "-ansi", "-pedantic"]
linker-args: ["-shared"]
objects-dir: out
source-dirs: [src]

# instead of source-dirs, you can also list files explicitly:
# source-files: [foo.c, bar.c]

output: my-binary

The compiler is chosen depending on the platform if not provided. You can also set the CC environment variable to choose one.

Task options are added to the compiler-args provided in the YAML configuration file.

Using DartleC as a library.

To include DartleC in your existing Dartle build, or to write your own build system based on DartleC, add it as a dependency of your Dart project:

dart pub add dartle_c

Check this project's example for how to use its API.

Libraries

dartle_c
A Dartle extension to compile C code.