Giter VIP home page Giter VIP logo

first-rust-competition's Introduction

FIRST Rust Competition

Build Status Crates.io Docs.rs

A monorepo for wpilib for programming FRC robots and cargo-frc for deploying said code. Currently a pre-alpha WIP.

Getting Started

Parts of this repository are designed to be compiled for a RoboRIO, the processor used in the FIRST Robotics Competition. To cross-compile your code and run Rust on your RoboRIO, follow the instructions in WPILib's README.

Examples can be found in wpilib-examples.

To deploy code you write using wpilib, use cargo-frc.

A small project template is available in quickstart.zip.

Other Rust Projects

If you want to go further with Rust development for FRC, check out these other community projects:

  • ctre-rs for functionality found in CTRE Phoenix.
  • nt-rs for using NetworkTables.
  • navx-rs for interfacing with Kauai Labs's gyroscope.

Building

Verify you can build wpilib, (see its README) then run make all. cargo-frc should build out of the box, but you should cargo install it to use it properly.

For a full list of build requirements, see the Dockerfile used for Travis CI.

License

The contents of this repository are distributed under the terms of both the MIT license and the Apache License (Version 2.0). By contributing, you agree to license your contribution under these terms.

See LICENSE-APACHE, LICENSE-MIT, for details.

first-rust-competition's People

Contributors

auscompgeek avatar ewpratten avatar inquisitivecrystal avatar jmeggitt avatar lytigas avatar redrield avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

first-rust-competition's Issues

Undefined References / Headers not loading properly?

Adams-MacBook-Pro:first-rust-competition kiwi$ sudo make all
Password:
cd cargo-frc; make all
cargo build
    Finished dev [unoptimized + debuginfo] target(s) in 0.19s
cargo clippy --all-targets --all-features -- -D warnings
    Finished dev [unoptimized + debuginfo] target(s) in 0.15s
cargo fmt -- --check
cd wpilib-sys; make load_headers
git submodule sync
Synchronizing submodule url for 'allwpilib'
git submodule update --init --recursive
cd allwpilib; ./gradlew :hal:halSharedLibrary -PreleaseBuild -PonlyAthena --console=plain
> Task :buildSrc:compileJava NO-SOURCE
> Task :buildSrc:compileGroovy UP-TO-DATE
> Task :buildSrc:processResources NO-SOURCE
> Task :buildSrc:classes UP-TO-DATE
> Task :buildSrc:jar UP-TO-DATE
> Task :buildSrc:assemble UP-TO-DATE
> Task :buildSrc:compileTestJava NO-SOURCE
> Task :buildSrc:compileTestGroovy NO-SOURCE
> Task :buildSrc:processTestResources NO-SOURCE
> Task :buildSrc:testClasses UP-TO-DATE
> Task :buildSrc:test NO-SOURCE
> Task :buildSrc:check UP-TO-DATE
> Task :buildSrc:build UP-TO-DATE

> Configure project :simulation:gz_msgs
Protobuf is not available. (pkg-config --modversion protobuf failed)
Skipping gz_msgs.

> Configure project :simulation:frc_gazebo_plugins
Gazebo development files are not available. (pkg-config --modversion gazebo failed)
Skipping FRC Plugins.

> Configure project :simulation:halsim_gazebo
Gazebo development files are not available. (pkg-config --modversion gazebo failed)
Skipping FRC Plugins.

> Task :extractEmbeddedJni UP-TO-DATE
> Task :hal:generateUsageReporting UP-TO-DATE
> Task :wpiutil:compileJava UP-TO-DATE
> Task :wpiutil:processResources NO-SOURCE
> Task :wpiutil:classes UP-TO-DATE
> Task :wpiutil:jar UP-TO-DATE
> Task :hal:compileJava UP-TO-DATE
> Task :hal:generateAthenaSimFiles UP-TO-DATE
> Task :hal:compileHalBaseStaticLibraryHalBaseCpp UP-TO-DATE
> Task :hal:compileHalBaseStaticLibraryHalBaseStaticLibraryAthenaCpp UP-TO-DATE
> Task :hal:compileHalSharedLibraryHalCpp UP-TO-DATE
> Task :wpiutil:compileWpiutilBaseStaticLibraryWpiutilBaseCpp UP-TO-DATE
> Task :wpiutil:compileWpiutilBaseStaticLibraryWpiutilBaseStaticLibraryLibuvCpp UP-TO-DATE
> Task :wpiutil:compileWpiutilBaseStaticLibraryWpiutilBaseStaticLibraryLibuvLinuxCpp UP-TO-DATE
> Task :wpiutil:compileWpiutilBaseStaticLibraryWpiutilBaseStaticLibraryLibuvUnixCpp UP-TO-DATE
> Task :wpiutil:compileWpiutilSharedLibraryWpiutilCpp UP-TO-DATE
> Task :wpiutil:linkWpiutilSharedLibrary UP-TO-DATE
> Task :wpiutil:wpiutilSharedLibrary UP-TO-DATE
> Task :hal:linkHalSharedLibrary UP-TO-DATE
> Task :hal:halSharedLibrary UP-TO-DATE

BUILD SUCCESSFUL in 2s
16 actionable tasks: 16 up-to-date

Publishing build scan...
https://gradle.com/s/i7lxgd5xxucw4

cp -R ./allwpilib/hal/src/main/native/include/hal ./include/
cp -R ./allwpilib/hal/build/generated/headers/hal ./include/
cp -R ./allwpilib/wpiutil/src/main/native/include/* ./include/
cp -R ./allwpilib/ntcore/src/main/native/include/* ./include/
cp -R ./allwpilib/build/tmp/expandedArchives/chipobject*headers*/* ./include
cp -R ./allwpilib/build/tmp/expandedArchives/netcomm*headers*/* ./include
# TODO(lytigas) move this functionality into the python script
# TODO(lytigas) find a better method for selecting the include dir than the one without version information
# which is marked currently by the existence of globs.h
# gnu/**/*.h
python load-gcc-arm-headers.py | xargs -I '{}' find '{}' -type d -name "gnu" | xargs -I '{}' cp -R '{}' ./include/
# sys/**/*.h
python load-gcc-arm-headers.py | xargs -I '{}' find '{}' -type d -name "sys" | xargs -I '{}' cp -R '{}' ./include/
# *.h in one of the include dirs that is marked by glob.h
python load-gcc-arm-headers.py | xargs -I '{}' find '{}' -type f -name "glob.h" | xargs dirname | xargs -I '{}' bash -c 'cp -R {} ./include/'
# same folder us a above but its the bits directory
python load-gcc-arm-headers.py | xargs -I '{}' find '{}' -type f -name "glob.h" | xargs dirname | xargs -I '{}' cp -R '{}/bits' ./include/
# stddef.h
python load-gcc-arm-headers.py | xargs -I '{}' find '{}' -type f -path "*/include/stddef.h" | xargs -I '{}' cp -R '{}' ./include/
cd hal-gen; make all
cargo run
    Finished dev [unoptimized + debuginfo] target(s) in 0.20s
     Running `/Users/kiwi/Documents/first-rust-competition/target/debug/hal-gen`
builder_args: ["/Users/kiwi/Documents/first-rust-competition/hal-gen/../wpilib-sys/HAL_Wrapper.h", "--rust-target", "1.21", "--constified-enum-module", "*", "--with-derive-default", "--generate", "functions,types,vars,methods,constructors,destructors", "--whitelist-function", "HAL_[A-Za-z0-9]+", "--whitelist-type", "HAL_[A-Za-z0-9]+", "--whitelist-type", ".*tInstances", "--whitelist-type", ".*tResourceType", "--whitelist-var", "HAL_[A-Za-z0-9]+", "--", "-I/Users/kiwi/Documents/first-rust-competition/hal-gen/../wpilib-sys/include", "-x", "c++", "-nostdinc", "-nostdinc++", "-std=c++14", "--no-rustfmt-bindings"]
warning: argument unused during compilation: '-nostdinc++' [-Wunused-command-line-argument], err: false
/Users/kiwi/Documents/first-rust-competition/hal-gen/../wpilib-sys/include/sys/cdefs.h:285:10: warning: '__nonnull' macro redefined [-Wmacro-redefined], err: false

cargo clippy --all-targets --all-features -- -D warnings
    Finished dev [unoptimized + debuginfo] target(s) in 0.13s
cargo fmt -- --check
cd wpilib-sys; make all
git submodule sync
Synchronizing submodule url for 'allwpilib'
git submodule update --init --recursive
cd allwpilib; ./gradlew :hal:halSharedLibrary -PreleaseBuild -PonlyAthena --console=plain
> Task :buildSrc:compileJava NO-SOURCE
> Task :buildSrc:compileGroovy UP-TO-DATE
> Task :buildSrc:processResources NO-SOURCE
> Task :buildSrc:classes UP-TO-DATE
> Task :buildSrc:jar UP-TO-DATE
> Task :buildSrc:assemble UP-TO-DATE
> Task :buildSrc:compileTestJava NO-SOURCE
> Task :buildSrc:compileTestGroovy NO-SOURCE
> Task :buildSrc:processTestResources NO-SOURCE
> Task :buildSrc:testClasses UP-TO-DATE
> Task :buildSrc:test NO-SOURCE
> Task :buildSrc:check UP-TO-DATE
> Task :buildSrc:build UP-TO-DATE

