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 中使用
2MB
15K 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:include
、cargo:libdir
和 cargo:root
。
限制
- 当前在Windows上无法工作,因为
libittnotify
为Windows构建了一个完全不同的API集(以A
和W
结尾)。 - 构建了动态库
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。