贡献

错误和功能请求

使用官方存储库来获取错误、想法和功能请求:https://github.com/Koromix/koffi

请注意,源代码不在该存储库中,而是位于 monorepo 中: https: //github.com/Koromix/rygel/(在src/koffi子目录中)。

从源代码构建

我们提供预构建的二进制文件,打包在 NPM 存档中,因此在大多数情况下它应该像npm install koffi。如果您想深入了解 Koffi 或使用特定平台,请按照以下说明操作。

首先使用Git克隆存储库:

git clone https://github.com/Koromix/rygel
cd rygel

Windows

首先,确保满足以下依赖关系:

完成此操作后,从测试或基准目录运行此命令(取决于您要构建的内容)

cd src/koffi
node ../cnoke/cnoke.js

其他

确保满足以下依赖关系:

完成此操作后,从测试或基准目录运行此命令(取决于您要构建的内容)

cd src/koffi
node ../cnoke/cnoke.js

运行测试

宿主机

构建 Koffi 后,您可以构建测试并使用以下命令运行它们:

cd src/koffi/test
node ../../cnoke/cnoke.js

node sync.js # Run synchronous unit tests
node async.js # Run asynchronous unit tests
node callbacks.js # Run callback unit tests
node union.js # Run union unit tests
node win32.js # Run Windows-specific unit tests (only on Windows)

node sqlite.js # Run SQLite integration tests
node raylib.js # Run Raylib integration tests

在虚拟机

Koffi 使用模拟(如果可能的话加速)QEMU 机器在多种架构上进行了测试。首先,您需要安装 qemu 软件包,例如qemu-system(甚至qemu-system-gui在 Ubuntu 上)。

这些机器不直接包含在此存储库中(出于许可证和大小原因),但可以在此处获取它们: https://koromix.dev/files/machines/

例如,如果您想在 Debian ARM64 上运行测试,请运行以下命令:

cd src/koffi/tools/
wget -q -O- https://koromix.dev/files/machines/qemu_debian_arm64.tar.zst | zstd -d | tar xv
sha256sum -c --ignore-missing registry/sha256sum.txt

请注意,机器磁盘内容可能会在每次机器运行时发生变化,因此一旦机器至少使用过一次,校验和测试就会失败。

现在您可以使用以下命令运行测试:

node qemu.js test # Several options are available, use --help

请耐心等待,这对于模拟机器来说可能会相当慢。Linux 机器具有并使用 ccache 来构建 Koffi,因此后续构建步骤将变得更加容易忍受。

默认情况下,每次测试都会启动和停止机器。但您可以提前启动机器并多次运行测试:

node qemu.js start # Start the machines
node qemu.js test # Test (without shutting down)
node qemu.js test # Test again
node qemu.js stop # Stop everything

您还可以将测试限制在一部分机器上:

# Full test cycle
node qemu.js test debian_x64 debian_i386

# Separate start, test, shutdown
node qemu.js start debian_x64 debian_i386
node qemu.js test debian_x64 debian_i386
node qemu.js stop

最后,如果您需要进行一些调试或任何其他手动过程,您可以使用以下快捷方式通过 SSH 加入正在运行的计算机:

node qemu.js ssh debian_i386

每台计算机都配置为运行本地可用的 VNC 服务器,您可以使用 KRDC 或任何其他兼容的查看器来访问显示器。使用info命令获取VNC端口。

node qemu.js info debian_i386

发布

首先,您必须分三步更新代码:

  • package.json更改(version 和 stable 以获得稳定版本)中的版本号

  • 添加一个条目来CHANGELOG.md总结自上次发布以来的更改

  • 使用消息Bump Koffi to XYZ提交这些更改

完成此操作后,您可以使用以下命令发布新版本:

node tools/qemu.js test # If not done before
node tools/qemu.js build

cd build/dist
npm publish

有些平台是模拟的,因此可能需要几分钟时间才能准备好预构建的二进制文件。去喝杯咖啡,回来执行npm publish命令!

代码风格

Koffi 使用 C++ 和汇编代码(特定于体系结构的代码)混合进行编程。它使用node-addon-api(C++ N-API 包装器)与Node.js 交互。

我个人更喜欢类似 C 的 C++ 风格,谨慎使用模板(主要用于容器)和少量面向对象编程。与继承和虚拟方法相比,我强烈喜欢标记联合和代码局部性。异常被禁用。

Last updated