# compiler-interrupts
[][crates.io]
[][docs.rs]
[][license]
`compiler-interrupts` provides Rust API for the Compiler Interrupts library.
Check out the Compiler Interrupts [main repository][compiler-interrupts] for more info.
## Requirements
* [Rust 1.45.0][rust] or later is required.
Due to the usage of [`#[thread_local]`][thread_local] unstable feature,
this package currently requires nightly Rust.
## Getting started
Add this to your `Cargo.toml`.
``` toml
[dependencies]
compiler-interrupts = "1.0"
```
Register the Compiler Interrupts handler in your program.
``` rust
#![feature(thread_local)]
#[thread_local]
#[allow(non_upper_case_globals)]
static mut prev_ic: i64 = 0;
fn interrupt_handler(ic: i64) {
let interval;
unsafe {
// save the last interval
interval = ic - prev_ic;
// update the instruction count
prev_ic = ic;
}
if interval < 0 {
panic!("IR interval was negative")
}
println!(
"CI @ {}: last interval = {} IR",
std::thread::current().name().expect("invalid thread name"),
interval
);
}
fn main() {
// register the CI handler for 1000 IR and cycles interval
unsafe {
compiler_interrupts::register(1000, 1000, interrupt_handler);
}
// do something compute-intensive
for _ in 0..100 {}
println!("i can add an unsafe block, right?")
}
```
If you have [`cargo-compiler-interrupts`][cargo-compiler-interrupts] installed,
you can now run `cargo build-ci` to start the compilation and integration.
Check out the **[documentation][docs.rs]** for more info about the API.
## Contribution
All issue reports, feature requests, pull requests and GitHub stars are welcomed
and much appreciated.
## Author
Quan Tran ([@quanshousio][quanshousio])
## Acknowledgements
* My advisor [Jakob Eriksson][jakob] for the enormous support for this project.
* [Nilanjana Basu][nilanjana] for implementing the Compiler Interrupts.
## License
`compiler-interrupts` is available under the MIT license.
See the [LICENSE][license] file for more info.
[crates.io]: https://crates.io/crates/compiler-interrupts
[docs.rs]: https://docs.rs/compiler-interrupts
[license]: https://github.com/bitslab/compiler-interrupts-rs/blob/main/LICENSE
[compiler-interrupts]: https://github.com/bitslab/CompilerInterrupts
[rust]: https://www.rust-lang.org/tools/install
[thread_local]: https://github.com/rust-lang/rust/issues/29594
[cargo-compiler-interrupts]: https://github.com/bitslab/cargo-compiler-interrupts
[quanshousio]: https://quanshousio.com
[jakob]: https://www.linkedin.com/in/erikssonjakob
[nilanjana]: https://www.linkedin.com/in/nilanjana-basu-99027959