blob: 833a5316639e84f26a773b9c35f34aa46e7e2782 [file] [log] [blame]
#!/usr/bin/env fuchsia-vendored-python
# Copyright 2018 The Fuchsia Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
### generates symlinks to Rust Cargo.toml output files
import argparse
import os
import subprocess
import sys
import rust
def main():
parser = argparse.ArgumentParser(
"Generate symlinks to Rust Cargo.toml output files"
)
parser.add_argument(
"gn_target",
type=rust.GnTarget,
help="GN target to generate a symlink for. \
Use '.[:target]' to discover the cargo target \
for the current directory or use the \
absolute path to the target \
(relative to $FUCHSIA_DIR). \
For example: //garnet/bin/foo/bar:baz",
)
parser.add_argument(
"--output", help="Path to Cargo.toml to generate", required=False
)
parser.add_argument("--out-dir", help="Path to the Fuchsia build directory")
args = parser.parse_args()
args.gn_target.label_name += ".actual"
build_dir = os.path.abspath(args.out_dir)
if args.output:
output = os.path.abspath(args.output)
else:
output = os.path.join(args.gn_target.src_path, "Cargo.toml")
manifest_path = args.gn_target.manifest_path(build_dir=build_dir)
if os.path.exists(manifest_path):
try:
os.remove(output)
except OSError:
pass
print(f"Linking '{output}' for target '{args.gn_target}'")
rel_path = os.path.relpath(manifest_path, os.path.dirname(output))
os.symlink(rel_path, output)
else:
print(f"Could not find a Cargo.toml file at '{manifest_path}'")
print("")
print("Check that:")
print(f" - `{args.gn_target}` is an existing Rust target")
print(" - You ran `fx set` with --cargo-toml-gen")
print(" - You have run `fx build`")
return 1
if __name__ == "__main__":
sys.exit(main())