forked from LedgerHQ/rust-app-password-manager
-
Notifications
You must be signed in to change notification settings - Fork 0
/
build.rs
86 lines (80 loc) · 2.79 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
// Copyright 2020 Ledger SAS
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
extern crate bindgen;
extern crate cc;
use std::env;
use std::path::PathBuf;
use std::process::Command;
fn main() {
let bindings = bindgen::Builder::default()
.header("./src/c/aes.h")
.layout_tests(false)
.use_core()
.ctypes_prefix("cty")
.generate()
.expect("Unable to generate bindings");
bindings
.write_to_file(
PathBuf::from(env::var("OUT_DIR").unwrap()).join("bindings.rs"),
)
.expect("Could'nt write bindings");
let output = Command::new("arm-none-eabi-gcc")
.arg("-print-sysroot")
.output()
.expect("failed");
let sysroot = std::str::from_utf8(&output.stdout).unwrap().trim();
let gcc_toolchain = if sysroot.is_empty() {
String::from("/usr/include/")
} else {
format!("{}/include", sysroot)
};
println!("{:?}", output.stderr);
assert!(output.status.success());
cc::Build::new()
.compiler("clang")
.target("thumbv6m-none-eabi")
.file("./src/c/aes.c")
.include(gcc_toolchain)
// More or less same flags as in the C SDK Makefile.defines
.no_default_flags(true)
.pic(true)
.flag("-fropi")
.flag("--target=thumbv6m-none-eabi")
.flag("-fomit-frame-pointer")
.flag("-mcpu=cortex-m0")
.flag("-fno-common")
.flag("-fdata-sections")
.flag("-ffunction-sections")
.flag("-mtune=cortex-m0")
.flag("-mthumb")
.flag("-fno-jump-tables")
.flag("-fno-builtin")
.flag("-fshort-enums")
.flag("-mno-unaligned-access")
.flag("-Wno-unused-command-line-argument")
.flag("-Wno-missing-declarations")
.flag("-Wno-unused-parameter")
.flag("-Wno-implicit-fallthrough")
.flag("-Wno-sign-compare")
.flag("-Wno-unknown-pragmas")
.flag("-Wno-unknown-attributes")
.flag("-Wno-pointer-sign")
.flag("-Wno-implicit-function-declaration")
.flag("-Wno-tautological-pointer-compare")
.flag("-Wno-incompatible-pointer-types-discards-qualifiers")
.flag("-Wno-duplicate-decl-specifier")
.flag("-Wno-#warnings")
.flag("-Wno-int-conversion")
.compile("aes");
}