# Changelog

Report issues to [GitHub].

For Android Studio issues, go to https://b.android.com and file a bug using the
Android Studio component, not the NDK component.

If you're a build system maintainer that needs to use the tools in the NDK
directly, see the [build system maintainers guide].

[GitHub]: https://github.com/android/ndk/issues
[build system maintainers guide]: https://android.googlesource.com/platform/ndk/+/mirror-goog-main-ndk/docs/BuildSystemMaintainers.md

## Announcements

* Android V will allow OEMs to ship arm64-v8a devices with 16KiB page sizes.
  Devices that use this configuration will not be able to run existing apps that
  use native code. To be compatible with these devices, applications will need
  to rebuild all their native code to be 16KiB aligned, and rewrite any code
  which assumes a specific page size. ndk-build and CMake have options to enable
  this mode (see note about `APP_SUPPORT_FLEXIBLE_PAGE_SIZES` and
  `ANDROID_SUPPORT_FLEXIBLE_PAGE_SIZES` below). A future version of the NDK will
  enable this mode by default. If you're using or maintaining a third-party
  build system, consult the [build system maintainers guide] for instructions.

  See [Support 16 KB page sizes] for more information.

[Support 16 KB page sizes]: https://developer.android.com/guide/practices/page-sizes

## r27c

* Updated LLVM to clang-r522817c. See `clang_source_info.md` in the toolchain
  directory for version information.
  * [Issue 2040]: Further fixes for miscompiles of indirect gotos.
  * [Issue 2064]: Fix HWAsan miscompilation.
  * [Issue 2070]: Fix crash in instantiation of function definitions.
  * [Issue 2084]: Fix for incorrect compiler error on overloaded member
    functions with ref-qualifiers.

[Issue 2040]: https://github.com/android/ndk/issues/2040
[Issue 2064]: https://github.com/android/ndk/issues/2064
[Issue 2070]: https://github.com/android/ndk/issues/2070
[Issue 2084]: https://github.com/android/ndk/issues/2084

## r27b

* Updated LLVM to clang-r522817b. See `clang_source_info.md` in the toolchain
  directory for version information.
  * [Issue 2040]: Fixed miscompile with indirect gotos.
  * [Issue 2054]: Fixed crash in x86 fp16 instruction selection.
  * [Issue 2059]: Fixed infinite loop in aarch64 vector instruction selection.
* [Issue 2032]: Fixed compatibility issues with projects that used a very old
  `cmake_minimum_required` version ("Policy CMP0057 is not set: Support new
  IN_LIST if() operator").
* [Issue 2039]: Fixed `LOCAL_STRIP_MODE` not being reset by
  `include $(CLEAR_VARS)`.
* [Issue 2049]: Restored metadata used by CMake in non-toolchain-file use cases
  that used `CMAKE_SYSTEM_PROCESSOR` instead of `CMAKE_ANDROID_ARCH_ABI`. If you
  ran into this problem, you should switch to using `CMAKE_ANDROID_ARCH_ABI`
  because that's what [CMake's docs] say to use. Better still, use the NDK's
  [toolchain file].

