63 Commits
Author SHA1 Message Date
Khairul Azhar Kasmiran a49e69b19a ci: Upgrade to macos-15 (#139) 2026-11-08 13:52:36 +08:00
dependabot[bot] 8b84bc13e7 Bump pypa/cibuildwheel from 4.3.4 to 4.3.5 (#137)
Bumps [pypa/cibuildwheel](https://github.com/pypa/cibuildwheel) from 4.3.4 to 4.3.5.
- [Release notes](https://github.com/pypa/cibuildwheel/releases)
- [Changelog](https://github.com/pypa/cibuildwheel/blob/main/docs/changelog.md)
- [Commits](https://github.com/pypa/cibuildwheel/compare/v4.3.4...v4.3.5)

---
updated-dependencies:
- dependency-name: pypa/cibuildwheel
  dependency-version: 4.3.5
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <[email protected]>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-11-02 22:32:19 +08:00
Khairul Azhar Kasmiran 6a3641cb6d Add test for examples/2b-rz_bin_plugin.py (#136) 2026-10-31 10:51:55 +08:00
dependabot[bot] d74c39e6fa Bump pypa/cibuildwheel from 4.3.1 to 4.3.4 (#134)
Bumps [pypa/cibuildwheel](https://github.com/pypa/cibuildwheel) from 4.3.1 to 4.3.4.
- [Release notes](https://github.com/pypa/cibuildwheel/releases)
- [Changelog](https://github.com/pypa/cibuildwheel/blob/main/docs/changelog.md)
- [Commits](https://github.com/pypa/cibuildwheel/compare/v4.3.1...v4.3.4)

---
updated-dependencies:
- dependency-name: pypa/cibuildwheel
  dependency-version: 4.3.4
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <[email protected]>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-10-26 18:56:47 +08:00
dependabot[bot] f36d5c4098 Bump pypa/gh-action-pypi-publish from 1.14.2 to 1.14.3 (#135)
Bumps [pypa/gh-action-pypi-publish](https://github.com/pypa/gh-action-pypi-publish) from 1.14.2 to 1.14.3.
- [Release notes](https://github.com/pypa/gh-action-pypi-publish/releases)
- [Commits](https://github.com/pypa/gh-action-pypi-publish/compare/v1.14.2...v1.14.3)

---
updated-dependencies:
- dependency-name: pypa/gh-action-pypi-publish
  dependency-version: 1.14.3
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <[email protected]>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-10-26 18:54:50 +08:00
Khairul Azhar Kasmiran 9463be9616 Add test for examples/2a-rz_bin_plugin.py (#133)
* Run tests from inside `tests/`
* Add test for examples/2a-rz_bin_plugin.py
* Move tests to `db/`
* Add `.gitignore` to test dir
* Rename `tests/` dir to `test/`
2026-10-24 14:16:18 +08:00
dependabot[bot] ca552d44d3 Bump pypa/cibuildwheel from 4.2.0 to 4.3.1 (#132)
Bumps [pypa/cibuildwheel](https://github.com/pypa/cibuildwheel) from 4.2.0 to 4.3.1.
- [Release notes](https://github.com/pypa/cibuildwheel/releases)
- [Changelog](https://github.com/pypa/cibuildwheel/blob/main/docs/changelog.md)
- [Commits](https://github.com/pypa/cibuildwheel/compare/v4.2.0...v4.3.1)

---
updated-dependencies:
- dependency-name: pypa/cibuildwheel
  dependency-version: 4.3.1
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <[email protected]>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-10-19 18:21:27 +08:00
Khairul Azhar Kasmiran 4d716bce6e py_install.py: Ensure install dir exists (#131) 2026-10-18 19:45:45 +08:00
dependabot[bot]andKhairul Azhar Kasmiran ac2381b166 Bump pypa/cibuildwheel from 3.4.1 to 4.2.0 (#126)
* Bump pypa/cibuildwheel from 3.4.1 to 4.2.0

Bumps [pypa/cibuildwheel](https://github.com/pypa/cibuildwheel) from 3.4.1 to 4.2.0.
- [Release notes](https://github.com/pypa/cibuildwheel/releases)
- [Changelog](https://github.com/pypa/cibuildwheel/blob/main/docs/changelog.md)
- [Commits](https://github.com/pypa/cibuildwheel/compare/v3.4.1...v4.2.0)

---
updated-dependencies:
- dependency-name: pypa/cibuildwheel
  dependency-version: 4.2.0
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <[email protected]>

* Add `C:/rizin/bin` to Windows PATH

* Try using the Linux way for PATH

* Try the Windows way again

* Try combining both Windows and Linux ways

* Use forward slashes instead

---------

Signed-off-by: dependabot[bot] <[email protected]>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Khairul Azhar Kasmiran <[email protected]>
2026-10-15 00:18:16 +08:00
dependabot[bot] da60547435 Bump pypa/gh-action-pypi-publish from 1.14.0 to 1.14.2 (#125)
Bumps [pypa/gh-action-pypi-publish](https://github.com/pypa/gh-action-pypi-publish) from 1.14.0 to 1.14.2.
- [Release notes](https://github.com/pypa/gh-action-pypi-publish/releases)
- [Commits](https://github.com/pypa/gh-action-pypi-publish/compare/v1.14.0...v1.14.2)

---
updated-dependencies:
- dependency-name: pypa/gh-action-pypi-publish
  dependency-version: 1.14.2
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <[email protected]>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-10-14 18:45:20 +08:00
dependabot[bot] 4518ff76ec Bump actions/checkout from 6 to 7 (#122)
Bumps [actions/checkout](https://github.com/actions/checkout) from 6 to 7.
- [Release notes](https://github.com/actions/checkout/releases)
- [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md)
- [Commits](https://github.com/actions/checkout/compare/v6...v7)

---
updated-dependencies:
- dependency-name: actions/checkout
  dependency-version: '7'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <[email protected]>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-10-13 19:42:00 +08:00
Khairul Azhar Kasmiran 85e7952624 Check for cygwin also on Windows build (#130) 2026-10-12 22:40:27 +08:00
Rot127 4b73d4b138 Allow for const qualifiers in linter. (#129) 2026-10-11 16:57:56 +00:00
Rot127 862f712852 Add RzThreadRingBuf and RzThreadQueue to bindgen linter (#127)
* Add RzThreadRingBuf and RzThreadQueue to bindgen linter

* Add rb and queue source files to exception list.
2026-09-23 17:19:59 +00:00
dependabot[bot] 6e305d6fab Bump pypa/cibuildwheel from 3.4.0 to 3.4.1 (#115)
Bumps [pypa/cibuildwheel](https://github.com/pypa/cibuildwheel) from 3.4.0 to 3.4.1.
- [Release notes](https://github.com/pypa/cibuildwheel/releases)
- [Changelog](https://github.com/pypa/cibuildwheel/blob/main/docs/changelog.md)
- [Commits](https://github.com/pypa/cibuildwheel/compare/v3.4.0...v3.4.1)

---
updated-dependencies:
- dependency-name: pypa/cibuildwheel
  dependency-version: 3.4.1
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <[email protected]>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-05-01 07:42:47 +08:00
Khairul Azhar Kasmiran 6444185df7 Support stdint.h definitions (#118) 2026-05-01 07:39:49 +08:00
dependabot[bot] a0b71b09db Bump pypa/gh-action-pypi-publish from 1.13.0 to 1.14.0 (#116)
Bumps [pypa/gh-action-pypi-publish](https://github.com/pypa/gh-action-pypi-publish) from 1.13.0 to 1.14.0.
- [Release notes](https://github.com/pypa/gh-action-pypi-publish/releases)
- [Commits](https://github.com/pypa/gh-action-pypi-publish/compare/v1.13.0...v1.14.0)

---
updated-dependencies:
- dependency-name: pypa/gh-action-pypi-publish
  dependency-version: 1.14.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <[email protected]>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-04-30 21:54:01 +08:00
Khairul Azhar Kasmiran 4a31374a3b Fix build due to ESIL refactor (#117) 2026-04-18 20:26:48 +08:00
Rot127 380f6e229c Add type linting for HtPP and RzGraph + fix CI (#114)
* Add type linting for HtPP and RzGraph.

* Add struct, constructor, and destructor of RzAsm to fix forward declaration error.

* Add struct, constructor, and destructor of RzAnalysis to fix forward declaration error.

* Fix incorrect type annotation (they are CursorKind not TypeKind in cindex.py).
2026-04-07 10:58:27 +00:00
dependabot[bot]andKhairul Azhar Kasmiran b2a1f44b82 Bump pypa/cibuildwheel from 3.3.1 to 3.4.0 (#113)
* Bump pypa/cibuildwheel from 3.3.1 to 3.4.0

Bumps [pypa/cibuildwheel](https://github.com/pypa/cibuildwheel) from 3.3.1 to 3.4.0.
- [Release notes](https://github.com/pypa/cibuildwheel/releases)
- [Changelog](https://github.com/pypa/cibuildwheel/blob/main/docs/changelog.md)
- [Commits](https://github.com/pypa/cibuildwheel/compare/v3.3.1...v3.4.0)

---
updated-dependencies:
- dependency-name: pypa/cibuildwheel
  dependency-version: 3.4.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <[email protected]>

* Use `build-frontend = "build[uv]"` for faster builds

* Revert "Use `build-frontend = "build[uv]"` for faster builds"

This reverts commit be5566bd2f.

---------

Signed-off-by: dependabot[bot] <[email protected]>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Khairul Azhar Kasmiran <[email protected]>
2026-03-09 22:16:08 +08:00
Khairul Azhar Kasmiran b378684805 Add branches filter to on: push: CI (#112) 2026-03-06 19:10:23 +08:00
Khairul Azhar Kasmiran 8aaf3011bd Update CI to windows-2022 (#110) 2026-03-05 22:04:26 +08:00
Khairul Azhar Kasmiran e0ec4912c1 Support typedef of typedef of a function pointer (#111) 2026-03-05 21:25:42 +08:00
dependabot[bot] f7c5a16028 Bump actions/download-artifact from 7 to 8 (#109)
Bumps [actions/download-artifact](https://github.com/actions/download-artifact) from 7 to 8.
- [Release notes](https://github.com/actions/download-artifact/releases)
- [Commits](https://github.com/actions/download-artifact/compare/v7...v8)

---
updated-dependencies:
- dependency-name: actions/download-artifact
  dependency-version: '8'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <[email protected]>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-03-03 22:14:56 +08:00
dependabot[bot] fc409dfa10 Bump actions/upload-artifact from 6 to 7 (#108)
Bumps [actions/upload-artifact](https://github.com/actions/upload-artifact) from 6 to 7.
- [Release notes](https://github.com/actions/upload-artifact/releases)
- [Commits](https://github.com/actions/upload-artifact/compare/v6...v7)

---
updated-dependencies:
- dependency-name: actions/upload-artifact
  dependency-version: '7'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <[email protected]>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-03-03 22:13:36 +08:00
Khairul Azhar Kasmiran 220d7a8405 Make bindings to rz_list_val() instead of rz_list_iter_get_data() (#107) 2026-02-11 23:56:50 +08:00
Khairul Azhar Kasmiran 6a7efaab4e rz_list_next: Simplify binding generation (#106) 2026-02-08 14:44:11 +08:00
Khairul Azhar Kasmiran 69302758c8 RzListIter.next: Use rz_list_next() macro instead (#105) 2026-02-05 22:19:13 +08:00
Khairul Azhar Kasmiran 3885561032 Add bindings for RZ_CORE_CMD_ constants (#104) 2026-02-02 19:23:51 +08:00
Khairul Azhar Kasmiran 6fe53b3f73 examples: Allow q to exit prompt loop (#103) 2026-02-01 13:15:01 +08:00
Khairul Azhar Kasmiran 0215843fa6 Remove -C . from CI rz-test invocation (#102) 2026-01-31 16:38:31 +08:00
Khairul Azhar Kasmiran d856543253 Show deprecated warning on stderr instead (#101) 2026-01-29 22:00:44 +08:00
Khairul Azhar Kasmiran ff0cc4a7f8 Add src/snippets_swig/ files to meson.build (#100) 2026-01-28 22:23:17 +08:00
dependabot[bot]andKhairul Azhar Kasmiran e8070500bf Bump fsfe/reuse-action from 1 to 6 (#98)
* Bump fsfe/reuse-action from 1 to 6

Bumps [fsfe/reuse-action](https://github.com/fsfe/reuse-action) from 1 to 6.
- [Release notes](https://github.com/fsfe/reuse-action/releases)
- [Commits](https://github.com/fsfe/reuse-action/compare/v1...v6)

---
updated-dependencies:
- dependency-name: fsfe/reuse-action
  dependency-version: '6'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <[email protected]>

* Upgrade to REUSE.toml

---------

Signed-off-by: dependabot[bot] <[email protected]>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Khairul Azhar Kasmiran <[email protected]>
2026-01-26 22:01:42 +08:00
dependabot[bot] 114bd35d25 Bump actions/upload-artifact from 4 to 6 (#99)
Bumps [actions/upload-artifact](https://github.com/actions/upload-artifact) from 4 to 6.
- [Release notes](https://github.com/actions/upload-artifact/releases)
- [Commits](https://github.com/actions/upload-artifact/compare/v4...v6)

---
updated-dependencies:
- dependency-name: actions/upload-artifact
  dependency-version: '6'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <[email protected]>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-01-26 19:28:05 +08:00
dependabot[bot]andKhairul Azhar Kasmiran 68e8cd3ad0 Bump pypa/cibuildwheel from 2.22.0 to 3.3.1 (#96)
* Bump pypa/cibuildwheel from 2.22.0 to 3.3.1

Bumps [pypa/cibuildwheel](https://github.com/pypa/cibuildwheel) from 2.22.0 to 3.3.1.
- [Release notes](https://github.com/pypa/cibuildwheel/releases)
- [Changelog](https://github.com/pypa/cibuildwheel/blob/main/docs/changelog.md)
- [Commits](https://github.com/pypa/cibuildwheel/compare/v2.22.0...v3.3.1)

---
updated-dependencies:
- dependency-name: pypa/cibuildwheel
  dependency-version: 3.3.1
  dependency-type: direct:production
  update-type: version-update:semver-major
...

* Pass `PATH` to `sudo`

---------

Signed-off-by: dependabot[bot] <[email protected]>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Khairul Azhar Kasmiran <[email protected]>
2026-01-25 20:48:54 +08:00
dependabot[bot] f51f476a5d Bump github/codeql-action from 2 to 4 (#97)
Bumps [github/codeql-action](https://github.com/github/codeql-action) from 2 to 4.
- [Release notes](https://github.com/github/codeql-action/releases)
- [Changelog](https://github.com/github/codeql-action/blob/main/CHANGELOG.md)
- [Commits](https://github.com/github/codeql-action/compare/v2...v4)

---
updated-dependencies:
- dependency-name: github/codeql-action
  dependency-version: '4'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <[email protected]>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-01-25 17:15:16 +08:00
dependabot[bot] b6d4757eba Bump actions/download-artifact from 3 to 7 (#94)
Bumps [actions/download-artifact](https://github.com/actions/download-artifact) from 3 to 7.
- [Release notes](https://github.com/actions/download-artifact/releases)
- [Commits](https://github.com/actions/download-artifact/compare/v3...v7)

---
updated-dependencies:
- dependency-name: actions/download-artifact
  dependency-version: '7'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <[email protected]>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-01-25 16:50:05 +08:00
dependabot[bot] dc1add8fc3 Bump actions/checkout from 3 to 6 (#93)
Bumps [actions/checkout](https://github.com/actions/checkout) from 3 to 6.
- [Release notes](https://github.com/actions/checkout/releases)
- [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md)
- [Commits](https://github.com/actions/checkout/compare/v3...v6)

---
updated-dependencies:
- dependency-name: actions/checkout
  dependency-version: '6'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <[email protected]>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-01-25 16:48:18 +08:00
dependabot[bot] 2610bd4b8e Bump pypa/gh-action-pypi-publish from 1.5.1 to 1.13.0 (#95)
Bumps [pypa/gh-action-pypi-publish](https://github.com/pypa/gh-action-pypi-publish) from 1.5.1 to 1.13.0.
- [Release notes](https://github.com/pypa/gh-action-pypi-publish/releases)
- [Commits](https://github.com/pypa/gh-action-pypi-publish/compare/v1.5.1...v1.13.0)

---
updated-dependencies:
- dependency-name: pypa/gh-action-pypi-publish
  dependency-version: 1.13.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <[email protected]>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-01-25 15:39:49 +08:00
Khairul Azhar Kasmiran f45f5687b1 Add Dependabot for GitHub Actions (#92) 2026-01-25 15:31:23 +08:00
Khairul Azhar Kasmiran 7e7a790d3c Add test for examples/1-rz_core.py (#91) 2026-01-24 17:25:28 +08:00
bubblepipe 8b6d71f3fd add support for alignment (#89) 2026-01-06 17:59:11 +08:00
Khairul Azhar Kasmiran 3f898ed6e6 Run CI on non-rizinorg pull requests (#88) 2026-01-03 00:33:10 +08:00
NOT XVilka 7cb30e15d1 lint: fix formatting (#87) 2026-01-02 23:52:23 +08:00
Khairul Azhar Kasmiran ae7bf29fbf Rename rz_list_iter_get_next() to rz_list_get_next() (#86) 2026-01-02 23:28:38 +08:00
Ayush adf1025286 Add Doxygen syntax linter checking for @ commands (#84) 2026-01-01 23:55:06 +08:00
Khairul Azhar Kasmiran e9fdf80685 Suppress pylint's invalid-name warning (#83) 2025-12-23 20:22:07 +08:00
Khairul Azhar Kasmiran 9fdba22e35 Rename rz_list_first(last) to rz_list_first(last)_val (#82) 2025-12-22 19:38:07 +08:00
Khairul Azhar Kasmiran 318cfbc9b3 Cleanup inclusion of linux/limits.h (#80) 2025-03-16 14:53:25 +08:00
Khairul Azhar Kasmiran 05ce528bc2 ci: Upgrade to Ubuntu 24.04 (Noble) (#79)
* ci: Upgrade to Ubuntu 24.04 (Noble)
* Remove `pip3 --break-system-packages`
* Use `-include linux/limits.h` for Alpine build
2025-03-14 20:18:43 +08:00
Giovanni d9b84f46e7 Fix compilation (#77)
* Fix compilation due defines being redefined
* Add support for TypeKind.FUNCTIONNOPROTO
2025-02-18 15:40:17 +08:00
Anton Kochkov fe8468ea29 ci: use corresponding rizin branch 2024-12-21 20:44:59 +08:00
Anton Kochkov 4e324800d8 ci: use corresponding rizin branch (#75) 2024-12-21 20:11:59 +08:00
Anton Kochkov eecc6bb442 ci/mypy: disable unnecessary warning (#73) 2024-12-21 18:57:35 +08:00
Khairul Azhar Kasmiran b93006e24b Use / instead of \\ in CMAKE_PREFIX_PATH for Windows (#72) 2024-12-21 18:33:10 +08:00
wargio f1dbe864e6 Ensure argument name never matches the function name 2024-12-20 21:51:55 +08:00
wargio 1723f6e06e Revert "Fix wrong check on nonnull args which are inner not outer."
This reverts commit c527db8fcb.
2024-12-20 21:51:55 +08:00
wargio c527db8fcb Fix wrong check on nonnull args which are inner not outer. 2024-12-20 19:47:10 +08:00
Anton Kochkov 918136cbc2 ci: support pip3 for python 3.12 and later 2024-12-20 19:47:10 +08:00
Anton Kochkov 84a9542c9e ci: use macOS 14 as macOS 12 is deprecated 2024-12-20 19:47:10 +08:00
Anton Kochkov b47d3071c2 Update pypa/cibuildwheel to 2.22.0 2024-12-20 19:47:10 +08:00
Anton Kochkov 66f06da3cf Remove lastline from RzCons bindings 2024-12-20 19:47:10 +08:00
29 changed files with 469 additions and 134 deletions

No files matched your search

+7
View File
@@ -0,0 +1,7 @@
version: 2
updates:
- package-ecosystem: github-actions
directory: "/"
schedule:
interval: "weekly"
+72 -15
View File
@@ -1,9 +1,19 @@
name: build
on:
push:
branches:
- dev
- stable
- 'ci-*'
pull_request:
workflow_dispatch:
workflow_call:
inputs:
external_call:
description: 'To distinguish workflow_call from regular push'
type: boolean
required: false
default: true
rizin_ref:
required: false
type: string
@@ -16,53 +26,95 @@ jobs:
strategy:
fail-fast: false
matrix:
os: [ubuntu-22.04, windows-2019, macos-12]
os: [ubuntu-24.04, windows-2022, macos-15]
steps:
- name: Checkout rz-bindgen
uses: actions/checkout@v4
- name: Install SWIG with Homebrew
if: matrix.os == 'macos-15' && matrix.enabled
run: brew install swig
- name: Checkout rz-bindgen
uses: actions/checkout@v7
# runned only from workflow_call
- name: Checkout rizin
uses: actions/checkout@v4
if: ${{ inputs.external_call }}
uses: actions/checkout@v7
with:
repository: rizinorg/rizin
path: rizin
ref: ${{ inputs.rizin_ref }}
- name: Checkout rizin (stable)
if: ${{ !inputs.external_call && ((github.ref_name == 'stable') || (github.base_ref == 'stable')) }}
uses: actions/checkout@v7
with:
repository: rizinorg/rizin
path: rizin
ref: stable
- name: Checkout rizin (dev)
if: ${{ !inputs.external_call && ((github.ref_name != 'stable') && (github.base_ref != 'stable')) }}
uses: actions/checkout@v7
with:
repository: rizinorg/rizin
path: rizin
ref: dev
- name: Build rz-bindgen
uses: pypa/cibuildwheel@v2.17.0
uses: pypa/cibuildwheel@v4.3.5
- name: Upload sdist
uses: actions/upload-artifact@v4
uses: actions/upload-artifact@v7
with:
name: sdist-${{ matrix.os }}
path: dist/*.tar.gz
- name: Upload wheels
uses: actions/upload-artifact@v4
uses: actions/upload-artifact@v7
with:
name: wheels-${{ matrix.os }}
path: wheelhouse/*.whl
ubuntu-default-llvm:
runs-on: ubuntu-22.04
runs-on: ubuntu-24.04
steps:
- name: Checkout rz-bindgen
uses: actions/checkout@v4
uses: actions/checkout@v7
with:
path: rz-bindgen
# runned only from workflow_call
- name: Checkout rizin
uses: actions/checkout@v4
if: ${{ inputs.external_call }}
uses: actions/checkout@v7
with:
repository: rizinorg/rizin
path: rizin
ref: ${{ inputs.rizin_ref }}
- name: Checkout rizin (stable)
if: ${{ !inputs.external_call && ((github.ref_name == 'stable') || (github.base_ref == 'stable')) }}
uses: actions/checkout@v7
with:
repository: rizinorg/rizin
path: rizin
ref: stable
- name: Checkout rizin (dev)
if: ${{ !inputs.external_call && ((github.ref_name != 'stable') && (github.base_ref != 'stable')) }}
uses: actions/checkout@v7
with:
repository: rizinorg/rizin
path: rizin
ref: dev
- name: Install dependencies
run: |
sudo apt update
sudo apt-get --assume-yes install cmake swig pkg-config clang libclang-dev llvm wget unzip python3-wheel python3-setuptools build-essential python3-pip && sudo pip3 install meson ninja
sudo apt-get --assume-yes install cmake swig pkg-config clang libclang-dev llvm wget unzip python3-wheel python3-setuptools build-essential python3-pip
sudo pip3 install meson ninja
- name: Install rizin
run: |
@@ -80,7 +132,12 @@ jobs:
- name: Test python lang plugin
run: rizin -qc "Ll" | grep "Python SWIG"
- name: Test rizin.py
run: |
echo "import rizin" > testimport.py
python3 testimport.py
- name: Checkout our Testsuite Binaries
uses: actions/checkout@v7
with:
repository: rizinorg/rizin-testbins
path: rz-bindgen/test/bins
- name: Run rz-test
run: rz-test -L db/examples
working-directory: rz-bindgen/test
+17 -11
View File
@@ -1,25 +1,31 @@
name: lint
on: push
on:
push:
branches:
- dev
- stable
- 'ci-*'
pull_request:
jobs:
licenses:
runs-on: ubuntu-22.04
runs-on: ubuntu-24.04
steps:
- name: Checkout rz-bindgen
uses: actions/checkout@v3
uses: actions/checkout@v7
- name: REUSE compliance check
uses: fsfe/reuse-action@v1
uses: fsfe/reuse-action@v6
python:
runs-on: ubuntu-22.04
runs-on: ubuntu-24.04
steps:
- name: Checkout rz-bindgen
uses: actions/checkout@v3
uses: actions/checkout@v7
- name: Install tools
run: |
pip install mypy pyflakes pylint black
- name: Run mypy
run: |
mypy src/main.py
mypy --disable-error-code misc src/main.py
if: ${{ always() }}
- name: Run pyflakes
run: |
@@ -35,15 +41,15 @@ jobs:
if: ${{ always() }}
codeql:
runs-on: ubuntu-22.04
runs-on: ubuntu-24.04
permissions:
security-events: write
steps:
- name: Checkout rz-bindgen
uses: actions/checkout@v3
uses: actions/checkout@v7
- name: Initialize CodeQL
uses: github/codeql-action/init@v2
uses: github/codeql-action/init@v4
with:
languages: python
- name: Run CodeQL
uses: github/codeql-action/analyze@v2
uses: github/codeql-action/analyze@v4
+5 -5
View File
@@ -7,7 +7,7 @@ on:
jobs:
extract-rizin-version:
runs-on: ubuntu-22.04
runs-on: ubuntu-24.04
outputs:
rizin_version: ${{ steps.extract_version.outputs.result }}
steps:
@@ -21,20 +21,20 @@ jobs:
rizin_ref: ${{ needs.extract-rizin-version.outputs.rizin_version }}
publish-pypi:
runs-on: ubuntu-22.04
runs-on: ubuntu-24.04
needs: [build]
steps:
- name: Download artifacts
uses: actions/download-artifact@v3
uses: actions/download-artifact@v8
with:
name: wheels
path: dist
- name: Download sdist
uses: actions/download-artifact@v3
uses: actions/download-artifact@v8
with:
name: sdist
path: dist
- name: Publish wheels
uses: pypa/gh-action-pypi-publish@v1.5.1
uses: pypa/gh-action-pypi-publish@v1.14.3
with:
password: ${{ secrets.PYPI_TOKEN }}
-32
View File
@@ -1,32 +0,0 @@
Format: https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/
Upstream-Name: rz-bindgen
Upstream-Contact: wingdeans <[email protected]>
Source: https://github.com/rizinorg/rz-bindgen/
Files: src/clang/__init__.py src/clang/cindex.py src/clang/enumerations.py
Copyright: 2022 The LLVM Project
License: Apache-2.0 WITH LLVM-exception
Files: src/snippets_swig/*
Copyright: 2022 wingdeans <[email protected]>
License: LGPL-3.0-only
Files: .github/workflows/* .gitignore README.md src/README.md
Copyright: 2022 wingdeans <[email protected]>
License: LGPL-3.0-only
Files: meson.build plugin/meson.build meson_options.txt
Copyright: 2022 wingdeans <[email protected]>
License: LGPL-3.0-only
Files: pyproject.toml mypy.ini pylintrc
Copyright: 2022 wingdeans <[email protected]>
License: LGPL-3.0-only
Files: cutter/PythonConsole.ui cutter/CMakeLists.txt .clang-format
Copyright: 2022 wingdeans <[email protected]>
License: LGPL-3.0-only
Files: doc/*.md
Copyright: 2022 wingdeans <[email protected]>
License: LGPL-3.0-only
+64
View File
@@ -0,0 +1,64 @@
version = 1
SPDX-PackageName = "rz-bindgen"
SPDX-PackageSupplier = "wingdeans <[email protected]>"
SPDX-PackageDownloadLocation = "https://github.com/rizinorg/rz-bindgen/"
[[annotations]]
path = ["src/clang/__init__.py", "src/clang/cindex.py", "src/clang/enumerations.py"]
precedence = "aggregate"
SPDX-FileCopyrightText = "2022 The LLVM Project"
SPDX-License-Identifier = "Apache-2.0 WITH LLVM-exception"
[[annotations]]
path = "src/snippets_swig/**"
precedence = "aggregate"
SPDX-FileCopyrightText = "2022 wingdeans <[email protected]>"
SPDX-License-Identifier = "LGPL-3.0-only"
[[annotations]]
path = [".github/workflows/**", ".gitignore", "README.md", "src/README.md"]
precedence = "aggregate"
SPDX-FileCopyrightText = "2022 wingdeans <[email protected]>"
SPDX-License-Identifier = "LGPL-3.0-only"
[[annotations]]
path = ["meson.build", "plugin/meson.build", "meson_options.txt"]
precedence = "aggregate"
SPDX-FileCopyrightText = "2022 wingdeans <[email protected]>"
SPDX-License-Identifier = "LGPL-3.0-only"
[[annotations]]
path = ["pyproject.toml", "mypy.ini", "pylintrc"]
precedence = "aggregate"
SPDX-FileCopyrightText = "2022 wingdeans <[email protected]>"
SPDX-License-Identifier = "LGPL-3.0-only"
[[annotations]]
path = ["cutter/PythonConsole.ui", "cutter/CMakeLists.txt", ".clang-format"]
precedence = "aggregate"
SPDX-FileCopyrightText = "2022 wingdeans <[email protected]>"
SPDX-License-Identifier = "LGPL-3.0-only"
[[annotations]]
path = "doc/**.md"
precedence = "aggregate"
SPDX-FileCopyrightText = "2022 wingdeans <[email protected]>"
SPDX-License-Identifier = "LGPL-3.0-only"
[[annotations]]
path = "test/db/**"
precedence = "aggregate"
SPDX-FileCopyrightText = "2026 RizinOrg <[email protected]>"
SPDX-License-Identifier = "LGPL-3.0-only"
[[annotations]]
path = "test/.gitignore"
precedence = "aggregate"
SPDX-FileCopyrightText = "2026 RizinOrg <[email protected]>"
SPDX-License-Identifier = "LGPL-3.0-only"
[[annotations]]
path = ".github/**"
precedence = "aggregate"
SPDX-FileCopyrightText = "2026 RizinOrg <[email protected]>"
SPDX-License-Identifier = "LGPL-3.0-only"
+19 -8
View File
@@ -4,23 +4,30 @@
set -ex
# Install deps
pip3 install meson ninja meson-python build
pygt311=$(python3 -c 'import sys; print(0) if sys.version_info.minor > 11 else print(1)' 2>&1)
if [[ $pygt311 == '0' ]]; then
pip3 install --break-system-packages meson ninja meson-python build
else
pip3 install meson ninja meson-python build
fi
if command -v apt; then
if command -v brew; then
brew install --require-sha swig
elif command -v apt; then
set +e
grep VERSION_CODENAME=stretch /etc/os-release >/dev/null 2>/dev/null
if [[ $? == 0 ]] ; then
# Required because manylinux_2_24 uses Debian Stretch and the repos are not available anymore
# Required because manylinux_2_24 uses Debian Stretch and the repos are not available anymore
echo "deb http://archive.debian.org/debian stretch main" > /etc/apt/sources.list
echo "deb http://archive.debian.org/debian-security stretch/updates main" >> /etc/apt/sources.list
echo "Acquire::Check-Valid-Until no;" > /etc/apt/apt.conf.d/99no-check-valid-until
fi
set -e
apt update && apt install --assume-yes libclang-7-dev clang-7 llvm-7
apt update && apt install --assume-yes libclang-7-dev clang-7 llvm-7 sudo
elif command -v apk; then
apk update && apk add clang-dev
apk update && apk add clang-dev sudo
elif command -v yum; then
yum -y install llvm-toolset-7.0 llvm-toolset-7.0-llvm-devel
yum -y install llvm-toolset-7.0 llvm-toolset-7.0-llvm-devel sudo
# (CentOS 7) Uncomment following lines to see required paths in build log:
# yum -y install centos-release-scl
# source scl_source enable llvm-toolset-7.0 || true
@@ -28,13 +35,17 @@ fi
pushd rizin
if [[ "$OSTYPE" =~ msys* ]]; then
if [[ "$OSTYPE" =~ msys|cygwin ]]; then
meson setup --buildtype=release --prefix='c:/rizin' --vsenv build
meson install -C build
else
if [[ "$OSTYPE" == linux* ]]; then
export CFLAGS="-include linux/limits.h"
fi
meson setup --buildtype=release --libdir=lib build
sudo PATH="$PATH" bash -c "meson install -C build"
fi
meson install -C build
popd
if command -v apt; then
+3 -3
View File
@@ -29,12 +29,12 @@ builder.enable_load_buffer = True
plugin = builder.build(CustomBinPlugin())
```
`RzBinPluginBuilder::build` returns an `RzBinPlugin` struct which has the enabled function pointers set to custom C functions which call into the currently active director. Enabling functions is done using variables on the builder which are named the same as their corresponding struct function pointer prefixed with `enable_`. To use the plugin, simply append the struct to `core.bin.plugins`.
`RzBinPluginBuilder::build` returns an `RzBinPlugin` struct which has the enabled function pointers set to custom C functions which call into the currently active director. Enabling functions is done using variables on the builder which are named the same as their corresponding struct function pointer prefixed with `enable_`. To use the plugin, simply add the plugin to `core.bin`.
```py
core = rizin.RzCore()
plugin.thisown = False
core.bin.plugins.append(plugin)
core.bin.plugin_add(plugin)
```
Now it is possible to see the `SWIGCustom` plugin when listing the binary plugins with `iL`:
@@ -72,7 +72,7 @@ plugin, plugin_struct = rizin.register_RzBinPlugin(CustomBinPlugin)
core = rizin.RzCore()
plugin_struct.thisown = False
core.bin.plugins.append(plugin_struct)
core.bin.plugin_add(plugin_struct)
# Run rizin and load binary
core.bin.force_plugin(plugin.name)
+5 -3
View File
@@ -50,6 +50,7 @@ In the SWIG bindings, these functions are mapped to methods of RzCore.
```py
import rizin
from rizin import RZ_CORE_CMD_EXIT as CMD_EXIT
from sys import argv
filename = argv[1]
@@ -66,8 +67,8 @@ for i, corefile in enumerate(core.files):
for binfile in corefile.binfiles:
print(f" * {binfile.file}")
while True:
core.flush(input("rizin> "))
while core.flush(input("rizin> ")) != CMD_EXIT:
pass
```
Here's an example session:
@@ -86,10 +87,11 @@ rizin> aaa
[x] Applied 0 FLIRT signatures via sigdb
[x] Propagate noreturn information
[x] Use -AA or aaaa to perform additional experimental analysis.
> afl
rizin> afl
0x0040233e 1 6 entry0
0x00402051 3 49 -> 16 sym.HelloWorld::Main
0x0040205f 99 24482 -> 31854 sym.HelloWorld::.ctor
rizin> q
```
### Plugins
+3 -2
View File
@@ -4,6 +4,7 @@ SPDX-License-Identifier: LGPL-3.0-only
"""
import rizin
from rizin import RZ_CORE_CMD_EXIT as CMD_EXIT
from sys import argv
filename = argv[1]
@@ -20,5 +21,5 @@ for i, corefile in enumerate(core.files):
for binfile in corefile.binfiles:
print(f" * {binfile.file}")
while True:
core.flush(input("rizin> "))
while core.flush(input("rizin> ")) != CMD_EXIT:
pass
+5 -5
View File
@@ -8,11 +8,10 @@ SPDX-License-Identifier: LGPL-3.0-only
# things, see `2b-rz_bin_plugin.py`
import rizin
from rizin import RZ_CORE_CMD_EXIT as CMD_EXIT
import sys
import rizin
class CustomBinPlugin(rizin.RzBinPluginDirector):
def __init__(self):
super().__init__()
@@ -23,6 +22,7 @@ class CustomBinPlugin(rizin.RzBinPluginDirector):
print("size: ", bf.size)
return True
# Construct the director
builder = rizin.RzBinPluginBuilder()
builder.name = "SWIGCustom"
@@ -30,11 +30,11 @@ builder.enable_load_buffer = True
plugin = builder.build(CustomBinPlugin())
core = rizin.RzCore()
core.bin.plugins.append(plugin)
core.bin.plugin_add(plugin)
# Run rizin and load binary
core.bin.force_plugin(plugin.name)
core.file_open_load(sys.argv[1])
while True:
core.flush(input("> "))
while core.flush(input("rizin> ")) != CMD_EXIT:
pass
+4 -3
View File
@@ -4,6 +4,7 @@ SPDX-License-Identifier: LGPL-3.0-only
"""
import rizin
from rizin import RZ_CORE_CMD_EXIT as CMD_EXIT
import sys
@@ -20,11 +21,11 @@ plugin, plugin_struct = rizin.register_RzBinPlugin(CustomBinPlugin)
core = rizin.RzCore()
plugin_struct.thisown = False
core.bin.plugins.append(plugin_struct)
core.bin.plugin_add(plugin_struct)
# Run rizin and load binary
core.bin.force_plugin(plugin.name)
core.file_open_load(sys.argv[1])
while True:
core.flush(input("> "))
while core.flush(input("rizin> ")) != CMD_EXIT:
pass
+5
View File
@@ -89,6 +89,11 @@ if target_swig or target_sphinx
'src/lint.py',
'src/main.py',
'src/writer.py',
'src/snippets_swig/cmd_director.i',
'src/snippets_swig/iterators.py',
'src/snippets_swig/prologue.i',
'src/snippets_swig/register_command.py',
'src/snippets_swig/register_swig_command.cpp',
)
bindgen_outputs = custom_target(
+7
View File
@@ -2,6 +2,13 @@
// SPDX-License-Identifier: LGPL-3.0-only
#include <Python.h>
/**
* Some defines in rz_userconf.h are conflicting with the ones in python.h
**/
#undef HAVE_EXPLICIT_BZERO
#undef HAVE_SIGACTION
#undef HAVE_REALPATH
#include <rz_core.h>
#include <rz_util/rz_file.h>
#include <swig_runtime.h>
+1
View File
@@ -16,6 +16,7 @@ def install_files(scheme):
elif file.endswith(".so"):
dest_type = 'platlib'
install_dir = sysconfig.get_path(dest_type, scheme)
os.makedirs(install_dir, exist_ok=True)
shutil.copy(file, install_dir)
print(f"Installing {os.path.basename(file)} to {install_dir}")
+5 -2
View File
@@ -19,13 +19,16 @@ environment = { PATH="/opt/rh/llvm-toolset-7.0/root/usr/bin:/opt/rh/llvm-toolset
archs = ["x86_64"]
[tool.cibuildwheel.windows]
environment = { CMAKE_PREFIX_PATH="C:\\rizin" }
environment = { CMAKE_PREFIX_PATH="C:/rizin", PATH="C:/rizin/bin;$PATH" }
archs = ["AMD64"]
[tool.cibuildwheel.macos]
environment = { PATH="/opt/homebrew/bin:$PATH", MACOSX_DEPLOYMENT_TARGET="15.0" }
[project]
name = "rz-bindings"
dynamic = [
'version',
]
requires-python = ">=3.8"
requires-python = ">=3.9"
readme = "README.md"
+9 -1
View File
@@ -29,6 +29,7 @@ class Generic:
specializations: Set[str]
c_methods: OrderedDict[str, List[str]]
python_methods: OrderedDict[str, List[str]]
specialization_extensions: DefaultDict[str, List[str]]
@@ -49,6 +50,7 @@ class Generic:
self.methods = OrderedDict()
self.specializations = set()
self.c_methods = OrderedDict()
self.python_methods = OrderedDict()
self.specialization_extensions = DefaultDict(list)
@@ -131,9 +133,15 @@ class Generic:
return specialization
def add_c_method(self, name: str, *lines: str) -> None:
"""
Add C method for name
"""
self.c_methods[name] = list(lines)
def add_python_method(self, decl: str, *lines: str) -> None:
"""
Add python function with decl
Add python method with decl
"""
self.python_methods[decl] = [f"def {decl}:"] + [f" {line}" for line in lines]
+11 -3
View File
@@ -42,11 +42,19 @@ def gen_ctype_specializations(cursors: List[Cursor], ctype: CType) -> None:
# eg. typedef RzVector /*<ut64>*/ (*func)(void)
gen_ctype_specializations(cursors + [ctype.cursor], ctype.canonical)
elif isinstance(ctype, CFunctionType):
cursor_children = list(cursors[-1].get_children())
# Handle typedef of typedef of a function pointer
while (
len(cursor_children) == 1 and cursor_children[0].kind == CursorKind.TYPE_REF
):
cursor_children = list(
cursor_children[0].referenced.get_children() # type: ignore[attr-defined]
)
gen_ctype_specializations(cursors, ctype.result)
cursor_args = [
cursor
for cursor in cursors[-1].get_children()
if cursor.kind == CursorKind.PARM_DECL
cursor for cursor in cursor_children if cursor.kind == CursorKind.PARM_DECL
]
assert len(cursor_args) == len(ctype.args)
+26 -13
View File
@@ -63,15 +63,15 @@ def bind_list(list_h: Header) -> None:
"""
### RzListIter ###
rz_list_iter = Generic(list_h, "RzListIter", pointer=True)
rz_list_iter.add_method("rz_list_iter_get_next", rename="next", generic_ret=True)
rz_list_iter.add_method("rz_list_iter_get_data", rename="data", generic_ret=True)
rz_list_iter.add_method("rz_list_next", rename="next", generic_ret=True)
rz_list_iter.add_method("rz_list_val", rename="data", generic_ret=True)
### RzList ###
rz_list = Generic(list_h, "RzList", dependencies=[rz_list_iter], pointer=True)
rz_list.add_method("rz_list_length", rename="length")
rz_list.add_method("rz_list_first", rename="first", generic_ret=True)
rz_list.add_method("rz_list_last", rename="last", generic_ret=True)
rz_list.add_method("rz_list_first_val", rename="first", generic_ret=True)
rz_list.add_method("rz_list_last_val", rename="last", generic_ret=True)
rz_list.add_method("rz_list_iterator", rename="iterator", generic_ret=True)
rz_list.add_method(
@@ -150,8 +150,7 @@ def bind_analysis(analysis_h: Header) -> None:
rz_analysis = Class(
analysis_h,
typedef="RzAnalysis",
ignore_fields={"leaddrs"},
rename_fields={},
struct="rz_analysis_t",
)
rz_analysis_function = Class(analysis_h, typedef="RzAnalysisFunction")
@@ -159,12 +158,10 @@ def bind_analysis(analysis_h: Header) -> None:
rz_analysis_function.add_prefixed_methods("rz_analysis_function_")
rz_analysis.add_method("rz_analysis_reflines_get", rename="get_reflines")
rz_analysis.add_prefixed_methods("rz_analysis_")
rz_analysis.add_prefixed_funcs("rz_analysis_")
rz_analysis.add_constructor("rz_analysis_new")
rz_analysis.add_destructor("rz_analysis_free")
Class(analysis_h, typedef="RzAnalysisBlock")
Class(analysis_h, typedef="RzAnalysisEsil")
Class(analysis_h, typedef="RzAnalysisEsilInterState")
Class(analysis_h, typedef="RzAnalysisBlock", struct="rz_analysis_bb_t")
Class(analysis_h, typedef="RzAnalysisPlugin")
Class(
@@ -180,7 +177,13 @@ def bind_asm(asm_h: Header) -> None:
"""
RzAsm
"""
Class(asm_h, typedef="RzAsm") # TODO: Add functions
rz_asm = Class(asm_h, typedef="RzAsm", struct="rz_asm_t") # TODO: Add functions
rz_asm.add_constructor("rz_asm_new")
rz_asm.add_destructor("rz_asm_free")
rz_asm.add_prefixed_methods("rz_asm_")
rz_asm.add_prefixed_funcs("rz_asm_")
Class(asm_h, typedef="RzAsmPlugin")
@@ -258,7 +261,6 @@ def bind_cons(cons_h: Header) -> None:
typedef="RzCons",
ignore_fields={"term_raw", "term_buf"}, # struct termios
rename_fields={
"lastline": "_lastline",
"echo": "_echo",
"highlight": "_highlight",
"newline": "_newline",
@@ -328,6 +330,17 @@ def bind_core(core_h: Header) -> None:
Class(core_h, typedef="RzCoreFile")
MacroEnum(core_h, prefix="RZ_CORE_CMD_")
@threaded_header("rz_esil/rz_esil.h")
def bind_esil(esil_h: Header) -> None:
"""
RzAnalysisEsil
"""
Class(esil_h, typedef="RzAnalysisEsil")
Class(esil_h, typedef="RzAnalysisEsilInterState")
@threaded_header("rz_flag.h")
def bind_flag(flag_h: Header) -> None:
+2 -2
View File
@@ -2224,7 +2224,7 @@ class Type(Structure):
return result
assert self.kind == TypeKind.FUNCTIONPROTO
assert self.kind in (TypeKind.FUNCTIONPROTO, TypeKind.FUNCTIONNOPROTO)
return ArgumentsIterator(self)
@property
@@ -2320,7 +2320,7 @@ class Type(Structure):
def is_function_variadic(self):
"""Determine whether this function Type is a variadic function type."""
assert self.kind == TypeKind.FUNCTIONPROTO
assert self.kind in (TypeKind.FUNCTIONPROTO, TypeKind.FUNCTIONNOPROTO)
return conf.lib.clang_isFunctionTypeVariadic(self)
+15 -14
View File
@@ -38,6 +38,7 @@ class TypeKind(Enum):
POINTER: TypeKind
CONSTANTARRAY: TypeKind
FUNCTIONPROTO: TypeKind
FUNCTIONNOPROTO: TypeKind
INCOMPLETEARRAY: TypeKind
RECORD: TypeKind
@@ -109,23 +110,23 @@ class Token:
extent: SourceRange
class CursorKind(Enum):
INCLUSION_DIRECTIVE: TypeKind
MACRO_INSTANTIATION: TypeKind
INCLUSION_DIRECTIVE: CursorKind
MACRO_INSTANTIATION: CursorKind
ENUM_DECL: TypeKind
MACRO_DEFINITION: TypeKind
STRUCT_DECL: TypeKind
TYPEDEF_DECL: TypeKind
FUNCTION_DECL: TypeKind
ENUM_DECL: CursorKind
MACRO_DEFINITION: CursorKind
STRUCT_DECL: CursorKind
TYPEDEF_DECL: CursorKind
FUNCTION_DECL: CursorKind
FIELD_DECL: TypeKind
UNION_DECL: TypeKind
PARM_DECL: TypeKind
ENUM_CONSTANT_DECL: TypeKind
FIELD_DECL: CursorKind
UNION_DECL: CursorKind
PARM_DECL: CursorKind
ENUM_CONSTANT_DECL: CursorKind
ANNOTATE_ATTR: TypeKind
TYPE_REF: TypeKind
PACKED_ATTR: TypeKind
ANNOTATE_ATTR: CursorKind
TYPE_REF: CursorKind
PACKED_ATTR: CursorKind
class Cursor:
kind: CursorKind
+1 -1
View File
@@ -76,7 +76,7 @@ class CFunc(AttrCursor):
### Configuration ###
rizin_include_path: Optional[str] = None
rizin_include_path: Optional[str] = None # pylint: disable=invalid-name
clang_args: List[str] = []
### Headers ###
+1 -1
View File
@@ -123,7 +123,7 @@ def wrap_type(type_: Type) -> CType:
cursor=type_.get_declaration(),
)
if type_.kind == TypeKind.FUNCTIONPROTO:
if type_.kind in (TypeKind.FUNCTIONPROTO, TypeKind.FUNCTIONNOPROTO):
return CFunctionType(
orig_type,
result=wrap_type(type_.get_result()),
+1 -1
View File
@@ -39,7 +39,7 @@ from binding_func import Func
from writer import Writer
doxygen_path: Optional[str] = None
doxygen_path: Optional[str] = None # pylint: disable=invalid-name
DoxygenElements = Dict[str, Element]
+8
View File
@@ -114,6 +114,9 @@ def write_generic(writer: Writer, generic: Generic) -> None:
for name, method in generic.methods.items():
write_func(writer, method, name, FuncKind.GENERIC)
for c_lines in generic.c_methods.values():
writer.line(*c_lines)
for python_lines in generic.python_methods.values():
writer.line("%pythoncode %{")
with writer.indent():
@@ -265,6 +268,11 @@ def write_func(writer: Writer, func: Func, name: str, kind: FuncKind) -> None:
if arg_name == "self":
arg_name = "_self"
# if function arg is the same as the function name
# we rename the argument
if arg_name == name:
arg_name += "_arg"
arg_decl = stringify_decl(
arg_name,
arg.ctype,
+122 -5
View File
@@ -30,9 +30,11 @@ import os
import sys
import json
import shlex
import re
from argparse import ArgumentParser
from dataclasses import dataclass
from itertools import zip_longest
from pathlib import Path
from clang.cindex import (
Config,
@@ -44,6 +46,30 @@ from clang.cindex import (
SourceLocation,
)
# Detect /** ... */ or /*! ... */ style Doxygen block comments
_DOXY_BLOCK_RE = re.compile(r"/\*[*!][\s\S]*?\*/")
# Detect consecutive /// or //! style Doxygen line comments
_DOXY_LINE_RE = re.compile(r"(?:(?:\/\/[\/!])[^\n]*\n?)+")
# Match any @-prefixed Doxygen command with word boundary
_DOXY_COMMAND_RE = re.compile(r"@(\w+)\b")
# Map of @-prefixed commands to their correct backslash equivalents
_DOXY_COMMANDS = {
"param": "\\param",
"return": "\\return",
"brief": "\\brief",
"ref": "\\ref",
"p": "\\p",
"see": "\\see",
"file": "\\file",
"ingroup": "\\ingroup",
"post": "\\post",
"sa": "\\sa",
"test": "\\test",
}
warnings = set()
@@ -57,6 +83,14 @@ def warn(warning: str) -> None:
warnings.add(warning)
def location_get_filename(location: SourceLocation) -> str:
"""
Get filename for a SourceLocation
"""
path = Path(os.path.abspath(location.file.name))
return path.name
def stringify_location(location: SourceLocation) -> str:
"""
Get <relpath:filename:line> for a SourceLocation
@@ -76,7 +110,25 @@ def cursor_get_annotations(cursor: Cursor) -> List[str]:
]
generic_types = {"RzList", "RzListIter", "RzPVector", "RzVector", "RzGraph"}
generic_types = {
"RzList",
"RzListIter",
"RzPVector",
"RzVector",
"RzGraph",
"HtPP",
"RzThreadRingBuf",
"RzThreadQueue",
}
skip_files = {
"ht_inc.c",
"ht_inc.h",
"rz_th_ht.h",
"rz_th.h",
"thread_hash_table.c",
"thread_queue.c",
"thread_ring_buf.c",
}
def cursor_get_comment(cursor: Cursor, *, packed: bool = False) -> Optional[str]:
@@ -136,7 +188,10 @@ def cursor_get_comment(cursor: Cursor, *, packed: bool = False) -> Optional[str]
# Filter out other tokens
comment = token.spelling
if not comment.startswith("/*") or not comment.endswith("*/"):
if typeref_spelling in generic_types:
if (
typeref_spelling in generic_types
and location_get_filename(cursor.location) not in skip_files
):
warn(
f"Missing type comment at {stringify_location(cursor.location)} "
"(token is not a comment)"
@@ -152,20 +207,34 @@ def cursor_get_comment(cursor: Cursor, *, packed: bool = False) -> Optional[str]
return comment
# Check pointer (or lack of) and space between pointer
if typeref_spelling in {"RzList", "RzListIter", "RzPVector", "RzGraph"}:
if typeref_spelling in {"RzList", "RzListIter", "RzPVector", "RzThreadQueue"}:
if comment[-2] != "*":
warn(f"Type comment at {stringify_location(cursor.location)} lacks pointer")
elif comment[-3] != " ":
warn(
f"Type comment at {stringify_location(cursor.location)} lacks space between pointer"
)
elif typeref_spelling in {"RzVector"}:
elif typeref_spelling in {"RzVector", "RzThreadRingBuf"}:
if comment[-2] == "*":
warn(
f"Type comment at {stringify_location(cursor.location)} should not have pointer"
)
elif typeref_spelling in {"RzGraph", "HtPP"}:
if not re.match(
r"<(struct |const )?[A-Za-z0-9_]+ \*, (struct |const )?[A-Za-z0-9_]+ \*>",
comment,
):
if typeref_spelling == "RzGraph":
warn(
f"Type comment at {stringify_location(cursor.location)} must "
f"follow exactly the pattern '/*<NodeType *, EdgeType *>*/'. Is: '{comment}'"
)
elif typeref_spelling == "HtPP":
warn(
f"Type comment at {stringify_location(cursor.location)} must "
f"follow exactly the pattern '/*<KeyType *, ValueType *>*/'. Is: '{comment}'"
)
elif typeref_spelling in {
"HtPP",
"HtUP",
"HtUU",
"HtPU",
@@ -265,6 +334,51 @@ class Function:
)
def check_doxygen_syntax(file_path: str, rizin_path: str) -> None:
"""
Check for incorrect Doxygen syntax in a file.
Rizin uses backslash syntax (\\param, \\return, etc.)
instead of at-sign syntax (@param, @return, etc.).
This function scans Doxygen comment blocks and reports any @-prefixed command usage.
"""
if not (file_path.endswith(".c") or file_path.endswith(".h")):
return
try:
with open(file_path, "r", encoding="utf-8", errors="ignore") as f:
content = f.read()
except (OSError, IOError):
return
relpath = os.path.relpath(os.path.abspath(file_path), rizin_path)
comment_matches = list(_DOXY_BLOCK_RE.finditer(content)) + list(
_DOXY_LINE_RE.finditer(content)
)
comment_matches.sort(key=lambda m: m.start())
for match in comment_matches:
block_text = match.group(0)
block_start_pos = match.start()
line_offset = content[:block_start_pos].count("\n")
lines = block_text.splitlines()
for line_idx, line in enumerate(lines):
for cmd_match in _DOXY_COMMAND_RE.finditer(line):
command = cmd_match.group(1).lower()
if command in _DOXY_COMMANDS:
line_num = line_offset + line_idx + 1
column = cmd_match.start() + 1
correct_syntax = _DOXY_COMMANDS[command]
warn(
f"<{relpath}:{line_num}:{column}> "
f"Found @{command}, should use {correct_syntax}"
)
def check_translation_unit(
translation_unit: TranslationUnit, *, skipped_paths: Set[str], rizin_path: str
) -> None:
@@ -309,6 +423,7 @@ def check_translation_unit(
CursorKind.STRUCT_DECL,
CursorKind.UNION_DECL,
CursorKind.ENUM_DECL,
CursorKind.ALIGNED_ATTR,
]:
warn(f"Unknown field cursor kind: {field.kind}")
@@ -385,6 +500,8 @@ def main() -> int:
for include in includes
]
check_doxygen_syntax(abspath, rizin_path)
try:
check_translation_unit(
TranslationUnit.from_source(abspath, clang_args),
+8 -4
View File
@@ -9,16 +9,20 @@ bool rizin_warn_deprecate_instructions = true;
%{
void rizin_try_warn_deprecate(const char *name, const char *c_name) {
if (rizin_warn_deprecate) {
printf("Warning: `%s` calls deprecated function `%s`\n", name, c_name);
fprintf(stderr, "Warning: `%s` calls deprecated function `%s`\n", name, c_name);
if (rizin_warn_deprecate_instructions) {
puts("To disable this warning, set rizin_warn_deprecate to false");
puts("The way to do this depends on the SWIG language being used");
puts("For python, do `rizin.cvar.rizin_warn_deprecate = False`");
fprintf(stderr,
"To disable this warning, set rizin_warn_deprecate to false\n"
"The way to do this depends on the SWIG language being used\n"
"For python, do `rizin.cvar.rizin_warn_deprecate = False`\n");
}
}
}
%}
// uint64_t, int64_t etc
%include <stdint.i>
// Buffer typemaps
%include <pybuffer.i>
%pybuffer_mutable_binary(unsigned char *buf, unsigned long long len);
+1
View File
@@ -0,0 +1 @@
/bins
+42
View File
@@ -0,0 +1,42 @@
NAME=1-rz_core.py =
FILE=--
CMDS=<<EOF
!echo q | python3 ../examples/1-rz_core.py =
echo
EOF
EXPECT=<<EOF
Loaded 1 file(s)
Corefile #1 has 1 binfile(s)
* malloc://512
rizin>
EOF
EXPECT_ERR=
RUN
NAME=2a-rz_bin_plugin.py
FILE=--
CMDS=<<EOF
!echo q | python3 ../examples/2a-rz_bin_plugin.py bins/elf/analysis/ls-linux64
echo
EOF
EXPECT=<<EOF
name: bins/elf/analysis/ls-linux64
size: 121584
rizin>
EOF
EXPECT_ERR=
RUN
NAME=2b-rz_bin_plugin.py
FILE=--
CMDS=<<EOF
!echo q | python3 ../examples/2b-rz_bin_plugin.py bins/pe/hello_world_arm/hello_world_arm64.exe
echo
EOF
EXPECT=<<EOF
name: bins/pe/hello_world_arm/hello_world_arm64.exe
size: 8704
rizin>
EOF
EXPECT_ERR=
RUN