| // Part of the Crubit project, under the Apache License v2.0 with LLVM |
| // Exceptions. See /LICENSE for license information. |
| // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception |
| |
| use std::ffi::OsStr; |
| use std::io::{self, Write}; |
| use std::path::Path; |
| |
| pub fn print_link_search<T: AsRef<OsStr>>(s: T) -> io::Result<()> { |
| print!("cargo::rustc-link-search=native="); |
| io::stdout().write(s.as_ref().as_encoded_bytes())?; |
| print!("\n"); |
| Ok(()) |
| } |
| |
| pub fn print_link_searchs<T: AsRef<OsStr>>(paths: &[T]) -> io::Result<()> { |
| for path in paths { |
| print_link_search(path)?; |
| } |
| Ok(()) |
| } |
| |
| pub fn print_link_libs<T: AsRef<OsStr>>(libs: &[T]) -> io::Result<()> { |
| for lib in libs { |
| print!("cargo::rustc-link-lib="); |
| io::stdout().write(lib.as_ref().as_encoded_bytes())?; |
| print!("\n"); |
| } |
| Ok(()) |
| } |
| |
| pub fn add_include_path<P: AsRef<Path>>(build: &mut cc::Build, path: P, system: bool) { |
| if system { |
| if cfg!(unix) { |
| build.flag(&format!("-isystem{}", path.as_ref().display())); |
| } else { |
| build.flag(&format!("-I{}", path.as_ref().display())); |
| } |
| } else { |
| build.flag(&format!("-I{}", path.as_ref().display())); |
| } |
| } |
| |
| pub fn print_env_to_string(env_var: &str) -> Option<String> { |
| println!("cargo:rerun-if-env-changed={}", env_var); |
| std::env::var(env_var).ok().to_owned() |
| } |
| |
| pub fn add_source_file<P: AsRef<Path>>(build: &mut cc::Build, path: P) -> io::Result<()> { |
| print!("cargo::rerun-if-changed="); |
| io::stdout().write(path.as_ref().as_os_str().as_encoded_bytes())?; |
| print!("\n"); |
| build.file(path.as_ref()); |
| Ok(()) |
| } |
| |
| pub fn print_compiler_deps() { |
| println!("cargo:rerun-if-env-changed=CC"); |
| println!("cargo:rerun-if-env-changed=CXX"); |
| println!("cargo:rerun-if-env-changed=LD"); |
| println!("cargo:rerun-if-env-changed=CFLAGS"); |
| println!("cargo:rerun-if-env-changed=CXXFLAGS"); |
| println!("cargo:rerun-if-env-changed=LDFLAGS"); |
| } |