mirror of
https://github.com/rizinorg/rz-bindgen.git
synced 2026-11-07 23:02:04 -10:00
Compare commits
2
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
ca262e2a40 | ||
|
|
370e12cc67 |
No files matched your search
+15
-58
@@ -4,11 +4,6 @@ on:
|
||||
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
|
||||
@@ -21,95 +16,57 @@ jobs:
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
os: [ubuntu-24.04, windows-2019, macos-14]
|
||||
os: [ubuntu-22.04, windows-2019, macos-12]
|
||||
|
||||
steps:
|
||||
- name: Install SWIG with Homebrew
|
||||
if: matrix.os == 'macos-14' && matrix.enabled
|
||||
run: brew install swig
|
||||
|
||||
- name: Checkout rz-bindgen
|
||||
uses: actions/checkout@v4
|
||||
uses: actions/checkout@v3
|
||||
|
||||
# runned only from workflow_call
|
||||
- name: Checkout rizin
|
||||
if: ${{ inputs.external_call }}
|
||||
uses: actions/checkout@v4
|
||||
uses: actions/checkout@v3
|
||||
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@v4
|
||||
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@v4
|
||||
with:
|
||||
repository: rizinorg/rizin
|
||||
path: rizin
|
||||
ref: dev
|
||||
- name: Patch meson.build for wheel build
|
||||
if: matrix.os != 'windows-2019'
|
||||
run: sed -i.bak 's/^\([[:blank:]]*install:\) host_machine.*$/\1 true,/' meson.build
|
||||
|
||||
- name: Build rz-bindgen
|
||||
uses: pypa/cibuildwheel@v2.22.0
|
||||
uses: pypa/cibuildwheel@v2.8.0
|
||||
|
||||
- name: Upload sdist
|
||||
uses: actions/upload-artifact@v4
|
||||
uses: actions/upload-artifact@v3
|
||||
with:
|
||||
name: sdist-${{ matrix.os }}
|
||||
name: sdist
|
||||
path: dist/*.tar.gz
|
||||
|
||||
- name: Upload wheels
|
||||
uses: actions/upload-artifact@v4
|
||||
uses: actions/upload-artifact@v3
|
||||
with:
|
||||
name: wheels-${{ matrix.os }}
|
||||
name: wheels
|
||||
path: wheelhouse/*.whl
|
||||
|
||||
ubuntu-default-llvm:
|
||||
runs-on: ubuntu-24.04
|
||||
runs-on: ubuntu-22.04
|
||||
|
||||
steps:
|
||||
- name: Checkout rz-bindgen
|
||||
uses: actions/checkout@v4
|
||||
uses: actions/checkout@v3
|
||||
with:
|
||||
path: rz-bindgen
|
||||
|
||||
# runned only from workflow_call
|
||||
- name: Checkout rizin
|
||||
if: ${{ inputs.external_call }}
|
||||
uses: actions/checkout@v4
|
||||
uses: actions/checkout@v3
|
||||
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@v4
|
||||
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@v4
|
||||
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: |
|
||||
|
||||
@@ -2,7 +2,7 @@ name: lint
|
||||
on: push
|
||||
jobs:
|
||||
licenses:
|
||||
runs-on: ubuntu-24.04
|
||||
runs-on: ubuntu-22.04
|
||||
steps:
|
||||
- name: Checkout rz-bindgen
|
||||
uses: actions/checkout@v3
|
||||
@@ -10,7 +10,7 @@ jobs:
|
||||
uses: fsfe/reuse-action@v1
|
||||
|
||||
python:
|
||||
runs-on: ubuntu-24.04
|
||||
runs-on: ubuntu-22.04
|
||||
steps:
|
||||
- name: Checkout rz-bindgen
|
||||
uses: actions/checkout@v3
|
||||
@@ -19,7 +19,7 @@ jobs:
|
||||
pip install mypy pyflakes pylint black
|
||||
- name: Run mypy
|
||||
run: |
|
||||
mypy --disable-error-code misc src/main.py
|
||||
mypy src/main.py
|
||||
if: ${{ always() }}
|
||||
- name: Run pyflakes
|
||||
run: |
|
||||
@@ -35,7 +35,7 @@ jobs:
|
||||
if: ${{ always() }}
|
||||
|
||||
codeql:
|
||||
runs-on: ubuntu-24.04
|
||||
runs-on: ubuntu-22.04
|
||||
permissions:
|
||||
security-events: write
|
||||
steps:
|
||||
|
||||
@@ -7,7 +7,7 @@ on:
|
||||
|
||||
jobs:
|
||||
extract-rizin-version:
|
||||
runs-on: ubuntu-24.04
|
||||
runs-on: ubuntu-22.04
|
||||
outputs:
|
||||
rizin_version: ${{ steps.extract_version.outputs.result }}
|
||||
steps:
|
||||
@@ -21,7 +21,7 @@ jobs:
|
||||
rizin_ref: ${{ needs.extract-rizin-version.outputs.rizin_version }}
|
||||
|
||||
publish-pypi:
|
||||
runs-on: ubuntu-24.04
|
||||
runs-on: ubuntu-22.04
|
||||
needs: [build]
|
||||
steps:
|
||||
- name: Download artifacts
|
||||
|
||||
+6
-22
@@ -4,48 +4,32 @@
|
||||
set -ex
|
||||
|
||||
# Install deps
|
||||
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
|
||||
pip3 install meson ninja meson-python build
|
||||
|
||||
if command -v brew; then
|
||||
brew install --require-sha swig
|
||||
elif command -v apt; then
|
||||
if 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 sudo
|
||||
apt update && apt install --assume-yes libclang-7-dev clang-7 llvm-7
|
||||
elif command -v apk; then
|
||||
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 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
|
||||
apk update && apk add clang-dev
|
||||
fi
|
||||
|
||||
pushd rizin
|
||||
|
||||
if [[ "$OSTYPE" =~ msys* ]]; 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 meson install -C build
|
||||
fi
|
||||
|
||||
meson install -C build
|
||||
popd
|
||||
|
||||
if command -v apt; then
|
||||
|
||||
+2
-3
@@ -108,7 +108,6 @@ if target_swig or target_sphinx
|
||||
endif
|
||||
|
||||
if target_swig
|
||||
wheel = get_option('wheel')
|
||||
swig_output = custom_target(
|
||||
'swig_output',
|
||||
input: bindgen_outputs[swig_source_idx],
|
||||
@@ -118,7 +117,7 @@ if target_swig
|
||||
'-python', '-c++',
|
||||
'-outdir', '@OUTDIR@', '@INPUT@'
|
||||
],
|
||||
install: wheel or host_machine.system() == 'windows',
|
||||
install: host_machine.system() == 'windows',
|
||||
install_dir: [py.get_install_dir(), false]
|
||||
)
|
||||
swig_py = swig_output[0]
|
||||
@@ -135,7 +134,7 @@ if target_swig
|
||||
py.dependency(),
|
||||
rz_core,
|
||||
],
|
||||
install: wheel or host_machine.system() == 'windows',
|
||||
install: host_machine.system() == 'windows',
|
||||
)
|
||||
if host_machine.system() != 'windows'
|
||||
meson.add_install_script('py_install.py', swig_py.full_path(), ext_mod.full_path())
|
||||
|
||||
@@ -4,6 +4,5 @@ option('rizin_include_path', type: 'string', value: '')
|
||||
option('targets', type: 'array', choices: ['SWIG', 'sphinx'], value: ['SWIG'])
|
||||
|
||||
option('plugin', type: 'feature', value: 'disabled')
|
||||
option('wheel', type: 'boolean', value: false, description: 'Set up for pypa wheel build')
|
||||
|
||||
option('doxygen_path', type: 'string', value: '')
|
||||
@@ -2,13 +2,6 @@
|
||||
// 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>
|
||||
|
||||
+4
-13
@@ -5,30 +5,21 @@ requires = [
|
||||
]
|
||||
build-backend = "mesonpy"
|
||||
|
||||
[tool.meson-python.args]
|
||||
setup = ['-Dwheel=true']
|
||||
|
||||
[tool.cibuildwheel]
|
||||
build-verbosity = 3
|
||||
before-all = "bash {project}/cibw_before_all.sh"
|
||||
manylinux-x86_64-image = "manylinux2014"
|
||||
manylinux-x86_64-image = "manylinux_2_24"
|
||||
manylinux-i686-image = "manylinux_2_24"
|
||||
skip = "pp*"
|
||||
|
||||
[tool.cibuildwheel.linux]
|
||||
environment = { PATH="/opt/rh/llvm-toolset-7.0/root/usr/bin:/opt/rh/llvm-toolset-7.0/root/usr/sbin:$PATH", LD_LIBRARY_PATH="/opt/rh/llvm-toolset-7.0/root/usr/lib64:$LD_LIBRARY_PATH" }
|
||||
archs = ["x86_64"]
|
||||
|
||||
[tool.cibuildwheel.windows]
|
||||
environment = { CMAKE_PREFIX_PATH="C:/rizin" }
|
||||
environment = { CMAKE_PREFIX_PATH="C:\\rizin" }
|
||||
archs = ["AMD64"]
|
||||
|
||||
[tool.cibuildwheel.macos]
|
||||
environment = { PATH="/opt/homebrew/bin:$PATH", MACOSX_DEPLOYMENT_TARGET="14.0" }
|
||||
|
||||
[project]
|
||||
name = "rz-bindings"
|
||||
dynamic = [
|
||||
'version',
|
||||
]
|
||||
requires-python = ">=3.9"
|
||||
requires-python = ">=3.8"
|
||||
readme = "README.md"
|
||||
+9
-47
@@ -258,6 +258,7 @@ 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",
|
||||
@@ -327,29 +328,6 @@ def bind_core(core_h: Header) -> None:
|
||||
|
||||
Class(core_h, typedef="RzCoreFile")
|
||||
|
||||
@threaded_header("rz_util/rz_annotated_code.h")
|
||||
def bind_annotated_code(annotated_code_h: Header) -> None:
|
||||
"""
|
||||
RzAnnotatedCode
|
||||
"""
|
||||
rz_code_annotation = Class(
|
||||
annotated_code_h,
|
||||
typedef="RzCodeAnnotation",
|
||||
struct="rz_code_annotation_t",
|
||||
)
|
||||
rz_code_annotation.add_prefixed_methods("rz_annotation_")
|
||||
rz_code_annotation.add_prefixed_funcs("rz_annotation_")
|
||||
|
||||
rz_annotated_code = Class(
|
||||
annotated_code_h,
|
||||
typedef="RzAnnotatedCode",
|
||||
struct="rz_annotated_code_t",
|
||||
)
|
||||
rz_annotated_code.add_constructor("rz_annotated_code_new")
|
||||
rz_annotated_code.add_destructor("rz_annotated_code_free")
|
||||
|
||||
rz_annotated_code.add_prefixed_methods("rz_annotated_code_")
|
||||
rz_annotated_code.add_prefixed_funcs("rz_annotated_code_")
|
||||
|
||||
@threaded_header("rz_flag.h")
|
||||
def bind_flag(flag_h: Header) -> None:
|
||||
@@ -438,6 +416,14 @@ def bind_sdb(sdb_h: Header) -> None:
|
||||
Class(sdb_h, typedef="Sdb", ignore_fields={"db", "m"})
|
||||
|
||||
|
||||
@threaded_header("sdb/ls.h")
|
||||
def bind_ls(ls_h: Header) -> None:
|
||||
"""
|
||||
ls
|
||||
"""
|
||||
Class(ls_h, typedef="SdbList")
|
||||
|
||||
|
||||
@threaded_header("rz_util/ht_pp.h")
|
||||
def bind_ht_pp(ht_pp_h: Header) -> None:
|
||||
"""
|
||||
@@ -468,27 +454,3 @@ def bind_ht_uu(ht_uu_h: Header) -> None:
|
||||
ht_uu
|
||||
"""
|
||||
Class(ht_uu_h, typedef="HtUU")
|
||||
|
||||
|
||||
@threaded_header("rz_util/ht_sp.h")
|
||||
def bind_ht_sp(ht_sp_h: Header) -> None:
|
||||
"""
|
||||
ht_sp
|
||||
"""
|
||||
Class(ht_sp_h, typedef="HtSP")
|
||||
|
||||
|
||||
@threaded_header("rz_util/ht_ss.h")
|
||||
def bind_ht_ss(ht_ss_h: Header) -> None:
|
||||
"""
|
||||
ht_ss
|
||||
"""
|
||||
Class(ht_ss_h, typedef="HtSS")
|
||||
|
||||
|
||||
@threaded_header("rz_util/ht_su.h")
|
||||
def bind_ht_su(ht_su_h: Header) -> None:
|
||||
"""
|
||||
ht_su
|
||||
"""
|
||||
Class(ht_su_h, typedef="HtSU")
|
||||
+2
-2
@@ -2224,7 +2224,7 @@ class Type(Structure):
|
||||
|
||||
return result
|
||||
|
||||
assert self.kind in (TypeKind.FUNCTIONPROTO, TypeKind.FUNCTIONNOPROTO)
|
||||
assert self.kind == TypeKind.FUNCTIONPROTO
|
||||
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 in (TypeKind.FUNCTIONPROTO, TypeKind.FUNCTIONNOPROTO)
|
||||
assert self.kind == TypeKind.FUNCTIONPROTO
|
||||
|
||||
return conf.lib.clang_isFunctionTypeVariadic(self)
|
||||
|
||||
|
||||
@@ -38,7 +38,6 @@ class TypeKind(Enum):
|
||||
POINTER: TypeKind
|
||||
CONSTANTARRAY: TypeKind
|
||||
FUNCTIONPROTO: TypeKind
|
||||
FUNCTIONNOPROTO: TypeKind
|
||||
INCOMPLETEARRAY: TypeKind
|
||||
|
||||
RECORD: TypeKind
|
||||
|
||||
+2
-10
@@ -98,20 +98,12 @@ class HeaderBuilder:
|
||||
|
||||
assert rizin_include_path
|
||||
filename = os.path.abspath(os.path.join(rizin_include_path, *name_segments))
|
||||
assert os.path.exists(filename), f"File {filename} does not exist"
|
||||
assert os.path.exists(filename)
|
||||
self.filename = filename
|
||||
|
||||
# Parse ht_inc.h if importing SDB hashtable header
|
||||
self.extra_filename = None
|
||||
if name_segments[-1] in [
|
||||
"ht_pp.h",
|
||||
"ht_pu.h",
|
||||
"ht_up.h",
|
||||
"ht_uu.h",
|
||||
"ht_sp.h",
|
||||
"ht_ss.h",
|
||||
"ht_su.h",
|
||||
]:
|
||||
if name_segments[-1] in ["ht_pp.h", "ht_pu.h", "ht_up.h", "ht_uu.h"]:
|
||||
self.extra_filename = "ht_inc.h"
|
||||
|
||||
def translation_unit(self) -> TranslationUnit:
|
||||
|
||||
@@ -123,7 +123,7 @@ def wrap_type(type_: Type) -> CType:
|
||||
cursor=type_.get_declaration(),
|
||||
)
|
||||
|
||||
if type_.kind in (TypeKind.FUNCTIONPROTO, TypeKind.FUNCTIONNOPROTO):
|
||||
if type_.kind == TypeKind.FUNCTIONPROTO:
|
||||
return CFunctionType(
|
||||
orig_type,
|
||||
result=wrap_type(type_.get_result()),
|
||||
|
||||
@@ -265,11 +265,6 @@ 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,
|
||||
|
||||
+1
-11
@@ -164,17 +164,7 @@ def cursor_get_comment(cursor: Cursor, *, packed: bool = False) -> Optional[str]
|
||||
warn(
|
||||
f"Type comment at {stringify_location(cursor.location)} should not have pointer"
|
||||
)
|
||||
elif typeref_spelling in {
|
||||
"HtPP",
|
||||
"HtUP",
|
||||
"HtUU",
|
||||
"HtPU",
|
||||
"HtSP",
|
||||
"HtSS",
|
||||
"HtSU",
|
||||
"RBTree",
|
||||
"SdbList",
|
||||
}:
|
||||
elif typeref_spelling in {"HtPP", "HtUP", "HtUU", "RBTree", "SdbList"}:
|
||||
pass
|
||||
else:
|
||||
warn(
|
||||
|
||||
@@ -13,7 +13,7 @@ void register_swig_command(const char *str, CmdDirector *director,
|
||||
} else {
|
||||
char *dup = strdup(str);
|
||||
dup[len - 1] = '\0';
|
||||
parent = (RzCmdDesc *)ht_sp_find($self->ht_cmds, dup, NULL);
|
||||
parent = (RzCmdDesc *)ht_pp_find($self->ht_cmds, dup, NULL);
|
||||
free(dup);
|
||||
}
|
||||
|
||||
@@ -21,7 +21,7 @@ void register_swig_command(const char *str, CmdDirector *director,
|
||||
throw "Could not get parent RzCmdDesc";
|
||||
}
|
||||
|
||||
RzCmdDesc *prev = (RzCmdDesc *)ht_sp_find($self->ht_cmds, str, NULL);
|
||||
RzCmdDesc *prev = (RzCmdDesc *)ht_pp_find($self->ht_cmds, str, NULL);
|
||||
std::string cmd(str);
|
||||
if (prev) { // Update existing RzCmdDesc
|
||||
auto it = SWIGCmds.find(cmd);
|
||||
|
||||
Reference in new issue
Block a user