Repository navigation
Expand file tree
/
Copy pathmeson.build
More file actions
122 lines (108 loc) · 3.37 KB
/
Copy pathmeson.build
File metadata and controls
122 lines (108 loc) · 3.37 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
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
)
pcode_xml_test = executable('pcode-xml-test',
'test/pcode_xml.cpp',
dependencies: ghidra.get_variable('ghidra_dep'),
include_directories: r2ghidra_incdirs,
install: false
)
test('pcode-xml', pcode_xml_test)
sleighc_exe = ghidra.get_variable('sleighc_exe')
subdir('ghidra')