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
use cc::Build;
//use std::{env, error::Error, fs::File, io::Write, path::PathBuf};
use std::{env, error::Error}; // , path::PathBuf};
fn main() -> Result<(), Box<dyn Error>> {
let target = env::var("TARGET").unwrap();
/*
{
use std::fs::File;
use std::io::Write;
let mut file = File::create("env_list_.txt")?;
for (key, value) in env::vars() {
write!(file, "{}: {}\n", key, value)?;
}
file.flush()?;
}
*/
if target.contains("armv7r") {
// ソースファイル
let src_files = vec![
[
"src/asm/arm/kernel_context_create.S",
"kernel_context_create",
],
[
"src/asm/arm/kernel_context_switch.S",
"kernel_context_switch",
],
["src/asm/arm/kernel_exception_irq.S", "kernel_exception_irq"],
];
for name in src_files.into_iter() {
Build::new()
.flag("-mfpu=vfpv3-d16")
.flag("-mthumb-interwork")
.flag("-mfloat-abi=softfp")
.flag("-D_KERNEL_ARM_WITH_VFP")
.flag("-Wno-unused-parameter")
.flag("-Wno-missing-field-initializers")
.file(name[0])
.compile(name[1]);
}
}
if target.contains("aarch64") {
// ソースファイル
let src_files = vec![
[
"src/asm/aarch64/kernel_context_create.S",
"kernel_context_create",
],
[
"src/asm/aarch64/kernel_context_switch.S",
"kernel_context_switch",
],
];
for name in src_files.into_iter() {
Build::new().file(name[0]).compile(name[1]);
}
}
if target.contains("x86_64") {
// ソースファイル
let src_files = vec![
[
"src/asm/x86_64/kernel_context_create.S",
"kernel_context_create",
],
[
"src/asm/x86_64/kernel_context_switch.S",
"kernel_context_switch",
],
];
for name in src_files.into_iter() {
Build::new().flag("-fPIE").file(name[0]).compile(name[1]);
}
}
Ok(())
}