diff options
author | Josh Matthews <josh@joshmatthews.net> | 2019-04-15 21:27:24 -0400 |
---|---|---|
committer | Josh Matthews <josh@joshmatthews.net> | 2019-04-26 08:54:24 -0400 |
commit | 57d241fce5531879b641401eb8e554e89aaf7213 (patch) | |
tree | 491a69e30c8f7de6ec7597f59c9583bd4efcf9cf /components/script/build.rs | |
parent | ec680de0635932201655318a3acf446c40b14e03 (diff) | |
download | servo-57d241fce5531879b641401eb8e554e89aaf7213.tar.gz servo-57d241fce5531879b641401eb8e554e89aaf7213.zip |
Add Windows x86 build job.
Diffstat (limited to 'components/script/build.rs')
-rw-r--r-- | components/script/build.rs | 36 |
1 files changed, 36 insertions, 0 deletions
diff --git a/components/script/build.rs b/components/script/build.rs index 21697db873c..ee13a029454 100644 --- a/components/script/build.rs +++ b/components/script/build.rs @@ -9,11 +9,47 @@ use std::fmt; use std::fs::File; use std::io::Write; use std::path::PathBuf; +use std::process::Command; +use std::str; use std::time::Instant; fn main() { let start = Instant::now(); + let target = env::var("TARGET").unwrap(); + let host = env::var("HOST").unwrap(); + if target.contains("windows") && host != target { + assert_eq!( + host, "x86_64-pc-windows-msvc", + "Only cross-compiling from x64 is supported" + ); + assert_eq!( + target, "i686-pc-windows-msvc", + "Only cross-compiling to x86 is supported" + ); + assert!(env::var("VSINSTALLDIR").is_err()); + // When cross-compiling on Windows, we need to ensure that the PATH is + // set up appropriately for the target before invoking make. + if env::var("VCVARSALL_PATH").is_err() { + panic!( + "Need to provide VCVARSALL_PATH value with path to \ + vcvarsall.bat from Visual Studio installation" + ); + } + + let vcvars = Command::new("vcvars.bat").output().unwrap(); + assert!(vcvars.status.success()); + let output = str::from_utf8(&vcvars.stdout).unwrap(); + for line in output.lines() { + let mut parts = line.splitn(2, '='); + if let Some(name) = parts.next() { + if let Some(value) = parts.next() { + env::set_var(name, value); + } + } + } + } + // This must use the Ninja generator -- it's the only one that // parallelizes cmake's output properly. (Cmake generates // separate makefiles, each of which try to build |