[OUTDATED] Instructions for how to cross compile Rust projects for the Raspberry Pi

Overview

Cross Compiling for Raspberry Pi

This guide will show how Rust programs can be cross compiled for the Raspberry Pi using Cargo. These instructions may or may not work for your particular system, so you may have to adjust the procedure to fit your configuration.

There is also a docker container version of the Rust cross-compiler for the Raspberry: https://github.com/Ragnaroek/rust-on-raspberry-docker. If you are using docker this may be a easier solution for cross-compiling your project.

Cross Compiling on a Linux Host

These instructions are based on the rusty-pi guide, but with some additions and adaptations for the current build systems.

Preparing the Tools

The first step is to download the Raspberry Pi toolchain. It's a collection of binaries and libraries for cross compiling. Begin by installing git if it's not already installed:

sudo apt-get install git

(replace apt-get install with the install command for your favorite package manager)

and procede by cloning the toolchain repository:

git clone https://github.com/raspberrypi/tools.git ~/pi-tools

Compiling the Compiler

The next step is to compile the Rust compiler and standard libraries. The standard libraries are particularly important, since they have to be compiled for the ARM platform to make them usable in your program. See Appendix A for information on how to add more libraries.

start by cloning the Rust repository and cd into it:

git clone http://github.com/rust-lang/rust.git
cd rust

You may want to check out the same revision as your current copy of rustc to keep everything in sync. You can find the revision hash by running rustc with the -V flag:

$ rustc -V
rustc 1.0.0-nightly (30e1f9a1c 2015-03-14) (built 2015-03-15)
                     ^-------^ This is what you are looking for

Copy the hash and use it to reset the repository to the same revision:

git reset --hard 30e1f9a1c

Alright, finally time to build it. Begin by adding the binary directory from the Raspberry Pi toolchain to your path. Use the following command to use the 64 bit tools:

export PATH=~/pi-tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/bin:$PATH

or use this command for the 32 bit tools:

export PATH=~/pi-tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian/bin:$PATH

Configure the compiler to build everything for ARM Linux and set the install destination to $HOME/pi-rust:

./configure --target=arm-unknown-linux-gnueabihf --prefix=$HOME/pi-rust

And build+install!

make -j4 && make install

(Change the 4 to your preferred number of parallel build processes)

This is will take a while, so go and grab some coffee or take a walk while waiting.

Is it done? Great! Now, move on to the next part.

Pointing Cargo in the Right Direction

We are almost ready to actually build things. You may actually be able to use rustc directly, but we want more, right? We want the convenience of Cargo! But Cargo doesn't come without demands. It has to know what we are using to link our program, so let's tell it. Cargo will be looking for configuration files where we can specify what to use when building ARM programs.

You may already have a directory in your $HOME called .cargo. Create one, if you don't have it. Now, create a file called config, or edit an existing one, and add the following lines to associate the target triple arm-unknown-linux-gnueabihf with our cross compilers:

[target.arm-unknown-linux-gnueabihf]
ar = "arm-linux-gnueabihf-gcc-ar"
linker = "gcc-sysroot"

Wait a minute! What is gcc-sysroot? Well, that is a semi ugly hack and we are going to use it.

The thing is that Cargo has some problems when it comes to cross compiling while depending on share libraries. These libraries are placed somewhere in the sysroot and gcc is using ld to link them. The problem is that the default sysroot is where the host libraries are located and those are not built for ARM. There is currently no good way to tell Cargo to tell rustc to tell gcc to tell ld to look somewhere else, so we have to do it for them.

The Raspberry Pi toolchain contains a directory with various system directories filled with common libraries (if you want to add more libraries, see Appendix A). This is where we want ld to look for things, so we are going to use a simple script to tell gcc to tell it where this directory can be found. Create a file in the binary directory you added to your $PATH before (~/pi-tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/bin if you used the 64 bit tools or ~/pi-tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian/bin if you prefer the 32 bit tools) and call it gcc-sysroot.

Add the following lines in gcc-sysroot:

