Browse Source

Generate recursive meta language dependencies.

Cargo doesn't scan a directory for changed dependencies recursively, so do that
as part of the build.py script.
pull/1019/head
Jakob Stoklund Olesen 9 years ago
parent
commit
4109b9fe13
  1. 3
      cranelift/src/libcretonne/build.rs
  2. 2
      meta/build.py
  3. 36
      meta/gen_build_deps.py

3
cranelift/src/libcretonne/build.rs

@ -32,9 +32,6 @@ fn main() {
let meta_dir = top_dir.join("meta");
let build_script = meta_dir.join("build.py");
// Let Cargo known that this script should be rerun if anything changes in the meta directory.
println!("cargo:rerun-if-changed={}", meta_dir.display());
// Launch build script with Python. We'll just find python in the path.
let status = process::Command::new("python")
.current_dir(top_dir)

2
meta/build.py

@ -5,6 +5,7 @@
import argparse
import target
import gen_instr
import gen_build_deps
parser = argparse.ArgumentParser(description='Generate sources for Cretonne.')
parser.add_argument('--out-dir', help='set output directory')
@ -15,3 +16,4 @@ out_dir = args.out_dir
targets = target.all_targets()
gen_instr.generate(targets, out_dir)
gen_build_deps.generate()

36
meta/gen_build_deps.py

@ -0,0 +1,36 @@
"""
Generate build dependencies for Cargo.
The `build.py` script is invoked by cargo when building libcretonne to
generate Rust code from the instruction descriptions. Cargo needs to know when
it is necessary to rerun the build script.
If the build script outputs lines of the form:
cargo:rerun-if-changed=/path/to/file
cargo will rerun the build script when those files have changed since the last
build.
"""
import os
from os.path import dirname, abspath, join
def source_files(top):
"""
Recursively find all interesting source files and directories in the
directory tree starting at top. Yield a path to each file.
"""
for (dirpath, dirnames, filenames) in os.walk(top):
yield dirpath
for f in filenames:
if f.endswith('.py'):
yield join(dirpath, f)
def generate():
print "Dependencies from meta language directory:"
meta = dirname(abspath(__file__))
for path in source_files(meta):
print "cargo:rerun-if-changed=" + path
Loading…
Cancel
Save