diff options
Diffstat (limited to 'build_extra/rust/rust.gni')
-rw-r--r-- | build_extra/rust/rust.gni | 69 |
1 files changed, 52 insertions, 17 deletions
diff --git a/build_extra/rust/rust.gni b/build_extra/rust/rust.gni index 985fff5f6..20641fadc 100644 --- a/build_extra/rust/rust.gni +++ b/build_extra/rust/rust.gni @@ -10,7 +10,11 @@ template("run_rustc") { "source_root", "deps", "extern", + "is_test", ]) + if (defined(invoker.testonly)) { + testonly = invoker.testonly + } if (defined(invoker.crate_name)) { crate_name = invoker.crate_name } else { @@ -21,7 +25,6 @@ template("run_rustc") { source_root, ] outputs = [] - depfile = "$target_out_dir/$target_name.d" script = "//third_party/v8/tools/run.py" args = [ @@ -29,26 +32,41 @@ template("run_rustc") { rebase_path(source_root, root_build_dir), "--crate-name=$crate_name", "--crate-type=$crate_type", - "--emit=dep-info=" + rebase_path(depfile, root_build_dir), ] - # We only use staticlib for the special "empty" lib. - if (crate_type == "staticlib") { - staticlib = "$target_out_dir/$crate_name.a" - outputs += [ staticlib ] - args += [ "--emit=link=" + rebase_path(staticlib, root_build_dir) ] - } + if (defined(is_test) && is_test) { + # Test outputs are executables which should be in root_out_dir. + output = "$root_out_dir/$crate_name" + args += [ + "--test", + "-o", + rebase_path(output, root_build_dir), + ] + outputs += [ output ] + } else { + # Non-test targets are handled differently. - if (crate_type == "rlib" || crate_type == "bin") { - obj = "$target_out_dir/$crate_name.o" - outputs += [ obj ] - args += [ "--emit=obj=" + rebase_path(obj, root_build_dir) ] - } + # For unknown reasons emitting a depfile on tests doesn't work. + depfile = "$target_out_dir/$target_name.d" + args += [ "--emit=dep-info=" + rebase_path(depfile, root_build_dir) ] + + if (crate_type == "staticlib") { + staticlib = "$target_out_dir/$crate_name.a" + outputs += [ staticlib ] + args += [ "--emit=link=" + rebase_path(staticlib, root_build_dir) ] + } + + if (crate_type == "rlib" || crate_type == "bin") { + obj = "$target_out_dir/$crate_name.o" + outputs += [ obj ] + args += [ "--emit=obj=" + rebase_path(obj, root_build_dir) ] + } - if (crate_type == "rlib") { - rlib = "$target_out_dir/lib$crate_name.rlib" - outputs += [ rlib ] - args += [ "--emit=link=" + rebase_path(rlib, root_build_dir) ] + if (crate_type == "rlib") { + rlib = "$target_out_dir/lib$crate_name.rlib" + outputs += [ rlib ] + args += [ "--emit=link=" + rebase_path(rlib, root_build_dir) ] + } } if (is_debug) { @@ -99,6 +117,7 @@ template("rust_component") { "extern", "cfg", "source_root", + "testonly", ]) if (!defined(invoker.crate_type)) { crate_type = "rlib" @@ -113,6 +132,7 @@ template("rust_component") { [ "libs", "deps", + "testonly", ]) if (!defined(deps)) { deps = [] @@ -151,3 +171,18 @@ template("rust_executable") { } } } + +template("rust_test") { + run_rustc(target_name) { + crate_name = target_name + crate_type = "bin" + testonly = true + is_test = true + forward_variables_from(invoker, + [ + "extern", + "cfg", + "source_root", + ]) + } +} |