You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
62 lines
2.2 KiB
62 lines
2.2 KiB
# 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 os
|
|
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'
|
|
|
|
# Set up environment for yasm.
|
|
# Setting YASM_TEST_SUITE makes yasm output deterministic:
|
|
# - the PE/COFF timestamp field is always 0 (this breaks link.exe /incremental,
|
|
# but we no longer user link.exe)
|
|
# - in debug info, yasm identifies itself as "yasm HEAD" instead of e.g.
|
|
# "yasm 1.3.0" (we don't care much about this effect)
|
|
# - in debug info, file paths are no longer absolute but relative to '.'
|
|
os.environ['YASM_TEST_SUITE'] = '1'
|
|
|
|
# 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)
|
|
|