blob: 5affb404a6e2a70996abc6a83a8031f8bbbca453 [file] [log] [blame] [view]
Unified Headers Migration Notes
===============================
When moving to unified headers, you may notice some differences. The unified
headers represent nearly ten years of progress in the bionic header files, and
in that time there have been a large number of cleanups (largely done for the
sake of better compile times or better compatibility with other C libraries).
To get an idea of what has changed, we can generate a standalone toolchain using
both the unified headers and the deprecated headers, and then diff the list of
files in `sysroot/usr/include`.
List generated with:
```bash
$ android-ndk-r15/build/tools/make_standalone_toolchain.py \
--arch arm --api 26 --install-dir unified-toolchain
$ android-ndk-r15/build/tools/make_standalone_toolchain.py \
--arch arm --api 26 --deprecated-headers --install-dir deprecated-toolchain
$ (cd unified-toolchain/sysroot/usr/include/ && find . -type f) | \
grep -v 'linux-android' | sort > unified-include
$ (cd deprecated-toolchain/sysroot/usr/include/ && find . -type f) | \
sort > arm-26-include
$ diff -u0 arm-26-include unified-include | grep -vP '^@@'
```
The list below has been reorganized to group logical changes together for
explanation.
The same steps can be repeated with your target architecure or API level to get
information tailored for your application.
Note that the diff of the file contents themselves will be very large. Anything
in the `linux/` directory will be very difficult to read, as those files contain
an "AUTOGENERATED" warning every five lines. Those headers are the Linux UAPI
headers, so they shouldn't contain any surprises.
If your build is failing because a header has disappeared, use grep to search
for the functions you're missing; they've likely only moved. If anything is
actually missing, that may have been intentional, but could be an oversight.
Search our [bugtracker] for both the name of the header and the functions you
need. If you don't find anything (make sure you're searching *all* bugs, not
just open ones), file a bug. It may be intentional, but the bug serves as
documentation either way.
One such header that was intentionally removed is `<sys/atomics.h>`. This was
already not available for newer API levels when using the deprecated headers,
but with unified headers it is not available for any API level. The NDK has
support for C11 `<stdatomic.h>`, so you should migrate to that.
[bugtracker]: https://github.com/android-ndk/ndk/issues
New APIs
--------
```diff
+./aaudio/AAudio.h
+./android/hardware_buffer.h
+./android/hardware_buffer_jni.h
+./android/sharedmem.h
+./android/sync.h
+./GLES/egl.h
```
The headers for these APIs will exist regardless of your target API level so you
can access constants, prototypes, or types when conditionally accessing the API
behind version checks with `dlsym`.
Legacy Support
--------------
```diff
+./android/legacy_errno_inlines.h
+./android/legacy_fenv_inlines_arm.h
+./android/legacy_fenv_inlines_mips.h
+./android/legacy_signal_inlines.h
+./android/legacy_stdlib_inlines.h
+./android/legacy_sys_stat_inlines.h
+./android/legacy_sys_wait_inlines.h
+./android/legacy_termios_inlines.h
```
Many functions in older bionic headers were provided as inline functions. This
is not standards compliant, so this has been fixed in later releases. These
headers provide those inlines if you're targeting an older release.
Linux UAPI Headers
------------------
```diff
+linux/...
-linux/...
```
These are all changes in the Linux UAPI headers. These are the headers provided
by the Linux kernel as a backward compatible kernel API. Any changes here are
due to changes upstream.
Everything Else
---------------
The rest of the list is just the usual additions and cleanups to libc headers.
Many headers were added, some were removed. Headers that were removed were
typically removed because they were unique to Android, and we moved the contents
to match other C libraries.
```diff
+./android/set_abort_message.h
+./android/versioning.h
-./asm/a.out.h
+./asm/unistd-common.h
+./asm/unistd-eabi.h
+./asm/unistd-oabi.h
+./bits/auxvec.h
+./bits/elf_arm64.h
+./bits/elf_arm.h
+./bits/elf_mips.h
+./bits/elf_x86_64.h
+./bits/elf_x86.h
+./bits/fcntl.h
+./bits/getopt.h
+./bits/glibc-syscalls.h
+./bits/ioctl.h
+./bits/lockf.h
+./bits/mbstate_t.h
+./bits/posix_limits.h
+./bits/pthread_types.h
+./bits/sa_family_t.h
+./bits/seek_constants.h
+./bits/strcasecmp.h
+./bits/struct_file.h
+./bits/sysconf.h
+./bits/timespec.h
+./bits/wchar_limits.h
+./bits/wctype.h
+./cpio.h
+./drm/amdgpu_drm.h
+./drm/armada_drm.h
+./drm/drm_fourcc.h
+./drm/drm.h
+./drm/drm_mode.h
+./drm/drm_sarea.h
+./drm/etnaviv_drm.h
+./drm/exynos_drm.h
+./drm/i810_drm.h
+./drm/i915_drm.h
+./drm/mga_drm.h
+./drm/msm_drm.h
+./drm/nouveau_drm.h
+./drm/omap_drm.h
+./drm/qxl_drm.h
+./drm/r128_drm.h
+./drm/radeon_drm.h
+./drm/savage_drm.h
+./drm/sis_drm.h
+./drm/tegra_drm.h
+./drm/vc4_drm.h
+./drm/vgem_drm.h
+./drm/via_drm.h
+./drm/virtgpu_drm.h
+./drm/vmwgfx_drm.h
+./error.h
+./ifaddrs.h
+./langinfo.h
-./machine/elf_machdep.h
-./machine/endian.h
-./machine/exec.h
-./machine/ieee.h
-./machine/wchar_limits.h
+./misc/cxl.h
+./mtd/inftl-user.h
+./mtd/mtd-abi.h
+./mtd/mtd-user.h
+./mtd/nftl-user.h
+./mtd/ubi-user.h
-./net/ethertypes.h
-./net/if_ether.h
-./net/if_ieee1394.h
-./net/if_types.h
-./nsswitch.h
+./nl_types.h
-./pathconf.h
+./pty.h
+./rdma/cxgb3-abi.h
+./rdma/cxgb4-abi.h
+./rdma/hfi/hfi1_user.h
+./rdma/hns-abi.h
+./rdma/ib_user_cm.h
+./rdma/ib_user_mad.h
+./rdma/ib_user_sa.h
+./rdma/ib_user_verbs.h
+./rdma/mlx4-abi.h
+./rdma/mlx5-abi.h
+./rdma/mthca-abi.h
+./rdma/nes-abi.h
+./rdma/ocrdma-abi.h
+./rdma/qedr-abi.h
+./rdma/rdma_netlink.h
+./rdma/rdma_user_cm.h
+./rdma/rdma_user_rxe.h
+./rdma/vmw_pvrdma-abi.h
+./scsi/cxlflash_ioctl.h
+./scsi/fc/fc_els.h
+./scsi/fc/fc_fs.h
+./scsi/fc/fc_gs.h
+./scsi/fc/fc_ns.h
+./scsi/scsi_bsg_fc.h
+./scsi/scsi.h
+./scsi/scsi_ioctl.h
+./scsi/scsi_netlink_fc.h
+./scsi/scsi_netlink.h
+./scsi/scsi_proto.h
+./scsi/sg.h
-./sgtty.h
+./sound/asequencer.h
+./sound/asoc.h
+./sound/asound_fm.h
+./sound/asound.h
+./sound/compress_offload.h
+./sound/compress_params.h
+./sound/emu10k1.h
+./sound/firewire.h
+./sound/hdsp.h
+./sound/hdspm.h
+./sound/sb16_csp.h
+./sound/sfnt_info.h
+./sound/snd_sst_tokens.h
+./sound/tlv.h
+./sound/usb_stream.h
+./stdio_ext.h
+./syscall.h
-./sys/cdefs_elf.h
+./sysexits.h
+./sys/fcntl.h
-./sys/glibc-syscalls.h
-./sys/ioctl_compat.h
+./sys/quota.h
-./sys/socketcalls.h
-./sys/syslimits.h
+./sys/syslog.h
+./sys/_system_properties.h
-./sys/ttychars.h
-./sys/ttydev.h
+./sys/unistd.h
-./sys/utime.h
+./tar.h
-./thread_db.h
-./util.h
+./video/edid.h
+./video/sisfb.h
+./video/uvesafb.h
+./wait.h
+./xen/evtchn.h
+./xen/gntalloc.h
+./xen/gntdev.h
+./xen/privcmd.h
```