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

Side by Side Diff: README.CMAKE.md

Issue 29556820: Working Draft: CMake build for Emscripten
Patch Set: Created Oct. 2, 2017, 6:25 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
« CMakeLists.txt ('K') | « CMakeLists.txt ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 Experimental CMake build for adblockpluscore
2 ============================================
3
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
6 existing README.md intact.
7
8 Requirements
9 ------------
10
11 * [CMake](https://cmake.org). The Emscripten toolchain file requires version
12 3.4.3 or newer.
13 * [Emscripten 1.37](https://kripken.github.io/emscripten-site/)
14
15 Configuring CMake
16 -----------------
17
18 CMake uses a cache to hold configuration information that is not an ordinary
19 part of the write-build-test cycle. Thus the first invocation of CMake requires
20 extra configuration parameters. Subsequent invocations do not require these.
21 We require two such kinds of configuration data:
22 * Generator for build system
23 * Emscriptem tool chain
24
25 ### Build system generator
26
27 CMake is a cross-platform build system generator. It has the capability of
28 generating project files for a number of build systems, including those that
29 are an integral part of an IDE. Specifically, these include makefiles in
30 several variants, ninja, Eclipse, Visual Studio, and XCode.
31
32 To set up the cache with a generator, use the `-G` option on the CMake command
33 line. The quickest way to find the exact text to use as the argument to this
34 option is run CMake with the `--help` option`. Further information is available
35 in the CMake documentation; see cmake-generators(7).
36
37 ### Emscripten
38
39 CMake treats Emscripten as a cross-compiler. CMake can auto-detect native
40 compilers but requires pre-configuration for cross-compilers. Emscripten
41 provides a CMake toolchain file for this purpose. The location of this file is
42 what CMake ultimately needs.
43
44 The most direct way to specify the path to the toolchain file is to define a
45 cache variable directly on the CMake command line. The toolchain file is
46 buried within the Emscripten installation. The name of the cache variable and
47 the specific location of the file are visible within the following command
48 line fragment:
49
50 ```
51 cmake -DCMAKE_TOOLCHAIN_FILE=<EmscriptenRoot>/cmake/Modules/Platform/Emscrip ten.cmake [...]
52 ```
53
54 Note that the `<EmscriptenRoot>` about is _not_ the root of the Emscripten
55 SDK. Within the SDK, the location is `<SdkRoot>/emscripten/<version>`
56
57 This toolchain file assumes that it's running within an Emscripten shell with
58 all paths and environment variables set up. CMake will appear to configure
59 correctly outside this, but will not find executables, etc.
60
61
62 Notes
63 -----
64
65 ### Setting up Emscripten under Cygwin.
66
67 tl;dr version: Don't.
68
69 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
71 Windows executables and the transition from Cygwin path names to Windows path
72 names doesn't work correctly.
73
74 https://github.com/kripken/emscripten/issues/3947
75
76 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.
78
79
80 Work-in-Progress Notes
81 ----------------------
82
83 There are a number of 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
97 ### Other targets
98
99 There are no targets for testing or documentation.
100
101 ### Location of generated files
102
103 The generated files are built in the root directory at present. This works fine
104 for an out-of-source build with CMake. It might work less fine in the long term
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
OLDNEW
« CMakeLists.txt ('K') | « CMakeLists.txt ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld