Introduce build target for bundled data on Windows
On non-Windows platforms, we generate assembly to bundle ICU data.
On Windows however, we previously use a checked in icudt.dll, which
is no longer maintained.
We could use the same assembly approach if we wrap in inline assembly.
Bug: chromium:938223
Change-Id: Ieced205ae2e082a5290bd45499216c6c86751ca1
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/deps/icu/+/1503032
Reviewed-by: Jungshik Shin <jshin@chromium.org>
diff --git a/scripts/asm_to_inline_asm.py b/scripts/asm_to_inline_asm.py
new file mode 100644
index 0000000..21d23e8
--- /dev/null
+++ b/scripts/asm_to_inline_asm.py
@@ -0,0 +1,31 @@
+#!/usr/bin/env python
+
+# Copyright 2019 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.
+
+'''
+Converts a given file in clang assembly syntax to a corresponding
+representation in inline assembly. Specifically, this is used for
+Windows clang builds.
+'''
+
+import argparse
+import sys
+
+def asm_to_inl_asm(in_filename, out_filename):
+ with open(in_filename, 'r') as infile, open(out_filename, 'wb') as outfile:
+ outfile.write('__asm__(\n')
+ for line in infile:
+ # Escape " in .S file before outputing it to inline asm file.
+ line = line.replace('"', '\\"')
+ outfile.write(' "%s\\n"\n' % line.rstrip())
+ outfile.write(');\n')
+ return 0
+
+if __name__ == '__main__':
+ parser = argparse.ArgumentParser(description=__doc__)
+ parser.add_argument('input', help='Name of the input assembly file')
+ parser.add_argument('output', help='Name of the target CC file')
+ args = parser.parse_args()
+ sys.exit(asm_to_inl_asm(args.input, args.output))