<commit_before>
The scope of C2 language is larger than just the code itself; it also includes the
build system. Including this allows doing many nice things easily, like LTO (link
time optimization, etc).

## recipe
A C2 project has a `recipe` file. This file describes:

* the target type (executable, shared library or static library)
* which options are used (compile time flags)
* which source files are used

For big projects, the recipe file would be generated (for example by `make menuconfig`),
especially if there are many different configurations.

The exact format of the recipe file is still in progress, but it currently looks like:

```ini
# an example recipe file

target hello
  $warnings no-unused
  sources/hello.c2
end

lib graphics static
  $export api
  sources/file1.c2
  file2.c2
  api/file3.c2
end
```
Note that the path to each c2 file is relative to the position of the __recipe file__, not
to that of the c2c binary.

### calling directory
When building these targets, `c2c` is only called __once__. This way the compiler knows the
target type and all files required. Since you might be working in some subdir of your
project, c2c will iteratively search dirs to root until *recipe.txt* is found, no
need to change dirs to run it!

So these 2 calls are equal if *my_project/* contains the *recipe.txt*:
```
~my_project$ c2c
~my_project/some_subdir$ c2c
```


### output directory
Any output will be put in the *output/* directory in the root of the project. Inside
 the output directory, each target will have its own folder.
Therefore, to *make clean* just means to remove this directory.

<commit_msg>docs: added recipe options<commit_after>
The scope of C2 language is larger than just the code itself; it also includes the
build system. Including this allows doing many nice things easily, like LTO (link
time optimization, etc).

## recipe
A C2 project has a `recipe` file. This file describes:

* the target type (executable, shared library or static library)
* which options are used (compile time flags)
* which source files are used

For big projects, the recipe file would be generated (for example by `make menuconfig`),
especially if there are many different configurations.

The exact format of the recipe file is still in progress, but it currently looks like:

```ini
# an example recipe file

target hello
  $warnings no-unused
  sources/hello.c2
end

lib graphics static
  $export api
  sources/file1.c2
  file2.c2
  api/file3.c2
end
```
Note that the path to each c2 file is relative to the position of the __recipe file__, not
to that of the c2c binary.

### calling directory
When building these targets, `c2c` is only called __once__. This way the compiler knows the
target type and all files required. Since you might be working in some subdir of your
project, c2c will iteratively search dirs to root until *recipe.txt* is found, no
need to change dirs to run it!

So these 2 calls are equal if *my_project/* contains the *recipe.txt*:
```
~my_project$ c2c
~my_project/some_subdir$ c2c
```


### output directory
Any output will be put in the *output/* directory in the root of the project. Inside
 the output directory, each target will have its own folder.
Therefore, to *make clean* just means to remove this directory.

## Options

Inside a target, the following options are available:

 * *config [names]* - specify definitions, like #define feature1
 * *export [modules]* - exports the modules in libraries and generated headers
 * *generate-c* - enables generation of C code
 * *generate-ir* - enables generation of LLVM IR code
 * *warnings [list]* - enable/disable specific warnings during compilation
 * *deps [options]* - enable generation of dependency file with certain options
 * *refs* - generate reference file (used for jumping to definition)
 * *use [libs]* - depend on given libraries



{'fraction_non_alphanumeric': 0.06429867772880477, 'fraction_numerical': 0.00855587243971999, 'mean_word_length': 4.248979591836735, 'pattern_counts': {'":': 0, '<': 3, '<?xml version=': 0, '>': 3, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '6069481', 'n_tokens_mistral': 1059, 'n_tokens_neox': 1038, 'n_words': 578}