-fuse-ld=lld
when linking. -fuse-ld=lld
when linking. Note: lld does not currently support compressed symbols on Windows. Issue 888. Clang also cannot generate compressed symbols on Windows, but this can be a problem when using artifacts built from Darwin or Linux. $NDK/toolchains/llvm/prebuilt/<host-tag>
and Clang will automatically find them. Instead of creating a standalone toolchain for API 26 ARM, instead invoke the compiler directly from the NDK: For r19 the toolchain is also installed to the old path to give build systems a chance to adapt to the new layout. The old paths will be removed in r20. The make_standalone_toolchain.py
script will not be removed. It is now unnecessary and will emit a warning with the above information, but the script will remain to preserve existing workflows. If you're using ndk-build, CMake, or a standalone toolchain, there should be no change to your workflow. This change is meaningful for maintainers of third-party build systems, who should now be able to delete some Android-specific code. For more information, see the Build System Maintainers guide. -fuse-ld=lld
when linking. libc++
. Note that ndk-build still defaults to no STL. For more details, see this blog post. libc++
is out of beta and is now the preferred STL in the NDK. Starting in r17,libc++
is the default STL for CMake and standalone toolchains. If you manually selecteda different STL, we strongly encourage you to move to libc++
. For more details, seethis blog post.android-9
) is no longer supported. The minimum API level target inthe NDK is now Android 4.0 (android-14
). If your APP_PLATFORM
is setlower than android-14
, android-14
is used instead.__cxa_bad_cast
. NDK_TOOLCHAIN_VERSION
now defaults to Clang.make-standalone-toolchain.sh
is now simply a wrapper around the Python version of the tool. There are a few behavioral differences. See the commit message for details. ndk-build
command defaults to using Clang in r13. We will remove GCC in a subsequent release. make-standalone-toolchain.sh
script will be removed in r13. Make sure make_standalone_toolchain.py
suits your needs. ndk-gdb.py
. (Issue 118) NdkCameraMetadataTags.h
so that it no longer contain an invalid enum value. build/tools/make_standalone_toolchain.py
. -fno-limit-debug-info
has been enabled by default for Clang debug builds. This change should improve debugability with LLDB.--build-id
is now enabled by default. NDK_USE_CYGPATH
should no longer cause problems with libgcc. (Android Issue 195486) -Wl
, --warn-shared-textrel
, and -Wl,--fatal-warnings
options are now enabled by default. If you have shared text relocations, your app cannot load on Android 6.0 (API level 23) or higher. Text relocations have never been allowed for 64-bit apps. libcamera2
APIs for devices with INFO_SUPPORTED_HARDWARE_LEVEL_LIMITED
or above. For more information, see Camera Characteristics. clang.exe
and clang++.exe
executables in the 32-bit Windows package are actually 64-bit. The 32-bit executable is named clang_32.exe
.__thread
should work for real this time.ifuncs
. (Issue 31) --long-plt
to fix internal linker error that occurs when linking huge arm32 binaries. --no-apply-dynamic
to work around a dynamic linker bug for earlier Android releases. dynamic_cast
does not work with Clang. We have fixed x86, stlport_static
, and optimization. ndk-gdb.py
. c++_shared
still does not work for ARM on Android 2.3 (API level 9) or Android 4.0 (API level 14). ndk-build
command will default to using Clang in an upcoming release. GCC will be removed in a later release. make-standalone-toolchain.sh
script will be removed in an upcoming release. If you use this script, please plan to migrate to the make_standalone_toolchain.py
as soon as possible. build/tools/make_standalone_toolchain.py
. On Windows, you no longer need Cygwin to use this feature. Note that the bash flavor will be removed in an upcoming release, so please test the new one now. -fno-limit-debug-info
option is enabled by default. This change enables better debugging with LLDB. --build-id
as a default option. This option causes an identifier to be shown in native crash reports so you can easily identify which version of your code was running. NDK_USE_CYGPATH
so that it no longer causes problems with libgcc (Issue 195486). -Wl,--warn-shared-textrel
and -Wl,--fatal-warnings
. If you have shared text relocations, your app does not load on Android 6.0 (API level 23) and higher. Note that this configuration has never been allowed for 64-bit apps. INFO_SUPPORTED_HARDWARE_LEVEL_LIMITED
feature level or higher. For more information, see the CameraCharacteristics
reference. clang.exe
and clang++.exe
executables in the 32-bit Windows package are actually 64-bit. The 32-bit executable is named clang_32.exe
. __thread
so that it works for real this time. libatomic
to not use ifuncs (NDK Issue 31). --long-plt
to fix an internal linker error when linking huge arm32 binaries. AArch64
. This problem was causing jump addresses to be calculated incorrectly for very large dynamic shared objects (DSOs). --no-apply-dynamic
to work around a dynamic linker bug for earlier Android releases. dynamic_cast
was not working with Clang, x86, stlport_static and optimization. ndk-gdb.py
script. c++_shared
does not work for ARM on Android 2.3 (API level 9) or Android 4.0 (API level 14). NdkCameraMetadataTags.h
header file, the camera metadata tag enum value ACAMERA_STATISTICS_LENS_SHADING_CORRECTION_MAP
was listed by accident and will be removed in next release. Use the ACAMERA_STATISTICS_LENS_SHADING_MAP
value instead. ndk-gdb.py
script. ndk-gdb
command --attach
option. (Issue 13) ndk-which
command. (Issue 29) ndk-gdb.py
is fixed. It had regressed entirely in r11.ndk-gdb
for Mac is fixed.ndk-depends
.ndk-gdb
.ndk-stack
.ndk-which
. This command had been entirely absent from previous releases.__cxxabi_config.h
.--toolchain
in make-standalone-toolchain.sh
.__thread
does not work. This is because the version of Clang we ship is missing a bug fix for emulated TLS support.__thread
by emulating ELF TLS with pthread thread-specific data.thread_local
works in some cases, but not for data with non-trivial destructors, because those cases require support from libc. This limitation does not apply when running on Android 6.0 (API level 23) or newer.android-23
.android-23
._WCHAR_IS_8BIT
.-target
option as armv5te-linux-androideabi
. -isystem
for platform includes. std::__ndk1
to prevent ODR issues with platform libc++.APP_PLATFORM
to Gingerbread. _Unwind_Exception
struct for 64 bits. byteswap.h
, endian.h
, sys/procfs.h
, sys/ucontext.h
, sys/user.h
, and uchar.h
from ToT Bionic. sys/cdefs.h
across all API levels. fegetenv and fesetenv
for arm. crtend_*
for mips64 and x86_64. --pic-veneer
.-fuse-ld=gold
at link time to use gold instead of bfd. The default will likely switch in the next release.-O0
causes test failures with dynamic_cast
. For more information, see the comments here. aarch64-linux-android-4.9
linker. For more information on this workaround, see Workaround for cortex-a53 erratum 843419.NDK_TOOLCHAIN_VERSION=clang
now picks that version of Clang by default.ld.gold
for all architectures. It can now link with or without support for multithreading; the default is to do it without. --threads
option.--no-threads
option.#pragma GCC optimize ('O0')
, but had a different level of optimization specified on the command line. The pragma
takes precedence.llvm.cttz.v2i64()
, an instruction with no counterpart in the ARM instruction set.PROPERTY_*
in media/NdkMediaDrm.h
.sys/ucontext.h
for mips64
.__builtin_isnan
and __builtin_isinf
.android-21/arch-mips/usr/include/asm/reg.h
and android-21/arch-mips64/usr/include/asm/reg.h
.mips
and mips64
to create a writable .gcc_except_table
section, thus matching GCC behavior. This change allows you to avoid the following linker warning: compiler-rt
issues that were causing crashes when Clang compiled for mips64
. For more information, see LLVM Issue 20098.stlport collate::compare
to return -1
and 1
. Previously, it had returned arbitrary signed numbers.ndk-gdb
for 64-bit ABIs. (Issue 118300)libc++ __wrap_iter
for GCC. For more information, see LLVM Issue 22355..asm
support for ABI x86_64
.stlport
issue. (Issue 127773)
from the project path in Windows. (Issue 160584) no rule to make target
error that occurred when compiling a single .c
file by executing the ndk-build.cmd
command from gradle
. (Issue 66937)libatomic.a
and libgomp.a
libraries that had been missing from the following host toolchains: aarch64-linux-android-4.9
mips64el-linux-android-4.9
mipsel-linux-android-4.9
x86_64-4.9
ld.gold
for aarch64
. The default linker remains ld.bfd
. To explicitly enable ld.gold
, add -fuse-ld=gold
to the LOCAL_LDFLAGS
or APP_LDFLAGS
variable.binutils-2.25
, which provides improved R6 support.-fstandalone-debug
(full debug info) a default option for Clang.-fstack-protector
with -fstack-protector-strong
for the ARM, AArch64, X86, and X86_64 toolchains for GCC 4.9, Clang 3.5, and Clang 3.6.--package
command-line switch to ndk-gdb
to allow the build system to override the package name. (Issue 56189)-mno-ldc1-stc1
for MIPS. This option may not work with the new -fpxx
and -mno-odd-spreg
options, or with the FPXX ABI.cpu-features
.NDK_TOOLCHAIN_VERSION=4.6
to ndk-build, or add --toolchain=arm-linux-androideabi-4.6
when executing make-standalone-toolchain.sh
on the command line. GCC 4.9 remains the default for 64-bit ABIs.-mstackrealign
by default. The NDK toolchain assumes a 16-byte stack alignment. The tools and options used by default enforce this rule. A user writing assembly code must make sure to preserve stack alignment, and ensure that other compilers also comply with this rule. (GCC bug 38496)-fPIE -pie
when building. In API levels 16 and higher, ndk-build uses PIE
when building. This change has a number of implications, which are discussed in Developer Preview Issue 888. These implications do not apply to shared libraries.--fix-cortex-a53-835769
, when -mfix-cortex-a53-835769
(enabled by default) is specified. For more information, see this binutils message and this binutils message. sscanf/vsscanf
hang that occurred in API level 21. The fix itself had been implemented in r10c. (Issue 77988)-fauto-profile
) crash that occurred with GCC 4.9 when -Os
was specified. (Issue 77571)posix_memalign
to API level 16. Also, added a prototype in stdlib.h
to API levels 16 to 19. (Issue 77861)stdatomic.h
so that it includes <atomic>
only for C++11.sys/user.h
, and gl2ext.h
, dlext.h
, fts.h
, sgidefs.h
for API level 21.sys/user.h
to rename mxcsr_mask
as mxcr_mask
, and to change the data type for u_ar0
unsigned long
to struct user_regs_struct*. sysconf()
return value type from int
to long
.thumb
for LOCAL_ARM_MODE
: In r10d, ndk-build adds LOCAL_LDFLAGS+=-mthumb
by default, unless one of the following conditions applies:LOCAL_ARM_MODE
equal to arm
.APP_OPTIM=debug
and AndroidManifest.xml
containing android:debuggable='true'
), where ARM mode is the default in order to retain compatibility with earlier toolchains. (Issue 74040)LOCAL_SRC_FILES
in ndk-build to use Windows absolute paths. (Issue 74333)make-standalone-toolchain.sh
. (Issue 74145)System.loadLibrary()
transitive dependencies. (Issue 41790)LOCAL_PCH
to improve Clang support. (Issue 77575)Android-L
to the official release designation: android-21
.google
branch of the GCC repository. Major differences from the upstream version of GCC 4.9 include:-O2
option now turns on vectorization, without loop peeling but with more aggressive unrolling.NDK_TOOLCHAIN_VERSION=clang
now picks Clang 3.5. Note that:-fno-integrated-as
as a workaround.-finline-functions
option that GCC supports.-Wno-invalid-command-line-argument
and -Wno-unused-command-line-argument
to ignore the unused flags until you're able decide on what to do with them longer-term.art-on
option. For more information, see prebuilt/common/gdb/common.setup
in the directory containing the NDK.--icf
option.arm_neon.h
support in x86 and x86_64, attaining coverage of ~93% of NEON intrinsics. For more information about NEON support: docs/Programmers_Guide/html/
), and see Architectures and CPUs > Neon.hello-neon
sample in samples/
. _FORTIFY_SOURCE
in headers/libs/android-21
, which appeared in r10 (when android-21
was still called Android-L
), but had no documentation.x = (cond) ? y : x
. (Issue 77569)-mno-fix-cortex-a53-835769
.android-21
: android/keycodes.h
android/sensor.h
: ASensorManager_getDefaultSensorEx
, ASensor_getFifoMaxEventCount
, ASensor_getFifoReservedEventCount
, ASensor_getStringType
, ASensor_getReportingMode
, and ASensor_isWakeUpSensor
.stdatomic.h
to improve compatibility with GCC 4.6, and provide support for the <atomic>
header.sys/ucontext.h
and sys/user.h
to all API levels. The signal.h
header now includes <sys/ucontext.h>
. You may remove any existing definition of struct ucontext
.posix_memalign
to API levels 17, 18, and 19.android_set_abort_message
, posix_fadvise
, posix_fadvise64
, pthread_gettid_np
.native-media/AndroidManifest.xml
sample. (Issue 106640)clock_nanosleep
and clock_settime
to API level 21. (Issue 77372) get_malloc_leak_info
, free_malloc_leak_info
, __srget
, __swbuf
, __srefill
, __swsetup
, __sdidinit
, __sflags
, __sfp
, __sinit
, __smakebuf
, __sflush
, __sread
, __swrite
, __sseek
, __sclose
, _fwalk
, __sglue
, __get_thread
, __wait4
, __futex_wake
, __open
, __get_tls
, __getdents64
, and dlmalloc
.basename_r
, dirname_r
, __isthreaded
, _flush_cache
(mips64).__signalfd4
.size_t
to int
in the following functions: strtoll_l
, strtoull_l
, wcstoll_l
, and wcstoull_l
.arc4random
, arc4random_buf
, and arc4random_uniform
.cxa_*
and the new
and delete
operators back to libstdc++.so
. This change restores r9d behavior; previous versions of r10 contained dummy files.--toolchain=
in make-standalone-toolchain.sh
so that it now properly supports use of a suffix specifying a version of Clang.strtod()
functions.docs/
.cpu-features
to detect ARMv8 support for the following instruction sets: AES, CRC32, SHA2, SHA1, and 64-bit PMULL/PMULL2. (Issue 106360)*-gcc-ar
, which is available in GCC 4.8, GCC 4.9, and Clang. Clang specifies it, instead of *-ar
. This setting brings improved LTO support.include-fixed/linux/a.out.h
and include-fixed/linux/compiler.h
headers from the GCC compiler. (Issue 73728)-flto
with GCC 4.8 on Mac OS X. The error message read:build-binary.mk.
(Issue 76992)-fauto-profile
) in GCC4.9 may cause crashing. (Issue 77571)-msse4.2
and -mpopcnt
by default. (Issue 73843.)stdio.h
from the include-fixed/
directories of all versions of GCC. (Issue 73728.)platforms/android-L/arch-*/usr/include/linux/netfilter*/
directories. (Issue 73704.)docs/
and sources/third_party/googletest/README.NDK
. (Issue 74069.)ctype.h
and wchar.h
: dn_expand()
, grantpt()
, inet_nsap_addr()
, inet_nsap_ntoa()
, insque()
, nsdispatch()
, posix_openpt()
, __pthread_cleanup_pop()
, __pthread_cleanup_push()
, remque()
, setfsgid()
, setfsuid()
, splice()
, tee()
, twalk()
(Issue 73719), and 42 *_l()
functions.cmsg_nxthdr
to __cmsg_nxthdr
.__libc_malloc_dispatch
.ptrace()
prototype to long ptrace(int, ..);
.sha1.h
.android_dlextinfo
in android/dlext.h
.__NDK_FPABI__
for functions receiving or returning float- or double-type values in stdlib.h
, time.h
, wchar.h
, and complex.h
.mipsel-linux-android-4.9
and mips64el-linux-android-4.9
, implementing a new multilib directory layout, and providing support for gdb-7.7cpu-features
to detect more arm64 features. (Change list 100339.)NDK_TOOLCHAIN_VERSION=clang
may not work for arm64-v8a and mips64.all32
and all64
settings for APP_ABI
. APP_ABI=all32
is equivalent toAPP_ABI=armeabi,armeabi-v7a,x86,mips
.APP_ABI=all64
is equivalent toAPP_ABI=arm64-v8a,x86_64,mips64
.APP_ABI=all
selects all ABIs.<tr1/cmath>
Before defining your own math function, check _GLIBCXX_USE_C99_MATH_TR1
to see afunction with that name already exists, in order to avoid 'multiple definition' errors from thelinker.platforms/android-L/
API directory. It includes:Android.h
header for SLES/OpenSLES, enabling support forsingle-precision, floating-point audio format in AudioPlayer.libGLESv3.so.
NDK_TOOLCHAIN_VERSION=4.9
to Application.mk
, or exporting it as anenvironment variable from the command line.--toolchain=
option in themake-standalone-toolchain.sh
script. For example: --toolchain=arm-linux-androideabi-4.9.
NDK_TOOLCHAIN_VERSION=4.8
or 4.9
to enable ndk-gdb to select GDB 7.6.-mssse3
build option to provide SSSE3 support, and made it the default for ABI x86(upgrading from SSE3). The image released by Google does not contain SSSE3 instructions.-fno-strict-aliasing
if you use <list>
, because __list_imp::_end
_ breaks TBAA rules. (Issue 61571.)LOCAL_PCH
. (Issue 25412).std::feof
, etc. (Issue 66668).-O3
assert on:llvm-3.2/llvm/include/llvm/MDBuilder.h:64: llvm::MDNode*llvm::MDBuilder::createBranchWeights(llvm::ArrayRef
(Issue 57381). Assertion failed: (!Fn && 'cast failed but able to resolve overload expression!!'), function CheckCXXCStyleCast, fileVolumes/data/ndk-toolchain/src/llvm-3.3/llvm/tools/clang/lib/Sema/SemaCast.cpp, line 2018
.(Issue 66950). ssize_t
to be int
instead of longint
.WCHAR_MIN
and WCHAR_MAX
so that they they takeappropriate signs according to the architecture they're running on:-D__WCHAR_UNSIGNED__
.wchar_t
to be 16 bits, use -fshort-wchar
.libc.so
, and added pread64
,pwrite64
, ftruncate64
forAndroid API level 12 and higher. (Issue 69319). For moreinformation, see the commit message accompanying AOSP change list 94137.putchar
. Warning message reads:include/stdio.h:236:5: warning: conflicts with previous declaration here[-Wattributes] int putchar(int);
(Change list 91185). make-standalone-toolchain.sh --stl=libc++
so that it:cxxabi.h
. (Issue 68001).APP_PLATFORM
environment variable.IsSystemLibrary()
in crazy_linker so that ituses strrchr()
instead of strchr()
to find the library path's true basename.-Wl,-shared
(as opposed to-shared
, which had no compilation issues). The problem was that Clang added -pie
for Androidtargets if neither -shared
nor -static
existed. This behavior, which wasincorrect, caused the linker to complain that -shared
and -pie
could notco-exist.arm_neon.h
to the x86 toolchain so that it now emulates ~47% ofNeon. There is currently no support for 64-bit types. For more information, see the section on ARMNeon intrinsics support in the x86 documentation.$NDK/tests/build/b14811006-GOT_PREL-optimization/
.--toolchain=x86_64-linux-android-4.9
, which is equivalent to--toolchain=x86_64-4.9
.NDK_TOOLCHAIN_VERSION=clang
option now picks Clang 3.4. GCC 4.6 isstill the default compiler.APP_ABI=armeabi-v7a-hard
, withadditional multilib option -mfloat-abi=hard
. These options are foruse with ARM GCC 4.6/4.8 and Clang 3.3/3.4 (which use 4.8's assembler, linker,and libs). When using these options, note the following changes:ndk-build
script, add thefollowing options for armeabi-v7a target:The built library is copied to libs/armeabi-v7a
. For make tobehave as expected, you cannot specify both armeabi-v7a
andarmeabi-v7a-hard
as make targets (i.e., on the APP_ABI= line).Doing so causes one of them to be ignored. Note that APP_ABI=all
is still equivalent toarmeabi armeabi-v7a x86 mips
.make-standalone-toolchain.sh
script copiesadditional libaries under /hard
directories. Add the above CFLAGS
and LFLAGS
to yourmakefile to enable GCC or Clang to link with libraries in /hard
.LOCAL_ASMFLAGS
and EXPORT_ASMFLAGS
flags for x86targets. The ndk-build
script usesprebuilts/*/bin/yasm*
to build LOCAL_SRC_FILES
thathave the .asm
extension.-gc-sections
support.APP_STL := c++_static
or APP_STL :=c++_shared
in Application.mk
. You may rebuild from source via LIBCXX_FORCE_REBUILD :=true
make-standalone-toolchain.sh --stl=libc++
to create a standalone toolchain with libc++ headers/lib.CPLUSPLUS-SUPPORT.html
.(Issue 36496)zlib
, bz2
,_curses
, _curses_panel
, _hashlib
,_ssl
zlib
, nis
,crypt
, _curses
, and _curses_panel
event_getmsg_helper
.#include <sys/types.h>
inandroid/asset_manager.h
for Android API level 13 and higher. (Issue 64988)#include
inandroid/rect_manager.h
for Android API level 14 and higher.JNICALL
to JNI_OnLoad
andJNI_OnUnload
in jni.h
. Note that JNICALL
is defined as __NDK_FPABI__
For more information, seesys/cdefs.h
.sys/cachectl.h
for all architectures. MIPSdevelopers can now include this header instead of writing #ifdef__mips__
.platforms/android-18/include/android/input.h
by adding __NDK_FPABI__
to functions taking or returningfloat or double values.struct stat
, which was incorrectly setto its 64-bit counterpart for Android API level 12 and later. This wrongsetting was aregression introduced in release r9c.__PTHREAD_MUTEX_INIT_VALUE
,__PTHREAD_RECURSIVE_MUTEX_INIT_VALUE
, and __PTHREAD_ERRORCHECK_MUTEX_INIT_VALUE
for Android APIlevel 9 and lower.scalbln
, scalblnf
, andscalblnl
to x86 libm.so
for APIs 18 and later.sources/android/support/include/iconv.h
. (Issue 63806)std::unexpected()
to callstd::terminate()
so that a user-defined std::terminate()
handler has a chance to run.std::nullptr
.SYSTEM_UI_FLAG_IMMERSIVE_STICKY
. Screen rotation does nottrigger onSystemUiVisibilityChange
, and so does not restoreimmersive mode.ndk-build
script to add-rpath-link=$SYSROOT/usr/lib
and-rpath-link=$TARGET_OUT
in order to use ld.bfd
tolink executables. (Issue 64266)-Bsymbolic
from all STL builds.ndk-gdb-py.cmd
by setting SHELL
asan environment variableinstead of passing it to python.exe
, which ignores the setting. (Issue 63054)make-standalone-toolchain.sh
script so thatthe --stl=stlport
option copies the gabi++ headers instead ofsymlinking them; the cmd.exe
and MinGW shells do not understandsymlinks created by cygwin.*cmd
scriptspreviously intended for use only in the cmd.exe
shell, in casedevelopers prefer to use ndk-build.cmd
in cygwin instead of therecommended ndk-build
script.make-standalone-toolchain.sh
script by moving instead of copying if the specified destination directory doesnot exist.-fuse-ld=mcld
, so that the following error no longer occurs:-mhard-float
support for__builtin
math functions. For ongoing information on fixes for-mhard-float
with STL, please follow Issue 61784.poll
to poll(structpollfd *, nfds_t, int);
in poll.h
.utimensat
to libc.so
for AndroidAPI levels 12 and 19. These libraries are now included for all Android APIlevels 12 through 19.futimens
into libc.so
, for Android APIlevel 19.clock_settime()
andclock_nanosleep()
to time.h
for Android API level 8and higher.CLOCK_MONOTONIC_RAW, CLOCK_REALTIME_COARSE,CLOCK_MONOTONIC_COARSE, CLOCK_BOOTTIME, CLOCK_REALTIME_ALARM,
andCLOCK_BOOTTIME_ALARM
in time.h.
CLOCK_REALTIME_HR
andCLOCK_MONOTONIC_HR.
source/android/ndk_helper
: Check_ReleaseStringUTFChars
in/system/lib/libdvm.so
that was causing crashes on x86 devices.ndk-build
fails that happen in cygwin when the NDKpackage isreferenced via symlink.ndk-build.cmd
fails that happen in windowscmd.exe
whenLOCAL_SRC_FILES
contains absolute paths. (Issue 69992)ndk-stack
script to proceed even when it can't parsea frame due to inability to find a routine, filename, or line number. In any ofthese cases, it prints ??
.ndk-stack
stack for windows-x64_64 targets so thatit no longer erroneously matches a frame line with a line in thestack:
section that doesn't contain pc
,eip
, or ip
. For example:LOCAL_EXPORT_LDFLAGS
.NDK_PROJECT_PATH=null
setting for use in anintegrated build system where options are explicitly passed tondk-build
. With this setting, ndk-build
makes noattempt to look for NDK_PROJECT_PATH.
This setting also preventsvariables from deriving default settings from NDK_PROJECT_PATH. As a result,the following variables must now be explicitly specified (with their defaultvalues if such exist): NDK_OUT, NDK_LIBS_OUT, APP_BUILD_SCRIPT,NDK_DEBUG
(optional, default to 0), and other APP_*
'scontained in Application.mk
.APP_ABI
can now be enumerated in a comma-delimited list. Forexample:android-ndk-r9c-cxx-stl-libs-with-debugging-info.zip
, using the-g
option. This optionhelps the ndk-stack
script provide better a stack dump across STL.This change should not affect the code/size of the final, stripped file.hello-jni
samples to report APP_ABI
atcompilation.ar
tool in Deterministic mode (option-D
) to build static libraries. (Issue 60705)include/android/*h
and math.h
for all Android API levels up to 18, including the addition of levels 13, 15, 16 and 17. For information on added APIs, see commit messages for Changes 68012 and 68014. (Issues 47150, 58528, and 38423)-mhard-float
in the existing armeabi-v7a ABI. For more information and current restrictions on Clang, see tests/device/hard-float/jni/Android.mk
.-fdiagnostics-color=auto
, -fdiagnostics-color=always,
or export GCC_COLORS
as shown below: For more information, see GCC Language Independent Options. thumb2
failing to generate 16-bit relative jump tables. (GCC Issue)g++.dg/cpp0x/lambda/lambda-defarg3.C
. (Change 62770, GCC Issue)*-gdb.exe
executables failing to launch. (Issue 58975)ARM.exidx
data for unwinding in prologue code and added a command (set arm exidx-unwinding
) to control exidx-based stack unwinding. (Issue 55826)dbx_reg_number
. The error message is asfollows: (GCC Patch) WCHAR_MIN
and WCHAR_MAX
to be unsigned according to spec (the X86/MIPS versions are signed). Define _WCHAR_IS_ALWAYS_SIGNED
to restore old behavior. (Issue 57749)include/netinet/tcp.h
to contain TCP_INFO
state enum. (Issue 38881)cdefs_elh.h
macro _C_LABEL_STRING
to stop generating warnings in the GCC 4.8 toolchain when using c++11 mode. (Issue 58135, Issue 58652)imaxabs
and imaxdiv
from header inttypes.h
.pthread_exit()
return values and pthread_self()
. (Issue 60686)mkdtemp()
function, which already exists in bionic
header stdlib.h
.samples/gles3jni
with Clang on Android API level 11.-gc-sections
and --eh-frame-hdr
.--no-warn-mismatch
option.cpu-features
option to not assume all VFPv4 devices support IDIV. Now this option only adds IDIV to white-listed devices, including Nexus 4. (Issue 57637)android_native_app_glue.c
erroneously logging errors on event predispatch operations.gabi++
terminate and unexpected_handler to be thread-safe.-integrated-as
option so it can pass tests for ssax-instructions
and fenv
.--eh-frame-hdr
even for static executables. For more information, see the GCC patch.CPU-ARCH-ABIS.html
. For more information, see NDK-DEPENDS.html
. (Issue 60142)__atomic_fetch_add
, __atomic_fetch_sub
, and __atomic_fetch_or
. vfprintf
. (Clang issue) tests/device/test-openmp
ld.mcld
significantly (1.5MB vs. ld.bfd
3.5MB and ld.gold
7.5MB), resulting in a speed improvement of approximately 20%.LOCAL_CONLYFLAGS
and APP_CONLYFLAGS
to specify options applicable to C only but not C++. The existing LOCAL_CFLAGS
and APP_CFLAGS
are also used for C++ compilation (to save trouble of specifying most options twice), so options such as -std=gnu99
may fail in g++ builds with a warning and clang++ builds with an error.gabi++
array helper functions.libgcc.a
files are built with -funwind-tables
to allow the stack to be unwound past previously blocked points, such as __aeabi_idiv0
.-mmxu
option.-mldc1-sdc1
to control ldxc1/sdxc1 toosources/android/crazy_linker/README.TXT
.bitmap-plasma
to draw to full screen rather than a 200x200 pixelarea.STABLE-APIS.html
and new code examples in samples/gles3jni/README
. ndk-build
builds, export NDK_TOOLCHAIN_VERSION=4.8
or add it in Application.mk
.--toolchain=
option in make-standalone-toolchain.sh
, for example:--toolchain=arm-linux-androideabi-4.8
-Wunused-local-typedefs
option is enabled by -Wall
. Be sure to add __attribute__((unused))
if you use compile-time asserts like sources/cxx-stl/stlport/stlport/stl/config/features.h
, line #311. For more information, see Change 55460-mno-unaligned-access
build option when building for kernels that do not support this feature.NDK_TOOLCHAIN_VERSION=clang
build option now picks Clang 3.3 by default. ld.gold
is the default where available, you must add -fuse-ld=mcld
in LOCAL_LDFLAGS
or APP_LDFLAGS
to enable MCLinker.ndk-depends
tool which prints ELF library dependencies. For more information, see NDK-DEPENDS.html
. (Issue 53486)android_native_app_glue
. (Issue 41755)-O
values when using Boost 1.52.0. (Issue 42891) libc.so
and libc.a
to support the wait4()
function. (Issue 19854)clone()
function.LOCAL_SHORT_COMMANDS
bug where the linker.list
file is empty or not used.ld.mcld --eh-frame-hdr
fails frequently.llvm/lib/VMCore/Value.cpp
. (Change 59021)out of memory allocating 4294967280 bytes
).ndk-gdb
script so that the --start
or --launch
actions now wait for the GNU Debug Server, so that it can more reliably hit breakpoints set early in the execution path (such as breakpoints in JNI code). (Issue 41278) --nowait
option to restore previous behavior. stepi
command past a bx pc
or blx pc
Thumb instruction. (Issue 56962, Issue 36149)gdbserver
to look for DT_MIPS_RLD_MAP
instead of DT_DEBUG
. (Issue 56586)ndk-build
script to enable you to specify a version of Clang as a command line option (e.g., NDK_TOOLCHAIN_VERSION=clang3.2
). Previously, only specifying the version as an environment variable worked._Unwind_Exception
to be 24 for MIPS build targets when using the Clang compiler. (Change 54141)ndk-build
script to ensure that built libraries are actually removed from projects that include prebuilt static libraries when using the ndk-build clean
command. (Change 54461, Change 54480)NDK_ANALYZE=1
option to be less verbose.gnu-libstdc++/Android.mk
to include a backward/
path for builds that use backward compatibility. (Issue 53404)stlport new
sometimes returned random values.ndk-gdb
to match the order of CPU_ABIS
, not APP_ABIS
. (Issue 54033)ntonl/swap32
error: invalid 'asm': operand number out of range
. (Issue 54465, Change 57242)ld.gold
to merge string literals.ld.gold
to handle large symbol alignment.ld.gold
to enable the --sort-section=name
option.-export-dynamic
option for statically linked programs. GCC no longer adds an .interp
section for statically linked programs.stlport
compilation error about inconsistent typedef
of _Unwind_Control_Block
. (Issue 54426)awk
scripts to handle AndroidManifest.xml
files created on Windows which may contain trailing r
characters and cause build errors. (Issue 42548)make-standalone-toolchain.sh
to probe the prebuilts/
directory to detect if the host is 32 bit or 64 bit.-integrated-as
option.pr1
and pr2
handler data. -mllvm -arm-enable-ehabi
option to fix the following Clang error: uses-sdk
element in application manifest. (Issue 57015)__set_errno
an inlined function, since __set_errno
in errno.h
is deprecated, and libc.so
no longer exports it.elf.h
to include stdint.h
. (Issue 55443)sys/un.h
to be included independently of other headers. (Issue 53646)MotionEvent_getHistorical
API family to take the const AInputEvent* motion_event
. (Issue 55873)malloc_usable_size
to take const void*
. (Issue 55725)wchar.h
to not redefine WCHAR_MAX
and WCHAR_MIN
<inttypes.h>
declaration for pointer-related PRI
and SCN
macros. (Issue 57218)sys/cdefs.h
header so that __WCHAR_TYPE__
is 32-bit for API levels less than 9, which means that wchat_t
is 32-bit for all API levels. To restore the previous behavior, define the _WCHAR_IS_8BIT
boolean variable. (Issue 57267)docs/
and miscellaneous documentation fixes. make-standalone-toolchain.sh
to support the stlport
library in addition to gnustl
, when you specify the option --stl=stlport
. For more information, see STANDALONE-TOOLCHAIN.html
.make-standalone-toolchain.sh
script so that the --llvm-version=
option creates the $TOOLCHAIN_PREFIX-clang
and $TOOLCHAIN_PREFIX-clang++
scripts in addition to clang
and clang++
, to avoid using the host's clang and clang++ definitions by accident. -fcxx-missing-return-semantics
flag to re-enable missingreturn semantics in Clang 3.2+. Normally, all paths should terminate with a return statement for a value-returning function. If this is not the case, clang inserts an undefined instruction (or trap in debug mode) at the path without a return statement. If you are sure your code is correct, use this flag to allow the optimizer to take advantage of the undefined behavior. If you are not sure, do not use this flag. The caller may still receive a random incorrect value, but the optimizer will not exploit it and make your code harder to debug.-fglobal-ctor-const-promotion
flag to re-enable promoting global variables with static constructor to be constants. With this flag, the global variable optimization pass of LLVM tries to evaluate the global variables with static constructors and promote them to global constants. Although this optimization is correct, it may cause some incompatability with code compiled by GCC. For example, code may do const_cast
to cast the constant to mutable and modify it. In GCC, the variable is in read-write and the code is run by accident. In Clang, the const variable is in read-only memory and may cause your application to crash.-mldc1-sdc1
to the MIPS GCC and Clang compilers. By default, compilers align 8-byte objects properly and emit the ldc1
and sdc1
instructions to move them around. If your app uses a custom allocator that does not always align with a new object's 8-byte boundary in the same way as the default allocator, your app may crash due to ldc1
and sdc1
operations on unaligned memory. In this case, use the -mno-ldc1-sdc1
flag to workaround the problem.APP_PLATFORM_LEVEL
is larger than APP_MIN_PLATFORM_LEVEL
. The APP_PLATFORM_LEVEL
may be lower than APP_PLATFORM
in jni/Application.mk
because the NDK does not have headers for all levels. In this case, the actual level is shifted downwards. The APP_MIN_PLATFORM_LEVEL
is specified by the android:minSdkVersion
in your application's manifest. (Issue 39752)android_getCpuIdArm()
and android_setCpuArm()
methods to cpu-features.c
. This addition enables easier retrieval of the ARM CPUID information. (Issue 53689)ndk-build
to use GCC 4.7's as/ld
for Clang compiling. monotonic_clock
and is_monotonic
have been renamed to steady_clock
and is_steady
, respectively.ndk-build
script: LOCAL_LDLIBS/LDFLAGS
are used in static library modules.LOCAL_LDLIBS/LDFLAGS
of a shared library or executable modules.APP_MODULES
is not defined and only static libraries are listed in Android.mk
, the script force-builds all of them. (Issue 53502)ndk-build
to support absolute paths in LOCAL_SRC_FILES
.*-gdbtui
executables, which are duplicates of the *-gdb
executables with the -tui
option enabled._STLP_HAS_INCLUDE_NEXT
back on. (Issue 53646)NDK_LIBS_OUT
to allow overriding of the path for libraries/gdbserver
from the default $PROJECT/libs
. For more information, see OVERVIEW.html
.-Wformat -Werror=format-security
. You may set LOCAL_DISABLE_FORMAT_STRING_CHECKS=true
to disable it. For more information, see ANDROID-MK.html
ndk-gdb-py
. For more information, see NDK-GDB.html
.bash
.*-x86_64.*
). For more information, see CHANGES.HTML
and NDK-BUILD.html
.CHANGES.HTML
.CHANGES.HTML
.ld.gold
linker is the default where available, so you must explicitly enable it. For more information, see CHANGES.HTML
.LOCAL_STATIC_LIBRARIES
, LOCAL_WHOLE_STATIC_LIBRARIES
and LOCAL_SHARED_LIBRARIES
. For more information, see CHANGES.HTML
. (Issue 39378)-O2
. Toolchains in previous releases were incorrectly built without optimization.gen_thumb_movhi_clobber at config/arm/arm.md:5832
. (Issue 52732)build_data_member_initialization, at cp/semantics.c:5790
.redirect_eh_edge_1, at tree-eh.c:2214
. (Issue 52909)<chrono>
clock resolution and enabled steady_clock
. (Issue 39680)_GLIBCXX_HAS_GTHREADS
for GCC 4.7 libstdc++. (Issue 41770, Issue 41859)posix_memalign
. (Change 51872)i386.c
, function distance_non_agu_define_in_bb()
. (Change 50383)cmov
behavior. (GCC Issue)setlocale()
in libstdc++/GCC4.7. (Issue 46718) ld.gold
runtime undefined reference to __exidx_start
and __exidx_start_end
. (Change 52134)<chrono>
in C++11mode. (Issue 39600)rvalue
. (Issue 41387)source:line
breakpoints when symbolscontain long, indirect file paths. (Issue 42448)read_program_header
for MIPS PIE executables. (Change 49592)STLport
segmentation fault in uncaught_exception()
. (Change 50236)STLport
bus error in exception handling due to unaligned access of DW_EH_PE_udata2
, DW_EH_PE_udata4
, and DW_EH_PE_udata8
.nothrow new[]
operator. (Issue 52833)size_t
, ssize_t
, and ptrdiff_t
.fenv.h
header.stddef.h
to not redefine offsetof
since it already exists in the toolchain.elf.h
to contain Elf32_auxv_t
and Elf64_auxv_t
. (Issue 38441) #ifdef
C++ definitions in the OpenSLES_AndroidConfiguration.h
header file. (Issue 53163) STLport
to abort after out of memory error instead of silently exiting. cpufeatures
to not parse /proc/self/auxv
. (Issue 43055)ld.gold
to not depend on host libstdc++ and on Windows platforms, to not depend on the libgcc_sjlj_1.dll
library..vsave
and fails assembler. (Change 49930)test-stlport
tests for MIPS build targets. (Change 51961)clang
and clang++
in standalone NDK compiler to detect -cc1
and to not specify -target
when found.ndk-build
to observe NDK_APP_OUT
set in Application.mk
. libc.so
and lib.a
which were missing the sigsetjmp
and siglongjmp
functions already declared in setjmp.h
. (Issue 19851)HOST_AWK
.ndk-build
script warning in windows when running from project's JNI directory. (Issue 40192)ndk-build
script does not build if makefile has trailing whitespace in the LOCAL_PATH
definition. (Issue 42841)__cxa_begin_cleanup
and __cxa_type_match
to have default visibility from the previous hidden visibility in GNU libstdc++. For more information, see CHANGES.HTML
.STLport
is built for ARM in Thumb mode.std::set_new_handler
in Gabi++. (Issue 52805)FUTEX
system call in GNU libstdc++.ndk-build
so that it no longer copies prebuilt static library to a project's obj/local/<abi>/
directory. (Issue 40302)__ARM_ARCH_5*__
from ARM toolchains/*/setup.mk
script. (Issue 21132)madd/msub/nmadd/nmsub/recip/rsqrt
instructions with 32-bit FPU.-fgraphite
, -fgraphite-identity
, -floop-block
, -floop-flatten
, -floop-interchange
, -floop-strip-mine
, -floop-parallelize-all
, and -ftree-loop-linear
. (info)polly
for Clang 3.1 on Linux and Max OS X 32-bit hosts which analyzes and optimizes memory access. (info)-flto
in GCC 4.7, 4.6, Clang 3.2 and Clang 3.1 on linux (Clang LTO via LLVMgold.so). MIPS compiler targets are not supported because ld.gold
is not available.--plugin
and --plugin-opt
for ld.gold
in GCC 4.6/4.7. --text-reorder
for ld.gold
in GCC 4.7._GLIBCXX_USE_C99_MATH
which undefines the isinf
script in the bionic header. For more information, see CHANGES.html
.APP_LDFLAGS
to the build scripts. For more information, see ANDROID-MK.html
.NDK_LOG=0
to disable the NDK_LOG
.NDK_HOST_32BIT=0
to disable the host developer environment 32-bit toolchain.-march=
and -mtune=
from pentiumpro
and generic
to i686
and atom
.build-gcc.sh
for the mingw
build type which was preventing a significant amount of parallel build processing.build-gabi++.sh
and build-stlport.sh
so they can now run from the NDK package. (Issue 52835) run-tests.sh
in the MSys
utilities collection.build-mingw64-toolchain.sh
script to more recent version.libgnustl_static.a
and stlport_static.a
without hidden visibility.ndk-build
, export the NDK_TOOLCHAIN_VERSION=4.7
variable or add it to Application.mk
.--toolchain=
option to make-standalone-toolchain.sh
, for example: stlport
exception support via gabi++. Note that the new gabi++ depends on dlopen
and related code, meaning that: -static
option or include libstlport_static.a
using APP_STL := stlport_static
. (You can still use the -static
option with a standalone toolchain.) Compiling a dynamic executable using include $(BUILD_EXECUTABLE)
continues to work because the compiler automatically adds the -ldl
option.-nostdlib
and {-Wl,--no-undefined}, you must manually include the -ldl
option.CPLUSPLUS-SUPPORT.html
. -mstack-protector-guard=
option for x86 to choose between a global default path which is compatible with older Android C library (bionic) and a new tls path (%gs:20) for -fstack-protector
, -fstack-protector-all
and -fstack-protector-strong
using the GCC 4.6 and higher compilers. -mstack-protector-guard
setting itself does not enable any -fstack-protector*
options.android_setCpu()
function to sources/android/cpufeatures/cpu-features.c
for use when auto-detection via /proc
is not possible in Android 4.1 and higher. (Chromium Issue 164154)ndk-build
script. (Issue 39810)-x c++
options from the Clang++ standalone build script. (Issue 39089)NDK_TOOLCHAIN_VERSION=clang3.1
option in Cygwin. (Issue 39585)make-standalone-toolchain.sh
script to allow generation of a standalone toolchain using the Cygwin or MinGW environments. The resulting toolchain can be used in Cygwin, MingGW or CMD.exe environments. (Issue 39915, Issue 39585)SL_IID_ANDROIDBUFFERQUEUESOURCE
option in android-14 builds for ARM and X86. (Issue 40625)ANDROID_CPU_X86_FEATURE_MOVBE
feature. (Issue 39317).cpp
file extension.__WINT_TYPE__
and wint_t
to be the same type.android/bitmap.h
. (Issue 15134) errno.h
.__STDC_VERSION__
in sys/cdefs.h
. (Issue 14627) byteswap.h
and dirent.h
.limits.h
to include page.h
which provides PAGE_SIZE
settings. (Issue 39983) glGetAttribLocation()
and glGetUniformLocation()
from int
to GLint
.__BYTE_ORDER
constant for x86 builds. (Issue 39824) ndk-build
script to not overwrite -Os
with -O2
for ARM builds.HOST_AWK
, HOST_SED
, and HOST_MAKE
settings.ld.gold
on fsck_msdos
builds linking objects built by the Intel C/C++ compiler (ICC).solib
events. (Issue 38402)libgcc.a
file when linking shared libraries.SIGILL
signal for paths without a return statement.make-standalone-toolchain.sh
to accept the suffix -clang3.1
which is equivalent to adding --llvm-version=3.1
to the GCC 4.6 toolchain.llvm-objdump
.libiberty.a
is built and placed in lib32/
.ndk-build
, export NDK_TOOLCHAIN_VERSION=clang3.1
or add this environment variable setting to Application.mk
.--llvm-version=3.1
to make-standalone-toolchain.sh
and replace CC
and CXX
in your makefile with <tool-path>/bin/clang
and <tool-path>/bin/clang++
. See STANDALONE-TOOLCHAIN.html
for details.ld.gold
for the Windows toolchain. Gold linker is also the default for ARM and X86 on all hosts. You may override it to use the ld.bfd
linker by adding LOCAL_LDFLAGS += -fuse-ld=bfd
to Android.mk
, or bypassing -fuse-ld=bfd
to the g++/clang++ command line that does the linking.ndk-build[.cmd]
and ndk-gdb
scripts, to prevent build errors that are difficult to diagnose.android-10
through android-13
in APP_PLATFORM
, project.properties
or default.properties
link against android-9
instead of android-14
. -fPIE
option for position-independent executables (PIE). A new APP_PIE
option allows you to control this behavior. See APPLICATION-MK.html
for details. platforms/android-14
and no new platforms/android-N
have been added. ndk-build
to provide warnings if the adjusted API level is larger than android:minSdkVersion
in the project's AndroidManifest.xml
.cpu-features
helper library to include more ARM-specific features. See sources/android/cpufeatures/cpu-features.h
for details.APP_ABI=armeabi-v7a
: -march=armv7-a
parameter to the linker. This change ensures that v7-specific libraries and crt*.o
are linked correctly.-mfpu=vfpv3-d16
to ndk-build
instead of the -mfpu=vfp
option used in previous releases.make-standalone-toolchain.sh
with root privileges resulted in the stand alone tool chain being inaccessible to some users. (Issue 35279) libstdc++.a
is now preserved when copied.r
from Windows prebuilt echo.exe
. The redundant r
caused gdb.setup
to fail in the GNU Debugger (GDB) because it incorrectly became part of the path. (Issue 36054)host-mkdir
implementation. (Issue 25875)libstdc++
to not merge typeinfo
names by default. For more details, see toolchain repo gcc/gcc-4.4.3/libstdc++-v3/libsupc++/typeinfo
. (Issue 22165)null
context in GCC 4.6 cp/mangle.c::write_unscoped_name
, where GCC may crash when the context is null
and dereferenced in TREE_CODE
.STLport
internal _IteWrapper::operator*()
implementation where a stale stack location holding the dereferenced value was returned and caused runtime crashes. (Issue 38630)g++
to not warn that the mangling of <va_list> was changed in GCC 4.4. The workaround using the -Wno-psabi
switch to avoid this warning is no longer required..arm
or .neon
suffixes in LOCAL_SRC_FILES
also used APP_STL
. With APP_STL
, the ndk-build
script searches for C++ files in LOCAL_SRC_FILES
before adding STL header/lib
paths to compilation. Modified ndk-build
to filter out .arm
and .neon
suffixes before the search, otherwise items in LOCAL_SRC_FILES
like myfile.cpp.arm.neon
won't be compiled as C++ code.binutils-2.21/ld.bfd
to be capable of linking object from older binutils without tag_FP_arch
, which was producing assertion fail error messages in GNU Binutils. (Issue 35209) binutils-2.19/ld
links prebuilt object by newer binutils-2.21
stdc++
compilation with both -mthumb
and -march=armv7-a
, by modifying make-standalone-toolchain.sh
to populate headers/libs
in sub-directory armv7-a/thumb
. (Issue 35616) reload1.c:3633
, caused by the ARM back-end expecting the wrong operand type when sign-extend from char
. (GCC Issue 50099)-fstack-protector
for X86, which is also the default for the ndk-build
x86 ABI target.STLport
endian-ness by setting _STLP_LITTLE_ENDIAN
to 1 when compiling MIPS libstlport_*
.__builtin_unreachable
issue when compiling LLVM. (GCC Issue 54369)cc1
compile process consuming 100% CPU. (GCC Issue 50380)gdb
with a hard-wired dependency on a specific version of Python. (Issue 36120) ndk-gdb
when APP_ABI
contains all
and matchs none of the known architectures. (Issue 35392) :
character if it looks like it could be part of a Windows path starting with a drive letter. (GDB Issue 12843) gdbserver
. (GDB Issue) solibs
when the linker is consistent. This change speeds up solib
event handling. (Issue 37677) solib
breakpoints. GDB now retries enable_break()
during every call to svr4_current_sos()
until it succeeds. (Change 43563)gdb
would not stop on breakpoints placed in dlopen-ed
libraries. (Issue 34856) SIGILL
in dynamic linker when calling dlopen()
, on system where /system/bin/linker
is stripped of symbols and rtld_db_dlactivity()
is implemented as Thumb
, due to not preserving LSB
of sym_addr
. (Issue 37147) arch-mips/include/asm/*
code that was incorrectly removed from original kernel. (Change 43335)__unused
with __linux_unused
in linux/sysctl.h
and linux/icmp.h
to avoid conflict with #define __unused
in sys/cdefs.h
.fenv.h
for enclosed C functions with __BEGIN_DECLS
and __END_DECLS
.malloc.h
.stdint.h
definition of uint64_t
for ANSI compilers. (Issue 1952)<arch>/include/machine/*
.link.h
for MIPS with new version supporting all platforms.linux-unistd.h
LONG_LONG_MIN
, LONG_LONG_MAX
and ULONG_LONG_MAX
from <pthread.h>
to <limits.h>
.ndk-stack-parser
._STLP_USE_EXCEPTIONS
, when not defined, to omit all declarations and uses of __Named_exception
. Compiling and use of __Named_exception
settings only occurs when STLport
is allowed to use exceptions.libc.so
so it does not export atexit()
and __do_handler
. These symbols are exported for ARM builds by the system version of the C library to support legacy native libraries. NDK-generated should never reference them directly. Instead, each shared library or executable should embed its own version of these symbols, provided by crtbegin_*.o
. -nostdlib -Wl,--no-undefined
options, you must provide your own __dso_handle
because crtbegin_so.o
is not linked in this case. The content of __dso_handle
does not matter, as shown in the following example code:objdump
for plt
entries to generate a more readable form function@plt
.libgcc.a
, from the X86 platform libc.so
library: __aeabi_idiv0
, __aeabi_ldiv0
, __aeabi_unwind_cpp_pr1
, and __aeabi_unwind_cpp_pr2
..ctors
, .dtors
, and .eh_frame
in MIPS crt*_so.S
.ndk-gdb
so that it only takes the last line of output for ndk-build
DUMP_XXXX
. This change ensures that if Application.mk
or Android.mk
print something with $(info ..)
syntax, it does not get injected into the result of DUMP_XXXX
. (More info)arch-x86
and arch-mips
headers from platforms/android-[3,4,5,8]
. Those headers were incomplete, since both X86 and MIPS ABIs are only supported at API 9 or higher.ndk-build
to recognize more C++ file extensions by default: .cc .cp .cxx .cpp .CPP .c++ .C
. You may still use LOCAL_CPP_EXTENSION
to overwrite these extension settings.samples/san-angeles
that caused a black screen or freeze frame on re-launch.hello-gl2
from android-5 to android-7native-activity
from android-9 to android-10native-audio
from android-9 to android-10native-plasma
from android-9 to android-10.note.android.ident
(defined in crtbegin_static/dynamic.o
) so that debugging tools can act accordingly. The structure member and values are defined as follows: .note.ABI-tag
are deprecated.run-tests-all.sh
which calls run-tests.sh
and standalone/run.sh
with various conditions. The script run-tests.sh
runs without the --abi
option, and is enhanced to compile most of the tests for all supported ABIs and run on all attached devicesLOCAL_SHORT_COMMANDS
issues on Mac OS, Windows Cygwin environments forstatic libraries. List file generation is faster, and it is not regenerated to avoid repeatedproject rebuilds.ndk-gdb
: -e
, -d
and -s
to adb moreconsistently./system/bin/link
information, so gdb
onthe host can set a breakpoint in __dl_rtld_db_dlactivity
and be aware of linker activity(e.g., rescan solib
symbols when dlopen()
is called).ndk-build clean
on Windows, which was failing to remove./libs/*/lib*.so
.ndk-build.cmd
to return a non-zero ERRORLEVEL
when make
fails.libc.so
to stop incorrectly exporting the __exidx_start
and__exidx_end
symbols.SEGV
when unwinding the stack past __libc_init
for ARM andMIPS.binutils
2.21 with gold
and GDB 7.3.x) toco-exist with the original GCC 4.4.3 toolchain (binutils
2.19 and GDB 6.6). NDK_TOOLCHAIN_VERSION=4.4.3
in Application.mk
to select the original one.gold
linker is only available for ARM and x86architectures on Linux and Mac OS hosts. This support is disabled by default. Add LOCAL_LDLIBS += -fuse-ld=gold
in Android.mk
to enable it.-fPIE
require the new GDB
for debugging,including binaries in Android 4.1 (API Level 16) system images.binutils
2.21 ld
tool contains back-ported fixes fromversion 2.22: ld --gc-sections
, which incorrectly retains zombie references toexternal libraries. (moreinfo).strip
command to preserve the original p_align
andp_flags
in GNU_RELRO
section if they are valid. Without this fix, programsbuilt with -fPIE
could not be debugged. (more info)sincos()
optimization for compatibility with older platforms.relro
/bind_now
protections by default: --noexecstack
to assembler and -z noexecstack
to linkerthat provides NX protection against buffer overflow attacks by enabling NX bit on stack andheap.-z relro
and -z now
to linker for hardening of internaldata sections after linking to guard against security vulnerabilities caused by memory corruption.(more info: 1,2)--execstack
option for theassembler and -z execstack
for the linker.-z norelro
and-z lazy
options for the linker.jni/Android.mk
by setting thefollowing options: docs/ANDROID-MK.html
for more details..note.ABI-tag
section (incrtbegin_static/dynamic.o
) so that debugging tools can act accordingly. The structuremember and values are defined as follows: mips-linux-gnu
relocation truncated to fit R_MIPS_TLS_LDM
issue. (more info)ld
tool segfaults when using --gc-sections
. (more info) GOT_PAGE
counting issue. (more info)mips_elf_count_got_symbols
.mips_elf_allocate_lazy_stub
..dynamic
to the data segment, so that it is writable.-mno-shared
option from the defaults in the MIPS toolchain.The default for Android toolchain is -fPIC
(or -fpic
if supported). If you do notexplicitly specify -mshared
, -fpic
, -fPIC
, -fpie
, or -fPIE
,the MIPS compiler adds -mno-shared
that turns off PIC. Fixed compiler not to add-mno-shared
in this case.hello-jni
and two-libs
so thatthe tests
project underneath it can compile.gdbserver
fromtoolchain/<arch-os-ver>/prebuilt/gdbserver
toprebuilt/android-<arch>/gdbserver/gdbserver
.i686-android-linux-
toi686-linux-android-
.sources/cxx-stl/gnu-libstdc++/include
and lib
tosources/cxx-stl/gnu-libstdc++/4.6
when compiled with GCC 4.6, orsources/cxx-stl/gnu-libstdc++/4.4.3
when compiled with GCC 4.4.3.libbfd.a
and libintl.a
from lib/
to lib32/
.build-mingw64-toolchain.sh
to generate a new Linux-hosted toolchainthat generates Win32 and Win64 executables.download-toolchain-sources.sh
by using the clone
command and only using checkout
for the directories that are needed to build the NDKtoolchain binaries.build-host-gcc.sh
and build-host-gdb.sh
scripts.tests/check-release.sh
to check the content of a given NDKinstallation directory, or an existing NDK package.tests/standalone/run.sh
standalone tests .if_dl.h
header from all platforms and architectures. The AF_LINK
and sockaddr_dl
elements it describes are specific to BSD (i.e., they don't existin Linux).docs/CPU-MIPS.html
in the NDK package. mips
to your APP_ABI
definition in your Application.mk
file to build for MIPS platforms. For example, the following line instructs ndk-build
to build your code for three distinct ABIs:Android.mk
files to build MIPS machine code.--arch=mips
option when calling make-standalone-toolchain.sh
. See docs/STANDALONE-TOOLCHAIN.html
for more details. dynamic_cast<D>(b)
of base class object b
to derived class D
is incorrectly adjusted in the opposite direction from the base class. (Issue 28721) make-standalone-toolchain.sh
fails to copy libsupc++.*
.ndk-build.cmd
to ensure that ndk-build.cmd
works correctly even if the user has redefined the SHELL
environment variable, which may be changed when installing a variety of development tools in Windows environments. cosf
, sinf
, expf
).NDK_OUT
environment variable. When defined, this variable is used to store all intermediate generated files, instead of $PROJECT_PATH/obj
. The variable is also recognized by ndk-gdb
. LOCAL_SHORT_COMMANDS
to true
in your Android.mk
. docs/ANDROID-MK.html
for details.android_getCpuCount()
implementation in the cpufeatures
helper library. On certain devices, where cores are enabled dynamically by the system, the previousimplementation would report the total number of active cores the first time the functionwas called, rather than the total number of physically available cores.sys/atomics.h
to avoid correctness issues on some multi-core ARM-based devices. Rebuild your unmodified sources with this version of the NDK and this problem should be completely eliminated. For more details, read docs/ANDROID-ATOMICS.html
.binutils
2.19 to fix debugging issues that appeared in NDK r7 (which switched to binutils
2.20.1).ndk-build
on 32-bit Linux. A packaging error put a 64-bit version of the awk
executable under prebuilt/linux-x86/bin
in NDK r7.ndk-build.cmd
). Other build modes were not affected. The fixes include: ndk-build.cmd
from a directory that was not the top of your project path (e.g., in any sub-directory of it).-lstdc++
(i.e., linking against the GNU libstdc++
C++ runtime). You should use -lgnustl_shared
if you want to link against the shared library version or -lstdc++
for the static version. docs/STANDALONE-TOOLCHAIN.html
for more details about this fix.gnustl_shared
on Cygwin. The linker complained that it couldn't find libsupc++.a
even though the file was at the right location.APP_STL
.libstdc++
runtime, the compiler will no longer forcibly enable exceptions and RTTI. This change results in smaller code. Application.mk
. (recommended)APP_GNUSTL_FORCE_CPP_FEATURES
to 'exceptions'
, 'rtti'
or both in your Application.mk
. See docs/APPLICATION-MK.html
for more details.ndk-gdb
now works properly when your application has private services running in independent processes. It debugs the main application process, instead of the first process listed by ps
, which is usually a service process.LOCAL_ARM_MODE
value and always compile certain source files (but not all) to 32-bit instructions.STLport
: Refresh the sources to match the Android platform version. This update fixes a few minor bugs: memmove
instead of memcpy
in string::assign
IsNANorINF
, IsINF
, IsNegNAN
, etc.STLport
: Removed 5 unnecessary static initializers from the library.cpu-features
helper library was updated to report three optional x86 CPU features (SSSE3
, MOVBE
and POPCNT
). See docs/CPU-FEATURES.html
for more details.docs/NDK-BUILD.html
was updated to mention NDK_APPLICATION_MK
instead of NDK_APP_APPLICATION_MK
to select a custom Application.mk
file.ndk-build
no longer creates an empty 'NUL' file in the current directory when invoked./cygdrive
./home
to serversubdir
instead of C:SomeDir
.ndk-build
does not try to use the native Windows tools under $NDK/prebuilt/windows/bin
with certain versions of Cygwin and/or GNU Make.<OMXAL/OpenMAXAL.h>
and <OMXAL/OpenMAXAL_Android.h>
headers allow applications targeting API level 14 to perform multimedia output directly from native code by using a new Android-specific buffer queue interface. For more details, see docs/openmaxal/index.html
and http://www.khronos.org/openmax/.docs/opensles/index.html
and http://www.khronos.org/opensles/.NDK_CCACHE
environment variable to ccache
(or the path to your ccache
binary). When declared, the NDK build system automatically uses CCache when compiling any source file. For example: APP_ABI
to all
to indicate that you want to build your NDK modules for all the ABIs supported by your given NDK release. This means that either one of the following two lines in your Application.mk
are equivalent with this release: APP_ABI
when calling ndk-build
from the command-line, which is a quick way to check that your project builds for all supported ABIs without changing the project's Application.mk file
. For example:LOCAL_CPP_FEATURES
variable in Android.mk
that allows you to declare which C++ features (RTTI or Exceptions) your module uses. This ensures that the final linking works correctly if you have prebuilt modules that depend on these features. See docs/ANDROID-MK.html
and docs/CPLUSPLUS-SUPPORT.html
for more details.$NDK/ndk-build
from your project path, the paths to the source, object, and binary files that are passed to the build commands are significantly shorter now, because they are passed relative to the current directory. This is useful when building projects with a lot of source files, to avoid limits on the maximum command line length supported by your host operating system. The behavior is unchanged if you invoke ndk-build
from a sub-directory of your project tree, or if you define NDK_PROJECT_PATH
to point to a specific directory.ndk-build.cmd
script from the command line from your project path. The script takes exactly the same arguments as the original ndk-build
script. The Windows NDK package comes with its own prebuilt binaries for GNU Make, Awk and other tools required by the build. You should not need to install anything else to get a working build system. ndk-gdb
does not work on Windows, so you still need Cygwin to debug.libs/<abi>
) if APP_MODULES
is not defined in your Application.mk
. For example, if a top-level module foo
imports a module bar
, then both libfoo.so
and libbar.so
are copied to the install location. Previously, only libfoo.so
was copied, unless you listed bar
in your APP_MODULES
too. If you define APP_MODULES
explicitly, the behavior is unchanged.ndk-gdb
now works correctly for activities with multiple categories in their MAIN intent filters.foo
imports static library bar
that imports static library zoo
, the libfoo.so
will now be linked against both libbar.a
and libzoo.a
.docs/NATIVE-ACTIVITY.HTML
: Fixed typo. The minimum API level should be 9, not 8 for native activities.docs/STABLE-APIS.html
: Added missing documentation listing EGL as a supported stable API, starting from API level 9.download-toolchain-sources.sh
: Updated to download the toolchain sources from android.googlesource.com, which is the new location for the AOSP servers.gabi++
. More details about it are available in the updated docs/CPLUSPLUS-SUPPORT.html
.gnustl_shared
that corresponds to the shared library version of GNU libstdc++ v3 (GPLv3 license). See more info at docs/CPLUSPLUS-SUPPORT.html
LOCAL_CPP_EXTENSION
. For example, to compile both foo.cpp
and bar.cxx
as C++ sources, declare the following: eglGetProcAddress()
or glGetProcAddress()
. The following list describes the newly supported extensions:GL_OES_vertex_array_object
GL_OES_EGL_image_external
GL_APPLE_texture_2D_limited_npot
GL_EXT_blend_minmax
GL_EXT_discard_framebuffer
GL_EXT_multi_draw_arrays
GL_EXT_read_format_bgra
GL_EXT_texture_filter_anisotropic
GL_EXT_texture_format_BGRA8888
GL_EXT_texture_lod_bias
GL_IMG_read_format
GL_IMG_texture_compression_pvrtc
GL_IMG_texture_env_enhanced_fixed_function
GL_IMG_user_clip_plane
GL_IMG_multisampled_render_to_texture
GL_NV_fence
GL_QCOM_driver_control
GL_QCOM_extended_get
GL_QCOM_extended_get2
GL_QCOM_perfmon_global_mode
GL_QCOM_writeonly_rendering
GL_QCOM_tiled_rendering
GL_OES_element_index_uint
GL_OES_get_program_binary
GL_OES_mapbuffer
GL_OES_packed_depth_stencil
GL_OES_texture_3D
GL_OES_texture_float
GL_OES_texture_float_linear
GL_OES_texture_half_float_linear
GL_OES_texture_npot
GL_OES_vertex_array_object
GL_OES_EGL_image_external
GL_AMD_program_binary_Z400
GL_EXT_blend_minmax
GL_EXT_discard_framebuffer
GL_EXT_multi_draw_arrays
GL_EXT_read_format_bgra
GL_EXT_texture_format_BGRA8888
GL_EXT_texture_compression_dxt1
GL_IMG_program_binary
GL_IMG_read_format
GL_IMG_shader_binary
GL_IMG_texture_compression_pvrtc
GL_IMG_multisampled_render_to_texture
GL_NV_coverage_sample
GL_NV_depth_nonlinear
GL_QCOM_extended_get
GL_QCOM_extended_get2
GL_QCOM_writeonly_rendering
GL_QCOM_tiled_rendering
EGL_ANDROID_recordable
EGL_NV_system_time
APP_ABI='armeabi x86'
is used for multi-architecture builds.atexit()
usage in shared libraries with the x86standalone toolchain.make-standalone-toolchain.sh --arch=x86
. It used to fail to copy the proper GNU libstdc++ binaries to the right location.__dso_handle
symbol (ARM only).$(SYSROOT)/usr/include
for x86 builds. See the bug for more information.ptrdiff_t
and size_t
in x86-specific systems when they are used with the x86 standalone toolchain.CHANGES.HTML
document included in the NDK package. docs/CPU-X86.html
in the NDK package. APP_ABI
definition in your Application.mk
file to build for x86 platforms. For example, the following line instructs ndk-build
to build your code for three distinct ABIs:Android.mk
files to build x86 machine code.--toolchain=x86-4.4.3
option when calling make-standalone-toolchain.sh
. See docs/STANDALONE-TOOLCHAIN.html
for more details. ndk-stack
tool lets you translate stack traces in logcat
that are generated by native code. The tool translates instruction addresses into a readable format that contains things such as the function, source file, and line number corresponding to each stack frame. For more information and a usage example, see docs/NDK-STACK.html
. arm-eabi-4.4.0
, which had been deprecated since NDK r5, has been removed from the NDK distribution.ndk-build
: Fixed a rare bug that appeared when trying to perform parallel builds of debuggable projects.LOCAL_WHOLE_STATIC_LIBRARIES
to work correctly with the new toolchain and added documentation for this in docs/ANDROID-MK.html
.gnustl_static
crashed when run on platform releases older than API level 8 (Android 2.2).ndk-gdb
: Fixed a bug that caused a segmentation fault when debuggingAndroid 3.0 or newer devices.<android/input.h>
: Two functions that were introduced in API level 9 (Android 2.3) were incorrect and are fixed. While this breaks the source API, the binary interface to the system is unchanged. The incorrect functions were missing a history_index
parameter, and the correct definitions are shown below: pthread_rwlock_init
).LOCAL_SRC_FILES
. This was not the case previously because the files were grouped by source extensions instead.import-module
fails, it now prints the list of directories that were searched. This is useful to check that the NDK_MODULE_PATH
definition used by the build system is correct.import-module
succeeds, it now prints the directory where the module was found to the log (visible with NDK_LOG=1
).ndk-gdb
: Better detection of adb shell
failures and improved error messages.<pthread.h>
: Fixed the definition of PTHREAD_RWLOCK_INITIALIZER
for API level 9 (Android 2.3) and higher.LOCAL_ARM_NEON
was set to true (typo in build/core/build-binary.mk
)..s
assembly files (.S
files were okay).ndk-build
issues: cygpath -m
from GNU Make for every source or object file, which caused problems with very large source trees. In case this doesn't work properly, defineNDK_USE_CYGPATH=1
in your environment to use cygpath -m
again.NDK_MODULE_PATH
environment variable fromworking properly when it contained multiple directories separated with a colon. prebuilt-common.sh
script contains fixes to check the compiler for 64-bit generated machine code, instead of relying on the host tag, which allows the 32-bit toolchain to rebuild properly on Snow Leopard. The toolchain rebuild scriptsnow also support using a 32-bit host toolchain.INET_ADDRSTRLEN
was added to<netinet/in.h>
.IN6_IS_ADDR_MC_NODELOCAL
andIN6_IS_ADDR_MC_GLOBAL
were added to <netinet/in6.h>
.<asm/byteorder.h>
to allowcompilation with -std=c99
.NativeActivity
class. For detailed information describing the changesin this release, read the CHANGES.HTML
https://everbenefits647.weebly.com/blog/ilayaraja-hits-download-zip. document included in the downloaded NDKpackage. .apk
file../configure && make
. See docs/STANDALONE-TOOLCHAIN.html for the details. The binaries for GCC 4.4.0 are stillprovided, but the 4.2.1 binaries were removed.cpufeatures
helper library that improvesreporting of the CPU type (some devices previously reported ARMv7 CPU when the device really wasan ARMv6). We recommend developers that use this library to rebuild their applications then upload to Google Play to benefit from the improvements.native-plasma
andnative-activity
, to demonstrate how to write a native activity.ndk-build
build command.ndk-gdb
command.armeabi-v7a
. The new ABI extends the existing armeabi
ABI to include these CPU instruction set extensions: cpufeatures
static library (with sources) that lets your app detect the host device's CPU features at runtime. Specifically, applications can check for ARMv7-A support, as well as VFPv3-D32 and NEON support, then provide separate code paths as needed.hello-neon
, that illustrates how to use the cpufeatures
library to check CPU features and then provide an optimized code path using NEON instrinsics, if supported by the CPU..apk
.Bitmap
objects from native code.hello-gl2
, that illustrates the use of OpenGL ES 2.0 vertex and fragment shaders.san-angeles
, that renders 3D graphics through the native OpenGL ES APIs, while managing activity lifecycle with a GLSurfaceView
object.