Rietveld Code Review Tool
Help | Bug tracker | Discussion group | Source code

Delta Between Two Patch Sets: meson.build

Issue 29537638: Issue 6226 - Use mesonbuild as a build system (Closed) Base URL: https://hg.adblockplus.org/libadblockplus/
Left Patch Set: Fix more build issues, cross compile. Created March 27, 2018, 8:55 p.m.
Right Patch Set: Support NDK r16b Created April 25, 2018, 10:01 p.m.
Left:
Right:
Use n/p to move between diff chunks; N/P to move between comments.
Jump to:
Left: Side by side diff | Download
Right: Side by side diff | Download
« no previous file with change/comment | « cross/r16b/android-x86.in ('k') | wrap_make » ('j') | no next file with change/comment »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
LEFTRIGHT
1 project('libadblockplus', 'cpp', default_options : ['cpp_std=c++14'], meson_vers ion: '>0.40.0') 1 project('libadblockplus', 'cpp', default_options : ['cpp_std=c++14'], meson_vers ion: '>0.40.0')
2 2
3 V8_DIR=join_paths('third_party', 'v8') 3 V8_DIR=join_paths('third_party', 'v8')
4 V8_GYP=join_paths(meson.source_root(), 'third_party', 'gyp', 'gyp') 4
5 HOST_ARCH=run_command('python', 5 #
6 join_paths('third_party', 6 # A quick note about the terms.
7 'detect_v8_host_arch.py')).stdout().strip() 7 # -HOST_MACHINE is the machine we build on.
8 # -TARGET_MACHINE is the machine we build for (like the Android phone)
9 #
10 # However, meson use the GNU terms where build_machine is HOST_MACHINE,
11 # host_machine is TARGET_MACHINE, and target_machine isn't relevant here
12 # since we are not building a compiler.
13 # See http://mesonbuild.com/Cross-compilation.html for details
14 #
15 # We will not use the meson (GNU) terms, unless stricly necessary.
16 #
17 host_arch = run_command('python',
18 join_paths('third_party',
19 'detect_v8_host_arch.py')).stdout().strip()
8 20
9 have_curl = dependency('curl', required: false) 21 have_curl = dependency('curl', required: false)
10 incdir = include_directories('include', join_paths(V8_DIR, 'include')) 22 incdir = include_directories('include', join_paths(V8_DIR, 'include'))
11 23
12 ensure_dependencies = run_target('ensure_dependencies', 24 ensure_dependencies = run_target('ensure_dependencies',
13 command: ['python', 'ensure_dependencies.py']) 25 command: ['python', 'ensure_dependencies.py'])
14 26
15 sources = files( 27 sources = files(
16 'include/AdblockPlus/ITimer.h', 28 'include/AdblockPlus/ITimer.h',
17 'include/AdblockPlus/IWebRequest.h', 29 'include/AdblockPlus/IWebRequest.h',
(...skipping 19 matching lines...) Expand all
37 'src/JsError.cpp', 49 'src/JsError.cpp',
38 'src/JsValue.cpp', 50 'src/JsValue.cpp',
39 'src/Notification.cpp', 51 'src/Notification.cpp',
40 'src/Platform.cpp', 52 'src/Platform.cpp',
41 'src/ReferrerMapping.cpp', 53 'src/ReferrerMapping.cpp',
42 'src/Thread.cpp', 54 'src/Thread.cpp',
43 'src/Utils.cpp', 55 'src/Utils.cpp',
44 'src/WebRequestJsObject.cpp', 56 'src/WebRequestJsObject.cpp',
45 ) 57 )
46 58
47 target_os = target_machine.system() 59
60 buildtype = get_option('buildtype')
61 if buildtype.startswith('debug')
62 BUILD_CONFIG_DIR='Debug'
63 BUILD_FLAVOUR='BUILDTYPE=Debug'
64 else
65 BUILD_CONFIG_DIR='Release'
66 BUILD_FLAVOUR='BUILDTYPE=Release'
67 endif
68
69 android_target = false
70 target_os = host_machine.system()
48 if target_os == 'windows' 71 if target_os == 'windows'
49 sources += files('src/DefaultWebRequestWinInet.cpp') 72 sources += files('src/DefaultWebRequestWinInet.cpp')
50 elif have_curl.found() 73 elif have_curl.found()
51 sources += files('src/DefaultWebRequestCurl.cpp') 74 sources += files('src/DefaultWebRequestCurl.cpp')
52 else 75 else
53 sources += files('src/DefaultWebRequestDummy.cpp') 76 sources += files('src/DefaultWebRequestDummy.cpp')
54 endif 77 endif
55 if target_os == 'darwin' 78 if target_os == 'darwin'
56 target_os = 'mac' 79 target_os = 'mac'
57 endif 80 elif target_os == 'android'
58 81 android_target = true
59 target_arch = target_machine.cpu_family() 82 endif
83
84 target_arch = host_machine.cpu_family()
60 if target_arch == 'x86' 85 if target_arch == 'x86'
61 target_arch = 'ia32' 86 target_arch = 'ia32'
62 elif target_arch == 'x86_64' 87 elif target_arch == 'x86_64'
63 target_arch = 'x64' 88 target_arch = 'x64'
64 elif target_arch == 'aarch64' 89 elif target_arch == 'aarch64'
65 target_arch = 'arm64' 90 target_arch = 'arm64'
66 endif 91 endif
67 92
68 GYP_PARAMETERS=[ '-D', 'host_arch=' + HOST_ARCH, 93 GYP_PARAMETERS = [ '-D', 'host_arch=' + host_arch,
69 '-D', 'OS=' + target_os, 94 '-D', 'OS=' + target_os,
70 '-D', 'target_arch=' + target_arch ] 95 '-D', 'target_arch=' + target_arch ]
71 96
72 build_v8 = custom_target('build_v8', input: files('build-v8.gypi', 97 if android_target
73 join_paths(V8_DIR, 'src', 'v8.gyp')), 98 GYP_PARAMETERS += [ '-D', 'v8_target_arch=' + target_arch ]
74 output: 'Makefile', 99 V8_BUILD_GYP_FILE = join_paths(meson.source_root(), V8_DIR,
75 command: [ V8_GYP, GYP_PARAMETERS, '--depth=.', '-f', 100 'gypfiles', 'standalone.gypi')
76 'make', '-I', '@INPUT0@', 101 V8_GYP_FILE = join_paths('src', 'v8.gyp')
77 '--generator-output=v8', '@INPUT1@' ]) 102 V8_GYP = [ join_paths(meson.source_root(), 'wrap_make_gyp'), V8_DIR ]
78 103 V8_GYP_OUTPUT = meson.build_root()
79 buildtype = get_option('buildtype') 104 else
80 if buildtype.startswith('debug') 105 V8_BUILD_GYP_FILE = files('build-v8.gypi')
81 BUILD_CONFIG_DIR='Debug' 106 V8_GYP_FILE = files(join_paths(V8_DIR, 'src', 'v8.gyp'))
82 BUILD_FLAVOUR='BUILDTYPE=Debug' 107 V8_GYP = [ join_paths(meson.source_root(), 'third_party', 'gyp', 'gyp')]
83 else 108 V8_GYP_OUTPUT = join_paths(meson.build_root(), 'v8')
84 BUILD_CONFIG_DIR='Release' 109 endif
85 BUILD_FLAVOUR='BUILDTYPE=Release' 110
86 endif 111 GYP_COMMAND = V8_GYP + [ GYP_PARAMETERS, '--depth=.', '-I', V8_BUILD_GYP_FILE,
87 OUT_DIR=join_paths(meson.build_root(), 'v8', 'out', BUILD_CONFIG_DIR) 112 '--generator-output=' + V8_GYP_OUTPUT, V8_GYP_FILE ]
88 113
89 WRAP_MAKE=join_paths(meson.source_root(), 'wrap_make') 114 if android_target
115 GYP_COMMAND += [ '-S.android_' + target_arch + '.release',
116 '-I../../android-v8-options.gypi' ]
117 V8_BUILDDIR = '.'
118 V8_BUILDOUT = join_paths(meson.build_root(),
119 'android_' + target_arch + '.release')
120 build_v8 = custom_target('build_v8',
121 output: 'Makefile.android_' + target_arch + '.releas e',
122 command: GYP_COMMAND)
123 V8_ANDROID_MAKE = [
124 '-f', build_v8, 'BUILDTYPE=Release', 'builddir=' + V8_BUILDOUT
125 ]
126 else
127 GYP_COMMAND += [ '-f', 'make' ]
128 V8_BUILDDIR = 'v8'
129 V8_BUILDOUT = join_paths(meson.build_root(), 'v8', 'out', BUILD_CONFIG_DIR)
130 build_v8 = custom_target('build_v8', output: 'Makefile',
131 command: GYP_COMMAND)
132 V8_ANDROID_MAKE = []
133 endif
134
135 WRAP_MAKE = [ join_paths(meson.source_root(), 'wrap_make') ]
136 if android_target
137 WRAP_MAKE += [ '-a', target_arch ]
138 endif
90 139
91 if target_os == 'windows' 140 if target_os == 'windows'
92 PLATFORM_LIBRARIES = [ 'v8_libplatform.lib', 'v8_libbase.lib', 141 PLATFORM_LIBRARIES = [ 'v8_libplatform.lib', 'v8_libbase.lib',
93 'v8_base_0.lib', 'v8_base_1.lib', 142 'v8_base_0.lib', 'v8_base_1.lib',
94 'v8_base_2.lib', 'v8_base_3.lib' ] 143 'v8_base_2.lib', 'v8_base_3.lib' ]
95 SAMPLER_LIBRARIES = 'v8_libsampler.lib' 144 SAMPLER_LIBRARIES = 'v8_libsampler.lib'
96 SNAPSHOT_LIBRARIES = 'v8_snapshot.lib' 145 SNAPSHOT_LIBRARIES = 'v8_snapshot.lib'
97 else 146 else
98 PLATFORM_LIBRARIES = [ 'libv8_libplatform.a' ] 147 PLATFORM_LIBRARIES = [ 'libv8_libplatform.a' ]
99 SAMPLER_LIBRARIES = [ 'libv8_libsampler.a' ] 148 SAMPLER_LIBRARIES = [ 'libv8_libsampler.a' ]
100 SNAPSHOT_LIBRARIES = [ 'libv8_snapshot.a', 'libv8_libbase.a', 149 SNAPSHOT_LIBRARIES = [ 'libv8_snapshot.a', 'libv8_libbase.a',
101 'libv8_base.a' ] 150 'libv8_base.a' ]
102 endif 151 endif
103 v8_libplatform = custom_target('v8_libplatform', 152 v8_libplatform = custom_target('v8_libplatform',
104 input: [ build_v8 ], 153 input: [ build_v8 ],
105 output: PLATFORM_LIBRARIES, 154 output: PLATFORM_LIBRARIES,
106 command: [ WRAP_MAKE, '@OUTPUT@', '-D', OUT_DIR, 155 command: [ WRAP_MAKE, '@OUTPUT@', '-D', V8_BUILDOUT,
107 '-C', 'v8', 'v8_libplatform', BUILD_FLAVOUR ]) 156 '-C', V8_BUILDDIR, 'v8_libplatform', BUILD_FLAVOUR ] + V8_ANDROID _MAKE)
108 v8_libsampler = custom_target('v8_libsampler', 157 v8_libsampler = custom_target('v8_libsampler',
109 input: [ build_v8 ], output: SAMPLER_LIBRARIES, 158 input: [ build_v8 ], output: SAMPLER_LIBRARIES,
110 command: [ WRAP_MAKE, '@OUTPUT@', '-D', OUT_DIR, 159 command: [ WRAP_MAKE, '@OUTPUT@', '-D', V8_BUILDOUT,
111 '-C', 'v8', 'v8_libsampler', BUILD_FLAVOUR ]) 160 '-C', V8_BUILDDIR, 'v8_libsampler', BUILD_FLAVOUR ] + V8_ANDROID_ MAKE)
112 v8_snapshot = custom_target('v8_snapshot', 161 v8_snapshot = custom_target('v8_snapshot',
113 input: [ build_v8 ], output: SNAPSHOT_LIBRARIES, 162 input: [ build_v8 ], output: SNAPSHOT_LIBRARIES,
114 command: [ WRAP_MAKE, '@OUTPUT@', '-D', OUT_DIR, 163 command: [ WRAP_MAKE, '@OUTPUT@', '-D', V8_BUILDOUT,
115 '-C', 'v8', 'v8_snapshot', BUILD_FLAVOUR ]) 164 '-C', V8_BUILDDIR, 'v8_snapshot', BUILD_FLAVOUR ] + V8_ANDROID_MA KE)
116
117 165
118 library_files = files( 166 library_files = files(
119 'lib/info.js', 167 'lib/info.js',
120 'lib/io.js', 168 'lib/io.js',
121 'lib/prefs.js', 169 'lib/prefs.js',
122 'lib/utils.js', 170 'lib/utils.js',
123 'lib/elemHideHitRegistration.js', 171 'lib/elemHideHitRegistration.js',
124 'adblockpluscore/lib/events.js', 172 'adblockpluscore/lib/events.js',
125 'adblockpluscore/lib/coreUtils.js', 173 'adblockpluscore/lib/coreUtils.js',
126 'adblockpluscore/lib/filterNotifier.js', 174 'adblockpluscore/lib/filterNotifier.js',
(...skipping 24 matching lines...) Expand all
151 199
152 js_sources = custom_target('js_sources', 200 js_sources = custom_target('js_sources',
153 input: load_before_files + load_after_files + library_files, 201 input: load_before_files + load_after_files + library_files,
154 output: 'adblockplus.js.cpp', 202 output: 'adblockplus.js.cpp',
155 command: [ 'python', join_paths(meson.source_root(), 'convert_js.py'), 203 command: [ 'python', join_paths(meson.source_root(), 'convert_js.py'),
156 '@OUTPUT@', 204 '@OUTPUT@',
157 '--before', load_before_files, 205 '--before', load_before_files,
158 '--convert', library_files, 206 '--convert', library_files,
159 '--after', load_after_files ]) 207 '--after', load_after_files ])
160 208
209 CXX_FLAGS = [ '-std=c++14' ]
161 LIBRARIES = [] 210 LIBRARIES = []
162 if target_os == 'windows' 211 if target_os == 'windows'
163 LIBRARIES = [ 'shlwapi.lib', 'winhttp.lib', 'winmm.lib' ] 212 LIBRARIES = [ 'shlwapi.lib', 'winhttp.lib', 'winmm.lib' ]
213 else
214 CXX_FLAGS += '-fPIC'
215 endif
216 LD_FLAGS = []
217 if android_target
218 LD_FLAGS += '-Wl,--allow-multiple-definition'
164 endif 219 endif
165 adblockplus = shared_library('adblockplus', sources, js_sources, 220 adblockplus = shared_library('adblockplus', sources, js_sources,
166 v8_snapshot, v8_libsampler, v8_libplatform, 221 v8_snapshot, v8_libsampler, v8_libplatform,
167 include_directories: incdir, 222 include_directories: incdir,
223 cpp_args: CXX_FLAGS,
224 link_args: LD_FLAGS,
168 link_with: LIBRARIES, 225 link_with: LIBRARIES,
169 dependencies: [ have_curl ]) 226 dependencies: [ have_curl ])
170 227
171 test_sources = files( 228 test_sources = files(
172 'test/AsyncExecutor.cpp', 229 'test/AsyncExecutor.cpp',
173 'test/BaseJsTest.h', 230 'test/BaseJsTest.h',
174 'test/BaseJsTest.cpp', 231 'test/BaseJsTest.cpp',
175 'test/AppInfoJsObject.cpp', 232 'test/AppInfoJsObject.cpp',
176 'test/ConsoleJsObject.cpp', 233 'test/ConsoleJsObject.cpp',
177 'test/DefaultFileSystem.cpp', 234 'test/DefaultFileSystem.cpp',
178 'test/FileSystemJsObject.cpp', 235 'test/FileSystemJsObject.cpp',
179 'test/FilterEngine.cpp', 236 'test/FilterEngine.cpp',
180 'test/GlobalJsObject.cpp', 237 'test/GlobalJsObject.cpp',
181 'test/JsEngine.cpp', 238 'test/JsEngine.cpp',
182 'test/JsValue.cpp', 239 'test/JsValue.cpp',
183 'test/Notification.cpp', 240 'test/Notification.cpp',
184 'test/Prefs.cpp', 241 'test/Prefs.cpp',
185 'test/ReferrerMapping.cpp', 242 'test/ReferrerMapping.cpp',
186 'test/UpdateCheck.cpp', 243 'test/UpdateCheck.cpp',
187 'test/WebRequest.cpp', 244 'test/WebRequest.cpp',
188 'third_party/googletest/googletest/src/gtest_main.cc' 245 'third_party/googletest/googletest/src/gtest_main.cc'
189 ) 246 )
190 247
191 GTEST_DIR = join_paths('third_party', 'googletest', 'googletest') 248 if not android_target
192 GTEST_PARAMS = [] 249 GTEST_DIR = join_paths('third_party', 'googletest', 'googletest')
193 LINK_PARAMS = [] 250 GTEST_PARAMS = []
194 compiler = meson.get_compiler('cpp') 251 LINK_PARAMS = []
195 if compiler.has_argument('-pthread') 252 compiler = meson.get_compiler('cpp')
196 GTEST_PARAMS += '-pthread' 253 if compiler.has_argument('-pthread')
197 LINK_PARAMS += '-lpthread' 254 GTEST_PARAMS += '-pthread'
198 endif 255 LINK_PARAMS += '-lpthread'
199 256 endif
200 gtest = static_library('gtest', 257
201 files(join_paths(GTEST_DIR, 'src', 'gtest-all.cc')), 258 gtest = static_library('gtest',
202 include_directories: [ 259 files(join_paths(GTEST_DIR, 'src', 'gtest-all.cc')),
203 include_directories(join_paths(GTEST_DIR, 'include'), is_system: true), 260 include_directories: [
204 include_directories(GTEST_DIR) 261 include_directories(join_paths(GTEST_DIR, 'include' ), is_system: true),
205 ], 262 include_directories(GTEST_DIR)
206 cpp_args: GTEST_PARAMS) 263 ],
207 264 cpp_args: GTEST_PARAMS)
208 tests = executable('tests', test_sources, 265
209 link_with: [adblockplus, gtest], 266 tests = executable('tests', test_sources,
210 link_args: LINK_PARAMS, 267 link_with: [adblockplus, gtest],
211 include_directories: [ 268 link_args: LINK_PARAMS,
212 incdir, 269 include_directories: [
213 include_directories(join_paths(GTEST_DIR, 'include')) 270 incdir,
214 ]) 271 include_directories(join_paths(GTEST_DIR, 'include'))
215 272 ])
216 # Adjust the timeout to run the test. Default value is 30sec. 273
217 # 274 # Adjust the timeout to run the test. Default value is 30sec.
218 test('tests', tests, timeout: 60) 275 #
276 test('tests', tests, timeout: 60)
277 endif
LEFTRIGHT

Powered by Google App Engine
This is Rietveld