| // Copyright 2017 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. |
| |
| use crate::sdk::strip_tool_path; |
| use failure::{bail, format_err, Error, ResultExt}; |
| use std::path::{Path, PathBuf}; |
| use std::process::Command; |
| use std::time::Duration; |
| use uname::uname; |
| |
| #[allow(dead_code)] |
| pub fn duration_as_milliseconds(duration: &Duration) -> u64 { |
| let subsec_ms: u64 = u64::from(duration.subsec_nanos()) / 1_000_000; |
| duration.as_secs() * 1000 + subsec_ms |
| } |
| |
| pub fn is_mac() -> bool { |
| uname().expect("uname failed").sysname == "Darwin" |
| } |
| |
| pub fn strip_binary(binary: &Path) -> Result<PathBuf, Error> { |
| let file_name = binary.file_name().ok_or(format_err!("file_name failed on {:#?}", binary))?; |
| let new_file_name = file_name.to_string_lossy().into_owned() + "_stripped"; |
| let target_path = binary |
| .parent() |
| .expect("failed to get parent directory of binary to strip") |
| .join(new_file_name); |
| let strip_result = Command::new(strip_tool_path()?) |
| .arg("--strip-all") |
| .arg(binary) |
| .arg(&target_path) |
| .status() |
| .context("strip command failed to start")?; |
| |
| if !strip_result.success() { |
| bail!("strip failed with error {:?}", strip_result); |
| } |
| |
| Ok(target_path) |
| } |