Files
r2ghidra/meson.build
T
pancake 911d82d214 Consume ghidra-native 0.7.2 and refresh subprojects in place
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.
2026-10-15 21:32:18 +02:00

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')