> Configure project :simulation:gz_msgs
Protobuf is not available. (pkg-config --modversion protobuf failed)
Skipping gz_msgs.

> Configure project :simulation:frc_gazebo_plugins
Gazebo development files are not available. (pkg-config --modversion gazebo failed)
Skipping FRC Plugins.

> Configure project :simulation:halsim_gazebo
Gazebo development files are not available. (pkg-config --modversion gazebo failed)
Skipping FRC Plugins.

> Task :extractEmbeddedJni UP-TO-DATE
> Task :hal:generateUsageReporting UP-TO-DATE
> Task :wpiutil:compileJava UP-TO-DATE
> Task :wpiutil:processResources NO-SOURCE
> Task :wpiutil:classes UP-TO-DATE
> Task :wpiutil:jar UP-TO-DATE
> Task :hal:compileJava UP-TO-DATE
> Task :hal:generateAthenaSimFiles UP-TO-DATE
> Task :hal:compileHalBaseStaticLibraryHalBaseCpp UP-TO-DATE
> Task :hal:compileHalBaseStaticLibraryHalBaseStaticLibraryAthenaCpp UP-TO-DATE
> Task :hal:compileHalSharedLibraryHalCpp UP-TO-DATE
> Task :wpiutil:compileWpiutilBaseStaticLibraryWpiutilBaseCpp UP-TO-DATE
> Task :wpiutil:compileWpiutilBaseStaticLibraryWpiutilBaseStaticLibraryLibuvCpp UP-TO-DATE
> Task :wpiutil:compileWpiutilBaseStaticLibraryWpiutilBaseStaticLibraryLibuvLinuxCpp UP-TO-DATE
> Task :wpiutil:compileWpiutilBaseStaticLibraryWpiutilBaseStaticLibraryLibuvUnixCpp UP-TO-DATE
> Task :wpiutil:compileWpiutilSharedLibraryWpiutilCpp UP-TO-DATE
> Task :wpiutil:linkWpiutilSharedLibrary UP-TO-DATE
> Task :wpiutil:wpiutilSharedLibrary UP-TO-DATE
> Task :hal:linkHalSharedLibrary UP-TO-DATE
> Task :hal:halSharedLibrary UP-TO-DATE

BUILD SUCCESSFUL in 1s
16 actionable tasks: 16 up-to-date

Publishing build scan...
https://gradle.com/s/63ojamugzdd4q

cp -R ./allwpilib/hal/src/main/native/include/hal ./include/
cp -R ./allwpilib/hal/build/generated/headers/hal ./include/
cp -R ./allwpilib/wpiutil/src/main/native/include/* ./include/
cp -R ./allwpilib/ntcore/src/main/native/include/* ./include/
cp -R ./allwpilib/build/tmp/expandedArchives/chipobject*headers*/* ./include
cp -R ./allwpilib/build/tmp/expandedArchives/netcomm*headers*/* ./include
# TODO(lytigas) move this functionality into the python script
# TODO(lytigas) find a better method for selecting the include dir than the one without version information
# which is marked currently by the existence of globs.h
# gnu/**/*.h
python load-gcc-arm-headers.py | xargs -I '{}' find '{}' -type d -name "gnu" | xargs -I '{}' cp -R '{}' ./include/
# sys/**/*.h
python load-gcc-arm-headers.py | xargs -I '{}' find '{}' -type d -name "sys" | xargs -I '{}' cp -R '{}' ./include/
# *.h in one of the include dirs that is marked by glob.h
python load-gcc-arm-headers.py | xargs -I '{}' find '{}' -type f -name "glob.h" | xargs dirname | xargs -I '{}' bash -c 'cp -R {} ./include/'
# same folder us a above but its the bits directory
python load-gcc-arm-headers.py | xargs -I '{}' find '{}' -type f -name "glob.h" | xargs dirname | xargs -I '{}' cp -R '{}/bits' ./include/
# stddef.h
python load-gcc-arm-headers.py | xargs -I '{}' find '{}' -type f -path "*/include/stddef.h" | xargs -I '{}' cp -R '{}' ./include/
cp ./allwpilib/hal/build/libs/hal/shared/*.so ./lib/
cp ./allwpilib/wpiutil/build/libs/wpiutil/shared/*.so ./lib/
cp ./allwpilib/build/tmp/expandedArchives/chipobject*/linux/athena/shared/* ./lib/
cp ./allwpilib/build/tmp/expandedArchives/netcomm*/linux/athena/shared/* ./lib/
# strip version tags
rename -f 's/.so.*/.so/' ./lib/*
echo "pub static WPILIB_COMMIT_HASH: &str = \"88b93c220ed53f5ab669cdaed1ed33b5017e8ebf\";" > src/version.rs
cargo build
   Compiling wpilib-sys v0.3.1 (/Users/kiwi/Documents/first-rust-competition/wpilib-sys)
    Finished dev [unoptimized + debuginfo] target(s) in 1.13s
cargo clippy --all-targets --all-features -- -D warnings
   Compiling wpilib-sys v0.3.1 (/Users/kiwi/Documents/first-rust-competition/wpilib-sys)
    Finished dev [unoptimized + debuginfo] target(s) in 1.90s
cargo fmt -- --check
cd wpilib; make all
cargo build --features dev
   Compiling wpilib-sys v0.3.1 (/Users/kiwi/Documents/first-rust-competition/wpilib-sys)
   Compiling wpilib v0.3.1 (/Users/kiwi/Documents/first-rust-competition/wpilib)
    Finished dev [unoptimized + debuginfo] target(s) in 1.62s
cargo clippy --all-targets --all-features -- -D warnings
   Compiling wpilib-sys v0.3.1 (/Users/kiwi/Documents/first-rust-competition/wpilib-sys)
    Checking wpilib v0.3.1 (/Users/kiwi/Documents/first-rust-competition/wpilib)
    Finished dev [unoptimized + debuginfo] target(s) in 2.91s
