mirror of
https://github.com/rizinorg/cutter.git
synced 2024-12-18 10:56:11 +00:00
Bundle r2ghidra-dec
This commit is contained in:
parent
1d692db261
commit
33d97ee16a
@ -31,6 +31,7 @@ environment:
|
|||||||
DEPLOY: false
|
DEPLOY: false
|
||||||
|
|
||||||
install:
|
install:
|
||||||
|
- cmd: if defined QMAKE ( git clone --depth 1 --recurse-submodules https://github.com/radareorg/r2ghidra-dec.git %APPVEYOR_BUILD_FOLDER%/r2ghidra-dec )
|
||||||
- ps: $env:path = ($env:path -split ";").Where({!($_ -like "*Microsoft SQL Server*")}) -join ";"
|
- ps: $env:path = ($env:path -split ";").Where({!($_ -like "*Microsoft SQL Server*")}) -join ";"
|
||||||
- cmd: C:\msys64\usr\bin\bash -lc "cd $APPVEYOR_BUILD_FOLDER && scripts/fetch_deps.sh"
|
- cmd: C:\msys64\usr\bin\bash -lc "cd $APPVEYOR_BUILD_FOLDER && scripts/fetch_deps.sh"
|
||||||
- cmd: set "CUTTER_DEPS_DIR=%APPVEYOR_BUILD_FOLDER%\cutter-deps"
|
- cmd: set "CUTTER_DEPS_DIR=%APPVEYOR_BUILD_FOLDER%\cutter-deps"
|
||||||
@ -49,11 +50,12 @@ before_build:
|
|||||||
|
|
||||||
# Build config
|
# Build config
|
||||||
build_script:
|
build_script:
|
||||||
- cmd: if defined QMAKE ( call prepare_r2.bat && call build.bat CUTTER_APPVEYOR_R2DEC=true CUTTER_ENABLE_CRASH_REPORTS=true CUTTER_ENABLE_PYTHON=true CUTTER_ENABLE_PYTHON_BINDINGS=true CUTTER_DEPS_DIR="%CUTTER_DEPS_DIR%" )
|
- cmd: if defined QMAKE ( call prepare_r2.bat && call build.bat CUTTER_APPVEYOR_R2DEC=true CUTTER_R2GHIDRA_STATIC=true R2GHIDRA_SOURCE="%APPVEYOR_BUILD_FOLDER%/r2ghidra-dec" CUTTER_ENABLE_CRASH_REPORTS=true CUTTER_ENABLE_PYTHON=true CUTTER_ENABLE_PYTHON_BINDINGS=true CUTTER_DEPS_DIR="%CUTTER_DEPS_DIR%" )
|
||||||
- cmd: if defined MESON ( python meson.py --release --dist=%ARTIFACT_PATH% --backend=%BACKEND% --python )
|
- cmd: if defined MESON ( python meson.py --release --dist=%ARTIFACT_PATH% --backend=%BACKEND% --python )
|
||||||
|
|
||||||
after_build:
|
after_build:
|
||||||
- cmd: if defined QMAKE ( xcopy r2_dist_%ARCH%\bin r2_dist_%ARCH% && set "PATH=%CD%\r2_dist_%ARCH%;%PATH%" && powershell scripts\bundle_r2dec.ps1 "%CD%\%ARTIFACT_PATH%" )
|
- cmd: if defined QMAKE ( xcopy r2_dist_%ARCH%\bin r2_dist_%ARCH% && set "PATH=%CD%\r2_dist_%ARCH%;%PATH%" && powershell scripts\bundle_r2dec.ps1 "%CD%\%ARTIFACT_PATH%" )
|
||||||
|
- cmd: if defined QMAKE ( C:\msys64\usr\bin\bash -lc "export PATH=\"/c/msys64/usr/bin:$PATH\" && cd \"$APPVEYOR_BUILD_FOLDER\" && scripts/appveyor_r2ghidra.sh" )
|
||||||
- cmd: powershell scripts\bundle_openssl.ps1 %ARCH% "%CD%\%ARTIFACT_PATH%"
|
- cmd: powershell scripts\bundle_openssl.ps1 %ARCH% "%CD%\%ARTIFACT_PATH%"
|
||||||
- cmd: powershell scripts\bundle_python.ps1 %ARCH% "%CD%\%ARTIFACT_PATH%"
|
- cmd: powershell scripts\bundle_python.ps1 %ARCH% "%CD%\%ARTIFACT_PATH%"
|
||||||
- cmd: xcopy "%CUTTER_DEPS_DIR%\pyside\lib\site-packages" "%ARTIFACT_PATH%\python36\site-packages" /e /i /h
|
- cmd: xcopy "%CUTTER_DEPS_DIR%\pyside\lib\site-packages" "%ARTIFACT_PATH%\python36\site-packages" /e /i /h
|
||||||
|
25
.travis.yml
25
.travis.yml
@ -14,29 +14,44 @@ matrix:
|
|||||||
- name: Linux QMake + Deploy
|
- name: Linux QMake + Deploy
|
||||||
os: linux
|
os: linux
|
||||||
env: BUILD_SYSTEM=qmake DEPLOY=1
|
env: BUILD_SYSTEM=qmake DEPLOY=1
|
||||||
|
addons:
|
||||||
|
apt:
|
||||||
|
packages:
|
||||||
|
- ninja-build
|
||||||
|
|
||||||
- name: Linux CMake
|
- name: Linux CMake
|
||||||
os: linux
|
os: linux
|
||||||
env: BUILD_SYSTEM=cmake
|
env: BUILD_SYSTEM=cmake
|
||||||
|
addons:
|
||||||
|
apt:
|
||||||
|
packages:
|
||||||
|
- ninja-build
|
||||||
|
- libgraphviz-dev
|
||||||
before_install:
|
before_install:
|
||||||
- sudo apt-get update && sudo apt-get install ninja-build libgraphviz-dev # because the apt addon is broken on bionic
|
|
||||||
- pyenv global 3.7.1
|
- pyenv global 3.7.1
|
||||||
- pip install meson
|
- pip install meson
|
||||||
|
|
||||||
- name: macOS QMake + Deploy
|
- name: macOS QMake + Deploy
|
||||||
os: osx
|
os: osx
|
||||||
osx_image: xcode10.2
|
osx_image: xcode10.3
|
||||||
env: BUILD_SYSTEM=qmake DEPLOY=1
|
env: BUILD_SYSTEM=qmake DEPLOY=1
|
||||||
|
|
||||||
- name: macOS CMake
|
- name: macOS CMake
|
||||||
os: osx
|
os: osx
|
||||||
osx_image: xcode10.2
|
osx_image: xcode10.3
|
||||||
env: BUILD_SYSTEM=cmake
|
env: BUILD_SYSTEM=cmake
|
||||||
|
|
||||||
- name: Documentation + Deploy
|
- name: Documentation + Deploy
|
||||||
os: linux
|
os: linux
|
||||||
cache: ~
|
cache: ~
|
||||||
before_install: sudo apt-get update && sudo apt-get install doxygen python3-sphinx python3-breathe python3-sphinx-rtd-theme libgraphviz-dev # because the apt addon is broken on bionic
|
addons:
|
||||||
|
apt:
|
||||||
|
packages:
|
||||||
|
- doxygen
|
||||||
|
- python3-sphinx
|
||||||
|
- python3-breathe
|
||||||
|
- python3-sphinx-rtd-theme
|
||||||
|
- libgraphviz-dev
|
||||||
install: ~
|
install: ~
|
||||||
before_script: ~
|
before_script: ~
|
||||||
after_success: ~
|
after_success: ~
|
||||||
@ -160,6 +175,7 @@ after_success:
|
|||||||
chmod +x Cutter.app/Contents/MacOS/Cutter &&
|
chmod +x Cutter.app/Contents/MacOS/Cutter &&
|
||||||
mkdir -p Cutter.app/Contents/Resources/r2/share &&
|
mkdir -p Cutter.app/Contents/Resources/r2/share &&
|
||||||
cp -a /usr/local/share/radare2 Cutter.app/Contents/Resources/r2/share/ &&
|
cp -a /usr/local/share/radare2 Cutter.app/Contents/Resources/r2/share/ &&
|
||||||
|
"$TRAVIS_BUILD_DIR/scripts/r2ghidra.sh" -DCMAKE_INSTALL_PREFIX="`pwd`/Cutter.app/Contents/Resources/r2" -DBUILD_CUTTER_PLUGIN=ON -DCUTTER_INSTALL_PLUGDIR="`pwd`/Cutter.app/Contents/Resources/plugins/native" -DCUTTER_SOURCE_DIR="$TRAVIS_BUILD_DIR" &&
|
||||||
mkdir image && cp -a Cutter.app image/ &&
|
mkdir image && cp -a Cutter.app image/ &&
|
||||||
export VOL_NAME="Cutter v${CUTTER_VERSION}" &&
|
export VOL_NAME="Cutter v${CUTTER_VERSION}" &&
|
||||||
export DMG_TMP_FILE="Cutter-v$CUTTER_VERSION-x64.macOS-tmp.dmg" &&
|
export DMG_TMP_FILE="Cutter-v$CUTTER_VERSION-x64.macOS-tmp.dmg" &&
|
||||||
@ -180,6 +196,7 @@ after_success:
|
|||||||
mkdir -p appdir/usr/bin/translations &&
|
mkdir -p appdir/usr/bin/translations &&
|
||||||
cp ../src/translations/*.qm appdir/usr/bin/translations/ &&
|
cp ../src/translations/*.qm appdir/usr/bin/translations/ &&
|
||||||
"$TRAVIS_BUILD_DIR/scripts/appimage_embed_python.sh" appdir &&
|
"$TRAVIS_BUILD_DIR/scripts/appimage_embed_python.sh" appdir &&
|
||||||
|
"$TRAVIS_BUILD_DIR/scripts/r2ghidra.sh" -DCMAKE_INSTALL_PREFIX="`pwd`/appdir/usr" -DBUILD_CUTTER_PLUGIN=ON -DCUTTER_SOURCE_DIR="$TRAVIS_BUILD_DIR" &&
|
||||||
wget -c "https://github.com/probonopd/linuxdeployqt/releases/download/6/linuxdeployqt-6-x86_64.AppImage" &&
|
wget -c "https://github.com/probonopd/linuxdeployqt/releases/download/6/linuxdeployqt-6-x86_64.AppImage" &&
|
||||||
chmod a+x linuxdeployqt*.AppImage &&
|
chmod a+x linuxdeployqt*.AppImage &&
|
||||||
rm -fv "$TRAVIS_BUILD_DIR/cutter-deps/qt/plugins/imageformats/libqjp2.so" &&
|
rm -fv "$TRAVIS_BUILD_DIR/cutter-deps/qt/plugins/imageformats/libqjp2.so" &&
|
||||||
|
8
scripts/appveyor_r2ghidra.sh
Executable file
8
scripts/appveyor_r2ghidra.sh
Executable file
@ -0,0 +1,8 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
scripts/r2ghidra.sh \
|
||||||
|
-DCMAKE_C_COMPILER=cl \
|
||||||
|
-DCMAKE_BUILD_TYPE=Release \
|
||||||
|
-DCMAKE_PREFIX_PATH="$APPVEYOR_BUILD_FOLDER/r2_dist_$ARCH;$APPVEYOR_BUILD_FOLDER/r2_dist_$ARCH/radare2;$QT64PATH" \
|
||||||
|
-DCMAKE_INSTALL_PREFIX="$APPVEYOR_BUILD_FOLDER/$ARTIFACT_PATH/radare2" \
|
||||||
|
-DRADARE2_INSTALL_PLUGDIR="$APPVEYOR_BUILD_FOLDER/$ARTIFACT_PATH/radare2/lib/plugins"
|
16
scripts/r2ghidra.sh
Executable file
16
scripts/r2ghidra.sh
Executable file
@ -0,0 +1,16 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
SCRIPTPATH=$(realpath "$(dirname "${BASH_SOURCE[0]}")")
|
||||||
|
|
||||||
|
cd "$SCRIPTPATH/.."
|
||||||
|
|
||||||
|
if [[ ! -d r2ghidra-dec ]]; then
|
||||||
|
git clone --depth 1 --recurse-submodules https://github.com/radareorg/r2ghidra-dec.git || exit 1
|
||||||
|
fi
|
||||||
|
cd r2ghidra-dec || exit 1
|
||||||
|
|
||||||
|
mkdir build && cd build || exit 1
|
||||||
|
cmake -G Ninja "$@" .. || exit 1
|
||||||
|
ninja || exit 1
|
||||||
|
ninja install || exit 1
|
||||||
|
|
@ -51,6 +51,9 @@ equals(CUTTER_BUNDLE_R2_APPBUNDLE, true) CONFIG += CUTTER_BUNDLE_R2_APPBU
|
|||||||
!defined(CUTTER_APPVEYOR_R2DEC, var) CUTTER_APPVEYOR_R2DEC=false
|
!defined(CUTTER_APPVEYOR_R2DEC, var) CUTTER_APPVEYOR_R2DEC=false
|
||||||
equals(CUTTER_APPVEYOR_R2DEC, true) CONFIG += CUTTER_APPVEYOR_R2DEC
|
equals(CUTTER_APPVEYOR_R2DEC, true) CONFIG += CUTTER_APPVEYOR_R2DEC
|
||||||
|
|
||||||
|
!defined(CUTTER_R2GHIDRA_STATIC, var) CUTTER_R2GHIDRA_STATIC=false
|
||||||
|
equals(CUTTER_R2GHIDRA_STATIC, true) CONFIG += CUTTER_R2GHIDRA_STATIC
|
||||||
|
|
||||||
CUTTER_ENABLE_CRASH_REPORTS {
|
CUTTER_ENABLE_CRASH_REPORTS {
|
||||||
message("Crash report support enabled.")
|
message("Crash report support enabled.")
|
||||||
DEFINES += CUTTER_ENABLE_CRASH_REPORTS
|
DEFINES += CUTTER_ENABLE_CRASH_REPORTS
|
||||||
@ -240,6 +243,14 @@ CUTTER_APPVEYOR_R2DEC {
|
|||||||
DEFINES += CUTTER_APPVEYOR_R2DEC
|
DEFINES += CUTTER_APPVEYOR_R2DEC
|
||||||
}
|
}
|
||||||
|
|
||||||
|
CUTTER_R2GHIDRA_STATIC {
|
||||||
|
message("Building with static r2ghidra support")
|
||||||
|
DEFINES += CUTTER_R2GHIDRA_STATIC
|
||||||
|
SOURCES += $$R2GHIDRA_SOURCE/cutter-plugin/R2GhidraDecompiler.cpp
|
||||||
|
HEADERS += $$R2GHIDRA_SOURCE/cutter-plugin/R2GhidraDecompiler.h
|
||||||
|
INCLUDEPATH += $$R2GHIDRA_SOURCE/cutter-plugin
|
||||||
|
}
|
||||||
|
|
||||||
QMAKE_SUBSTITUTES += CutterConfig.h.in
|
QMAKE_SUBSTITUTES += CutterConfig.h.in
|
||||||
|
|
||||||
SOURCES += \
|
SOURCES += \
|
||||||
|
@ -25,6 +25,10 @@
|
|||||||
|
|
||||||
#include <cstdlib>
|
#include <cstdlib>
|
||||||
|
|
||||||
|
#if CUTTER_R2GHIDRA_STATIC
|
||||||
|
#include <R2GhidraDecompiler.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
CutterApplication::CutterApplication(int &argc, char **argv) : QApplication(argc, argv)
|
CutterApplication::CutterApplication(int &argc, char **argv) : QApplication(argc, argv)
|
||||||
{
|
{
|
||||||
// Setup application information
|
// Setup application information
|
||||||
@ -123,6 +127,10 @@ CutterApplication::CutterApplication(int &argc, char **argv) : QApplication(argc
|
|||||||
Core()->registerDecompiler(new R2DecDecompiler(Core()));
|
Core()->registerDecompiler(new R2DecDecompiler(Core()));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if CUTTER_R2GHIDRA_STATIC
|
||||||
|
Core()->registerDecompiler(new R2GhidraDecompiler(Core()));
|
||||||
|
#endif
|
||||||
|
|
||||||
bool analLevelSpecified = false;
|
bool analLevelSpecified = false;
|
||||||
int analLevel = 0;
|
int analLevel = 0;
|
||||||
|
|
||||||
@ -187,6 +195,32 @@ CutterApplication::CutterApplication(int &argc, char **argv) : QApplication(argc
|
|||||||
#ifdef CUTTER_APPVEYOR_R2DEC
|
#ifdef CUTTER_APPVEYOR_R2DEC
|
||||||
qputenv("R2DEC_HOME", "radare2\\lib\\plugins\\r2dec-js");
|
qputenv("R2DEC_HOME", "radare2\\lib\\plugins\\r2dec-js");
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef APPIMAGE
|
||||||
|
{
|
||||||
|
auto sleighHome = QDir(QCoreApplication::applicationDirPath()); // appdir/bin
|
||||||
|
sleighHome.cdUp(); // appdir
|
||||||
|
sleighHome.cd("share/radare2/plugins/r2ghidra_sleigh"); // appdir/share/radare2/plugins/r2ghidra_sleigh
|
||||||
|
Core()->setConfig("r2ghidra.sleighhome", sleighHome.absolutePath());
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef Q_OS_MACOS
|
||||||
|
{
|
||||||
|
auto sleighHome = QDir(QCoreApplication::applicationDirPath()); // Contents/MacOS
|
||||||
|
sleighHome.cdUp(); // Contents
|
||||||
|
sleighHome.cd("Resources/r2/share/radare2/plugins/r2ghidra_sleigh"); // Contents/Resources/r2/share/radare2/plugins/r2ghidra_sleigh
|
||||||
|
Core()->setConfig("r2ghidra.sleighhome", sleighHome.absolutePath());
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef Q_OS_WIN
|
||||||
|
{
|
||||||
|
auto sleighHome = QDir(QCoreApplication::applicationDirPath());
|
||||||
|
sleighHome.cd("radare2/lib/plugins/r2ghidra_sleigh");
|
||||||
|
Core()->setConfig("r2ghidra.sleighhome", sleighHome.absolutePath());
|
||||||
|
}
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
CutterApplication::~CutterApplication()
|
CutterApplication::~CutterApplication()
|
||||||
|
@ -66,7 +66,7 @@ if(WIN32)
|
|||||||
|
|
||||||
add_library(Radare2::libr UNKNOWN IMPORTED)
|
add_library(Radare2::libr UNKNOWN IMPORTED)
|
||||||
set_target_properties(Radare2::libr PROPERTIES
|
set_target_properties(Radare2::libr PROPERTIES
|
||||||
IMPORTED_LOCATION "${Radare2_CORE_LIBRARY}"
|
IMPORTED_LOCATION "${Radare2_LIBRARY_core}"
|
||||||
IMPORTED_LINK_INTERFACE_LIBRARIES "${Radare2_LIBRARIES}"
|
IMPORTED_LINK_INTERFACE_LIBRARIES "${Radare2_LIBRARIES}"
|
||||||
INTERFACE_LINK_DIRECTORIES "${Radare2_LIBRARY_DIRS}"
|
INTERFACE_LINK_DIRECTORIES "${Radare2_LIBRARY_DIRS}"
|
||||||
INTERFACE_INCLUDE_DIRECTORIES "${Radare2_INCLUDE_DIRS}")
|
INTERFACE_INCLUDE_DIRECTORIES "${Radare2_INCLUDE_DIRS}")
|
||||||
|
@ -175,6 +175,14 @@ void CutterCore::initialize()
|
|||||||
qInfo() << "Setting r2 prefix =" << prefix.absolutePath() << " for macOS Application Bundle.";
|
qInfo() << "Setting r2 prefix =" << prefix.absolutePath() << " for macOS Application Bundle.";
|
||||||
#endif
|
#endif
|
||||||
setConfig("dir.prefix", prefix.absolutePath());
|
setConfig("dir.prefix", prefix.absolutePath());
|
||||||
|
|
||||||
|
auto pluginsDir = prefix;
|
||||||
|
if (pluginsDir.cd("share/radare2/plugins")) {
|
||||||
|
qInfo() << "Setting r2 plugins dir =" << pluginsDir.absolutePath();
|
||||||
|
setConfig("dir.plugins", pluginsDir.absolutePath());
|
||||||
|
} else {
|
||||||
|
qInfo() << "r2 plugins dir =" << pluginsDir.absolutePath() << "does not exist!";
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
r_core_loadlibs(this->core_, R_CORE_LOADLIBS_ALL, NULL);
|
r_core_loadlibs(this->core_, R_CORE_LOADLIBS_ALL, NULL);
|
||||||
|
@ -57,10 +57,32 @@ void PluginManager::loadPlugins()
|
|||||||
loadPluginsFromDir(QDir(pluginsDirStr));
|
loadPluginsFromDir(QDir(pluginsDirStr));
|
||||||
|
|
||||||
#ifdef Q_OS_WIN
|
#ifdef Q_OS_WIN
|
||||||
QDir appDir;
|
{
|
||||||
appDir.mkdir("plugins");
|
QDir appDir;
|
||||||
if (appDir.cd("plugins")) {
|
appDir.mkdir("plugins");
|
||||||
loadPluginsFromDir(appDir);
|
if (appDir.cd("plugins")) {
|
||||||
|
loadPluginsFromDir(appDir);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef APPIMAGE
|
||||||
|
{
|
||||||
|
auto plugdir = QDir(QCoreApplication::applicationDirPath()); // appdir/bin
|
||||||
|
plugdir.cdUp(); // appdir
|
||||||
|
if (plugdir.cd("share/RadareOrg/Cutter/plugins")) { // appdir/share/RadareOrg/Cutter/plugins
|
||||||
|
loadPluginsFromDir(plugdir);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef Q_OS_MACOS
|
||||||
|
{
|
||||||
|
auto plugdir = QDir(QCoreApplication::applicationDirPath()); // Contents/MacOS
|
||||||
|
plugdir.cdUp(); // Contents
|
||||||
|
if (plugdir.cd("Resources/plugins")) { // Contents/Resources/plugins
|
||||||
|
loadPluginsFromDir(plugdir);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user