| Left: | ||
| Right: |
| OLD | NEW |
|---|---|
| 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) | |
|
sergei
2017/12/12 17:37:29
Can we set the version to exactly 0.43.0 because i
hub
2017/12/13 20:28:59
I pinned 0.43.0 in the current patch.
I'm not con
Wladimir Palant
2017/12/14 10:57:01
Is there an issue on it already? If not, can you f
sergei
2017/12/14 14:22:46
Done, https://github.com/mesonbuild/meson/issues/2
| |
| 23 * [ninja](https://www.ninja-build.org) | |
|
sergei
2017/12/12 17:37:29
Could you please add that ninja executable should
hub
2017/12/13 20:28:59
This conflict with Wladimir saying we shouldn't ha
| |
| 22 | 24 |
| 23 ### Running Emscripten | 25 ### Running Emscripten |
| 24 | 26 |
| 25 After installing and configuring Emscripten you can run the following command: | 27 After installing and configuring Emscripten you can setup the build |
| 28 with the following commands: | |
| 26 | 29 |
| 27 python compile | 30 meson build |
| 31 | |
| 32 By default it will create a debug build. Pass `--buildtype release` to | |
| 33 create a release build. | |
| 34 | |
| 35 Then to build just do: | |
| 36 | |
| 37 ninja -C build | |
| 38 | |
| 39 This will regenerate the build files as needed. | |
| 28 | 40 |
| 29 This will produce a `lib/compiled.js` exporting the classes defined in C++ code. | 41 This will produce a `lib/compiled.js` exporting the classes defined in C++ code. |
| 30 | 42 |
| 31 ### Technical details | 43 ### Technical details |
| 32 | 44 |
| 33 Compilation is currently a two-step process. In the bindings generation step, | 45 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 | 46 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 | 47 `PRINT_BINDINGS` symbol defined. This application is then executed via Node.js |
| 36 and will print JavaScript wrappers for the C++ classes to | 48 and will print JavaScript wrappers for the C++ classes to |
| 37 `compiled/bindings.js` according to definitions within the `EMSCRIPTEN_BINDINGS` | 49 `build/bindings.js` according to definitions within the `EMSCRIPTEN_BINDINGS` |
| 38 macro in `compiled/bindings.cpp`. | 50 macro in `compiled/bindings.cpp`. |
| 39 | 51 |
| 40 In the actual compilation step the source files are compiled into | 52 In the actual compilation step the source files are compiled into |
| 41 `lib/compiled.js` without the `PRINT_BINDINGS` symbol, so that the | 53 `lib/compiled.js` without the `PRINT_BINDINGS` symbol, so that the |
| 42 `EMSCRIPTEN_BINDINGS` macro ignores its contents and merely emits some generic | 54 `EMSCRIPTEN_BINDINGS` macro ignores its contents and merely emits some generic |
| 43 functions necessary for the JavaScript bindings to work. The previously | 55 functions necessary for the JavaScript bindings to work. The previously |
| 44 generated `compiled/bindings.js` file is added to the end of Emscripten output. | 56 generated `compiled/bindings.js` file is added to the end of Emscripten output. |
| 45 | 57 |
| 46 The binding generation approach is heavily inspired by | 58 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). | 59 [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 Loading... | |
| 85 Linting | 97 Linting |
| 86 ------- | 98 ------- |
| 87 | 99 |
| 88 You can lint the code using [ESLint](http://eslint.org). | 100 You can lint the code using [ESLint](http://eslint.org). |
| 89 | 101 |
| 90 eslint *.js chrome lib test | 102 eslint *.js chrome lib test |
| 91 | 103 |
| 92 You will need to set up ESLint and our configuration first, see | 104 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) | 105 [eslint-config-eyeo](https://hg.adblockplus.org/codingtools/file/tip/eslint-conf ig-eyeo) |
| 94 for more information. | 106 for more information. |
| OLD | NEW |