Skip to content

Commit

Permalink
build: support rust crates that generate sources in their build script
Browse files Browse the repository at this point in the history
  • Loading branch information
piscisaureus committed Aug 22, 2019
1 parent 6c7d337 commit 31aa7c1
Show file tree
Hide file tree
Showing 2 changed files with 25 additions and 2 deletions.
13 changes: 12 additions & 1 deletion build_extra/rust/run.py
Expand Up @@ -7,6 +7,7 @@
import os
import re

args = sys.argv[1:]
env = os.environ.copy()

if sys.platform == 'win32':
Expand All @@ -26,9 +27,19 @@
env["GN_OUT_DIR"] = os.path.abspath(".")
assert os.path.isdir(env["GN_OUT_DIR"])

# Some crates (e.g. 'typenum') generate source files and place them in the
# directory indicated by the 'OUT_DIR' environment variable, which is normally
# set by Cargo. We pre-generate these files and store them in the source repo.
# Therefore, set 'OUT_DIR' so these crates can find their generated sources.
for i, arg in enumerate(args):
match = re.search('--generated-source-dir=(.*)', arg)
if match:
env["OUT_DIR"] = os.path.abspath(match.group(1))
del args[i]
break

# Set the CARGO_PKG_VERSION env variable if provided as an argument
# When building with Cargo this variable is set automatically
args = sys.argv[1:]
for i, arg in enumerate(args):
match = re.search('--cargo-pkg-version="?([^"]*)"?', arg)
if match:
Expand Down
14 changes: 13 additions & 1 deletion build_extra/rust/rust.gni
Expand Up @@ -62,8 +62,9 @@ template("_rust_crate") {
"crate_version",
"deps",
"edition",
"inputs",
"features",
"generated_source_dir",
"inputs",
"is_test",
"libs",
"source_root",
Expand Down Expand Up @@ -237,6 +238,17 @@ template("_rust_crate") {
"--color=always",
]

if (defined(generated_source_dir)) {
args += [
# Some crates (e.g. 'typenum') generate source files and place them in
# the directory indicated by the 'OUT_DIR' environment variable, which
# is normally set by Cargo. This flag tells run.py to set 'OUT_DIR' to
# the path where the current crate can find its generated sources.
"--generated-source-dir=" +
rebase_path(generated_source_dir, root_build_dir),
]
}

if (defined(crate_version)) {
args += [
# This is used to set env variables for Cargo build compatibility
Expand Down

0 comments on commit 31aa7c1

Please sign in to comment.