10个不稳定版本 (3个破坏性更新)
使用旧的Rust 2015
0.3.1 | 2018年10月27日 |
---|---|
0.3.0 | 2018年10月27日 |
0.2.0 | 2018年10月26日 |
0.1.3 | 2018年10月26日 |
0.0.2 | 2018年10月25日 |
#253 in 性能分析
每月下载量:28
2MB
16K 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 由于C头文件的函数声明没有反映实际创建的混淆名称,因此没有为
libittnotify
的大部分生成正确的绑定。因此,仅提供了一小部分绑定;在BindingsAsGeneratedByBingen.rs
中生成了附加绑定但尚未修正。
交叉编译
这是脆弱的,可能会失败,主要是因为底层软件使用了一个混合的构建系统,包括CMake、具有Rust绑定和封装的C++工具链以及IntelSEAPI,并且它们对交叉编译不太友好。我们使用了一个分支版本来修复他们的一些交叉编译错误,例如在CMakeLists.txt
文件中的错误,生成与目标或主机架构无关的胖Mac OS X对象归档等。
例如,当为MUSL目标编译时,Rust的cc
crate假设C编译器是musl-gcc
,而C++编译器是musl-g++
。由于这个cc
crate是由cmake
crate管理的,所以我们无法轻易更改这一点。这个crate尝试在用MUSL目标进行交叉编译时,如果没有设置环境变量CROSS_COMPILE
,则设置它。
已知的可正常工作的交叉编译。
- 在Mac OS X上,如果安装了filo-sottie的foked musl homebrew keg(
lemonrock/musl-cross/musl-cross
),则cargo build --target x86_64-unknown-linux-musl
。
许可
本项目的许可协议为MIT。