<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">

<!--
  A lot of people read this document template.  Please keep it clean:

   - keep the document xhtml-compliant, as many people use validating editors
   - check your edits for typos, spelling errors, and questionable grammar
   - prefer css styles to formatting tags like <font>, <tt>, etc.
   - keep it human-readable and human-editable in a plain text editor:
     - strive to keep lines wrapped at 80 columns, unless a link prevents it
     - use plenty of whitespace
     - try to pretty-format (wrt nesting and indenting) any hairy html
   - check your inline javascript for errors using the javascript console
   
  Your readers will be very appreciative.
-->

<head>
  <title>Android Build System</title>

  <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

  <link href="../android.css" type="text/css" rel="stylesheet" />

<!-- commenting out so the xhtml validator doesn't whine about < and &&;
     the browser should still find the script tag. -->
<script language="JavaScript1.2" type="text/javascript">
<!--
function highlight(name) {
  if (document.getElementsByTagName) {
    tags              = [ 'span', 'div', 'tr', 'td' ];
    for (i in tags) {
      elements        = document.getElementsByTagName(tags[i]);
      if (elements) {
        for (j = 0; j < elements.length; j++) {
          elementName = elements[j].getAttribute("class");
          if (elementName == name) {
            elements[j].style.backgroundColor = "#C0F0C0";
          } else if (elementName && elementName.indexOf("rev") == 0) {
            elements[j].style.backgroundColor = "#FFFFFF";
          }
        }
      }
    }
  }
}
//-->
  </script>
  <!-- this style sheet is for the style of the toc -->
  <link href="toc.css" type="text/css" rel="stylesheet" />

  <style type="text/css">
    .warning {
        border: 1px solid red;
        padding: 8px;
        color: red;
    }
    pre.prettyprint {
        margin-top: 0;
    }
    li {
        margin-top: 8px;
    }
  </style>
</head>

<body onload="prettyPrint()">

<h1><a name="My_Project_" />Android Build System</h1>

<!-- Status is one of: Draft, Current, Needs Update, Obsolete -->
<p style="text-align:center">
  <strong>Status:</strong> <em>Draft </em> &nbsp;
  <small>(as of May 18, 2006)</small>
</p>

<p><b>Contents</b></p>
<!-- this div expands out to a list of contents based on the H2 and H3 headings.
Believe it! -->
 <div id="nav"  class="nav-2-levels"></div>

<h2>Objective</h2>
<p>The primary goals of reworking the build system are (1) to make dependencies
work more reliably, so that when files need to rebuilt, they are, and (2) to
improve performance of the build system so that unnecessary modules are not
rebuilt, and so doing a top-level build when little or nothing needs to be done
for a build takes as little time as possible.</p>

<h2>Principles and Use Cases and Policy</h2>
<p>Given the above objective, these are the overall principles and use cases
that we will support.  This is not an exhaustive list.</p>
<h3>Multiple Targets</h3>
<p>It needs to be possible to build the Android platform for multiple targets.
This means:</p>
<ul>
    <li>The build system will support building tools for the host platform,
    both ones that are used in the build process itself, and developer tools
    like the simulator.</li>
    <li>The build system will need to be able to build tools on Linux
    (definitely Goobuntu and maybe Grhat), MacOS, and to some degree on
    Windows.</li>
    <li>The build system will need to be able to build the OS on Linux, and in
    the short-term, MacOS.  Note that this is a conscious decision to stop
    building the OS on Windows.  We are going to rely on the emulator there
    and not attempt to use the simulator.  This is a requirement change now
    that the emulator story is looking brighter.</li>
</ul>
<h3>Non-Recursive Make</h3>
<p>To achieve the objectives, the build system will be rewritten to use make
non-recursively.  For more background on this, read <a href="http://aegis.sourceforge.net/auug97.pdf">Recursive Make Considered Harmful</a>.  For those that don't
want PDF, here is the
<a href="http://72.14.203.104/search?q=cache:HwuX7YF2uBIJ:aegis.sourceforge.net/auug97.pdf&hl=en&gl=us&ct=clnk&cd=2&client=firefox">Google translated version</a>.
<h3>Rapid Compile-Test Cycles</h3>
<p>When developing a component, for example a C++ shared library, it must be
possible to easily rebuild just that component, and not have to wait more than a
couple seconds for dependency checks, and not have to wait for unneeded
components to be built.</p>
<h3>Both Environment and Config File Based Settings</h3>
<p>To set the target, and other options, some people on the team like to have a
configuration file in a directory so they do not have an environment setup
script to run, and others want an environment setup script to run so they can
run builds in different terminals on the same tree, or switch back and forth
in one terminal.  We will support both.</p>
<h3>Object File Directory / make clean</h3>
<p>Object files and other intermediate files will be generated into a directory
that is separate from the source tree.  The goal is to have make clean be
"rm -rf <obj>" in the tree root directory.  The primary goals of
this are to simplify searching the source tree, and to make "make clean" more
reliable.</p>

<h3>SDK</h3>
<p>The SDK will be a tarball that will allow non-OS-developers to write apps.
The apps will actually be built by first building the SDK, and then building
the apps against that SDK.  This will hopefully (1) make writing apps easier
for us, because we won't have to rebuild the OS as much, and we can use the
standard java-app development tools, and (2) allow us to dog-food the SDK, to
help ensure its quality.  Cedric has suggested (and I agree) that apps built
from the SDK should be built with ant.  Stay tuned for more details as we
figure out exactly how this will work.</p>

<h3>Dependecies</h3>
<p>Dependencies should all be automatic.  Unless there is a custom tool involved
(e.g. the webkit has several), the dependencies for shared and static libraries,
.c, .cpp, .h, .java, java libraries, etc., should all work without intervention
in the Android.mk file.</p>

