Jeff Gaston | c6dfc4e | 2017-05-30 17:12:37 -0700 | [diff] [blame] | 1 | Android build system usage: |
| 2 | |
| 3 | m [-j] [<targets>] [<variable>=<value>...] |
| 4 | |
| 5 | |
| 6 | Ways to specify what to build: |
| 7 | The common way to specify what to build is to set that information in the |
| 8 | environment via: |
| 9 | |
| 10 | # Set up the shell environment. |
| 11 | source build/envsetup.sh # Run "hmm" after sourcing for more info |
| 12 | # Select the device and variant to target. If no argument is given, it |
| 13 | # will list choices and prompt. |
| 14 | lunch [<product>-<variant>] # Selects the device and variant to target. |
| 15 | # Invoke the configured build. |
| 16 | m [<options>] [<targets>] [<variable>=<value>...] |
| 17 | |
| 18 | <product> is the device that the created image is intended to be run on. |
| 19 | This is saved in the shell environment as $TARGET_PRODUCT by `lunch`. |
| 20 | <variant> is one of "user", "userdebug", or "eng", and controls the |
| 21 | amount of debugging to be added into the generated image. |
| 22 | This gets saved in the shell environment as $TARGET_BUILD_VARIANT by |
| 23 | `lunch`. |
| 24 | |
| 25 | Each of <options>, <targets>, and <variable>=<value> is optional. |
| 26 | If no targets are specified, the build system will build the images |
| 27 | for the configured product and variant. |
| 28 | |
| 29 | An alternative to setting $TARGET_PRODUCT and $TARGET_BUILD_VARIANT, |
| 30 | which you may see in build servers, is to execute: |
| 31 | |
| 32 | make PRODUCT-<product>-<variant> |
| 33 | |
| 34 | |
| 35 | A target may be a file path. For example, out/host/linux-x86/bin/adb . |
| 36 | Note that when giving a relative file path as a target, that path is |
| 37 | interpreted relative to the root of the source tree (rather than relative |
| 38 | to the current working directory). |
| 39 | |
| 40 | A target may also be any other target defined within a Makefile. Run |
| 41 | `m help` to view the names of some common targets. |
| 42 | |
| 43 | To view the modules and targets defined in a particular directory, look for: |
| 44 | files named *.mk (most commonly Android.mk) |
| 45 | these files are defined in Make syntax |
| 46 | files named Android.bp |
| 47 | these files are defined in Blueprint syntax |
| 48 | |
| 49 | For now, the full (extremely large) compiled list of targets can be found |
| 50 | (after running the build once), split among these two files: |
| 51 | |
| 52 | ${OUT}/build-<product>*.ninja |
| 53 | ${OUT}/soong/build.ninja |
| 54 | |
| 55 | If you find yourself interacting with these files, you are encouraged to |
| 56 | provide a more convenient tool for browsing targets, and to mention the |
| 57 | tool here. |
| 58 | |
| 59 | Targets that adjust an existing build: |
| 60 | showcommands Display the individual commands run to implement |
| 61 | the build |
| 62 | dist Copy into ${DIST_DIR} the portion of the build |
| 63 | that must be distributed |
| 64 | |
| 65 | Flags |
| 66 | -j <N> Run <N> processes at once |
| 67 | -j Autodetect the number of processes to run at once, |
| 68 | and run that many |
| 69 | |
| 70 | Variables |
| 71 | Variables can either be set in the surrounding shell environment or can be |
| 72 | passed as command-line arguments. For example: |
| 73 | export I_AM_A_SHELL_VAR=1 |
| 74 | I_AM_ANOTHER_SHELL_VAR=2 make droid I_AM_A_MAKE_VAR=3 |
| 75 | Here are some common variables and their meanings: |
| 76 | TARGET_PRODUCT The <product> to build # as described above |
| 77 | TARGET_BUILD_VARIANT The <variant> to build # as described above |
| 78 | DIST_DIR The directory in which to place the distribution |
| 79 | artifacts. |
| 80 | OUT_DIR The directory in which to place non-distribution |
| 81 | artifacts. |
| 82 | |
| 83 | There is not yet known a convenient method by which to discover the full |
| 84 | list of supported variables. Please mention it here when there is. |
| 85 | |