1
+ #! /usr/bin/env bash
2
+
3
+ srctree=$1
4
+ objtree=$2
5
+ lib_src=$3
6
+ bindgen_file=$4
7
+
8
+ # TODO: create issue at RA to accept @arg file
9
+ function generate_cfgs() {
10
+ echo ' ['
11
+ cfgs=$( cat $objtree /include/generated/rustc_cfg | sed ' s/--cfg=//' | sed ' s/"/\\"/g' | sed ' s/$/",/' | sed ' s/^/"/' )
12
+ echo ${cfgs::- 1}
13
+ echo ' ]'
14
+ }
15
+
16
+ function generate_crate() {
17
+ name=$1
18
+ module=$2
19
+ member=${3:- " true" }
20
+ cfg=${4:- $(generate_cfgs)}
21
+ deps=${5:- ' [{"crate":0,"name":"core"},{"crate":2,"name":"alloc"},{"crate":3,"name":"kernel"}]' }
22
+ extra=${6:- " " }
23
+
24
+ echo " {
25
+ \" display_name\" :\" $name \" ,
26
+ \" root_module\" :\" $module \" ,
27
+ \" edition\" :\" 2018\" ,
28
+ \" deps\" :$deps ,
29
+ \" is_workspace_member\" : $member ,
30
+ \" cfg\" : $cfg
31
+ $extra
32
+ }"
33
+ }
34
+
35
+ function generate_kernel() {
36
+ generate_crate " core" " ${lib_src} /core/src/lib.rs" " false" " []" " []"
37
+ echo " ,"
38
+ generate_crate " compiler_builtins" " ${srctree} /rust/compiler_builtins.rs" " true" " []" " []"
39
+ echo " ,"
40
+ generate_crate " alloc" " ${lib_src} /alloc/src/lib.rs" " false" " []" \
41
+ ' [{"crate":0,"name":"core"},{"crate":1,"name":"compiler_builtins"}]'
42
+ echo " ,"
43
+ generate_crate " kernel" " ${srctree} /rust/kernel/lib.rs" " true" " $( generate_cfgs) " \
44
+ ' [{"crate":0,"name":"core"},{"crate":2,"name":"alloc"}]' \
45
+ ' ,"proc_macro_dylib_path":"./rust/libmodule.so","env":{"RUST_BINDINGS_FILE":"' $bindgen_file ' "},
46
+ "source": { "include_dirs": ["' ${objtree} ' /rust/"], "exclude_dirs": []}'
47
+ echo " ,"
48
+ echo ' {
49
+ "display_name":"module",
50
+ "root_module":"' ${srctree} ' /rust/module.rs",
51
+ "edition":"2018",
52
+ "is_workspace_member":true,
53
+ "deps": [],
54
+ "cfg": []
55
+ },'
56
+ generate_crate " module" " ${srctree} /rust/module.rs"
57
+ echo " ,"
58
+ }
59
+
60
+ function check_and_generate() {
61
+ filepath=$1
62
+ file=$( basename $filepath )
63
+ makefile=$( dirname $filepath ) /Makefile
64
+ name=${file% .rs}
65
+ objname=${name} .o
66
+ echo " checking $filepath " >&2
67
+ if grep -q $objname $makefile ; then
68
+ echo " building crate $name " >&2
69
+ echo $( generate_crate " $name " " $filepath " )
70
+ echo " ,"
71
+ fi
72
+ }
73
+
74
+ function generate_drivers() {
75
+ drivers=$( find ../drivers -name ' *.rs' )
76
+ for x in $drivers ; do
77
+ check_and_generate $x
78
+ done
79
+ echo " "
80
+ }
81
+
82
+ function generate_samples() {
83
+ samples=$( find ../samples/rust)
84
+ for x in $samples ; do
85
+ check_and_generate $x
86
+ done
87
+ }
88
+
89
+ echo ' {"crates":['
90
+ generate_kernel
91
+ generate_drivers
92
+ samples=$( generate_samples)
93
+ echo ${samples::- 1}
94
+ echo ' ],
95
+ "sysroot_src": "' ${lib_src} ' "}'
0 commit comments