[Issue 2032]: https://github.com/android/ndk/issues/2032
[Issue 2039]: https://github.com/android/ndk/issues/2039
[Issue 2040]: https://github.com/android/ndk/issues/2040
[Issue 2049]: https://github.com/android/ndk/issues/2049
[Issue 2054]: https://github.com/android/ndk/issues/2054
[Issue 2059]: https://github.com/android/ndk/issues/2059
[CMake's docs]: https://cmake.org/cmake/help/latest/manual/cmake-toolchains.7.html#cross-compiling-for-android-with-the-ndk
[toolchain file]: https://developer.android.com/ndk/guides/cmake

## Changes

* Updated LLVM to clang-r522817. See `clang_source_info.md` in the toolchain
  directory for version information.
  * [Issue 1728]: Clang now emits an error for invalid Android target versions.
  * [Issue 1853]: `clang-scan-deps` is now included.
  * [Issue 1911]: Fixed inconsistent `std::regex_replace` results.
  * [Issue 1947]: Improved support for AArch64 function multi-versioning in clang.
  * [Issue 1963]: Fixed undefined behavior in `std::unexpected::has_value()`.
  * [Issue 1988]: Added aarch64 support for `preserve_all` calling convention.
  * [Issue 2007]: Fixed crash in class template argument deduction caused by
    self-referential friend declaration.
  * [Issue 2010]: Removed superfluous libraries to reduce disk use.
  * [Issue 2012]: Fixed front end crash when using concepts and modules.
  * [Issue 2013]: Fixed false positive ODR violation in global module fragments.
  * [Issue 2023]: Fixed Clang crashes related to lambda captures in unevaluated
    contexts.
  * [Issue 2024]: Removed invalid `__attribute__((__const__))` from `gettid`.
* A RISC-V sysroot (AKA riscv64, or rv64) has been added. It is **not**
  supported. It is present to aid bringup for OS vendors, but it's not yet a
  supported Android ABI. It will not be built by default.
* [Issue 1856]: Target-prefixed cmd wrappers for clang should now behave
  appropriately when the first argument includes quotes. **You probably do not
  need to use those wrappers.** In most cases where you would use
  `aarch64-linux-android21-clang`, you can instead use `clang -target
  aarch64-linux-android21`, e.g. `CC="clang -target aarch64-linux-android21"
  ./configure`. The wrappers are only needed when working with systems that do
  not properly handle a `CC` that includes arguments.
* [Issue 1898]: ndk-stack now tolerates 0x prefixed addresses.
* [Issue 1921]: `ANDROID_USE_LEGACY_TOOLCHAIN_FILE` value is now preserved
  during try-compile steps when `ON`.
* [Issue 1974]: Unintentionally shipped Vulkan headers have been removed from
  `sources/third_party/vulkan`. The standard Vulkan headers are included in the
  Android sysroot, which Clang will find automatically.
* [Issue 1993]: ndk-stack now tolerates invalid UTF-8 characters in the trace.
* [Issue 1994]: Fixed ndk-gdb/ndk-lldb to use the correct path for
  make and other tools.
* Added `APP_SUPPORT_FLEXIBLE_PAGE_SIZES` for ndk-build and
  `ANDROID_SUPPORT_FLEXIBLE_PAGE_SIZES` for CMake. Set to
  `APP_SUPPORT_FLEXIBLE_PAGE_SIZES := true` in your `Application.mk` or pass
  `-DANDROID_SUPPORT_FLEXIBLE_PAGE_SIZES=ON` to CMake (via
  `android.defaultConfig.externalNativeBuild.cmake.arguments` if you're using
  the Android Gradle Plugin) to build your code to be compatible with devices
  that use a 16KiB page size. Third-party build system users and maintainers
  should consult the [build system maintainers guide].
* Symlinks are now properly preserved in the macOS App Bundle. The NDK installed
  via that method is now the same size as the one installed via the SDK manager.
* The unsupported libclang, libclang-cpp, libLLVM, and libLTO libraries were
  removed to save space.

[Issue 1728]: https://github.com/android/ndk/issues/1728
[Issue 1853]: https://github.com/android/ndk/issues/1853
[Issue 1856]: https://github.com/android/ndk/issues/1856
[Issue 1898]: https://github.com/android/ndk/issues/1898
[Issue 1911]: https://github.com/android/ndk/issues/1911
[Issue 1921]: https://github.com/android/ndk/issues/1921
[Issue 1947]: https://github.com/android/ndk/issues/1947
[Issue 1963]: https://github.com/android/ndk/issues/1963
[Issue 1974]: https://github.com/android/ndk/issues/1974
[Issue 1988]: https://github.com/android/ndk/issues/1988
[Issue 1993]: https://github.com/android/ndk/issues/1993
[Issue 1994]: https://github.com/android/ndk/issues/1994
[Issue 2007]: https://github.com/android/ndk/issues/2007
[Issue 2010]: https://github.com/android/ndk/issues/2010
[Issue 2012]: https://github.com/android/ndk/issues/2012
[Issue 2013]: https://github.com/android/ndk/issues/2013
[Issue 2023]: https://github.com/android/ndk/issues/2023
[Issue 2024]: https://github.com/android/ndk/issues/2024