<h3>Wildcard source files</h3>
<p>Wildcarding source file will be discouraged.  It may be useful in some
scenarios.  The default <code>$(wildcard *)</code> will not work due to the
current directory being set to the root of the build tree.<p>

<h3>Multiple targets in one directory</h3>
<p>It will be possible to generate more than one target from a given
subdirectory.  For example, libutils generates a shared library for the target
and a static library for the host.</p>

<h3>Makefile fragments for modules</h3>
<p><b>Android.mk</b> is the standard name for the makefile fragments that
control the building of a given module.  Only the top directory should
have a file named "Makefile".</p>

<h3>Use shared libraries</h3>
<p>Currently, the simulator is not built to use shared libraries.  This should
be fixed, and now is a good time to do it.  This implies getting shared
libraries to work on Mac OS.</p>


<h2>Nice to Have</h2>

<p>These things would be nice to have, and this is a good place to record them,
however these are not promises.</p>

<h3>Simultaneous Builds</h3>
<p>The hope is to be able to do two builds for different combos in the same
tree at the same time, but this is a stretch goal, not a requirement.
Doing two builds in the same tree, not at the same time must work.  (update:
it's looking like we'll get the two builds at the same time working)</p>

<h3>Deleting headers (or other dependecies)</h3>
<p>Problems can arise if you delete a header file that is referenced in
".d" files.  The easy way to deal with this is "make clean".  There
should be a better way to handle it. (from fadden)</p>
<p>One way of solving this is introducing a dependency on the directory.  The
problem is that this can create extra dependecies and slow down the build.
It's a tradeoff.</p>

<h3>Multiple builds</h3>
<p>General way to perform builds across the set of known platforms.  This
would make it easy to perform multiple platform builds when testing a
change, and allow a wide-scale "make clean".  Right now the buildspec.mk
or environment variables need to be updated before each build. (from fadden)</p>

<h3>Aftermarket Locales and Carrier</h3>
<p>We will eventually need to add support for creating locales and carrier
customizations to the SDK, but that will not be addressed right now.</p>


<h2><a id="usage"/>Usage</h2>
<p>You've read (or scrolled past) all of the motivations for this build system,
and you want to know how to use it.  This is the place.</p>

<h3>Your first build</h3>
<p>The <a href="../building.html">Building</a> document describes how do do
builds.</p>

<h3>build/envsetup.sh functions</h3>
If you source the file build/envsetup.sh into your bash environment,
<code>. build/envsetup.sh</code>you'll get a few helpful shell functions:

<ul>
<li><b>printconfig</b> - Prints the current configuration as set by the
lunch and choosecombo commands.</li>
<li><b>m</b> - Runs <code>make</code> from the top of the tree.  This is
useful because you can run make from within subdirectories.  If you have the
<code>TOP</code> environment variable set, it uses that.  If you don't, it looks
up the tree from the current directory, trying to find the top of the tree.</li>
<li><b>croot</b> - <code>cd</code> to the top of the tree.</li>
<li><b>sgrep</b> - grep for the regex you provide in all .c, .cpp, .h, .java,
and .xml files below the current directory.</li>
</ul>

<h3>Build flavors/types</h3>
<p>
When building for a particular product, it's often useful to have minor
variations on what is ultimately the final release build.  These are the
currently-defined "flavors" or "types" (we need to settle on a real name
for these).
</p>

<table border=1>
<tr>
    <td>
        <code>eng<code>
    </td>
    <td>
        This is the default flavor. A plain "<code>make</code>" is the
        same as "<code>make eng</code>".  <code>droid</code> is an alias
        for <code>eng</code>.
        <ul>
        <li>Installs modules tagged with: <code>eng</code>, <code>debug</code>,
            <code>user</code>, and/or <code>development</code>.
        <li>Installs non-APK modules that have no tags specified.
        <li>Installs APKs according to the product definition files, in
            addition to tagged APKs.
        <li><code>ro.secure=0</code>
        <li><code>ro.debuggable=1</code>
        <li><code>ro.kernel.android.checkjni=1</code>
        <li><code>adb</code> is enabled by default.
    </td>
</tr>
<tr>
    <td>
        <code>user<code>
    </td>
    <td>
        "<code>make user</code>"
        <p>
        This is the flavor intended to be the final release bits.
        <ul>
        <li>Installs modules tagged with <code>user</code>.
        <li>Installs non-APK modules that have no tags specified.
        <li>Installs APKs according to the product definition files; tags
            are ignored for APK modules.
        <li><code>ro.adb.secure=1</code>
        <li><code>ro.secure=1</code>
        <li><code>ro.debuggable=0</code>
        <li><code>adb</code> is disabled by default.
    </td>
</tr>
<tr>
    <td>
        <code>userdebug<code>
    </td>
    <td>
        "<code>make userdebug</code>"
        <p>
        The same as <code>user</code>, except:
        <ul>
        <li>Also installs modules tagged with <code>debug</code>.
        <li><code>ro.debuggable=1</code>
        <li><code>adb</code> is enabled by default.
    </td>
</tr>
</table>

<p>
If you build one flavor and then want to build another, you should run
"<code>make installclean</code>" between the two makes to guarantee that
you don't pick up files installed by the previous flavor.  "<code>make
clean</code>" will also suffice, but it takes a lot longer.
</p>


<h3>More pseudotargets</h3>
<p>Sometimes you want to just build one thing.  The following pseudotargets are
there for your convenience:</p>

