mirror of
https://chromium.googlesource.com/crosvm/crosvm
synced 2024-11-29 02:53:36 +00:00
901cd7df7f
This is a reland of commit 2b85d4d1e5
Diff from the original CL:
* Changed the return value of `main()` in power_monitor/build.rs
* Ran cargo-check with all features enabled
Original change's description:
> github: Minimize dependencies for document generation
>
> Instead of install full dependencies with `install-deps` in GitHub
> action, minimize dependencies because we use GitHub only for document
> generation.
>
> - Passed `CARGO_DOC` environment when running cargo-doc command so we
> can skip unnecessary build flow when we just want to generate API docs.
> - Added a new script `install-docs-deps` to install only doc-related
> dependencies.
>
> BUG=none
> TEST=test on GitHub Action at my personal repository
>
> Change-Id: Ibe988ab43215e285d946812bdd6c1536ae87b50e
> Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/crosvm/+/3578144
> Tested-by: kokoro <noreply+kokoro@google.com>
> Reviewed-by: Daniel Verkamp <dverkamp@chromium.org>
> Reviewed-by: Anton Romanov <romanton@google.com>
> Commit-Queue: Keiichi Watanabe <keiichiw@chromium.org>
Bug=none
TEST=cargo check --all-features
Change-Id: I77ee6543910e3fe7f69be48f8f965eda3433d4e6
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/crosvm/+/3584063
Auto-Submit: Keiichi Watanabe <keiichiw@chromium.org>
Reviewed-by: Dennis Kempin <denniskempin@google.com>
Tested-by: kokoro <noreply+kokoro@google.com>
Commit-Queue: Keiichi Watanabe <keiichiw@chromium.org>
83 lines
2.4 KiB
Rust
83 lines
2.4 KiB
Rust
// Copyright 2019 The Chromium OS Authors. All rights reserved.
|
|
// Use of this source code is governed by a BSD-style license that can be
|
|
// found in the LICENSE file.
|
|
|
|
use anyhow::{bail, Result};
|
|
use std::env;
|
|
use std::path::Path;
|
|
use std::path::PathBuf;
|
|
use std::process::Command;
|
|
|
|
/// Returns the target triplet prefix for gcc commands. No prefix is required
|
|
/// for native builds.
|
|
fn get_cross_compile_prefix() -> String {
|
|
let target = env::var("TARGET").unwrap();
|
|
|
|
if env::var("HOST").unwrap() == target {
|
|
return String::from("");
|
|
}
|
|
|
|
let arch = env::var("CARGO_CFG_TARGET_ARCH").unwrap();
|
|
let os = env::var("CARGO_CFG_TARGET_OS").unwrap();
|
|
let env = if target.ends_with("-gnueabihf") {
|
|
String::from("gnueabihf")
|
|
} else {
|
|
env::var("CARGO_CFG_TARGET_ENV").unwrap()
|
|
};
|
|
return format!("{}-{}-{}-", arch, os, env);
|
|
}
|
|
|
|
fn build_libtpm2(out_dir: &Path) -> Result<()> {
|
|
let lib_path = out_dir.join("libtpm2.a");
|
|
if lib_path.exists() {
|
|
return Ok(());
|
|
}
|
|
|
|
if !Path::new("libtpm2/.git").exists() {
|
|
bail!(
|
|
"tpm2-sys/libtpm2 source does not exist, did you forget to \
|
|
`git submodule update --init`?"
|
|
);
|
|
}
|
|
|
|
let make_flags = env::var("CARGO_MAKEFLAGS").unwrap();
|
|
let prefix = get_cross_compile_prefix();
|
|
let status = Command::new("make")
|
|
.env("MAKEFLAGS", make_flags)
|
|
.arg(format!("AR={}ar", prefix))
|
|
.arg(format!("CC={}gcc", prefix))
|
|
.arg(format!("OBJCOPY={}objcopy", prefix))
|
|
.arg(format!("obj={}", out_dir.display()))
|
|
.current_dir("libtpm2")
|
|
.status()?;
|
|
if !status.success() {
|
|
bail!("make failed with status: {}", status);
|
|
}
|
|
Ok(())
|
|
}
|
|
|
|
fn main() -> Result<()> {
|
|
// Skip installing dependencies when generating documents.
|
|
if std::env::var("CARGO_DOC").is_ok() {
|
|
return Ok(());
|
|
}
|
|
|
|
// Use tpm2 package from the standard system location if available.
|
|
if pkg_config::Config::new()
|
|
.statik(true)
|
|
.probe("libtpm2")
|
|
.is_ok()
|
|
{
|
|
return Ok(());
|
|
}
|
|
|
|
// Otherwise build from source
|
|
let out_dir = PathBuf::from(env::var("OUT_DIR").unwrap());
|
|
build_libtpm2(&out_dir)?;
|
|
|
|
println!("cargo:rustc-link-search={}", out_dir.display());
|
|
println!("cargo:rustc-link-lib=static=tpm2");
|
|
println!("cargo:rustc-link-lib=ssl");
|
|
println!("cargo:rustc-link-lib=crypto");
|
|
Ok(())
|
|
}
|