Tweaked the cleanup scripts to handle uapi and aarch64 headers.

The processed uapi directory is now placed at libc/kernel/uapi as
opposed to libc/kernel/common/uapi as it contains
architectural-dependent headers now.

Change-Id: I53f814704a4d231b452fde398cd94257a0fb2eea
diff --git a/libc/kernel/tools/clean_header.py b/libc/kernel/tools/clean_header.py
index 1a5471a..e825ae0 100755
--- a/libc/kernel/tools/clean_header.py
+++ b/libc/kernel/tools/clean_header.py
@@ -43,15 +43,26 @@
     # and the corresponding list of known static functions
     #
     arch = None
-    re_asm_arch = re.compile( r"asm-([\w\d_\+\.\-]+)(/.*)" )
-    m = re_asm_arch.match(src_path)
     statics = kernel_known_generic_statics
+    m = re.match(r"asm-([\w\d_\+\.\-]+)(/.*)", src_path)
     if m and m.group(1) != 'generic':
         dst_path = "arch-%s/asm/%s" % m.groups()
         arch     = m.group(1)
         statics  = statics.union( kernel_known_statics.get( arch, set() ) )
     else:
-        dst_path = "common/" + src_path
+        # process headers under the uapi directory
+        # note the "asm" level has been explicitly added in the original
+        # kernel header tree for architectural-dependent uapi headers
+        m_uapi = re.match(r"(uapi)/([\w\d_\+\.\-]+)(/.*)", src_path)
+        if m_uapi:
+            dst_path = src_path
+            m_uapi_arch = re.match(r"asm-([\w\d_\+\.\-]+)", m_uapi.group(2))
+            if m_uapi_arch and m_uapi_arch.group(1) != 'generic':
+                arch     = m_uapi_arch.group(1)
+                statics  = statics.union( kernel_known_statics.get( arch, set() ) )
+        # common headers (ie non-asm and non-uapi)
+        else:
+            dst_path = "common/" + src_path
 
     dst_path = os.path.normpath( kernel_cleaned_path + "/" + dst_path )
 
diff --git a/libc/kernel/tools/defaults.py b/libc/kernel/tools/defaults.py
index 77bfc47..3968605 100644
--- a/libc/kernel/tools/defaults.py
+++ b/libc/kernel/tools/defaults.py
@@ -7,7 +7,7 @@
 
 # the list of supported architectures
 #
-kernel_archs = [ 'arm', 'mips', 'x86' ]
+kernel_archs = [ 'aarch64', 'arm', 'mips', 'x86' ]
 
 # the list of include directories that belong to the kernel
 # tree. used when looking for sources...
@@ -44,12 +44,14 @@
 # maps an architecture to a set of default macros that would be provided by
 # toolchain preprocessor
 kernel_default_arch_macros = {
+    "aarch64": {},
     "arm": {},
     "mips": {"CONFIG_32BIT":"1"},
     "x86": {},
     }
 
 kernel_arch_token_replacements = {
+    "aarch64": {},
     "arm": {},
     "mips": {"off_t":"__kernel_off_t"},
     "x86": {},
@@ -63,6 +65,11 @@
 # this is the set of known static inline functions that we want to keep
 # in the final ARM headers. this is only used to keep optimized byteswapping
 # static functions and stuff like that.
+kernel_known_aarch64_statics = set(
+        [
+        ]
+    )
+
 kernel_known_arm_statics = set(
         [ "___arch__swab32",    # asm-arm/byteorder.h
         ]
@@ -92,6 +99,7 @@
 # we want to keep in the final headers
 #
 kernel_known_statics = {
+        "aarch64" : kernel_known_aarch64_statics,
         "arm" : kernel_known_arm_statics,
         "mips" : kernel_known_mips_statics,
         "x86" : kernel_known_x86_statics,