<ul>
<li><b>droid</b> - <code>make droid</code> is the normal build.  This target
is here because the default target has to have a name.</li>
<li><b>all</b> - <code>make all</code> builds everything <code>make
droid</code> does, plus everything whose <code>LOCAL_MODULE_TAGS</code> do not
include the "droid" tag.  The build server runs this to make sure
that everything that is in the tree and has an Android.mk builds.</li>
<li><b>clean-$(LOCAL_MODULE)</b> and <b>clean-$(LOCAL_PACKAGE_NAME)</b> - 
Let you selectively clean one target.  For example, you can type
<code>make clean-libutils</code> and it will delete libutils.so and all of the
intermediate files, or you can type <code>make clean-Home</code> and it will
clean just the Home app.</li>
<li><b>clean</b> - <code>make clean</code> deletes all of the output and
intermediate files for this configuration.  This is the same as <code>rm -rf
out/&lt;configuration&gt;/</code></li>
<li><b>clobber</b> - <code>make clobber</code> deletes all of the output
and intermediate files for all configurations.  This is the same as
<code>rm -rf out/</code>.</li>
<li><b>dataclean</b> - <code>make dataclean</code> deletes contents of the data 
directory inside the current combo directory.  This is especially useful on the
simulator and emulator, where the persistent data remains present between 
builds.</li>
<li><b>LOCAL_MODULE</b> - Anything you specify as a <code>LOCAL_MODULE</code>
in an Android.mk is made into a pseudotarget.  For example, <code>make
runtime</code> might be shorthand for <code>make
out/linux-x86-debug/system/bin/runtime</code> (which would work), and
<code>make libkjs</code> might be shorthand for <code>make
out/linux-x86-debug/system/lib/libkjs.so</code> (which would also work).</li>
<li><b>targets</b> - <code>make targets</code> will print a list of all of
the LOCAL_MODULE names you can make.</li>
</ul>

<h3><a name="templates"/>How to add another component to the build - Android.mk templates</h3>
<p>You have a new library, a new app, or a new executable.  For each of the
common types of modules, there is a corresponding file in the templates
directory.  It will usually be enough to copy one of these, and fill in your
own values.  Some of the more esoteric values are not included in the
templates, but are instead just documented here, as is the documentation
on using custom tools to generate files.</p>
<p>Mostly, you can just look for the TODO comments in the templates and do
what it says.  Please remember to delete the TODO comments when you're done
to keep the files clean.  The templates have minimal documentation in them,
because they're going to be copied, and when that gets stale, the copies just
won't get updated.  So read on...</p>

<h4>Apps</h4>
<p>Use the <code>templates/apps</code> file.</p>
<p>This template is pretty self-explanitory.  See the variables below for more
details.</p>

<h4>Java Libraries</h4>
<p>Use the <code>templates/java_library</code> file.</p>
<p>The interesting thing here is the value of LOCAL_MODULE, which becomes
the name of the jar file.  (Actually right now, we're not making jar files yet,
just directories of .class files,  but the directory is named according to
what you put in LOCAL_MODULE).  This name will be what goes in the 
LOCAL_JAVA_LIBRARIES variable in modules that depend on your java library.</p>

<h4>C/C++ Executables</h4>
<p>Use the <code>templates/executable</code> file, or the
<code>templates/executable_host</code> file.</p>
<p>This template has a couple extra options that you usually don't need.
Please delete the ones you don't need, and remove the TODO comments.  It makes
the rest of them easier to read, and you can always refer back to the templates
if you need them again later.</p>
<p>By default, on the target these are built into /system/bin, and on the
host, they're built into <combo>/host/bin.  These can be overridden by setting
<code>LOCAL_MODULE_PATH</code> or <code>LOCAL_MODULE_RELATIVE_PATH</code>.  See
<a href="#moving-targets">Putting targets elsewhere</a>
for more.</p>

<h4>Shared Libraries</h4>
<p>Use the <code>templates/shared_library</code> file, or the
<code>templates/shared_library_host</code> file.</p>
<p>Remember that on the target, we use shared libraries, and on the host,
we use static libraries, since executable size isn't as big an issue, and it
simplifies distribution in the SDK.</p>

<h4>Static Libraries</h4>
<p>Use the <code>templates/static_library</code> file, or the
<code>templates/static_library_host</code> file.</p>
<p>Remember that on the target, we use shared libraries, and on the host,
we use static libraries, since executable size isn't as big an issue, and it
simplifies distribution in the SDK.</p>

<h4><a name="custom-tools"/>Using Custom Tools</h4>
<p>If you have a tool that generates source files for you, it's possible
to have the build system get the dependencies correct for it.  Here are
a couple of examples.  <code>$@</code> is the make built-in variable for
"the current target." The <font color=red>red</font> parts are the parts you'll
need to change.</p>

<p>You need to put this after you have declared <code>LOCAL_PATH</code> and
<code>LOCAL_MODULE</code>, because the <code>$(local-generated-sources-dir)</code>
and <code>$(local-host-generated-sources-dir)</code> macros use these variables
to determine where to put the files.

<h5>Example 1</h5>
<p>Here, there is one generated file, called
chartables.c, which doesn't depend on anything.  And is built by the tool
built to $(HOST_OUT_EXECUTABLES)/dftables.  Note on the second to last line
that a dependency is created on the tool.</p>
<pre>
intermediates:= $(local-generated-sources-dir)
GEN := $(intermediates)/<font color=red>chartables.c</font>
$(GEN): PRIVATE_CUSTOM_TOOL = <font color=red>$(HOST_OUT_EXECUTABLES)/dftables $@</font>
$(GEN): <font color=red>$(HOST_OUT_EXECUTABLES)/dftables</font>
	$(transform-generated-source)
LOCAL_GENERATED_SOURCES += $(GEN)
</pre>

<h5>Example 2</h5>
<p>Here as a hypothetical example, we use use cat as if it were to transform
a file.  Pretend that it does something useful.  Note how we use a
target-specific variable called PRIVATE_INPUT_FILE to store the name of the
input file.</p>
<pre>
intermediates:= $(local-generated-sources-dir)
GEN := $(intermediates)/<font color=red>file.c</font>
$(GEN): PRIVATE_INPUT_FILE := $(LOCAL_PATH)/<font color=red>input.file</font>
$(GEN): PRIVATE_CUSTOM_TOOL = <font color=red>cat $(PRIVATE_INPUT_FILE) &gt; $@</font>
$(GEN): <font color=red>$(LOCAL_PATH)/input.file</font>
	$(transform-generated-source)
