Files
pancake ab2d3b9b48 Update ghidra-native to 0.7.3
* Implement the new Scope::findSymbolBefore/After by asking the cache
* Look up join records through AddrSpace::findJoin
* Iterate main ops now that INDIRECTs live in their own container
* Follow the new size argument of pushUnnamedLocation
* Refresh test expectations for the new decompiler and sleigh output
2026-11-06 00:44:50 +01:00

123 lines
3.4 KiB
Meson

project(
'r2ghidra',
['c', 'cpp'],
license : 'LGPL3',
meson_version : '>=0.60.0',
version : '6.2.6',
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.3', default_options: ['default_library=static', 'werror=false', 'warning_level=0'])
r2ghidra_deps = [r_core, ghidra.get_variable('ghidra_dep').as_system()]
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
)
pcode_xml_test = executable('pcode-xml-test',
'test/pcode_xml.cpp',
dependencies: ghidra.get_variable('ghidra_dep').as_system(),
include_directories: r2ghidra_incdirs,
install: false
)
test('pcode-xml', pcode_xml_test)
sleighc_exe = ghidra.get_variable('sleighc_exe')
subdir('ghidra')