Merge v0.7.0 into master.

Adjust Android build system rules for recent changes in upstream
cpu_features.

Test: Run `atest -a --test-mapping external/cpu_features:all` (on
      x86-64 and Arm64 devices)
Change-Id: Idd78a3a4f29247b2c83117bde98cca45f94908f2
diff --git a/Android.bp b/Android.bp
new file mode 100644
index 0000000..57e3804
--- /dev/null
+++ b/Android.bp
@@ -0,0 +1,381 @@
+// This Blueprint file loosely follows the logic of cpu_features'
+// CMakeLists.txt and test/CMakeLists.txt files.
+
+package {
+    default_applicable_licenses: ["external_cpu_features_license"],
+}
+
+// Added automatically by a large-scale-change that took the approach of
+// 'apply every license found to every target'. While this makes sure we respect
+// every license restriction, it may not be entirely correct.
+//
+// e.g. GPL in an MIT project might only apply to the contrib/ directory.
+//
+// Please consider splitting the single license below into multiple licenses,
+// taking care not to lose any license_kind information, and overriding the
+// default license using the 'licenses: [...]' property on targets as needed.
+//
+// For unused files, consider creating a 'fileGroup' with "//visibility:private"
+// to attach the license to, and including a comment whether the files may be
+// used in the current project.
+// See: http://go/android-license-faq
+license {
+    name: "external_cpu_features_license",
+    visibility: [":__subpackages__"],
+    license_kinds: [
+        "SPDX-license-identifier-Apache-2.0",
+        "SPDX-license-identifier-BSD",
+    ],
+    license_text: [
+        "LICENSE",
+    ],
+}
+
+cc_defaults {
+    name: "cpu_features-defaults",
+    host_supported: true,
+    local_include_dirs: [
+        "include",
+    ],
+    cflags: [
+        // Reserve 1024 bytes on the stack when reading from `/proc/cpuinfo`.
+        "-DSTACK_LINE_READER_BUFFER_SIZE=1024",
+        "-Wno-gnu-designator",
+    ],
+    min_sdk_version: "S",
+}
+
+cc_library {
+    name: "libcpu_features-utils",
+    defaults: ["cpu_features-defaults"],
+    srcs: [
+        "src/filesystem.c",
+        "src/stack_line_reader.c",
+        "src/string_view.c",
+    ],
+    target: {
+        windows: {
+            enabled: true,
+        },
+    },
+    apex_available: [
+        "com.android.art",
+        "com.android.art.debug",
+    ],
+}
+
+cc_library {
+    name: "libcpu_features-hwcaps",
+    defaults: ["cpu_features-defaults"],
+    srcs: [
+        "src/hwcaps.c",
+    ],
+    cflags: [
+        "-DHAVE_DLFCN_H",
+    ],
+    target: {
+        bionic: {
+            cflags: [
+                "-DHAVE_STRONG_GETAUXVAL",
+            ],
+        },
+    },
+    static_libs: [
+        "libcpu_features-utils",
+    ],
+    apex_available: [
+        "com.android.art",
+        "com.android.art.debug",
+    ],
+}
+
+cc_library {
+    name: "libcpu_features",
+    defaults: [
+        "cpu_features-defaults",
+    ],
+    export_include_dirs: ["include"],
+    whole_static_libs: [
+        "libcpu_features-utils",
+    ],
+    arch: {
+        arm: {
+            srcs: [
+                "src/impl_arm_linux_or_android.c",
+            ],
+            whole_static_libs: [
+                "libcpu_features-hwcaps",
+            ],
+        },
+        arm64: {
+            srcs: [
+                "src/impl_aarch64_linux_or_android.c",
+            ],
+            whole_static_libs: [
+                "libcpu_features-hwcaps",
+            ],
+            cflags: [
+                "-Wno-gnu-designator",
+            ],
+        },
+        x86: {
+            srcs: [
+                "src/impl_x86_linux_or_android.c",
+            ],
+            cflags: [
+                "-Wno-unused-variable",
+            ],
+        },
+        x86_64: {
+            srcs: [
+                "src/impl_x86_linux_or_android.c",
+            ],
+            cflags: [
+                "-Wno-unused-variable",
+            ],
+        },
+    },
+    target: {
+        windows: {
+            enabled: true,
+        },
+    },
+    apex_available: [
+        "com.android.art",
+        "com.android.art.debug",
+    ],
+}
+
+cc_binary {
+    name: "list_cpu_features",
+    defaults: [
+        "cpu_features-defaults",
+    ],
+    srcs: [
+        "src/utils/list_cpu_features.c",
+    ],
+    static_libs: [
+        "libcpu_features",
+    ],
+    arch: {
+        // Function `AddCacheInfo` in `src/utils/list_cpu_features.c` is only used on x86/x86_64 and
+        // triggers an error with `-Werror and `-Wunused-function` on other architectures; disable
+        // the latter flag to avoid compilation errors on those architectures.
+        arm: {
+            cflags: [
+                "-Wno-unused-function",
+            ],
+        },
+        arm64: {
+            cflags: [
+                "-Wno-unused-function",
+            ],
+        },
+        x86: {
+            cflags: [
+                "-Wno-deprecated-declarations",
+            ],
+        },
+        x86_64: {
+            cflags: [
+                "-Wno-deprecated-declarations",
+            ],
+        },
+    },
+}
+
+// Tests.
+
+cc_defaults {
+    name: "cpu_features-test-defaults",
+    test_suites: ["device-tests"],
+    host_supported: true,
+    compile_multilib: "both",
+    local_include_dirs: [
+        "include",
+    ],
+    cflags: [
+        "-DCPU_FEATURES_TEST",
+    ],
+}
+
+cc_test_library {
+    name: "libcpu_features-string_view",
+    defaults: ["cpu_features-test-defaults"],
+    srcs: [
+        "src/string_view.c",
+    ],
+}
+
+cc_test_library {
+    name: "libcpu_features-filesystem_for_testing",
+    defaults: ["cpu_features-test-defaults"],
+    cflags: [
+        "-DCPU_FEATURES_MOCK_FILESYSTEM",
+        // TODO: Handle unused parameters in
+        // test/filesystem_for_testing.cc and remove this flag.
+        "-Wno-unused-parameter",
+    ],
+    srcs: [
+        "test/filesystem_for_testing.cc",
+    ],
+}
+
+cc_test_library {
+    name: "libcpu_features-hwcaps_for_testing",
+    defaults: ["cpu_features-test-defaults"],
+    cflags: [
+        "-DCPU_FEATURES_MOCK_GET_ELF_HWCAP_FROM_GETAUXVAL",
+        "-DCPU_FEATURES_TEST",
+    ],
+    srcs: [
+        "src/hwcaps.c",
+        "test/hwcaps_for_testing.cc",
+    ],
+    static_libs: [
+        "libcpu_features-string_view",
+        "libcpu_features-filesystem_for_testing",
+    ],
+}
+
+cc_defaults {
+    name: "stack_line_reader-defaults",
+    cflags: [
+        "-DSTACK_LINE_READER_BUFFER_SIZE=1024",
+    ],
+}
+
+cc_test_library {
+    name: "libcpu_features-stack_line_reader",
+    defaults: [
+        "cpu_features-test-defaults",
+        "stack_line_reader-defaults",
+    ],
+    srcs: [
+        "src/stack_line_reader.c",
+    ],
+    static_libs: [
+        "libcpu_features-filesystem_for_testing",
+        "libcpu_features-string_view",
+    ],
+}
+
+cc_test_library {
+    name: "libcpu_features-stack_line_reader_for_test",
+    defaults: ["cpu_features-test-defaults"],
+    cflags: [
+        "-DSTACK_LINE_READER_BUFFER_SIZE=16",
+    ],
+    srcs: [
+        "src/stack_line_reader.c",
+    ],
+    whole_static_libs: [
+        "libcpu_features-filesystem_for_testing",
+        "libcpu_features-string_view",
+    ],
+}
+
+cc_test_library {
+    name: "libcpu_features-all_libraries",
+    defaults: [
+        "cpu_features-test-defaults",
+        "stack_line_reader-defaults",
+    ],
+    whole_static_libs: [
+        "libcpu_features-filesystem_for_testing",
+        "libcpu_features-hwcaps_for_testing",
+        "libcpu_features-stack_line_reader",
+        "libcpu_features-string_view",
+    ],
+}
+
+cc_test {
+    name: "cpu_features-bit_utils_test",
+    defaults: ["cpu_features-test-defaults"],
+    srcs: [
+        "test/bit_utils_test.cc",
+    ],
+}
+
+cc_test {
+    name: "cpu_features-string_view_test",
+    defaults: ["cpu_features-test-defaults"],
+    srcs: [
+        "test/string_view_test.cc",
+        "src/string_view.c",
+    ],
+    static_libs: [
+        "libcpu_features-string_view",
+    ],
+}
+
+cc_test {
+    name: "cpu_features-stack_line_reader_test",
+    defaults: [
+        "cpu_features-test-defaults",
+        "stack_line_reader-defaults",
+    ],
+    cflags: [
+        // TODO: Handle unused funtions in
+        // test/stack_line_reader_test.cc and remove this flag.
+        "-Wno-unused-function",
+    ],
+    srcs: [
+        "test/stack_line_reader_test.cc",
+    ],
+    static_libs: [
+        "libcpu_features-stack_line_reader_for_test",
+    ],
+}
+
+cc_test {
+    name: "cpu_features-cpuinfo_test",
+    defaults: [
+        "cpu_features-test-defaults",
+    ],
+    static_libs: [
+        "libcpu_features-all_libraries",
+    ],
+    cflags: [
+        "-DSTACK_LINE_READER_BUFFER_SIZE=1024",
+    ],
+    arch: {
+        x86: {
+            cflags: [
+                "-DCPU_FEATURES_MOCK_CPUID_X86",
+                "-Wno-unused-variable",
+                "-Wno-deprecated-declarations",
+            ],
+            srcs: [
+                "test/cpuinfo_x86_test.cc",
+                "src/impl_x86_linux_or_android.c",
+            ],
+        },
+        x86_64: {
+            cflags: [
+                "-DCPU_FEATURES_MOCK_CPUID_X86",
+                "-Wno-unused-variable",
+                "-Wno-deprecated-declarations",
+            ],
+            srcs: [
+                "test/cpuinfo_x86_test.cc",
+                "src/impl_x86_linux_or_android.c",
+            ],
+        },
+        arm: {
+            srcs: [
+                "test/cpuinfo_arm_test.cc",
+                "src/impl_arm_linux_or_android.c",
+            ],
+        },
+        arm64: {
+            cflags: [
+                "-Wno-gnu-designator",
+            ],
+            srcs: [
+                "test/cpuinfo_aarch64_test.cc",
+                "src/impl_aarch64_linux_or_android.c",
+            ],
+        },
+    },
+}
diff --git a/METADATA b/METADATA
new file mode 100644
index 0000000..eac4f3d
--- /dev/null
+++ b/METADATA
@@ -0,0 +1,19 @@
+name: "cpu_features"
+description: "A cross platform C99 library to get cpu features at runtime."
+third_party {
+  url {
+    type: HOMEPAGE
+    value: "https://github.com/google/cpu_features"
+  }
+  url {
+    type: GIT
+    value: "https://github.com/google/cpu_features.git"
+  }
+  version: "v0.7.0"
+  license_type: NOTICE
+  last_upgrade_date {
+    year: 2022
+    month: 3
+    day: 8
+  }
+}
diff --git a/MODULE_LICENSE_APACHE2 b/MODULE_LICENSE_APACHE2
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/MODULE_LICENSE_APACHE2
diff --git a/OWNERS b/OWNERS
new file mode 100644
index 0000000..dc4f25c
--- /dev/null
+++ b/OWNERS
@@ -0,0 +1,3 @@
[email protected]
[email protected]
+*
diff --git a/PREUPLOAD.cfg b/PREUPLOAD.cfg
new file mode 100644
index 0000000..321bab6
--- /dev/null
+++ b/PREUPLOAD.cfg
@@ -0,0 +1,2 @@
+[Builtin Hooks]
+bpfmt = true
diff --git a/TEST_MAPPING b/TEST_MAPPING
new file mode 100644
index 0000000..7066870
--- /dev/null
+++ b/TEST_MAPPING
@@ -0,0 +1,30 @@
+{
+  "presubmit": [
+    {
+      "name": "cpu_features-bit_utils_test"
+    },
+    {
+      "name": "cpu_features-string_view_test"
+    },
+    {
+      "name": "cpu_features-stack_line_reader_test"
+    },
+    {
+      "name": "cpu_features-cpuinfo_test"
+    }
+  ],
+  "hwasan-postsubmit": [
+    {
+      "name": "cpu_features-bit_utils_test"
+    },
+    {
+      "name": "cpu_features-string_view_test"
+    },
+    {
+      "name": "cpu_features-stack_line_reader_test"
+    },
+    {
+      "name": "cpu_features-cpuinfo_test"
+    }
+  ]
+}