diff --git a/.gn b/.gn
index e288994..038d50e 100644
--- a/.gn
+++ b/.gn
@@ -21,6 +21,7 @@
 check_targets = [
   # Everything in BUILD.gn
   "//:*",
+
   # Everything in third_party/BUILD.gn
   "//third_party/:*",
 ]
diff --git a/DEPS b/DEPS
index 41495cb..79b353f 100644
--- a/DEPS
+++ b/DEPS
@@ -3,6 +3,7 @@
 
 vars = {
   'chromium_git': 'https://chromium.googlesource.com',
+  'dawn_git': 'https://dawn.googlesource.com',
   'github_git': 'https://github.com',
 
   'dawn_standalone': True,
@@ -86,6 +87,12 @@
     'url': '{github_git}/g-truc/glm.git@06f084063fd6d9aa2ef6904517650700ae47b63d',
     'condition': 'dawn_standalone',
   },
+
+  # Our own pre-compiled Linux clang-format 7.0 for presubmit
+  'third_party/clang-format': {
+    'url': '{dawn_git}/clang-format@2451c56cd368676cdb230fd5ad11731ab859f1a3',
+    'condition': 'dawn_standalone and checkout_linux',
+  },
 }
 
 hooks = [
diff --git a/PRESUBMIT.py b/PRESUBMIT.py
index 8fb81fd..ae10063 100644
--- a/PRESUBMIT.py
+++ b/PRESUBMIT.py
@@ -1,9 +1,69 @@
-# Copyright (c) 2018 The Chromium Authors. All rights reserved.#
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
+# Copyright 2018 The Dawn Authors
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+import os
+import platform
+import subprocess
+
+def _DoClangFormat(input_api, output_api):
+    # Our binary clang-format is a linux binary compiled for x64
+    if platform.system() != 'Linux' or platform.architecture()[0] != '64bit':
+        return [output_api.PresubmitNotifyResult('Skipping clang-format')]
+
+    # We need to know which commit to diff against. It doesn't seem to be exposed anywhere
+    # except in that private member of presubmit_support.Change. This is likely to break
+    # but hopefully we have an updated clang-format in CPID/GS before it does.
+    upstream_commit = input_api.change._upstream
+    if upstream_commit == None:
+        return []
+
+    lint_cmd = [
+        'scripts/lint_clang_format.sh',
+        'third_party/clang-format/clang-format',
+        upstream_commit
+    ]
+
+    # Make clang-format use our linux x64 sysroot because it is compiled with a version of
+    # stdlibc++ that's incompatible with the old libraries present on the bots.
+    env = {
+        'LD_LIBRARY_PATH': os.path.join(
+            os.getcwd(),
+            'build',
+            'linux',
+            'debian_sid_amd64-sysroot',
+            'usr',
+            'lib',
+            'x86_64-linux-gnu'
+        )
+    }
+
+    # Call the linting script and forward the output as a notification or as an error
+    try:
+        output = subprocess.check_output(lint_cmd, env=env);
+        return [output_api.PresubmitNotifyResult(output)]
+    except subprocess.CalledProcessError as e:
+        return [output_api.PresubmitError(e.output)]
+
+def _DoCommonChecks(input_api, output_api):
+    results = []
+    results.extend(input_api.canned_checks.CheckChangedLUCIConfigs(input_api, output_api))
+    results.extend(input_api.canned_checks.CheckGNFormatted(input_api, output_api))
+    results.extend(_DoClangFormat(input_api, output_api))
+    return results
 
 def CheckChangeOnUpload(input_api, output_api):
-    return input_api.canned_checks.CheckChangedLUCIConfigs(input_api, output_api)
+    return _DoCommonChecks(input_api, output_api)
 
 def CheckChangeOnCommit(input_api, output_api):
-    return input_api.canned_checks.CheckChangedLUCIConfigs(input_api, output_api)
+    return _DoCommonChecks(input_api, output_api)
diff --git a/scripts/lint_clang_format.sh b/scripts/lint_clang_format.sh
new file mode 100755
index 0000000..82b572c
--- /dev/null
+++ b/scripts/lint_clang_format.sh
@@ -0,0 +1,44 @@
+#!/bin/bash
+
+# Copyright 2018 The Dawn Authors
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+clang_format=$1
+base_commit=$2
+
+echo
+skipped_directories="(examples|generator|src/tests/(unittests|end2end)|third_party)"
+# Find the files modified that need formatting
+files_to_check=$(git diff --diff-filter=ACMR --name-only $base_commit | grep -E "*\.(c|cpp|mm|h)$" | grep -vE "^$skipped_directories/*")
+if [ -z "$files_to_check" ]; then
+    echo "No modified files to format."
+    exit 0
+fi
+echo "Checking formatting diff on these files:"
+echo "$files_to_check"
+echo
+files_to_check=$(echo $files_to_check | tr '\n' ' ')
+
+# Run git-clang-format, check if it formatted anything
+format_output=$(scripts/git-clang-format --binary $clang_format --commit $base_commit --diff --style=file $files_to_check)
+if [ "$format_output" == "clang-format did not modify any files" ] || [ "$format_output" == "no modified files to format" ] ; then
+    exit 0
+fi
+
+# clang-format made changes, print them and fail Travis
+echo "Following formatting changes needed:"
+echo
+echo "$format_output"
+echo
+exit 1
diff --git a/scripts/travis_lint_format.sh b/scripts/travis_lint_format.sh
index 730c4e5..3515d60 100755
--- a/scripts/travis_lint_format.sh
+++ b/scripts/travis_lint_format.sh
@@ -1,5 +1,19 @@
 #!/bin/bash
 
+# Copyright 2018 The Dawn Authors
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
 if [ "$TRAVIS_PULL_REQUEST" == "false" ]; then
     echo "Running outside of pull request isn't supported yet"
     exit 0
@@ -10,26 +24,4 @@
 echo "Formatting against $TRAVIS_BRANCH a.k.a. $base_commit..."
 echo
 
-skipped_directories="(examples|generator|src/tests/(unittests|end2end)|third_party)"
-# Find the files modified that need formatting
-files_to_check=$(git diff --diff-filter=ACMR --name-only $base_commit | grep -E "*.(c|cpp|mm|h)$" | grep -vE "^$skipped_directories/*")
-if [ -z "$files_to_check" ]; then
-    echo "No modified files to format."
-    exit 0
-fi
-echo "Checking formatting diff on these files:"
-echo "$files_to_check"
-echo
-files_to_check=$(echo $files_to_check | tr '\n' ' ')
-
-# Run git-clang-format, check if it formatted anything
-format_output=$(scripts/git-clang-format --binary $1 --commit $base_commit --diff --style=file $files_to_check)
-if [ "$format_output" == "clang-format did not modify any files" ] || [ "$format_output" == "no modified files to format" ] ; then
-    exit 0
-fi
-
-# clang-format made changes, print them and fail Travis
-echo "Following formatting changes needed:"
-echo
-echo "$format_output"
-exit 1
+scripts/lint_clang_format.sh $1 $base_commit
