| <html><body><pre>'ndk-build' Overview |
| |
| I. Usage: |
| --------- |
| |
| The Android NDK r4 introduced a new tiny shell script, named 'ndk-build', |
| to simplify building machine code. |
| |
| The script is located at the top-level directory of the NDK, and shall |
| be invoked from the command-line when in your application project |
| directory, or any of its sub-directories. For example: |
| |
| cd $PROJECT |
| $NDK/ndk-build |
| |
| Where $NDK points to your NDK installation path. You can also create an |
| alias or add $NDK to your PATH to avoid typing it every time. |
| |
| |
| II. Options: |
| ------------ |
| |
| All parameters to 'ndk-build' are passed directly to the underlying GNU Make |
| command that runs the NDK build scripts. Notable uses include: |
| |
| ndk-build --> rebuild required machine code. |
| ndk-build clean --> clean all generated binaries. |
| |
| ndk-build NDK_DEBUG=1 --> generate debuggable native code. |
| |
| ndk-build V=1 --> launch build, displaying build commands. |
| |
| ndk-build -B --> force a complete rebuild. |
| |
| ndk-build -B V=1 --> force a complete rebuild and display build |
| commands. |
| |
| ndk-build NDK_LOG=1 --> display internal NDK log messages |
| (used for debugging the NDK itself). |
| |
| ndk-build NDK_DEBUG=1 --> force a debuggable build (see below) |
| ndk-build NDK_DEBUG=0 --> force a release build (see below) |
| |
| ndk-build NDK_HOST_32BIT=1 --> Always use toolchain in 32-bit (see below) |
| |
| ndk-build NDK_APPLICATION_MK=<file> |
| --> rebuild, using a specific Application.mk pointed to by |
| the NDK_APPLICATION_MK command-line variable. |
| |
| ndk-build -C <project> --> build the native code for the project |
| path located at <project>. Useful if you |
| don't want to 'cd' to it in your terminal. |
| |
| |
| III. Debuggable versus Release builds: |
| -------------------------------------- |
| |
| In NDK r5, ndk-build has been modified to make it easier to switch between |
| release and debug builds. This is done by using the NDK_DEBUG variable. |
| For example: |
| |
| $NDK/ndk-build NDK_DEBUG=1 => forces the generation of debug binaries |
| $NDK/ndk-build NDK_DEBUG=0 => forces the generation of release binaries |
| |
| If you don't specify NDK_DEBUG, ndk-build will keep its default behaviour, |
| which is to inspect the AndroidManifest.xml, if any, and see if its |
| <application> element has android:debuggable="true". |
| |
| IMPORTANT: If you use the build tools of SDK r8 (or higher), you |
| won't need to touch your AndroidManifest.xml file at all! |
| |
| That's because if you build a debug package (e.g. with |
| "ant debug" or the corresponding option of the ADT plugin), |
| the tool will automatically pick the native debug files |
| generated with NDK_DEBUG=1. |
| |
| Also, as a convenience, the release and debug object files generated by the |
| NDK are now stored in different directories (e.g. obj/local/<abi>/objs and |
| obj/local/<abi>/objs-debug). This avoids having to recompile all your sources |
| when you switch between these two modes (even when you only modified one or |
| two source files). |
| |
| |
| IV. 64-bit and 32-bit toolchains: |
| --------------------------------- |
| |
| Some toolchains come with both 64-bit and 32-bit versions. For example, |
| directories $NDK/toolchain/<name>/prebuilt and $NDK/prebuilt may contains both |
| "linux-x86" and "linux-x86_64" folders for Linux tools in 32-bit and 64-bit modes, |
| respectively. The ndk-build script automatically chooses a 64-bit version of the |
| toolchain if the host OS supports it. You can force the use of a 32-bit toolchain by |
| using NDK_HOST_32BIT=1 either in your envorinment or on the ndk-build command-line. |
| |
| Note that 64-bit tools utilize host resources better (faster, handle larger |
| programs, etc) and they should function identically to their 32-bit counterparts. |
| Ie. 64-bit toolchains still generate 32-bit binaries for Android. |
| |
| |
| V. Requirements: |
| ---------------- |
| |
| You need GNU Make 3.81 or later to use 'ndk-build' or the NDK in general. |
| The build scripts will detect that you're using a non-compliant Make tool |
| and will complain with an error message. |
| |
| If you have GNU Make 3.81 installed, but that it is not launched by the |
| default 'make' command, define GNUMAKE in your environment to point to it |
| before launching 'ndk-build'. For example: |
| |
| GNUMAKE=/usr/local/bin/gmake ndk-build |
| |
| Or to make the change more permanent: |
| |
| export GNUMAKE=/usr/local/bin/gmake |
| ndk-build |
| |
| Adapt to your shell and GNU Make 3.81 installation location. |
| |
| You may override other host prebuilt tools in $NDK/prebuilt/<OS>/bin |
| with the following environment variables |
| |
| NDK_HOST_AWK=<path-to-awk> |
| |
| NDK_HOST_ECHO=<path-to-echo> |
| |
| NDK_HOST_CMP=<path-to-cmp> |
| |
| |
| VI. Internals: |
| -------------- |
| |
| 'ndk-build' itself is a tiny wrapper around GNU Make, its purpose is simply |
| to invoke the right NDK build script, it is equivalent to; |
| |
| $GNUMAKE -f $NDK/build/core/build-local.mk [parameters] |
| |
| Where '$GNUMAKE' points to GNU Make 3.81 or later, and $NDK points to your |
| NDK installation directory. |
| |
| Use this knowledge if you want to invoke the NDK build script from other |
| shell scripts (or even your own Makefiles). |
| </pre></body></html> |