diff --git a/scripts/patch-specs.sh b/scripts/patch-specs.sh
new file mode 100755
index 0000000000000000000000000000000000000000..4d02a009ecbfd84d3a1babfd3094198a3be4dc14
--- /dev/null
+++ b/scripts/patch-specs.sh
@@ -0,0 +1,64 @@
+#!/usr/bin/env bash
+
+DIR="$1"
+FOUND=0
+
+if [ -d "$DIR" ]; then
+	DIR="$(cd "$DIR"; pwd)"
+else
+	echo "Usage: $0 toolchain-dir"
+	exit 1
+fi
+
+echo -n "Locating cpp ... "
+for bin in bin usr/bin usr/local/bin; do
+	for cmd in "$DIR/$bin/"*-cpp; do
+		if [ -x "$cmd" ]; then
+			echo "$cmd"
+			CPP="$cmd"
+			break
+		fi
+	done
+done
+
+if [ ! -x "$CPP" ]; then
+	echo "Can't locate a cpp executable in '$DIR' !"
+	exit 1
+fi
+
+for lib in $(STAGING_DIR="$dir" "$CPP" -x c -v /dev/null 2>&1 | sed -ne 's#:# #g; s#^LIBRARY_PATH=##p'); do
+	if [ -d "$lib" ]; then
+		grep -qs "STAGING_DIR" "$lib/specs" && rm -f "$lib/specs"
+		if [ $FOUND -lt 1 ]; then
+			echo -n "Patching specs ... "
+			STAGING_DIR="$dir" "$CPP" -dumpspecs | awk '
+				mode ~ "link" {
+					sub("%{L.}", "%{L*} -L %:getenv(STAGING_DIR /usr/lib) -rpath-link %:getenv(STAGING_DIR /usr/lib)")
+				}
+				mode ~ "cpp" {
+					$0 = $0 " -idirafter %:getenv(STAGING_DIR /usr/include)"
+				}
+				{
+					print $0
+					mode = ""
+				}
+				/^\*cpp:/ {
+					mode = "cpp"
+				}
+				/^\*link.*:/ {
+					mode = "link"
+				}
+			' > "$lib/specs"
+			echo "ok"
+			FOUND=1
+		fi
+	fi
+done
+
+if [ $FOUND -lt 1 ]; then
+	echo "Failed to locate library directory!"
+	exit 1
+else
+	echo "Toolchain successfully patched."
+	exit 0
+fi