OLD | NEW |
(Empty) | |
| 1 project('libadblockplus', 'cpp', default_options : ['cpp_std=c++11'], meson_vers
ion: '>0.40.0') |
| 2 |
| 3 V8_DIR=join_paths('third_party', 'v8') |
| 4 |
| 5 # |
| 6 # A quick note about the terms. |
| 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() |
| 20 |
| 21 have_curl = dependency('curl', required: false) |
| 22 incdir = include_directories('include', join_paths(V8_DIR, 'include')) |
| 23 |
| 24 ensure_dependencies = run_target('ensure_dependencies', |
| 25 command: ['python', 'ensure_dependencies.py']) |
| 26 |
| 27 sources = files( |
| 28 'include/AdblockPlus/ITimer.h', |
| 29 'include/AdblockPlus/IWebRequest.h', |
| 30 'include/AdblockPlus/IFileSystem.h', |
| 31 'include/AdblockPlus/Scheduler.h', |
| 32 'include/AdblockPlus/Platform.h', |
| 33 'src/ActiveObject.cpp', |
| 34 'src/AsyncExecutor.cpp', |
| 35 'src/AppInfoJsObject.cpp', |
| 36 'src/ConsoleJsObject.cpp', |
| 37 'src/DefaultLogSystem.cpp', |
| 38 'src/DefaultFileSystem.h', |
| 39 'src/DefaultFileSystem.cpp', |
| 40 'src/DefaultTimer.cpp', |
| 41 'src/DefaultTimer.h', |
| 42 'src/DefaultWebRequest.h', |
| 43 'src/DefaultWebRequest.cpp', |
| 44 'src/FileSystemJsObject.cpp', |
| 45 'src/FilterEngine.cpp', |
| 46 'src/GlobalJsObject.cpp', |
| 47 'src/JsContext.cpp', |
| 48 'src/JsEngine.cpp', |
| 49 'src/JsError.cpp', |
| 50 'src/JsValue.cpp', |
| 51 'src/Notification.cpp', |
| 52 'src/Platform.cpp', |
| 53 'src/ReferrerMapping.cpp', |
| 54 'src/Thread.cpp', |
| 55 'src/Utils.cpp', |
| 56 'src/WebRequestJsObject.cpp', |
| 57 ) |
| 58 |
| 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() |
| 71 if target_os == 'windows' |
| 72 sources += files('src/DefaultWebRequestWinInet.cpp') |
| 73 elif have_curl.found() |
| 74 sources += files('src/DefaultWebRequestCurl.cpp') |
| 75 else |
| 76 sources += files('src/DefaultWebRequestDummy.cpp') |
| 77 endif |
| 78 if target_os == 'darwin' |
| 79 target_os = 'mac' |
| 80 elif target_os == 'android' |
| 81 android_target = true |
| 82 endif |
| 83 |
| 84 target_arch = host_machine.cpu_family() |
| 85 if target_arch == 'x86' |
| 86 target_arch = 'ia32' |
| 87 elif target_arch == 'x86_64' |
| 88 target_arch = 'x64' |
| 89 elif target_arch == 'aarch64' |
| 90 target_arch = 'arm64' |
| 91 endif |
| 92 |
| 93 GYP_PARAMETERS = [ '-D', 'host_arch=' + host_arch, |
| 94 '-D', 'OS=' + target_os, |
| 95 '-D', 'target_arch=' + target_arch ] |
| 96 |
| 97 if android_target |
| 98 GYP_PARAMETERS += [ '-D', 'v8_target_arch=' + target_arch ] |
| 99 V8_BUILD_GYP_FILE = join_paths(meson.source_root(), V8_DIR, |
| 100 'gypfiles', 'standalone.gypi') |
| 101 V8_GYP_FILE = join_paths('src', 'v8.gyp') |
| 102 V8_GYP = [ join_paths(meson.source_root(), 'wrap_make_gyp'), V8_DIR ] |
| 103 V8_GYP_OUTPUT = meson.build_root() |
| 104 else |
| 105 V8_BUILD_GYP_FILE = files('build-v8.gypi') |
| 106 V8_GYP_FILE = files(join_paths(V8_DIR, 'src', 'v8.gyp')) |
| 107 V8_GYP = [ join_paths(meson.source_root(), 'third_party', 'gyp', 'gyp')] |
| 108 V8_GYP_OUTPUT = join_paths(meson.build_root(), 'v8') |
| 109 endif |
| 110 |
| 111 GYP_COMMAND = V8_GYP + [ GYP_PARAMETERS, '--depth=.', '-I', V8_BUILD_GYP_FILE, |
| 112 '--generator-output=' + V8_GYP_OUTPUT, V8_GYP_FILE ] |
| 113 |
| 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 |
| 139 |
| 140 if target_os == 'windows' |
| 141 PLATFORM_LIBRARIES = [ 'v8_libplatform.lib', 'v8_libbase.lib', |
| 142 'v8_base_0.lib', 'v8_base_1.lib', |
| 143 'v8_base_2.lib', 'v8_base_3.lib' ] |
| 144 SAMPLER_LIBRARIES = 'v8_libsampler.lib' |
| 145 SNAPSHOT_LIBRARIES = 'v8_snapshot.lib' |
| 146 else |
| 147 PLATFORM_LIBRARIES = [ 'libv8_libplatform.a' ] |
| 148 SAMPLER_LIBRARIES = [ 'libv8_libsampler.a' ] |
| 149 SNAPSHOT_LIBRARIES = [ 'libv8_snapshot.a', 'libv8_libbase.a', |
| 150 'libv8_base.a' ] |
| 151 endif |
| 152 v8_libplatform = custom_target('v8_libplatform', |
| 153 input: [ build_v8 ], |
| 154 output: PLATFORM_LIBRARIES, |
| 155 command: [ WRAP_MAKE, '@OUTPUT@', '-D', V8_BUILDOUT, |
| 156 '-C', V8_BUILDDIR, 'v8_libplatform', BUILD_FLAVOUR ] + V8_ANDROID
_MAKE) |
| 157 v8_libsampler = custom_target('v8_libsampler', |
| 158 input: [ build_v8 ], output: SAMPLER_LIBRARIES, |
| 159 command: [ WRAP_MAKE, '@OUTPUT@', '-D', V8_BUILDOUT, |
| 160 '-C', V8_BUILDDIR, 'v8_libsampler', BUILD_FLAVOUR ] + V8_ANDROID_
MAKE) |
| 161 v8_snapshot = custom_target('v8_snapshot', |
| 162 input: [ build_v8 ], output: SNAPSHOT_LIBRARIES, |
| 163 command: [ WRAP_MAKE, '@OUTPUT@', '-D', V8_BUILDOUT, |
| 164 '-C', V8_BUILDDIR, 'v8_snapshot', BUILD_FLAVOUR ] + V8_ANDROID_MA
KE) |
| 165 |
| 166 library_files = files( |
| 167 'lib/info.js', |
| 168 'lib/io.js', |
| 169 'lib/prefs.js', |
| 170 'lib/utils.js', |
| 171 'lib/elemHideHitRegistration.js', |
| 172 'adblockpluscore/lib/events.js', |
| 173 'adblockpluscore/lib/coreUtils.js', |
| 174 'adblockpluscore/lib/filterNotifier.js', |
| 175 'lib/init.js', |
| 176 'adblockpluscore/lib/common.js', |
| 177 'adblockpluscore/lib/filterClasses.js', |
| 178 'adblockpluscore/lib/subscriptionClasses.js', |
| 179 'adblockpluscore/lib/filterStorage.js', |
| 180 'adblockpluscore/lib/elemHide.js', |
| 181 'adblockpluscore/lib/elemHideEmulation.js', |
| 182 'adblockpluscore/lib/matcher.js', |
| 183 'adblockpluscore/lib/filterListener.js', |
| 184 'adblockpluscore/lib/downloader.js', |
| 185 'adblockpluscore/lib/notification.js', |
| 186 'lib/notificationShowRegistration.js', |
| 187 'adblockpluscore/lib/synchronizer.js', |
| 188 'lib/filterUpdateRegistration.js', |
| 189 'adblockpluscore/chrome/content/ui/subscriptions.xml', |
| 190 'lib/updater.js' |
| 191 ) |
| 192 load_before_files = files('lib/compat.js') |
| 193 load_after_files = files( |
| 194 'lib/api.js', |
| 195 'lib/publicSuffixList.js', |
| 196 'lib/punycode.js', |
| 197 'lib/basedomain.js' |
| 198 ) |
| 199 |
| 200 js_sources = custom_target('js_sources', |
| 201 input: load_before_files + load_after_files + library_files, |
| 202 output: 'adblockplus.js.cpp', |
| 203 command: [ 'python', join_paths(meson.source_root(), 'convert_js.py'), |
| 204 '@OUTPUT@', |
| 205 '--before', load_before_files, |
| 206 '--convert', library_files, |
| 207 '--after', load_after_files ]) |
| 208 |
| 209 LIBRARIES = [] |
| 210 if target_os == 'windows' |
| 211 LIBRARIES = [ 'shlwapi.lib', 'winhttp.lib', 'winmm.lib' ] |
| 212 endif |
| 213 adblockplus = shared_library('adblockplus', sources, js_sources, |
| 214 v8_snapshot, v8_libsampler, v8_libplatform, |
| 215 include_directories: incdir, |
| 216 cpp_args: [ '-std=c++11' ], |
| 217 link_with: LIBRARIES, |
| 218 dependencies: [ have_curl ]) |
| 219 |
| 220 test_sources = files( |
| 221 'test/AsyncExecutor.cpp', |
| 222 'test/BaseJsTest.h', |
| 223 'test/BaseJsTest.cpp', |
| 224 'test/AppInfoJsObject.cpp', |
| 225 'test/ConsoleJsObject.cpp', |
| 226 'test/DefaultFileSystem.cpp', |
| 227 'test/FileSystemJsObject.cpp', |
| 228 'test/FilterEngine.cpp', |
| 229 'test/GlobalJsObject.cpp', |
| 230 'test/JsEngine.cpp', |
| 231 'test/JsValue.cpp', |
| 232 'test/Notification.cpp', |
| 233 'test/Prefs.cpp', |
| 234 'test/ReferrerMapping.cpp', |
| 235 'test/UpdateCheck.cpp', |
| 236 'test/WebRequest.cpp', |
| 237 'third_party/googletest/googletest/src/gtest_main.cc' |
| 238 ) |
| 239 |
| 240 if not android_target |
| 241 GTEST_DIR = join_paths('third_party', 'googletest', 'googletest') |
| 242 GTEST_PARAMS = [] |
| 243 LINK_PARAMS = [] |
| 244 compiler = meson.get_compiler('cpp') |
| 245 if compiler.has_argument('-pthread') |
| 246 GTEST_PARAMS += '-pthread' |
| 247 LINK_PARAMS += '-lpthread' |
| 248 endif |
| 249 |
| 250 gtest = static_library('gtest', |
| 251 files(join_paths(GTEST_DIR, 'src', 'gtest-all.cc')), |
| 252 include_directories: [ |
| 253 include_directories(join_paths(GTEST_DIR, 'include'
), is_system: true), |
| 254 include_directories(GTEST_DIR) |
| 255 ], |
| 256 cpp_args: GTEST_PARAMS) |
| 257 |
| 258 tests = executable('tests', test_sources, |
| 259 link_with: [adblockplus, gtest], |
| 260 link_args: LINK_PARAMS, |
| 261 include_directories: [ |
| 262 incdir, |
| 263 include_directories(join_paths(GTEST_DIR, 'include')) |
| 264 ]) |
| 265 |
| 266 # Adjust the timeout to run the test. Default value is 30sec. |
| 267 # |
| 268 test('tests', tests, timeout: 60) |
| 269 endif |
OLD | NEW |