Add r2plugin and CI job for the external plugin system build

This commit is contained in:
pancake committed 2026-06-22 23:25:19 +02:00
1 parent 111bfeca53
commit 971fd5f6f4
10 files changed
+145 -2

No files matched your search

+24
View File
@@ -25,3 +25,27 @@ jobs:
run: r2r test/db/cmd
- name: Radare Extras Testing
run: r2r test/db/extras
r2-xps:
name: Build radare2 with r2flutter XPS
runs-on: ubuntu-24.04
steps:
- uses: actions/checkout@v7
with:
fetch-depth: 0
- name: Install build dependencies
run: sudo apt-get update -y && sudo apt-get install -y build-essential pkg-config
- name: Build radare2 from source with r2flutter
run: |
git clone --depth=1 https://github.com/radareorg/radare2.git
cd radare2
cp -f ../r2plugin/config.mk libr/xps/config.mk
git clone .. libr/xps/p/r2flutter
make -C libr/xps
./configure --prefix=/usr
make -j$(nproc)
sudo make install
- name: Test embedded r2flutter plugin
run: |
r2 -q -c 'Lc~r2flutter' -- | grep r2flutter
r2 -q -c 'r2flutter -V' -- | grep 'r2flutter '
+13
View File
@@ -0,0 +1,13 @@
# r2plugin
This directory contains the Make and Meson files required to link r2flutter
inside radare2 through `libr/xps`.
```console
cd radare2
cp ../r2flutter/r2plugin/config.mk libr/xps/config.mk
git clone ../r2flutter libr/xps/p/r2flutter
make -C libr/xps
./configure
make
```
+9
View File
@@ -0,0 +1,9 @@
EXTERNAL_PLUGINS+=r2flutter
# EXTERNAL_PLUGINS+=hi
.PHONY: r2flutter
r2flutter: p/r2flutter
p/r2flutter:
cd p && git clone https://github.com/trufae/r2flutter
+5
View File
@@ -0,0 +1,5 @@
/* radare2 - MIT - Copyright 2026 - pancake */
#ifdef R2_CORE_H
extern RCorePlugin r_core_plugin_r2flutter;
#endif
+25
View File
@@ -0,0 +1,25 @@
R2FLUTTER_CORE_WD=$(LIBR)/xps/p/r2flutter
CFLAGS+=-I$(R2FLUTTER_CORE_WD)/include
R2FLUTTER_CORE_OBJ= \
$(R2FLUTTER_CORE_WD)/src/lib/dart_app.o \
$(R2FLUTTER_CORE_WD)/src/lib/dart_dumper.o \
$(R2FLUTTER_CORE_WD)/src/lib/dart_pool_snapshot.o \
$(R2FLUTTER_CORE_WD)/src/lib/dart_pool_discovery.o \
$(R2FLUTTER_CORE_WD)/src/lib/dart_pool_names.o \
$(R2FLUTTER_CORE_WD)/src/lib/dart_pool_strings.o \
$(R2FLUTTER_CORE_WD)/src/lib/dart_pool_data_image.o \
$(R2FLUTTER_CORE_WD)/src/lib/dart_pool_it.o \
$(R2FLUTTER_CORE_WD)/src/lib/dart_pool_xrefs.o \
$(R2FLUTTER_CORE_WD)/src/lib/dart_object.o \
$(R2FLUTTER_CORE_WD)/src/lib/dart_sbom.o \
$(R2FLUTTER_CORE_WD)/src/lib/dart_pool_clusters.o \
$(R2FLUTTER_CORE_WD)/src/lib/dart_pool_classes.o \
$(R2FLUTTER_CORE_WD)/src/lib/dart_pool_model.o \
$(R2FLUTTER_CORE_WD)/src/lib/dart_pool_parse.o \
$(R2FLUTTER_CORE_WD)/src/lib/dart_pool_modern.o \
$(R2FLUTTER_CORE_WD)/src/lib/dart_version.o \
$(R2FLUTTER_CORE_WD)/src/lib/dart_cid.o \
$(R2FLUTTER_CORE_WD)/src/lib/dart_obf.o \
$(R2FLUTTER_CORE_WD)/src/r2/flutter_analysis.o \
$(R2FLUTTER_CORE_WD)/src/r2/core_flutter.o
EXTERNAL_STATIC_OBJS+=$(R2FLUTTER_CORE_OBJ)
+29
View File
@@ -0,0 +1,29 @@
shared_library(
'core_flutter',
'../src/r2/core_flutter.c',
'../src/r2/flutter_analysis.c',
'../src/lib/dart_app.c',
'../src/lib/dart_dumper.c',
'../src/lib/dart_pool_snapshot.c',
'../src/lib/dart_pool_discovery.c',
'../src/lib/dart_pool_names.c',
'../src/lib/dart_pool_strings.c',
'../src/lib/dart_pool_data_image.c',
'../src/lib/dart_pool_it.c',
'../src/lib/dart_pool_xrefs.c',
'../src/lib/dart_object.c',
'../src/lib/dart_sbom.c',
'../src/lib/dart_pool_clusters.c',
'../src/lib/dart_pool_classes.c',
'../src/lib/dart_pool_model.c',
'../src/lib/dart_pool_parse.c',
'../src/lib/dart_pool_modern.c',
'../src/lib/dart_version.c',
'../src/lib/dart_cid.c',
'../src/lib/dart_obf.c',
include_directories: ['../include', include_dirs],
dependencies: r2_core,
override_options: ['werror=false'],
install: true,
install_dir: r2_plugdir,
)
+32
View File
@@ -0,0 +1,32 @@
# r2flutter XPS integration for radare2.
# Included from libr/xps/meson.build when r2flutter sources live under
# libr/xps/p/r2flutter/. Appends sources and include paths to the r_core
# aggregate so the static plugin is linked into libr_core.
core_plugins += ['r2flutter']
r_core_additional_inc += include_directories(join_paths('..', 'include'))
r_core_additional_sources += files(
'../src/lib/dart_app.c',
'../src/lib/dart_dumper.c',
'../src/lib/dart_pool_snapshot.c',
'../src/lib/dart_pool_discovery.c',
'../src/lib/dart_pool_names.c',
'../src/lib/dart_pool_strings.c',
'../src/lib/dart_pool_data_image.c',
'../src/lib/dart_pool_it.c',
'../src/lib/dart_pool_xrefs.c',
'../src/lib/dart_object.c',
'../src/lib/dart_sbom.c',
'../src/lib/dart_pool_clusters.c',
'../src/lib/dart_pool_classes.c',
'../src/lib/dart_pool_model.c',
'../src/lib/dart_pool_parse.c',
'../src/lib/dart_pool_modern.c',
'../src/lib/dart_version.c',
'../src/lib/dart_cid.c',
'../src/lib/dart_obf.c',
'../src/r2/flutter_analysis.c',
'../src/r2/core_flutter.c',
)
+5
View File
@@ -0,0 +1,5 @@
/* radare2 - MIT - Copyright 2026 - pancake */
#ifdef R2_CORE_H
#include "core/deps.h"
#endif
+1
View File
@@ -0,0 +1 @@
core.r2flutter
+2 -2
View File
@@ -427,7 +427,7 @@ static bool r_cmd_r2flutter_call(RCorePluginSession *cps, const char *input) {
return true;
}
RCorePlugin r_core_plugin_flutter = {
RCorePlugin r_core_plugin_r2flutter = {
.meta = {
.name = "r2flutter",
.desc = "Dart/Flutter AOT snapshot analyzer",
@@ -443,7 +443,7 @@ RCorePlugin r_core_plugin_flutter = {
#ifndef R2_PLUGIN_INCORE
R_API RLibStruct radare_plugin = {
.type = R_LIB_TYPE_CORE,
.data = &r_core_plugin_flutter,
.data = &r_core_plugin_r2flutter,
.version = R2_VERSION,
.abiversion = R2_ABIVERSION
};