cargo fmt -- --check
cd wpilib-examples; make all
cargo build --all-targets --verbose
       Fresh lazy_static v1.2.0
   Compiling wpilib-sys v0.3.1 (/Users/kiwi/Documents/first-rust-competition/wpilib-sys)
     Running `/Users/kiwi/Documents/first-rust-competition/target/debug/build/wpilib-sys-bd4c9550a56ad8df/build-script-build`
     Running `rustc --crate-name wpilib_sys wpilib-sys/src/lib.rs --color always --crate-type lib --emit=dep-info,link -C debuginfo=2 -C metadata=24cd81f4391692af -C extra-filename=-24cd81f4391692af --out-dir /Users/kiwi/Documents/first-rust-competition/target/arm-unknown-linux-gnueabi/debug/deps --target arm-unknown-linux-gnueabi -C linker=/usr/local/bin/arm-frc-linux-gnueabi-g++ -C incremental=/Users/kiwi/Documents/first-rust-competition/target/arm-unknown-linux-gnueabi/debug/incremental -L dependency=/Users/kiwi/Documents/first-rust-competition/target/arm-unknown-linux-gnueabi/debug/deps -L dependency=/Users/kiwi/Documents/first-rust-competition/target/debug/deps -L native=/Users/kiwi/Documents/first-rust-competition/wpilib-sys/lib -l dylib=FRC_NetworkCommunication -l dylib=NiFpga -l dylib=NiFpgaLv -l dylib=niriodevenum -l dylib=niriosession -l dylib=NiRioSrv -l dylib=RoboRIO_FRC_ChipObject -l dylib=visa -l dylib=wpiHal -l dylib=wpiutil`
   Compiling wpilib v0.3.1 (/Users/kiwi/Documents/first-rust-competition/wpilib)
     Running `rustc --crate-name wpilib wpilib/src/lib.rs --color always --crate-type lib --emit=dep-info,link -C debuginfo=2 -C metadata=2af9b9d353e16ef8 -C extra-filename=-2af9b9d353e16ef8 --out-dir /Users/kiwi/Documents/first-rust-competition/target/arm-unknown-linux-gnueabi/debug/deps --target arm-unknown-linux-gnueabi -C linker=/usr/local/bin/arm-frc-linux-gnueabi-g++ -C incremental=/Users/kiwi/Documents/first-rust-competition/target/arm-unknown-linux-gnueabi/debug/incremental -L dependency=/Users/kiwi/Documents/first-rust-competition/target/arm-unknown-linux-gnueabi/debug/deps -L dependency=/Users/kiwi/Documents/first-rust-competition/target/debug/deps --extern lazy_static=/Users/kiwi/Documents/first-rust-competition/target/arm-unknown-linux-gnueabi/debug/deps/liblazy_static-3c0df1f69f914911.rlib --extern wpilib_sys=/Users/kiwi/Documents/first-rust-competition/target/arm-unknown-linux-gnueabi/debug/deps/libwpilib_sys-24cd81f4391692af.rlib -L native=/Users/kiwi/Documents/first-rust-competition/wpilib-sys/lib`
   Compiling wpilib-examples v0.0.0 (/Users/kiwi/Documents/first-rust-competition/wpilib-examples)
     Running `rustc --crate-name custom_usage wpilib-examples/./custom_usage.rs --color always --crate-type bin --emit=dep-info,link -C debuginfo=2 -C metadata=48c79785af498743 -C extra-filename=-48c79785af498743 --out-dir /Users/kiwi/Documents/first-rust-competition/target/arm-unknown-linux-gnueabi/debug/deps --target arm-unknown-linux-gnueabi -C linker=/usr/local/bin/arm-frc-linux-gnueabi-g++ -C incremental=/Users/kiwi/Documents/first-rust-competition/target/arm-unknown-linux-gnueabi/debug/incremental -L dependency=/Users/kiwi/Documents/first-rust-competition/target/arm-unknown-linux-gnueabi/debug/deps -L dependency=/Users/kiwi/Documents/first-rust-competition/target/debug/deps --extern wpilib=/Users/kiwi/Documents/first-rust-competition/target/arm-unknown-linux-gnueabi/debug/deps/libwpilib-2af9b9d353e16ef8.rlib --extern wpilib_sys=/Users/kiwi/Documents/first-rust-competition/target/arm-unknown-linux-gnueabi/debug/deps/libwpilib_sys-24cd81f4391692af.rlib -L native=/Users/kiwi/Documents/first-rust-competition/wpilib-sys/lib`
     Running `rustc --crate-name pdp wpilib-examples/./pdp.rs --color always --crate-type bin --emit=dep-info,link -C debuginfo=2 -C metadata=c2579662fdff03f6 -C extra-filename=-c2579662fdff03f6 --out-dir /Users/kiwi/Documents/first-rust-competition/target/arm-unknown-linux-gnueabi/debug/deps --target arm-unknown-linux-gnueabi -C linker=/usr/local/bin/arm-frc-linux-gnueabi-g++ -C incremental=/Users/kiwi/Documents/first-rust-competition/target/arm-unknown-linux-gnueabi/debug/incremental -L dependency=/Users/kiwi/Documents/first-rust-competition/target/arm-unknown-linux-gnueabi/debug/deps -L dependency=/Users/kiwi/Documents/first-rust-competition/target/debug/deps --extern wpilib=/Users/kiwi/Documents/first-rust-competition/target/arm-unknown-linux-gnueabi/debug/deps/libwpilib-2af9b9d353e16ef8.rlib --extern wpilib_sys=/Users/kiwi/Documents/first-rust-competition/target/arm-unknown-linux-gnueabi/debug/deps/libwpilib_sys-24cd81f4391692af.rlib -L native=/Users/kiwi/Documents/first-rust-competition/wpilib-sys/lib`
     Running `rustc --crate-name digital_out wpilib-examples/./digital_out.rs --color always --crate-type bin --emit=dep-info,link -C debuginfo=2 -C metadata=47ec74f78fd1b88a -C extra-filename=-47ec74f78fd1b88a --out-dir /Users/kiwi/Documents/first-rust-competition/target/arm-unknown-linux-gnueabi/debug/deps --target arm-unknown-linux-gnueabi -C linker=/usr/local/bin/arm-frc-linux-gnueabi-g++ -C incremental=/Users/kiwi/Documents/first-rust-competition/target/arm-unknown-linux-gnueabi/debug/incremental -L dependency=/Users/kiwi/Documents/first-rust-competition/target/arm-unknown-linux-gnueabi/debug/deps -L dependency=/Users/kiwi/Documents/first-rust-competition/target/debug/deps --extern wpilib=/Users/kiwi/Documents/first-rust-competition/target/arm-unknown-linux-gnueabi/debug/deps/libwpilib-2af9b9d353e16ef8.rlib --extern wpilib_sys=/Users/kiwi/Documents/first-rust-competition/target/arm-unknown-linux-gnueabi/debug/deps/libwpilib_sys-24cd81f4391692af.rlib -L native=/Users/kiwi/Documents/first-rust-competition/wpilib-sys/lib`
     Running `rustc --crate-name custom_usage wpilib-examples/./custom_usage.rs --color always --emit=dep-info,link -C debuginfo=2 --test -C metadata=26d9cf5c26a413dc -C extra-filename=-26d9cf5c26a413dc --out-dir /Users/kiwi/Documents/first-rust-competition/target/arm-unknown-linux-gnueabi/debug/deps --target arm-unknown-linux-gnueabi -C linker=/usr/local/bin/arm-frc-linux-gnueabi-g++ -C incremental=/Users/kiwi/Documents/first-rust-competition/target/arm-unknown-linux-gnueabi/debug/incremental -L dependency=/Users/kiwi/Documents/first-rust-competition/target/arm-unknown-linux-gnueabi/debug/deps -L dependency=/Users/kiwi/Documents/first-rust-competition/target/debug/deps --extern wpilib=/Users/kiwi/Documents/first-rust-competition/target/arm-unknown-linux-gnueabi/debug/deps/libwpilib-2af9b9d353e16ef8.rlib --extern wpilib_sys=/Users/kiwi/Documents/first-rust-competition/target/arm-unknown-linux-gnueabi/debug/deps/libwpilib_sys-24cd81f4391692af.rlib -L native=/Users/kiwi/Documents/first-rust-competition/wpilib-sys/lib`
error: linking with `/usr/local/bin/arm-frc-linux-gnueabi-g++` failed: exit code: 1
  |
  = note: "/usr/local/bin/arm-frc-linux-gnueabi-g++" "-Wl,--as-needed" "-Wl,-z,noexecstack" "-L" "/Users/kiwi/.rustup/toolchains/nightly-x86_64-apple-darwin/lib/rustlib/arm-unknown-linux-gnueabi/lib" "/Users/kiwi/Documents/first-rust-competition/target/arm-unknown-linux-gnueabi/debug/deps/custom_usage-48c79785af498743.1jdh8sjo3id0cst1.rcgu.o" "/Users/kiwi/Documents/first-rust-competition/target/arm-unknown-linux-gnueabi/debug/deps/custom_usage-48c79785af498743.28bnztkccojrivag.rcgu.o" "/Users/kiwi/Documents/first-rust-competition/target/arm-unknown-linux-gnueabi/debug/deps/custom_usage-48c79785af498743.2oz06fqr0a0kcstn.rcgu.o" "/Users/kiwi/Documents/first-rust-competition/target/arm-unknown-linux-gnueabi/debug/deps/custom_usage-48c79785af498743.3nxds3wxsjffhsqh.rcgu.o" "/Users/kiwi/Documents/first-rust-competition/target/arm-unknown-linux-gnueabi/debug/deps/custom_usage-48c79785af498743.3rxm3k378l06gtji.rcgu.o" "/Users/kiwi/Documents/first-rust-competition/target/arm-unknown-linux-gnueabi/debug/deps/custom_usage-48c79785af498743.3vf4xi54ckgk4xt0.rcgu.o" "/Users/kiwi/Documents/first-rust-competition/target/arm-unknown-linux-gnueabi/debug/deps/custom_usage-48c79785af498743.3zc8717cu8c08q6z.rcgu.o" "/Users/kiwi/Documents/first-rust-competition/target/arm-unknown-linux-gnueabi/debug/deps/custom_usage-48c79785af498743.4k54xpqcam0a7qi4.rcgu.o" "/Users/kiwi/Documents/first-rust-competition/target/arm-unknown-linux-gnueabi/debug/deps/custom_usage-48c79785af498743.fbzlrjgu3ketsqo.rcgu.o" "/Users/kiwi/Documents/first-rust-competition/target/arm-unknown-linux-gnueabi/debug/deps/custom_usage-48c79785af498743.k93sqfhb1248oa5.rcgu.o" "/Users/kiwi/Documents/first-rust-competition/target/arm-unknown-linux-gnueabi/debug/deps/custom_usage-48c79785af498743.owdbc5lfy8zbe6j.rcgu.o" "/Users/kiwi/Documents/first-rust-competition/target/arm-unknown-linux-gnueabi/debug/deps/custom_usage-48c79785af498743.s3sprxo23re4ea8.rcgu.o" "-o" "/Users/kiwi/Documents/first-rust-competition/target/arm-unknown-linux-gnueabi/debug/deps/custom_usage-48c79785af498743" "/Users/kiwi/Documents/first-rust-competition/target/arm-unknown-linux-gnueabi/debug/deps/custom_usage-48c79785af498743.169fiulglw2s20h.rcgu.o" "-Wl,--gc-sections" "-pie" "-Wl,-zrelro" "-Wl,-znow" "-nodefaultlibs" "-L" "/Users/kiwi/Documents/first-rust-competition/target/arm-unknown-linux-gnueabi/debug/deps" "-L" "/Users/kiwi/Documents/first-rust-competition/target/debug/deps" "-L" "/Users/kiwi/Documents/first-rust-competition/wpilib-sys/lib" "-L" "/Users/kiwi/.rustup/toolchains/nightly-x86_64-apple-darwin/lib/rustlib/arm-unknown-linux-gnueabi/lib" "-Wl,-Bstatic" "/Users/kiwi/Documents/first-rust-competition/target/arm-unknown-linux-gnueabi/debug/deps/libwpilib_sys-24cd81f4391692af.rlib" "-Wl,--start-group" "/Users/kiwi/.rustup/toolchains/nightly-x86_64-apple-darwin/lib/rustlib/arm-unknown-linux-gnueabi/lib/libstd-e949216050e5dd32.rlib" "/Users/kiwi/.rustup/toolchains/nightly-x86_64-apple-darwin/lib/rustlib/arm-unknown-linux-gnueabi/lib/libpanic_unwind-9577d42f861f1e76.rlib" "/Users/kiwi/.rustup/toolchains/nightly-x86_64-apple-darwin/lib/rustlib/arm-unknown-linux-gnueabi/lib/libbacktrace_sys-abe124e4db7f0025.rlib" "/Users/kiwi/.rustup/toolchains/nightly-x86_64-apple-darwin/lib/rustlib/arm-unknown-linux-gnueabi/lib/libunwind-73d4d2ffd052f57b.rlib" "/Users/kiwi/.rustup/toolchains/nightly-x86_64-apple-darwin/lib/rustlib/arm-unknown-linux-gnueabi/lib/librustc_demangle-d8ad22fffdf7e00c.rlib" "/Users/kiwi/.rustup/toolchains/nightly-x86_64-apple-darwin/lib/rustlib/arm-unknown-linux-gnueabi/lib/liblibc-5ee748fbedb546bd.rlib" "/Users/kiwi/.rustup/toolchains/nightly-x86_64-apple-darwin/lib/rustlib/arm-unknown-linux-gnueabi/lib/liballoc-169a3865e179d184.rlib" "/Users/kiwi/.rustup/toolchains/nightly-x86_64-apple-darwin/lib/rustlib/arm-unknown-linux-gnueabi/lib/librustc_std_workspace_core-8e686161a71315eb.rlib" "/Users/kiwi/.rustup/toolchains/nightly-x86_64-apple-darwin/lib/rustlib/arm-unknown-linux-gnueabi/lib/libcore-4a5ec7fee74a23c6.rlib" "-Wl,--end-group" "/Users/kiwi/.rustup/toolchains/nightly-x86_64-apple-darwin/lib/rustlib/arm-unknown-linux-gnueabi/lib/libcompiler_builtins-b815ad8c6eec838c.rlib" "-Wl,-Bdynamic" "-lFRC_NetworkCommunication" "-lNiFpga" "-lNiFpgaLv" "-lniriodevenum" "-lniriosession" "-lNiRioSrv" "-lRoboRIO_FRC_ChipObject" "-lvisa" "-lwpiHal" "-lwpiutil" "-ldl" "-lrt" "-lpthread" "-lgcc_s" "-lc" "-lm" "-lrt" "-lpthread" "-lutil" "-lutil"
  = note: /Users/kiwi/Documents/first-rust-competition/target/arm-unknown-linux-gnueabi/debug/deps/custom_usage-48c79785af498743.3nxds3wxsjffhsqh.rcgu.o: In function `wpilib_sys::usage::report_usage_extras':
          /Users/kiwi/Documents/first-rust-competition/wpilib-sys/src/usage.rs:114: undefined reference to `_HAL_Report'
          /Users/kiwi/Documents/first-rust-competition/target/arm-unknown-linux-gnueabi/debug/deps/libwpilib_sys-24cd81f4391692af.rlib(wpilib_sys-24cd81f4391692af.50oogkxde27o0gw5.rcgu.o): In function `wpilib_sys::usage::report_usage_context':
          /Users/kiwi/Documents/first-rust-competition/wpilib-sys/src/usage.rs:97: undefined reference to `_HAL_Report'
          collect2: error: ld returned 1 exit status
          

