mirror of
https://github.com/radareorg/r2ghidra.git
synced 2026-11-07 06:25:57 -10:00
Use the upstream Meson dependency, shared source manifest, and Sleigh compilation helper instead of maintaining local copies. Check pinned subprojects before Make and XPS builds, cache fetched revisions for offline reuse, and save local ghidra-native changes in a named stash before updating.
115 lines
3.2 KiB
Meson
115 lines
3.2 KiB
Meson
project(
|
|
'r2ghidra',
|
|
['c', 'cpp'],
|
|
license : 'LGPL3',
|
|
meson_version : '>=0.60.0',
|
|
version : '6.2.4',
|
|
default_options : ['c_std=c11', 'cpp_std=c++20', 'b_vscrt=md']
|
|
)
|
|
|
|
|
|
r2ghidra_sources = [
|
|
'src/R2Architecture.cpp',
|
|
'src/R2LoadImage.cpp',
|
|
'src/R2Scope.cpp',
|
|
'src/R2TypeFactory.cpp',
|
|
'src/R2CommentDatabase.cpp',
|
|
'src/CodeXMLParse.cpp',
|
|
'src/ArchMap.cpp',
|
|
'src/R2PrintC.cpp',
|
|
'src/RCoreMutex.cpp',
|
|
'src/SleighAnalValue.cpp',
|
|
'src/SleighAsm.cpp',
|
|
'src/SleighInstruction.cpp',
|
|
'src/PcodeFixupPreprocessor.cpp',
|
|
'src/r2harvest.cpp',
|
|
]
|
|
|
|
incdirs = [
|
|
'src',
|
|
]
|
|
|
|
res = run_command(['radare2','-HR2_LIBR_PLUGINS'], capture:true, check:false)
|
|
if res.returncode() == 0
|
|
r2_plugdir = res.stdout().strip()
|
|
else
|
|
prefix = get_option('prefix')
|
|
r2_plugdir = prefix + '/lib/radare2/plugins'
|
|
endif
|
|
|
|
cpp = meson.get_compiler('cpp')
|
|
if cpp.get_id() == 'msvc'
|
|
incdirs += [
|
|
'radare2/include/libr',
|
|
'radare2/include/libr/sdb',
|
|
]
|
|
add_global_arguments('-D_WINDOWS', language:'cpp')
|
|
add_global_arguments('-D_WIN32', language:'cpp')
|
|
add_global_arguments('-DZLIB_WINAPI', language:'cpp')
|
|
# BEGIN: r2-6.0.8 hacks
|
|
add_global_arguments('-DR_ARENA_H=1', language:'cpp')
|
|
add_global_arguments('-DRArena=int', language:'cpp')
|
|
add_global_arguments('-DRSlice=int', language:'cpp')
|
|
# END: r2-6.0.8 hacks
|
|
add_global_arguments('/wd4200', language:'cpp') # Suppress C4200: zero-sized array in struct
|
|
r2libdir = [
|
|
meson.current_source_dir() + '\\radare2\\lib',
|
|
'C:\\radare2\\lib'
|
|
]
|
|
r_core = [
|
|
cpp.find_library('r_core', dirs: r2libdir),
|
|
cpp.find_library('r_io', dirs: r2libdir),
|
|
cpp.find_library('r_bin', dirs: r2libdir),
|
|
cpp.find_library('r_cons', dirs: r2libdir),
|
|
cpp.find_library('r_asm', dirs: r2libdir),
|
|
cpp.find_library('r_esil', dirs: r2libdir),
|
|
cpp.find_library('r_arch', dirs: r2libdir),
|
|
cpp.find_library('r_flag', dirs: r2libdir),
|
|
cpp.find_library('r_reg', dirs: r2libdir),
|
|
cpp.find_library('r_util', dirs: r2libdir),
|
|
cpp.find_library('r_anal', dirs: r2libdir),
|
|
cpp.find_library('r_config', dirs: r2libdir),
|
|
]
|
|
else
|
|
r_core = dependency('r_core', version : '>=6.1.4')
|
|
endif
|
|
|
|
r2ghidra_version = meson.project_version()
|
|
versionconf = configuration_data()
|
|
versionconf.set('R2GHIDRA_VERSION', r2ghidra_version)
|
|
r_version_h = configure_file(
|
|
input: 'config.h.acr',
|
|
output: 'config.h',
|
|
configuration: versionconf
|
|
)
|
|
|
|
add_global_arguments('-DNDEBUG', language: ['c', 'cpp'])
|
|
|
|
r2ghidra_incdirs = include_directories(incdirs)
|
|
|
|
ghidra = subproject('ghidra-native', version: '>=0.7.2', default_options: ['default_library=static', 'werror=false'])
|
|
|
|
r2ghidra_deps = [r_core, ghidra.get_variable('ghidra_dep')]
|
|
r2ghidra_cpp_args = []
|
|
|
|
r2ghidra_core_sources = [
|
|
r2ghidra_sources,
|
|
'src/anal_ghidra_plugin.c',
|
|
'src/anal_ghidra.cpp',
|
|
'src/core_ghidra_plugin.c',
|
|
'src/core_ghidra.cpp',
|
|
]
|
|
|
|
r2ghidra_core_plugin = shared_library('core_r2ghidra',
|
|
r2ghidra_core_sources,
|
|
dependencies: r2ghidra_deps,
|
|
cpp_args: r2ghidra_cpp_args,
|
|
override_options : ['c_std=c11', 'cpp_std=c++20'],
|
|
include_directories: r2ghidra_incdirs,
|
|
install: true,
|
|
install_dir: r2_plugdir
|
|
)
|
|
|
|
sleighc_exe = ghidra.get_variable('sleighc_exe')
|
|
subdir('ghidra')
|