Index: third_party/yasm/run_yasm.py |
diff --git a/third_party/yasm/run_yasm.py b/third_party/yasm/run_yasm.py |
new file mode 100644 |
index 0000000000000000000000000000000000000000..cbd79ccea177250abb74080b6b2f3b7e3ac779c5 |
--- /dev/null |
+++ b/third_party/yasm/run_yasm.py |
@@ -0,0 +1,51 @@ |
+# Copyright 2014 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 wrapper to run yasm. |
+ |
+Its main job is to provide a Python wrapper for GN integration, and to write |
+the makefile-style output yasm generates in stdout to a .d file for dependency |
+management of .inc files. |
+ |
+Run with: |
+ python run_yasm.py <yasm_binary_path> <all other yasm args> |
+ |
+Note that <all other yasm args> must include an explicit output file (-o). This |
+script will append a ".d" to this and write the dependencies there. This script |
+will add "-M" to cause yasm to write the deps to stdout, so you don't need to |
+specify that. |
+""" |
+ |
+import argparse |
+import sys |
+import subprocess |
+ |
+# Extract the output file name from the yasm command line so we can generate a |
+# .d file with the same base name. |
+parser = argparse.ArgumentParser() |
+parser.add_argument("-o", dest="objfile") |
+options, _ = parser.parse_known_args() |
+ |
+objfile = options.objfile |
+depfile = objfile + '.d' |
+ |
+# Assemble. |
+result_code = subprocess.call(sys.argv[1:]) |
+if result_code != 0: |
+ sys.exit(result_code) |
+ |
+# Now generate the .d file listing the dependencies. The -M option makes yasm |
+# write the Makefile-style dependencies to stdout, but it seems that inhibits |
+# generating any compiled output so we need to do this in a separate pass. |
+# However, outputting deps seems faster than actually assembling, and yasm is |
+# so fast anyway this is not a big deal. |
+# |
+# This guarantees proper dependency management for assembly files. Otherwise, |
+# we would have to require people to manually specify the .inc files they |
+# depend on in the build file, which will surely be wrong or out-of-date in |
+# some cases. |
+deps = subprocess.check_output(sys.argv[1:] + ['-M']) |
+with open(depfile, "wb") as f: |
+ f.write(deps) |
+ |