diff --git a/script/static-checks/check-include-order.py b/script/static-checks/check-include-order.py
index 4f605f3..aaf84f1 100755
--- a/script/static-checks/check-include-order.py
+++ b/script/static-checks/check-include-order.py
@@ -8,6 +8,7 @@
 import argparse
 import codecs
 import collections
+import functools
 import os
 import re
 import subprocess
@@ -56,6 +57,20 @@
         return None
 
 
+@functools.lru_cache()
+def dir_include_paths(directory):
+    """Generate a set that contains all includes from a directory"""
+    dir_includes = set()
+    for (root, _dirs, files) in os.walk(directory):
+        for fname in files:
+            if fname.endswith(".h"):
+                names = os.path.join(root, fname).split(os.sep)
+                for i in range(len(names)):
+                    suffix_path = "/".join(names[i:])
+                    dir_includes.add(suffix_path)
+    return dir_includes
+
+
 def inc_order_is_correct(inc_list, path, commit_hash=""):
     """Returns true if the provided list is in order. If not, output error
     messages to stdout."""
@@ -67,37 +82,37 @@
     if commit_hash != "":
         commit_hash = commit_hash + ":"
 
-    # Get list of system includes from libc include directory.
-    libc_incs = [f for f in os.listdir("include/lib/libc") if f.endswith(".h")]
-
     # First, check if all includes are in the appropriate group.
     inc_group = "System"
     incs = collections.defaultdict(list)
     error_msgs = []
+    plat_incs = dir_include_paths("plat") | dir_include_paths("include/plat")
+    libc_incs = dir_include_paths("include/lib/libc")
 
     for inc in inc_list:
-        if inc[1:-1] in libc_incs:
+        inc_path = inc[1:-1]
+        if inc_path in libc_incs:
             if inc_group != "System":
-                error_msgs.append(inc[1:-1] + " should be in system group, at the top")
-        elif (
-            "plat/" in inc
-            or "platform" in inc
-            or (inc.startswith('"') and "plat" in path)
-        ):
+                error_msgs.append(inc_path + " should be in system group, at the top")
+        elif inc_path in plat_incs:
             inc_group = "Platform"
         elif inc_group in ("Project", "System"):
             inc_group = "Project"
         else:
             error_msgs.append(
-                inc[1:-1] + " should be in project group, after system group"
+                inc_path + " should be in project group, after system group"
             )
-        incs[inc_group].append(inc[1:-1])
+        incs[inc_group].append(inc_path)
 
     # Then, check alphabetic order (system, project and user separately).
     if not error_msgs:
         for name, inc_list in incs.items():
             if sorted(inc_list) != inc_list:
-                error_msgs.append("{} includes not in order.".format(name))
+                error_msgs.append(
+                    "{} includes not in order. Include order should be {}".format(
+                        name, ", ".join(sorted(inc_list))
+                    )
+                )
 
     # Output error messages.
     if error_msgs:
diff --git a/script/static-checks/static-checks-coding-style-line-endings.sh b/script/static-checks/static-checks-coding-style-line-endings.sh
index 5442f7d..ae7a6db 100755
--- a/script/static-checks/static-checks-coding-style-line-endings.sh
+++ b/script/static-checks/static-checks-coding-style-line-endings.sh
@@ -7,46 +7,43 @@
 
 TEST_CASE="Line endings not valid"
 
-EXIT_VALUE=0
-
 echo "# Check Line Endings"
 
-LOG_FILE=$(mktemp -t common.XXXX)
+LOG_FILE=`mktemp -t common.XXXX`
 