LOCAL_GENERATED_SOURCES += $(GEN)
</pre>

<h5>Example 3</h5>
<p>If you have several files that are all similar in
name, and use the same tool, you can combine them.  (here the *.lut.h files are
the generated ones, and the *.cpp files are the input files)</p>
<pre>
intermediates:= $(local-generated-sources-dir)
GEN := $(addprefix $(intermediates)<font color=red>/kjs/, \
            array_object.lut.h \
            bool_object.lut.h \</font>
        )
$(GEN): PRIVATE_CUSTOM_TOOL = <font color=red>perl libs/WebKitLib/WebKit/JavaScriptCore/kjs/create_hash_table $< -i > $@</font>
$(GEN): $(intermediates)/<font color=red>%.lut.h</font> : $(LOCAL_PATH)/<font color=red>%.cpp</font>
	$(transform-generated-source)
LOCAL_GENERATED_SOURCES += $(GEN)
</pre>

<h3><a name="unbundled-build"/>Unbundled build</h3>
<p>Unbundled build has several meanings by the context.
Let me explain the meaning by the flags related to "unbundled build"</p>
<h4>TARGET_BUILD_UNBUNDLED</h4>
<p>The source tree might not have the full platform sources. It is always set if
<code>TARGET_BUILD_APPS</code> or <code>TARGET_BUILD_UNBUNDLED_IMAGE</code> is set.</p>
<h4>TARGET_BUILD_USE_PREBUILT_SDKS</h4>
<p>It is an internal flag. If it is set, prebuilt SDKs are used, even if a module's
<code>LOCAL_SDK_VERSION</code> is <code>current</code> (including <code>system_current</code>,
<code>core_current</code>, and so on). If it is unset, build current SDKs,
and use them as usual.</p>
<h4>DISABLE_PREOPT</h4>
<p>It is an internal flag as well. If it is set, dexpreopt is disabled.
It is always set if <code>TARGET_BUILD_APPS</code> or <code>TARGET_BUILD_UNBUNDLED_IMAGE</code> is set,
because dexpreopt tightly depends on the platform.</p>
<h4>TARGET_BUILD_APPS</h4>
<p>Build the apps that can be distributed outside the platform, so it turns on
<code>TARGET_BUILD_UNBUNDLED</code> and <code>DISABLE_PREOPT</code>.
Also, it turns on <code>TARGET_BUILD_USE_PREBUILT_SDKS</code>, unless
<code>UNBUNDLED_BUILD_SDKS_FROM_SOURCE</code> is set.</p>
<h4>TARGET_BUILD_UNBUNDLED_IMAGE</h4>
<p>It is similar to <code>TARGET_BUILD_APPS</code>, but its target is an unbundled partition
(such as the vendor partition). Accordingly, it sets <code>TARGET_BUILD_UNBUNDLED</code> and <code>DISABLE_PREOPT</code>.
We can call the partition unbundled, because the partition can be distributed outside the platform.
And also, it turns on <code>TARGET_BUILD_USE_PREBUILT_SDKS</code>, unless
<code>UNBUNDLED_BUILD_SDKS_FROM_SOURCE</code> is set.</p>

<h3><a name="platform-specific"/>Platform specific conditionals</h3>
<p>Sometimes you need to set flags specifically for different platforms.  Here
is a list of which values the different build-system defined variables will be
set to and some examples.</p>
<table cellspacing=25>
<tr>
    <td valign=top align=center>
        <b>HOST_OS</b><br/>
        linux<br/>
        darwin
    </td>
    <td valign=top align=center>
        <b>HOST_ARCH</b><br/>
        x86<br/>
        x86_64
    </td>
    <td valign=top align=center>
        <b>HOST_BUILD_TYPE</b><br/>
        release<br/>
        debug
    </td>
</tr>
<tr>
    <td valign=top align=center>
        <b>TARGET_ARCH</b><br/>
        arm<br/>
        arm64<br/>
        x86<br/>
        x86_64
    </td>
    <td valign=top align=center>
        <b>TARGET_BUILD_TYPE</b><br/>
        release<br/>
        debug
    </td>
</tr>
</table>

<p>There are also special variables to use instead of conditionals. Many of the
normal variables (LOCAL_SRC_FILES, LOCAL_CFLAGS, etc) can be conditionally added
to with _{arch} _{32|64}, and for the host, _{os}.</p>

<h4>Some Examples</h4>
<pre>ifeq ($(TARGET_BUILD_TYPE),release)
LOCAL_CFLAGS += -DNDEBUG=1
endif

LOCAL_CFLAGS_arm += -DTARGET_IS_ARM

LOCAL_CFLAGS_64 += -DBIG_POINTER

# from libutils
# Use the futex based mutex and condition variable
# implementation from android-arm because it's shared mem safe
LOCAL_SRC_FILES_linux += futex_synchro.c
LOCAL_LDLIBS_linux += -lrt -ldl

</pre>


