use std::ffi::{c_char, CStr};
#[cfg(feature = "enable")]
extern "C" {
fn likwid_markerInit();
fn likwid_markerThreadInit();
fn likwid_markerClose();
fn likwid_markerRegisterRegion(tag: *const c_char) -> i32;
fn likwid_markerStartRegion(tag: *const c_char) -> i32;
fn likwid_markerStopRegion(tag: *const c_char) -> i32;
fn likwid_markerResetRegion(tag: *const c_char) -> i32;
fn likwid_markerNextGroup();
fn likwid_markerWriteFile(marker_file: *const c_char) -> i32;
fn likwid_pinProcess(processor_id: i32) -> i32;
fn likwid_pinThread(processor_id: i32) -> i32;
}
pub fn init() {
#[cfg(feature = "enable")]
unsafe {
likwid_markerInit();
}
}
pub fn close() {
#[cfg(feature = "enable")]
unsafe {
likwid_markerClose();
}
}
pub fn write_file(marker_file: &CStr) -> Result<(), i32> {
#[cfg(feature = "enable")]
unsafe {
match likwid_markerWriteFile(marker_file.as_ptr()) {
0 => Ok(()),
err => Err(err),
}
}
#[cfg(not(feature = "enable"))]
Ok(())
}
pub fn thread_init() {
#[cfg(feature = "enable")]
unsafe {
likwid_markerThreadInit();
}
}
pub fn register_region(tag: &CStr) -> Result<(), i32> {
#[cfg(feature = "enable")]
unsafe {
match likwid_markerRegisterRegion(tag.as_ptr()) {
0 => Ok(()),
err => Err(err),
}
}
#[cfg(not(feature = "enable"))]
Ok(())
}
pub fn start_region(tag: &CStr) -> Result<(), i32> {
#[cfg(feature = "enable")]
unsafe {
match likwid_markerStartRegion(tag.as_ptr()) {
0 => Ok(()),
err => Err(err),
}
}
#[cfg(not(feature = "enable"))]
Ok(())
}
pub fn stop_region(tag: &CStr) -> Result<(), i32> {
#[cfg(feature = "enable")]
unsafe {
match likwid_markerStopRegion(tag.as_ptr()) {
0 => Ok(()),
err => Err(err),
}
}
#[cfg(not(feature = "enable"))]
Ok(())
}
pub fn reset_region(tag: &CStr) -> Result<(), i32> {
#[cfg(feature = "enable")]
unsafe {
match likwid_markerResetRegion(tag.as_ptr()) {
0 => Ok(()),
err => Err(err),
}
}
#[cfg(not(feature = "enable"))]
Ok(())
}
pub fn next_group() {
#[cfg(feature = "enable")]
unsafe {
likwid_markerNextGroup();
}
}
pub fn pin_process(processor_id: i32) -> Result<(), i32> {
#[cfg(feature = "enable")]
unsafe {
match likwid_pinProcess(processor_id) {
1 => Ok(()),
err => Err(err),
}
}
#[cfg(not(feature = "enable"))]
Ok(())
}
pub fn pin_thread(processor_id: i32) -> Result<(), i32> {
#[cfg(feature = "enable")]
unsafe {
match likwid_pinThread(processor_id) {
1 => Ok(()),
err => Err(err),
}
}
#[cfg(not(feature = "enable"))]
Ok(())
}
#[test]
fn call_likwid_fn() {
init();
}