diff --git a/toolchain.mk b/toolchain.mk
index 1a6953e43560f1d50b375d77c2b0d343e2f4ca4f..7e6b4a04f2aa4041e41a7a5d2130baecdeb4fb2e 100644
--- a/toolchain.mk
+++ b/toolchain.mk
@@ -21,16 +21,26 @@ LEGACY_AARCH64_CROSS_COMPILE    ?= $(LEGACY_AARCH64_PATH)/bin/aarch64-linux-gnu-
 LEGACY_AARCH64_GCC_VERSION      ?= gcc-linaro-aarch64-linux-gnu-4.9-2014.08_linux
 LEGACY_SRC_AARCH64_GCC          ?= http://releases.linaro.org/archive/14.08/components/toolchain/binaries/${LEGACY_AARCH64_GCC_VERSION}.tar.xz
 
-toolchains:
-	mkdir -p $(AARCH32_PATH)
-	curl -L $(SRC_AARCH32_GCC) -o $(TOOLCHAIN_ROOT)/$(AARCH32_GCC_VERSION).tar.xz
-	tar xf $(TOOLCHAIN_ROOT)/$(AARCH32_GCC_VERSION).tar.xz -C $(AARCH32_PATH) --strip-components=1
-
-	mkdir -p $(AARCH64_PATH)
-	curl -L $(SRC_AARCH64_GCC) -o $(TOOLCHAIN_ROOT)/$(AARCH64_GCC_VERSION).tar.xz
-	tar xf $(TOOLCHAIN_ROOT)/$(AARCH64_GCC_VERSION).tar.xz -C $(AARCH64_PATH) --strip-components=1
-
-	mkdir -p $(LEGACY_AARCH64_PATH)
-	curl -L $(LEGACY_SRC_AARCH64_GCC) -o $(TOOLCHAIN_ROOT)/$(LEGACY_AARCH64_GCC_VERSION).tar.xz
-	tar xf $(TOOLCHAIN_ROOT)/$(LEGACY_AARCH64_GCC_VERSION).tar.xz -C $(LEGACY_AARCH64_PATH) --strip-components=1
+toolchains: aarch32 aarch64 aarch64-legacy
+
+aarch32:
+	if [ ! -d "$(AARCH32_PATH)" ]; then \
+		mkdir -p $(AARCH32_PATH); \
+		curl -L $(SRC_AARCH32_GCC) -o $(TOOLCHAIN_ROOT)/$(AARCH32_GCC_VERSION).tar.xz; \
+		tar xf $(TOOLCHAIN_ROOT)/$(AARCH32_GCC_VERSION).tar.xz -C $(AARCH32_PATH) --strip-components=1; \
+	fi
+
+aarch64:
+	if [ ! -d "$(AARCH64_PATH)" ]; then \
+		mkdir -p $(AARCH64_PATH); \
+		curl -L $(SRC_AARCH64_GCC) -o $(TOOLCHAIN_ROOT)/$(AARCH64_GCC_VERSION).tar.xz; \
+		tar xf $(TOOLCHAIN_ROOT)/$(AARCH64_GCC_VERSION).tar.xz -C $(AARCH64_PATH) --strip-components=1; \
+	fi
+
+aarch64-legacy:
+	if [ ! -d "$(LEGACY_AARCH64_PATH)" ]; then \
+		mkdir -p $(LEGACY_AARCH64_PATH); \
+		curl -L $(LEGACY_SRC_AARCH64_GCC) -o $(TOOLCHAIN_ROOT)/$(LEGACY_AARCH64_GCC_VERSION).tar.xz; \
+		tar xf $(TOOLCHAIN_ROOT)/$(LEGACY_AARCH64_GCC_VERSION).tar.xz -C $(LEGACY_AARCH64_PATH) --strip-components=1; \
+	fi