Build System for Native Client SDK examples
===========================================

The examples and libraries that ship with the Native Client SDK use a
build system based on GNU Make.

Each example or library is contained in its own directory along with a
Makefile. The Makefiles are capable of building Native Client
applications and libraries using any of the available toolchains as well
as building host applications with the host's toolchain. In order to
keep the top-level Makefiles simple, most of actual build rules are
specified in as set of shared rules files in the $NACL_SDK_ROOT/tools
directory.

This document describes some of the variables and macros used by in the
build system.  For more details please see the .mk files in the tools
folder.

Using the build system for new projects
--------------------------------------

It is perfectly possible to use the included build system for projects
outside of the Native Client SDK.  A good starting point for doing this
would be to copy the Makefile from the hello_world example.  In most
simple cases the only changes needed are to update the SOURCES and
TARGET variables.

User Variables
--------------

TARGET
  This variable holds the name of your project.  Normally this is the
  basename of the library or executable which is the final target.

SOURCES
  The list of sources to be built.  In most cases this list is passed to
  the compile and link macros.

VALID_TOOLCHAINS
  This variable can be used to control which toolchains are supported by
  the project.  Valid entries for this list are: newlib, glibc, pnacl,
  linux, mac, win.  The default value is: "newlib glibc pnacl".

NACL_SDK_ROOT
  Optionally force the build system to use a certain location for the
  Native Client SDK. If not set within the Makefile the $NACL_SDK_ROOT
  environment variable will by used. It is an error if this variable is
  neither set within the Makefile nor in the environment.

Macros / Rules
--------------

The following macros can be used in the Makefiles to generate the rules
for building the various kinds types of target.  These are designed to
be used via the 'call' macro.  e.g.  $(call COMPILE_RULE,$(SOURCES))

COMPILE_RULE
  This rule is used to build object files from a list of sources.

SO_RULE
  Used to build shared objects from a list of sources.

LIB_RULE
  Used to build static libraries from a list of sources.

NMF_RULE
  Used to build nmf metadata file from a native client executable (or
  set of executables). This is needed in order to run the executable in
  chrome.

HTML_RULE
  Used to build both html and nmf files from a native client executable
  (or set of executables) which will allow the executable to be run
  in chrome.

For more information on how to use these rules in your Makefile see
the shared Makefiles in the tools folders:

common.mk
  Top level shared rules file that include the toolchain specific
  rules.

nacl_gcc.mk
  Rules for building using the gcc-based NaCl toolchains.

nacl_llvm.mk
  Rules for building using the llvm-based PNaCl toolchains.

host_gcc.mk
  Rules for building using the linux/mac host gcc toolchain.

host_vc.mk
  Rules for building using the windows Visual Studio toolchain.

.. vim: ft=rst tw=72
