Bionic comes with a processed set of all of the uapi Linux kernel headers that
can safely be included by userland applications and libraries.

These clean headers are automatically generated by several scripts located
in the 'bionic/kernel/tools' directory. The tools process the original
unmodified kernel headers in order to get rid of many annoying
declarations and constructs that usually result in compilation failure.

The 'clean headers' only contain type and macro definitions, with the
exception of a couple static inline functions used for performance
reason (e.g. optimized CPU-specific byte-swapping routines).

They can be included from C++, or when compiling code in strict ANSI mode.
They can be also included before or after any Bionic C library header.

Description of the directories involved in generating the parsed kernel headers:

  * 'external/kernel-headers/original/'
    Contains the uapi kernel headers found in the android kernel. Note this
    also includes the header files that are generated by building the kernel
    sources.

  * 'bionic/libc/kernel/uapi'
    Contains the cleaned kernel headers and mirrors the directory structure
    in 'external/kernel-headers/original/uapi/'.

  * 'bionic/libc/kernel/tools'
    Contains various Python and shell scripts used to get and re-generate
    the headers.

The tools to get/parse the headers:

  * tools/generate_uapi_headers.sh
    Checks out the android kernel and generates all uapi header files.
    copies all the changed files into external/kernel-headers.

  * tools/clean_header.py
    Prints the clean version of a given kernel header. With the -u option,
    this will also update the corresponding clean header file if its
    content has changed. You can also process more than one file with -u.

  * tools/update_all.py
    Automatically update all clean headers from the content of
    'external/kernel-headers/original'.


HOW TO UPDATE THE HEADERS WHEN NEEDED:
======================================

IMPORTANT IMPORTANT:

  WHEN UPDATING THE HEADERS, ALWAYS CHECK THAT THE NEW CLEAN HEADERS DO
  NOT BREAK THE KERNEL <-> USER ABI, FOR EXAMPLE BY CHANGING THE SIZE
  OF A GIVEN TYPE. THIS TASK CANNOT BE EASILY AUTOMATED AT THE MOMENT

Grab the latest headers from the android kernel by running this command:

  bionic/libc/kernel/tools/generate_uapi_headers.sh --download-kernel

Next, run this command to copy the parsed files to bionic/libc/kernel/uapi:

  bionic/libc/kernel/tools/update_all.py

Finally, run this command to regenerate the syscalls list:

  bionic/libc/tools/gensyscalls.py

After this, you will need to build/test the tree to make sure that these
changes do not introduce any errors.