error: aborting due to previous error

error: Could not compile `wpilib-examples`.

Caused by:
  process didn't exit successfully: `rustc --crate-name custom_usage wpilib-examples/./custom_usage.rs --color always --crate-type bin --emit=dep-info,link -C debuginfo=2 -C metadata=48c79785af498743 -C extra-filename=-48c79785af498743 --out-dir /Users/kiwi/Documents/first-rust-competition/target/arm-unknown-linux-gnueabi/debug/deps --target arm-unknown-linux-gnueabi -C linker=/usr/local/bin/arm-frc-linux-gnueabi-g++ -C incremental=/Users/kiwi/Documents/first-rust-competition/target/arm-unknown-linux-gnueabi/debug/incremental -L dependency=/Users/kiwi/Documents/first-rust-competition/target/arm-unknown-linux-gnueabi/debug/deps -L dependency=/Users/kiwi/Documents/first-rust-competition/target/debug/deps --extern wpilib=/Users/kiwi/Documents/first-rust-competition/target/arm-unknown-linux-gnueabi/debug/deps/libwpilib-2af9b9d353e16ef8.rlib --extern wpilib_sys=/Users/kiwi/Documents/first-rust-competition/target/arm-unknown-linux-gnueabi/debug/deps/libwpilib_sys-24cd81f4391692af.rlib -L native=/Users/kiwi/Documents/first-rust-competition/wpilib-sys/lib` (exit code: 1)
