#intel #vtune #seapi #ittnotify #itt

sys intel-seapi-sys

Intel单事件API (SEAPI) 和 ittnotify 的FFI封装,用于Intel VTune

3个不稳定版本

使用旧的Rust 2015

0.2.0 2018年10月26日
0.1.1 2018年10月26日
0.1.0 2018年10月26日

#4#vtune

每月40次 下载
intel-seapi 中使用

MIT 许可证

2MB
15K SLoC

Python 8K SLoC // 0.1% comments C++ 4K SLoC // 0.1% comments C 1.5K SLoC // 0.1% comments C# 1K SLoC FORTRAN Modern 409 SLoC // 0.1% comments Rust 319 SLoC // 0.0% comments Java 158 SLoC // 0.1% comments Objective-C++ 41 SLoC // 0.3% comments Visual Studio Solution 39 SLoC Batch 7 SLoC Shell 2 SLoC

intel-seapi

intel-seapi 是Intel单事件API (SEAPI,也称为 IntelSEAPI) 和 ittnotify 的FFI封装,用于Intel VTune。ITT代表“仪器和跟踪技术”。这个特定的封装使用了一个 IntelSEAPI 的分支,因为这个上游代码库不支持交叉编译或MUSL C库。

它提供静态链接,并为 libittnotify.a/.obj 库生成Rust FFI绑定,并且编译,但不链接或为 libIntelSEAPI.dylib/.so/.dll 动态库生成Rust绑定(这是因为它始终以动态方式构建,并且它被设计为从C++中使用)。

下游crate可以使用生成的构建变量 cargo:includecargo:libdircargo:root

限制

  • 当前在Windows上无法工作,因为 libittnotify 为Windows构建了一个完全不同的API集(以 AW 结尾)。
  • 构建了动态库 IntelSEAPI,但没有链接,也没有为其生成绑定。
  • Bindgen没有为 libittnotify 的大多数功能生成正确的绑定,因为C头文件中的函数声明没有反映实际创建的混淆名称。因此,只提供了绑定的一小部分;生成但尚未修复的附加绑定在 BindingsAsGeneratedByBingen.rs 中。

交叉编译

这是脆性的,可能会失败,主要是因为底层软件使用了CMake、一个具有Rust绑定和包装器的C++工具链以及IntelSEAPI不支持交叉编译。我们使用一个分叉版本来修复他们CMakeLists.txt文件中的一些交叉编译错误,生成与目标或主机架构无关的胖Mac OS X对象归档等。

例如,当为MUSL目标编译时,Rust的cc包假设C编译器是musl-gcc,而C++编译器是musl-g++。由于cc包由cmake包管理,因此我们无法轻易更改这一点。此包尝试在交叉编译时使用MUSL目标设置环境变量CROSS_COMPILE,如果尚未设置。

已知的可工作交叉编译。

  • 在Mac OS X上,安装了filo-sottie的分叉musl homebrew keg(lemonrock/musl-cross/musl-cross),使用以下命令编译:cargo build --target x86_64-unknown-linux-musl

许可

本项目的许可协议为MIT。

依赖项