#!/bin/bash
arm-linux-gnueabihf-gcc --sysroot=$HOME/pi-tools/arm-bcm2708/arm-bcm2708hardfp-linux-gnueabi/arm-bcm2708hardfp-linux-gnueabi/sysroot "$@"

This is basically an alias for arm-linux-gnueabihf-gcc, but with the --sysroot set to where the libraries are kept. The "$@" part is there to pass all the incoming argument forwards to arm-linux-gnueabihf-gcc. Alright, make the file executable:

chmod +x ~/pi-tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/bin/gcc-sysroot

or

chmod +x ~/pi-tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian/bin/gcc-sysroot

If your crate requires building C++ code, then you'll need to create a g++-sysroot just like gcc-sysroot, substituting arm-linux-gnueabihf-g++ for arm-linux-gnueabihf-gcc inside.

And you should be done! Or, kind of done. There is one thing left.

Running Cargo

It would be nice to just be able to run cargo build and be done with it, but the reality is not exactly that nice. Almost, but not exactly. You will have to add the binaries to your $PATH every time you open a new terminal and get ready for compiling. You may also have to define some other variables to satisfy some other systems. Sound tedious and boring, right? Well, that's what we have scripts for.

This repository contains two versions of the same script (cross32 for 32 bit and cross64 for 64 bit). They can be used as a substitute for Cargo, like this:

./cross64 cargo-command path/to/rust path/to/pi/toolchain

Examples:
./cross64 build ~/some-other-rust ~/some-other-pi-tools
./cross64 doc
./cross64 "build --release"

The first argument is what you would normally pass to cargo. It can be single commands, like build or doc, or multiple arguments like "build --release". Note that the combined commands have to be passed as a single string. path/to/rust and path/to/pi/toolchain are optional and should only be used if you want to use tools from somewhere else than what this guide recommends.

These scripts will set up the required environment variables and run cargo for you. All without polluting the external environment. You can include them in your projects and modify them however you want.

That's it! You should now be ready to cross compile your Raspberry Pi projects.

Have fun!

Appendix A: Extending the toolset to support more system dependencies

Let's say your project uses some crate that depends on having openssl installed on the system. In this case you have to install the package manually into the ARM toolset.

Get these packages either from the raspberry, or download them online.

We'll assume that you're running Raspbian (i.e. deb files), but it should be straight forward to adapt the steps to your dist/packages.

If you do apt-cache show libssl1.0.0 on the raspberry, you'll see this in the output:

Filename:    pool/main/o/openssl/libssl1.0.0_1.0.1e-2+rvt+deb7u17_armhf.deb

You should be able to find a match for that under ftp.debian.org/debian/pool, so the resulting URL in this case is

http://ftp.debian.org/debian/pool/main/o/openssl/libssl-dev_1.0.1e-2+deb7u17_armhf.deb

If it's not there, see if it is still on the raspberry under /var/cache/apt/archive.

If you still can't find it, try searching for the filename online.

When you have the dependencies downloaded, extract them into the ARM toolchain:

# cd into the sysroot of the arm toolchain
cd ~/pi-tools/arm-bcm2708/arm-bcm2708hardfp-linux-gnueabi/arm-bcm2708hardfp-linux-gnueabi/sysroot/

# move the deb files here and use `ar` to extract the contents:
ar p libssl1.0.0_1.0.1e-2+rvt+deb7u17_armhf.deb data.tar.gz | tar zx

# Repeat for any other dependencies you may have..
ar p libssl-dev_1.0.1e-2+rvt+deb7u17_armhf.deb data.tar.gz | tar zx
ar p zlib1g_1.2.7.dfsg-13_armhf.deb data.tar.gz | tar zx
ar p zlib1g-dev_1.2.7.dfsg-13_armhf.deb data.tar.gz | tar zx

Now you're ready to build the project.

Pull requests with enhancements, corrections or additional instructions are very much appreciated. Good luck!