warning: build failed, waiting for other jobs to finish...
error: linking with `/usr/local/bin/arm-frc-linux-gnueabi-g++` failed: exit code: 1
  |
  = note: "/usr/local/bin/arm-frc-linux-gnueabi-g++" "-Wl,--as-needed" "-Wl,-z,noexecstack" "-L" "/Users/kiwi/.rustup/toolchains/nightly-x86_64-apple-darwin/lib/rustlib/arm-unknown-linux-gnueabi/lib" "/Users/kiwi/Documents/first-rust-competition/target/arm-unknown-linux-gnueabi/debug/deps/pdp-c2579662fdff03f6.1hb490iqoy0vfi8j.rcgu.o" "/Users/kiwi/Documents/first-rust-competition/target/arm-unknown-linux-gnueabi/debug/deps/pdp-c2579662fdff03f6.1iezk6hi7f95hf2c.rcgu.o" "/Users/kiwi/Documents/first-rust-competition/target/arm-unknown-linux-gnueabi/debug/deps/pdp-c2579662fdff03f6.2mlpnsy3nymnu249.rcgu.o" "/Users/kiwi/Documents/first-rust-competition/target/arm-unknown-linux-gnueabi/debug/deps/pdp-c2579662fdff03f6.3qymfkt6c3pjxk18.rcgu.o" "/Users/kiwi/Documents/first-rust-competition/target/arm-unknown-linux-gnueabi/debug/deps/pdp-c2579662fdff03f6.47dfzk20ijjftaeb.rcgu.o" "/Users/kiwi/Documents/first-rust-competition/target/arm-unknown-linux-gnueabi/debug/deps/pdp-c2579662fdff03f6.4m53ywgxkur9s5q4.rcgu.o" "/Users/kiwi/Documents/first-rust-competition/target/arm-unknown-linux-gnueabi/debug/deps/pdp-c2579662fdff03f6.578v67tr8rt42s3w.rcgu.o" "/Users/kiwi/Documents/first-rust-competition/target/arm-unknown-linux-gnueabi/debug/deps/pdp-c2579662fdff03f6.5bexsb27vr79psoo.rcgu.o" "/Users/kiwi/Documents/first-rust-competition/target/arm-unknown-linux-gnueabi/debug/deps/pdp-c2579662fdff03f6.j2o7q4pr6qqvyzw.rcgu.o" "-o" "/Users/kiwi/Documents/first-rust-competition/target/arm-unknown-linux-gnueabi/debug/deps/pdp-c2579662fdff03f6" "/Users/kiwi/Documents/first-rust-competition/target/arm-unknown-linux-gnueabi/debug/deps/pdp-c2579662fdff03f6.3sk7tf983s0gx5zg.rcgu.o" "-Wl,--gc-sections" "-pie" "-Wl,-zrelro" "-Wl,-znow" "-nodefaultlibs" "-L" "/Users/kiwi/Documents/first-rust-competition/target/arm-unknown-linux-gnueabi/debug/deps" "-L" "/Users/kiwi/Documents/first-rust-competition/target/debug/deps" "-L" "/Users/kiwi/Documents/first-rust-competition/wpilib-sys/lib" "-L" "/Users/kiwi/.rustup/toolchains/nightly-x86_64-apple-darwin/lib/rustlib/arm-unknown-linux-gnueabi/lib" "-Wl,-Bstatic" "/Users/kiwi/Documents/first-rust-competition/target/arm-unknown-linux-gnueabi/debug/deps/libwpilib-2af9b9d353e16ef8.rlib" "/Users/kiwi/Documents/first-rust-competition/target/arm-unknown-linux-gnueabi/debug/deps/libwpilib_sys-24cd81f4391692af.rlib" "/Users/kiwi/Documents/first-rust-competition/target/arm-unknown-linux-gnueabi/debug/deps/liblazy_static-3c0df1f69f914911.rlib" "-Wl,--start-group" "/Users/kiwi/.rustup/toolchains/nightly-x86_64-apple-darwin/lib/rustlib/arm-unknown-linux-gnueabi/lib/libstd-e949216050e5dd32.rlib" "/Users/kiwi/.rustup/toolchains/nightly-x86_64-apple-darwin/lib/rustlib/arm-unknown-linux-gnueabi/lib/libpanic_unwind-9577d42f861f1e76.rlib" "/Users/kiwi/.rustup/toolchains/nightly-x86_64-apple-darwin/lib/rustlib/arm-unknown-linux-gnueabi/lib/libbacktrace_sys-abe124e4db7f0025.rlib" "/Users/kiwi/.rustup/toolchains/nightly-x86_64-apple-darwin/lib/rustlib/arm-unknown-linux-gnueabi/lib/libunwind-73d4d2ffd052f57b.rlib" "/Users/kiwi/.rustup/toolchains/nightly-x86_64-apple-darwin/lib/rustlib/arm-unknown-linux-gnueabi/lib/librustc_demangle-d8ad22fffdf7e00c.rlib" "/Users/kiwi/.rustup/toolchains/nightly-x86_64-apple-darwin/lib/rustlib/arm-unknown-linux-gnueabi/lib/liblibc-5ee748fbedb546bd.rlib" "/Users/kiwi/.rustup/toolchains/nightly-x86_64-apple-darwin/lib/rustlib/arm-unknown-linux-gnueabi/lib/liballoc-169a3865e179d184.rlib" "/Users/kiwi/.rustup/toolchains/nightly-x86_64-apple-darwin/lib/rustlib/arm-unknown-linux-gnueabi/lib/librustc_std_workspace_core-8e686161a71315eb.rlib" "/Users/kiwi/.rustup/toolchains/nightly-x86_64-apple-darwin/lib/rustlib/arm-unknown-linux-gnueabi/lib/libcore-4a5ec7fee74a23c6.rlib" "-Wl,--end-group" "/Users/kiwi/.rustup/toolchains/nightly-x86_64-apple-darwin/lib/rustlib/arm-unknown-linux-gnueabi/lib/libcompiler_builtins-b815ad8c6eec838c.rlib" "-Wl,-Bdynamic" "-lFRC_NetworkCommunication" "-lNiFpga" "-lNiFpgaLv" "-lniriodevenum" "-lniriosession" "-lNiRioSrv" "-lRoboRIO_FRC_ChipObject" "-lvisa" "-lwpiHal" "-lwpiutil" "-ldl" "-lrt" "-lpthread" "-lgcc_s" "-lc" "-lm" "-lrt" "-lpthread" "-lutil" "-lutil"
  = note: /Users/kiwi/Documents/first-rust-competition/target/arm-unknown-linux-gnueabi/debug/deps/libwpilib-2af9b9d353e16ef8.rlib(wpilib-2af9b9d353e16ef8.1vjbsboozuiocx1.rcgu.o): In function `wpilib::robot_base::RobotBase::new':
          /Users/kiwi/Documents/first-rust-competition/wpilib/src/robot_base.rs:62: undefined reference to `_HAL_Initialize'
          /Users/kiwi/Documents/first-rust-competition/target/arm-unknown-linux-gnueabi/debug/deps/libwpilib-2af9b9d353e16ef8.rlib(wpilib-2af9b9d353e16ef8.1vjbsboozuiocx1.rcgu.o): In function `wpilib::robot_base::RobotBase::start_competition':
          /Users/kiwi/Documents/first-rust-competition/wpilib/src/robot_base.rs:77: undefined reference to `_HAL_ObserveUserProgramStarting'
          /Users/kiwi/Documents/first-rust-competition/target/arm-unknown-linux-gnueabi/debug/deps/libwpilib-2af9b9d353e16ef8.rlib(wpilib-2af9b9d353e16ef8.1vjbsboozuiocx1.rcgu.o): In function `<wpilib::robot_base::RobotBase as core::ops::drop::Drop>::drop':
          /Users/kiwi/Documents/first-rust-competition/wpilib/src/robot_base.rs:152: undefined reference to `_HAL_ReleaseDSMutex'
          /Users/kiwi/Documents/first-rust-competition/target/arm-unknown-linux-gnueabi/debug/deps/libwpilib-2af9b9d353e16ef8.rlib(wpilib-2af9b9d353e16ef8.2eevpsypywrs58t7.rcgu.o): In function `wpilib::pdp::PowerDistributionPanel::new_with_module':
          /Users/kiwi/Documents/first-rust-competition/wpilib/src/pdp.rs:52: undefined reference to `_HAL_InitializePDP'
          /Users/kiwi/Documents/first-rust-competition/target/arm-unknown-linux-gnueabi/debug/deps/libwpilib-2af9b9d353e16ef8.rlib(wpilib-2af9b9d353e16ef8.2eevpsypywrs58t7.rcgu.o): In function `wpilib::pdp::PowerDistributionPanel::voltage':
          /Users/kiwi/Documents/first-rust-competition/wpilib/src/pdp.rs:59: undefined reference to `_HAL_GetPDPVoltage'
          /Users/kiwi/Documents/first-rust-competition/target/arm-unknown-linux-gnueabi/debug/deps/libwpilib-2af9b9d353e16ef8.rlib(wpilib-2af9b9d353e16ef8.2eevpsypywrs58t7.rcgu.o): In function `wpilib::pdp::PowerDistributionPanel::temperature':
          /Users/kiwi/Documents/first-rust-competition/wpilib/src/pdp.rs:68: undefined reference to `_HAL_GetPDPTemperature'
          /Users/kiwi/Documents/first-rust-competition/target/arm-unknown-linux-gnueabi/debug/deps/libwpilib-2af9b9d353e16ef8.rlib(wpilib-2af9b9d353e16ef8.2eevpsypywrs58t7.rcgu.o): In function `wpilib::pdp::PowerDistributionPanel::current':
          /Users/kiwi/Documents/first-rust-competition/wpilib/src/pdp.rs:85: undefined reference to `_HAL_GetPDPChannelCurrent'
          /Users/kiwi/Documents/first-rust-competition/target/arm-unknown-linux-gnueabi/debug/deps/libwpilib-2af9b9d353e16ef8.rlib(wpilib-2af9b9d353e16ef8.2eevpsypywrs58t7.rcgu.o): In function `wpilib::pdp::PowerDistributionPanel::total_current':
          /Users/kiwi/Documents/first-rust-competition/wpilib/src/pdp.rs:94: undefined reference to `_HAL_GetPDPTotalCurrent'
          /Users/kiwi/Documents/first-rust-competition/target/arm-unknown-linux-gnueabi/debug/deps/libwpilib-2af9b9d353e16ef8.rlib(wpilib-2af9b9d353e16ef8.2eevpsypywrs58t7.rcgu.o): In function `wpilib::pdp::PowerDistributionPanel::total_power':
          /Users/kiwi/Documents/first-rust-competition/wpilib/src/pdp.rs:103: undefined reference to `_HAL_GetPDPTotalPower'
          /Users/kiwi/Documents/first-rust-competition/target/arm-unknown-linux-gnueabi/debug/deps/libwpilib-2af9b9d353e16ef8.rlib(wpilib-2af9b9d353e16ef8.2eevpsypywrs58t7.rcgu.o): In function `wpilib::pdp::PowerDistributionPanel::total_energy':
          /Users/kiwi/Documents/first-rust-competition/wpilib/src/pdp.rs:112: undefined reference to `_HAL_GetPDPTotalEnergy'
          /Users/kiwi/Documents/first-rust-competition/target/arm-unknown-linux-gnueabi/debug/deps/libwpilib-2af9b9d353e16ef8.rlib(wpilib-2af9b9d353e16ef8.2eevpsypywrs58t7.rcgu.o): In function `wpilib::pdp::PowerDistributionPanel::reset_total_energy':
          /Users/kiwi/Documents/first-rust-competition/wpilib/src/pdp.rs:121: undefined reference to `_HAL_ResetPDPTotalEnergy'
          /Users/kiwi/Documents/first-rust-competition/target/arm-unknown-linux-gnueabi/debug/deps/libwpilib-2af9b9d353e16ef8.rlib(wpilib-2af9b9d353e16ef8.2eevpsypywrs58t7.rcgu.o): In function `wpilib::pdp::PowerDistributionPanel::clear_sticky_faults':
          /Users/kiwi/Documents/first-rust-competition/wpilib/src/pdp.rs:129: undefined reference to `_HAL_ClearPDPStickyFaults'
          /Users/kiwi/Documents/first-rust-competition/target/arm-unknown-linux-gnueabi/debug/deps/libwpilib-2af9b9d353e16ef8.rlib(wpilib-2af9b9d353e16ef8.4mb32oq00cn7vplb.rcgu.o): In function `wpilib::sensor_util::check_pdp_channel':
          /Users/kiwi/Documents/first-rust-competition/wpilib/src/sensor_util.rs:103: undefined reference to `_HAL_CheckPDPModule'
          /Users/kiwi/Documents/first-rust-competition/target/arm-unknown-linux-gnueabi/debug/deps/libwpilib_sys-24cd81f4391692af.rlib(wpilib_sys-24cd81f4391692af.1j96vy3uztofni14.rcgu.o): In function `wpilib_sys::hal_call::HalError::message':
          /Users/kiwi/Documents/first-rust-competition/wpilib-sys/src/hal_call.rs:47: undefined reference to `_HAL_GetErrorMessage'
          /Users/kiwi/Documents/first-rust-competition/target/arm-unknown-linux-gnueabi/debug/deps/libwpilib_sys-24cd81f4391692af.rlib(wpilib_sys-24cd81f4391692af.50oogkxde27o0gw5.rcgu.o): In function `wpilib_sys::usage::report_usage_context':
          /Users/kiwi/Documents/first-rust-competition/wpilib-sys/src/usage.rs:97: undefined reference to `_HAL_Report'
          collect2: error: ld returned 1 exit status
          

