File: rustc_print_cfg.py

package info (click to toggle)
chromium 143.0.7499.109-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 5,786,824 kB
  • sloc: cpp: 35,783,839; ansic: 7,477,365; javascript: 3,962,116; python: 1,480,521; xml: 764,832; asm: 710,816; pascal: 188,028; sh: 88,717; perl: 88,692; objc: 79,984; sql: 57,625; cs: 42,265; fortran: 24,101; makefile: 22,509; tcl: 15,277; php: 14,018; yacc: 9,043; ruby: 7,553; awk: 3,720; lisp: 3,233; lex: 1,330; ada: 727; jsp: 228; sed: 36
file content (57 lines) | stat: -rwxr-xr-x 1,663 bytes parent folder | download | duplicates (5)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
#!/usr/bin/env python3

# Copyright 2025 The Chromium Authors
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
"""Invokes `rustc --print=cfg --target=...` and writes results to a file.

This script is typically invoked using the
`//build/rust/gni_impl:rustc_print_cfg` target.
"""

import argparse
import io
import os
import platform
import re
import subprocess
import sys
import tempfile


def rustc_name():
  if platform.system() == 'Windows':
    return "rustc.exe"
  else:
    return "rustc"


def capture_rustc_cfg(rust_prefix, target, output_path):
  """ Invokes `rustc --print=cfg --target=<target>` and saves results.

  Results are saved to a file at `output_path`. """

  rustc_path = os.path.join(rust_prefix, rustc_name())

  # TODO(lukasza): Check if command-line flags other `--target` may affect the
  # output of `--print-cfg`.  If so, then consider also passing extra `args`
  # (derived from `rustflags` maybe?).
  args = [rustc_path, "--print=cfg", f"--target={target}"]

  os.makedirs(os.path.dirname(output_path), exist_ok=True)
  with open(output_path, 'w') as output_file:
    subprocess.run(args, stdout=output_file, check=True)


def main():
  parser = argparse.ArgumentParser("rustc_print_cfg.py")
  parser.add_argument('--rust-prefix', required=True, help='rust path prefix')
  parser.add_argument('--target', required=True, help='rust target triple')
  parser.add_argument('--output-path', required=True, help='output file')
  args = parser.parse_args()
  capture_rustc_cfg(args.rust_prefix, args.target, args.output_path)
  return 0


if __name__ == '__main__':
  sys.exit(main())