1
+ // TODO - Make this code less awful
1
2
use llvm_tools:: { exe, LlvmTools } ;
2
3
use std:: env;
3
4
use std:: path:: Path ;
4
5
use std:: process:: Command ;
5
6
6
7
fn main ( ) {
8
+ println ! ( "cargo:warning=Compiling..." ) ;
7
9
let out_dir = env:: var ( "OUT_DIR" ) . unwrap ( ) ;
8
10
let llvm_tools = LlvmTools :: new ( ) . expect ( "LLVM tools not found" ) ;
9
11
let objcopy = llvm_tools
@@ -23,6 +25,8 @@ fn main() {
23
25
&objcopy,
24
26
);*/
25
27
28
+ println ! ( "cargo:warning=Compiling stage2..." ) ;
29
+
26
30
build_subproject (
27
31
Path :: new ( "src/real/stage_2" ) ,
28
32
& [
@@ -36,40 +40,49 @@ fn main() {
36
40
}
37
41
38
42
fn build_subproject (
39
- dir : & Path ,
43
+ subproject_dir : & Path ,
40
44
global_symbols : & [ & str ] ,
41
45
target : & str ,
42
46
out_dir : & str ,
43
47
objcopy : & Path ,
44
48
) {
45
- let dir_name = dir. file_name ( ) . unwrap ( ) . to_str ( ) . unwrap ( ) ;
46
- let out_path = Path :: new ( & out_dir) ;
49
+ let dir_name = subproject_dir. file_name ( ) . unwrap ( ) . to_str ( ) . unwrap ( ) ;
50
+ let out_dir_path = Path :: new ( & out_dir) ;
51
+
52
+ let target_dir = out_dir_path. join ( ".." ) . join ( ".." ) . join ( ".." ) . join ( ".." ) . join ( ".." ) ;
53
+
47
54
assert ! (
48
55
global_symbols. len( ) > 0 ,
49
56
"must have at least one global symbol"
50
57
) ;
51
58
52
59
// build
53
60
let mut cmd = Command :: new ( "cargo" ) ;
54
- cmd. current_dir ( & dir ) ;
61
+ cmd. current_dir ( & subproject_dir ) ;
55
62
56
63
cmd. arg ( "build" ) . arg ( "--release" ) . arg ( "-Zbuild-std=core" ) ;
57
64
cmd. arg ( "--verbose" ) ;
58
65
59
66
cmd. arg ( format ! (
60
67
"--target={}" ,
61
- //dir.join(target).display()
62
68
target
63
69
) ) ;
64
- cmd. arg ( "-Z" ) . arg ( "unstable-options" ) ;
70
+
71
+ cmd. arg ( "-Zunstable-options" ) ;
65
72
cmd. arg ( "--out-dir" ) . arg ( & out_dir) ;
66
73
cmd. arg ( "--target-dir" )
67
- . arg ( out_path . join ( "target" ) . join ( dir_name ) ) ;
74
+ . arg ( & target_dir ) ;
68
75
cmd. env_remove ( "RUSTFLAGS" ) ;
69
76
cmd. env (
70
77
"XBUILD_SYSROOT_PATH" ,
71
- out_path . join ( "target" ) . join ( dir_name) . join ( "sysroot" ) ,
78
+ out_dir_path . join ( "target" ) . join ( dir_name) . join ( "sysroot" ) ,
72
79
) ;
80
+
81
+ println ! ( "cargo:warning=Out Dir - {}" , & out_dir_path. display( ) ) ;
82
+ println ! ( "cargo:warning=Subproject Dir - {}" , & subproject_dir. display( ) ) ;
83
+ println ! ( "cargo:warning=Dir Name - {}" , & dir_name) ;
84
+ println ! ( "cargo:warning=Target Dir - {}" , & target_dir. display( ) ) ;
85
+
73
86
let status = cmd. status ( ) . unwrap ( ) ;
74
87
assert ! ( status. success( ) , "Subcrate build failed!" ) ;
75
88
@@ -78,9 +91,9 @@ fn build_subproject(
78
91
for symbol in global_symbols {
79
92
cmd. arg ( "-G" ) . arg ( symbol) ;
80
93
}
81
- cmd. arg ( out_path . join ( format ! ( "lib{}.a" , dir_name) ) ) ;
94
+ cmd. arg ( target_dir . join ( format ! ( "lib{}.a" , dir_name) ) ) ;
82
95
let status = cmd. status ( ) . unwrap ( ) ;
83
- assert ! ( status. success( ) ) ;
96
+ assert ! ( status. success( ) , "Objcopy failed!" ) ;
84
97
85
98
// emit linker flags
86
99
println ! ( "cargo:rustc-link-search=native={}" , out_dir) ;
0 commit comments