klitsche/clang-ffi

libclang 绑定通过 ffi

v0.5.0 2022-02-08 07:35 UTC

This package is auto-updated.

Last update: 2024-09-08 13:14:26 UTC


README

Build Build macOS

Test Coverage Maintainability Packagist

一个通过 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。