error: aborting due to previous error

error: linking with `/usr/local/bin/arm-frc-linux-gnueabi-g++` failed: exit code: 1
  |
  = note: "/usr/local/bin/arm-frc-linux-gnueabi-g++" "-Wl,--as-needed" "-Wl,-z,noexecstack" "-L" "/Users/kiwi/.rustup/toolchains/nightly-x86_64-apple-darwin/lib/rustlib/arm-unknown-linux-gnueabi/lib" "/Users/kiwi/Documents/first-rust-competition/target/arm-unknown-linux-gnueabi/debug/deps/digital_out-47ec74f78fd1b88a.10g2vjwgt5zznlo0.rcgu.o" "/Users/kiwi/Documents/first-rust-competition/target/arm-unknown-linux-gnueabi/debug/deps/digital_out-47ec74f78fd1b88a.33015irtg0y0tltf.rcgu.o" "/Users/kiwi/Documents/first-rust-competition/target/arm-unknown-linux-gnueabi/debug/deps/digital_out-47ec74f78fd1b88a.3uas24ydoyead96m.rcgu.o" "/Users/kiwi/Documents/first-rust-competition/target/arm-unknown-linux-gnueabi/debug/deps/digital_out-47ec74f78fd1b88a.49h71bdd3fb87roe.rcgu.o" "/Users/kiwi/Documents/first-rust-competition/target/arm-unknown-linux-gnueabi/debug/deps/digital_out-47ec74f78fd1b88a.50jfrz3hl7q5nm90.rcgu.o" "/Users/kiwi/Documents/first-rust-competition/target/arm-unknown-linux-gnueabi/debug/deps/digital_out-47ec74f78fd1b88a.52o74udg1ruq5wn8.rcgu.o" "/Users/kiwi/Documents/first-rust-competition/target/arm-unknown-linux-gnueabi/debug/deps/digital_out-47ec74f78fd1b88a.5em842f77i373rjg.rcgu.o" "/Users/kiwi/Documents/first-rust-competition/target/arm-unknown-linux-gnueabi/debug/deps/digital_out-47ec74f78fd1b88a.8rrta0bzolw6l5i.rcgu.o" "/Users/kiwi/Documents/first-rust-competition/target/arm-unknown-linux-gnueabi/debug/deps/digital_out-47ec74f78fd1b88a.hfqsl7fior6832m.rcgu.o" "-o" "/Users/kiwi/Documents/first-rust-competition/target/arm-unknown-linux-gnueabi/debug/deps/digital_out-47ec74f78fd1b88a" "/Users/kiwi/Documents/first-rust-competition/target/arm-unknown-linux-gnueabi/debug/deps/digital_out-47ec74f78fd1b88a.2tv69nkdrqyoe9ro.rcgu.o" "-Wl,--gc-sections" "-pie" "-Wl,-zrelro" "-Wl,-znow" "-nodefaultlibs" "-L" "/Users/kiwi/Documents/first-rust-competition/target/arm-unknown-linux-gnueabi/debug/deps" "-L" "/Users/kiwi/Documents/first-rust-competition/target/debug/deps" "-L" "/Users/kiwi/Documents/first-rust-competition/wpilib-sys/lib" "-L" "/Users/kiwi/.rustup/toolchains/nightly-x86_64-apple-darwin/lib/rustlib/arm-unknown-linux-gnueabi/lib" "-Wl,-Bstatic" "/Users/kiwi/Documents/first-rust-competition/target/arm-unknown-linux-gnueabi/debug/deps/libwpilib-2af9b9d353e16ef8.rlib" "/Users/kiwi/Documents/first-rust-competition/target/arm-unknown-linux-gnueabi/debug/deps/libwpilib_sys-24cd81f4391692af.rlib" "/Users/kiwi/Documents/first-rust-competition/target/arm-unknown-linux-gnueabi/debug/deps/liblazy_static-3c0df1f69f914911.rlib" "-Wl,--start-group" "/Users/kiwi/.rustup/toolchains/nightly-x86_64-apple-darwin/lib/rustlib/arm-unknown-linux-gnueabi/lib/libstd-e949216050e5dd32.rlib" "/Users/kiwi/.rustup/toolchains/nightly-x86_64-apple-darwin/lib/rustlib/arm-unknown-linux-gnueabi/lib/libpanic_unwind-9577d42f861f1e76.rlib" "/Users/kiwi/.rustup/toolchains/nightly-x86_64-apple-darwin/lib/rustlib/arm-unknown-linux-gnueabi/lib/libbacktrace_sys-abe124e4db7f0025.rlib" "/Users/kiwi/.rustup/toolchains/nightly-x86_64-apple-darwin/lib/rustlib/arm-unknown-linux-gnueabi/lib/libunwind-73d4d2ffd052f57b.rlib" "/Users/kiwi/.rustup/toolchains/nightly-x86_64-apple-darwin/lib/rustlib/arm-unknown-linux-gnueabi/lib/librustc_demangle-d8ad22fffdf7e00c.rlib" "/Users/kiwi/.rustup/toolchains/nightly-x86_64-apple-darwin/lib/rustlib/arm-unknown-linux-gnueabi/lib/liblibc-5ee748fbedb546bd.rlib" "/Users/kiwi/.rustup/toolchains/nightly-x86_64-apple-darwin/lib/rustlib/arm-unknown-linux-gnueabi/lib/liballoc-169a3865e179d184.rlib" "/Users/kiwi/.rustup/toolchains/nightly-x86_64-apple-darwin/lib/rustlib/arm-unknown-linux-gnueabi/lib/librustc_std_workspace_core-8e686161a71315eb.rlib" "/Users/kiwi/.rustup/toolchains/nightly-x86_64-apple-darwin/lib/rustlib/arm-unknown-linux-gnueabi/lib/libcore-4a5ec7fee74a23c6.rlib" "-Wl,--end-group" "/Users/kiwi/.rustup/toolchains/nightly-x86_64-apple-darwin/lib/rustlib/arm-unknown-linux-gnueabi/lib/libcompiler_builtins-b815ad8c6eec838c.rlib" "-Wl,-Bdynamic" "-lFRC_NetworkCommunication" "-lNiFpga" "-lNiFpgaLv" "-lniriodevenum" "-lniriosession" "-lNiRioSrv" "-lRoboRIO_FRC_ChipObject" "-lvisa" "-lwpiHal" "-lwpiutil" "-ldl" "-lrt" "-lpthread" "-lgcc_s" "-lc" "-lm" "-lrt" "-lpthread" "-lutil" "-lutil"
  = note: /Users/kiwi/Documents/first-rust-competition/target/arm-unknown-linux-gnueabi/debug/deps/libwpilib-2af9b9d353e16ef8.rlib(wpilib-2af9b9d353e16ef8.1vjbsboozuiocx1.rcgu.o): In function `wpilib::robot_base::RobotBase::new':
          /Users/kiwi/Documents/first-rust-competition/wpilib/src/robot_base.rs:62: undefined reference to `_HAL_Initialize'
          /Users/kiwi/Documents/first-rust-competition/target/arm-unknown-linux-gnueabi/debug/deps/libwpilib-2af9b9d353e16ef8.rlib(wpilib-2af9b9d353e16ef8.1vjbsboozuiocx1.rcgu.o): In function `wpilib::robot_base::RobotBase::start_competition':
          /Users/kiwi/Documents/first-rust-competition/wpilib/src/robot_base.rs:77: undefined reference to `_HAL_ObserveUserProgramStarting'
          /Users/kiwi/Documents/first-rust-competition/target/arm-unknown-linux-gnueabi/debug/deps/libwpilib-2af9b9d353e16ef8.rlib(wpilib-2af9b9d353e16ef8.1vjbsboozuiocx1.rcgu.o): In function `<wpilib::robot_base::RobotBase as core::ops::drop::Drop>::drop':
          /Users/kiwi/Documents/first-rust-competition/wpilib/src/robot_base.rs:152: undefined reference to `_HAL_ReleaseDSMutex'
          /Users/kiwi/Documents/first-rust-competition/target/arm-unknown-linux-gnueabi/debug/deps/libwpilib-2af9b9d353e16ef8.rlib(wpilib-2af9b9d353e16ef8.2yt116apfrn2yx98.rcgu.o): In function `wpilib::ds::DriverStation::from_base':
          /Users/kiwi/Documents/first-rust-competition/wpilib/src/ds.rs:172: undefined reference to `_HAL_Initialize'
          /Users/kiwi/Documents/first-rust-competition/target/arm-unknown-linux-gnueabi/debug/deps/libwpilib-2af9b9d353e16ef8.rlib(wpilib-2af9b9d353e16ef8.2yt116apfrn2yx98.rcgu.o): In function `wpilib::ds::DriverStation::robot_state':
          /Users/kiwi/Documents/first-rust-competition/wpilib/src/ds.rs:260: undefined reference to `_HAL_GetControlWord'
          /Users/kiwi/Documents/first-rust-competition/target/arm-unknown-linux-gnueabi/debug/deps/libwpilib-2af9b9d353e16ef8.rlib(wpilib-2af9b9d353e16ef8.3gcn41rt5glrxir7.rcgu.o): In function `<wpilib::sensor_util::NUM_DIGITAL_CHANNELS as core::ops::deref::Deref>::deref::__static_ref_initialize':
          /Users/kiwi/Documents/first-rust-competition/wpilib/src/sensor_util.rs:39: undefined reference to `_HAL_GetNumDigitalChannels'
          /Users/kiwi/Documents/first-rust-competition/target/arm-unknown-linux-gnueabi/debug/deps/libwpilib-2af9b9d353e16ef8.rlib(wpilib-2af9b9d353e16ef8.4zdv39r5di96iok8.rcgu.o): In function `wpilib::dio::DigitalOutput::new':
          /Users/kiwi/Documents/first-rust-competition/wpilib/src/dio.rs:55: undefined reference to `_HAL_GetPort'
          /Users/kiwi/Documents/first-rust-competition/wpilib/src/dio.rs:54: undefined reference to `_HAL_InitializeDIOPort'
          /Users/kiwi/Documents/first-rust-competition/target/arm-unknown-linux-gnueabi/debug/deps/libwpilib-2af9b9d353e16ef8.rlib(wpilib-2af9b9d353e16ef8.4zdv39r5di96iok8.rcgu.o): In function `wpilib::dio::DigitalOutput::set':
          /Users/kiwi/Documents/first-rust-competition/wpilib/src/dio.rs:79: undefined reference to `_HAL_SetDIO'
          /Users/kiwi/Documents/first-rust-competition/target/arm-unknown-linux-gnueabi/debug/deps/libwpilib-2af9b9d353e16ef8.rlib(wpilib-2af9b9d353e16ef8.4zdv39r5di96iok8.rcgu.o): In function `wpilib::dio::DigitalOutput::disable_pwm':
          /Users/kiwi/Documents/first-rust-competition/wpilib/src/dio.rs:119: undefined reference to `_HAL_SetDigitalPWMOutputChannel'
          /Users/kiwi/Documents/first-rust-competition/wpilib/src/dio.rs:123: undefined reference to `_HAL_FreeDigitalPWM'
          /Users/kiwi/Documents/first-rust-competition/target/arm-unknown-linux-gnueabi/debug/deps/libwpilib-2af9b9d353e16ef8.rlib(wpilib-2af9b9d353e16ef8.4zdv39r5di96iok8.rcgu.o): In function `<wpilib::dio::DigitalOutput as core::ops::drop::Drop>::drop':
          /Users/kiwi/Documents/first-rust-competition/wpilib/src/dio.rs:143: undefined reference to `_HAL_FreeDIOPort'
          /Users/kiwi/Documents/first-rust-competition/target/arm-unknown-linux-gnueabi/debug/deps/libwpilib-2af9b9d353e16ef8.rlib(wpilib-2af9b9d353e16ef8.4mb32oq00cn7vplb.rcgu.o): In function `wpilib::sensor_util::check_digital_channel':
          /Users/kiwi/Documents/first-rust-competition/wpilib/src/sensor_util.rs:73: undefined reference to `_HAL_CheckDIOChannel'
          /Users/kiwi/Documents/first-rust-competition/target/arm-unknown-linux-gnueabi/debug/deps/libwpilib_sys-24cd81f4391692af.rlib(wpilib_sys-24cd81f4391692af.1j96vy3uztofni14.rcgu.o): In function `wpilib_sys::hal_call::HalError::message':
          /Users/kiwi/Documents/first-rust-competition/wpilib-sys/src/hal_call.rs:47: undefined reference to `_HAL_GetErrorMessage'
          /Users/kiwi/Documents/first-rust-competition/target/arm-unknown-linux-gnueabi/debug/deps/libwpilib_sys-24cd81f4391692af.rlib(wpilib_sys-24cd81f4391692af.50oogkxde27o0gw5.rcgu.o): In function `wpilib_sys::usage::report_usage_context':
          /Users/kiwi/Documents/first-rust-competition/wpilib-sys/src/usage.rs:97: undefined reference to `_HAL_Report'
          collect2: error: ld returned 1 exit status
          

