blob: b472f919139535767d1bb15051b0b9e979093d9e [file] [log] [blame]
// 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, TargetOptions};
use failure::{bail, Error, ResultExt};
use std::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().unwrap().sysname == "Darwin"
}
pub fn strip_binary(
binary: &PathBuf, target_options: &TargetOptions<'_, '_>,
) -> Result<PathBuf, Error> {
let file_name = binary.file_name().unwrap();
let new_file_name = file_name.to_string_lossy().into_owned() + "_stripped";
let target_path = binary.parent().unwrap().join(new_file_name);
let strip_result = Command::new(strip_tool_path(target_options)?)
.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)
}