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

Delta Between Two Patch Sets: README.CMAKE.md

Issue 29556820: Working Draft: CMake build for Emscripten
Left Patch Set: Created Oct. 2, 2017, 6:25 p.m.
Right Patch Set: Created Oct. 17, 2017, 6:28 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 | « CMakeLists.txt ('k') | no next file » | no next file with change/comment »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
LEFTRIGHT
1 Experimental CMake build for adblockpluscore 1 Experimental CMake build for adblockpluscore
2 ============================================ 2 ============================================
3 3
4 This files describes an experimental build using CMake. For the duration of 4 This files describes an experimental build using CMake. For the duration of
5 this experiment, this file will describe the build independently, leaving the 5 this experiment, this file will describe the build independently, leaving the
6 existing README.md intact. 6 existing README.md intact.
7 7
8 Requirements 8 Requirements
9 ------------ 9 ------------
10 10
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
47 the specific location of the file are visible within the following command 47 the specific location of the file are visible within the following command
48 line fragment: 48 line fragment:
49 49
50 ``` 50 ```
51 cmake -DCMAKE_TOOLCHAIN_FILE=<EmscriptenRoot>/cmake/Modules/Platform/Emscrip ten.cmake [...] 51 cmake -DCMAKE_TOOLCHAIN_FILE=<EmscriptenRoot>/cmake/Modules/Platform/Emscrip ten.cmake [...]
52 ``` 52 ```
53 53
54 Note that the `<EmscriptenRoot>` about is _not_ the root of the Emscripten 54 Note that the `<EmscriptenRoot>` about is _not_ the root of the Emscripten
55 SDK. Within the SDK, the location is `<SdkRoot>/emscripten/<version>` 55 SDK. Within the SDK, the location is `<SdkRoot>/emscripten/<version>`
56 56
57 This toolchain file assumes that it's running within an Emscripten shell with 57 #### Emscripten environment
58 all paths and environment variables set up. CMake will appear to configure
59 correctly outside this, but will not find executables, etc.
60 58
59 The Emscripten toolchain file is not particularly mature and can somewhat
60 brittle in practice. In particular, it does not attempt to see if it's being
61 used from within its SDK installation tree. Instead, it assumes that it is
62 running from within an Emscripten shell. It requires all relevant executables
63 to be present with the search path. It expects to find certain environment
64 variables.
65
66 Therefore, it is highly recommended that initial configuration of CMake be run
67 from within an Emscripten shell. These are available from the Emscripten SDK.
68 CMake will appear to configure correctly in other circumstances, but it can
69 fail otherwise.
70
71 Using CMake
72 -----------
73
74 CMake supports build both inside the source tree and outside it. The CMake
75 working directory is whatever the current directory is when CMake is initially
76 configured. The project root is specified on the command line of this
77 configuration run. For an in-source build, simply run CMake in the project root.
78
79 The present CMakeLists.txt is better suited for an out-of-source build. It
80 does not put its intermediate or output files in any special place, so they all
81 end up in the build directory.
82
83 ### Configurations
84
85 The present CMakeLists.txt supports four configurations:
86 * Release - `compile`
87 * Debug - `compile -d`
88 * ReleaseTrace - `compile -t`
89 * DebugTrace - `compile -d -t`
90
91 A single-configuration generator, such as `make` or `ninja`, supports only one
92 configuration per CMake build directory. Multiple build directories for
93 different configurations, however, work just fine; each build directory gets
94 its own CMake cache and working directory. [EH: I have a test setup locally
95 with all four configurations and some scripts to configure everything and to
96 build everything.] If no configuration is specified, it defaults to "Release".
97
98 ```
99 cmake -DCMAKE_BUILD_TYPE=Release [...]
100 ```
101
102 A multiple-configuration generator, such as for Eclipse or XCode, makes all
103 configurations available through the user interface of the IDE.
61 104
62 Notes 105 Notes
63 ----- 106 -----
64 107
65 ### Setting up Emscripten under Cygwin. 108 ### Setting up Emscripten under Cygwin.
66 109
67 tl;dr version: Don't. 110 tl;dr version: Don't.
68 111
69 It's a known issue that the Emscripten tool chain as distributed does not work 112 It's a known issue that the Emscripten tool chain as distributed does not work
70 under Cygwin. The core of the issue is that Emscripten uses a number of native 113 under Cygwin. The core of the issue is that Emscripten uses a number of native
71 Windows executables and the transition from Cygwin path names to Windows path 114 Windows executables and the transition from Cygwin path names to Windows path
72 names doesn't work correctly. 115 names doesn't work correctly.
73 116
74 https://github.com/kripken/emscripten/issues/3947 117 https://github.com/kripken/emscripten/issues/3947
75 118
76 Once the command `emcc -v` runs correctly, CMake will be able to set up the 119 Once the command `emcc -v` runs correctly, CMake will be able to set up the
77 Emscripten tool chain. Even then, there will still be errors in other ways. 120 Emscripten tool chain. Even then, there will still be errors in other ways.
78 121
79 122
80 Work-in-Progress Notes 123 Draft Notes
81 ---------------------- 124 -----------
82 125
83 There are a number of known deficiencies. 126 There are a few known deficiencies.
84
85 ### Configurations
86
87 The compile script has two options `--debug` and `--trace`. The current CMake
88 file has debug on and trace off. The right way to do with is with CMake
89 configurations: "Release", "ReleaseTrace", "Debug", "DebugTrace".
90
91 ### Building bindings
92
93 As of the present version, the step to run the bindings generator always runs
94 whether it needs to or not. This deficiency arises because the obvious way to do
95 this in CMake uses phony make targets that have this behavior.
96 127
97 ### Other targets 128 ### Other targets
98 129
99 There are no targets for testing or documentation. 130 There are no targets for testing or documentation.
100 131
101 ### Location of generated files 132 ### eslint
102 133
103 The generated files are built in the root directory at present. This works fine 134 There's no provision for ignoring compiled-js files in eslint. This is only an
104 for an out-of-source build with CMake. It might work less fine in the long term 135 issue for an in-source-tree build.
105 for an in-source build, but it has been expedient to date to put these files
106 in different locations from the `compile` script to make "before" vs. "after"
107 comparisons more quickly. Here's a list of these changes.
108
109 * `compiled/bindings.cpp.js` --> `binding-generator.js`
110 * `compiled/bindings.js` --> `bindings.js`
111 * `lib/compiled.js` --> `compiled.js`
112 * `lib/compiled.js.symbols` --> `compiled.js.symbols`
113
LEFTRIGHT

Powered by Google App Engine
This is Rietveld