-
Notifications
You must be signed in to change notification settings - Fork 3
/
build.rs
116 lines (109 loc) · 4 KB
/
build.rs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
use std::env;
use std::fs::{create_dir_all};
use std::path::{PathBuf};
use std::process::{Command};
fn main() {
let manifest_dir = env::var("CARGO_MANIFEST_DIR").unwrap();
let out_dir = env::var("OUT_DIR").unwrap();
let mut venv_path = PathBuf::from(&out_dir);
venv_path.push("env");
if !venv_path.exists() {
Command::new("virtualenv")
.current_dir(&out_dir)
.arg("-p").arg("python2.7")
.arg(venv_path.to_str().unwrap())
.status().unwrap();
}
let mut python = PathBuf::from(&venv_path);
python.push("bin");
python.push("python");
let mut pip = PathBuf::from(&venv_path);
pip.push("bin");
pip.push("pip");
let mut ninja = PathBuf::from(&out_dir);
ninja.push("ninja-build");
ninja.push("ninja");
if !ninja.exists() {
let mut ninja_src_path = PathBuf::from(&manifest_dir);
ninja_src_path.push("ninja");
let mut ninja_build_path = PathBuf::from(&out_dir);
ninja_build_path.push("ninja-build");
create_dir_all(&ninja_build_path).ok();
let mut ninja_config_path = PathBuf::from(&ninja_src_path);
ninja_config_path.push("configure.py");
Command::new(python.to_str().unwrap())
.current_dir(ninja_build_path.to_str().unwrap())
.arg(ninja_config_path.to_str().unwrap())
.arg("--bootstrap")
.status().unwrap();
Command::new(pip.to_str().unwrap())
.current_dir(&out_dir)
.arg("install").arg("--upgrade")
.arg("ninja-syntax")
.status().unwrap();
}
let mut peachpy_build_path = PathBuf::from(&out_dir);
peachpy_build_path.push("PeachPy-build");
if !peachpy_build_path.exists() {
let mut peachpy_src_path = PathBuf::from(&manifest_dir);
peachpy_src_path.push("PeachPy");
Command::new("cp")
.current_dir(&out_dir)
.arg("-r")
.arg(peachpy_src_path.to_str().unwrap())
.arg(peachpy_build_path.to_str().unwrap())
.status().unwrap();
let mut peachpy_req_path = PathBuf::from(&peachpy_build_path);
peachpy_req_path.push("requirements.txt");
Command::new(pip.to_str().unwrap())
.current_dir(&out_dir)
.arg("install").arg("--upgrade")
.arg("-r").arg(peachpy_req_path.to_str().unwrap())
.status().unwrap();
let mut peachpy_setup_path = PathBuf::from(&peachpy_build_path);
peachpy_setup_path.push("setup.py");
Command::new(python.to_str().unwrap())
.current_dir(&peachpy_build_path)
.arg(peachpy_setup_path.to_str().unwrap())
.arg("generate")
.status().unwrap();
Command::new(pip.to_str().unwrap())
.current_dir(peachpy_build_path.to_str().unwrap())
.arg("install").arg("--upgrade")
.arg(peachpy_build_path.to_str().unwrap())
.status().unwrap();
}
let mut nnpack_lib_dst_path = PathBuf::from(&out_dir);
nnpack_lib_dst_path.push("libnnpack_native.a");
if !nnpack_lib_dst_path.exists() {
let mut nnpack_src_path = PathBuf::from(&manifest_dir);
nnpack_src_path.push("NNPACK");
let mut nnpack_build_path = PathBuf::from(&out_dir);
nnpack_build_path.push("NNPACK-build");
Command::new("cp")
.current_dir(&out_dir)
.arg("-r")
.arg(nnpack_src_path.to_str().unwrap())
.arg(nnpack_build_path.to_str().unwrap())
.status().unwrap();
let mut nnpack_config_path = PathBuf::from(&nnpack_build_path);
nnpack_config_path.push("configure.py");
Command::new(python.to_str().unwrap())
.current_dir(nnpack_build_path.to_str().unwrap())
.arg(nnpack_config_path.to_str().unwrap())
.status().unwrap();
Command::new(ninja.to_str().unwrap())
.env("PYTHONHOME", venv_path.to_str().unwrap())
.current_dir(nnpack_build_path.to_str().unwrap())
.status().unwrap();
let mut nnpack_lib_path = PathBuf::from(&nnpack_build_path);
nnpack_lib_path.push("lib");
nnpack_lib_path.push("libnnpack.a");
Command::new("cp")
.current_dir(&out_dir)
.arg(nnpack_lib_path.to_str().unwrap())
.arg(nnpack_lib_dst_path.to_str().unwrap())
.status().unwrap();
}
println!("cargo:rustc-link-search=native={}", out_dir);
}