<h3><a name="moving-modules"/>Putting modules elsewhere</h3>
<p>If you have modules that normally go somewhere, and you need to have them
build somewhere else, read this.</p>
<p>If you have modules that need to go in a subdirectory of their normal
location, for example HAL modules that need to go in /system/lib/hw or
/vendor/lib/hw, set LOCAL_MODULE_RELATIVE_PATH in your Android.mk, for
example:</p>
<pre>
LOCAL_MODULE_RELATIVE_PATH := hw
</pre>
<p>If you have modules that need to go in an entirely different location, for
example the root filesystem instead of in /system, add these lines to your
Android.mk:</p>
<pre>
LOCAL_MODULE_PATH := $(TARGET_ROOT_OUT)
LOCAL_UNSTRIPPED_PATH := $(TARGET_ROOT_OUT_UNSTRIPPED)
</pre>
<p>For executables and libraries, you need to specify a
<code>LOCAL_UNSTRIPPED_PATH</code> location if you specified a
<code>LOCAL_MODULE_PATH</code>, because on target builds, we keep
the unstripped executables so GDB can find the symbols.
<code>LOCAL_UNSTRIPPED_PATH</code> is not necessary if you only specified
<code>LOCAL_MODULE_RELATIVE_PATH</code>.</p>
<p>Look in <code>core/envsetup.mk</code> for all of the variables defining
places to build things.</p>


<h3>Android.mk variables</h3>
<p>These are the variables that you'll commonly see in Android.mk files, listed
alphabetically.</p>
<p>But first, a note on variable naming:
<ul>
    <li><b>LOCAL_</b> - These variables are set per-module.  They are cleared
    by the <code>include $(CLEAR_VARS)</code> line, so you can rely on them
    being empty after including that file.  Most of the variables you'll use
    in most modules are LOCAL_ variables.</li>
    <li><b>PRIVATE_</b> - These variables are make-target-specific variables.  That
    means they're only usable within the commands for that module.  It also
    means that they're unlikely to change behind your back from modules that
    are included after yours.  This 
    <a href="http://www.gnu.org/software/make/manual/make.html#Target_002dspecific">link to the make documentation</a>
    describes more about target-specific variables.  Please note that there
    are a couple of these laying around the tree that aren't prefixed with
    PRIVATE_.  It is safe, and they will be fixed as they are discovered.
    Sorry for the confusion.</li>
    <li><b>INTERNAL_</b> - These variables are critical to functioning of
    the build system, so you shouldn't create variables named like this, and
    you probably shouldn't be messing with these variables in your makefiles.
    </li>
    <li><b>HOST_</b> and <b>TARGET_</b> - These contain the directories
    and definitions that are specific to either the host or the target builds.
    Do not set variables that start with HOST_ or TARGET_ in your makefiles.
    </li>
    <li><b>HOST_CROSS_</b> - These contain the directories and definitions that
    are specific to cross-building host binaries. The common case is building
    windows host tools on linux. Do not set variables that start with
    HOST_CROSS_ in your makefiles.
    </li>
    <li><b>BUILD_</b> and <b>CLEAR_VARS</b> - These contain the names of
    well-defined template makefiles to include.  Some examples are CLEAR_VARS
    and BUILD_HOST_PACKAGE.</li>
    <li>Any other name is fair-game for you to use in your Android.mk.  However,
    remember that this is a non-recursive build system, so it is possible that
    your variable will be changed by another Android.mk included later, and be
    different when the commands for your rule / module are executed.</li>
</ul>
</p>

<h4>LOCAL_ANNOTATION_PROCESSORS</h4>
<p>Set this to a list of modules built with <code>BUILD_HOST_JAVA_LIBRARY</code>
to have their jars passed to javac with -processorpath for use as annotation
processors.</p>

<h4>LOCAL_ANNOTATION_PROCESSOR_CLASSES</h4>
<p>Set this to a list of classes to be passed to javac as -processor arguments.
This list is would be unnecessary, as javac will autodetect annotation processor
classes, except that the Grok tool that is used on the Android source code
does not autodetect them and requires listing them manually.</p>

<h4>LOCAL_ASSET_FILES</h4>
<p>In Android.mk files that <code>include $(BUILD_PACKAGE)</code> set this
to the set of files you want built into your app.  Usually:</p>
<p><code>LOCAL_ASSET_FILES += $(call find-subdir-assets)</code></p>
<p>This will probably change when we switch to ant for the apps' build
system.</p>

<h4>LOCAL_CC</h4>
<p>If you want to use a different C compiler for this module, set LOCAL_CC
to the path to the compiler.  If LOCAL_CC is blank, the appropriate default
compiler is used.</p>

<h4>LOCAL_CXX</h4>
<p>If you want to use a different C++ compiler for this module, set LOCAL_CXX
to the path to the compiler.  If LOCAL_CXX is blank, the appropriate default
compiler is used.</p>

<h4>LOCAL_CFLAGS</h4>
<p>If you have additional flags to pass into the C or C++ compiler, add
them here.  For example:</p>
<p><code>LOCAL_CFLAGS += -DLIBUTILS_NATIVE=1</code></p>

<h4>LOCAL_CPPFLAGS</h4>
<p>If you have additional flags to pass into <i>only</i> the C++ compiler, add
them here.  For example:</p>
<p><code>LOCAL_CPPFLAGS += -ffriend-injection</code></p>
<code>LOCAL_CPPFLAGS</code> is guaranteed to be after <code>LOCAL_CFLAGS</code>
on the compile line, so you can use it to override flags listed in
<code>LOCAL_CFLAGS</code>.

<h4>LOCAL_CPP_EXTENSION</h4>
<p>If your C++ files end in something other than "<code>.cpp</code>",
you can specify the custom extension here.  For example:</p>
<p><code>LOCAL_CPP_EXTENSION := .cc</code></p>
Note that all C++ files for a given module must have the same
extension; it is not currently possible to mix different extensions.

<h4>LOCAL_NO_DEFAULT_COMPILER_FLAGS</h4>
<p>Normally, the compile line for C and C++ files includes global include
paths and global cflags.  If <code>LOCAL_NO_DEFAULT_COMPILER_FLAGS</code>
is non-empty, none of the default includes or flags will be used when compiling
C and C++ files in this module.
<code>LOCAL_C_INCLUDES</code>, <code>LOCAL_CFLAGS</code>, and
<code>LOCAL_CPPFLAGS</code> will still be used in this case, as will
any <code>DEBUG_CFLAGS</code> that are defined for the module.

