Skip to content

Commit 92c9f80

Browse files
committed
build: use a generated top-level crate
Allows forcing compilation settings and having a consistent library output name.
1 parent 813c2cb commit 92c9f80

File tree

3 files changed

+39
-13
lines changed

3 files changed

+39
-13
lines changed

CMakeLists.txt

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -39,12 +39,19 @@ add_custom_command(OUTPUT ${zephyr_bindgen}
3939
set(rust_src_dir ${CMAKE_CURRENT_SOURCE_DIR}/rust)
4040
set(rust_sysroot ${CMAKE_CURRENT_BINARY_DIR}/sysroot)
4141
set(rust_sysroot_build ${CMAKE_CURRENT_BINARY_DIR}/sysroot-build)
42+
set(rust_generated_project ${CMAKE_CURRENT_BINARY_DIR}/rust-app)
4243
set(rust_app_build ${CMAKE_CURRENT_BINARY_DIR}/app)
4344
set(rust_staticlib ${rust_app_build}/${rust_target}/release/librust_app.a)
44-
if(NOT DEFINED CARGO_MANIFEST)
45-
set(CARGO_MANIFEST ${CMAKE_SOURCE_DIR}/Cargo.toml)
45+
if(NOT DEFINED CARGO_SOURCE_DIR)
46+
set(CARGO_SOURCE_DIR ${CMAKE_SOURCE_DIR})
4647
endif()
4748

49+
add_custom_command(OUTPUT ${rust_generated_project}/Cargo.toml
50+
COMMAND ${rust_src_dir}/genproject.sh ${CARGO_SOURCE_DIR} ${rust_generated_project}
51+
DEPENDS ${rust_src_dir}/genproject.sh
52+
)
53+
add_custom_target(rust_generated_project DEPENDS ${rust_generated_project}/Cargo.toml)
54+
4855
zephyr_get_include_directories_for_lang_as_string( C includes)
4956
zephyr_get_compile_definitions_for_lang_as_string( C definitions)
5057

@@ -60,7 +67,7 @@ ExternalProject_Add(
6067
SOURCE_DIR ${rust_src_dir}
6168
BUILD_IN_SOURCE 1
6269
BUILD_ALWAYS 1
63-
DEPENDS rust_syscall_macros_h_target zephyr_bindgen_target
70+
DEPENDS rust_syscall_macros_h_target zephyr_bindgen_target rust_generated_project
6471
CONFIGURE_COMMAND ""
6572
BUILD_COMMAND
6673
env
@@ -72,7 +79,7 @@ ExternalProject_Add(
7279
"APP_BUILD=${rust_app_build}"
7380
"RUST_TARGET_PATH=${rust_src_dir}"
7481
"RUST_TARGET=${rust_target}"
75-
"CARGO_MANIFEST=${CARGO_MANIFEST}"
82+
"CARGO_MANIFEST=${rust_generated_project}/Cargo.toml"
7683
./build.sh
7784
INSTALL_COMMAND ""
7885
BUILD_BYPRODUCTS ${rust_staticlib}

rust/genproject.sh

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
#!/bin/sh -ex
2+
3+
crate_dir=$1
4+
outdir=$2
5+
6+
rm -rf $outdir
7+
mkdir -p $outdir/src
8+
9+
echo "extern crate app;" > $outdir/src/lib.rs
10+
11+
cat > $outdir/Cargo.toml <<EOF
12+
[package]
13+
name = "rust-app"
14+
version = "0.1.0"
15+
edition = "2018"
16+
17+
[lib]
18+
crate-type = ["staticlib"]
19+
20+
[dependencies]
21+
app = { path = "${crate_dir}" }
22+
23+
[profile.release]
24+
panic = "abort"
25+
lto = true
26+
debug = true
27+
EOF

samples/rust-app/Cargo.toml

Lines changed: 1 addition & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,8 @@
11
[package]
2-
name = "rust-app"
2+
name = "app"
33
version = "0.1.0"
44
authors = ["Tyler Hall <[email protected]>"]
55
edition = "2018"
66

7-
[lib]
8-
crate-type = ["staticlib"]
9-
107
[dependencies]
118
cstr = "0.1.7"
12-
13-
[profile.release]
14-
panic = "abort"
15-
lto = true
16-
debug = true

0 commit comments

Comments
 (0)