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

Delta Between Two Patch Sets: README.md

Issue 29527808: Noissue - Use meson to build the C++ code (Closed) Base URL: https://hg.adblockplus.org/adblockpluscore/
Left Patch Set: Created Aug. 25, 2017, 5:17 p.m.
Right Patch Set: Removed compile. meson > 0.40.0 Created Dec. 15, 2017, 5:37 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 | « .hgignore ('k') | compile » ('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 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](https://www.python.org)
22 * [meson 0.40.0+](https://www.mesonbuild.com)
23 * [ninja](https://www.ninja-build.org)
24
25 Make sure that meson and ninja are in your PATH.
22 26
23 ### Running Emscripten 27 ### Running Emscripten
24 28
25 After installing and configuring Emscripten you can run the following commands: 29 After installing and configuring Emscripten you can setup the build
30 with the following commands:
26 31
27 mkdir build
28 meson build 32 meson build
29 ninja
30 33
31 This will produce a `build/compiled.js` exporting the classes defined 34 By default it will create a debug build. Pass `--buildtype release` to
32 in C++ code. 35 create a release build.
36
37 Then to build just do:
38
39 ninja -C build
40
41 This will regenerate the build files as needed.
42
43 This will produce a `lib/compiled.js` exporting the classes defined in C++ code.
33 44
34 ### Technical details 45 ### Technical details
35 46
36 Compilation is currently a two-step process. In the bindings generation step, 47 Compilation is currently a two-step process. In the bindings generation step,
37 the source files are compiled into `compiled/bindings.cpp.js` with the 48 the source files are compiled into `compiled/bindings.cpp.js` with the
38 `PRINT_BINDINGS` symbol defined. This application is then executed via Node.js 49 `PRINT_BINDINGS` symbol defined. This application is then executed via Node.js
39 and will print JavaScript wrappers for the C++ classes to 50 and will print JavaScript wrappers for the C++ classes to
40 `build/bindings.js` according to definitions within the `EMSCRIPTEN_BINDINGS` 51 `build/bindings.js` according to definitions within the `EMSCRIPTEN_BINDINGS`
41 macro in `compiled/bindings.cpp`. 52 macro in `compiled/bindings.cpp`.
42 53
43 In the actual compilation step the source files are compiled into 54 In the actual compilation step the source files are compiled into
44 `build/compiled.js` without the `PRINT_BINDINGS` symbol, so that the 55 `lib/compiled.js` without the `PRINT_BINDINGS` symbol, so that the
45 `EMSCRIPTEN_BINDINGS` macro ignores its contents and merely emits some generic 56 `EMSCRIPTEN_BINDINGS` macro ignores its contents and merely emits some generic
46 functions necessary for the JavaScript bindings to work. The previously 57 functions necessary for the JavaScript bindings to work. The previously
47 generated `compiled/bindings.js` file is added to the end of Emscripten output. 58 generated `compiled/bindings.js` file is added to the end of Emscripten output.
48 59
49 The binding generation approach is heavily inspired by 60 The binding generation approach is heavily inspired by
50 [embind](http://kripken.github.io/emscripten-site/docs/porting/connecting_cpp_an d_javascript/embind.html). 61 [embind](http://kripken.github.io/emscripten-site/docs/porting/connecting_cpp_an d_javascript/embind.html).
51 However, embind doesn't use a separate build step to produce the bindings, the 62 However, embind doesn't use a separate build step to produce the bindings, the
52 bindings are rather generated dynamically at run time. As a side-effect, it 63 bindings are rather generated dynamically at run time. As a side-effect, it
53 increases the build size considerably and also imposes a significant performance 64 increases the build size considerably and also imposes a significant performance
54 penalty. Also, generating JavaScript code dynamically is discouraged for browser 65 penalty. Also, generating JavaScript code dynamically is discouraged for browser
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
88 Linting 99 Linting
89 ------- 100 -------
90 101
91 You can lint the code using [ESLint](http://eslint.org). 102 You can lint the code using [ESLint](http://eslint.org).
92 103
93 eslint *.js chrome lib test 104 eslint *.js chrome lib test
94 105
95 You will need to set up ESLint and our configuration first, see 106 You will need to set up ESLint and our configuration first, see
96 [eslint-config-eyeo](https://hg.adblockplus.org/codingtools/file/tip/eslint-conf ig-eyeo) 107 [eslint-config-eyeo](https://hg.adblockplus.org/codingtools/file/tip/eslint-conf ig-eyeo)
97 for more information. 108 for more information.
LEFTRIGHT

Powered by Google App Engine
This is Rietveld