Comments
  • Can't find crate 'std'

    Can't find crate 'std'

    I asked a question on Stack Overflow regarding an error I'm getting white cross-compiling after following your instructions:

    http://stackoverflow.com/questions/34793607/cant-find-crate-for-std-while-cross-compiling-rust-project-for-arm

    Any idea?

    opened by 5ynatra 12
  • Docker image: problems with permissions on OS X

    Docker image: problems with permissions on OS X

    First I want to say that I tried many different ways to cross-compile Rust code to RasPi 3B and this one seems to be the most promising so far.

    I'm on OS X 10.11.3, Docker 1.10.2, Rust 1.7.0. I have successfully built the Docker image, but I ran into some permission problems as I tried to cross-compile my project.

    If I run cargo build on host environment and then try to run the image, I get the following error:

    $ docker run -v /Users/rav/Projects/rust/guessing_game:/home/cross/project rust-17-pi-cross build 
    *** Extracting target dependencies ***
    
    *** Cross compiling project ***
    could not remove build directory
    
    To learn more, run the command again with --verbose.
    

    If I run cargo clean first, then I get this error:

    $ docker run -v /Users/rav/Projects/rust/guessing_game:/home/cross/project rust-17-pi-cross build --verbose
    *** Extracting target dependencies ***
    
    *** Cross compiling project ***
        Updating registry `https://github.com/rust-lang/crates.io-index`
    couldn't prepare build directories
    
    Caused by:
      Permission denied (os error 13)
    

    I looked for ways to solve it on Docker level, but none of them helped (like adding :z to the end of the volume path). Also, I believe most of them assume the image is running SELinux, while this Dockerfile uses Debian.

    Pinging @schnupperboy, as from the issue tracker I see he's the one who added Docker support, so maybe he knows something that I don't. :wink:

    opened by ravicious 11
  • Instructions for cross-compiling ffi packages

    Instructions for cross-compiling ffi packages

    Hi, These instructions worked nicely, thanks - I'm impressed how things just work! However, it doesn't cover using packages with foreign dependencies; in this case I was trying to use one of the sqlite3 crates. I'd be interested in some hints for making those work if you have any!

    Thanks again for the very useful guide!

    opened by jugglerchris 11
  • Automatically detect latest stable version for rust build

    Automatically detect latest stable version for rust build

    I updated the git references for the rust repo inside the Dockerfile and it's documentation to 1.5.0 since it has been released as the new stable version...

    Update: A mechanism was implemented which auto-detects the latest version number of rust stable by using the tags of the rust git repository. This avoids hard coding the version number.

    opened by schnupperboy 10
  • Can't build the docker image

    Can't build the docker image

    I tried docker build --tag rust-nightly-pi-cross . and docker build --build-arg RUST_GIT_REF=1.10.0 --tag rust-nightly-pi-cross .. it stopped with an error: The command '/bin/sh -c git clone $URL_GIT_RUST $HOME/rust; cd $HOME/rust; DEFAULT_RUST_GIT_REF=$(git tag --list | grep "^[0-9]+.[0-9]+.[0-9]+$" | sort -V | tail --lines 1); RUST_GIT_REF=${RUST_GIT_REF:-$DEFAULT_RUST_GIT_REF}; git reset --hard $RUST_GIT_REF; export TOOLCHAIN=$TOOLCHAIN_32 && [ $(uname -m) = 'x86_64' ] && export TOOLCHAIN=$TOOLCHAIN_64; export PATH=$TOOLCHAIN:$PATH; ./configure --target=arm-unknown-linux-gnueabihf --prefix=$HOME/pi-rust && make -j4 && make install;' returned a non-zero code: 2

    Docker version 1.12.0-rc4, build e4a0dbc, experimental

    opened by inre 9
  • explain how to get system dependencies

    explain how to get system dependencies

    In case people use libraries that have system dependencies, they have to extend the toolset with these. Show some examples on how to do this.

    Closes #3.

    opened by tfnico 9
  • udpate docker image to use rustup

    udpate docker image to use rustup

    A clean version of the previous pull request (I did the merge after introducing the changes, that's why it did show three commits in the previous PR).

    opened by Ragnaroek 7
  •  isolate creation of cross compiler with docker

    isolate creation of cross compiler with docker

    This pull request contains the following changes and thus closes #5:

    • implemented a Dockerfile which is able to build a Docker image which contains the cross compiler (Rust version can specified)
    • documented motivation and usage of building the Docker image and cross compiling a rust project by running a Docker container from that previously built Docker image
    • split the initial README.md into MANUAL.md and DOCKER.md
    opened by schnupperboy 7
  • publishing the docker image on the docker hub

    publishing the docker image on the docker hub

    Hi, I like to publish a prebuilt image of the docker image on the docker hub. It would allow everyone to pull the image instead of building it self.

    You're ok with that?

    If you like, I can give you full access to the docker hub repository.

    -- Michael

    opened by Ragnaroek 6
  • Can not ld library

    Can not ld library

    I need some c library to compile my project. First, I run into error of "data.tar.gz" missing. While I changed run.sh and get it solved. `ar p $i data.tar.xz | unxz | tar x;

    ar p $i data.tar.gz | tar zx;`

    Then I run into such error.

    error: linking withgcc-sysrootfailed: exit code: 1 note: "gcc-sysroot" "-Wl,--as-needed" "-Wl,-z,noexecstack" "-L" "/home/cross/pi-rust/lib/rustlib/arm-unknown-linux-gnueabihf/lib" "/home/cross/project/target/arm-unknown-linux-gnueabihf/release/musician.0.o" "-o" "/home/cross/project/target/arm-unknown-linux-gnueabihf/release/musician" "-Wl,--gc-sections" "-pie" "-Wl,-O1" "-nodefaultlibs" "-L" "/home/cross/project/target/arm-unknown-linux-gnueabihf/release" "-L" "/home/cross/project/target/arm-unknown-linux-gnueabihf/release/deps" "-L" "/home/cross/pi-rust/lib/rustlib/arm-unknown-linux-gnueabihf/lib" "-Wl,-Bstatic" "-Wl,-Bdynamic" "/home/cross/project/target/arm-unknown-linux-gnueabihf/release/deps/libgst-81229148d70a8b14.rlib" "/home/cross/pi-rust/lib/rustlib/arm-unknown-linux-gnueabihf/lib/libstd-9026086f.rlib" "/home/cross/pi-rust/lib/rustlib/arm-unknown-linux-gnueabihf/lib/libcollections-9026086f.rlib" "/home/cross/pi-rust/lib/rustlib/arm-unknown-linux-gnueabihf/lib/librustc_unicode-9026086f.rlib" "/home/cross/pi-rust/lib/rustlib/arm-unknown-linux-gnueabihf/lib/librand-9026086f.rlib" "/home/cross/pi-rust/lib/rustlib/arm-unknown-linux-gnueabihf/lib/liballoc-9026086f.rlib" "/home/cross/pi-rust/lib/rustlib/arm-unknown-linux-gnueabihf/lib/liballoc_jemalloc-9026086f.rlib" "/home/cross/pi-rust/lib/rustlib/arm-unknown-linux-gnueabihf/lib/liblibc-9026086f.rlib" "/home/cross/pi-rust/lib/rustlib/arm-unknown-linux-gnueabihf/lib/libcore-9026086f.rlib" "-l" "gstvideo-1.0" "-l" "gstapp-1.0" "-l" "gstbase-1.0" "-l" "gstreamer-1.0" "-l" "gobject-2.0" "-l" "glib-2.0" "-l" "dl" "-l" "pthread" "-l" "gcc_s" "-l" "pthread" "-l" "c" "-l" "m" "-l" "rt" "-l" "util" "-l" "compiler-rt" note: /home/cross/pi-tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/bin/../lib/gcc/arm-linux-gnueabihf/4.8.3/../../../../arm-linux-gnueabihf/bin/ld: cannot find -lgstvideo-1.0 /home/cross/pi-tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/bin/../lib/gcc/arm-linux-gnueabihf/4.8.3/../../../../arm-linux-gnueabihf/bin/ld: cannot find -lgstapp-1.0 /home/cross/pi-tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/bin/../lib/gcc/arm-linux-gnueabihf/4.8.3/../../../../arm-linux-gnueabihf/bin/ld: cannot find -lgstbase-1.0 /home/cross/pi-tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/bin/../lib/gcc/arm-linux-gnueabihf/4.8.3/../../../../arm-linux-gnueabihf/bin/ld: cannot find -lgstreamer-1.0 collect2: error: ld returned 1 exit status

    I confirmed all required debs has been placed under dep folders.

    opened by vincent-zhu 5
  • Instructions don't work on OS X

    Instructions don't work on OS X

    All the shipped binaries with pi-tools are for Linux, and these instructions make use of running those binaries to generate the cross compiler. This fails for obvious reasons, Mac OS X is not binary compatible with Linux executables.

    opened by jeremytregunna 5
  • Extracting deb packages does not seem to be enough

    Extracting deb packages does not seem to be enough

    First of all, huge 👍 for this guide... I've been struggling with getting pam-auth to work with cross compilation for over two days not, finally it's working.

    BUT!

    it seems like extracting the deb into the sysroot was not enough for me. I had to manually create the /usr/lib/libXXX.so files manually, as it did not seem to automagically find the /usr/lib/libXXX.so.X.Y files. Do you know any way around this? If i'm not mistaken there should be a tool to auto-create those symlinks, but can't remember which...

    opened by axos88 1
  • Unable to find sh file on make install

    Unable to find sh file on make install

    I have been trying to figure out why this file isn't being created, I am hoping someone can help. I am able to get through the tutorial until the make install step and this error occurs during std stage2.

    sh: 0: Can't open ~/rust/build/tmp/dist/rust-std-1.22.1-dev-arm-unknown-linux-gnueabihf/install.sh

    trying to navigate to that direction I can get to dist, which has 3 folders

    ~/rust/build/tmp/dist$ ls
    rust-docs-1.22.1-dev-arm-unknown-linux-gnueabihf
    rust-docs-1.22.1-dev-x86_64-unknown-linux-gnu
    rust-std-1.22.1-dev-x86_64-unknown-linux-gnu
    

    My build system

    • Ubuntu 16.04
    • rustc 1.22.1 (05e2e1c41 2017-11-22)
    • gcc (Ubuntu 5.4.0-6ubuntu1~16.04.5) 5.4.0 20160609

    Any help as to where to go from here.

    opened by FreeMasen 1
  • Build Fails

    Build Fails

    Following your instructions, I got as far as the "Build+install" step, which eventually fell over with the following error:

    c++: internal compiler error: Killed (program cc1plus)
    Please submit a full bug report,
    with preprocessed source if appropriate.
    See <file:///usr/share/doc/gcc-4.9/README.Bugs> for instructions.
    lib/CodeGen/CMakeFiles/LLVMCodeGen.dir/build.make:2342: recipe for target 'lib/CodeGen/CMakeFiles/LLVMCodeGen.dir/RegAllocGreedy.cpp.o' failed
    make[3]: *** [lib/CodeGen/CMakeFiles/LLVMCodeGen.dir/RegAllocGreedy.cpp.o] Error 4
    make[3]: *** Waiting for unfinished jobs....
    make[3]: Leaving directory '/home/pi/rust/build/armv7-unknown-linux-gnueabihf/llvm/build'
    CMakeFiles/Makefile2:783: recipe for target 'lib/CodeGen/CMakeFiles/LLVMCodeGen.dir/all' failed
    make[2]: *** [lib/CodeGen/CMakeFiles/LLVMCodeGen.dir/all] Error 2
    make[2]: Leaving directory '/home/pi/rust/build/armv7-unknown-linux-gnueabihf/llvm/build'
    Makefile:149: recipe for target 'all' failed
    make[1]: *** [all] Error 2
    make[1]: Leaving directory '/home/pi/rust/build/armv7-unknown-linux-gnueabihf/llvm/build'
    thread 'main' panicked at '
    command did not execute successfully, got: exit code: 2
    
    build script failed, must exit now', /home/pi/.cargo/registry/src/github.com-1ecc6299db9ec823/cmake-0.1.18/src/lib.rs:521
    note: Run with `RUST_BACKTRACE=1` for a backtrace.
    	finished in 30873.734
    Makefile:24: recipe for target 'all' failed
    make: *** [all] Error 101
    

    This is a brand new Pi 3 with Raspbian Jessie.

    Any suggestions to troubleshoot this, please?

    opened by jlandells 1
  • Debian 8 extract .deb

    Debian 8 extract .deb

    From Debian 8 on you might need to extract the .deb like this:

    ar p mypackage.deb data.tar.xz | tar xJ

    source: https://www.g-loaded.eu/2008/01/28/how-to-extract-rpm-or-deb-packages/

    bdw: this is an excellent instruction

    opened by twenta 2
  • can't find crate for `syntax` [E0463]

    can't find crate for `syntax` [E0463]

    Hello,

    today i created this docker container and tryed to compile a project for RPi 3. i've am using serde (*) as a dependency, whis results in:

    ....
     Downloading num-traits v0.1.32
       Compiling num-traits v0.1.32
       Compiling aster v0.18.0
    /home/cross/.cargo/registry/src/github.com-1ecc6299db9ec823/aster-0.18.0/src/lib.rs:10:1: 10:21 error: can't find crate for `syntax` [E0463]
    /home/cross/.cargo/registry/src/github.com-1ecc6299db9ec823/aster-0.18.0/src/lib.rs:10 extern crate syntax;
    

    dependencies of my project:

    [dependencies]
    nickel = "0.8.0"
    unicase = "*"
    serde = "*"
    serde_json = "*"
    serde_macros = "*"
    xml-rs = "0.3"
    cp437 = "*"
    plugin = "0.2"
    typemap = "*"
    rustc-serialize = "0.3"
    

    may this is related to https://github.com/rust-lang/rust/issues/32984

    opened by timglabisch 5
  • Unable to Extract .deb file for the SSL

    Unable to Extract .deb file for the SSL

    hello, im a student and is curently learning rust and im also new to linux, and i want to compile my code so that it can run on a raspberry pi 3. my project uses some crate that depends on having openssl. i followed your instruction, downloaded .deb file from http://ftp.debian.org/debian/pool/main/o/openssl/libssl1.0.0_1.0.1k-3+deb8u4_armhf.deb. but when i try to extract the file using this command kenichi@kenichi-Aspire-E5-473G:~/pi-tools/arm-bcm2708/arm-bcm2708hardfp-linux-gnueabi/arm-bcm2708hardfp-linux-gnueabi/sysroot$ ar p libssl1.0.0_1.0.1k-3+deb8u4_armhf.deb data.tar.gz | tar zx i get this error

    no entry data.tar.gz in archive gzip: stdin: unexpected end of file tar: Child returned status 1 tar: Error is not recoverable: exiting now

    what am i supposed to do to get around this problem? thanks in advance.

    opened by ghost 15
Owner
Erik Hedvall
Erik Hedvall
Raspberry PI library for Rust. GPIO controller, L298N motors, sockets and "i2clib" integrated

raslib Raspberry PI library for Rust. GPIO controller, L298N motors, sockets and "i2clib" integrated All tests are made on Raspberry PI 4B+ on Raspbia

Anтo 5 Apr 12, 2022
Everything you need to know about cross compiling Rust programs!

rust-cross Everything you need to know about cross compiling Rust programs! If you want to set up your Rust toolchain as a cross compiler, you have co

Jorge Aparicio 2.3k Jan 2, 2023
Vue's template compiler reimplemented in Rust!

vue template compiler in Rust https://github.com/vuejs/rfcs/discussions/369#discussioncomment-1192421 Maybe in the long run we want the whole transfor

Herrington Darkholme 687 Jan 1, 2023
A Brainheck compiler written in Rust.

Brainhecc A compiler for Brain[hecc] programs, written in Rust with Cranelift. It compiles any valid Brainhecc program into an executable binary. Inst

Zack 1 Oct 28, 2021
A LED Christmas Tree controlled by Rust. Contribute your own renderers!

Rusty Christmas Tree This is code that draws on the LED Christmas Tree made by @aidancrowther. You can see his 3D design files and Pi Pico setup code

Forest Anderson 43 May 15, 2022
Easy c̵̰͠r̵̛̠ö̴̪s̶̩̒s̵̭̀-t̶̲͝h̶̯̚r̵̺͐e̷̖̽ḁ̴̍d̶̖̔ ȓ̵͙ė̶͎ḟ̴͙e̸̖͛r̶̖͗ë̶̱́ṉ̵̒ĉ̷̥e̷͚̍ s̷̹͌h̷̲̉a̵̭͋r̷̫̊ḭ̵̊n̷̬͂g̵̦̃ f̶̻̊ơ̵̜ṟ̸̈́ R̵̞̋ù̵̺s̷̖̅ţ̸͗!̸̼͋

Rust S̵̓i̸̓n̵̉ I̴n̴f̶e̸r̵n̷a̴l mutability! Howdy, friendly Rust developer! Ever had a value get m̵̯̅ð̶͊v̴̮̾ê̴̼͘d away right under your nose just when

null 294 Dec 23, 2022
[OUTDATED] A light HTTP framework for Rust

Rustful A light HTTP framework for Rust, with REST-like features. The main purpose of Rustful is to create a simple, modular and non-intrusive foundat

Erik Hedvall 873 Nov 12, 2022
fixred is a command line utility to fix outdated links in files with redirect URLs.

fixred fixred is a command line utility to fix outdated links in files with redirect URLs. Installation fixred is installed via cargo package manager.

Linda_pp 35 Aug 6, 2022
A tool to convert old and outdated "characters" into the superior Rustcii-Encoding.

rustcii A tool to convert old and outdated "characters" into the superior Rustcii-Encoding. Speak your mind. Blazingly ( ?? ) fast ( ?? ). Github | cr

null 8 Nov 16, 2022
Show details about outdated packages in your NixOS system.

nix-olde is a tool to show details about outdated packages in your NixOS system using https://repology.org/ database. It can use both default <nixpkgs

Sergei Trofimovich 14 Jan 24, 2023
Cargo extension to recycle outdated build artifacts

cargo gc Cargo extension to recycle outdated build artifacts. And try the best to avoid recompilation. Usage Install it with cargo: cargo install carg

Ruihang Xia 23 Aug 30, 2023
Rust library for fast image resizing with using of SIMD instructions.

fast_image_resize Rust library for fast image resizing with using of SIMD instructions. CHANGELOG Supported pixel formats and available optimisations:

Kirill Kuzminykh 115 Jan 5, 2023
A color-coded visualization tool for the instructions of an anchor program

anchor-viz A color-coded visualization tool for the instructions of an anchor program. (This is a schematic of basic-2 from anchor's examples/tutorial

cavemanloverboy 5 Oct 15, 2022
OOLANG - an esoteric stack-based programming language where all instructions/commands are differnet unicode O characters

OOLANG is an esoteric stack-based programming language where all instructions/commands are differnet unicode O characters

RNM Enterprises 2 Mar 20, 2022
Derive macro for encoding/decoding instructions and operands as bytecode

bytecoding Derive macro for encoding and decoding instructions and operands as bytecode. Documentation License Licensed under either of Apache License

Niklas Sauter 15 Mar 20, 2022
HackWasm Workshop Starter, Checkpoints and Instructions

Osmosis Swaprouter Worskhop This is a workshop for building an Osmosis Swap Router CosmWasm contract. The original contract repository is located here

Roman 6 Oct 3, 2022
Cross-platform, cross-browser, cross-search-engine duckduckgo-like bangs

localbang Cross-platform, cross-browser, cross-search-engine duckduckgo-like bangs What are "bangs"?? Bangs are a way to define where to search inside

Jakob Kruse 7 Nov 23, 2022
A simple cli to clone projects and fetch all projects in a GitHub org..

stupid-git A simple cli to clone projects and update all projects. get all repository from GitHub clone all pull all with git stash Usage create sgit.

Fengda Huang 5 Sep 15, 2022
Operating System development tutorials in Rust on the Raspberry Pi

Operating System development tutorials in Rust on the Raspberry Pi

Rust Embedded 10k Jan 9, 2023
Program a Raspberry Pi Pico with pure Rust

pi-pico-rs Program a Raspberry Pi Pico with pure Rust. Get Started Install the latest version of Rust and the thumbv6m-none-eabi target. This is the p

Gerald Nash 5 Jul 29, 2022