-
Notifications
You must be signed in to change notification settings - Fork 61
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Add guide to add new attributes support in libgccjit
- Loading branch information
1 parent
e39f3a2
commit a7d8b8e
Showing
1 changed file
with
17 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,17 @@ | ||
# Add support for a new function attribute | ||
|
||
To add support for a new function attribute in libgccjit, you need to do the following steps: | ||
|
||
1. Copy the corresponding function from `c-family/c-attribs.cc` into `jit/dummy-frontend.cc`. For example if you add the `target` attribute, the function name will be `handle_target_attribute`. | ||
2. Copy the corresponding entry from the `c_common_attribute_table` variable in the `c-family/c-attribs.cc` file into the `jit_attribute_table` variable in `jit/dummy-frontend.cc`. | ||
3. Add a new variant in the `gcc_jit_fn_attribute` enum in the `jit/libgccjit.h` file. | ||
4. Add a test to ensure the attribute is correctly applied in `gcc/testsuite/jit.dg/`. Take a look at `gcc/testsuite/jit.dg/test-nonnull.c` if you want an example. | ||
5. Run the example like this (in your `gcc-build` folder): `make check-jit RUNTESTFLAGS="-v -v -v jit.exp=jit.dg/test-nonnull.c"` | ||
|
||
Once done, you need to update the [gccjit.rs] crate to add the new enum variant in the corresponding enum (`FnAttribute`). | ||
|
||
Finally, you need to update this repository by calling the relevant API you added in [gccjit.rs]. | ||
|
||
To test it, build `gcc`, run `cargo update -p gccjit` and then you can test the generated output for a given Rust crate. | ||
|
||
[gccjit.rs]: https://github.com/antoyo/gccjit.rs |