diff --git a/cook.sh b/cook.sh
index 7de389fb2196e26bcd6c18d9fd614363162b9f31..713296153074440adfb75ef7de84fc931b048b14 100755
--- a/cook.sh
+++ b/cook.sh
@@ -62,7 +62,12 @@ function op {
             then
                 if [ ! -d source ]
                 then
-                    git clone --recursive "$GIT" source
+                    if [ -n "$BRANCH" ]
+                    then
+                        git clone --recursive "$GIT" -b "$BRANCH" source
+                    else
+                        git clone --recursive "$GIT" source
+                    fi
                 fi
 
                 pushd source > /dev/null
diff --git a/recipes/gcc/recipe.sh b/recipes/gcc/recipe.sh
new file mode 100644
index 0000000000000000000000000000000000000000..7554b5cd9a0b74d03023af628d527a9a334c6bf5
--- /dev/null
+++ b/recipes/gcc/recipe.sh
@@ -0,0 +1,60 @@
+GIT=https://github.com/redox-os/gcc.git
+BRANCH=redox
+
+HOST=x86_64-elf-redox
+export AR="${HOST}-ar"
+export AS="${HOST}-as"
+export CC="${HOST}-gcc"
+export CXX="${HOST}-g++"
+export LD="${HOST}-ld"
+export NM="${HOST}-nm"
+export OBJCOPY="${HOST}-objcopy"
+export OBJDUMP="${HOST}-objdump"
+export RANLIB="${HOST}-ranlib"
+export READELF="${HOST}-readelf"
+export STRIP="${HOST}-strip"
+
+function recipe_version {
+    printf "r%s.%s" "$(git rev-list --count HEAD)" "$(git rev-parse --short HEAD)"
+    return 1
+}
+
+function recipe_update {
+    echo "skipping update"
+    return 1
+}
+
+function recipe_build {
+    ./contrib/download_prerequisites
+    cp config.sub gmp/config.sub
+    cp config.sub isl/config.sub
+    cp config.sub mpfr/config.sub
+    cp -f config.sub mpc/config.sub
+    pushd libstdc++-v3
+    autoconf2.64
+    popd
+
+    mkdir build
+    cd build
+    ../configure --host=${HOST} --target=${HOST} --prefix=/ --enable-static --disable-shared --disable-dlopen --disable-nls --enable-languages=c --without-headers
+    make all-gcc all-target-libgcc
+    return 1
+}
+
+function recipe_test {
+    echo "skipping test"
+    return 1
+}
+
+function recipe_clean {
+    cd build
+    make clean
+    return 1
+}
+
+function recipe_stage {
+    dest="$(realpath $1)"
+    cd build
+    make DESTDIR="$dest" install-gcc install-target-libgcc
+    return 1
+}
diff --git a/recipes/gnu-binutils/recipe.sh b/recipes/gnu-binutils/recipe.sh
new file mode 100644
index 0000000000000000000000000000000000000000..51040bb82e92d48ede750fe7df1be3bd38409213
--- /dev/null
+++ b/recipes/gnu-binutils/recipe.sh
@@ -0,0 +1,50 @@
+GIT=https://github.com/redox-os/binutils-gdb.git
+
+HOST=x86_64-elf-redox
+export AR="${HOST}-ar"
+export AS="${HOST}-as"
+export CC="${HOST}-gcc"
+export CXX="${HOST}-g++"
+export LD="${HOST}-ld"
+export NM="${HOST}-nm"
+export OBJCOPY="${HOST}-objcopy"
+export OBJDUMP="${HOST}-objdump"
+export RANLIB="${HOST}-ranlib"
+export READELF="${HOST}-readelf"
+export STRIP="${HOST}-strip"
+
+function recipe_version {
+    printf "r%s.%s" "$(git rev-list --count HEAD)" "$(git rev-parse --short HEAD)"
+    return 1
+}
+
+function recipe_update {
+    echo "skipping update"
+    return 1
+}
+
+function recipe_build {
+    mkdir build
+    cd build
+    ../configure --host=${HOST} --target=${HOST} --prefix=/ --with-sysroot=/usr/x86_64-elf-redox --disable-gdb --disable-nls --disable-werror
+    make
+    return 1
+}
+
+function recipe_test {
+    echo "skipping test"
+    return 1
+}
+
+function recipe_clean {
+    cd build
+    make clean
+    return 1
+}
+
+function recipe_stage {
+    dest="$(realpath $1)"
+    cd build
+    make DESTDIR="$dest" install
+    return 1
+}
diff --git a/recipes/newlib/recipe.sh b/recipes/newlib/recipe.sh
new file mode 100644
index 0000000000000000000000000000000000000000..b2aef6c526afd56cfc5ce8e508f8e1131f84b8e2
--- /dev/null
+++ b/recipes/newlib/recipe.sh
@@ -0,0 +1,59 @@
+GIT=https://github.com/redox-os/newlib.git
+BRANCH=redox
+
+CC=
+
+HOST=x86_64-elf-redox
+
+function recipe_version {
+    printf "r%s.%s" "$(git rev-list --count HEAD)" "$(git rev-parse --short HEAD)"
+    return 1
+}
+
+function recipe_update {
+    echo "skipping update"
+    return 1
+}
+
+function recipe_build {
+    pushd newlib/libc/sys
+        aclocal-1.11 -I ../..
+        autoconf
+        automake-1.11 --cygnus Makefile
+    popd
+
+    pushd newlib/libc/sys/redox
+        aclocal-1.11 -I ../../..
+        autoconf
+        automake-1.11 --cygnus Makefile
+    popd
+
+    mkdir build
+    cd build
+
+    ../configure --target="${HOST}" --prefix=/
+    make
+
+    return 1
+}
+
+function recipe_test {
+    echo "skipping test"
+    return 1
+}
+
+function recipe_clean {
+    cd build
+    make clean
+    return 1
+}
+
+function recipe_stage {
+    dest="$(realpath $1)"
+    cd build
+    make DESTDIR="$dest" install
+    cd "$dest"
+    mv x86_64-elf-redox/* ./
+    rmdir x86_64-elf-redox
+    return 1
+}