Fix problems with CMake build on ARM/Linux
diff --git a/scripts/arm-linux-filesystem-dump.py b/scripts/arm-linux-filesystem-dump.py
new file mode 100644
index 0000000..feecf4b
--- /dev/null
+++ b/scripts/arm-linux-filesystem-dump.py
@@ -0,0 +1,107 @@
+#!/usr/bin/env python
+
+import os
+import sys
+import argparse
+import shutil
+
+
+parser = argparse.ArgumentParser(description='Android system files extractor')
+parser.add_argument("-p", "--prefix", metavar="NAME", required=True,
+                    help="Prefix for stored files, e.g. galaxy-s7-us")
+
+
+SYSTEM_FILES = [
+    "/proc/cpuinfo",
+    "/sys/devices/system/cpu/kernel_max",
+    "/sys/devices/system/cpu/possible",
+    "/sys/devices/system/cpu/present",
+]
+
+CPU_FILES = [
+    "cpufreq/cpuinfo_max_freq",
+    "cpufreq/cpuinfo_min_freq",
+    "topology/physical_package_id",
+    "topology/core_siblings_list",
+    "topology/core_id",
+    "topology/thread_siblings_list",
+]
+
+CACHE_FILES = [
+    "allocation_policy",
+    "coherency_line_size",
+    "level",
+    "number_of_sets",
+    "shared_cpu_list",
+    "size",
+    "type",
+    "ways_of_associativity",
+    "write_policy",
+]
+
+def c_escape(string):
+    c_string = ""
+    for c in string:
+        if c == "\\":
+            c_string += "\\\\"
+        elif c == "\"":
+            c_string += "\\\""
+        elif c == "\t":
+            c_string += "\\t"
+        elif c == "\n":
+            c_string += "\\n"
+        elif c == "\r":
+            c_string += "\\r"
+        elif ord(c) == 0:
+            c_string += "\\0"
+        elif 32 <= ord(c) < 127:
+            c_string += c
+        else:
+            c_string += "x%02X" % ord(c)
+    return c_string
+
+
+def dump_system_file(stream, path):
+    try:
+        with open(path, "rb") as device_file:
+            content = device_file.read()
+            stream.write("\t{\n")
+            stream.write("\t\t.path = \"%s\",\n" % path)
+            stream.write("\t\t.size = %d,\n" % len(content))
+            if len(content.splitlines()) > 1:
+                stream.write("\t\t.content =")
+                for line in content.splitlines(True):
+                    stream.write("\n\t\t\t\"%s\"" % c_escape(line))
+                stream.write(",\n")
+            else:
+                stream.write("\t\t.content = \"%s\",\n" % c_escape(content))
+            stream.write("\t},\n")
+            return True
+    except IOError:
+        pass
+
+
+def main(args):
+    options = parser.parse_args(args)
+
+    # with open(os.path.join("test", "dmesg", options.prefix + ".log"), "w") as dmesg_log:
+    #     dmesg_log.write(device.Shell("dmesg"))
+    with open(os.path.join("test", options.prefix + ".h"), "w") as file_header:
+        file_header.write("struct cpuinfo_mock_file filesystem[] = {\n")
+        for path in SYSTEM_FILES:
+            dump_system_file(file_header, path)
+        for cpu in range(16):
+            for filename in CPU_FILES:
+                path = "/sys/devices/system/cpu/cpu%d/%s" % (cpu, filename)
+                dump_system_file(file_header, path)
+            for index in range(10):
+                for filename in CACHE_FILES:
+                    path = "/sys/devices/system/cpu/cpu%d/cache/index%d/%s" % (cpu, index, filename)
+                    dump_system_file(file_header, path)
+        file_header.write("\t{ NULL },\n")
+        file_header.write("};\n")
+    shutil.copy("/proc/cpuinfo",
+        os.path.join("test", "cpuinfo", options.prefix + ".log"))
+
+if __name__ == "__main__":
+    main(sys.argv[1:])