-if [[ "$2" == "patch" ]]; then
-    cd "$1"
-    parent=$(git merge-base HEAD master | head -1)
-    git diff ${parent}..HEAD --no-ext-diff --unified=0 --exit-code -a --no-prefix | grep -E "^\+" | \
-    grep --files-with-matches $'\r$' &> "$LOG_FILE"
-else
-  # For all the source and doc files
-  # We only return the files that contain CRLF
-  find "." -\( \
-      -name '*.S' -or \
-      -name '*.c' -or \
-      -name '*.h' -or \
-      -name '*.i' -or \
-      -name '*.dts' -or \
-      -name '*.dtsi' -or \
-      -name '*.rst' -or \
-      -name 'Makefile' -or \
-      -name '*.mk' \
-  -\) -exec grep --files-with-matches $'\r$' {} \; &> "$LOG_FILE"
-fi
+# For all the source and doc files
+# We only return the files that contain CRLF
+find "." -\( \
+    -name '*.S' -or \
+    -name '*.c' -or \
+    -name '*.h' -or \
+    -name '*.i' -or \
+    -name '*.dts' -or \
+    -name '*.dtsi' -or \
+    -name '*.rst' -or \
+    -name 'Makefile' -or \
+    -name '*.mk' \
+-\) -exec grep --files-with-matches $'\r$' {} \; &> "$LOG_FILE"
 
 if [[ -s "$LOG_FILE" ]]; then
-    EXIT_VALUE=1
+  EXIT_VALUE=1
+else
+  EXIT_VALUE=0
 fi
 
-{ echo; echo "****** $TEST_CASE ******"; echo; } >> "$LOG_TEST_FILENAME"
-
-{ if [[ "$EXIT_VALUE" == 0 ]]; then \
-      echo "Result : SUCCESS"; \
-  else  \
-      echo "Result : FAILURE"; echo; cat "$LOG_FILE"; \
-  fi \
-} | tee -a "$LOG_TEST_FILENAME"
+echo >> "$LOG_TEST_FILENAME"
+echo "****** $TEST_CASE ******" >> "$LOG_TEST_FILENAME"
+echo >> "$LOG_TEST_FILENAME"
+if [[ "$EXIT_VALUE" == 0 ]]; then
+  echo "Result : SUCCESS" >> "$LOG_TEST_FILENAME"
+else
+  echo "Result : FAILURE" >> "$LOG_TEST_FILENAME"
+  echo >> "$LOG_TEST_FILENAME"
+  cat "$LOG_FILE" >> "$LOG_TEST_FILENAME"
+fi
+echo >> "$LOG_TEST_FILENAME"
 
 rm "$LOG_FILE"
 
 exit "$EXIT_VALUE"
+
diff --git a/script/static-checks/static-checks-cppcheck.sh b/script/static-checks/static-checks-cppcheck.sh
index 40d161f..7f5ed8f 100755
--- a/script/static-checks/static-checks-cppcheck.sh
+++ b/script/static-checks/static-checks-cppcheck.sh
@@ -11,8 +11,6 @@
 
 TF_BASE="$(pwd)"
 
-export LOG_TEST_FILENAME=$(pwd)/static-checks-cppcheck.log
-
 # cppcheck configuration
 COMMON_ARGS=(-j 16 -q -f --std=c99 --error-exitcode=1 --relative-paths="$TF_BASE")
 CHECKS_ARGS=(--enable=warning,style,portability)
diff --git a/script/static-checks/static-checks.sh b/script/static-checks/static-checks.sh
index 882e9e1..6bae729 100755
--- a/script/static-checks/static-checks.sh
+++ b/script/static-checks/static-checks.sh
@@ -61,12 +61,7 @@
 
 # Check line endings
 
-if [ "$IS_CONTINUOUS_INTEGRATION" == 1 ]; then
-    "$CI_ROOT"/script/static-checks/static-checks-coding-style-line-endings.sh . patch
-else
-    "$CI_ROOT"/script/static-checks/static-checks-coding-style-line-endings.sh
-fi
-
+"$CI_ROOT"/script/static-checks/static-checks-coding-style-line-endings.sh
 if [ "$?" != 0 ]; then
   echo "Line ending test: FAILURE"
   ((ERROR_COUNT++))