error: aborting due to previous error

error: Could not compile `wpilib-examples`.

Caused by:
  process didn't exit successfully: `rustc --crate-name pdp wpilib-examples/./pdp.rs --color always --crate-type bin --emit=dep-info,link -C debuginfo=2 -C metadata=c2579662fdff03f6 -C extra-filename=-c2579662fdff03f6 --out-dir /Users/kiwi/Documents/first-rust-competition/target/arm-unknown-linux-gnueabi/debug/deps --target arm-unknown-linux-gnueabi -C linker=/usr/local/bin/arm-frc-linux-gnueabi-g++ -C incremental=/Users/kiwi/Documents/first-rust-competition/target/arm-unknown-linux-gnueabi/debug/incremental -L dependency=/Users/kiwi/Documents/first-rust-competition/target/arm-unknown-linux-gnueabi/debug/deps -L dependency=/Users/kiwi/Documents/first-rust-competition/target/debug/deps --extern wpilib=/Users/kiwi/Documents/first-rust-competition/target/arm-unknown-linux-gnueabi/debug/deps/libwpilib-2af9b9d353e16ef8.rlib --extern wpilib_sys=/Users/kiwi/Documents/first-rust-competition/target/arm-unknown-linux-gnueabi/debug/deps/libwpilib_sys-24cd81f4391692af.rlib -L native=/Users/kiwi/Documents/first-rust-competition/wpilib-sys/lib` (exit code: 1)
warning: build failed, waiting for other jobs to finish...
error: Could not compile `wpilib-examples`.

Caused by:
  process didn't exit successfully: `rustc --crate-name digital_out wpilib-examples/./digital_out.rs --color always --crate-type bin --emit=dep-info,link -C debuginfo=2 -C metadata=47ec74f78fd1b88a -C extra-filename=-47ec74f78fd1b88a --out-dir /Users/kiwi/Documents/first-rust-competition/target/arm-unknown-linux-gnueabi/debug/deps --target arm-unknown-linux-gnueabi -C linker=/usr/local/bin/arm-frc-linux-gnueabi-g++ -C incremental=/Users/kiwi/Documents/first-rust-competition/target/arm-unknown-linux-gnueabi/debug/incremental -L dependency=/Users/kiwi/Documents/first-rust-competition/target/arm-unknown-linux-gnueabi/debug/deps -L dependency=/Users/kiwi/Documents/first-rust-competition/target/debug/deps --extern wpilib=/Users/kiwi/Documents/first-rust-competition/target/arm-unknown-linux-gnueabi/debug/deps/libwpilib-2af9b9d353e16ef8.rlib --extern wpilib_sys=/Users/kiwi/Documents/first-rust-competition/target/arm-unknown-linux-gnueabi/debug/deps/libwpilib_sys-24cd81f4391692af.rlib -L native=/Users/kiwi/Documents/first-rust-competition/wpilib-sys/lib` (exit code: 1)
make[1]: *** [all] Error 101
make: *** [wpilib] Error 2
Adams-MacBook-Pro:first-rust-competition kiwi$ 

I'm a bit puzzled by this because the makefile for wpilib-sys works just fine, but when I make all and build the wpilib-examples, there are a ton of undefined references in wpilib-sys.

Do you guys know of a fix for this? Or what I should look for to fix this?

Also, I had to change this line in wpilib-sys/makefile

python load-gcc-arm-headers.py | xargs -I '{}' find '{}' -type f -name "glob.h" | xargs dirname | xargs -I '{}' bash -c 'cp -R {}/*.h ./include/'

To this:

python load-gcc-arm-headers.py | xargs -I '{}' find '{}' -type f -name "glob.h" | xargs dirname | xargs -I '{}' bash -c 'cp -R {} ./include/'

Because I would get this error otherwise:

# TODO(lytigas) move this functionality into the python script
# TODO(lytigas) find a better method for selecting the include dir than the one without version information
# which is marked currently by the existence of globs.h
# gnu/**/*.h
python load-gcc-arm-headers.py | xargs -I '{}' find '{}' -type d -name "gnu" | xargs -I '{}' cp -R '{}' ./include/
# sys/**/*.h
python load-gcc-arm-headers.py | xargs -I '{}' find '{}' -type d -name "sys" | xargs -I '{}' cp -R '{}' ./include/
# *.h in one of the include dirs that is marked by glob.h
python load-gcc-arm-headers.py | xargs -I '{}' find '{}' -type f -name "glob.h" | xargs dirname | xargs -I '{}' bash -c 'cp -R {}/*.h ./include/'
cp: ./include/pthread.h: No such file or directory
cp: ./include/sched.h: No such file or directory
make[1]: *** [load_headers] Error 1
make: *** [wpilib] Error 2
Adams-MacBook-Pro:first-rust-competition kiwi$

I really hope you can help, we really would like to explore using Rust on our bot :)

Write the allwpilib commit hash into a variable in wpilibs-sys

WPILib is CalVer and we are semver, so it would be helpful to have a reference users can see from docs.rs.

This is vaguely challenging because it needs to be done at package time, as that's when the submodule is available. It'd probably need to be a in a script rather than rust code, unfortunately.

Library deploy location is moving in 2019

