general:rust
Differences
This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
general:rust [2022/08/08 12:55] – sunkan | general:rust [2024/10/30 15:09] (current) – [User cargo config] sunkan | ||
---|---|---|---|
Line 9: | Line 9: | ||
* mkdir -p / | * mkdir -p / | ||
* cp -dR --preserve=timestamps rustc-1.XX.X-src/ | * cp -dR --preserve=timestamps rustc-1.XX.X-src/ | ||
+ | |||
+ | ====== Script to update after verifying GPG signatures ====== | ||
+ | < | ||
+ | #!/bin/sh | ||
+ | |||
+ | # Update to rust release by downloading and verifying GPG keys | ||
+ | |||
+ | set -u | ||
+ | |||
+ | if [ $# -ne 1 ]; then | ||
+ | echo " | ||
+ | echo " | ||
+ | exit 1 | ||
+ | fi | ||
+ | |||
+ | TMPDIR_BASE=/ | ||
+ | |||
+ | RUST_VERSION=$1 | ||
+ | TARGET=" | ||
+ | RUST_REPO=" | ||
+ | RUST_FILE=" | ||
+ | RUSTC_FILE=" | ||
+ | |||
+ | ARMV7HF_EXT=" | ||
+ | MUSL_EXT=" | ||
+ | WASM_EXT=" | ||
+ | WINX64_EXT=" | ||
+ | |||
+ | # | ||
+ | EXTENSIONS="" | ||
+ | |||
+ | create_rust_pgp_key_file() { | ||
+ | echo | base64 -d > rust.key <<EOF | ||
+ | mQINBFJEwMkBEADlPACa2K7reD4x5zd8afKx75QYKmxqZwywRbgeICeD4bKiQoJZdUjmn1LgrGaX | ||
+ | uBMKXJQhyA34e/ | ||
+ | w5adPwGMg4D8cDKXk02NdnqQlmFByv0vSaArR5kngZKnLY6o0zZ9Buyy761Im/ | ||
+ | 48z33G4j+BDmn0ryGr1aFdP58tHpgjWtLZs0iWeFNRDYDje6ODyu/ | ||
+ | zenH2TLM9yt/ | ||
+ | agiSZAq6Imehduke+peAL1z4PuRmzDPO2LPhVS7CDXtuKAYqUV2YakTq8MZUempVhw5nLqVaJ5/ | ||
+ | iyOcv405PnkT25eIVVVghxAgyz6bOU/ | ||
+ | J1uit+yS8xjyUiMKm4J7oMP2XdBN98TUfLGw7SKeAxyU92BHlxg7yyPfI4TglsCzoSgEIV6xoGOV | ||
+ | RRCYlGzSjUfz0bCMCclhTQRBkegKcjB3sMTyG3SPZbjTlCqrFHy13e6hGl37Nhs8/ | ||
+ | EISn5bivTKEeeQARAQABtERSdXN0IExhbmd1YWdlIChUYWcgYW5kIFJlbGVhc2UgU2lnbmluZyBL | ||
+ | ZXkpIDxydXN0LWtleUBydXN0LWxhbmcub3JnPokCOAQTAQIAIgUCUkTAyQIbAwYLCQgHAwIGFQgC | ||
+ | CQoLBBYCAwECHgECF4AACgkQhauW5vob5f5fYQ// | ||
+ | GrNf4Y8DaPqR+w1OdIegWn8kCoGfPfGAVW5XXJg+Oxk6QIaD2hJojBUrq1DALeCZVewzTVw6BN4D | ||
+ | GuUexsc53a8DcY2Yk5WE3ll6UKq/ | ||
+ | RTtPHyppoVxWKAFDiWyNdJ+3UnjldWrT9xFqjqfXWw9Bhz8/ | ||
+ | ctZlc5fHhsG6lmzW5RM4NG8OKvq3UrBihvgzwrIfoEDKpXbk3DXqaSs1o81NH5ftVWWbJp/ | ||
+ | uMC6n0YWiMZMQ1cFBy7tukpMkd+VPbPkiSwBhPkfZIzUAWd74nanN5SKBtcnymgJ+OJcxfZLiUkX | ||
+ | Rj0aUT1GLA9/ | ||
+ | J+y5fVgJY91nxG0zf782JjtYuz9+knQd55JLFJCOhhbv3uRvhvkqgauHagR5X9vCMtcvqDseK7LX | ||
+ | rRaOdOUDrK/ | ||
+ | kq36jZ/ | ||
+ | 3zc4umaIsEa5DxJ2zIKHywVAR67Um0K1YRG07/ | ||
+ | 2RNyBY8qYmyE08IncjTsFFB8OnvdXcsAgjCFmI1BKnePxrABL/ | ||
+ | Hu6k1kaLKc+130x6Hf/ | ||
+ | DKKxoeFKyADfIdteJWFjOlCI9KoIhfXqEt9JMnxApGqsJElJtfQjIdhMN4Lnep2WkudHAfwJ/ | ||
+ | fe7wiW0rcBMvr/ | ||
+ | fi5TGfVb77QQrhrQlSpfIYrvfpvjYoqj618SbU6uBhzh758gLllmMB8LOhxWtq9eyn1rMWyRKL1f | ||
+ | EkfvvMc78zP+Px6yDMa6UIez8jZXQ87Zou9EriLbzF4QfIYAqR9LUSMnLk6Ko61tSFmFEDobC3tc | ||
+ | 1jkSg4zZe/ | ||
+ | c7Rb9h9geOzxKYINBFz5Hd0MKx7kZ1U6WobWKiYYxcCmoEeguSPHABEBAAGJAh8EGAECAAkFAlJE | ||
+ | wMkCGwwACgkQhauW5vob5f7fFA// | ||
+ | bm8uO3AY4r/ | ||
+ | tAoOstFxaCAg4nxFlarMctFqOOXCFkylWl504JVIOvgbbbyj6I7qCUmbmqazBSMUK8c/ | ||
+ | f/ | ||
+ | x1cGw1Ey+U6exbtrZfE5kM9pZzRG7ZY83CXpYWMpkyVXNWmf9JcIWWBrXvJmMi0FDvtgg3Pt1tno | ||
+ | xqdilk6yhieFc8LqBn6CZgFUBk0tNSaWk3PsN0N6Ut8VXY6sai7MJ0Gih1gE1xadWj2zfZ9sLGyt | ||
+ | 2jZ6wK++U881YeXAryaGKJ8sIs182hwQb4qN7eiUHzLtIh8oVBHo8Q4BJSat88E5/ | ||
+ | 2iRLT+oNZw1hdwNyPOT1GMkkn86l3o7klwmQUWCPm6vl1aHp3omo+GHC63PpNFO5RncJIlo3aBKK | ||
+ | moE5lDSMGE8KFso5awTo9z9QnVPkRsk6qeBYit9xE3x3S+iwjcSg0nieaAkc0N00nc9V9jfPvt4z | ||
+ | / | ||
+ | dxauGcjMUWZaG338ZehnDqG1Yn/ | ||
+ | nFScL0E7cBzy4xvtInQeUaFgJZ1BmxbzQrx+eBBdOTDv7RLnNVygRmMzmkDhxO1IGEu1+3ETIg/ | ||
+ | xFE7VQY0It/ | ||
+ | bbDjNM+cV+5BgpRdIpE2l9W7ImpbLihqcZt47J6oWt/ | ||
+ | vUAEDCQUhsGpur4EKHFJ9AmQ4zf91gWLrDc6QmlACn9o9ARUfOV5aFsZI9ni1MJEInJTP37stz/ | ||
+ | DECRie4LTL4O6P4Dkto8ROM2wzZq5CiRNfnTPP7ARfxlCkpg+gpLYRlxGUvRn6EeYwDtiMQJUQPf | ||
+ | pGHSvThUlgDEsDrpp4SQSmdACB+rvaRqCawWKoXs0In/ | ||
+ | wy/ | ||
+ | 92SN3dKqaoSBvzNGY5WT3CsqxDtik37kR3f9/ | ||
+ | hauW5vob5f7BXSAEGQECAAYFAlSPZHgACgkQXLSpNHs7CdwemA/ | ||
+ | 5itmTRVffl4tm5OoWkW8uDnu7Ue3vzdzy+9NV8X2wRG835qjXijWP++AGuxgW6LB9nV5OWiKMCHO | ||
+ | WnUjJQ6pNQMAgSN69QzkFXVF/ | ||
+ | W5z6LZnBy3BaVSd0lGjCEc3yfH5OaB79na4W86WCV5n4IT7cojFM+LdL6P46RgmEtWSG3/ | ||
+ | 6BLRWqatRNBWLIMKMpn+YvOOL9TwuP1xbqWr1vZ66wksm53NIDcWhptpp0KEuzbU0/ | ||
+ | tOmO36LrSadX9rwckSETCVYklmpAHNxPml011YNDThtBidvsicw1vZwRHsXn+txlL6RAIRN+J/ | ||
+ | 3uOiJAqN9Qgedpx2q+E15t8MiTg/ | ||
+ | / | ||
+ | R8C2umRC3cYOL4U9dOQ15hSlYydF5urFGCLIvodtE9q80uhpyt8L/ | ||
+ | qFZRfXlbJphk9+CBQWwiZSRLZRzqQ4ffl4xyLuolx01PMaatkQbRaw/ | ||
+ | O/ | ||
+ | SBmGifQwpoPTys21stTIGLgznJrIfE5moFviOLqD/ | ||
+ | dCZ8l2DCLhHw0+ynyRAvSK6aGCmZz6jMjmYFMXgiy7zESksMnVFMulIJJhR3eB0wx2GitibjY/ | ||
+ | Q7tD3i0yy9ILR07dFz4pgkVMafxpVR7fmrMZ0t+yENd+9qzyAZs0ksxORoc2ze90SCx2jwEX/ | ||
+ | m4I0hP2H/ | ||
+ | 38MttWqjDiibQOSthRVcETByRYM8KcjYSUCi4PoBc3NpDONkFbZm6XofR/ | ||
+ | d1jBGajNzEqtneqqbdAkPQaLsuD2TMkQfTDJfE/ | ||
+ | XuCYL67O7AJB4ZQ6BT+g4z96iRLbupzu/ | ||
+ | dF8jbCx5apVjA1sWXB9Kh3L+DUwFMve696B5tlHyc1KxjHR6w9GRsh4= | ||
+ | EOF | ||
+ | } | ||
+ | |||
+ | download_if_missing () { | ||
+ | local filename=$1 | ||
+ | local dest=$2 | ||
+ | |||
+ | if [ -f $TMPDIR_BASE/ | ||
+ | mv $TMPDIR_BASE/ | ||
+ | else | ||
+ | wget -c $RUST_REPO/ | ||
+ | fi | ||
+ | | ||
+ | } | ||
+ | |||
+ | tmpdir=$( mktemp -d $TMPDIR_BASE/ | ||
+ | cd $tmpdir | ||
+ | |||
+ | download_if_missing $RUST_FILE $tmpdir | ||
+ | download_if_missing $RUST_FILE.asc $tmpdir | ||
+ | |||
+ | download_if_missing $RUSTC_FILE $tmpdir | ||
+ | download_if_missing $RUSTC_FILE.asc $tmpdir | ||
+ | |||
+ | for ext in $EXTENSIONS; | ||
+ | tarfile=" | ||
+ | |||
+ | download_if_missing $tarfile $tmpdir | ||
+ | download_if_missing $tarfile.asc $tmpdir | ||
+ | done | ||
+ | |||
+ | create_rust_pgp_key_file | ||
+ | |||
+ | gpgv --keyring ./rust.key $RUST_FILE.asc $RUST_FILE || exit 2 | ||
+ | gpgv --keyring ./rust.key $RUSTC_FILE.asc $RUSTC_FILE || exit 3 | ||
+ | |||
+ | exitcode=10 | ||
+ | for ext in $EXTENSIONS; | ||
+ | tarfile=" | ||
+ | |||
+ | gpgv --keyring ./rust.key $tarfile.asc $tarfile || exit $exitcode | ||
+ | exitcode=$((exitcode + 1)) | ||
+ | done | ||
+ | |||
+ | # Remove previously installed rustlibs | ||
+ | find / | ||
+ | |||
+ | tar xaf $RUST_FILE | ||
+ | cd rust-${RUST_VERSION}-${TARGET} | ||
+ | ./ | ||
+ | cd .. | ||
+ | rm -rf rust-${RUST_VERSION}-${TARGET} | ||
+ | |||
+ | tar xaf $RUSTC_FILE | ||
+ | cd rustc-${RUST_VERSION}-src | ||
+ | rm -rf / | ||
+ | mkdir -p / | ||
+ | cp -dR --preserve=timestamps library / | ||
+ | cd .. | ||
+ | |||
+ | for ext in $EXTENSIONS; | ||
+ | tarfile=" | ||
+ | tar xaf $tarfile | ||
+ | cd rust-std-${RUST_VERSION}-$ext | ||
+ | rm -rf "/ | ||
+ | cp -dR --preserve=timestamps " | ||
+ | cd .. | ||
+ | done | ||
+ | |||
+ | read -p "Keep the downloaded archives? (y/N) " keep_archives | ||
+ | |||
+ | if [ ${keep_archives}X = " | ||
+ | mv $tmpdir/ | ||
+ | mv $tmpdir/ | ||
+ | |||
+ | mv $tmpdir/ | ||
+ | mv $tmpdir/ | ||
+ | |||
+ | for ext in $EXTENSIONS; | ||
+ | tarfile=" | ||
+ | |||
+ | mv $tmpdir/ | ||
+ | mv $tmpdir/ | ||
+ | done | ||
+ | fi | ||
+ | |||
+ | rm -rf $tmpdir | ||
+ | </ | ||
+ | |||
+ | ====== Add WASM support ====== | ||
+ | Found good info here [[https:// | ||
+ | |||
+ | < | ||
+ | $ wget https:// | ||
+ | $ wget https:// | ||
+ | $ gpg --verify rust-std-1.66.0-wasm32-unknown-unknown.tar.xz.asc | ||
+ | |||
+ | $ tar xvaf rust-std-1.66.0-wasm32-unknown-unknown.tar.xz | ||
+ | |||
+ | $ rustc --print sysroot | ||
+ | / | ||
+ | |||
+ | # cd rust-std-1.66.0-wasm32-unknown-unknown/ | ||
+ | # cp --preserve=timestamps -R rust-std-wasm32-unknown-unknown/ | ||
+ | </ | ||
+ | |||
+ | ====== Compiling Rust code with MSVC ====== | ||
+ | * Start Rust 1.63 (MSVC) Shell for 32-bit or 64-bit | ||
+ | * Run the following command to setup the MSVC environment | ||
+ | |||
+ | 32-bit | ||
+ | < | ||
+ | " | ||
+ | </ | ||
+ | |||
+ | 64-bit | ||
+ | < | ||
+ | " | ||
+ | </ | ||
+ | |||
+ | ====== Cross compiling for ARMv7 ====== | ||
+ | Make sure to have the necessary external libraries available if needed. | ||
+ | Example with librrd (and its dependencies) | ||
+ | |||
+ | < | ||
+ | # Needs librrd-dev: | ||
+ | |||
+ | # | ||
+ | #| Status=Not/ | ||
+ | #|/ Err? | ||
+ | #||/ Name | ||
+ | # | ||
+ | #ii librrd-dev: | ||
+ | </ | ||
+ | |||
+ | Then to compile for armv7-unknown-linux-gnueabihf | ||
+ | < | ||
+ | cargo build -r --target armv7-unknown-linux-gnueabihf --config target.armv7-unknown-linux-gnueabihf.linker=\" | ||
+ | </ | ||
====== Rust error handling ====== | ====== Rust error handling ====== | ||
Line 24: | Line 264: | ||
====== Rust guides ====== | ====== Rust guides ====== | ||
[[http:// | [[http:// | ||
+ | |||
+ | [[https:// | ||
====== Rust memory ====== | ====== Rust memory ====== | ||
[[https:// | [[https:// | ||
+ | |||
+ | ====== Perf and Rust ====== | ||
+ | From [[https:// | ||
+ | The basic perf command is this: | ||
+ | |||
+ | < | ||
+ | perf record -F99 --call-graph dwarf XXX | ||
+ | </ | ||
+ | |||
+ | The -F99 tells perf to sample at 99 Hz, which avoids generating too much data for longer runs (why 99 Hz you ask? It is often chosen because it is unlikely to be in lockstep with other periodic activity). The --call-graph dwarf tells perf to get call-graph information from debuginfo, which is accurate. The XXX is the command you want to profile. | ||
+ | |||
+ | ====== Find unused source files ====== | ||
+ | < | ||
+ | rustc --emit=dep-info src/main.rs 2> /dev/null; for file in $(find src/ -name ' | ||
+ | </ | ||
+ | |||
+ | ====== User cargo config ====== | ||
+ | ~/ | ||
+ | < | ||
+ | [registries.crates-io] | ||
+ | protocol = " | ||
+ | |||
+ | [target.x86_64-unknown-linux-gnu] | ||
+ | # linker = " | ||
+ | # rustflags = [" | ||
+ | rustflags = [" | ||
+ | |||
+ | [profile.profiling] | ||
+ | inherits = " | ||
+ | debug = true | ||
+ | </ | ||
+ | |||
+ | To build release with debug info: '' |
general/rust.1659963322.txt.gz · Last modified: 2022/08/08 12:55 by sunkan