<h4>LOCAL_COPY_HEADERS</h4>
<p class=warning>This will be going away.</p>
<p>The set of files to copy to the install include tree.  You must also
supply <code>LOCAL_COPY_HEADERS_TO</code>.</p>
<p>This is going away because copying headers messes up the error messages, and
may lead to people editing those headers instead of the correct ones.  It also
makes it easier to do bad layering in the system, which we want to avoid.  We
also aren't doing a C/C++ SDK, so there is no ultimate requirement to copy any
headers.</p>

<h4>LOCAL_COPY_HEADERS_TO</h4>
<p class=warning>This will be going away.</p>
<p>The directory within "include" to copy the headers listed in
<code>LOCAL_COPY_HEADERS</code> to.</p>
<p>This is going away because copying headers messes up the error messages, and
may lead to people editing those headers instead of the correct ones.  It also
makes it easier to do bad layering in the system, which we want to avoid.  We
also aren't doing a C/C++ SDK, so there is no ultimate requirement to copy any
headers.</p>

<h4>LOCAL_C_INCLUDES</h4>
<p>Additional directories to instruct the C/C++ compilers to look for header
files in.  These paths are rooted at the top of the tree.  Use
<code>LOCAL_PATH</code> if you have subdirectories of your own that you
want in the include paths.  For example:</p>
<p><code>
LOCAL_C_INCLUDES += extlibs/zlib-1.2.3<br/>
LOCAL_C_INCLUDES += $(LOCAL_PATH)/src
</code></p>
<p>You should not add subdirectories of include to
<code>LOCAL_C_INCLUDES</code>, instead you should reference those files
in the <code>#include</code> statement with their subdirectories.  For
example:</p>
<p><code>#include &lt;utils/KeyedVector.h&gt;</code><br/>
not <code><s>#include &lt;KeyedVector.h&gt;</s></code></p>
<p>There are some components that are doing this wrong, and should be cleaned
up.</p>

<h4>LOCAL_MODULE_TAGS</h4>
<p>Set <code>LOCAL_MODULE_TAGS</code> to any number of whitespace-separated
tags.  If the tag list is empty or contains <code>droid</code>, the module
will get installed as part of a <code>make droid</code>.  Otherwise, it will
only get installed by running <code>make &lt;your-module&gt;</code>
or with the <code>make all</code> pseudotarget.</p>

<h4>LOCAL_REQUIRED_MODULES</h4>
<p>Set <code>LOCAL_REQUIRED_MODULES</code> to any number of whitespace-separated
module names, like "libblah" or "Email".  If this module is installed, all
of the modules that it requires will be installed as well.  This can be
used to, e.g., ensure that necessary shared libraries or providers are
installed when a given app is installed.

<h4>LOCAL_FORCE_STATIC_EXECUTABLE</h4>
<p>If your executable should be linked statically, set 
<code>LOCAL_FORCE_STATIC_EXECUTABLE:=true</code>.  There is a very short
list of libraries that we have in static form (currently only libc).</p>

<h4>LOCAL_GENERATED_SOURCES</h4>
<p>Files that you add to <code>LOCAL_GENERATED_SOURCES</code> will be
automatically generated and then linked in when your module is built.
See the <a href="#custom-tools">Custom Tools</a> template makefile for an
example.</p>

<h4>LOCAL_JAVACFLAGS</h4>
<p>If you have additional flags to pass into the javac compiler, add
them here.  For example:</p>
<p><code>LOCAL_JAVACFLAGS += -Xlint:deprecation</code></p>

<h4>LOCAL_ERROR_PRONE_FLAGS</h4>
<p>If you have additional flags to pass into the error prone compiler, add
them here.  For example:</p>
<p><code>LOCAL_ERROR_PRONE_FLAGS += -Xep:ClassCanBeStatic:ERROR</code></p>

<h4>LOCAL_JAVA_LIBRARIES</h4>
<p>When linking Java apps and libraries, <code>LOCAL_JAVA_LIBRARIES</code>
specifies which sets of java classes to include.  Currently there are
two of these: <code>core</code> and <code>framework</code>.
In most cases, it will look like this:</p>
<p><code>LOCAL_JAVA_LIBRARIES := core framework</code></p>
<p>Note that setting <code>LOCAL_JAVA_LIBRARIES</code> is not necessary
(and is not allowed) when building an APK with
"<code>include $(BUILD_PACKAGE)</code>".  The appropriate libraries
will be included automatically.</p>

<h4>LOCAL_LDFLAGS</h4>
<p>You can pass additional flags to the linker by setting
<code>LOCAL_LDFLAGS</code>.  Keep in mind that the order of parameters is
very important to ld, so test whatever you do on all platforms.</p>

<h4>LOCAL_LDLIBS</h4>
<p><code>LOCAL_LDLIBS</code> allows you to specify additional libraries
that are not part of the build for your executable or library.  Specify
the libraries you want in -lxxx format; they're passed directly to the 
link line.  However, keep in mind that there will be no dependency generated
for these libraries.  It's most useful in simulator builds where you want
to use a library preinstalled on the host.  The linker (ld) is a particularly
fussy beast, so it's sometimes necessary to pass other flags here if you're
doing something sneaky. Some examples:</p>
<p><code>LOCAL_LDLIBS += -lcurses -lpthread<br/>
LOCAL_LDLIBS += -Wl,-z,origin
</code></p>

<h4>LOCAL_NO_MANIFEST</h4>
<p>If your package doesn't have a manifest (AndroidManifest.xml), then
set <code>LOCAL_NO_MANIFEST:=true</code>.  The common resources package
does this.</p>