Just a heads-up, I've received word from the WPILib devs that third-party libraries should be deployed to /usr/local/frc/third-party/lib for next season. This includes the WPILib libraries such as the HAL and wpiutil.

RIIR navX libraries

The roboRIO navX libraries use WPILib rather than talking to the I2C/SPI/USB devices directly (using the HAL or otherwise), so these will actually need a rewrite. Sorry to break it to you.

Document MSRV

I'm actually not sure what our minimum supported Rust version currently is, but I would like to use Duration::as_secs_f64 here, which is only stable from Rust 1.38.

Target armv7-unknown-linux-gnueabi

The ARMv7 soft-float target seems new in rustc. We should test everything with this target and make sure binaries will run on the roboRIO.

PWMSpeedController as a trait?

From what I've seen of the implementation, PWMSpeedController is a struct that is going to represent every PWM controller, sounds like a job for a trait (Though I don't know how homogeneous the PWM motor controller impl details in wpilib are so maybe it would be the right choice)

Update crates.io

I'm looking into using rust in the 2020 season and it looks like this crate is many months out of date on crates.io. Is master in a stable state? Can we have the latest stable version published to crates.io?

Relicense wpilib crate

See-also: #8 (C-PERMISSIVE)

As was brought up in #8, the GPLv3 is not a permissive license, and forces downstream users to also license their code under GPLv3 when redistributing their source code.

This in particular badly affects ctre-rs, where this scenario effectively creates a crayon license in the scenario where a user links with this crate (which will be the default).

The Rust libs team recommends dual-licensing libraries under MIT/Apache2. Upstream WPILib is licensed under 3-BSD.

Use maven artifacts

There isn't a particular need to build a fork of allwpilib, so we should just use the upstream maven artifacts.

`cargo frc build` to target roboRIO

Instead of making teams configure cargo themselves, we should have teams specify the toolchain year, automatically find the toolchain, and build for the correct target.

(Having cargo run simply run the simulation would be great...)

Adhere to Rust API Guidelines

See https://rust-lang.github.io/api-guidelines/ for details.


  • Naming (crate aligns with Rust naming conventions)
    • Casing conforms to RFC 430 (C-CASE)
    • Ad-hoc conversions follow as_, to_, into_ conventions (C-CONV)
    • Getter names follow Rust convention (C-GETTER)
    • Methods on collections that produce iterators follow iter, iter_mut, into_iter (C-ITER)
    • Iterator type names match the methods that produce them (C-ITER-TY)
    • Feature names are free of placeholder words (C-FEATURE)
    • Names use a consistent word order (C-WORD-ORDER)
  • Interoperability (crate interacts nicely with other library functionality)
    • Types eagerly implement common traits (C-COMMON-TRAITS)
      • Copy, Clone, Eq, PartialEq, Hash
      • Ord, PartialOrd
      • Debug
      • Display
      • Default
    • Conversions use the standard traits From, AsRef, AsMut (C-CONV-TRAITS)
    • Collections implement FromIterator and Extend (C-COLLECT)
    • Data structures implement Serde's Serialize, Deserialize (C-SERDE)
    • Types are Send and Sync where possible (C-SEND-SYNC)
    • Error types are meaningful and well-behaved (C-GOOD-ERR)
    • Binary number types provide Hex, Octal, Binary formatting (C-NUM-FMT)
    • Generic reader/writer functions take R: Read and W: Write by value (C-RW-VALUE)
  • Macros (crate presents well-behaved macros)
  • Documentation (crate is abundantly documented)
    • Crate level docs are thorough and include examples (C-CRATE-DOC)
    • All items have a rustdoc example (C-EXAMPLE)
    • Examples use ?, not try!, not unwrap (C-QUESTION-MARK)
    • Function docs include error, panic, and safety considerations (C-FAILURE)
    • Prose contains hyperlinks to relevant things (C-LINK)
    • Cargo.toml includes all common metadata (C-METADATA)
      • authors, description, license, homepage, documentation, repository,
        readme, keywords, categories
    • Crate sets html_root_url attribute "https://docs.rs/CRATE/X.Y.Z" (C-HTML-ROOT)
    • Release notes document all significant changes (C-RELNOTES)
    • Rustdoc does not show unhelpful implementation details (C-HIDDEN)
  • Predictability (crate enables legible code that acts how it looks)
    • Smart pointers do not add inherent methods (C-SMART-PTR)
    • Conversions live on the most specific type involved (C-CONV-SPECIFIC)
    • Functions with a clear receiver are methods (C-METHOD)
    • Functions do not take out-parameters (C-NO-OUT)
    • Operator overloads are unsurprising (C-OVERLOAD)
    • Only smart pointers implement Deref and DerefMut (C-DEREF)
    • Constructors are static, inherent methods (C-CTOR)
  • Flexibility (crate supports diverse real-world use cases)
    • Functions expose intermediate results to avoid duplicate work (C-INTERMEDIATE)
    • Caller decides where to copy and place data (C-CALLER-CONTROL)
    • Functions minimize assumptions about parameters by using generics (C-GENERIC)
    • Traits are object-safe if they may be useful as a trait object (C-OBJECT)
  • Type safety (crate leverages the type system effectively)
    • Newtypes provide static distinctions (C-NEWTYPE)
    • Arguments convey meaning through types, not bool or Option (C-CUSTOM-TYPE)
    • Types for a set of flags are bitflags, not enums (C-BITFLAG)
    • Builders enable construction of complex values (C-BUILDER)
  • Dependability (crate is unlikely to do the wrong thing)
  • Debuggability (crate is conducive to easy debugging)
  • Future proofing (crate is free to improve without breaking users' code)
  • Necessities (to whom they matter, they really matter)
    • Public dependencies of a stable crate are stable (C-STABLE)
    • Crate and its dependencies have a permissive license (C-PERMISSIVE) #16

File not found for module `version`, and couldn't read `hal_bindings.rs` (os error 2)

These past few days, I have been fiddling around with pulling in this project, to no success. I added wpilib as a dependency like so:

wpilib = { git = "https://github.com/first-rust-competition/first-rust-competition", package = "wpilib" }

But, on compilation, I get the following error(s):

❯ cargo r
   Compiling wpilib-sys v0.4.0 (https://github.com/first-rust-competition/first-rust-competition#3fb3d672)
error[E0583]: file not found for module `version`
  --> /home/bob/.cargo/git/checkouts/first-rust-competition-8a2dacc6f3073934/3fb3d67/wpilib-sys/src/lib.rs:16:1
   |
16 | mod version;
   | ^^^^^^^^^^^^
   |
   = help: to create the module `version`, create file "/home/bob/.cargo/git/checkouts/first-rust-competition-8a2dacc6f3073934/3fb3d67/wpilib-sys/src/version.rs" or "/home/bob/.cargo/git/checkouts/first-rust-competition-8a2dacc6f3073934/3fb3d67/wpilib-sys/src/version/mod.rs"

error: couldn't read /home/bob/.cargo/git/checkouts/first-rust-competition-8a2dacc6f3073934/3fb3d67/wpilib-sys/src/./hal_bindings.rs: No such file or directory (os error 2)
  --> /home/bob/.cargo/git/checkouts/first-rust-competition-8a2dacc6f3073934/3fb3d67/wpilib-sys/src/bindings.rs:21:1
   |
21 | include!("./hal_bindings.rs");
   | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   |
   = note: this error originates in the macro `include` (in Nightly builds, run with -Z macro-backtrace for more info)

For more information about this error, try `rustc --explain E0583`.
error: could not compile `wpilib-sys` due to 2 previous errors

I am building on WSL, so it's possible that this is related to #85, but after reading the changes made, I doubt it. I'm curious if anyone else can compile the crate, considering that it's an internal error.

Here is the directory in question:

   inode Permissions Links Size Blocks User Date Modified Git Name                inode Permissions Links Size Blocks User Date Modified Git Name          inode Permissions Links Size Blocks User Date Modified Git Name
33913641 .rw-r--r--      1 1.3k      8 bob   6 May 14:31   --  bindings.rs    33913643 .rw-r--r--      1  535      8 bob   6 May 14:31   --  lib.rs
33913642 .rw-r--r--      1 5.6k     16 bob   6 May 14:31   --  hal_call.rs    33913644 .rw-r--r--      1 2.8k      8 bob   6 May 14:31   --  usage.rs

Thanks in advance.

Split out dependencies from wpilib-sys

wpilib-sys is rather large. The majority of it is just libraries built for athena, most of which the crate doesn't even provide bindings for. The dependencies won't change mid-season, and the same license doesn't apply to all the binaries.

It'd be nice to eventually have bindings for cscore. However, it depends on wpiutil. It'd be rather silly to end up having to download multiple copies of wpiutil.

I've started by creating an frc-netcomm-sys crate here: https://gitlab.com/auscompgeek/frc-netcomm-sys

impl std::io::{Read, Write} for SerialPort

It'd probably make sense to make SerialPort a reader and writer. Fundamentally it is at least, so this should be reflected in its interface.

This would also give the entire Rust ecosystem around std::io (such as the byteorder crate) for free.

Use of `ATOMIC_BOOL_INIT`

Clippy errors and causes CI to fail due to the deprecated use of ATOMIC_BOOL_INIT instead of AtomicBool::new(false).

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.