Skip to content

Commit

Permalink
Auto merge of #31591 - alexcrichton:make-clean-with-rustbuild, r=brson
Browse files Browse the repository at this point in the history
At the same time also touch up the job management on Windows to be a little more resilient to failure.
  • Loading branch information
bors committed Feb 13, 2016
2 parents 4b72450 + 07638b9 commit bc91927
Show file tree
Hide file tree
Showing 5 changed files with 60 additions and 2 deletions.
36 changes: 36 additions & 0 deletions src/bootstrap/build/clean.rs
@@ -0,0 +1,36 @@
// Copyright 2016 The Rust Project Developers. See the COPYRIGHT
// file at the top-level directory of this distribution and at
// http://rust-lang.org/COPYRIGHT.
//
// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
// option. This file may not be copied, modified, or distributed
// except according to those terms.

use std::fs;
use std::path::Path;

use build::Build;

pub fn clean(build: &Build) {
for host in build.config.host.iter() {

let out = build.out.join(host);

rm_rf(build, &out.join("compiler-rt"));

for stage in 0..4 {
rm_rf(build, &out.join(format!("stage{}", stage)));
rm_rf(build, &out.join(format!("stage{}-std", stage)));
rm_rf(build, &out.join(format!("stage{}-rustc", stage)));
}
}
}

fn rm_rf(build: &Build, path: &Path) {
if path.exists() {
build.verbose(&format!("removing `{}`", path.display()));
t!(fs::remove_dir_all(path));
}
}
3 changes: 3 additions & 0 deletions src/bootstrap/build/flags.rs
Expand Up @@ -26,6 +26,7 @@ pub struct Flags {
pub src: Option<PathBuf>,
pub jobs: Option<u32>,
pub args: Vec<String>,
pub clean: bool,
}

pub struct Filter {
Expand All @@ -44,6 +45,7 @@ impl Flags {
opts.optopt("", "stage", "stage to build", "N");
opts.optopt("", "src", "path to repo root", "DIR");
opts.optopt("j", "jobs", "number of jobs to run in parallel", "JOBS");
opts.optflag("", "clean", "clean output directory");
opts.optflag("h", "help", "print this help message");

let usage = |n| -> ! {
Expand Down Expand Up @@ -75,6 +77,7 @@ impl Flags {

Flags {
verbose: m.opt_present("v"),
clean: m.opt_present("clean"),
stage: m.opt_str("stage").map(|j| j.parse().unwrap()),
build: m.opt_str("build").unwrap(),
host: Filter { values: m.opt_strs("host") },
Expand Down
15 changes: 13 additions & 2 deletions src/bootstrap/build/job.rs
Expand Up @@ -64,9 +64,20 @@ pub unsafe fn setup() {
mem::size_of_val(&info) as DWORD);
assert!(r != 0, "{}", io::Error::last_os_error());

// Assign our process to this job object
// Assign our process to this job object. Note that if this fails, one very
// likely reason is that we are ourselves already in a job object! This can
// happen on the build bots that we've got for Windows, or if just anyone
// else is instrumenting the build. In this case we just bail out
// immediately and assume that they take care of it.
//
// Also note that nested jobs (why this might fail) are supported in recent
// versions of Windows, but the version of Windows that our bots are running
// at least don't support nested job objects.
let r = AssignProcessToJobObject(job, GetCurrentProcess());
assert!(r != 0, "{}", io::Error::last_os_error());
if r == 0 {
CloseHandle(job);
return
}

// If we've got a parent process (e.g. the python script that called us)
// then move ownership of this job object up to them. That way if the python
Expand Down
5 changes: 5 additions & 0 deletions src/bootstrap/build/mod.rs
Expand Up @@ -30,6 +30,7 @@ macro_rules! t {

mod cc;
mod channel;
mod clean;
mod compile;
mod config;
mod flags;
Expand Down Expand Up @@ -122,6 +123,10 @@ impl Build {
#[cfg(not(windows))] fn setup_job() {}
setup_job();

if self.flags.clean {
return clean::clean(self);
}

cc::find(self);
sanity::check(self);
channel::collect(self);
Expand Down
3 changes: 3 additions & 0 deletions src/bootstrap/mk/Makefile.in
Expand Up @@ -21,3 +21,6 @@ BOOTSTRAP := $(CFG_PYTHON) $(CFG_SRC_DIR)src/bootstrap/bootstrap.py $(BOOTSTRAP_

all:
$(Q)$(BOOTSTRAP)

clean:
$(Q)$(BOOTSTRAP) --clean

0 comments on commit bc91927

Please sign in to comment.