<h4>LOCAL_PACKAGE_NAME</h4>
<p><code>LOCAL_PACKAGE_NAME</code> is the name of an app.  For example,
Dialer, Contacts, etc.  This will probably change or go away when we switch
to an ant-based build system for the apps.</p>

<h4>LOCAL_PATCH_MODULE (experimental option)</h4>
<p>As of January 2018, you almost certainly don't need this option, so please
ask and only use it if you understand what you're doing. This feature is
experimental and may go away in future.</p>
<p>
When compiling language level 9+ .java code in packages that are part of a
a system module, <code>LOCAL_PATCH_MODULE</code> names the module that your
sources and dependencies should be patched into. The Android runtime currently
(Jan 2018) doesn't implement the JEP 261 module system so this option is only
supported at compile time. It should only be needed to compile tests in packages
that exist in libcore and which are inconvenient to move elsewhere.
</p>

<h4>LOCAL_PATH</h4>
<p>The directory your Android.mk file is in. You can set it by putting the
following as the first line in your Android.mk:</p>
<p><code>LOCAL_PATH := $(my-dir)</code></p>
<p>The <code>my-dir</code> macro uses the 
<code><a href="http://www.gnu.org/software/make/manual/make.html#MAKEFILE_005fLIST-Variable">MAKEFILE_LIST</a></code>
variable, so you must call it before you include any other makefiles.  Also,
consider that any subdirectories you inlcude might reset LOCAL_PATH, so do your
own stuff before you include them.  This also means that if you try to write
several <code>include</code> lines that reference <code>LOCAL_PATH</code>,
it won't work, because those included makefiles might reset LOCAL_PATH.

<h4>LOCAL_POST_PROCESS_COMMAND</h4>
<p>For host executables, you can specify a command to run on the module
after it's been linked.  You might have to go through some contortions
to get variables right because of early or late variable evaluation:</p>
<p><code>module := $(HOST_OUT_EXECUTABLES)/$(LOCAL_MODULE)<br/>
LOCAL_POST_PROCESS_COMMAND := /Developer/Tools/Rez -d __DARWIN__ -t APPL\<br/>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-d __WXMAC__ -o $(module) Carbon.r
</code></p>

<h4>LOCAL_PREBUILT_EXECUTABLES</h4>
<p>When including $(BUILD_MULTI_PREBUILT) or $(BUILD_HOST_PREBUILT), set these
to executables that you want copied.  They're located automatically into the
right bin directory.</p>

<h4>LOCAL_PREBUILT_LIBS</h4>
<p>When including $(BUILD_MULTI_PREBUILT) or $(BUILD_HOST_PREBUILT), set these
to libraries that you want copied.  They're located automatically into the
right lib directory.</p>

<h4>LOCAL_SHARED_LIBRARIES</h4>
<p>These are the libraries you directly link against.  You don't need to
pass transitively included libraries.  Specify the name without the suffix:</p>
<p><code>LOCAL_SHARED_LIBRARIES := \<br/>
	&nbsp;&nbsp;&nbsp;&nbsp;libutils \<br/>
	&nbsp;&nbsp;&nbsp;&nbsp;libui \<br/>
	&nbsp;&nbsp;&nbsp;&nbsp;libaudio \<br/>
	&nbsp;&nbsp;&nbsp;&nbsp;libexpat \<br/>
	&nbsp;&nbsp;&nbsp;&nbsp;libsgl
</code></p>

<h4>LOCAL_SRC_FILES</h4>
<p>The build system looks at <code>LOCAL_SRC_FILES</code> to know what source
files to compile -- .cpp .c .y .l .java.  For lex and yacc files, it knows
how to correctly do the intermediate .h and .c/.cpp files automatically.  If
the files are in a subdirectory of the one containing the Android.mk, prefix
them with the directory name:</p>
<p><code>LOCAL_SRC_FILES := \<br/>
	&nbsp;&nbsp;&nbsp;&nbsp;file1.cpp \<br/>
	&nbsp;&nbsp;&nbsp;&nbsp;dir/file2.cpp
</code></p>

<h4>LOCAL_STATIC_LIBRARIES</h4>
<p>These are the static libraries that you want to include in your module.
Mostly, we use shared libraries, but there are a couple of places, like
host executables where we use static libraries instead.
<p><code>LOCAL_STATIC_LIBRARIES := \<br/>
	&nbsp;&nbsp;&nbsp;&nbsp;libutils \<br/>
	&nbsp;&nbsp;&nbsp;&nbsp;libtinyxml
</code></p>

<h4>LOCAL_MODULE</h4>
<p><code>LOCAL_MODULE</code> is the name of what's supposed to be generated
from your Android.mk.  For exmample, for libkjs, the <code>LOCAL_MODULE</code>
is "libkjs" (the build system adds the appropriate suffix -- .so .dylib .dll).
For app modules, use <code>LOCAL_PACKAGE_NAME</code> instead of 
<code>LOCAL_MODULE</code>.  We're planning on switching to ant for the apps,
so this might become moot.</p>

<h4>LOCAL_MODULE_PATH</h4>
<p>Instructs the build system to put the module somewhere other than what's
normal for its type.  If you override this, make sure you also set
<code>LOCAL_UNSTRIPPED_PATH</code> if it's an executable or a shared library
so the unstripped binary has somewhere to go.  An error will occur if you forget
to.</p>
<p>See <a href="#moving-modules">Putting modules elsewhere</a> for more.</p>

<h4>LOCAL_MODULE_RELATIVE_PATH</h4>
<p>Instructs the build system to put the module in a subdirectory under the
directory that is normal for its type.  If you set this you do not need to
set <code>LOCAL_UNSTRIPPED_PATH</code>, the unstripped binaries will also use
the relative path.</p>
<p>See <a href="#moving-modules">Putting modules elsewhere</a> for more.</p>

