aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.github/workflows/build.yml379
-rw-r--r--.github/workflows/docs.yml93
-rw-r--r--.github/workflows/properties/build.properties.json6
-rw-r--r--.github/workflows/properties/docs.properties.json6
-rw-r--r--.github/workflows/properties/publish.properties.json6
-rw-r--r--.github/workflows/publish.yml94
-rw-r--r--.travis.yml1
-rw-r--r--ci/install.sh9
-rw-r--r--ci/script.sh6
-rw-r--r--examples/t-cfg-resources.rs2
-rw-r--r--macros/src/codegen.rs3
-rw-r--r--macros/src/codegen/init.rs6
-rw-r--r--macros/src/codegen/post_init.rs7
13 files changed, 607 insertions, 11 deletions
diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml
new file mode 100644
index 00000000..8468ceb7
--- /dev/null
+++ b/.github/workflows/build.yml
@@ -0,0 +1,379 @@
+name: Build
+on:
+ push:
+ branches:
+ - master
+ - ghatest
+ pull_request:
+ branches:
+ - master
+ - ghatest
+
+env:
+ CARGO_TERM_COLOR: always
+
+jobs:
+ # Run cargo fmt --check, includes macros/
+ style:
+ name: Check Style with cargo fmt
+ runs-on: ubuntu-latest
+ steps:
+ - name: Checkout
+ uses: actions/checkout@v1
+
+ - name: Install Rust
+ uses: actions-rs/toolchain@v1
+ with:
+ profile: minimal
+ toolchain: stable
+ override: true
+ components: rustfmt
+
+ - name: cargo fmt --check
+ uses: actions-rs/cargo@v1
+ with:
+ command: fmt
+ args: --all -- --check
+
+ # Compilation check
+ check:
+ runs-on: ubuntu-latest
+ strategy:
+ matrix:
+ target:
+ - thumbv7m-none-eabi
+ - thumbv6m-none-eabi
+ - x86_64-unknown-linux-gnu
+ toolchain:
+ - stable
+ - 1.36.0
+ - nightly
+ steps:
+ - name: Checkout
+ uses: actions/checkout@v2
+
+ - name: Install Rust ${{ matrix.toolchain }} with target (${{ matrix.target }})
+ uses: actions-rs/toolchain@v1
+ with:
+ toolchain: ${{ matrix.toolchain }}
+ target: ${{ matrix.target }}
+ override: true
+
+ - name: Disable optimisation profiles
+ if: matrix.toolchain == '1.36.0'
+ run: sed -i '/^\[profile.*build-override]$/,/^$/{/^#/!{/^$/!d}}' Cargo.toml
+
+ - name: cargo check
+ uses: actions-rs/cargo@v1
+ with:
+ use-cross: false
+ command: check
+ args: --target=${{ matrix.target }}
+
+ # Verify all examples
+ checkexamples:
+ runs-on: ubuntu-latest
+ strategy:
+ matrix:
+ target:
+ - thumbv7m-none-eabi
+ - thumbv6m-none-eabi
+ toolchain:
+ - stable
+ steps:
+ - name: Checkout
+ uses: actions/checkout@v2
+
+ - name: Install Rust ${{ matrix.toolchain }} with target (${{ matrix.target }})
+ uses: actions-rs/toolchain@v1
+ with:
+ toolchain: ${{ matrix.toolchain }}
+ target: ${{ matrix.target }}
+ override: true
+ - uses: actions-rs/cargo@v1
+ with:
+ use-cross: false
+ command: check
+ args: --examples --target=${{ matrix.target }}
+
+ - name: cargo check -p homogeneous
+ uses: actions-rs/cargo@v1
+ with:
+ use-cross: false
+ command: check
+ args: -p homogeneous --examples --target=${{ matrix.target }}
+
+ - name: Install QEMU
+ run: |
+ mkdir qemu
+ curl -L https://github.com/japaric/qemu-bin/raw/master/14.04/qemu-system-arm-2.12.0 > qemu/qemu-system-arm
+ chmod +x qemu/qemu-system-arm
+
+ - name: Setup arm-none-eabi-gcc
+ uses: fiam/arm-none-eabi-gcc@v1
+ with:
+ release: '9-2019-q4' # The arm-none-eabi-gcc release to use.
+
+ - name: Run-pass tests
+ run: |
+ # Add QEMU to the path
+ echo $PATH
+ PATH=$(pwd)/qemu:$PATH
+ arm_example() {
+ local COMMAND=$1
+ local EXAMPLE=$2
+ local BUILD_MODE=$3
+ local FEATURES=$4
+ local BUILD_NUM=$5
+
+ if [ $BUILD_MODE = "release" ]; then
+ local RELEASE_FLAG="--release"
+ else
+ local RELEASE_FLAG=""
+ fi
+
+ if [ -n "$FEATURES" ]; then
+ local FEATURES_FLAG="--features $FEATURES"
+ local FEATURES_STR=${FEATURES/,/_}_
+ else
+ local FEATURES_FLAG=""
+ local FEATURES_STR=""
+ fi
+ local CARGO_FLAGS="--example $EXAMPLE --target ${{ matrix.target }} $RELEASE_FLAG $FEATURES_FLAG"
+
+ if [ $COMMAND = "run" ]; then
+ cargo $COMMAND $CARGO_FLAGS | diff -u ci/expected/$EXAMPLE.run -
+ else
+ cargo $COMMAND $CARGO_FLAGS
+ fi
+ arm-none-eabi-objcopy -O ihex target/${{ matrix.target }}/$BUILD_MODE/examples/$EXAMPLE ci/builds/${EXAMPLE}_${FEATURES_STR}${BUILD_MODE}_${BUILD_NUM}.hex
+ }
+
+ mkdir -p ci/builds
+ exs=(
+ idle
+ init
+ hardware
+ preempt
+ binds
+
+ resource
+ lock
+ late
+ only-shared-access
+
+ task
+ message
+ capacity
+
+ types
+ not-send
+ not-sync
+ shared-with-init
+
+ generics
+ cfg
+ pool
+ ramfunc
+ )
+
+ for ex in ${exs[@]}; do
+ if [ $ex = pool ]; then
+ if [ ${{ matrix.target }} = thumbv6m-none-eabi ]; then
+ continue
+ fi
+
+ td=$(mktemp -d)
+
+ cargo run --example $ex --target ${{ matrix.target }} --features __v7 >\
+ $td/pool.run
+ grep 'foo(0x2' $td/pool.run
+ grep 'bar(0x2' $td/pool.run
+ arm-none-eabi-objcopy -O ihex target/${{ matrix.target }}/debug/examples/$ex \
+ ci/builds/${ex}___v7_debug_1.hex
+
+ cargo run --example $ex --target ${{ matrix.target }} --features __v7 --release >\
+ $td/pool.run
+ grep 'foo(0x2' $td/pool.run
+ grep 'bar(0x2' $td/pool.run
+ arm-none-eabi-objcopy -O ihex target/${{ matrix.target }}/release/examples/$ex \
+ ci/builds/${ex}___v7_release_1.hex
+
+ rm -rf $td
+
+ continue
+ fi
+
+ if [ $ex = types ]; then
+ if [ ${{ matrix.target }} = thumbv6m-none-eabi ]; then
+ continue
+ fi
+
+ arm_example "run" $ex "debug" "__v7" "1"
+ arm_example "run" $ex "release" "__v7" "1"
+
+ continue
+ fi
+
+ arm_example "run" $ex "debug" "" "1"
+ if [ $ex = types ]; then
+ arm_example "run" $ex "release" "" "1"
+ else
+ arm_example "build" $ex "release" "" "1"
+ fi
+ done
+
+ built=()
+ cargo clean
+ for ex in ${exs[@]}; do
+ if [ $ex = types ] || [ $ex = pool ]; then
+ if [ ${{ matrix.target }} = thumbv6m-none-eabi ]; then
+ continue
+ fi
+
+ arm_example "build" $ex "debug" "__v7" "2"
+ cmp ci/builds/${ex}___v7_debug_1.hex \
+ ci/builds/${ex}___v7_debug_2.hex
+ arm_example "build" $ex "release" "__v7" "2"
+ cmp ci/builds/${ex}___v7_release_1.hex \
+ ci/builds/${ex}___v7_release_2.hex
+ else
+ arm_example "build" $ex "debug" "" "2"
+ cmp ci/builds/${ex}_debug_1.hex \
+ ci/builds/${ex}_debug_2.hex
+ arm_example "build" $ex "release" "" "2"
+ cmp ci/builds/${ex}_release_1.hex \
+ ci/builds/${ex}_release_2.hex
+ fi
+
+ built+=( $ex )
+ done
+
+ ( cd target/${{ matrix.target }}/release/examples/ && size ${built[@]} )
+
+
+ # Check the correctness of macros/ crate
+ checkmacros:
+ runs-on: ubuntu-latest
+ strategy:
+ matrix:
+ target:
+ - x86_64-unknown-linux-gnu
+ toolchain:
+ - stable
+ - 1.36.0
+ - nightly
+ steps:
+ - name: Checkout
+ uses: actions/checkout@v2
+ - name: Install Rust ${{ matrix.toolchain }} with target (${{ matrix.target }})
+ uses: actions-rs/toolchain@v1
+ with:
+ toolchain: ${{ matrix.toolchain }}
+ target: ${{ matrix.target }}
+ override: true
+
+ - name: Disable optimisation profiles
+ if: matrix.toolchain == '1.36.0'
+ run: sed -i '/^\[profile.*build-override]$/,/^$/{/^#/!{/^$/!d}}' Cargo.toml
+
+ - name: cargo check
+ uses: actions-rs/cargo@v1
+ with:
+ use-cross: false
+ command: check
+ args: --manifest-path macros/Cargo.toml --target=${{ matrix.target }}
+
+ # Run test suite for thumbv7m
+ testv7:
+ runs-on: ubuntu-latest
+ steps:
+ - name: Checkout
+ uses: actions/checkout@v2
+ - name: Install Rust
+ uses: actions-rs/toolchain@v1
+ with:
+ toolchain: 1.36.0
+ target: thumbv7m-none-eabi
+ override: true
+
+ - name: Disable optimisation profiles
+ run: sed -i '/^\[profile.*build-override]$/,/^$/{/^#/!{/^$/!d}}' Cargo.toml
+
+ - uses: actions-rs/cargo@v1
+ with:
+ use-cross: false
+ command: test
+ args: --test single --features __v7
+
+ # Run test suite for thumbv6m
+ testv6:
+ runs-on: ubuntu-latest
+ steps:
+ - name: Checkout
+ uses: actions/checkout@v2
+ - name: Install Rust
+ uses: actions-rs/toolchain@v1
+ with:
+ toolchain: 1.36.0
+ target: thumbv6m-none-eabi
+ override: true
+
+ - name: Disable optimisation profiles
+ run: sed -i '/^\[profile.*build-override]$/,/^$/{/^#/!{/^$/!d}}' Cargo.toml
+
+ - uses: actions-rs/cargo@v1
+ with:
+ use-cross: false
+ command: test
+ args: --test single
+
+ # Verify all multicore examples
+ checkmulticore:
+ runs-on: ubuntu-latest
+ strategy:
+ matrix:
+ target:
+ - x86_64-unknown-linux-gnu
+ toolchain:
+ - nightly
+ steps:
+ - name: Checkout
+ uses: actions/checkout@v2
+
+ - name: Install Rust ${{ matrix.toolchain }} with x86_64-unknown-linux-gnu
+ uses: actions-rs/toolchain@v1
+ with:
+ toolchain: ${{ matrix.toolchain }}
+ target: x86_64-unknown-linux-gnu
+ override: true
+ - name: Install Rust ${{ matrix.toolchain }} with thumbv7m-none-eabi
+ uses: actions-rs/toolchain@v1
+ with:
+ toolchain: ${{ matrix.toolchain }}
+ target: thumbv7m-none-eabi
+ override: true
+ - name: Install Rust ${{ matrix.toolchain }} with thumbv6m-none-eabi
+ uses: actions-rs/toolchain@v1
+ with:
+ toolchain: ${{ matrix.toolchain }}
+ target: thumbv6m-none-eabi
+ override: true
+ - uses: actions-rs/cargo@v1
+ with:
+ command: install
+ args: microamp-tools --version 0.1.0-alpha.3
+
+ - name: Check multi-core examples
+ run: |
+ cd heterogeneous
+ exs=(
+ smallest
+ x-init-2
+ x-init
+ x-schedule
+ x-spawn
+ )
+ for ex in ${exs[@]}; do
+ cargo-microamp --example=$ex --target thumbv7m-none-eabi,thumbv6m-none-eabi --check
+ done
diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml
new file mode 100644
index 00000000..297bff06
--- /dev/null
+++ b/.github/workflows/docs.yml
@@ -0,0 +1,93 @@
+name: Docs
+
+on:
+ push:
+ branches:
+ - master
+ - ghatest
+ pull_request:
+ branches:
+ - master
+ - ghatest
+
+env:
+ CARGO_TERM_COLOR: always
+
+jobs:
+ docs:
+ runs-on: ubuntu-latest
+
+ steps:
+ - name: Checkout
+ uses: actions/checkout@v2
+
+ - name: Set up Python 3.x
+ uses: actions/setup-python@v2
+ with:
+ # Semantic version range syntax or exact version of a Python version
+ python-version: '3.x'
+ # Optional - x64 or x86 architecture, defaults to x64
+ architecture: 'x64'
+
+ # You can test your matrix by printing the current Python version
+ - name: Display Python version
+ run: python -c "import sys; print(sys.version)"
+
+ - name: Install dependencies
+ run: pip install git+https://github.com/linkchecker/linkchecker.git
+
+ - name: Remove cargo-config
+ run: rm -f .cargo/config
+
+ - name: Build docs
+ run: cargo doc
+
+ - name: Check links
+ run: |
+ td=$(mktemp -d)
+ cp -r target/doc $td/api
+ linkchecker $td/api/rtfm/
+ linkchecker $td/api/cortex_m_rtfm_macros/
+
+ mdbook:
+ runs-on: ubuntu-latest
+ steps:
+ - name: Checkout
+ uses: actions/checkout@v2
+ - name: Set up Python 3.x
+ uses: actions/setup-python@v2
+ with:
+ # Semantic version range syntax or exact version of a Python version
+ python-version: '3.x'
+ # Optional - x64 or x86 architecture, defaults to x64
+ architecture: 'x64'
+
+ # You can test your matrix by printing the current Python version
+ - name: Display Python version
+ run: python -c "import sys; print(sys.version)"
+
+ - name: Install dependencies
+ run: pip install git+https://github.com/linkchecker/linkchecker.git
+
+ - name: mdBook Action
+ uses: peaceiris/actions-mdbook@v1.1.11
+ with:
+ mdbook-version: '0.3.1'
+
+ - name: Build book in English
+ run: cd book/en && mdbook build
+
+ - name: Build book in Russian
+ run: cd book/ru && mdbook build
+
+ - name: Check links
+ run: |
+ td=$(mktemp -d)
+ mkdir $td/book
+ cp -r book/en/book $td/book/en
+ cp -r book/ru/book $td/book/ru
+ cp LICENSE-* $td/book/en
+ cp LICENSE-* $td/book/ru
+
+ linkchecker $td/book/en/
+ linkchecker $td/book/ru/
diff --git a/.github/workflows/properties/build.properties.json b/.github/workflows/properties/build.properties.json
new file mode 100644
index 00000000..e447a1ed
--- /dev/null
+++ b/.github/workflows/properties/build.properties.json
@@ -0,0 +1,6 @@
+{
+ "name": "Build",
+ "description": "Build and test a Rust project with Cargo.",
+ "iconName": "rust",
+ "categories": ["Rust"]
+}
diff --git a/.github/workflows/properties/docs.properties.json b/.github/workflows/properties/docs.properties.json
new file mode 100644
index 00000000..a9a052c4
--- /dev/null
+++ b/.github/workflows/properties/docs.properties.json
@@ -0,0 +1,6 @@
+{
+ "name": "Docs",
+ "description": "Build the books.",
+ "iconName": "rust",
+ "categories": ["Rust"]
+}
diff --git a/.github/workflows/properties/publish.properties.json b/.github/workflows/properties/publish.properties.json
new file mode 100644
index 00000000..fa9b8cda
--- /dev/null
+++ b/.github/workflows/properties/publish.properties.json
@@ -0,0 +1,6 @@
+{
+ "name": "Publish",
+ "description": "Publish the books and docs.",
+ "iconName": "rust",
+ "categories": ["Rust"]
+}
diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml
new file mode 100644
index 00000000..7436bf88
--- /dev/null
+++ b/.github/workflows/publish.yml
@@ -0,0 +1,94 @@
+name: Publish
+
+on:
+ push:
+ branches:
+ - master
+
+jobs:
+ deploy:
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v2
+
+ - name: Set up Python 3.x
+ uses: actions/setup-python@v2
+ with:
+ # Semantic version range syntax or exact version of a Python version
+ python-version: '3.x'
+ # Optional - x64 or x86 architecture, defaults to x64
+ architecture: 'x64'
+
+ # You can test your matrix by printing the current Python version
+ - name: Display Python version
+ run: python -c "import sys; print(sys.version)"
+
+ - name: mdBook Action
+ uses: peaceiris/actions-mdbook@v1.1.11
+ with:
+ mdbook-version: '0.3.1'
+ # mdbook-version: 'latest'
+
+ - name: Remove cargo-config
+ run: rm -f .cargo/config
+
+ - name: Build docs
+ run: cargo doc
+
+ - name: Build books
+ run: |
+ langs=( en ru )
+ latest=0.5
+ vers=( 0.4.x )
+
+ # Create directories
+ td=$(mktemp -d)
+ mkdir -p $td/$latest/book/
+ cp -r target/doc $td/$latest/api
+
+ # sed fixes
+ sed 's|URL|rtfm/index.html|g' redirect.html > $td/$latest/api/index.html
+ sed 's|URL|0.5|g' redirect.html > $td/index.html
+ sed 's|URL|book/en|g' redirect.html > $td/$latest/index.html
+
+ # Build books
+ for lang in ${langs[@]}; do
+ ( cd book/$lang && mdbook build )
+ cp -r book/$lang/book $td/$latest/book/$lang
+ cp LICENSE-* $td/$latest/book/$lang/
+ done
+
+ # Build older versions
+ root=$(pwd)
+ for ver in ${vers[@]}; do
+ prefix=${ver%.*}
+
+ mkdir -p $td/$prefix/book
+ src=$(mktemp -d)
+ curl -L https://github.com/rtfm-rs/cortex-m-rtfm/archive/v${ver}.tar.gz | tar xz --strip-components 1 -C $src
+
+ pushd $src
+ rm -f .cargo/config
+ cargo doc || cargo doc --features timer-queue
+ cp -r target/doc $td/$prefix/api
+ sed 's|URL|rtfm/index.html|g' $root/redirect.html > $td/$prefix/api/index.html
+ for lang in ${langs[@]}; do
+ ( cd book/$lang && mdbook build )
+ cp -r book/$lang/book $td/$prefix/book/$lang
+ cp LICENSE-* $td/$prefix/book/$lang/
+ done
+ sed 's|URL|book/en|g' $root/redirect.html > $td/$prefix/index.html
+ popd
+
+ rm -rf $src
+ done
+
+ # Forward CNAME file
+ cp CNAME $td/
+ mv $td/ bookstodeploy
+
+ - name: Deploy
+ uses: peaceiris/actions-gh-pages@v3
+ with:
+ github_token: ${{ secrets.GITHUB_TOKEN }}
+ publish_dir: ./bookstodeploy
diff --git a/.travis.yml b/.travis.yml
index 1bb25051..c2651307 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -37,6 +37,7 @@ before_install:
install:
- bash ci/install.sh
- export PATH="$PATH:$PWD/qemu"
+ - export PATH="$PATH:$PWD/mdbook-bin"
script:
- bash ci/script.sh
diff --git a/ci/install.sh b/ci/install.sh
index 54701224..624efd87 100644
--- a/ci/install.sh
+++ b/ci/install.sh
@@ -15,7 +15,6 @@ main() {
fi
rustup target add $TARGET
-
mkdir qemu
curl -L https://github.com/japaric/qemu-bin/raw/master/14.04/qemu-system-arm-2.12.0 > qemu/qemu-system-arm
chmod +x qemu/qemu-system-arm
@@ -23,7 +22,13 @@ main() {
pip install linkchecker --user
fi
- install_crate mdbook 0.3.1
+ # Download binary mdbook and add to path
+ curl -L https://github.com/rust-lang/mdBook/releases/download/v0.3.1/mdbook-v0.3.1-x86_64-unknown-linux-gnu.tar.gz > mdbook.tar.gz
+ tar -xf mdbook.tar.gz
+ mkdir -p mdbook-bin
+ mv mdbook mdbook-bin/
+
+ #install_crate mdbook 0.3.1
}
main
diff --git a/ci/script.sh b/ci/script.sh
index 7b86e52a..c9a9c050 100644
--- a/ci/script.sh
+++ b/ci/script.sh
@@ -36,6 +36,12 @@ main() {
mkdir -p ci/builds
+ # Current MSRV cannot handle profiles, remove compilation optimisations
+ if [[ $TRAVIS_RUST_VERSION == 1.*.* ]]; then
+ echo "Removing optimisation profiles"
+ sed -i '/^\[profile.*build-override]$/,/^$/{/^#/!{/^$/!d}}' Cargo.toml
+ fi
+
if [ $T = x86_64-unknown-linux-gnu ]; then
if [[ $TRAVIS_RUST_VERSION == 1.*.* ]]; then
# test on a fixed version (MSRV) to avoid problems with changes in rustc diagnostics
diff --git a/examples/t-cfg-resources.rs b/examples/t-cfg-resources.rs
index 86b5ea20..63c41245 100644
--- a/examples/t-cfg-resources.rs
+++ b/examples/t-cfg-resources.rs
@@ -28,7 +28,7 @@ mod example {
// The feature needs to be applied everywhere x is defined or used
#[cfg(feature = "feature_x")]
x: 0,
- dummy: () // dummy such that we have at least one late resource
+ dummy: (), // dummy such that we have at least one late resource
}
}
diff --git a/macros/src/codegen.rs b/macros/src/codegen.rs
index 7d0d1220..60074849 100644
--- a/macros/src/codegen.rs
+++ b/macros/src/codegen.rs
@@ -39,7 +39,8 @@ pub fn app(app: &App, analysis: &Analysis, extra: &Extra) -> TokenStream2 {
let (const_app_init, root_init, user_init, call_init) =
init::codegen(core, app, analysis, extra);
- let (const_app_post_init, post_init_stmts) = post_init::codegen(core, &app, analysis, extra);
+ let (const_app_post_init, post_init_stmts) =
+ post_init::codegen(core, &app, analysis, extra);
let (const_app_idle, root_idle, user_idle, call_idle) =
idle::codegen(core, app, analysis, extra);
diff --git a/macros/src/codegen/init.rs b/macros/src/codegen/init.rs
index f7e4674e..9e5c4798 100644
--- a/macros/src/codegen/init.rs
+++ b/macros/src/codegen/init.rs
@@ -47,9 +47,9 @@ pub fn codegen(
let cfgs = &app.late_resources[name].cfgs;
quote!(
- #(#cfgs)*
- pub #name: #ty
- )
+ #(#cfgs)*
+ pub #name: #ty
+ )
})
.collect::<Vec<_>>()
})
diff --git a/macros/src/codegen/post_init.rs b/macros/src/codegen/post_init.rs
index 8578d5ac..b816e072 100644
--- a/macros/src/codegen/post_init.rs
+++ b/macros/src/codegen/post_init.rs
@@ -16,16 +16,15 @@ pub fn codegen(
// initialize late resources
if let Some(late_resources) = analysis.late_resources.get(&core) {
-
for name in late_resources {
// if it's live
let cfgs = app.late_resources[name].cfgs.clone();
if analysis.locations.get(name).is_some() {
// Need to also include the cfgs
stmts.push(quote!(
- #(#cfgs)*
- #name.as_mut_ptr().write(late.#name);
- ));
+ #(#cfgs)*
+ #name.as_mut_ptr().write(late.#name);
+ ));
}
}
}