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

Unified Diff: README.CMAKE.md

Issue 29556820: Working Draft: CMake build for Emscripten
Patch Set: Created Oct. 17, 2017, 6:28 p.m.
Use n/p to move between diff chunks; N/P to move between comments.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « CMakeLists.txt ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: README.CMAKE.md
===================================================================
new file mode 100644
--- /dev/null
+++ b/README.CMAKE.md
@@ -0,0 +1,135 @@
+Experimental CMake build for adblockpluscore
+============================================
+
+This files describes an experimental build using CMake. For the duration of
+this experiment, this file will describe the build independently, leaving the
+existing README.md intact.
+
+Requirements
+------------
+
+* [CMake](https://cmake.org). The Emscripten toolchain file requires version
+3.4.3 or newer.
+* [Emscripten 1.37](https://kripken.github.io/emscripten-site/)
+
+Configuring CMake
+-----------------
+
+CMake uses a cache to hold configuration information that is not an ordinary
+part of the write-build-test cycle. Thus the first invocation of CMake requires
+extra configuration parameters. Subsequent invocations do not require these.
+We require two such kinds of configuration data:
+* Generator for build system
+* Emscriptem tool chain
+
+### Build system generator
+
+CMake is a cross-platform build system generator. It has the capability of
+generating project files for a number of build systems, including those that
+are an integral part of an IDE. Specifically, these include makefiles in
+several variants, ninja, Eclipse, Visual Studio, and XCode.
+
+To set up the cache with a generator, use the `-G` option on the CMake command
+line. The quickest way to find the exact text to use as the argument to this
+option is run CMake with the `--help` option`. Further information is available
+in the CMake documentation; see cmake-generators(7).
+
+### Emscripten
+
+CMake treats Emscripten as a cross-compiler. CMake can auto-detect native
+compilers but requires pre-configuration for cross-compilers. Emscripten
+provides a CMake toolchain file for this purpose. The location of this file is
+what CMake ultimately needs.
+
+The most direct way to specify the path to the toolchain file is to define a
+cache variable directly on the CMake command line. The toolchain file is
+buried within the Emscripten installation. The name of the cache variable and
+the specific location of the file are visible within the following command
+line fragment:
+
+```
+ cmake -DCMAKE_TOOLCHAIN_FILE=<EmscriptenRoot>/cmake/Modules/Platform/Emscripten.cmake [...]
+```
+
+Note that the `<EmscriptenRoot>` about is _not_ the root of the Emscripten
+SDK. Within the SDK, the location is `<SdkRoot>/emscripten/<version>`
+
+#### Emscripten environment
+
+The Emscripten toolchain file is not particularly mature and can somewhat
+brittle in practice. In particular, it does not attempt to see if it's being
+used from within its SDK installation tree. Instead, it assumes that it is
+running from within an Emscripten shell. It requires all relevant executables
+to be present with the search path. It expects to find certain environment
+variables.
+
+Therefore, it is highly recommended that initial configuration of CMake be run
+from within an Emscripten shell. These are available from the Emscripten SDK.
+CMake will appear to configure correctly in other circumstances, but it can
+fail otherwise.
+
+Using CMake
+-----------
+
+CMake supports build both inside the source tree and outside it. The CMake
+working directory is whatever the current directory is when CMake is initially
+configured. The project root is specified on the command line of this
+configuration run. For an in-source build, simply run CMake in the project root.
+
+The present CMakeLists.txt is better suited for an out-of-source build. It
+does not put its intermediate or output files in any special place, so they all
+end up in the build directory.
+
+### Configurations
+
+The present CMakeLists.txt supports four configurations:
+* Release - `compile`
+* Debug - `compile -d`
+* ReleaseTrace - `compile -t`
+* DebugTrace - `compile -d -t`
+
+A single-configuration generator, such as `make` or `ninja`, supports only one
+configuration per CMake build directory. Multiple build directories for
+different configurations, however, work just fine; each build directory gets
+its own CMake cache and working directory. [EH: I have a test setup locally
+with all four configurations and some scripts to configure everything and to
+build everything.] If no configuration is specified, it defaults to "Release".
+
+```
+ cmake -DCMAKE_BUILD_TYPE=Release [...]
+```
+
+A multiple-configuration generator, such as for Eclipse or XCode, makes all
+configurations available through the user interface of the IDE.
+
+Notes
+-----
+
+### Setting up Emscripten under Cygwin.
+
+tl;dr version: Don't.
+
+It's a known issue that the Emscripten tool chain as distributed does not work
+under Cygwin. The core of the issue is that Emscripten uses a number of native
+Windows executables and the transition from Cygwin path names to Windows path
+names doesn't work correctly.
+
+https://github.com/kripken/emscripten/issues/3947
+
+Once the command `emcc -v` runs correctly, CMake will be able to set up the
+Emscripten tool chain. Even then, there will still be errors in other ways.
+
+
+Draft Notes
+-----------
+
+There are a few known deficiencies.
+
+### Other targets
+
+There are no targets for testing or documentation.
+
+### eslint
+
+There's no provision for ignoring compiled-js files in eslint. This is only an
+issue for an in-source-tree build.
« no previous file with comments | « CMakeLists.txt ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld