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

Side by Side Diff: README.md

Issue 29527808: Noissue - Use meson to build the C++ code (Closed) Base URL: https://hg.adblockplus.org/adblockpluscore/
Patch Set: Updated from feedback. now require meson 0.40.0, but no default C++ compiler Created Oct. 26, 2017, 4:13 p.m.
Left:
Right:
Use n/p to move between diff chunks; N/P to move between comments.
Jump to:
View unified diff | Download patch
« no previous file with comments | « .hgignore ('k') | meson.build » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 Adblock Plus core 1 Adblock Plus core
2 ================= 2 =================
3 3
4 This repository contains the generic Adblock Plus code that's shared between 4 This repository contains the generic Adblock Plus code that's shared between
5 platforms. This repository is not designed to be used directly, but instead to 5 platforms. This repository is not designed to be used directly, but instead to
6 serve as a dependency for `adblockplus`, `adblockpluschrome` and 6 serve as a dependency for `adblockplus`, `adblockpluschrome` and
7 `libadblockplus`. 7 `libadblockplus`.
8 8
9 Compiling C++ code 9 Compiling C++ code
10 ------------------ 10 ------------------
11 11
12 ### Purpose 12 ### Purpose
13 13
14 In order to improve performance and memory usage, some of the code (located 14 In order to improve performance and memory usage, some of the code (located
15 inside the `compiled` directory) is written in C++ and compiled to JavaScript 15 inside the `compiled` directory) is written in C++ and compiled to JavaScript
16 via Empscripten. 16 via Empscripten.
17 17
18 ### Requirements 18 ### Requirements
19 19
20 * [Emscripten 1.37.3](https://github.com/kripken/emscripten) 20 * [Emscripten 1.37.3](https://github.com/kripken/emscripten)
21 * [Python 2.7](https://www.python.org) 21 * [Python 2.7 & 3](https://www.python.org)
22 * [meson 0.40.0+](https://www.mesonbuild.com)
23 * [ninja](https://www.ninja-build.org)
24
25 ### Installation
26
27 #### macOS
28
29 Whenever possible, install from brew.
30
31 #### Linux
32
33 Use the distribution package if possible. Some "LTS" might have a too
34 old version of meson.
Wladimir Palant 2017/10/26 19:27:00 Ubuntu 17.04 isn't LTS - it was the latest stable
hub 2017/10/26 19:36:04 I'll remove that sentence. Or if you prefer the wh
Wladimir Palant 2017/11/03 10:50:12 I definitely prefer removing the entire installati
35
36 #### Windows
37
38 TBD
22 39
23 ### Running Emscripten 40 ### Running Emscripten
24 41
25 After installing and configuring Emscripten you can run the following command: 42 After installing and configuring Emscripten you can setup the build
43 with the following commands:
26 44
27 python compile 45 meson build
46
47 By default it will create a debug build. Pass `--buildtype release` to
48 create a release build.
49
50 Then to build just do:
51
52 ninja -C build
53
54 This will regenerate the build files as needed.
28 55
29 This will produce a `lib/compiled.js` exporting the classes defined in C++ code. 56 This will produce a `lib/compiled.js` exporting the classes defined in C++ code.
30 57
31 ### Technical details 58 ### Technical details
32 59
33 Compilation is currently a two-step process. In the bindings generation step, 60 Compilation is currently a two-step process. In the bindings generation step,
34 the source files are compiled into `compiled/bindings.cpp.js` with the 61 the source files are compiled into `compiled/bindings.cpp.js` with the
35 `PRINT_BINDINGS` symbol defined. This application is then executed via Node.js 62 `PRINT_BINDINGS` symbol defined. This application is then executed via Node.js
36 and will print JavaScript wrappers for the C++ classes to 63 and will print JavaScript wrappers for the C++ classes to
37 `compiled/bindings.js` according to definitions within the `EMSCRIPTEN_BINDINGS` 64 `build/bindings.js` according to definitions within the `EMSCRIPTEN_BINDINGS`
38 macro in `compiled/bindings.cpp`. 65 macro in `compiled/bindings.cpp`.
39 66
40 In the actual compilation step the source files are compiled into 67 In the actual compilation step the source files are compiled into
41 `lib/compiled.js` without the `PRINT_BINDINGS` symbol, so that the 68 `lib/compiled.js` without the `PRINT_BINDINGS` symbol, so that the
42 `EMSCRIPTEN_BINDINGS` macro ignores its contents and merely emits some generic 69 `EMSCRIPTEN_BINDINGS` macro ignores its contents and merely emits some generic
43 functions necessary for the JavaScript bindings to work. The previously 70 functions necessary for the JavaScript bindings to work. The previously
44 generated `compiled/bindings.js` file is added to the end of Emscripten output. 71 generated `compiled/bindings.js` file is added to the end of Emscripten output.
45 72
46 The binding generation approach is heavily inspired by 73 The binding generation approach is heavily inspired by
47 [embind](http://kripken.github.io/emscripten-site/docs/porting/connecting_cpp_an d_javascript/embind.html). 74 [embind](http://kripken.github.io/emscripten-site/docs/porting/connecting_cpp_an d_javascript/embind.html).
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
85 Linting 112 Linting
86 ------- 113 -------
87 114
88 You can lint the code using [ESLint](http://eslint.org). 115 You can lint the code using [ESLint](http://eslint.org).
89 116
90 eslint *.js chrome lib test 117 eslint *.js chrome lib test
91 118
92 You will need to set up ESLint and our configuration first, see 119 You will need to set up ESLint and our configuration first, see
93 [eslint-config-eyeo](https://hg.adblockplus.org/codingtools/file/tip/eslint-conf ig-eyeo) 120 [eslint-config-eyeo](https://hg.adblockplus.org/codingtools/file/tip/eslint-conf ig-eyeo)
94 for more information. 121 for more information.
OLDNEW
« no previous file with comments | « .hgignore ('k') | meson.build » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld