| 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: clang-newlib, glibc, |
| pnacl, linux, mac, win. The default value is: "clang-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 |