File tree 1 file changed +31
-0
lines changed
1 file changed +31
-0
lines changed Original file line number Diff line number Diff line change
1
+ //! This build script copies the `memory.x` file from the crate root into
2
+ //! a directory where the linker can always find it at build time.
3
+ //! For many projects this is optional, as the linker always searches the
4
+ //! project root directory -- wherever `Cargo.toml` is. However, if you
5
+ //! are using a workspace or have a more complicated build setup, this
6
+ //! build script becomes required. Additionally, by requesting that
7
+ //! Cargo re-run the build script whenever `memory.x` is changed,
8
+ //! updating `memory.x` ensures a rebuild of the application with the
9
+ //! new memory settings.
10
+
11
+ use std:: env;
12
+ use std:: fs:: File ;
13
+ use std:: io:: Write ;
14
+ use std:: path:: PathBuf ;
15
+
16
+ fn main ( ) {
17
+ // Put `memory.x` in our output directory and ensure it's
18
+ // on the linker search path.
19
+ let out = & PathBuf :: from ( env:: var_os ( "OUT_DIR" ) . unwrap ( ) ) ;
20
+ File :: create ( out. join ( "memory.x" ) )
21
+ . unwrap ( )
22
+ . write_all ( include_bytes ! ( "memory.x" ) )
23
+ . unwrap ( ) ;
24
+ println ! ( "cargo:rustc-link-search={}" , out. display( ) ) ;
25
+
26
+ // By default, Cargo will re-run a build script whenever
27
+ // any file in the project changes. By specifying `memory.x`
28
+ // here, we ensure the build script is only re-run when
29
+ // `memory.x` is changed.
30
+ println ! ( "cargo:rerun-if-changed=memory.x" ) ;
31
+ }
You can’t perform that action at this time.
0 commit comments