aboutsummaryrefslogtreecommitdiffstats
path: root/components/script/build.rs
diff options
context:
space:
mode:
authorJosh Matthews <josh@joshmatthews.net>2019-04-15 21:27:24 -0400
committerJosh Matthews <josh@joshmatthews.net>2019-04-26 08:54:24 -0400
commit57d241fce5531879b641401eb8e554e89aaf7213 (patch)
tree491a69e30c8f7de6ec7597f59c9583bd4efcf9cf /components/script/build.rs
parentec680de0635932201655318a3acf446c40b14e03 (diff)
downloadservo-57d241fce5531879b641401eb8e554e89aaf7213.tar.gz
servo-57d241fce5531879b641401eb8e554e89aaf7213.zip
Add Windows x86 build job.
Diffstat (limited to 'components/script/build.rs')
-rw-r--r--components/script/build.rs36
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