klitsche / clang-ffi
libclang 绑定通过 ffi
v0.5.0
2022-02-08 07:35 UTC
Requires
- php: ^7.4 || ^8.0
- ext-ffi: *
- symfony/polyfill-php80: ^1.20
- symfony/process: ^4.4 || ^5.0
Requires (Dev)
- composer/composer: ^2.0
- phpunit/phpunit: ^9.5
- symplify/easy-coding-standard: ^9.0
README
一个通过 FFI 暴露 libclang 的 PHP 库。
它允许轻松遍历和分析 c / c++ 文件的抽象语法树。
遗憾的是,PHP FFI 目前不支持在函数调用中将 Struct By Value 作为参数或返回值。这就是为什么为 libclang 本身提供了一个基于 C 的包装器,然后可以通过 FFI 绑定。此包装器在使用前必须编译。
该包装器来自 dart ffigen 并进行了轻微扩展。
0.* 预发布版本中可能会有破坏性更改。
要求
- PHP >= 7.4
- 启用 FFI 扩展
- LLVM >= 9 带有 clang 和 libclang-dev
快速入门
安装带有 clang 的 llvm ...
... 在 macOS 上(请参阅 https://formulae.brew.sh/formula/llvm)
brew install llvm@11
... 在 Debian / Ubuntu 上(请参阅 https://apt.llvm.org/)
apt-get update; \
apt-get install wget lsb-release software-properties-common ca-certificates gnupg; \
wget -q https://apt.llvm.org/llvm.sh; \
chmod +x llvm.sh; \
sudo ./llvm.sh 11; \
apt-get install libclang-11-dev;
在您的项目中安装
composer require klitsche/clang-ffi
添加到 composer.json(这将触发包装的 libclang 库的编译)
"scripts": { "post-autoload-dump": "Klitsche\\Clang\\FFI\\libclang\\Compiler::run", },
转储自动加载以触发编译
composer dump-autoload
运行示例
检出 & 准备
git clone https://github.com/klitsche/clang-ffi.git; \
cd clang-ffi; \
docker-compose build;
打印解析的文件
docker-compose run --rm php74 php examples/print.php
收集并转储简化的 AST 节点为 json
docker-compose run --rm php74 php examples/json.php
转储解析过程中发现的错误
docker-compose run --rm php74 php examples/issues.php
待办事项
- 添加 ffigen
- 添加对 llvm >9 的多版本支持(某些常量值不同)
- 添加文档
- 添加对 Windows 的支持
许可
有关详细信息,请参阅LICENSE.md。
LICENSE.wrapper.c.md 覆盖文件 src/FFI/libclang/wrapper.c。