Add all the chromium stuff necessary to build nasm.

This adds the BUILD file and configuration davidben at chromium.org wrote
originally on https://chromium-review.googlesource.com/c/chromium/src/+/1119211

This is the last CL enabling nasm usage in Chromium (fingers crossed), but may
need some tweaks to build on Windows mac. A subsequent Chromium CL adding the
DEP will test this theory.

BUG=766721

Change-Id: I481fc8d7f1747dad74cd0a02a251a65cfd78a134
diff --git a/generate_nasm_sources.py b/generate_nasm_sources.py
new file mode 100755
index 0000000..2b7bc59
--- /dev/null
+++ b/generate_nasm_sources.py
@@ -0,0 +1,69 @@
+#!/usr/bin/env python
+#
+# Copyright 2018 The Chromium Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+"""A script to parse nasm's file lists out of Makefile.in."""
+
+import os
+import sys
+
+def ParseFileLists(path):
+  ret = {}
+  with open(path) as f:
+    in_file_list = False
+    split_line = ""
+    for line in f:
+      line = line.rstrip()
+      if not in_file_list:
+        if "-- Begin File Lists --" in line:
+          in_file_list = True
+        continue
+      if "-- End File Lists --" in line:
+        if split_line:
+          raise ValueError("End comment was preceded by split line")
+        break
+      line = split_line + line
+      split_line = ""
+      if line.endswith('\\'):
+        split_line = line[:-1]
+        continue
+      line = line.strip()
+      if not line:
+        continue
+      name, value = line.split('=')
+      name = name.strip()
+      value = value.replace("$(O)", "c")
+      files = value.split()
+      files.sort()
+      files = [file for file in files]
+      ret[name] = files
+  return ret
+
+def PrintFileList(out, name, files):
+  if len(files) == 0:
+    print >>out, "%s = []" % (name,)
+  elif len(files) == 1:
+    print >>out, "%s = [ \"%s\" ]" % (name, files[0])
+  else:
+    print >>out, "%s = [" % (name,)
+    for f in files:
+      print >>out, "  \"%s\"," % (f,)
+    print >>out, "]"
+
+def main():
+  file_lists = ParseFileLists("Makefile.in")
+  with open("nasm_sources.gni", "w") as out:
+    print >>out, """# Copyright (c) 2018 The Chromium Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+# This file is created by generate_nasm_sources.py. Do not edit manually.
+"""
+    PrintFileList(out, "ndisasm_sources", file_lists['NDISASM'])
+    PrintFileList(out, "nasmlib_sources", file_lists['LIBOBJ'])
+    PrintFileList(out, "nasm_sources", file_lists['NASM'])
+
+if __name__ == "__main__":
+  main()