<h4>LOCAL_MODULE_HOST_OS</h4>
<p>This specifies which OSes are supported by this host module. It is not used
for target builds. The accepted values here are combinations of
<code>linux</code>, <code>darwin</code>, and <code>windows</code>. By default,
linux and darwin(MacOS) are considered to be supported. If a module should
build under windows, you must specify windows, and any others to be supported.
Some examples:</p>
<p><code>LOCAL_MODULE_HOST_OS := linux<br/>
LOCAL_MODULE_HOST_OS := darwin linux windows</code></p>

<h4>LOCAL_UNSTRIPPED_PATH</h4>
<p>Instructs the build system to put the unstripped version of the module
somewhere other than what's normal for its type.  Usually, you override this
because you overrode <code>LOCAL_MODULE_PATH</code> for an executable or a
shared library.  If you overrode <code>LOCAL_MODULE_PATH</code>, but not 
<code>LOCAL_UNSTRIPPED_PATH</code>, an error will occur.</p>
<p>See <a href="#moving-modules">Putting modules elsewhere</a> for more.</p>

<h4>LOCAL_WHOLE_STATIC_LIBRARIES</h4>
<p>These are the static libraries that you want to include in your module without allowing
the linker to remove dead code from them. This is mostly useful if you want to add a static library
to a shared library and have the static library's content exposed from the shared library.
<p><code>LOCAL_WHOLE_STATIC_LIBRARIES := \<br/>
	&nbsp;&nbsp;&nbsp;&nbsp;libsqlite3_android<br/>
</code></p>

<h4>LOCAL_YACCFLAGS</h4>
<p>Any flags to pass to invocations of yacc for your module.  A known limitation
here is that the flags will be the same for all invocations of YACC for your
module.  This can be fixed.  If you ever need it to be, just ask.</p>
<p><code>LOCAL_YACCFLAGS := -p kjsyy</code></p>



<h2>Implementation Details</h2>

<p>You should never have to touch anything in the config directory unless
you're adding a new platform, new tools, or adding new features to the
build system.  In general, please consult with the build system owner(s)
(<a href="mailto:android-build-team">android-build-team</a>) before you go
mucking around in here.  That said, here are some notes on what's going on
under the hood.</p>

<h3>Environment Setup / buildspec.mk Versioning</h3>
<p>In order to make easier for people when the build system changes, when
it is necessary to make changes to buildspec.mk or to rerun the environment
setup scripts, they contain a version number in the variable
BUILD_ENV_SEQUENCE_NUMBER.  If this variable does not match what the build
system expects, it fails printing an error message explaining what happened.
If you make a change that requires an update, you need to update two places
so this message will be printed.
<ul>
    <li>In core/envsetup.mk, increment the
        CORRECT_BUILD_ENV_SEQUENCE_NUMBER definition.</li>
    <li>In buildspec.mk.default, update the BUILD_ENV_SEQUENCE_DUMBER
        definition to match the one in core/envsetup.mk</li>
</ul>
The scripts automatically get the value from the build system, so they will
trigger the warning as well.
</p>

<h3>Additional makefile variables</h3>
<p>You probably shouldn't use these variables.  Please consult
<a href="mailto:android-build-team">android-build-team</a> before using them.
These are mostly there for workarounds for other issues, or things that aren't
completely done right.</p>

<h4>LOCAL_ADDITIONAL_DEPENDENCIES</h4>
<p>If your module needs to depend on anything else that
isn't actually built in to it, you can add those make targets to 
<code>LOCAL_ADDITIONAL_DEPENDENCIES</code>.  Usually this is a workaround
for some other dependency that isn't created automatically.</p>

<h4>LOCAL_BUILT_MODULE</h4>
<p class=warning>This should not be used, since multiple binaries are now
created from a single module defintiion.</p>
<p>When a module is built, the module is created in an intermediate
directory then copied to its final location.  LOCAL_BUILT_MODULE is
the full path to the intermediate file.  See LOCAL_INSTALLED_MODULE
for the path to the final installed location of the module.</p>

<h4>LOCAL_IS_HOST_MODULE</h4>
<p>Set by the host_xxx.mk includes to tell base_rules.mk and the other
includes that we're building for the host.</p>

<h4>LOCAL_INSTALLED_MODULE</h4>
<p class=warning>This should not be used, since multiple binaries are now
created from a single module defintiion.</p>
<p>The fully qualified path name of the final location of the module.
See LOCAL_BUILT_MODULE for the location of the intermediate file that
the make rules should actually be constructing.</p>

<h4>LOCAL_MODULE_CLASS</h4>
<p>Which kind of module this is.  This variable is used to construct other
variable names used to locate the modules.  See base_rules.mk and
envsetup.mk.</p>

<h4>LOCAL_MODULE_SUFFIX</h4>
<p>The suffix that will be appended to <code>LOCAL_MODULE</code> to form
<code>LOCAL_MODULE_NAME</code>.  For example, .so, .a, .dylib.</p>

<h4>LOCAL_STRIP_MODULE</h4>
<p>If set to true (the default), the binary will be stripped and a debug
link will be set up so that GDB will still work. If set to no_debuglink,
the binary will be stripped, but no debug link will be added. If set to
keep_symbols, it will strip the debug information, but keep the symbol table.
Any other value will prevent stripping.</p>

<h4>LOCAL_SYSTEM_SHARED_LIBRARIES</h4>
<p>Used while building the base libraries: libc, libm, libdl.  Usually
it should be set to "none," as it is in $(CLEAR_VARS).  When building
these libraries, it's set to the ones they link against.  For example,
libc, libstdc++ and libdl don't link against anything, and libm links against
libc.  Normally, when the value is none, these libraries are automatically
linked in to executables and libraries, so you don't need to specify them
manually.</p>


</body>
</html>
