diff --git a/.cmake-format.py b/.cmake-format.py
new file mode 100644
index 0000000..cebad07
--- /dev/null
+++ b/.cmake-format.py
@@ -0,0 +1,47 @@
+# How wide to allow formatted cmake files
+line_width = 80
+
+# How many spaces to tab for indent
+tab_size = 2
+
+# If arglists are longer than this, break them always. This introduces some
+# interesting effects with complicated 'if' statements. However, we want file
+# lists to look reasonable. Try to strike a balance.
+max_subargs_per_line = 10
+
+# If true, separate flow control names from their parentheses with a space
+separate_ctrl_name_with_space = False
+
+# If true, separate function names from parentheses with a space
+separate_fn_name_with_space = False
+
+# If a statement is wrapped to more than one line, than dangle the closing
+# parenthesis on it's own line
+dangle_parens = False
+
+# What character to use for bulleted lists
+bullet_char = u'*'
+
+# What character to use as punctuation after numerals in an enumerated list
+enum_char = u'.'
+
+# What style line endings to use in the output.
+line_ending = u'unix'
+
+# Format command names consistently as 'lower' or 'upper' case
+command_case = u'lower'
+
+# Specify structure for custom cmake functions
+additional_commands = {
+  "foo": {
+    "flags": [
+      "BAR",
+      "BAZ"
+    ],
+    "kwargs": {
+      "HEADERS": "*",
+      "DEPENDS": "*",
+      "SOURCES": "*"
+    }
+  }
+}
diff --git a/aom_dsp/aom_dsp.cmake b/aom_dsp/aom_dsp.cmake
index 51fe930..05411ba 100644
--- a/aom_dsp/aom_dsp.cmake
+++ b/aom_dsp/aom_dsp.cmake
@@ -1,16 +1,16 @@
-##
-## Copyright (c) 2017, Alliance for Open Media. All rights reserved
-##
-## This source code is subject to the terms of the BSD 2 Clause License and
-## the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License
-## was not distributed with this source code in the LICENSE file, you can
-## obtain it at www.aomedia.org/license/software. If the Alliance for Open
-## Media Patent License 1.0 was not distributed with this source code in the
-## PATENTS file, you can obtain it at www.aomedia.org/license/patent.
-##
-if (AOM_AOM_DSP_AOM_DSP_CMAKE_)
+#
+# Copyright (c) 2017, Alliance for Open Media. All rights reserved
+#
+# This source code is subject to the terms of the BSD 2 Clause License and the
+# Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License was
+# not distributed with this source code in the LICENSE file, you can obtain it
+# at www.aomedia.org/license/software. If the Alliance for Open Media Patent
+# License 1.0 was not distributed with this source code in the PATENTS file, you
+# can obtain it at www.aomedia.org/license/patent.
+#
+if(AOM_AOM_DSP_AOM_DSP_CMAKE_)
   return()
-endif ()  # AOM_AOM_DSP_AOM_DSP_CMAKE_
+endif() # AOM_AOM_DSP_AOM_DSP_CMAKE_
 set(AOM_AOM_DSP_AOM_DSP_CMAKE_ 1)
 
 set(AOM_DSP_COMMON_SOURCES
@@ -45,8 +45,7 @@
     "${AOM_ROOT}/aom_dsp/x86/aom_subpixel_bilinear_sse2.asm"
     "${AOM_ROOT}/aom_dsp/x86/intrapred_sse2.asm")
 
-set(AOM_DSP_COMMON_INTRIN_SSE2
-    "${AOM_ROOT}/aom_dsp/x86/aom_asm_stubs.c"
+set(AOM_DSP_COMMON_INTRIN_SSE2 "${AOM_ROOT}/aom_dsp/x86/aom_asm_stubs.c"
     "${AOM_ROOT}/aom_dsp/x86/convolve.h"
     "${AOM_ROOT}/aom_dsp/x86/convolve_sse2.h"
     "${AOM_ROOT}/aom_dsp/x86/intrapred_sse2.c"
@@ -92,9 +91,7 @@
     "${AOM_ROOT}/aom_dsp/arm/intrapred_neon_asm.asm"
     "${AOM_ROOT}/aom_dsp/arm/save_reg_neon.asm")
 
-
-set(AOM_DSP_COMMON_INTRIN_NEON
-    ${AOM_DSP_COMMON_INTRIN_NEON}
+set(AOM_DSP_COMMON_INTRIN_NEON ${AOM_DSP_COMMON_INTRIN_NEON}
     "${AOM_ROOT}/aom_dsp/arm/avg_neon.c"
     "${AOM_ROOT}/aom_dsp/arm/fwd_txfm_neon.c"
     "${AOM_ROOT}/aom_dsp/arm/hadamard_neon.c"
@@ -102,8 +99,7 @@
     "${AOM_ROOT}/aom_dsp/arm/intrapred_neon.c"
     "${AOM_ROOT}/aom_dsp/arm/subtract_neon.c")
 
-
-if ("${AOM_TARGET_CPU}" STREQUAL "arm64")
+if("${AOM_TARGET_CPU}" STREQUAL "arm64")
   set(AOM_DSP_COMMON_INTRIN_NEON
       ${AOM_DSP_COMMON_INTRIN_NEON}
       "${AOM_ROOT}/aom_dsp/arm/idct16x16_1_add_neon.c"
@@ -116,7 +112,7 @@
       "${AOM_ROOT}/aom_dsp/arm/idct8x8_add_neon.c"
       "${AOM_ROOT}/aom_dsp/arm/intrapred_neon.c")
 
-endif ()
+endif()
 
 set(AOM_DSP_COMMON_INTRIN_DSPR2
     "${AOM_ROOT}/aom_dsp/mips/common_dspr2.c"
@@ -150,70 +146,56 @@
     "${AOM_ROOT}/aom_dsp/mips/macros_msa.h"
     "${AOM_ROOT}/aom_dsp/mips/txfm_macros_msa.h")
 
-  set(AOM_DSP_COMMON_ASM_SSE2
-      ${AOM_DSP_COMMON_ASM_SSE2}
-      "${AOM_ROOT}/aom_dsp/x86/aom_high_subpixel_8t_sse2.asm"
-      "${AOM_ROOT}/aom_dsp/x86/aom_high_subpixel_bilinear_sse2.asm"
-      "${AOM_ROOT}/aom_dsp/x86/highbd_intrapred_sse2.asm")
+set(AOM_DSP_COMMON_ASM_SSE2 ${AOM_DSP_COMMON_ASM_SSE2}
+    "${AOM_ROOT}/aom_dsp/x86/aom_high_subpixel_8t_sse2.asm"
+    "${AOM_ROOT}/aom_dsp/x86/aom_high_subpixel_bilinear_sse2.asm"
+    "${AOM_ROOT}/aom_dsp/x86/highbd_intrapred_sse2.asm")
 
-  set(AOM_DSP_COMMON_INTRIN_SSE2
-      ${AOM_DSP_COMMON_INTRIN_SSE2}
-      "${AOM_ROOT}/aom_dsp/x86/highbd_intrapred_sse2.c"
-      "${AOM_ROOT}/aom_dsp/x86/highbd_loopfilter_sse2.c")
+set(AOM_DSP_COMMON_INTRIN_SSE2 ${AOM_DSP_COMMON_INTRIN_SSE2}
+    "${AOM_ROOT}/aom_dsp/x86/highbd_intrapred_sse2.c"
+    "${AOM_ROOT}/aom_dsp/x86/highbd_loopfilter_sse2.c")
 
-  set(AOM_DSP_COMMON_INTRIN_SSSE3
-      ${AOM_DSP_COMMON_INTRIN_SSSE3}
-      "${AOM_ROOT}/aom_dsp/x86/highbd_convolve_ssse3.c")
+set(AOM_DSP_COMMON_INTRIN_SSSE3 ${AOM_DSP_COMMON_INTRIN_SSSE3}
+    "${AOM_ROOT}/aom_dsp/x86/highbd_convolve_ssse3.c")
 
-  set(AOM_DSP_COMMON_INTRIN_AVX2
-      ${AOM_DSP_COMMON_INTRIN_AVX2}
-      "${AOM_ROOT}/aom_dsp/x86/highbd_convolve_avx2.c"
-      "${AOM_ROOT}/aom_dsp/x86/highbd_loopfilter_avx2.c")
+set(AOM_DSP_COMMON_INTRIN_AVX2 ${AOM_DSP_COMMON_INTRIN_AVX2}
+    "${AOM_ROOT}/aom_dsp/x86/highbd_convolve_avx2.c"
+    "${AOM_ROOT}/aom_dsp/x86/highbd_loopfilter_avx2.c")
 
-set(AOM_DSP_COMMON_SOURCES
-    ${AOM_DSP_COMMON_SOURCES}
-    "${AOM_ROOT}/aom_dsp/entcode.c"
-    "${AOM_ROOT}/aom_dsp/entcode.h")
+set(AOM_DSP_COMMON_SOURCES ${AOM_DSP_COMMON_SOURCES}
+    "${AOM_ROOT}/aom_dsp/entcode.c" "${AOM_ROOT}/aom_dsp/entcode.h")
 
-if (CONFIG_AV1)
-  set(AOM_DSP_COMMON_SOURCES
-      ${AOM_DSP_COMMON_SOURCES}
-      "${AOM_ROOT}/aom_dsp/inv_txfm.c"
-      "${AOM_ROOT}/aom_dsp/inv_txfm.h")
+if(CONFIG_AV1)
+  set(AOM_DSP_COMMON_SOURCES ${AOM_DSP_COMMON_SOURCES}
+      "${AOM_ROOT}/aom_dsp/inv_txfm.c" "${AOM_ROOT}/aom_dsp/inv_txfm.h")
 
-  set(AOM_DSP_COMMON_ASM_SSE2
-      ${AOM_DSP_COMMON_ASM_SSE2}
+  set(AOM_DSP_COMMON_ASM_SSE2 ${AOM_DSP_COMMON_ASM_SSE2}
       "${AOM_ROOT}/aom_dsp/x86/inv_wht_sse2.asm")
 
-  set(AOM_DSP_COMMON_INTRIN_SSE2
-      ${AOM_DSP_COMMON_INTRIN_SSE2}
+  set(AOM_DSP_COMMON_INTRIN_SSE2 ${AOM_DSP_COMMON_INTRIN_SSE2}
       "${AOM_ROOT}/aom_dsp/x86/inv_txfm_sse2.c"
       "${AOM_ROOT}/aom_dsp/x86/inv_txfm_sse2.h")
-endif ()
+endif()
 
-if (CONFIG_AV1_DECODER)
-  set(AOM_DSP_DECODER_SOURCES
-      "${AOM_ROOT}/aom_dsp/binary_codes_reader.c"
+if(CONFIG_AV1_DECODER)
+  set(AOM_DSP_DECODER_SOURCES "${AOM_ROOT}/aom_dsp/binary_codes_reader.c"
       "${AOM_ROOT}/aom_dsp/binary_codes_reader.h"
       "${AOM_ROOT}/aom_dsp/bitreader.h"
       "${AOM_ROOT}/aom_dsp/bitreader_buffer.c"
       "${AOM_ROOT}/aom_dsp/bitreader_buffer.h")
 
-  set(AOM_DSP_DECODER_SOURCES
-      ${AOM_DSP_DECODER_SOURCES}
+  set(AOM_DSP_DECODER_SOURCES ${AOM_DSP_DECODER_SOURCES}
       "${AOM_ROOT}/aom_dsp/daalaboolreader.c"
-      "${AOM_ROOT}/aom_dsp/daalaboolreader.h"
-      "${AOM_ROOT}/aom_dsp/entdec.c"
+      "${AOM_ROOT}/aom_dsp/daalaboolreader.h" "${AOM_ROOT}/aom_dsp/entdec.c"
       "${AOM_ROOT}/aom_dsp/entdec.h")
 
-  set(AOM_DSP_DECODER_SOURCES
-      ${AOM_DSP_DECODER_SOURCES}
+  set(AOM_DSP_DECODER_SOURCES ${AOM_DSP_DECODER_SOURCES}
       "${AOM_ROOT}/aom_dsp/grain_synthesis.c"
       "${AOM_ROOT}/aom_dsp/grain_synthesis.h")
 
-endif ()
+endif()
 
-if (CONFIG_AV1_ENCODER)
+if(CONFIG_AV1_ENCODER)
   set(AOM_DSP_ENCODER_SOURCES
       "${AOM_ROOT}/aom_dsp/binary_codes_writer.c"
       "${AOM_ROOT}/aom_dsp/binary_codes_writer.h"
@@ -233,16 +215,14 @@
       "${AOM_ROOT}/aom_dsp/variance.c"
       "${AOM_ROOT}/aom_dsp/variance.h")
 
-  set(AOM_DSP_ENCODER_ASM_SSE2
-      ${AOM_DSP_ENCODER_ASM_SSE2}
+  set(AOM_DSP_ENCODER_ASM_SSE2 ${AOM_DSP_ENCODER_ASM_SSE2}
       "${AOM_ROOT}/aom_dsp/x86/halfpix_variance_impl_sse2.asm"
       "${AOM_ROOT}/aom_dsp/x86/sad4d_sse2.asm"
       "${AOM_ROOT}/aom_dsp/x86/sad_sse2.asm"
       "${AOM_ROOT}/aom_dsp/x86/subtract_sse2.asm"
       "${AOM_ROOT}/aom_dsp/x86/subpel_variance_sse2.asm")
 
-  set(AOM_DSP_ENCODER_INTRIN_SSE2
-      "${AOM_ROOT}/aom_dsp/x86/quantize_sse2.c")
+  set(AOM_DSP_ENCODER_INTRIN_SSE2 "${AOM_ROOT}/aom_dsp/x86/quantize_sse2.c")
 
   set(AOM_DSP_ENCODER_ASM_SSSE3_X86_64
       "${AOM_ROOT}/aom_dsp/x86/fwd_txfm_ssse3_x86_64.asm"
@@ -259,14 +239,10 @@
       "${AOM_ROOT}/aom_dsp/x86/variance_avx2.c"
       "${AOM_ROOT}/aom_dsp/x86/variance_impl_avx2.c")
 
-  set(AOM_DSP_ENCODER_SOURCES
-      ${AOM_DSP_ENCODER_SOURCES}
-      "${AOM_ROOT}/aom_dsp/avg.c"
-      "${AOM_ROOT}/aom_dsp/fwd_txfm.c"
-      "${AOM_ROOT}/aom_dsp/fwd_txfm.h"
-      "${AOM_ROOT}/aom_dsp/quantize.c"
-      "${AOM_ROOT}/aom_dsp/quantize.h"
-      "${AOM_ROOT}/aom_dsp/sum_squares.c")
+  set(AOM_DSP_ENCODER_SOURCES ${AOM_DSP_ENCODER_SOURCES}
+      "${AOM_ROOT}/aom_dsp/avg.c" "${AOM_ROOT}/aom_dsp/fwd_txfm.c"
+      "${AOM_ROOT}/aom_dsp/fwd_txfm.h" "${AOM_ROOT}/aom_dsp/quantize.c"
+      "${AOM_ROOT}/aom_dsp/quantize.h" "${AOM_ROOT}/aom_dsp/sum_squares.c")
 
   set(AOM_DSP_ENCODER_INTRIN_SSE2
       ${AOM_DSP_ENCODER_INTRIN_SSE2}
@@ -281,81 +257,66 @@
       "${AOM_ROOT}/aom_dsp/x86/variance_sse2.c"
       "${AOM_ROOT}/aom_dsp/x86/sum_squares_sse2.c")
 
-  set(AOM_DSP_ENCODER_ASM_SSSE3_X86_64
-      ${AOM_DSP_ENCODER_ASM_SSSE3_X86_64}
+  set(AOM_DSP_ENCODER_ASM_SSSE3_X86_64 ${AOM_DSP_ENCODER_ASM_SSSE3_X86_64}
       "${AOM_ROOT}/aom_dsp/x86/avg_ssse3_x86_64.asm"
       "${AOM_ROOT}/aom_dsp/x86/quantize_ssse3_x86_64.asm")
 
-  set(AOM_DSP_ENCODER_AVX_ASM_X86_64
-      ${AOM_DSP_ENCODER_AVX_ASM_X86_64}
+  set(AOM_DSP_ENCODER_AVX_ASM_X86_64 ${AOM_DSP_ENCODER_AVX_ASM_X86_64}
       "${AOM_ROOT}/aom_dsp/x86/quantize_avx_x86_64.asm")
 
-  set(AOM_DSP_ENCODER_INTRIN_SSSE3
-      ${AOM_DSP_ENCODER_INTRIN_SSSE3}
+  set(AOM_DSP_ENCODER_INTRIN_SSSE3 ${AOM_DSP_ENCODER_INTRIN_SSSE3}
       "${AOM_ROOT}/aom_dsp/x86/masked_sad_intrin_ssse3.c"
       "${AOM_ROOT}/aom_dsp/x86/masked_variance_intrin_ssse3.h"
       "${AOM_ROOT}/aom_dsp/x86/masked_variance_intrin_ssse3.c"
       "${AOM_ROOT}/aom_dsp/x86/jnt_variance_ssse3.c"
       "${AOM_ROOT}/aom_dsp/x86/jnt_sad_ssse3.c")
 
-  set(AOM_DSP_ENCODER_INTRIN_SSE2
-      ${AOM_DSP_ENCODER_INTRIN_SSE2}
+  set(AOM_DSP_ENCODER_INTRIN_SSE2 ${AOM_DSP_ENCODER_INTRIN_SSE2}
       "${AOM_ROOT}/aom_dsp/x86/highbd_subtract_sse2.c")
 
-  set(AOM_DSP_ENCODER_ASM_SSE2
-      ${AOM_DSP_ENCODER_ASM_SSE2}
+  set(AOM_DSP_ENCODER_ASM_SSE2 ${AOM_DSP_ENCODER_ASM_SSE2}
       "${AOM_ROOT}/aom_dsp/x86/highbd_sad4d_sse2.asm"
       "${AOM_ROOT}/aom_dsp/x86/highbd_sad_sse2.asm"
       "${AOM_ROOT}/aom_dsp/x86/highbd_subpel_variance_impl_sse2.asm"
       "${AOM_ROOT}/aom_dsp/x86/highbd_variance_impl_sse2.asm")
 
-  set(AOM_DSP_ENCODER_INTRIN_SSE2
-      ${AOM_DSP_ENCODER_INTRIN_SSE2}
+  set(AOM_DSP_ENCODER_INTRIN_SSE2 ${AOM_DSP_ENCODER_INTRIN_SSE2}
       "${AOM_ROOT}/aom_dsp/x86/highbd_variance_sse2.c")
 
-  set(AOM_DSP_ENCODER_INTRIN_SSE4_1
-      ${AOM_DSP_ENCODER_INTRIN_SSE4_1}
+  set(AOM_DSP_ENCODER_INTRIN_SSE4_1 ${AOM_DSP_ENCODER_INTRIN_SSE4_1}
       "${AOM_ROOT}/aom_dsp/x86/highbd_variance_sse4.c"
       "${AOM_ROOT}/aom_dsp/x86/obmc_sad_sse4.c"
       "${AOM_ROOT}/aom_dsp/x86/obmc_variance_sse4.c")
 
-  set(AOM_DSP_ENCODER_INTRIN_AVX2
-      ${AOM_DSP_ENCODER_INTRIN_AVX2}
+  set(AOM_DSP_ENCODER_INTRIN_AVX2 ${AOM_DSP_ENCODER_INTRIN_AVX2}
       "${AOM_ROOT}/aom_dsp/x86/sad_highbd_avx2.c")
 
-  set(AOM_DSP_ENCODER_INTRIN_NEON
-      ${AOM_DSP_ENCODER_INTRIN_NEON}
+  set(AOM_DSP_ENCODER_INTRIN_NEON ${AOM_DSP_ENCODER_INTRIN_NEON}
       "${AOM_ROOT}/aom_dsp/arm/sad4d_neon.c"
       "${AOM_ROOT}/aom_dsp/arm/sad_neon.c"
       "${AOM_ROOT}/aom_dsp/arm/subpel_variance_neon.c"
       "${AOM_ROOT}/aom_dsp/arm/variance_neon.c")
 
-  set(AOM_DSP_ENCODER_INTRIN_MSA
-      "${AOM_ROOT}/aom_dsp/mips/sad_msa.c"
+  set(AOM_DSP_ENCODER_INTRIN_MSA "${AOM_ROOT}/aom_dsp/mips/sad_msa.c"
       "${AOM_ROOT}/aom_dsp/mips/subtract_msa.c"
       "${AOM_ROOT}/aom_dsp/mips/variance_msa.c"
       "${AOM_ROOT}/aom_dsp/mips/sub_pixel_variance_msa.c")
 
-  set(AOM_DSP_ENCODER_SOURCES
-      ${AOM_DSP_ENCODER_SOURCES}
+  set(AOM_DSP_ENCODER_SOURCES ${AOM_DSP_ENCODER_SOURCES}
       "${AOM_ROOT}/aom_dsp/daalaboolwriter.c"
-      "${AOM_ROOT}/aom_dsp/daalaboolwriter.h"
-      "${AOM_ROOT}/aom_dsp/entenc.c"
+      "${AOM_ROOT}/aom_dsp/daalaboolwriter.h" "${AOM_ROOT}/aom_dsp/entenc.c"
       "${AOM_ROOT}/aom_dsp/entenc.h")
 
-  if (CONFIG_INTERNAL_STATS)
-    set(AOM_DSP_ENCODER_SOURCES
-        ${AOM_DSP_ENCODER_SOURCES}
-        "${AOM_ROOT}/aom_dsp/fastssim.c"
-        "${AOM_ROOT}/aom_dsp/psnrhvs.c"
-        "${AOM_ROOT}/aom_dsp/ssim.c"
-        "${AOM_ROOT}/aom_dsp/ssim.h")
-  endif ()
-endif ()
+  if(CONFIG_INTERNAL_STATS)
+    set(AOM_DSP_ENCODER_SOURCES ${AOM_DSP_ENCODER_SOURCES}
+        "${AOM_ROOT}/aom_dsp/fastssim.c" "${AOM_ROOT}/aom_dsp/psnrhvs.c"
+        "${AOM_ROOT}/aom_dsp/ssim.c" "${AOM_ROOT}/aom_dsp/ssim.h")
+  endif()
+endif()
 
 # Creates aom_dsp build targets. Must not be called until after libaom target
 # has been created.
-function (setup_aom_dsp_targets)
+function(setup_aom_dsp_targets)
   add_library(aom_dsp_common OBJECT ${AOM_DSP_COMMON_SOURCES})
   list(APPEND AOM_LIB_TARGETS aom_dsp_common)
   create_dummy_source_file("aom_av1" "c" "dummy_source_file")
@@ -367,110 +328,109 @@
   # dummy source file to the aom_dsp target.
   add_dummy_source_file_to_target("aom_dsp" "c")
 
-  if (CONFIG_AV1_DECODER)
+  if(CONFIG_AV1_DECODER)
     add_library(aom_dsp_decoder OBJECT ${AOM_DSP_DECODER_SOURCES})
     set(AOM_LIB_TARGETS ${AOM_LIB_TARGETS} aom_dsp_decoder)
     target_sources(aom PRIVATE $<TARGET_OBJECTS:aom_dsp_decoder>)
-  endif ()
+  endif()
 
-  if (CONFIG_AV1_ENCODER)
+  if(CONFIG_AV1_ENCODER)
     add_library(aom_dsp_encoder OBJECT ${AOM_DSP_ENCODER_SOURCES})
     set(AOM_LIB_TARGETS ${AOM_LIB_TARGETS} aom_dsp_encoder)
     target_sources(aom PRIVATE $<TARGET_OBJECTS:aom_dsp_encoder>)
-  endif ()
+  endif()
 
-  if (HAVE_SSE2)
+  if(HAVE_SSE2)
     add_asm_library("aom_dsp_common_sse2" "AOM_DSP_COMMON_ASM_SSE2" "aom")
     add_intrinsics_object_library("-msse2" "sse2" "aom_dsp_common"
-                                   "AOM_DSP_COMMON_INTRIN_SSE2" "aom")
+                                  "AOM_DSP_COMMON_INTRIN_SSE2" "aom")
 
-    if (CONFIG_AV1_ENCODER)
-      add_asm_library("aom_dsp_encoder_sse2" "AOM_DSP_ENCODER_ASM_SSE2"
-                      "aom")
+    if(CONFIG_AV1_ENCODER)
+      add_asm_library("aom_dsp_encoder_sse2" "AOM_DSP_ENCODER_ASM_SSE2" "aom")
       add_intrinsics_object_library("-msse2" "sse2" "aom_dsp_encoder"
                                     "AOM_DSP_ENCODER_INTRIN_SSE2" "aom")
     endif()
-  endif ()
+  endif()
 
-  if (HAVE_SSSE3)
+  if(HAVE_SSSE3)
     add_asm_library("aom_dsp_common_ssse3" "AOM_DSP_COMMON_ASM_SSSE3" "aom")
     add_intrinsics_object_library("-mssse3" "ssse3" "aom_dsp_common"
                                   "AOM_DSP_COMMON_INTRIN_SSSE3" "aom")
 
-    if (CONFIG_AV1_ENCODER)
-      if ("${AOM_TARGET_CPU}" STREQUAL "x86_64")
+    if(CONFIG_AV1_ENCODER)
+      if("${AOM_TARGET_CPU}" STREQUAL "x86_64")
         list(APPEND AOM_DSP_ENCODER_ASM_SSSE3
-             ${AOM_DSP_ENCODER_ASM_SSSE3_X86_64})
-      endif ()
+                    ${AOM_DSP_ENCODER_ASM_SSSE3_X86_64})
+      endif()
       add_asm_library("aom_dsp_encoder_ssse3" "AOM_DSP_ENCODER_ASM_SSSE3" "aom")
-      if (AOM_DSP_ENCODER_INTRIN_SSSE3)
+      if(AOM_DSP_ENCODER_INTRIN_SSSE3)
         add_intrinsics_object_library("-mssse3" "ssse3" "aom_dsp_encoder"
                                       "AOM_DSP_ENCODER_INTRIN_SSSE3" "aom")
-      endif ()
-    endif ()
-  endif ()
+      endif()
+    endif()
+  endif()
 
-  if (HAVE_SSE4_1)
+  if(HAVE_SSE4_1)
     add_intrinsics_object_library("-msse4.1" "sse4_1" "aom_dsp_common"
                                   "AOM_DSP_COMMON_INTRIN_SSE4_1" "aom")
-    if (CONFIG_AV1_ENCODER)
-      if (AOM_DSP_ENCODER_INTRIN_SSE4_1)
+    if(CONFIG_AV1_ENCODER)
+      if(AOM_DSP_ENCODER_INTRIN_SSE4_1)
         add_intrinsics_object_library("-msse4.1" "sse4_1" "aom_dsp_encoder"
                                       "AOM_DSP_ENCODER_INTRIN_SSE4_1" "aom")
-      endif ()
-    endif ()
-  endif ()
+      endif()
+    endif()
+  endif()
 
-  if (HAVE_AVX AND "${AOM_TARGET_CPU}" STREQUAL "x86_64")
-    if (CONFIG_AV1_ENCODER)
+  if(HAVE_AVX AND "${AOM_TARGET_CPU}" STREQUAL "x86_64")
+    if(CONFIG_AV1_ENCODER)
       add_asm_library("aom_dsp_encoder_avx" "AOM_DSP_ENCODER_AVX_ASM_X86_64"
                       "aom")
-    endif ()
-  endif ()
+    endif()
+  endif()
 
-  if (HAVE_AVX2)
+  if(HAVE_AVX2)
     add_intrinsics_object_library("-mavx2" "avx2" "aom_dsp_common"
                                   "AOM_DSP_COMMON_INTRIN_AVX2" "aom")
-    if (CONFIG_AV1_ENCODER)
+    if(CONFIG_AV1_ENCODER)
       add_intrinsics_object_library("-mavx2" "avx2" "aom_dsp_encoder"
                                     "AOM_DSP_ENCODER_INTRIN_AVX2" "aom")
-    endif ()
-  endif ()
+    endif()
+  endif()
 
-  if (HAVE_NEON_ASM)
-    if (AOM_ADS2GAS_REQUIRED)
+  if(HAVE_NEON_ASM)
+    if(AOM_ADS2GAS_REQUIRED)
       add_gas_asm_library("aom_dsp_common_neon" "AOM_DSP_COMMON_ASM_NEON" "aom")
-    else ()
+    else()
       add_asm_library("aom_dsp_common_neon" "AOM_DSP_COMMON_ASM_NEON" "aom")
-    endif ()
-  endif ()
+    endif()
+  endif()
 
-  if (HAVE_NEON)
+  if(HAVE_NEON)
     add_intrinsics_object_library("${AOM_NEON_INTRIN_FLAG}" "neon"
                                   "aom_dsp_common" "AOM_DSP_COMMON_INTRIN_NEON"
                                   "aom")
-    if (CONFIG_AV1_ENCODER)
+    if(CONFIG_AV1_ENCODER)
       add_intrinsics_object_library("${AOM_NEON_INTRIN_FLAG}" "neon"
-                                    "aom_dsp_encoder" "AOM_DSP_ENCODER_INTRIN_NEON"
-                                    "aom")
-    endif ()
-  endif ()
+                                    "aom_dsp_encoder"
+                                    "AOM_DSP_ENCODER_INTRIN_NEON" "aom")
+    endif()
+  endif()
 
-  if (HAVE_DSPR2)
+  if(HAVE_DSPR2)
     add_intrinsics_object_library("" "dspr2" "aom_dsp_common"
                                   "AOM_DSP_COMMON_INTRIN_DSPR2" "aom")
-  endif ()
+  endif()
 
-  if (HAVE_MSA)
+  if(HAVE_MSA)
     add_intrinsics_object_library("" "msa" "aom_dsp_common"
                                   "AOM_DSP_COMMON_INTRIN_MSA" "aom")
-    if (CONFIG_AV1_ENCODER)
+    if(CONFIG_AV1_ENCODER)
       add_intrinsics_object_library("" "msa" "aom_dsp_encoder"
                                     "AOM_DSP_ENCODER_INTRIN_MSA" "aom")
-    endif ()
-  endif ()
+    endif()
+  endif()
 
   # Pass the new lib targets up to the parent scope instance of
   # $AOM_LIB_TARGETS.
   set(AOM_LIB_TARGETS ${AOM_LIB_TARGETS} PARENT_SCOPE)
-endfunction ()
+endfunction()
diff --git a/aom_mem/aom_mem.cmake b/aom_mem/aom_mem.cmake
index 3af78d0..d4bd38a 100644
--- a/aom_mem/aom_mem.cmake
+++ b/aom_mem/aom_mem.cmake
@@ -1,27 +1,26 @@
-##
-## Copyright (c) 2017, Alliance for Open Media. All rights reserved
-##
-## This source code is subject to the terms of the BSD 2 Clause License and
-## the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License
-## was not distributed with this source code in the LICENSE file, you can
-## obtain it at www.aomedia.org/license/software. If the Alliance for Open
-## Media Patent License 1.0 was not distributed with this source code in the
-## PATENTS file, you can obtain it at www.aomedia.org/license/patent.
-##
-if (AOM_AOM_MEM_AOM_MEM_CMAKE_)
+#
+# Copyright (c) 2017, Alliance for Open Media. All rights reserved
+#
+# This source code is subject to the terms of the BSD 2 Clause License and the
+# Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License was
+# not distributed with this source code in the LICENSE file, you can obtain it
+# at www.aomedia.org/license/software. If the Alliance for Open Media Patent
+# License 1.0 was not distributed with this source code in the PATENTS file, you
+# can obtain it at www.aomedia.org/license/patent.
+#
+if(AOM_AOM_MEM_AOM_MEM_CMAKE_)
   return()
-endif ()  # AOM_AOM_MEM_AOM_MEM_CMAKE_
+endif() # AOM_AOM_MEM_AOM_MEM_CMAKE_
 set(AOM_AOM_MEM_AOM_MEM_CMAKE_ 1)
 
-set(AOM_MEM_SOURCES
-    "${AOM_ROOT}/aom_mem/aom_mem.c"
+set(AOM_MEM_SOURCES "${AOM_ROOT}/aom_mem/aom_mem.c"
     "${AOM_ROOT}/aom_mem/aom_mem.h"
     "${AOM_ROOT}/aom_mem/include/aom_mem_intrnl.h")
 
 # Creates the aom_mem build target and makes libaom depend on it. The libaom
 # target must exist before this function is called.
-function (setup_aom_mem_targets)
+function(setup_aom_mem_targets)
   add_library(aom_mem OBJECT ${AOM_MEM_SOURCES})
   set(AOM_LIB_TARGETS ${AOM_LIB_TARGETS} aom_mem PARENT_SCOPE)
   target_sources(aom PRIVATE $<TARGET_OBJECTS:aom_mem>)
-endfunction ()
+endfunction()
diff --git a/aom_ports/aom_ports.cmake b/aom_ports/aom_ports.cmake
index 7e28342..4c3c797 100644
--- a/aom_ports/aom_ports.cmake
+++ b/aom_ports/aom_ports.cmake
@@ -1,70 +1,68 @@
-##
-## Copyright (c) 2017, Alliance for Open Media. All rights reserved
-##
-## This source code is subject to the terms of the BSD 2 Clause License and
-## the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License
-## was not distributed with this source code in the LICENSE file, you can
-## obtain it at www.aomedia.org/license/software. If the Alliance for Open
-## Media Patent License 1.0 was not distributed with this source code in the
-## PATENTS file, you can obtain it at www.aomedia.org/license/patent.
-##
-if (AOM_AOM_PORTS_AOM_PORTS_CMAKE_)
+#
+# Copyright (c) 2017, Alliance for Open Media. All rights reserved
+#
+# This source code is subject to the terms of the BSD 2 Clause License and the
+# Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License was
+# not distributed with this source code in the LICENSE file, you can obtain it
+# at www.aomedia.org/license/software. If the Alliance for Open Media Patent
+# License 1.0 was not distributed with this source code in the PATENTS file, you
+# can obtain it at www.aomedia.org/license/patent.
+#
+if(AOM_AOM_PORTS_AOM_PORTS_CMAKE_)
   return()
-endif ()  # AOM_AOM_PORTS_AOM_PORTS_CMAKE_
+endif() # AOM_AOM_PORTS_AOM_PORTS_CMAKE_
 set(AOM_AOM_PORTS_AOM_PORTS_CMAKE_ 1)
 
-set(AOM_PORTS_INCLUDES
-    "${AOM_ROOT}/aom_ports/aom_once.h"
-    "${AOM_ROOT}/aom_ports/aom_timer.h"
-    "${AOM_ROOT}/aom_ports/bitops.h"
-    "${AOM_ROOT}/aom_ports/emmintrin_compat.h"
-    "${AOM_ROOT}/aom_ports/mem.h"
-    "${AOM_ROOT}/aom_ports/mem_ops.h"
-    "${AOM_ROOT}/aom_ports/mem_ops_aligned.h"
-    "${AOM_ROOT}/aom_ports/msvc.h"
-    "${AOM_ROOT}/aom_ports/system_state.h")
+set(AOM_PORTS_INCLUDES "${AOM_ROOT}/aom_ports/aom_once.h"
+    "${AOM_ROOT}/aom_ports/aom_timer.h" "${AOM_ROOT}/aom_ports/bitops.h"
+    "${AOM_ROOT}/aom_ports/emmintrin_compat.h" "${AOM_ROOT}/aom_ports/mem.h"
+    "${AOM_ROOT}/aom_ports/mem_ops.h" "${AOM_ROOT}/aom_ports/mem_ops_aligned.h"
+    "${AOM_ROOT}/aom_ports/msvc.h" "${AOM_ROOT}/aom_ports/system_state.h")
 
 set(AOM_PORTS_ASM_X86 "${AOM_ROOT}/aom_ports/emms.asm")
 
-set(AOM_PORTS_INCLUDES_X86
-    "${AOM_ROOT}/aom_ports/x86_abi_support.asm")
+set(AOM_PORTS_INCLUDES_X86 "${AOM_ROOT}/aom_ports/x86_abi_support.asm")
 
-set(AOM_PORTS_SOURCES_ARM
-    "${AOM_ROOT}/aom_ports/arm.h"
+set(AOM_PORTS_SOURCES_ARM "${AOM_ROOT}/aom_ports/arm.h"
     "${AOM_ROOT}/aom_ports/arm_cpudetect.c")
 
 # For arm and x86 targets:
-#   Creates the aom_ports build target, adds the includes in aom_ports to the
+#
+# * Creates the aom_ports build target, adds the includes in aom_ports to the
 #   target, and makes libaom depend on it.
+#
 # Otherwise:
-#   Adds the includes in aom_ports to the libaom target.
+#
+# * Adds the includes in aom_ports to the libaom target.
+#
 # For all target platforms:
-#   The libaom target must exist before this function is called.
-function (setup_aom_ports_targets)
-  if ("${AOM_TARGET_CPU}" MATCHES "^x86")
+#
+# * The libaom target must exist before this function is called.
+function(setup_aom_ports_targets)
+  if("${AOM_TARGET_CPU}" MATCHES "^x86")
     add_asm_library("aom_ports" "AOM_PORTS_ASM_X86" "aom")
     set(aom_ports_has_symbols 1)
-  elseif ("${AOM_TARGET_CPU}" MATCHES "arm")
+  elseif("${AOM_TARGET_CPU}" MATCHES "arm")
     add_library(aom_ports OBJECT ${AOM_PORTS_SOURCES_ARM})
     set(aom_ports_has_symbols 1)
     target_sources(aom PRIVATE $<TARGET_OBJECTS:aom_ports>)
-  endif ()
+  endif()
 
-  if (aom_ports_has_symbols)
+  if(aom_ports_has_symbols)
     target_sources(aom_ports PRIVATE ${AOM_PORTS_INCLUDES})
 
-    if ("${AOM_TARGET_CPU}" STREQUAL "x86" OR
-        "${AOM_TARGET_CPU}" STREQUAL "x86_64")
+    if("${AOM_TARGET_CPU}" STREQUAL "x86" OR "${AOM_TARGET_CPU}" STREQUAL
+       "x86_64")
       target_sources(aom_ports PRIVATE ${AOM_PORTS_INCLUDES_X86})
-    endif ()
+    endif()
 
     set(AOM_LIB_TARGETS ${AOM_LIB_TARGETS} PARENT_SCOPE)
-  else ()
+  else()
     target_sources(aom PRIVATE ${AOM_PORTS_INCLUDES})
 
-    if ("${AOM_TARGET_CPU}" STREQUAL "x86" OR
-        "${AOM_TARGET_CPU}" STREQUAL "x86_64")
+    if("${AOM_TARGET_CPU}" STREQUAL "x86" OR "${AOM_TARGET_CPU}" STREQUAL
+       "x86_64")
       target_sources(aom PRIVATE ${AOM_PORTS_INCLUDES_X86})
-    endif ()
-  endif ()
-endfunction ()
+    endif()
+  endif()
+endfunction()
diff --git a/aom_scale/aom_scale.cmake b/aom_scale/aom_scale.cmake
index d9c7a71..6e30524 100644
--- a/aom_scale/aom_scale.cmake
+++ b/aom_scale/aom_scale.cmake
@@ -1,20 +1,19 @@
-##
-## Copyright (c) 2017, Alliance for Open Media. All rights reserved
-##
-## This source code is subject to the terms of the BSD 2 Clause License and
-## the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License
-## was not distributed with this source code in the LICENSE file, you can
-## obtain it at www.aomedia.org/license/software. If the Alliance for Open
-## Media Patent License 1.0 was not distributed with this source code in the
-## PATENTS file, you can obtain it at www.aomedia.org/license/patent.
-##
-if (AOM_AOM_SCALE_AOM_SCALE_CMAKE_)
+#
+# Copyright (c) 2017, Alliance for Open Media. All rights reserved
+#
+# This source code is subject to the terms of the BSD 2 Clause License and the
+# Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License was
+# not distributed with this source code in the LICENSE file, you can obtain it
+# at www.aomedia.org/license/software. If the Alliance for Open Media Patent
+# License 1.0 was not distributed with this source code in the PATENTS file, you
+# can obtain it at www.aomedia.org/license/patent.
+#
+if(AOM_AOM_SCALE_AOM_SCALE_CMAKE_)
   return()
-endif ()  # AOM_AOM_SCALE_AOM_SCALE_CMAKE_
+endif() # AOM_AOM_SCALE_AOM_SCALE_CMAKE_
 set(AOM_AOM_SCALE_AOM_SCALE_CMAKE_ 1)
 
-set(AOM_SCALE_SOURCES
-    "${AOM_ROOT}/aom_scale/aom_scale.h"
+set(AOM_SCALE_SOURCES "${AOM_ROOT}/aom_scale/aom_scale.h"
     "${AOM_ROOT}/aom_scale/generic/aom_scale.c"
     "${AOM_ROOT}/aom_scale/generic/gen_scalers.c"
     "${AOM_ROOT}/aom_scale/generic/yv12config.c"
@@ -26,14 +25,14 @@
 
 # Creates the aom_scale build target and makes libaom depend on it. The libaom
 # target must exist before this function is called.
-function (setup_aom_scale_targets)
+function(setup_aom_scale_targets)
   add_library(aom_scale OBJECT ${AOM_SCALE_SOURCES})
   target_sources(aom PRIVATE $<TARGET_OBJECTS:aom_scale>)
 
-  if (HAVE_DSPR2)
+  if(HAVE_DSPR2)
     add_intrinsics_object_library("" "dspr2" "aom_scale"
                                   "AOM_SCALE_INTRIN_DSPR2" "aom")
-  endif ()
+  endif()
 
   set(AOM_LIB_TARGETS ${AOM_LIB_TARGETS} aom_scale PARENT_SCOPE)
-endfunction ()
+endfunction()
diff --git a/aom_util/aom_util.cmake b/aom_util/aom_util.cmake
index 9fa6947..c449059 100644
--- a/aom_util/aom_util.cmake
+++ b/aom_util/aom_util.cmake
@@ -1,29 +1,26 @@
-##
-## Copyright (c) 2017, Alliance for Open Media. All rights reserved
-##
-## This source code is subject to the terms of the BSD 2 Clause License and
-## the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License
-## was not distributed with this source code in the LICENSE file, you can
-## obtain it at www.aomedia.org/license/software. If the Alliance for Open
-## Media Patent License 1.0 was not distributed with this source code in the
-## PATENTS file, you can obtain it at www.aomedia.org/license/patent.
-##
-if (AOM_AOM_UTIL_AOM_UTIL_CMAKE_)
+#
+# Copyright (c) 2017, Alliance for Open Media. All rights reserved
+#
+# This source code is subject to the terms of the BSD 2 Clause License and the
+# Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License was
+# not distributed with this source code in the LICENSE file, you can obtain it
+# at www.aomedia.org/license/software. If the Alliance for Open Media Patent
+# License 1.0 was not distributed with this source code in the PATENTS file, you
+# can obtain it at www.aomedia.org/license/patent.
+#
+if(AOM_AOM_UTIL_AOM_UTIL_CMAKE_)
   return()
-endif ()  # AOM_AOM_UTIL_AOM_UTIL_CMAKE_
+endif() # AOM_AOM_UTIL_AOM_UTIL_CMAKE_
 set(AOM_AOM_UTIL_AOM_UTIL_CMAKE_ 1)
 
-set(AOM_UTIL_SOURCES
-    "${AOM_ROOT}/aom_util/aom_thread.c"
-    "${AOM_ROOT}/aom_util/aom_thread.h"
-    "${AOM_ROOT}/aom_util/endian_inl.h"
-    "${AOM_ROOT}/aom_util/debug_util.c"
-    "${AOM_ROOT}/aom_util/debug_util.h")
+set(AOM_UTIL_SOURCES "${AOM_ROOT}/aom_util/aom_thread.c"
+    "${AOM_ROOT}/aom_util/aom_thread.h" "${AOM_ROOT}/aom_util/endian_inl.h"
+    "${AOM_ROOT}/aom_util/debug_util.c" "${AOM_ROOT}/aom_util/debug_util.h")
 
 # Creates the aom_util build target and makes libaom depend on it. The libaom
 # target must exist before this function is called.
-function (setup_aom_util_targets)
+function(setup_aom_util_targets)
   add_library(aom_util OBJECT ${AOM_UTIL_SOURCES})
   set(AOM_LIB_TARGETS ${AOM_LIB_TARGETS} aom_util PARENT_SCOPE)
   target_sources(aom PRIVATE $<TARGET_OBJECTS:aom_util>)
-endfunction ()
+endfunction()
diff --git a/av1/av1.cmake b/av1/av1.cmake
index 7b6b976..68d5095 100644
--- a/av1/av1.cmake
+++ b/av1/av1.cmake
@@ -1,16 +1,16 @@
-##
-## Copyright (c) 2017, Alliance for Open Media. All rights reserved
-##
-## This source code is subject to the terms of the BSD 2 Clause License and
-## the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License
-## was not distributed with this source code in the LICENSE file, you can
-## obtain it at www.aomedia.org/license/software. If the Alliance for Open
-## Media Patent License 1.0 was not distributed with this source code in the
-## PATENTS file, you can obtain it at www.aomedia.org/license/patent.
-##
-if (AOM_AV1_AV1_CMAKE_)
+#
+# Copyright (c) 2017, Alliance for Open Media. All rights reserved
+#
+# This source code is subject to the terms of the BSD 2 Clause License and the
+# Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License was
+# not distributed with this source code in the LICENSE file, you can obtain it
+# at www.aomedia.org/license/software. If the Alliance for Open Media Patent
+# License 1.0 was not distributed with this source code in the PATENTS file, you
+# can obtain it at www.aomedia.org/license/patent.
+#
+if(AOM_AV1_AV1_CMAKE_)
   return()
-endif ()  # AOM_AV1_AV1_CMAKE_
+endif() # AOM_AV1_AV1_CMAKE_
 set(AOM_AV1_AV1_CMAKE_ 1)
 
 set(AOM_AV1_COMMON_SOURCES
@@ -86,9 +86,8 @@
     "${AOM_ROOT}/av1/decoder/dthread.c"
     "${AOM_ROOT}/av1/decoder/dthread.h")
 
-list(APPEND AOM_AV1_DECODER_SOURCES
-     "${AOM_ROOT}/av1/decoder/obu.c"
-     "${AOM_ROOT}/av1/decoder/obu.h")
+list(APPEND AOM_AV1_DECODER_SOURCES "${AOM_ROOT}/av1/decoder/obu.c"
+            "${AOM_ROOT}/av1/decoder/obu.h")
 
 set(AOM_AV1_ENCODER_SOURCES
     "${AOM_ROOT}/av1/av1_cx_iface.c"
@@ -159,8 +158,7 @@
     "${AOM_ROOT}/av1/encoder/tokenize.h"
     "${AOM_ROOT}/av1/encoder/timing.c")
 
-set(AOM_AV1_COMMON_INTRIN_SSE2
-    "${AOM_ROOT}/av1/common/x86/idct_intrin_sse2.c"
+set(AOM_AV1_COMMON_INTRIN_SSE2 "${AOM_ROOT}/av1/common/x86/idct_intrin_sse2.c"
     "${AOM_ROOT}/av1/common/x86/av1_txfm_sse2.h")
 
 set(AOM_AV1_COMMON_INTRIN_SSSE3
@@ -168,8 +166,7 @@
     "${AOM_ROOT}/av1/common/x86/av1_inv_txfm_ssse3.c"
     "${AOM_ROOT}/av1/common/x86/reconinter_ssse3.c")
 
-set(AOM_AV1_COMMON_INTRIN_SSE4_1
-    "${AOM_ROOT}/av1/common/x86/av1_txfm_sse4.c"
+set(AOM_AV1_COMMON_INTRIN_SSE4_1 "${AOM_ROOT}/av1/common/x86/av1_txfm_sse4.c"
     "${AOM_ROOT}/av1/common/x86/av1_txfm_sse4.h"
     "${AOM_ROOT}/av1/common/x86/highbd_inv_txfm_sse4.c"
     "${AOM_ROOT}/av1/common/x86/reconinter_sse4.c")
@@ -186,8 +183,7 @@
     "${AOM_ROOT}/av1/common/mips/msa/av1_idct4x4_msa.c"
     "${AOM_ROOT}/av1/common/mips/msa/av1_idct8x8_msa.c")
 
-set(AOM_AV1_ENCODER_ASM_SSE2
-    "${AOM_ROOT}/av1/encoder/x86/dct_sse2.asm"
+set(AOM_AV1_ENCODER_ASM_SSE2 "${AOM_ROOT}/av1/encoder/x86/dct_sse2.asm"
     "${AOM_ROOT}/av1/encoder/x86/error_sse2.asm"
     "${AOM_ROOT}/av1/encoder/x86/temporal_filter_apply_sse2.asm")
 
@@ -201,8 +197,7 @@
 set(AOM_AV1_ENCODER_ASM_SSSE3_X86_64
     "${AOM_ROOT}/av1/encoder/x86/av1_quantize_ssse3_x86_64.asm")
 
-set(AOM_AV1_ENCODER_INTRIN_SSE4_1
-    ${AOM_AV1_ENCODER_INTRIN_SSE4_1}
+set(AOM_AV1_ENCODER_INTRIN_SSE4_1 ${AOM_AV1_ENCODER_INTRIN_SSE4_1}
     "${AOM_ROOT}/av1/encoder/x86/av1_fwd_txfm1d_sse4.c"
     "${AOM_ROOT}/av1/encoder/x86/av1_fwd_txfm2d_sse4.c"
     "${AOM_ROOT}/av1/encoder/x86/av1_highbd_quantize_sse4.c"
@@ -217,138 +212,104 @@
 set(AOM_AV1_ENCODER_INTRIN_NEON
     "${AOM_ROOT}/av1/encoder/arm/neon/quantize_neon.c")
 
-set(AOM_AV1_ENCODER_INTRIN_MSA
-    "${AOM_ROOT}/av1/encoder/mips/msa/error_msa.c"
+set(AOM_AV1_ENCODER_INTRIN_MSA "${AOM_ROOT}/av1/encoder/mips/msa/error_msa.c"
     "${AOM_ROOT}/av1/encoder/mips/msa/fdct16x16_msa.c"
     "${AOM_ROOT}/av1/encoder/mips/msa/fdct4x4_msa.c"
     "${AOM_ROOT}/av1/encoder/mips/msa/fdct8x8_msa.c"
     "${AOM_ROOT}/av1/encoder/mips/msa/fdct_msa.h"
     "${AOM_ROOT}/av1/encoder/mips/msa/temporal_filter_msa.c")
 
+set(AOM_AV1_COMMON_INTRIN_SSE4_1 ${AOM_AV1_COMMON_INTRIN_SSE4_1}
+    "${AOM_ROOT}/av1/common/x86/av1_highbd_convolve_sse4.c")
 
-  set(AOM_AV1_COMMON_INTRIN_SSE4_1
-      ${AOM_AV1_COMMON_INTRIN_SSE4_1}
-      "${AOM_ROOT}/av1/common/x86/av1_highbd_convolve_sse4.c")
+set(AOM_AV1_COMMON_SOURCES ${AOM_AV1_COMMON_SOURCES}
+    "${AOM_ROOT}/av1/common/cdef.c" "${AOM_ROOT}/av1/common/cdef.h"
+    "${AOM_ROOT}/av1/common/cdef_block.c" "${AOM_ROOT}/av1/common/cdef_block.h")
 
-set(AOM_AV1_COMMON_SOURCES
-    ${AOM_AV1_COMMON_SOURCES}
-    "${AOM_ROOT}/av1/common/cdef.c"
-    "${AOM_ROOT}/av1/common/cdef.h"
-    "${AOM_ROOT}/av1/common/cdef_block.c"
-    "${AOM_ROOT}/av1/common/cdef_block.h")
-
-set(AOM_AV1_ENCODER_SOURCES
-    ${AOM_AV1_ENCODER_SOURCES}
+set(AOM_AV1_ENCODER_SOURCES ${AOM_AV1_ENCODER_SOURCES}
     "${AOM_ROOT}/av1/encoder/pickcdef.c")
 
-set(AOM_AV1_COMMON_INTRIN_SSE2
-    ${AOM_AV1_COMMON_INTRIN_SSE2}
+set(AOM_AV1_COMMON_INTRIN_SSE2 ${AOM_AV1_COMMON_INTRIN_SSE2}
     "${AOM_ROOT}/av1/common/cdef_block_sse2.c")
 
-set(AOM_AV1_COMMON_INTRIN_SSSE3
-    ${AOM_AV1_COMMON_INTRIN_SSSE3}
+set(AOM_AV1_COMMON_INTRIN_SSSE3 ${AOM_AV1_COMMON_INTRIN_SSSE3}
     "${AOM_ROOT}/av1/common/cdef_block_ssse3.c")
 
-set(AOM_AV1_COMMON_INTRIN_SSE4_1
-    ${AOM_AV1_COMMON_INTRIN_SSE4_1}
+set(AOM_AV1_COMMON_INTRIN_SSE4_1 ${AOM_AV1_COMMON_INTRIN_SSE4_1}
     "${AOM_ROOT}/av1/common/cdef_block_sse4.c")
 
-set(AOM_AV1_COMMON_INTRIN_AVX2
-    ${AOM_AV1_COMMON_INTRIN_AVX2}
+set(AOM_AV1_COMMON_INTRIN_AVX2 ${AOM_AV1_COMMON_INTRIN_AVX2}
     "${AOM_ROOT}/av1/common/cdef_block_avx2.c")
 
-set(AOM_AV1_COMMON_INTRIN_NEON
-    ${AOM_AV1_COMMON_INTRIN_NEON}
+set(AOM_AV1_COMMON_INTRIN_NEON ${AOM_AV1_COMMON_INTRIN_NEON}
     "${AOM_ROOT}/av1/common/cdef_block_neon.c")
 
-set(AOM_AV1_COMMON_INTRIN_SSE2
-    ${AOM_AV1_COMMON_INTRIN_SSE2}
+set(AOM_AV1_COMMON_INTRIN_SSE2 ${AOM_AV1_COMMON_INTRIN_SSE2}
     "${AOM_ROOT}/av1/common/x86/convolve_2d_sse2.c")
 
-set(AOM_AV1_COMMON_INTRIN_AVX2
-    ${AOM_AV1_COMMON_INTRIN_AVX2}
+set(AOM_AV1_COMMON_INTRIN_AVX2 ${AOM_AV1_COMMON_INTRIN_AVX2}
     "${AOM_ROOT}/av1/common/x86/convolve_2d_avx2.c")
 
-set(AOM_AV1_COMMON_INTRIN_AVX2
-    ${AOM_AV1_COMMON_INTRIN_AVX2}
+set(AOM_AV1_COMMON_INTRIN_AVX2 ${AOM_AV1_COMMON_INTRIN_AVX2}
     "${AOM_ROOT}/av1/common/x86/highbd_convolve_2d_avx2.c")
 
-set(AOM_AV1_COMMON_INTRIN_SSSE3
-    ${AOM_AV1_COMMON_INTRIN_SSSE3}
+set(AOM_AV1_COMMON_INTRIN_SSSE3 ${AOM_AV1_COMMON_INTRIN_SSSE3}
     "${AOM_ROOT}/av1/common/x86/highbd_convolve_2d_ssse3.c")
 
-set(AOM_AV1_COMMON_INTRIN_SSE4_1
-    ${AOM_AV1_COMMON_INTRIN_SSE4_1}
+set(AOM_AV1_COMMON_INTRIN_SSE4_1 ${AOM_AV1_COMMON_INTRIN_SSE4_1}
     "${AOM_ROOT}/av1/common/x86/highbd_convolve_2d_sse4.c")
 
-set(AOM_AV1_COMMON_INTRIN_SSE2
-    ${AOM_AV1_COMMON_INTRIN_SSE2}
+set(AOM_AV1_COMMON_INTRIN_SSE2 ${AOM_AV1_COMMON_INTRIN_SSE2}
     "${AOM_ROOT}/av1/common/x86/highbd_convolve_2d_sse2.c")
 
-
-set(AOM_AV1_COMMON_INTRIN_AVX2
-    ${AOM_AV1_COMMON_INTRIN_AVX2}
+set(AOM_AV1_COMMON_INTRIN_AVX2 ${AOM_AV1_COMMON_INTRIN_AVX2}
     "${AOM_ROOT}/av1/common/x86/highbd_jnt_convolve_avx2.c")
 
-set(AOM_AV1_COMMON_INTRIN_SSE4_1
-    ${AOM_AV1_COMMON_INTRIN_SSE4_1}
+set(AOM_AV1_COMMON_INTRIN_SSE4_1 ${AOM_AV1_COMMON_INTRIN_SSE4_1}
     "${AOM_ROOT}/av1/common/x86/highbd_jnt_convolve_sse4.c")
 
-set(AOM_AV1_COMMON_INTRIN_SSE2
-    ${AOM_AV1_COMMON_INTRIN_SSE2}
+set(AOM_AV1_COMMON_INTRIN_SSE2 ${AOM_AV1_COMMON_INTRIN_SSE2}
     "${AOM_ROOT}/av1/common/x86/jnt_convolve_sse2.c")
 
-set(AOM_AV1_COMMON_INTRIN_SSSE3
-    ${AOM_AV1_COMMON_INTRIN_SSSE3}
+set(AOM_AV1_COMMON_INTRIN_SSSE3 ${AOM_AV1_COMMON_INTRIN_SSSE3}
     "${AOM_ROOT}/av1/common/x86/jnt_convolve_ssse3.c")
 
-set(AOM_AV1_COMMON_INTRIN_AVX2
-    ${AOM_AV1_COMMON_INTRIN_AVX2}
+set(AOM_AV1_COMMON_INTRIN_AVX2 ${AOM_AV1_COMMON_INTRIN_AVX2}
     "${AOM_ROOT}/av1/common/x86/jnt_convolve_avx2.c")
 
-set(AOM_AV1_COMMON_INTRIN_SSE4_1
-    ${AOM_AV1_COMMON_INTRIN_SSE4_1}
+set(AOM_AV1_COMMON_INTRIN_SSE4_1 ${AOM_AV1_COMMON_INTRIN_SSE4_1}
     "${AOM_ROOT}/av1/common/x86/av1_convolve_scale_sse4.c")
 
-set(AOM_AV1_COMMON_INTRIN_SSE2
-    ${AOM_AV1_COMMON_INTRIN_SSE2}
+set(AOM_AV1_COMMON_INTRIN_SSE2 ${AOM_AV1_COMMON_INTRIN_SSE2}
     "${AOM_ROOT}/av1/common/x86/convolve_sse2.c")
 
-set(AOM_AV1_COMMON_INTRIN_SSE4_1
-    ${AOM_AV1_COMMON_INTRIN_SSE4_1}
+set(AOM_AV1_COMMON_INTRIN_SSE4_1 ${AOM_AV1_COMMON_INTRIN_SSE4_1}
     "${AOM_ROOT}/av1/common/x86/av1_convolve_horiz_rs_sse4.c")
 
-set(AOM_AV1_COMMON_INTRIN_AVX2
-    ${AOM_AV1_COMMON_INTRIN_AVX2}
+set(AOM_AV1_COMMON_INTRIN_AVX2 ${AOM_AV1_COMMON_INTRIN_AVX2}
     "${AOM_ROOT}/av1/common/x86/convolve_avx2.c")
 
-set(AOM_AV1_COMMON_INTRIN_SSE2
-    ${AOM_AV1_COMMON_INTRIN_SSE2}
+set(AOM_AV1_COMMON_INTRIN_SSE2 ${AOM_AV1_COMMON_INTRIN_SSE2}
     "${AOM_ROOT}/av1/common/x86/wiener_convolve_sse2.c")
 
-set(AOM_AV1_COMMON_INTRIN_SSSE3
-    ${AOM_AV1_COMMON_INTRIN_SSSE3}
+set(AOM_AV1_COMMON_INTRIN_SSSE3 ${AOM_AV1_COMMON_INTRIN_SSSE3}
     "${AOM_ROOT}/av1/common/x86/highbd_wiener_convolve_ssse3.c")
 
-set(AOM_AV1_COMMON_INTRIN_AVX2
-    ${AOM_AV1_COMMON_INTRIN_AVX2}
+set(AOM_AV1_COMMON_INTRIN_AVX2 ${AOM_AV1_COMMON_INTRIN_AVX2}
     "${AOM_ROOT}/av1/common/x86/highbd_wiener_convolve_avx2.c"
     "${AOM_ROOT}/av1/common/x86/wiener_convolve_avx2.c")
 
-set(AOM_AV1_ENCODER_SOURCES
-    ${AOM_AV1_ENCODER_SOURCES}
+set(AOM_AV1_ENCODER_SOURCES ${AOM_AV1_ENCODER_SOURCES}
     "${AOM_ROOT}/av1/encoder/wedge_utils.c")
 
-set(AOM_AV1_ENCODER_INTRIN_SSE2
-    ${AOM_AV1_ENCODER_INTRIN_SSE2}
+set(AOM_AV1_ENCODER_INTRIN_SSE2 ${AOM_AV1_ENCODER_INTRIN_SSE2}
     "${AOM_ROOT}/av1/encoder/x86/wedge_utils_sse2.c")
 
-if (CONFIG_ACCOUNTING)
-  set(AOM_AV1_DECODER_SOURCES
-      ${AOM_AV1_DECODER_SOURCES}
+if(CONFIG_ACCOUNTING)
+  set(AOM_AV1_DECODER_SOURCES ${AOM_AV1_DECODER_SOURCES}
       "${AOM_ROOT}/av1/decoder/accounting.c"
       "${AOM_ROOT}/av1/decoder/accounting.h")
-endif ()
+endif()
 
 set(AOM_AV1_ENCODER_SOURCES
     ${AOM_AV1_ENCODER_SOURCES}
@@ -365,128 +326,97 @@
     "${AOM_ROOT}/third_party/fastfeat/fast.h"
     "${AOM_ROOT}/third_party/fastfeat/nonmax.c")
 
-set(AOM_AV1_ENCODER_INTRIN_SSE4_1
-    ${AOM_AV1_ENCODER_INTRIN_SSE4_1}
+set(AOM_AV1_ENCODER_INTRIN_SSE4_1 ${AOM_AV1_ENCODER_INTRIN_SSE4_1}
     "${AOM_ROOT}/av1/encoder/x86/corner_match_sse4.c")
 
-set(AOM_AV1_ENCODER_INTRIN_SSE4_2
-    ${AOM_AV1_ENCODER_INTRIN_SSE4_2}
+set(AOM_AV1_ENCODER_INTRIN_SSE4_2 ${AOM_AV1_ENCODER_INTRIN_SSE4_2}
     "${AOM_ROOT}/av1/encoder/x86/hash_sse42.c")
 
-if (CONFIG_INSPECTION)
-  set(AOM_AV1_DECODER_SOURCES
-      ${AOM_AV1_DECODER_SOURCES}
+if(CONFIG_INSPECTION)
+  set(AOM_AV1_DECODER_SOURCES ${AOM_AV1_DECODER_SOURCES}
       "${AOM_ROOT}/av1/decoder/inspection.c"
       "${AOM_ROOT}/av1/decoder/inspection.h")
-endif ()
+endif()
 
-if (CONFIG_INTERNAL_STATS)
-  set(AOM_AV1_ENCODER_SOURCES
-      ${AOM_AV1_ENCODER_SOURCES}
+if(CONFIG_INTERNAL_STATS)
+  set(AOM_AV1_ENCODER_SOURCES ${AOM_AV1_ENCODER_SOURCES}
       "${AOM_ROOT}/av1/encoder/blockiness.c")
-endif ()
+endif()
 
-set(AOM_AV1_COMMON_SOURCES
-    ${AOM_AV1_COMMON_SOURCES}
-    "${AOM_ROOT}/av1/common/txb_common.c"
-    "${AOM_ROOT}/av1/common/txb_common.h")
+set(AOM_AV1_COMMON_SOURCES ${AOM_AV1_COMMON_SOURCES}
+    "${AOM_ROOT}/av1/common/txb_common.c" "${AOM_ROOT}/av1/common/txb_common.h")
 
-set(AOM_AV1_DECODER_SOURCES
-    ${AOM_AV1_DECODER_SOURCES}
-    "${AOM_ROOT}/av1/decoder/decodetxb.c"
-    "${AOM_ROOT}/av1/decoder/decodetxb.h")
+set(AOM_AV1_DECODER_SOURCES ${AOM_AV1_DECODER_SOURCES}
+    "${AOM_ROOT}/av1/decoder/decodetxb.c" "${AOM_ROOT}/av1/decoder/decodetxb.h")
 
-set(AOM_AV1_ENCODER_SOURCES
-    ${AOM_AV1_ENCODER_SOURCES}
-    "${AOM_ROOT}/av1/encoder/encodetxb.c"
-    "${AOM_ROOT}/av1/encoder/encodetxb.h")
+set(AOM_AV1_ENCODER_SOURCES ${AOM_AV1_ENCODER_SOURCES}
+    "${AOM_ROOT}/av1/encoder/encodetxb.c" "${AOM_ROOT}/av1/encoder/encodetxb.h")
 
-set(AOM_AV1_ENCODER_INTRIN_SSE2
-    ${AOM_AV1_ENCODER_INTRIN_SSE2}
+set(AOM_AV1_ENCODER_INTRIN_SSE2 ${AOM_AV1_ENCODER_INTRIN_SSE2}
     "${AOM_ROOT}/av1/encoder/x86/encodetxb_sse2.c")
 
-set(AOM_AV1_ENCODER_INTRIN_SSE4_1
-    ${AOM_AV1_ENCODER_INTRIN_SSE4_1}
+set(AOM_AV1_ENCODER_INTRIN_SSE4_1 ${AOM_AV1_ENCODER_INTRIN_SSE4_1}
     "${AOM_ROOT}/av1/encoder/x86/encodetxb_sse4.c")
 
-set(AOM_AV1_COMMON_SOURCES
-    ${AOM_AV1_COMMON_SOURCES}
-    "${AOM_ROOT}/av1/common/cfl.c"
-    "${AOM_ROOT}/av1/common/cfl.h")
+set(AOM_AV1_COMMON_SOURCES ${AOM_AV1_COMMON_SOURCES}
+    "${AOM_ROOT}/av1/common/cfl.c" "${AOM_ROOT}/av1/common/cfl.h")
 
-set(AOM_AV1_COMMON_INTRIN_SSE2
-    ${AOM_AV1_COMMON_INTRIN_SSE2}
+set(AOM_AV1_COMMON_INTRIN_SSE2 ${AOM_AV1_COMMON_INTRIN_SSE2}
     "${AOM_ROOT}/av1/common/x86/cfl_sse2.c")
 
-set(AOM_AV1_COMMON_INTRIN_SSSE3
-    ${AOM_AV1_COMMON_INTRIN_SSSE3}
+set(AOM_AV1_COMMON_INTRIN_SSSE3 ${AOM_AV1_COMMON_INTRIN_SSSE3}
     "${AOM_ROOT}/av1/common/x86/cfl_ssse3.c")
 
-set(AOM_AV1_COMMON_INTRIN_AVX2
-    ${AOM_AV1_COMMON_INTRIN_AVX2}
+set(AOM_AV1_COMMON_INTRIN_AVX2 ${AOM_AV1_COMMON_INTRIN_AVX2}
     "${AOM_ROOT}/av1/common/x86/cfl_avx2.c")
 
-set(AOM_AV1_COMMON_INTRIN_NEON
-    ${AOM_AV1_COMMON_INTRIN_NEON}
+set(AOM_AV1_COMMON_INTRIN_NEON ${AOM_AV1_COMMON_INTRIN_NEON}
     "${AOM_ROOT}/av1/common/arm/cfl_neon.c")
 
-set(AOM_AV1_COMMON_INTRIN_VSX
-    ${AOM_AV1_COMMON_INTRIN_VSX}
+set(AOM_AV1_COMMON_INTRIN_VSX ${AOM_AV1_COMMON_INTRIN_VSX}
     "${AOM_ROOT}/av1/common/ppc/cfl_ppc.c")
 
-set(AOM_AV1_COMMON_SOURCES
-    ${AOM_AV1_COMMON_SOURCES}
+set(AOM_AV1_COMMON_SOURCES ${AOM_AV1_COMMON_SOURCES}
     "${AOM_ROOT}/av1/common/restoration.c"
     "${AOM_ROOT}/av1/common/restoration.h")
 
-set(AOM_AV1_COMMON_INTRIN_SSE4_1
-    ${AOM_AV1_COMMON_INTRIN_SSE4_1}
+set(AOM_AV1_COMMON_INTRIN_SSE4_1 ${AOM_AV1_COMMON_INTRIN_SSE4_1}
     "${AOM_ROOT}/av1/common/x86/selfguided_sse4.c")
 
-set(AOM_AV1_COMMON_INTRIN_AVX2
-    ${AOM_AV1_COMMON_INTRIN_AVX2}
+set(AOM_AV1_COMMON_INTRIN_AVX2 ${AOM_AV1_COMMON_INTRIN_AVX2}
     "${AOM_ROOT}/av1/common/x86/selfguided_avx2.c")
 
-set(AOM_AV1_ENCODER_SOURCES
-    ${AOM_AV1_ENCODER_SOURCES}
-    "${AOM_ROOT}/av1/encoder/pickrst.c"
-    "${AOM_ROOT}/av1/encoder/pickrst.h")
+set(AOM_AV1_ENCODER_SOURCES ${AOM_AV1_ENCODER_SOURCES}
+    "${AOM_ROOT}/av1/encoder/pickrst.c" "${AOM_ROOT}/av1/encoder/pickrst.h")
 
-set(AOM_AV1_COMMON_INTRIN_SSE4_1
-    ${AOM_AV1_COMMON_INTRIN_SSE4_1}
+set(AOM_AV1_COMMON_INTRIN_SSE4_1 ${AOM_AV1_COMMON_INTRIN_SSE4_1}
     "${AOM_ROOT}/av1/common/x86/intra_edge_sse4.c")
 
-set(AOM_AV1_COMMON_INTRIN_SSE4_1
-    ${AOM_AV1_COMMON_INTRIN_SSE4_1}
+set(AOM_AV1_COMMON_INTRIN_SSE4_1 ${AOM_AV1_COMMON_INTRIN_SSE4_1}
     "${AOM_ROOT}/av1/common/x86/filterintra_sse4.c")
 
-set(AOM_AV1_COMMON_SOURCES
-    ${AOM_AV1_COMMON_SOURCES}
+set(AOM_AV1_COMMON_SOURCES ${AOM_AV1_COMMON_SOURCES}
     "${AOM_ROOT}/av1/common/warped_motion.c"
     "${AOM_ROOT}/av1/common/warped_motion.h")
 
-set(AOM_AV1_COMMON_INTRIN_SSE4_1
-    ${AOM_AV1_COMMON_INTRIN_SSE4_1}
+set(AOM_AV1_COMMON_INTRIN_SSE4_1 ${AOM_AV1_COMMON_INTRIN_SSE4_1}
     "${AOM_ROOT}/av1/common/x86/warp_plane_sse4.c")
 
-  set(AOM_AV1_COMMON_INTRIN_SSE4_1
-      ${AOM_AV1_COMMON_INTRIN_SSE4_1}
-      "${AOM_ROOT}/av1/common/x86/highbd_warp_plane_sse4.c")
+set(AOM_AV1_COMMON_INTRIN_SSE4_1 ${AOM_AV1_COMMON_INTRIN_SSE4_1}
+    "${AOM_ROOT}/av1/common/x86/highbd_warp_plane_sse4.c")
 
-  set(AOM_AV1_ENCODER_SOURCES
-      ${AOM_AV1_ENCODER_SOURCES}
-      "${AOM_ROOT}/av1/encoder/hash_motion.h"
-      "${AOM_ROOT}/av1/encoder/hash_motion.c"
-      "${AOM_ROOT}/third_party/vector/vector.h"
-      "${AOM_ROOT}/third_party/vector/vector.c")
+set(AOM_AV1_ENCODER_SOURCES ${AOM_AV1_ENCODER_SOURCES}
+    "${AOM_ROOT}/av1/encoder/hash_motion.h"
+    "${AOM_ROOT}/av1/encoder/hash_motion.c"
+    "${AOM_ROOT}/third_party/vector/vector.h"
+    "${AOM_ROOT}/third_party/vector/vector.c")
 
-  set(AOM_AV1_COMMON_SOURCES
-      ${AOM_AV1_COMMON_SOURCES}
-      "${AOM_ROOT}/av1/common/token_cdfs.h")
+set(AOM_AV1_COMMON_SOURCES ${AOM_AV1_COMMON_SOURCES}
+    "${AOM_ROOT}/av1/common/token_cdfs.h")
 
 # Setup AV1 common/decoder/encoder targets. The libaom target must exist before
 # this function is called.
-function (setup_av1_targets)
+function(setup_av1_targets)
   add_library(aom_av1_common OBJECT ${AOM_AV1_COMMON_SOURCES})
   list(APPEND AOM_LIB_TARGETS aom_av1_common)
 
@@ -499,123 +429,119 @@
   # dummy source file to the aom_av1 target.
   add_dummy_source_file_to_target("aom_av1" "c")
 
-  if (CONFIG_AV1_DECODER)
+  if(CONFIG_AV1_DECODER)
     add_library(aom_av1_decoder OBJECT ${AOM_AV1_DECODER_SOURCES})
     set(AOM_LIB_TARGETS ${AOM_LIB_TARGETS} aom_av1_decoder)
     target_sources(aom PRIVATE $<TARGET_OBJECTS:aom_av1_decoder>)
-  endif ()
+  endif()
 
-  if (CONFIG_AV1_ENCODER)
+  if(CONFIG_AV1_ENCODER)
     add_library(aom_av1_encoder OBJECT ${AOM_AV1_ENCODER_SOURCES})
     set(AOM_LIB_TARGETS ${AOM_LIB_TARGETS} aom_av1_encoder)
     target_sources(aom PRIVATE $<TARGET_OBJECTS:aom_av1_encoder>)
-  endif ()
+  endif()
 
-  if (HAVE_SSE2)
+  if(HAVE_SSE2)
     require_compiler_flag_nomsvc("-msse2" NO)
     add_intrinsics_object_library("-msse2" "sse2" "aom_av1_common"
                                   "AOM_AV1_COMMON_INTRIN_SSE2" "aom")
-    if (CONFIG_AV1_DECODER)
-      if (AOM_AV1_DECODER_ASM_SSE2)
+    if(CONFIG_AV1_DECODER)
+      if(AOM_AV1_DECODER_ASM_SSE2)
         add_asm_library("aom_av1_decoder_sse2" "AOM_AV1_DECODER_ASM_SSE2" "aom")
-      endif ()
+      endif()
 
-      if (AOM_AV1_DECODER_INTRIN_SSE2)
+      if(AOM_AV1_DECODER_INTRIN_SSE2)
         add_intrinsics_object_library("-msse2" "sse2" "aom_av1_decoder"
                                       "AOM_AV1_DECODER_INTRIN_SSE2" "aom")
-      endif ()
-    endif ()
+      endif()
+    endif()
 
-    if (CONFIG_AV1_ENCODER)
+    if(CONFIG_AV1_ENCODER)
       add_asm_library("aom_av1_encoder_sse2" "AOM_AV1_ENCODER_ASM_SSE2" "aom")
       add_intrinsics_object_library("-msse2" "sse2" "aom_av1_encoder"
                                     "AOM_AV1_ENCODER_INTRIN_SSE2" "aom")
-    endif ()
-  endif ()
+    endif()
+  endif()
 
-  if (HAVE_SSSE3)
+  if(HAVE_SSSE3)
     require_compiler_flag_nomsvc("-mssse3" NO)
     add_intrinsics_object_library("-mssse3" "ssse3" "aom_av1_common"
                                   "AOM_AV1_COMMON_INTRIN_SSSE3" "aom")
 
-    if (CONFIG_AV1_DECODER)
-      if (AOM_AV1_DECODER_INTRIN_SSSE3)
+    if(CONFIG_AV1_DECODER)
+      if(AOM_AV1_DECODER_INTRIN_SSSE3)
         add_intrinsics_object_library("-mssse3" "ssse3" "aom_av1_decoder"
                                       "AOM_AV1_DECODER_INTRIN_SSSE3" "aom")
-      endif ()
-    endif ()
-  endif ()
+      endif()
+    endif()
+  endif()
 
-  if (HAVE_SSE4_1)
+  if(HAVE_SSE4_1)
     require_compiler_flag_nomsvc("-msse4.1" NO)
     add_intrinsics_object_library("-msse4.1" "sse4" "aom_av1_common"
                                   "AOM_AV1_COMMON_INTRIN_SSE4_1" "aom")
 
-    if (CONFIG_AV1_ENCODER)
-      if ("${AOM_TARGET_CPU}" STREQUAL "x86_64")
+    if(CONFIG_AV1_ENCODER)
+      if("${AOM_TARGET_CPU}" STREQUAL "x86_64")
         add_asm_library("aom_av1_encoder_ssse3"
                         "AOM_AV1_ENCODER_ASM_SSSE3_X86_64" "aom")
-      endif ()
+      endif()
 
-      if (AOM_AV1_ENCODER_INTRIN_SSE4_1)
+      if(AOM_AV1_ENCODER_INTRIN_SSE4_1)
         add_intrinsics_object_library("-msse4.1" "sse4" "aom_av1_encoder"
                                       "AOM_AV1_ENCODER_INTRIN_SSE4_1" "aom")
-      endif ()
-    endif ()
-  endif ()
+      endif()
+    endif()
+  endif()
 
-  if (HAVE_SSE4_2)
+  if(HAVE_SSE4_2)
     require_compiler_flag_nomsvc("-msse4.2" NO)
-    if (CONFIG_AV1_ENCODER)
-      if (AOM_AV1_ENCODER_INTRIN_SSE4_2)
+    if(CONFIG_AV1_ENCODER)
+      if(AOM_AV1_ENCODER_INTRIN_SSE4_2)
         add_intrinsics_object_library("-msse4.2" "sse42" "aom_av1_encoder"
                                       "AOM_AV1_ENCODER_INTRIN_SSE4_2" "aom")
-      endif ()
-    endif ()
-  endif ()
+      endif()
+    endif()
+  endif()
 
-  if (HAVE_AVX2)
+  if(HAVE_AVX2)
     require_compiler_flag_nomsvc("-mavx2" NO)
     add_intrinsics_object_library("-mavx2" "avx2" "aom_av1_common"
                                   "AOM_AV1_COMMON_INTRIN_AVX2" "aom")
 
-    if (CONFIG_AV1_ENCODER)
+    if(CONFIG_AV1_ENCODER)
       add_intrinsics_object_library("-mavx2" "avx2" "aom_av1_encoder"
                                     "AOM_AV1_ENCODER_INTRIN_AVX2" "aom")
-    endif ()
-  endif ()
+    endif()
+  endif()
 
-  if (HAVE_NEON)
-    if (AOM_AV1_COMMON_INTRIN_NEON)
-      add_intrinsics_object_library("${AOM_INTRIN_NEON_FLAG}"
-                                    "neon"
+  if(HAVE_NEON)
+    if(AOM_AV1_COMMON_INTRIN_NEON)
+      add_intrinsics_object_library("${AOM_INTRIN_NEON_FLAG}" "neon"
                                     "aom_av1_common"
                                     "AOM_AV1_COMMON_INTRIN_NEON" "aom")
-    endif ()
+    endif()
 
-    if (AOM_AV1_ENCODER_INTRIN_NEON)
-      add_intrinsics_object_library("${AOM_INTRIN_NEON_FLAG}"
-                                    "neon"
+    if(AOM_AV1_ENCODER_INTRIN_NEON)
+      add_intrinsics_object_library("${AOM_INTRIN_NEON_FLAG}" "neon"
                                     "aom_av1_encoder"
                                     "AOM_AV1_ENCODER_INTRIN_NEON" "aom")
-    endif ()
-  endif ()
+    endif()
+  endif()
 
-  if (HAVE_VSX)
-    if (AOM_AV1_COMMON_INTRIN_VSX)
-      add_intrinsics_object_library("-mvsx -maltivec"
-                                    "vsx"
-                                    "aom_av1_common"
+  if(HAVE_VSX)
+    if(AOM_AV1_COMMON_INTRIN_VSX)
+      add_intrinsics_object_library("-mvsx -maltivec" "vsx" "aom_av1_common"
                                     "AOM_AV1_COMMON_INTRIN_VSX" "aom")
-    endif ()
-  endif ()
+    endif()
+  endif()
 
-  if (HAVE_MSA)
+  if(HAVE_MSA)
     add_intrinsics_object_library("" "msa" "aom_av1_common"
                                   "AOM_AV1_COMMON_INTRIN_MSA" "aom")
     add_intrinsics_object_library("" "msa" "aom_av1_encoder"
                                   "AOM_AV1_ENCODER_INTRIN_MSA" "aom")
-  endif ()
+  endif()
 
   target_sources(aom PRIVATE $<TARGET_OBJECTS:aom_dsp>)
   target_sources(aom PRIVATE $<TARGET_OBJECTS:aom_scale>)
@@ -623,7 +549,7 @@
   # Pass the new lib targets up to the parent scope instance of
   # $AOM_LIB_TARGETS.
   set(AOM_LIB_TARGETS ${AOM_LIB_TARGETS} PARENT_SCOPE)
-endfunction ()
+endfunction()
 
-function (setup_av1_test_targets)
-endfunction ()
+function(setup_av1_test_targets)
+endfunction()
diff --git a/build/cmake/aom_config_defaults.cmake b/build/cmake/aom_config_defaults.cmake
index dc902b2..c59430c 100644
--- a/build/cmake/aom_config_defaults.cmake
+++ b/build/cmake/aom_config_defaults.cmake
@@ -1,13 +1,13 @@
-##
-## Copyright (c) 2016, Alliance for Open Media. All rights reserved
-##
-## This source code is subject to the terms of the BSD 2 Clause License and
-## the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License
-## was not distributed with this source code in the LICENSE file, you can
-## obtain it at www.aomedia.org/license/software. If the Alliance for Open
-## Media Patent License 1.0 was not distributed with this source code in the
-## PATENTS file, you can obtain it at www.aomedia.org/license/patent.
-##
+#
+# Copyright (c) 2016, Alliance for Open Media. All rights reserved
+#
+# This source code is subject to the terms of the BSD 2 Clause License and the
+# Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License was
+# not distributed with this source code in the LICENSE file, you can obtain it
+# at www.aomedia.org/license/software. If the Alliance for Open Media Patent
+# License 1.0 was not distributed with this source code in the PATENTS file, you
+# can obtain it at www.aomedia.org/license/patent.
+#
 # Defaults for every libaom configuration variable. Here we add all libaom
 # config variables to the cmake variable cache, but omit the FORCE parameter to
 # allow users to specify values when executing cmake to generate build files.
diff --git a/build/cmake/aom_configure.cmake b/build/cmake/aom_configure.cmake
index 20b6daa..9220a32 100644
--- a/build/cmake/aom_configure.cmake
+++ b/build/cmake/aom_configure.cmake
@@ -1,16 +1,16 @@
-##
-## Copyright (c) 2016, Alliance for Open Media. All rights reserved
-##
-## This source code is subject to the terms of the BSD 2 Clause License and
-## the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License
-## was not distributed with this source code in the LICENSE file, you can
-## obtain it at www.aomedia.org/license/software. If the Alliance for Open
-## Media Patent License 1.0 was not distributed with this source code in the
-## PATENTS file, you can obtain it at www.aomedia.org/license/patent.
-##
-if (AOM_BUILD_CMAKE_AOM_CONFIGURE_CMAKE_)
+#
+# Copyright (c) 2016, Alliance for Open Media. All rights reserved
+#
+# This source code is subject to the terms of the BSD 2 Clause License and the
+# Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License was
+# not distributed with this source code in the LICENSE file, you can obtain it
+# at www.aomedia.org/license/software. If the Alliance for Open Media Patent
+# License 1.0 was not distributed with this source code in the PATENTS file, you
+# can obtain it at www.aomedia.org/license/patent.
+#
+if(AOM_BUILD_CMAKE_AOM_CONFIGURE_CMAKE_)
   return()
-endif ()  # AOM_BUILD_CMAKE_AOM_CONFIGURE_CMAKE_
+endif() # AOM_BUILD_CMAKE_AOM_CONFIGURE_CMAKE_
 set(AOM_BUILD_CMAKE_AOM_CONFIGURE_CMAKE_ 1)
 
 include(FindGit)
@@ -26,10 +26,10 @@
 get_cmake_property(cmake_cache_vars CACHE_VARIABLES)
 foreach(cache_var ${cmake_cache_vars})
   get_property(cache_var_helpstring CACHE ${cache_var} PROPERTY HELPSTRING)
-  set(cmdline_helpstring  "No help, variable specified on the command line.")
+  set(cmdline_helpstring "No help, variable specified on the command line.")
   if("${cache_var_helpstring}" STREQUAL "${cmdline_helpstring}")
     set(AOM_CMAKE_CONFIG "${AOM_CMAKE_CONFIG} -D${cache_var}=${${cache_var}}")
-  endif ()
+  endif()
 endforeach()
 string(STRIP "${AOM_CMAKE_CONFIG}" AOM_CMAKE_CONFIG)
 
@@ -42,153 +42,158 @@
 
 # Build a list of all configurable variables.
 get_cmake_property(cmake_cache_vars CACHE_VARIABLES)
-foreach (var ${cmake_cache_vars})
-  if ("${var}" MATCHES "^CONFIG_")
+foreach(var ${cmake_cache_vars})
+  if("${var}" MATCHES "^CONFIG_")
     list(APPEND AOM_CONFIG_VARS ${var})
-  endif ()
-endforeach ()
+  endif()
+endforeach()
 
 # Detect target CPU.
-if (NOT AOM_TARGET_CPU)
-  if ("${CMAKE_SYSTEM_PROCESSOR}" STREQUAL "AMD64" OR
-      "${CMAKE_SYSTEM_PROCESSOR}" STREQUAL "x86_64")
-    if (${CMAKE_SIZEOF_VOID_P} EQUAL 4)
+if(NOT AOM_TARGET_CPU)
+  if("${CMAKE_SYSTEM_PROCESSOR}" STREQUAL "AMD64" OR
+     "${CMAKE_SYSTEM_PROCESSOR}" STREQUAL "x86_64")
+    if(${CMAKE_SIZEOF_VOID_P} EQUAL 4)
       set(AOM_TARGET_CPU "x86")
-    elseif (${CMAKE_SIZEOF_VOID_P} EQUAL 8)
+    elseif(${CMAKE_SIZEOF_VOID_P} EQUAL 8)
       set(AOM_TARGET_CPU "x86_64")
-    else ()
+    else()
       message(FATAL_ERROR
-              "--- Unexpected pointer size (${CMAKE_SIZEOF_VOID_P}) for\n"
-              "      CMAKE_SYSTEM_NAME=${CMAKE_SYSTEM_NAME}\n"
-              "      CMAKE_SYSTEM_PROCESSOR=${CMAKE_SYSTEM_PROCESSOR}\n"
-              "      CMAKE_GENERATOR=${CMAKE_GENERATOR}\n")
-    endif ()
-  elseif ("${CMAKE_SYSTEM_PROCESSOR}" STREQUAL "i386" OR
-          "${CMAKE_SYSTEM_PROCESSOR}" STREQUAL "x86")
+                "--- Unexpected pointer size (${CMAKE_SIZEOF_VOID_P}) for\n"
+                "      CMAKE_SYSTEM_NAME=${CMAKE_SYSTEM_NAME}\n"
+                "      CMAKE_SYSTEM_PROCESSOR=${CMAKE_SYSTEM_PROCESSOR}\n"
+                "      CMAKE_GENERATOR=${CMAKE_GENERATOR}\n")
+    endif()
+  elseif("${CMAKE_SYSTEM_PROCESSOR}" STREQUAL "i386" OR
+         "${CMAKE_SYSTEM_PROCESSOR}" STREQUAL "x86")
     set(AOM_TARGET_CPU "x86")
-  elseif ("${CMAKE_SYSTEM_PROCESSOR}" MATCHES "^arm" OR
-          "${CMAKE_SYSTEM_PROCESSOR}" MATCHES "^mips")
+  elseif("${CMAKE_SYSTEM_PROCESSOR}" MATCHES "^arm" OR
+         "${CMAKE_SYSTEM_PROCESSOR}" MATCHES "^mips")
     set(AOM_TARGET_CPU "${CMAKE_SYSTEM_PROCESSOR}")
-  elseif ("${CMAKE_SYSTEM_PROCESSOR}" MATCHES "aarch64")
+  elseif("${CMAKE_SYSTEM_PROCESSOR}" MATCHES "aarch64")
     set(AOM_TARGET_CPU "arm64")
-  elseif ("${CMAKE_SYSTEM_PROCESSOR}" MATCHES "^ppc")
+  elseif("${CMAKE_SYSTEM_PROCESSOR}" MATCHES "^ppc")
     set(AOM_TARGET_CPU "ppc")
-  else ()
+  else()
     message(WARNING "The architecture ${CMAKE_SYSTEM_PROCESSOR} is not "
-            "supported, falling back to the generic target")
+                    "supported, falling back to the generic target")
     set(AOM_TARGET_CPU "generic")
-  endif ()
-endif ()
+  endif()
+endif()
 
-if (CMAKE_TOOLCHAIN_FILE)
-  # Add toolchain file to config string.
+if(CMAKE_TOOLCHAIN_FILE) # Add toolchain file to config string.
   set(toolchain_string "-DCMAKE_TOOLCHAIN_FILE=\\\"${CMAKE_TOOLCHAIN_FILE}\\\"")
   set(AOM_CMAKE_CONFIG "${toolchain_string} ${AOM_CMAKE_CONFIG}")
-else ()
+else()
+
   # Add detected CPU to the config string.
   set(AOM_CMAKE_CONFIG "-DAOM_TARGET_CPU=${AOM_TARGET_CPU} ${AOM_CMAKE_CONFIG}")
-endif ()
+endif()
 set(AOM_CMAKE_CONFIG "-G \\\"${CMAKE_GENERATOR}\\\" ${AOM_CMAKE_CONFIG}")
 string(STRIP "${AOM_CMAKE_CONFIG}" AOM_CMAKE_CONFIG)
 
 message("--- aom_configure: Detected CPU: ${AOM_TARGET_CPU}")
 set(AOM_TARGET_SYSTEM ${CMAKE_SYSTEM_NAME})
 
-if ("${CMAKE_BUILD_TYPE}" MATCHES "Deb")
+if("${CMAKE_BUILD_TYPE}" MATCHES "Deb")
   set(CONFIG_DEBUG 1)
-endif ()
+endif()
 
-if (NOT MSVC)
-  if (BUILD_SHARED_LIBS)
+if(NOT MSVC)
+  if(BUILD_SHARED_LIBS)
     set(CONFIG_PIC 1)
     set(CONFIG_SHARED 1)
     set(CONFIG_STATIC 0)
-  endif ()
+  endif()
 
-  if (CONFIG_PIC)
+  if(CONFIG_PIC)
+
+    # TODO(tomfinegan): clang needs -pie in CMAKE_EXE_LINKER_FLAGS for this to
+    # work.
     set(CMAKE_POSITION_INDEPENDENT_CODE ON)
-    if ("${AOM_TARGET_SYSTEM}" STREQUAL "Linux" AND
-        "${AOM_TARGET_CPU}" MATCHES "^armv7")
+    if("${AOM_TARGET_SYSTEM}" STREQUAL "Linux" AND "${AOM_TARGET_CPU}" MATCHES
+       "^armv7")
       set(AOM_AS_FLAGS ${AOM_AS_FLAGS} --defsym PIC=1)
-    else ()
+    else()
       set(AOM_AS_FLAGS ${AOM_AS_FLAGS} -DPIC)
-    endif ()
-  endif ()
-else ()
+    endif()
+  endif()
+else()
   set(CONFIG_MSVS 1)
-endif ()
+endif()
 
-if (NOT "${AOM_SUPPORTED_CPU_TARGETS}" MATCHES "${AOM_TARGET_CPU}")
-  message(FATAL_ERROR "No RTCD support for ${AOM_TARGET_CPU}. Create it, or "
-          "add -DAOM_TARGET_CPU=generic to your cmake command line for a "
-          "generic build of libaom and tools.")
-endif ()
+if(NOT "${AOM_SUPPORTED_CPU_TARGETS}" MATCHES "${AOM_TARGET_CPU}")
+  message(FATAL_ERROR
+            "No RTCD support for ${AOM_TARGET_CPU}. Create it, or "
+            "add -DAOM_TARGET_CPU=generic to your cmake command line for a "
+            "generic build of libaom and tools.")
+endif()
 
-if ("${AOM_TARGET_CPU}" STREQUAL "x86" OR "${AOM_TARGET_CPU}" STREQUAL "x86_64")
+if("${AOM_TARGET_CPU}" STREQUAL "x86" OR "${AOM_TARGET_CPU}" STREQUAL "x86_64")
   find_program(AS_EXECUTABLE yasm $ENV{YASM_PATH})
-  if (NOT AS_EXECUTABLE OR ENABLE_NASM)
+  if(NOT AS_EXECUTABLE OR ENABLE_NASM)
     unset(AS_EXECUTABLE CACHE)
     find_program(AS_EXECUTABLE nasm $ENV{NASM_PATH})
-    if (AS_EXECUTABLE)
+    if(AS_EXECUTABLE)
       test_nasm()
     endif()
-  endif ()
+  endif()
 
-  if (NOT AS_EXECUTABLE)
-    message(FATAL_ERROR "Unable to find assembler. Install 'yasm' or 'nasm.' "
-            "To build without optimizations, add -DAOM_TARGET_CPU=generic to "
-            "your cmake command line.")
-  endif ()
+  if(NOT AS_EXECUTABLE)
+    message(FATAL_ERROR
+              "Unable to find assembler. Install 'yasm' or 'nasm.' "
+              "To build without optimizations, add -DAOM_TARGET_CPU=generic to "
+              "your cmake command line.")
+  endif()
   get_asm_obj_format("objformat")
   set(AOM_AS_FLAGS -f ${objformat} ${AOM_AS_FLAGS})
   string(STRIP "${AOM_AS_FLAGS}" AOM_AS_FLAGS)
-elseif ("${AOM_TARGET_CPU}" MATCHES "arm")
-  if ("${AOM_TARGET_SYSTEM}" STREQUAL "Darwin")
+elseif("${AOM_TARGET_CPU}" MATCHES "arm")
+  if("${AOM_TARGET_SYSTEM}" STREQUAL "Darwin")
     set(AS_EXECUTABLE as)
     set(AOM_AS_FLAGS -arch ${AOM_TARGET_CPU} -isysroot ${CMAKE_OSX_SYSROOT})
-  elseif ("${AOM_TARGET_SYSTEM}" STREQUAL "Linux")
-    if (NOT AS_EXECUTABLE)
+  elseif("${AOM_TARGET_SYSTEM}" STREQUAL "Linux")
+    if(NOT AS_EXECUTABLE)
       set(AS_EXECUTABLE as)
-    endif ()
-  elseif ("${AOM_TARGET_SYSTEM}" STREQUAL "Windows")
-    if (NOT AS_EXECUTABLE)
+    endif()
+  elseif("${AOM_TARGET_SYSTEM}" STREQUAL "Windows")
+    if(NOT AS_EXECUTABLE)
       set(AS_EXECUTABLE ${CMAKE_C_COMPILER} -c -mimplicit-it=always)
-    endif ()
-  endif ()
-  if (NOT AS_EXECUTABLE)
+    endif()
+  endif()
+  if(NOT AS_EXECUTABLE)
     message(FATAL_ERROR
-            "Unknown assembler for: ${AOM_TARGET_CPU}-${AOM_TARGET_SYSTEM}")
-  endif ()
+              "Unknown assembler for: ${AOM_TARGET_CPU}-${AOM_TARGET_SYSTEM}")
+  endif()
 
   string(STRIP "${AOM_AS_FLAGS}" AOM_AS_FLAGS)
-endif ()
+endif()
 
-if (CONFIG_ANALYZER)
+if(CONFIG_ANALYZER)
   include(FindwxWidgets)
   find_package(wxWidgets REQUIRED adv base core)
   include(${wxWidgets_USE_FILE})
-endif ()
+endif()
 
-if (NOT MSVC AND CMAKE_C_COMPILER_ID MATCHES "GNU\|Clang")
+if(NOT MSVC AND CMAKE_C_COMPILER_ID MATCHES "GNU\|Clang")
   set(CONFIG_GCC 1)
-endif ()
+endif()
 
-if (CONFIG_GCOV)
+if(CONFIG_GCOV)
   message("--- Testing for CONFIG_GCOV support.")
   require_linker_flag("-fprofile-arcs -ftest-coverage")
   require_compiler_flag("-fprofile-arcs -ftest-coverage" YES)
-endif ()
+endif()
 
-if (CONFIG_GPROF)
+if(CONFIG_GPROF)
   message("--- Testing for CONFIG_GPROF support.")
   require_compiler_flag("-pg" YES)
-endif ()
+endif()
 
-if ("${AOM_TARGET_SYSTEM}" MATCHES "Darwin\|Linux\|Windows")
+if("${AOM_TARGET_SYSTEM}" MATCHES "Darwin\|Linux\|Windows")
   set(CONFIG_OS_SUPPORT 1)
-endif ()
+endif()
 
-################################################################################
+#
 # Fix CONFIG_* dependencies. This must be done before including cpu.cmake to
 # ensure RTCD_CONFIG_* are properly set.
 fix_experiment_configs()
@@ -201,57 +206,60 @@
 set(HAVE_PTHREAD_H ${CMAKE_USE_PTHREADS_INIT})
 aom_check_source_compiles("unistd_check" "#include <unistd.h>" HAVE_UNISTD_H)
 
-if (NOT MSVC)
+if(NOT MSVC)
   aom_push_var(CMAKE_REQUIRED_LIBRARIES "m")
-  aom_check_c_compiles("fenv_check"
-                       "#define _GNU_SOURCE
+  aom_check_c_compiles(
+    "fenv_check"
+    "#define _GNU_SOURCE
                         #include <fenv.h>
                         void unused(void) {
                           (void)unused;
                           (void)feenableexcept(FE_DIVBYZERO | FE_INVALID);
-                        }" HAVE_FEXCEPT)
+                        }"
+    HAVE_FEXCEPT)
   aom_pop_var(CMAKE_REQUIRED_LIBRARIES)
 endif()
 
 include("${AOM_ROOT}/build/cmake/cpu.cmake")
 
-if (ENABLE_CCACHE)
+if(ENABLE_CCACHE)
   set_compiler_launcher(ENABLE_CCACHE ccache)
-endif ()
+endif()
 
-if (ENABLE_DISTCC)
+if(ENABLE_DISTCC)
   set_compiler_launcher(ENABLE_DISTCC distcc)
-endif ()
+endif()
 
-if (ENABLE_GOMA)
+if(ENABLE_GOMA)
   set_compiler_launcher(ENABLE_GOMA gomacc)
-endif ()
+endif()
 
-if (NOT CONFIG_AV1_DECODER AND NOT CONFIG_AV1_ENCODER)
+if(NOT CONFIG_AV1_DECODER AND NOT CONFIG_AV1_ENCODER)
   message(FATAL_ERROR "Decoder and encoder disabled, nothing to build.")
-endif ()
+endif()
 
-if (DECODE_HEIGHT_LIMIT OR DECODE_WIDTH_LIMIT)
+if(DECODE_HEIGHT_LIMIT OR DECODE_WIDTH_LIMIT)
   change_config_and_warn(CONFIG_SIZE_LIMIT 1
                          "DECODE_HEIGHT_LIMIT and DECODE_WIDTH_LIMIT")
 endif()
 
-if (CONFIG_SIZE_LIMIT)
-  if (NOT DECODE_HEIGHT_LIMIT OR NOT DECODE_WIDTH_LIMIT)
+if(CONFIG_SIZE_LIMIT)
+  if(NOT DECODE_HEIGHT_LIMIT OR NOT DECODE_WIDTH_LIMIT)
     message(FATAL_ERROR "When setting CONFIG_SIZE_LIMIT, DECODE_HEIGHT_LIMIT "
-            "and DECODE_WIDTH_LIMIT must be set.")
+                        "and DECODE_WIDTH_LIMIT must be set.")
   endif()
 endif()
 
 # Test compiler flags.
-if (MSVC)
+if(MSVC)
   add_compiler_flag_if_supported("/W3")
+
   # Disable MSVC warnings that suggest making code non-portable.
   add_compiler_flag_if_supported("/wd4996")
-  if (ENABLE_WERROR)
+  if(ENABLE_WERROR)
     add_compiler_flag_if_supported("/WX")
-  endif ()
-else ()
+  endif()
+else()
   require_c_flag("-std=c99" YES)
   add_compiler_flag_if_supported("-Wall")
   add_compiler_flag_if_supported("-Wdisabled-optimization")
@@ -267,8 +275,9 @@
   add_compiler_flag_if_supported("-Wuninitialized")
   add_compiler_flag_if_supported("-Wunused")
   add_compiler_flag_if_supported("-Wvla")
-  # TODO(jzern): this could be added as a cxx flags for test/*.cc only,
-  # avoiding third_party.
+
+  # TODO(jzern): this could be added as a cxx flags for test/*.cc only, avoiding
+  # third_party.
   add_c_flag_if_supported("-Wshorten-64-to-32")
 
   # Add -Wshadow only for C files to avoid massive gtest warning spam.
@@ -277,33 +286,35 @@
   # Add -Wundef only for C files to avoid massive gtest warning spam.
   add_c_flag_if_supported("-Wundef")
 
-  if (ENABLE_WERROR)
+  if(ENABLE_WERROR)
     add_compiler_flag_if_supported("-Werror")
-  endif ()
+  endif()
+
   # Flag(s) added here negate CMake defaults.
   add_compiler_flag_if_supported("-Wno-unused-function")
 
-  if ("${CMAKE_BUILD_TYPE}" MATCHES "Rel")
+  if("${CMAKE_BUILD_TYPE}" MATCHES "Rel")
     add_compiler_flag_if_supported("-U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=0")
-  endif ()
+  endif()
   add_compiler_flag_if_supported("-D_LARGEFILE_SOURCE")
   add_compiler_flag_if_supported("-D_FILE_OFFSET_BITS=64")
-endif ()
+endif()
 
 set(AOM_LIB_LINK_TYPE PUBLIC)
-if (EMSCRIPTEN)
+if(EMSCRIPTEN)
+
   # Avoid CMake generation time errors resulting from collisions with the form
   # of target_link_libraries() used by Emscripten.cmake.
   unset(AOM_LIB_LINK_TYPE)
-endif ()
+endif()
 
 # Generate aom_config templates.
 set(aom_config_asm_template "${AOM_CONFIG_DIR}/aom_config.asm.cmake")
 set(aom_config_h_template "${AOM_CONFIG_DIR}/aom_config.h.cmake")
-execute_process(COMMAND ${CMAKE_COMMAND}
-  -DAOM_CONFIG_DIR=${AOM_CONFIG_DIR}
-  -DAOM_ROOT=${AOM_ROOT}
-  -P "${AOM_ROOT}/build/cmake/generate_aom_config_templates.cmake")
+execute_process(COMMAND
+                  ${CMAKE_COMMAND} -DAOM_CONFIG_DIR=${AOM_CONFIG_DIR}
+                  -DAOM_ROOT=${AOM_ROOT} -P
+                  "${AOM_ROOT}/build/cmake/generate_aom_config_templates.cmake")
 
 # Generate aom_config.{asm,h}.
 configure_file("${aom_config_asm_template}" "${AOM_CONFIG_DIR}/aom_config.asm")
@@ -311,32 +322,28 @@
 
 # Read the current git hash.
 find_package(Git)
-if (NOT GIT_FOUND)
+if(NOT GIT_FOUND)
   message("--- Git missing, version will be read from CHANGELOG.")
-endif ()
+endif()
 
 configure_file("${AOM_ROOT}/build/cmake/aom_config.c.template"
                "${AOM_CONFIG_DIR}/aom_config.c")
 
 # Find Perl and generate the RTCD sources.
 find_package(Perl)
-if (NOT PERL_FOUND)
+if(NOT PERL_FOUND)
   message(FATAL_ERROR "Perl is required to build libaom.")
-endif ()
+endif()
 
 configure_file("${AOM_CONFIG_DIR}/rtcd_config.cmake"
                "${AOM_CONFIG_DIR}/${AOM_TARGET_CPU}_rtcd_config.rtcd")
 
-set(AOM_RTCD_CONFIG_FILE_LIST
-    "${AOM_ROOT}/aom_dsp/aom_dsp_rtcd_defs.pl"
+set(AOM_RTCD_CONFIG_FILE_LIST "${AOM_ROOT}/aom_dsp/aom_dsp_rtcd_defs.pl"
     "${AOM_ROOT}/aom_scale/aom_scale_rtcd.pl"
     "${AOM_ROOT}/av1/common/av1_rtcd_defs.pl")
-set(AOM_RTCD_HEADER_FILE_LIST
-    "${AOM_CONFIG_DIR}/aom_dsp_rtcd.h"
-    "${AOM_CONFIG_DIR}/aom_scale_rtcd.h"
-    "${AOM_CONFIG_DIR}/av1_rtcd.h")
-set(AOM_RTCD_SOURCE_FILE_LIST
-    "${AOM_ROOT}/aom_dsp/aom_dsp_rtcd.c"
+set(AOM_RTCD_HEADER_FILE_LIST "${AOM_CONFIG_DIR}/aom_dsp_rtcd.h"
+    "${AOM_CONFIG_DIR}/aom_scale_rtcd.h" "${AOM_CONFIG_DIR}/av1_rtcd.h")
+set(AOM_RTCD_SOURCE_FILE_LIST "${AOM_ROOT}/aom_dsp/aom_dsp_rtcd.c"
     "${AOM_ROOT}/aom_scale/aom_scale_rtcd.c"
     "${AOM_ROOT}/av1/common/av1_rtcd.c")
 set(AOM_RTCD_SYMBOL_LIST aom_dsp_rtcd aom_scale_rtcd av1_rtcd)
@@ -350,30 +357,26 @@
   list(GET AOM_RTCD_SYMBOL_LIST ${NUM} AOM_RTCD_SYMBOL)
   execute_process(
     COMMAND ${PERL_EXECUTABLE} "${AOM_ROOT}/build/make/rtcd.pl"
-      --arch=${AOM_TARGET_CPU} --sym=${AOM_RTCD_SYMBOL} ${AOM_RTCD_FLAGS}
-      --config=${AOM_CONFIG_DIR}/${AOM_TARGET_CPU}_rtcd_config.rtcd
-      ${AOM_RTCD_CONFIG_FILE}
+            --arch=${AOM_TARGET_CPU}
+            --sym=${AOM_RTCD_SYMBOL} ${AOM_RTCD_FLAGS}
+            --config=${AOM_CONFIG_DIR}/${AOM_TARGET_CPU}_rtcd_config.rtcd
+            ${AOM_RTCD_CONFIG_FILE}
     OUTPUT_FILE ${AOM_RTCD_HEADER_FILE})
 endforeach()
 
 # Generate aom_version.h.
-execute_process(
-  COMMAND ${CMAKE_COMMAND}
-  -DAOM_CONFIG_DIR=${AOM_CONFIG_DIR}
-  -DAOM_ROOT=${AOM_ROOT}
-  -DGIT_EXECUTABLE=${GIT_EXECUTABLE}
-  -DPERL_EXECUTABLE=${PERL_EXECUTABLE}
-  -P "${AOM_ROOT}/build/cmake/version.cmake")
+execute_process(COMMAND ${CMAKE_COMMAND} -DAOM_CONFIG_DIR=${AOM_CONFIG_DIR}
+                        -DAOM_ROOT=${AOM_ROOT}
+                        -DGIT_EXECUTABLE=${GIT_EXECUTABLE}
+                        -DPERL_EXECUTABLE=${PERL_EXECUTABLE} -P
+                        "${AOM_ROOT}/build/cmake/version.cmake")
 
-if (NOT MSVC)
-  # Generate aom.pc (pkg-config file).
-  execute_process(
-    COMMAND ${CMAKE_COMMAND}
-    -DAOM_CONFIG_DIR=${AOM_CONFIG_DIR}
-    -DAOM_ROOT=${AOM_ROOT}
-    -DCMAKE_INSTALL_PREFIX=${CMAKE_INSTALL_PREFIX}
-    -DCMAKE_PROJECT_NAME=${CMAKE_PROJECT_NAME}
-    -DCONFIG_MULTITHREAD=${CONFIG_MULTITHREAD}
-    -DHAVE_PTHREAD_H=${HAVE_PTHREAD_H}
-    -P "${AOM_ROOT}/build/cmake/pkg_config.cmake")
-endif ()
+if(NOT MSVC) # Generate aom.pc (pkg-config file).
+  execute_process(COMMAND ${CMAKE_COMMAND} -DAOM_CONFIG_DIR=${AOM_CONFIG_DIR}
+                          -DAOM_ROOT=${AOM_ROOT}
+                          -DCMAKE_INSTALL_PREFIX=${CMAKE_INSTALL_PREFIX}
+                          -DCMAKE_PROJECT_NAME=${CMAKE_PROJECT_NAME}
+                          -DCONFIG_MULTITHREAD=${CONFIG_MULTITHREAD}
+                          -DHAVE_PTHREAD_H=${HAVE_PTHREAD_H} -P
+                          "${AOM_ROOT}/build/cmake/pkg_config.cmake")
+endif()
diff --git a/build/cmake/aom_experiment_deps.cmake b/build/cmake/aom_experiment_deps.cmake
index 9e8a532..cf4a270 100644
--- a/build/cmake/aom_experiment_deps.cmake
+++ b/build/cmake/aom_experiment_deps.cmake
@@ -1,30 +1,30 @@
-##
-## Copyright (c) 2017, Alliance for Open Media. All rights reserved
-##
-## This source code is subject to the terms of the BSD 2 Clause License and
-## the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License
-## was not distributed with this source code in the LICENSE file, you can
-## obtain it at www.aomedia.org/license/software. If the Alliance for Open
-## Media Patent License 1.0 was not distributed with this source code in the
-## PATENTS file, you can obtain it at www.aomedia.org/license/patent.
-##
-if (AOM_BUILD_CMAKE_AOM_EXPERIMENT_DEPS_CMAKE_)
+#
+# Copyright (c) 2017, Alliance for Open Media. All rights reserved
+#
+# This source code is subject to the terms of the BSD 2 Clause License and the
+# Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License was
+# not distributed with this source code in the LICENSE file, you can obtain it
+# at www.aomedia.org/license/software. If the Alliance for Open Media Patent
+# License 1.0 was not distributed with this source code in the PATENTS file, you
+# can obtain it at www.aomedia.org/license/patent.
+#
+if(AOM_BUILD_CMAKE_AOM_EXPERIMENT_DEPS_CMAKE_)
   return()
-endif ()  # AOM_BUILD_CMAKE_AOM_EXPERIMENT_DEPS_CMAKE_
+endif() # AOM_BUILD_CMAKE_AOM_EXPERIMENT_DEPS_CMAKE_
 set(AOM_BUILD_CMAKE_AOM_EXPERIMENT_DEPS_CMAKE_ 1)
 
 # Adjusts CONFIG_* CMake variables to address conflicts between active AV1
 # experiments.
-macro (fix_experiment_configs)
+macro(fix_experiment_configs)
 
-  if (CONFIG_ANALYZER)
-    if (NOT CONFIG_INSPECTION)
+  if(CONFIG_ANALYZER)
+    if(NOT CONFIG_INSPECTION)
       change_config_and_warn(CONFIG_INSPECTION 1 CONFIG_ANALYZER)
-    endif ()
-  endif ()
+    endif()
+  endif()
 
-  if (CONFIG_RD_DEBUG)
+  if(CONFIG_RD_DEBUG)
     change_config_and_warn(CONFIG_RD_DEBUG 0 CONFIG_JNT_COMP)
   endif()
 
-endmacro ()
+endmacro()
diff --git a/build/cmake/aom_optimization.cmake b/build/cmake/aom_optimization.cmake
index 15c7074..dbb6133 100644
--- a/build/cmake/aom_optimization.cmake
+++ b/build/cmake/aom_optimization.cmake
@@ -1,141 +1,140 @@
-##
-## Copyright (c) 2017, Alliance for Open Media. All rights reserved
-##
-## This source code is subject to the terms of the BSD 2 Clause License and
-## the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License
-## was not distributed with this source code in the LICENSE file, you can
-## obtain it at www.aomedia.org/license/software. If the Alliance for Open
-## Media Patent License 1.0 was not distributed with this source code in the
-## PATENTS file, you can obtain it at www.aomedia.org/license/patent.
-##
-if (AOM_BUILD_CMAKE_AOM_OPTIMIZATION_CMAKE_)
+#
+# Copyright (c) 2017, Alliance for Open Media. All rights reserved
+#
+# This source code is subject to the terms of the BSD 2 Clause License and the
+# Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License was
+# not distributed with this source code in the LICENSE file, you can obtain it
+# at www.aomedia.org/license/software. If the Alliance for Open Media Patent
+# License 1.0 was not distributed with this source code in the PATENTS file, you
+# can obtain it at www.aomedia.org/license/patent.
+#
+if(AOM_BUILD_CMAKE_AOM_OPTIMIZATION_CMAKE_)
   return()
-endif ()  # AOM_BUILD_CMAKE_AOM_OPTIMIZATION_CMAKE_
+endif() # AOM_BUILD_CMAKE_AOM_OPTIMIZATION_CMAKE_
 set(AOM_BUILD_CMAKE_AOM_OPTIMIZATION_CMAKE_ 1)
 
 include("${AOM_ROOT}/build/cmake/util.cmake")
 
 # Translate $flag to one which MSVC understands, and write the new flag to the
 # variable named by $translated_flag (or unset it, when MSVC needs no flag).
-function (get_msvc_intrinsic_flag flag translated_flag)
-  if ("${flag}" STREQUAL "-mavx")
+function(get_msvc_intrinsic_flag flag translated_flag)
+  if("${flag}" STREQUAL "-mavx")
     set(${translated_flag} "/arch:AVX" PARENT_SCOPE)
-  elseif ("${flag}" STREQUAL "-mavx2")
+  elseif("${flag}" STREQUAL "-mavx2")
     set(${translated_flag} "/arch:AVX2" PARENT_SCOPE)
-  else ()
+  else()
+
     # MSVC does not need flags for intrinsics flavors other than AVX/AVX2.
     unset(${translated_flag} PARENT_SCOPE)
-  endif ()
-endfunction ()
+  endif()
+endfunction()
 
 # Adds an object library target. Terminates generation if $flag is not supported
 # by the current compiler. $flag is the intrinsics flag required by the current
 # compiler, and is added to the compile flags for all sources in $sources.
-# $opt_name is used to name the target. $target_to_update is made
-# dependent upon the created target.
+# $opt_name is used to name the target. $target_to_update is made dependent upon
+# the created target.
 #
 # Note: the libaom target is always updated because OBJECT libraries have rules
 # that disallow the direct addition of .o files to them as dependencies. Static
 # libraries do not have this limitation.
-function (add_intrinsics_object_library flag opt_name target_to_update sources
-          dependent_target)
+function(add_intrinsics_object_library flag opt_name target_to_update sources
+         dependent_target)
   set(target_name ${target_to_update}_${opt_name}_intrinsics)
   add_library(${target_name} OBJECT ${${sources}})
 
-  if (MSVC)
+  if(MSVC)
     get_msvc_intrinsic_flag(${flag} "flag")
-  endif ()
+  endif()
 
-  if (flag)
+  if(flag)
     separate_arguments(flag)
     target_compile_options(${target_name} PUBLIC ${flag})
-  endif ()
+  endif()
 
   target_sources(${dependent_target} PRIVATE $<TARGET_OBJECTS:${target_name}>)
 
   # Add the new lib target to the global list of aom library targets.
   list(APPEND AOM_LIB_TARGETS ${target_name})
   set(AOM_LIB_TARGETS ${AOM_LIB_TARGETS} PARENT_SCOPE)
-endfunction ()
+endfunction()
 
 # Adds sources in list named by $sources to $target and adds $flag to the
 # compile flags for each source file.
-function (add_intrinsics_source_to_target flag target sources)
+function(add_intrinsics_source_to_target flag target sources)
   target_sources(${target} PRIVATE ${${sources}})
-  if (MSVC)
+  if(MSVC)
     get_msvc_intrinsic_flag(${flag} "flag")
-  endif ()
-  if (flag)
-    foreach (source ${${sources}})
+  endif()
+  if(flag)
+    foreach(source ${${sources}})
       set_property(SOURCE ${source} APPEND PROPERTY COMPILE_FLAGS ${flag})
-    endforeach ()
-  endif ()
-endfunction ()
+    endforeach()
+  endif()
+endfunction()
 
 # Writes object format for the current target to the var named by $out_format,
 # or terminates the build when the object format for the current target is
 # unknown.
-function (get_asm_obj_format out_format)
-  if ("${AOM_TARGET_CPU}" STREQUAL "x86_64")
-    if ("${AOM_TARGET_SYSTEM}" STREQUAL "Darwin")
+function(get_asm_obj_format out_format)
+  if("${AOM_TARGET_CPU}" STREQUAL "x86_64")
+    if("${AOM_TARGET_SYSTEM}" STREQUAL "Darwin")
       set(objformat "macho64")
-    elseif ("${AOM_TARGET_SYSTEM}" STREQUAL "Linux")
+    elseif("${AOM_TARGET_SYSTEM}" STREQUAL "Linux")
       set(objformat "elf64")
-    elseif ("${AOM_TARGET_SYSTEM}" STREQUAL "MSYS" OR
-            "${AOM_TARGET_SYSTEM}" STREQUAL "Windows")
+    elseif("${AOM_TARGET_SYSTEM}" STREQUAL "MSYS" OR "${AOM_TARGET_SYSTEM}"
+           STREQUAL "Windows")
       set(objformat "win64")
-    else ()
+    else()
       message(FATAL_ERROR "Unknown obj format: ${AOM_TARGET_SYSTEM}")
-    endif ()
-  elseif ("${AOM_TARGET_CPU}" STREQUAL "x86")
-    if ("${AOM_TARGET_SYSTEM}" STREQUAL "Darwin")
+    endif()
+  elseif("${AOM_TARGET_CPU}" STREQUAL "x86")
+    if("${AOM_TARGET_SYSTEM}" STREQUAL "Darwin")
       set(objformat "macho32")
-    elseif ("${AOM_TARGET_SYSTEM}" STREQUAL "Linux")
+    elseif("${AOM_TARGET_SYSTEM}" STREQUAL "Linux")
       set(objformat "elf32")
-    elseif ("${AOM_TARGET_SYSTEM}" STREQUAL "MSYS" OR
-            "${AOM_TARGET_SYSTEM}" STREQUAL "Windows")
+    elseif("${AOM_TARGET_SYSTEM}" STREQUAL "MSYS" OR "${AOM_TARGET_SYSTEM}"
+           STREQUAL "Windows")
       set(objformat "win32")
-    else ()
+    else()
       message(FATAL_ERROR "Unknown obj format: ${AOM_TARGET_SYSTEM}")
-    endif ()
-  else ()
+    endif()
+  else()
     message(FATAL_ERROR
-            "Unknown obj format: ${AOM_TARGET_CPU}-${AOM_TARGET_SYSTEM}")
-  endif ()
+              "Unknown obj format: ${AOM_TARGET_CPU}-${AOM_TARGET_SYSTEM}")
+  endif()
 
   set(${out_format} ${objformat} PARENT_SCOPE)
-endfunction ()
+endfunction()
 
 # Adds library target named $lib_name for ASM files in variable named by
 # $asm_sources. Builds an output directory path from $lib_name. Links $lib_name
 # into $dependent_target. Generates a dummy C file with a dummy function to
 # ensure that all cmake generators can determine the linker language, and that
 # build tools don't complain that an object exposes no symbols.
-function (add_asm_library lib_name asm_sources dependent_target)
+function(add_asm_library lib_name asm_sources dependent_target)
   set(asm_lib_obj_dir "${AOM_CONFIG_DIR}/asm_objects/${lib_name}")
-  if (NOT EXISTS "${asm_lib_obj_dir}")
+  if(NOT EXISTS "${asm_lib_obj_dir}")
     file(MAKE_DIRECTORY "${asm_lib_obj_dir}")
-  endif ()
+  endif()
 
   # TODO(tomfinegan): If cmake ever allows addition of .o files to OBJECT lib
   # targets, make this OBJECT instead of STATIC to hide the target from
   # consumers of the AOM cmake build.
   add_library(${lib_name} STATIC ${${asm_sources}})
 
-  foreach (asm_source ${${asm_sources}})
+  foreach(asm_source ${${asm_sources}})
     get_filename_component(asm_source_name "${asm_source}" NAME)
     set(asm_object "${asm_lib_obj_dir}/${asm_source_name}.o")
     add_custom_command(OUTPUT "${asm_object}"
-                       COMMAND ${AS_EXECUTABLE}
-                       ARGS ${AOM_AS_FLAGS}
-                            -I${AOM_ROOT}/ -I${AOM_CONFIG_DIR}/
-                            -o "${asm_object}" "${asm_source}"
+                       COMMAND ${AS_EXECUTABLE} ARGS ${AOM_AS_FLAGS}
+                               -I${AOM_ROOT}/ -I${AOM_CONFIG_DIR}/ -o
+                               "${asm_object}" "${asm_source}"
                        DEPENDS "${asm_source}"
                        COMMENT "Building ASM object ${asm_object}"
-                       WORKING_DIRECTORY "${AOM_CONFIG_DIR}"
-                       VERBATIM)
+                       WORKING_DIRECTORY "${AOM_CONFIG_DIR}" VERBATIM)
     target_sources(aom PRIVATE "${asm_object}")
-  endforeach ()
+  endforeach()
 
   # The above created a target containing only ASM sources. Cmake needs help
   # here to determine the linker language. Add a dummy C file to force the
@@ -147,31 +146,31 @@
   # Add the new lib target to the global list of aom library targets.
   list(APPEND AOM_LIB_TARGETS ${lib_name})
   set(AOM_LIB_TARGETS ${AOM_LIB_TARGETS} PARENT_SCOPE)
-endfunction ()
+endfunction()
 
 # Converts asm sources in $asm_sources using $AOM_ADS2GAS and calls
 # add_asm_library() to create a library from the converted sources. At
 # generation time the converted sources are created, and a custom rule is added
 # to ensure the sources are reconverted when the original asm source is updated.
 # See add_asm_library() for more information.
-function (add_gas_asm_library lib_name asm_sources dependent_target)
+function(add_gas_asm_library lib_name asm_sources dependent_target)
   set(asm_converted_source_dir "${AOM_CONFIG_DIR}/asm_gas/${lib_name}")
-  if (NOT EXISTS "${asm_converted_source_dir}")
+  if(NOT EXISTS "${asm_converted_source_dir}")
     file(MAKE_DIRECTORY "${asm_converted_source_dir}")
-  endif ()
+  endif()
 
   # Create the converted version of each assembly source at generation time.
   unset(gas_target_sources)
-  foreach (neon_asm_source ${${asm_sources}})
+  foreach(neon_asm_source ${${asm_sources}})
     get_filename_component(output_asm_source "${neon_asm_source}" NAME)
     set(output_asm_source "${asm_converted_source_dir}/${output_asm_source}")
     set(output_asm_source "${output_asm_source}.${AOM_GAS_EXT}")
     execute_process(COMMAND "${PERL_EXECUTABLE}" "${AOM_ADS2GAS}"
-                        ${AOM_ADS2GAS_OPTS}
+                            ${AOM_ADS2GAS_OPTS}
                     INPUT_FILE "${neon_asm_source}"
                     OUTPUT_FILE "${output_asm_source}")
     list(APPEND gas_target_sources "${output_asm_source}")
-  endforeach ()
+  endforeach()
 
   add_asm_library("${lib_name}" "gas_target_sources" "${dependent_target}")
 
@@ -188,80 +187,73 @@
     get_filename_component(neon_name "${neon_asm_source}" NAME)
     get_filename_component(gas_name "${gas_asm_source}" NAME)
 
-    add_custom_command(
-        OUTPUT "${gas_asm_source}"
-        COMMAND ${PERL_EXECUTABLE}
-        ARGS "${AOM_ADS2GAS}" ${AOM_ADS2GAS_OPTS} < "${neon_asm_source}"
-            > "${gas_asm_source}"
-        DEPENDS "${neon_asm_source}"
-        COMMENT "ads2gas conversion ${neon_name} -> ${gas_name}"
-        WORKING_DIRECTORY "${AOM_CONFIG_DIR}"
-        VERBATIM)
-  endforeach ()
+    add_custom_command(OUTPUT "${gas_asm_source}"
+                       COMMAND ${PERL_EXECUTABLE} ARGS "${AOM_ADS2GAS}"
+                               ${AOM_ADS2GAS_OPTS} < "${neon_asm_source}" >
+                               "${gas_asm_source}"
+                       DEPENDS "${neon_asm_source}"
+                       COMMENT "ads2gas conversion ${neon_name} -> ${gas_name}"
+                       WORKING_DIRECTORY "${AOM_CONFIG_DIR}" VERBATIM)
+  endforeach()
 
   # Update the sources list passed in to include the converted asm source files.
   list(APPEND asm_sources ${gas_target_sources})
   set(${asm_sources} ${${asm_sources}} PARENT_SCOPE)
-endfunction ()
+endfunction()
 
 # Terminates generation if nasm found in PATH does not meet requirements.
 # Currently checks only for presence of required object formats and support for
 # the -Ox argument (multipass optimization).
-function (test_nasm)
-  execute_process(COMMAND ${AS_EXECUTABLE} -hf
-                  OUTPUT_VARIABLE nasm_helptext)
+function(test_nasm)
+  execute_process(COMMAND ${AS_EXECUTABLE} -hf OUTPUT_VARIABLE nasm_helptext)
 
-  if (NOT "${nasm_helptext}" MATCHES "-Ox")
+  if(NOT "${nasm_helptext}" MATCHES "-Ox")
     message(FATAL_ERROR
-            "Unsupported nasm: multipass optimization not supported.")
-  endif ()
+              "Unsupported nasm: multipass optimization not supported.")
+  endif()
 
-  if ("${AOM_TARGET_CPU}" STREQUAL "x86")
-    if ("${AOM_TARGET_SYSTEM}" STREQUAL "Darwin")
-      if (NOT "${nasm_helptext}" MATCHES "macho32")
+  if("${AOM_TARGET_CPU}" STREQUAL "x86")
+    if("${AOM_TARGET_SYSTEM}" STREQUAL "Darwin")
+      if(NOT "${nasm_helptext}" MATCHES "macho32")
         message(FATAL_ERROR
-                "Unsupported nasm: macho32 object format not supported.")
-      endif ()
-    elseif ("${AOM_TARGET_SYSTEM}" STREQUAL "Linux")
-      if (NOT "${nasm_helptext}" MATCHES "elf32")
+                  "Unsupported nasm: macho32 object format not supported.")
+      endif()
+    elseif("${AOM_TARGET_SYSTEM}" STREQUAL "Linux")
+      if(NOT "${nasm_helptext}" MATCHES "elf32")
         message(FATAL_ERROR
-                "Unsupported nasm: elf32 object format not supported.")
-      endif ()
-    endif ()
-  else ()
-    if ("${AOM_TARGET_SYSTEM}" STREQUAL "Darwin")
-      if (NOT "${nasm_helptext}" MATCHES "macho64")
+                  "Unsupported nasm: elf32 object format not supported.")
+      endif()
+    endif()
+  else()
+    if("${AOM_TARGET_SYSTEM}" STREQUAL "Darwin")
+      if(NOT "${nasm_helptext}" MATCHES "macho64")
         message(FATAL_ERROR
-                "Unsupported nasm: macho64 object format not supported.")
-      endif ()
-    elseif ("${AOM_TARGET_SYSTEM}" STREQUAL "Linux")
-      if (NOT "${nasm_helptext}" MATCHES "elf64")
+                  "Unsupported nasm: macho64 object format not supported.")
+      endif()
+    elseif("${AOM_TARGET_SYSTEM}" STREQUAL "Linux")
+      if(NOT "${nasm_helptext}" MATCHES "elf64")
         message(FATAL_ERROR
-                "Unsupported nasm: elf64 object format not supported.")
-      endif ()
-    endif ()
-  endif ()
-endfunction ()
+                  "Unsupported nasm: elf64 object format not supported.")
+      endif()
+    endif()
+  endif()
+endfunction()
 
 # Adds build command for generation of rtcd C source files using
 # build/make/rtcd.pl. $config is the input perl file, $output is the output C
 # include file, $source is the C source file, and $symbol is used for the symbol
 # argument passed to rtcd.pl.
-function (add_rtcd_build_step config output source symbol)
+function(add_rtcd_build_step config output source symbol)
   add_custom_command(
     OUTPUT ${output}
-    COMMAND ${PERL_EXECUTABLE}
-    ARGS "${AOM_ROOT}/build/make/rtcd.pl"
-      --arch=${AOM_TARGET_CPU}
-      --sym=${symbol}
-      ${AOM_RTCD_FLAGS}
-      --config=${AOM_CONFIG_DIR}/${AOM_TARGET_CPU}_rtcd_config.rtcd
-      ${config}
-      > ${output}
+    COMMAND ${PERL_EXECUTABLE} ARGS "${AOM_ROOT}/build/make/rtcd.pl"
+            --arch=${AOM_TARGET_CPU}
+            --sym=${symbol} ${AOM_RTCD_FLAGS}
+            --config=${AOM_CONFIG_DIR}/${AOM_TARGET_CPU}_rtcd_config.rtcd
+            ${config} > ${output}
     DEPENDS ${config}
     COMMENT "Generating ${output}"
-    WORKING_DIRECTORY ${AOM_CONFIG_DIR}
-    VERBATIM)
+    WORKING_DIRECTORY ${AOM_CONFIG_DIR} VERBATIM)
   set_property(SOURCE ${source} PROPERTY OBJECT_DEPENDS ${output})
   set_property(SOURCE ${output} PROPERTY GENERATED)
-endfunction ()
+endfunction()
diff --git a/build/cmake/compiler_flags.cmake b/build/cmake/compiler_flags.cmake
index 93b1bbf..79192c1 100644
--- a/build/cmake/compiler_flags.cmake
+++ b/build/cmake/compiler_flags.cmake
@@ -1,16 +1,16 @@
-##
-## Copyright (c) 2016, Alliance for Open Media. All rights reserved
-##
-## This source code is subject to the terms of the BSD 2 Clause License and
-## the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License
-## was not distributed with this source code in the LICENSE file, you can
-## obtain it at www.aomedia.org/license/software. If the Alliance for Open
-## Media Patent License 1.0 was not distributed with this source code in the
-## PATENTS file, you can obtain it at www.aomedia.org/license/patent.
-##
-if (AOM_BUILD_CMAKE_COMPILER_FLAGS_CMAKE_)
+#
+# Copyright (c) 2016, Alliance for Open Media. All rights reserved
+#
+# This source code is subject to the terms of the BSD 2 Clause License and the
+# Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License was
+# not distributed with this source code in the LICENSE file, you can obtain it
+# at www.aomedia.org/license/software. If the Alliance for Open Media Patent
+# License 1.0 was not distributed with this source code in the PATENTS file, you
+# can obtain it at www.aomedia.org/license/patent.
+#
+if(AOM_BUILD_CMAKE_COMPILER_FLAGS_CMAKE_)
   return()
-endif ()  # AOM_BUILD_CMAKE_COMPILER_FLAGS_CMAKE_
+endif() # AOM_BUILD_CMAKE_COMPILER_FLAGS_CMAKE_
 set(AOM_BUILD_CMAKE_COMPILER_FLAGS_CMAKE_ 1)
 
 include(CheckCCompilerFlag)
@@ -29,302 +29,301 @@
 # otherwise.
 function(is_flag_present flag_cache flag out_is_present)
   string(FIND "${${flag_cache}}" "${flag}" flag_pos)
-  if (${flag_pos} EQUAL -1)
+  if(${flag_pos} EQUAL -1)
     set(${out_is_present} NO PARENT_SCOPE)
-  else ()
+  else()
     set(${out_is_present} YES PARENT_SCOPE)
-  endif ()
-endfunction ()
+  endif()
+endfunction()
 
 # Appends $flag to $flags. Ignores scope via use of FORCE with set() call.
-function (append_flag flags flag)
+function(append_flag flags flag)
   string(FIND "${${flags}}" "${flag}" found)
-  if (${found} EQUAL -1)
+  if(${found} EQUAL -1)
     set(${flags} "${${flags}} ${flag}" CACHE STRING "" FORCE)
-  endif ()
-endfunction ()
+  endif()
+endfunction()
 
 # Checks C compiler for support of $c_flag. Adds $c_flag to all
 # $CMAKE_C_FLAGS_<CONFIG>s stored in AOM_C_CONFIGS when the compile test passes.
 # Caches $c_flag in $AOM_C_FLAGS or $AOM_FAILED_C_FLAGS depending on test
 # outcome.
-function (add_c_flag_if_supported c_flag)
-  if (DEBUG_CMAKE_DISABLE_COMPILER_TESTS)
+function(add_c_flag_if_supported c_flag)
+  if(DEBUG_CMAKE_DISABLE_COMPILER_TESTS)
     return()
-  endif ()
+  endif()
 
   is_flag_present(AOM_C_FLAGS "${c_flag}" flag_ok)
   is_flag_present(AOM_FAILED_C_FLAGS "${c_flag}" flag_failed)
-  if (${flag_ok} OR ${flag_failed})
-    return ()
-  endif ()
+  if(${flag_ok} OR ${flag_failed})
+    return()
+  endif()
 
   unset(C_FLAG_SUPPORTED CACHE)
   message("Checking C compiler flag support for: " ${c_flag})
   check_c_compiler_flag("${c_flag}" C_FLAG_SUPPORTED)
 
-  if (${C_FLAG_SUPPORTED})
+  if(${C_FLAG_SUPPORTED})
     append_flag(AOM_C_FLAGS "${c_flag}")
-    foreach (config ${AOM_C_CONFIGS})
+    foreach(config ${AOM_C_CONFIGS})
       unset(C_FLAG_FOUND)
       append_flag("${config}" "${c_flag}")
-    endforeach ()
-  else ()
+    endforeach()
+  else()
     append_flag(AOM_FAILED_C_FLAGS "${c_flag}")
-  endif ()
-endfunction ()
+  endif()
+endfunction()
 
 # Checks C++ compiler for support of $cxx_flag. Adds $cxx_flag to all
 # $CMAKE_CXX_FLAGS_<CONFIG>s stored in AOM_CXX_CONFIGS when the compile test
-# passes.
-# Caches $cxx_flag in $AOM_CXX_FLAGS or $AOM_FAILED_CXX_FLAGS depending on test
-# outcome.
-function (add_cxx_flag_if_supported cxx_flag)
-  if (DEBUG_CMAKE_DISABLE_COMPILER_TESTS)
+# passes. Caches $cxx_flag in $AOM_CXX_FLAGS or $AOM_FAILED_CXX_FLAGS depending
+# on test outcome.
+function(add_cxx_flag_if_supported cxx_flag)
+  if(DEBUG_CMAKE_DISABLE_COMPILER_TESTS)
     return()
-  endif ()
+  endif()
 
   is_flag_present(AOM_CXX_FLAGS "${cxx_flag}" flag_ok)
   is_flag_present(AOM_FAILED_CXX_FLAGS "${cxx_flag}" flag_failed)
-  if (${flag_ok} OR ${flag_failed})
-    return ()
-  endif ()
+  if(${flag_ok} OR ${flag_failed})
+    return()
+  endif()
 
   unset(CXX_FLAG_SUPPORTED CACHE)
   message("Checking C++ compiler flag support for: " ${cxx_flag})
   check_cxx_compiler_flag("${cxx_flag}" CXX_FLAG_SUPPORTED)
 
-  if (${CXX_FLAG_SUPPORTED})
+  if(${CXX_FLAG_SUPPORTED})
     append_flag(AOM_CXX_FLAGS "${cxx_flag}")
-    foreach (config ${AOM_CXX_CONFIGS})
+    foreach(config ${AOM_CXX_CONFIGS})
       unset(CXX_FLAG_FOUND)
       append_flag("${config}" "${cxx_flag}")
-    endforeach ()
-  else ()
+    endforeach()
+  else()
     append_flag(AOM_FAILED_CXX_FLAGS "${cxx_flag}")
-  endif ()
-endfunction ()
+  endif()
+endfunction()
 
 # Convenience method for adding a flag to both the C and C++ compiler command
 # lines.
-function (add_compiler_flag_if_supported flag)
+function(add_compiler_flag_if_supported flag)
   add_c_flag_if_supported(${flag})
   add_cxx_flag_if_supported(${flag})
-endfunction ()
+endfunction()
 
 # Checks C compiler for support of $c_flag and terminates generation when
 # support is not present.
-function (require_c_flag c_flag update_c_flags)
-  if (DEBUG_CMAKE_DISABLE_COMPILER_TESTS)
+function(require_c_flag c_flag update_c_flags)
+  if(DEBUG_CMAKE_DISABLE_COMPILER_TESTS)
     return()
-  endif ()
+  endif()
 
   is_flag_present(AOM_C_FLAGS "${c_flag}" flag_ok)
-  if (${flag_ok})
-    return ()
-  endif ()
+  if(${flag_ok})
+    return()
+  endif()
 
-  if (NOT "${AOM_EXE_LINKER_FLAGS}" STREQUAL "")
+  if(NOT "${AOM_EXE_LINKER_FLAGS}" STREQUAL "")
     aom_push_var(CMAKE_EXE_LINKER_FLAGS "${AOM_EXE_LINKER_FLAGS}")
-  endif ()
+  endif()
 
   unset(HAVE_C_FLAG CACHE)
   message("Checking C compiler flag support for: " ${c_flag})
   check_c_compiler_flag("${c_flag}" HAVE_C_FLAG)
-  if (NOT HAVE_C_FLAG)
+  if(NOT HAVE_C_FLAG)
     message(FATAL_ERROR
-            "${PROJECT_NAME} requires support for C flag: ${c_flag}.")
-  endif ()
+              "${PROJECT_NAME} requires support for C flag: ${c_flag}.")
+  endif()
 
-  if (NOT "${AOM_EXE_LINKER_FLAGS}" STREQUAL "")
+  if(NOT "${AOM_EXE_LINKER_FLAGS}" STREQUAL "")
     aom_pop_var(CMAKE_EXE_LINKER_FLAGS)
-  endif ()
+  endif()
 
   append_flag(AOM_C_FLAGS "${c_flag}")
-  if (update_c_flags)
-    foreach (config ${AOM_C_CONFIGS})
+  if(update_c_flags)
+    foreach(config ${AOM_C_CONFIGS})
       set(${config} "${${config}} ${c_flag}" CACHE STRING "" FORCE)
-    endforeach ()
-  endif ()
-endfunction ()
+    endforeach()
+  endif()
+endfunction()
 
 # Checks CXX compiler for support of $cxx_flag and terminates generation when
 # support is not present.
-function (require_cxx_flag cxx_flag update_cxx_flags)
-  if (DEBUG_CMAKE_DISABLE_COMPILER_TESTS)
+function(require_cxx_flag cxx_flag update_cxx_flags)
+  if(DEBUG_CMAKE_DISABLE_COMPILER_TESTS)
     return()
-  endif ()
+  endif()
 
   is_flag_present(AOM_CXX_FLAGS "${cxx_flag}" flag_ok)
-  if (${flag_ok})
-    return ()
-  endif ()
+  if(${flag_ok})
+    return()
+  endif()
 
-  if (NOT "${AOM_EXE_LINKER_FLAGS}" STREQUAL "")
+  if(NOT "${AOM_EXE_LINKER_FLAGS}" STREQUAL "")
     aom_push_var(CMAKE_EXE_LINKER_FLAGS "${AOM_EXE_LINKER_FLAGS}")
-  endif ()
+  endif()
 
   unset(HAVE_CXX_FLAG CACHE)
   message("Checking C compiler flag support for: " ${cxx_flag})
   check_cxx_compiler_flag("${cxx_flag}" HAVE_CXX_FLAG)
-  if (NOT HAVE_CXX_FLAG)
+  if(NOT HAVE_CXX_FLAG)
     message(FATAL_ERROR
-            "${PROJECT_NAME} requires support for C flag: ${cxx_flag}.")
-  endif ()
+              "${PROJECT_NAME} requires support for C flag: ${cxx_flag}.")
+  endif()
 
-  if (NOT "${AOM_EXE_LINKER_FLAGS}" STREQUAL "")
+  if(NOT "${AOM_EXE_LINKER_FLAGS}" STREQUAL "")
     aom_pop_var(CMAKE_EXE_LINKER_FLAGS)
-  endif ()
+  endif()
 
   append_flag(AOM_CXX_FLAGS "${cxx_flag}")
-  if (update_cxx_flags)
-    foreach (config ${AOM_CXX_CONFIGS})
+  if(update_cxx_flags)
+    foreach(config ${AOM_CXX_CONFIGS})
       set(${config} "${${config}} ${cxx_flag}" CACHE STRING "" FORCE)
-    endforeach ()
-  endif ()
-endfunction ()
+    endforeach()
+  endif()
+endfunction()
 
 # Checks for support of $flag by both the C and CXX compilers. Terminates
 # generation when support is not present in both compilers.
-function (require_compiler_flag flag update_cmake_flags)
+function(require_compiler_flag flag update_cmake_flags)
   require_c_flag(${flag} ${update_cmake_flags})
   require_cxx_flag(${flag} ${update_cmake_flags})
-endfunction ()
+endfunction()
 
 # Checks only non-MSVC targets for support of $c_flag and terminates generation
 # when support is not present.
-function (require_c_flag_nomsvc c_flag update_c_flags)
-  if (NOT MSVC)
+function(require_c_flag_nomsvc c_flag update_c_flags)
+  if(NOT MSVC)
     require_c_flag(${c_flag} ${update_c_flags})
-  endif ()
-endfunction ()
+  endif()
+endfunction()
 
 # Checks only non-MSVC targets for support of $cxx_flag and terminates
 # generation when support is not present.
-function (require_cxx_flag_nomsvc cxx_flag update_cxx_flags)
-  if (NOT MSVC)
+function(require_cxx_flag_nomsvc cxx_flag update_cxx_flags)
+  if(NOT MSVC)
     require_cxx_flag(${cxx_flag} ${update_cxx_flags})
-  endif ()
-endfunction ()
+  endif()
+endfunction()
 
 # Checks only non-MSVC targets for support of $flag by both the C and CXX
 # compilers. Terminates generation when support is not present in both
 # compilers.
-function (require_compiler_flag_nomsvc flag update_cmake_flags)
+function(require_compiler_flag_nomsvc flag update_cmake_flags)
   require_c_flag_nomsvc(${flag} ${update_cmake_flags})
   require_cxx_flag_nomsvc(${flag} ${update_cmake_flags})
-endfunction ()
+endfunction()
 
 # Adds $preproc_def to C compiler command line (as -D$preproc_def) if not
 # already present.
-function (add_c_preproc_definition preproc_def)
+function(add_c_preproc_definition preproc_def)
   set(preproc_def "-D${preproc_def}")
   is_flag_present(AOM_C_FLAGS "${preproc_def}" flag_cached)
-  if (${flag_cached})
-    return ()
-  endif ()
+  if(${flag_cached})
+    return()
+  endif()
 
-  foreach (config ${AOM_C_CONFIGS})
+  foreach(config ${AOM_C_CONFIGS})
     set(${config} "${${config}} ${preproc_def}" CACHE STRING "" FORCE)
-  endforeach ()
-endfunction ()
+  endforeach()
+endfunction()
 
 # Adds $preproc_def to CXX compiler command line (as -D$preproc_def) if not
 # already present.
-function (add_cxx_preproc_definition preproc_def)
+function(add_cxx_preproc_definition preproc_def)
   set(preproc_def "-D${preproc_def}")
   is_flag_present(AOM_CXX_FLAGS "${preproc_def}" flag_cached)
-  if (${flag_cached})
-    return ()
-  endif ()
+  if(${flag_cached})
+    return()
+  endif()
 
-  foreach (config ${AOM_CXX_CONFIGS})
+  foreach(config ${AOM_CXX_CONFIGS})
     set(${config} "${${config}} ${preproc_def}" CACHE STRING "" FORCE)
-  endforeach ()
-endfunction ()
+  endforeach()
+endfunction()
 
 # Adds $preproc_def to C and CXX compiler command line (as -D$preproc_def) if
 # not already present.
-function (add_preproc_definition preproc_def)
+function(add_preproc_definition preproc_def)
   add_c_preproc_definition(${preproc_def})
   add_cxx_preproc_definition(${preproc_def})
-endfunction ()
+endfunction()
 
 # Adds $flag to assembler command line.
-function (append_as_flag flag)
+function(append_as_flag flag)
   is_flag_present(AOM_AS_FLAGS "${flag}" flag_cached)
-  if (${flag_cached})
-    return ()
-  endif ()
+  if(${flag_cached})
+    return()
+  endif()
   append_flag(AOM_AS_FLAGS "${flag}")
-endfunction ()
+endfunction()
 
 # Adds $flag to the C compiler command line.
-function (append_c_flag flag)
+function(append_c_flag flag)
   is_flag_present(AOM_C_FLAGS "${flag}" flag_cached)
-  if (${flag_cached})
-    return ()
-  endif ()
+  if(${flag_cached})
+    return()
+  endif()
 
-  foreach (config ${AOM_C_CONFIGS})
+  foreach(config ${AOM_C_CONFIGS})
     append_flag(${config} "${flag}")
-  endforeach ()
-endfunction ()
+  endforeach()
+endfunction()
 
 # Adds $flag to the CXX compiler command line.
-function (append_cxx_flag flag)
+function(append_cxx_flag flag)
   is_flag_present(AOM_CXX_FLAGS "${flag}" flag_cached)
-  if (${flag_cached})
-    return ()
-  endif ()
+  if(${flag_cached})
+    return()
+  endif()
 
-  foreach (config ${AOM_CXX_CONFIGS})
+  foreach(config ${AOM_CXX_CONFIGS})
     append_flag(${config} "${flag}")
-  endforeach ()
-endfunction ()
+  endforeach()
+endfunction()
 
 # Adds $flag to the C and CXX compiler command lines.
-function (append_compiler_flag flag)
+function(append_compiler_flag flag)
   append_c_flag(${flag})
   append_cxx_flag(${flag})
-endfunction ()
+endfunction()
 
 # Adds $flag to the executable linker command line when not present.
-function (append_exe_linker_flag flag)
+function(append_exe_linker_flag flag)
   is_flag_present(AOM_EXE_LINKER_FLAGS "${flag}" flag_cached)
-  if (${flag_cached})
+  if(${flag_cached})
     return()
-  endif ()
+  endif()
 
   append_flag(AOM_EXE_LINKER_FLAGS "${flag}")
-  foreach (config ${AOM_EXE_LINKER_CONFIGS})
+  foreach(config ${AOM_EXE_LINKER_CONFIGS})
     append_flag(${config} "${flag}")
-  endforeach ()
-endfunction ()
+  endforeach()
+endfunction()
 
 # Adds $flag to the link flags for $target.
-function (append_link_flag_to_target target flag)
+function(append_link_flag_to_target target flag)
   unset(target_link_flags)
   get_target_property(target_link_flags ${target} LINK_FLAGS)
 
-  if (target_link_flags)
+  if(target_link_flags)
     is_flag_present(target_link_flags "${flag}" flag_found)
-    if (${flag_found})
+    if(${flag_found})
       return()
-    endif ()
+    endif()
     set(target_link_flags "${target_link_flags} ${flag}")
-  else ()
+  else()
     set(target_link_flags "${flag}")
-  endif ()
+  endif()
 
   set_target_properties(${target} PROPERTIES LINK_FLAGS ${target_link_flags})
-endfunction ()
+endfunction()
 
 # Adds $flag to executable linker flags, and makes sure C/CXX builds still work.
-function (require_linker_flag flag)
-  if (DEBUG_CMAKE_DISABLE_COMPILER_TESTS)
+function(require_linker_flag flag)
+  if(DEBUG_CMAKE_DISABLE_COMPILER_TESTS)
     return()
-  endif ()
+  endif()
 
   append_exe_linker_flag(${flag})
 
@@ -333,40 +332,42 @@
   unset(cxx_passed)
   aom_check_cxx_compiles("LINKER_FLAG_CXX_TEST(${flag})" "" cxx_passed)
 
-  if (NOT c_passed OR NOT cxx_passed)
+  if(NOT c_passed OR NOT cxx_passed)
     message(FATAL_ERROR "Linker flag test for ${flag} failed.")
-  endif ()
-endfunction ()
+  endif()
+endfunction()
 
 # Appends flags in $AOM_EXTRA_<TYPE>_FLAGS variables to the flags used at build
 # time.
-function (set_user_flags)
+function(set_user_flags)
+
   # Linker flags are handled first because some C/CXX flags require that a
   # linker flag is present at link time.
-  if (AOM_EXTRA_EXE_LINKER_FLAGS)
+  if(AOM_EXTRA_EXE_LINKER_FLAGS)
     is_flag_present(AOM_EXE_LINKER_FLAGS "${AOM_EXTRA_EXE_LINKER_FLAGS}"
                     extra_present)
-    if (NOT ${extra_present})
+    if(NOT ${extra_present})
       require_linker_flag("${AOM_EXTRA_EXE_LINKER_FLAGS}")
-    endif ()
-  endif ()
-  if (AOM_EXTRA_AS_FLAGS)
+    endif()
+  endif()
+  if(AOM_EXTRA_AS_FLAGS)
+
     # TODO(tomfinegan): assembler flag testing would be a good thing to have.
     is_flag_present(AOM_AS_FLAGS "${AOM_EXTRA_AS_FLAGS}" extra_present)
-    if (NOT ${extra_present})
+    if(NOT ${extra_present})
       append_flag(AOM_AS_FLAGS "${AOM_EXTRA_AS_FLAGS}")
-    endif ()
-  endif ()
-  if (AOM_EXTRA_C_FLAGS)
+    endif()
+  endif()
+  if(AOM_EXTRA_C_FLAGS)
     is_flag_present(AOM_C_FLAGS "${AOM_EXTRA_C_FLAGS}" extra_present)
-    if (NOT ${extra_present})
+    if(NOT ${extra_present})
       require_c_flag("${AOM_EXTRA_C_FLAGS}" YES)
-    endif ()
-  endif ()
-  if (AOM_EXTRA_CXX_FLAGS)
+    endif()
+  endif()
+  if(AOM_EXTRA_CXX_FLAGS)
     is_flag_present(AOM_CXX_FLAGS "${AOM_EXTRA_CXX_FLAGS}" extra_present)
-    if (NOT ${extra_present})
+    if(NOT ${extra_present})
       require_cxx_flag("${AOM_EXTRA_CXX_FLAGS}" YES)
-    endif ()
-  endif ()
-endfunction ()
+    endif()
+  endif()
+endfunction()
diff --git a/build/cmake/compiler_tests.cmake b/build/cmake/compiler_tests.cmake
index d58a185..f115610 100644
--- a/build/cmake/compiler_tests.cmake
+++ b/build/cmake/compiler_tests.cmake
@@ -1,28 +1,30 @@
-##
-## Copyright (c) 2016, Alliance for Open Media. All rights reserved
-##
-## This source code is subject to the terms of the BSD 2 Clause License and
-## the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License
-## was not distributed with this source code in the LICENSE file, you can
-## obtain it at www.aomedia.org/license/software. If the Alliance for Open
-## Media Patent License 1.0 was not distributed with this source code in the
-## PATENTS file, you can obtain it at www.aomedia.org/license/patent.
-##
-if (AOM_BUILD_CMAKE_COMPILER_TESTS_CMAKE_)
+#
+# Copyright (c) 2016, Alliance for Open Media. All rights reserved
+#
+# This source code is subject to the terms of the BSD 2 Clause License and the
+# Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License was
+# not distributed with this source code in the LICENSE file, you can obtain it
+# at www.aomedia.org/license/software. If the Alliance for Open Media Patent
+# License 1.0 was not distributed with this source code in the PATENTS file, you
+# can obtain it at www.aomedia.org/license/patent.
+#
+if(AOM_BUILD_CMAKE_COMPILER_TESTS_CMAKE_)
   return()
-endif ()  # AOM_BUILD_CMAKE_COMPILER_TESTS_CMAKE_
+endif() # AOM_BUILD_CMAKE_COMPILER_TESTS_CMAKE_
 set(AOM_BUILD_CMAKE_COMPILER_TESTS_CMAKE_ 1)
 
 include(CheckCSourceCompiles)
 include(CheckCXXSourceCompiles)
 
 # CMake passes command line flags like this:
-#   $compiler $lang_flags $lang_flags_config ...
+#
+# * $compiler $lang_flags $lang_flags_config ...
+#
 # To ensure the flags tested here and elsewhere are obeyed a list of active
 # build configuration types is built, and flags are applied to the flag strings
 # for each configuration currently active for C and CXX builds as determined by
 # reading $CMAKE_CONFIGURATION_TYPES and $CMAKE_BUILD_TYPE. When
-# $CMAKE_CONFIGURATION_TYPES is non-empty a multi-configuration generator is in
+# $CMAKE_CONFIGURATION_TYPES is non-empty a multi- configuration generator is in
 # use: currently this includes MSVC and Xcode. For other generators
 # $CMAKE_BUILD_TYPE is used. For both cases AOM_<LANG>_CONFIGS is populated with
 # CMake string variable names that contain flags for the currently available
@@ -30,19 +32,19 @@
 unset(AOM_C_CONFIGS)
 unset(AOM_CXX_CONFIGS)
 list(LENGTH CMAKE_CONFIGURATION_TYPES num_configs)
-if (${num_configs} GREATER 0)
-  foreach (config ${CMAKE_CONFIGURATION_TYPES})
+if(${num_configs} GREATER 0)
+  foreach(config ${CMAKE_CONFIGURATION_TYPES})
     string(TOUPPER ${config} config)
     list(APPEND AOM_C_CONFIGS "CMAKE_C_FLAGS_${config}")
     list(APPEND AOM_CXX_CONFIGS "CMAKE_CXX_FLAGS_${config}")
     list(APPEND AOM_EXE_LINKER_CONFIGS "CMAKE_EXE_LINKER_FLAGS_${config}")
-  endforeach ()
-else ()
+  endforeach()
+else()
   string(TOUPPER ${CMAKE_BUILD_TYPE} config)
   set(AOM_C_CONFIGS "CMAKE_C_FLAGS_${config}")
   set(AOM_CXX_CONFIGS "CMAKE_CXX_FLAGS_${config}")
   set(AOM_EXE_LINKER_CONFIGS "CMAKE_EXE_LINKER_FLAGS_${config}")
-endif ()
+endif()
 
 # The basic main() function used in all compile tests.
 set(AOM_C_MAIN "\nint main(void) { return 0; }")
@@ -57,118 +59,117 @@
 function(aom_push_var var new_value)
   set(SAVED_${var} ${${var}} PARENT_SCOPE)
   set(${var} "${${var}} ${new_value}" PARENT_SCOPE)
-endfunction ()
+endfunction()
 
 function(aom_pop_var var)
   set(var ${SAVED_${var}} PARENT_SCOPE)
   unset(SAVED_${var} PARENT_SCOPE)
-endfunction ()
+endfunction()
 
 # Confirms $test_source compiles and stores $test_name in one of
 # $AOM_C_PASSED_TESTS or $AOM_C_FAILED_TESTS depending on out come. When the
-# test passes $result_var is set to 1. When it fails $result_var is unset.
-# The test is not run if the test name is found in either of the passed or
-# failed test variables.
+# test passes $result_var is set to 1. When it fails $result_var is unset. The
+# test is not run if the test name is found in either of the passed or failed
+# test variables.
 function(aom_check_c_compiles test_name test_source result_var)
-  if (DEBUG_CMAKE_DISABLE_COMPILER_TESTS)
+  if(DEBUG_CMAKE_DISABLE_COMPILER_TESTS)
     return()
-  endif ()
+  endif()
 
   unset(C_TEST_PASSED CACHE)
   unset(C_TEST_FAILED CACHE)
   string(FIND "${AOM_C_PASSED_TESTS}" "${test_name}" C_TEST_PASSED)
   string(FIND "${AOM_C_FAILED_TESTS}" "${test_name}" C_TEST_FAILED)
-  if (${C_TEST_PASSED} EQUAL -1 AND ${C_TEST_FAILED} EQUAL -1)
+  if(${C_TEST_PASSED} EQUAL -1 AND ${C_TEST_FAILED} EQUAL -1)
     unset(C_TEST_COMPILED CACHE)
     message("Running C compiler test: ${test_name}")
     check_c_source_compiles("${test_source} ${AOM_C_MAIN}" C_TEST_COMPILED)
     set(${result_var} ${C_TEST_COMPILED} PARENT_SCOPE)
 
-    if (C_TEST_COMPILED)
-      set(AOM_C_PASSED_TESTS "${AOM_C_PASSED_TESTS} ${test_name}" CACHE STRING
-          "" FORCE)
-    else ()
-      set(AOM_C_FAILED_TESTS "${AOM_C_FAILED_TESTS} ${test_name}" CACHE STRING
-          "" FORCE)
+    if(C_TEST_COMPILED)
+      set(AOM_C_PASSED_TESTS "${AOM_C_PASSED_TESTS} ${test_name}"
+          CACHE STRING "" FORCE)
+    else()
+      set(AOM_C_FAILED_TESTS "${AOM_C_FAILED_TESTS} ${test_name}"
+          CACHE STRING "" FORCE)
       message("C Compiler test ${test_name} failed.")
-    endif ()
-  elseif (NOT ${C_TEST_PASSED} EQUAL -1)
+    endif()
+  elseif(NOT ${C_TEST_PASSED} EQUAL -1)
     set(${result_var} 1 PARENT_SCOPE)
-  else ()  # ${C_TEST_FAILED} NOT EQUAL -1
+  else() # ${C_TEST_FAILED} NOT EQUAL -1
     unset(${result_var} PARENT_SCOPE)
-  endif ()
-endfunction ()
+  endif()
+endfunction()
 
 # Confirms $test_source compiles and stores $test_name in one of
 # $AOM_CXX_PASSED_TESTS or $AOM_CXX_FAILED_TESTS depending on out come. When the
-# test passes $result_var is set to 1. When it fails $result_var is unset.
-# The test is not run if the test name is found in either of the passed or
-# failed test variables.
+# test passes $result_var is set to 1. When it fails $result_var is unset. The
+# test is not run if the test name is found in either of the passed or failed
+# test variables.
 function(aom_check_cxx_compiles test_name test_source result_var)
-  if (DEBUG_CMAKE_DISABLE_COMPILER_TESTS)
+  if(DEBUG_CMAKE_DISABLE_COMPILER_TESTS)
     return()
-  endif ()
+  endif()
 
   unset(CXX_TEST_PASSED CACHE)
   unset(CXX_TEST_FAILED CACHE)
   string(FIND "${AOM_CXX_PASSED_TESTS}" "${test_name}" CXX_TEST_PASSED)
   string(FIND "${AOM_CXX_FAILED_TESTS}" "${test_name}" CXX_TEST_FAILED)
-  if (${CXX_TEST_PASSED} EQUAL -1 AND ${CXX_TEST_FAILED} EQUAL -1)
+  if(${CXX_TEST_PASSED} EQUAL -1 AND ${CXX_TEST_FAILED} EQUAL -1)
     unset(CXX_TEST_COMPILED CACHE)
     message("Running CXX compiler test: ${test_name}")
     check_cxx_source_compiles("${test_source} ${AOM_CXX_MAIN}"
                               CXX_TEST_COMPILED)
     set(${result_var} ${CXX_TEST_COMPILED} PARENT_SCOPE)
 
-    if (CXX_TEST_COMPILED)
-      set(AOM_CXX_PASSED_TESTS "${AOM_CXX_PASSED_TESTS} ${test_name}" CACHE
-          STRING "" FORCE)
-    else ()
-      set(AOM_CXX_FAILED_TESTS "${AOM_CXX_FAILED_TESTS} ${test_name}" CACHE
-          STRING "" FORCE)
+    if(CXX_TEST_COMPILED)
+      set(AOM_CXX_PASSED_TESTS "${AOM_CXX_PASSED_TESTS} ${test_name}"
+          CACHE STRING "" FORCE)
+    else()
+      set(AOM_CXX_FAILED_TESTS "${AOM_CXX_FAILED_TESTS} ${test_name}"
+          CACHE STRING "" FORCE)
       message("CXX Compiler test ${test_name} failed.")
-    endif ()
-  elseif (NOT ${CXX_TEST_PASSED} EQUAL -1)
+    endif()
+  elseif(NOT ${CXX_TEST_PASSED} EQUAL -1)
     set(${result_var} 1 PARENT_SCOPE)
-  else ()  # ${CXX_TEST_FAILED} NOT EQUAL -1
+  else() # ${CXX_TEST_FAILED} NOT EQUAL -1
     unset(${result_var} PARENT_SCOPE)
-  endif ()
-endfunction ()
+  endif()
+endfunction()
 
 # Convenience function that confirms $test_source compiles as C and C++.
 # $result_var is set to 1 when both tests are successful, and 0 when one or both
-# tests fail.
-# Note: This function is intended to be used to write to result variables that
-# are expanded via configure_file(). $result_var is set to 1 or 0 to allow
-# direct usage of the value in generated source files.
+# tests fail. Note: This function is intended to be used to write to result
+# variables that are expanded via configure_file(). $result_var is set to 1 or 0
+# to allow direct usage of the value in generated source files.
 function(aom_check_source_compiles test_name test_source result_var)
   unset(C_PASSED)
   unset(CXX_PASSED)
   aom_check_c_compiles(${test_name} ${test_source} C_PASSED)
   aom_check_cxx_compiles(${test_name} ${test_source} CXX_PASSED)
-  if (C_PASSED AND CXX_PASSED)
+  if(C_PASSED AND CXX_PASSED)
     set(${result_var} 1 PARENT_SCOPE)
-  else ()
+  else()
     set(${result_var} 0 PARENT_SCOPE)
-  endif ()
-endfunction ()
+  endif()
+endfunction()
 
 # When inline support is detected for the current compiler the supported
 # inlining keyword is written to $result in caller scope.
-function (aom_get_inline result)
+function(aom_get_inline result)
   aom_check_source_compiles("inline_check_1"
                             "static inline void function(void) {}"
                             HAVE_INLINE_1)
-  if (HAVE_INLINE_1 EQUAL 1)
+  if(HAVE_INLINE_1 EQUAL 1)
     set(${result} "inline" PARENT_SCOPE)
     return()
-  endif ()
+  endif()
 
   # Check __inline.
   aom_check_source_compiles("inline_check_2"
                             "static __inline void function(void) {}"
                             HAVE_INLINE_2)
-  if (HAVE_INLINE_2 EQUAL 1)
+  if(HAVE_INLINE_2 EQUAL 1)
     set(${result} "__inline" PARENT_SCOPE)
-  endif ()
-endfunction ()
+  endif()
+endfunction()
diff --git a/build/cmake/cpu.cmake b/build/cmake/cpu.cmake
index 9c643d4..ca90b22 100644
--- a/build/cmake/cpu.cmake
+++ b/build/cmake/cpu.cmake
@@ -1,107 +1,107 @@
-##
-## Copyright (c) 2017, Alliance for Open Media. All rights reserved
-##
-## This source code is subject to the terms of the BSD 2 Clause License and
-## the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License
-## was not distributed with this source code in the LICENSE file, you can
-## obtain it at www.aomedia.org/license/software. If the Alliance for Open
-## Media Patent License 1.0 was not distributed with this source code in the
-## PATENTS file, you can obtain it at www.aomedia.org/license/patent.
-##
+#
+# Copyright (c) 2017, Alliance for Open Media. All rights reserved
+#
+# This source code is subject to the terms of the BSD 2 Clause License and the
+# Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License was
+# not distributed with this source code in the LICENSE file, you can obtain it
+# at www.aomedia.org/license/software. If the Alliance for Open Media Patent
+# License 1.0 was not distributed with this source code in the PATENTS file, you
+# can obtain it at www.aomedia.org/license/patent.
+#
 
-if ("${AOM_TARGET_CPU}" STREQUAL "arm64")
+if("${AOM_TARGET_CPU}" STREQUAL "arm64")
   set(ARCH_ARM 1)
   set(RTCD_ARCH_ARM "yes")
 
-  if (ENABLE_NEON)
+  if(ENABLE_NEON)
     set(HAVE_NEON 1)
     set(RTCD_HAVE_NEON "yes")
-  else ()
+  else()
     set(HAVE_NEON 0)
     set(AOM_RTCD_FLAGS ${AOM_RTCD_FLAGS} --disable-neon)
-  endif ()
-elseif ("${AOM_TARGET_CPU}" MATCHES "^armv7")
+  endif()
+elseif("${AOM_TARGET_CPU}" MATCHES "^armv7")
   set(ARCH_ARM 1)
   set(RTCD_ARCH_ARM "yes")
 
-  if (ENABLE_NEON)
+  if(ENABLE_NEON)
     set(HAVE_NEON 1)
     set(RTCD_HAVE_NEON "yes")
-  else ()
+  else()
     set(HAVE_NEON 0)
     set(AOM_RTCD_FLAGS ${AOM_RTCD_FLAGS} --disable-neon)
-  endif ()
+  endif()
 
-  if (ENABLE_NEON_ASM)
+  if(ENABLE_NEON_ASM)
     set(HAVE_NEON_ASM 1)
     set(RTCD_HAVE_NEON_ASM "yes")
-  else ()
+  else()
     set(HAVE_NEON_ASM 0)
-  endif ()
-    set(AOM_RTCD_FLAGS ${AOM_RTCD_FLAGS} --disable-neon_asm)
-elseif ("${AOM_TARGET_CPU}" MATCHES "^mips")
+  endif()
+  set(AOM_RTCD_FLAGS ${AOM_RTCD_FLAGS} --disable-neon_asm)
+elseif("${AOM_TARGET_CPU}" MATCHES "^mips")
   set(ARCH_MIPS 1)
   set(RTCD_ARCH_MIPS "yes")
 
-  if ("${AOM_TARGET_CPU}" STREQUAL "mips32")
+  if("${AOM_TARGET_CPU}" STREQUAL "mips32")
     set(HAVE_MIPS32 1)
     set(RTCD_HAVE_MIPS32 "yes")
-  elseif ("${AOM_TARGET_CPU}" STREQUAL "mips64")
+  elseif("${AOM_TARGET_CPU}" STREQUAL "mips64")
     set(HAVE_MIPS64 1)
     set(RTCD_HAVE_MIPS64 "yes")
-  endif ()
+  endif()
 
   # HAVE_DSPR2 is set by mips toolchain files.
-  if (ENABLE_DSPR2 AND HAVE_DSPR2)
+  if(ENABLE_DSPR2 AND HAVE_DSPR2)
     set(RTCD_HAVE_DSPR2 "yes")
-  else ()
+  else()
     set(HAVE_DSPR2 0)
     set(AOM_RTCD_FLAGS ${AOM_RTCD_FLAGS} --disable-dspr2)
-  endif ()
+  endif()
 
   # HAVE_MSA is set by mips toolchain files.
-  if (ENABLE_MSA AND HAVE_MSA)
+  if(ENABLE_MSA AND HAVE_MSA)
     set(RTCD_HAVE_MSA "yes")
-  else ()
+  else()
     set(HAVE_MSA 0)
     set(AOM_RTCD_FLAGS ${AOM_RTCD_FLAGS} --disable-msa)
-  endif ()
-elseif ("${AOM_TARGET_CPU}" MATCHES "ppc")
+  endif()
+elseif("${AOM_TARGET_CPU}" MATCHES "ppc")
   set(ARCH_PPC 1)
   set(RTCD_ARCH_PPC "yes")
 
-  if (ENABLE_VSX)
+  if(ENABLE_VSX)
     set(HAVE_VSX 1)
     set(RTCD_HAVE_VSX "yes")
-  else ()
+  else()
     set(HAVE_VSX 0)
     set(AOM_RTCD_FLAGS ${AOM_RTCD_FLAGS} --disable-vsx)
-  endif ()
-elseif ("${AOM_TARGET_CPU}" MATCHES "^x86")
-  if ("${AOM_TARGET_CPU}" STREQUAL "x86")
+  endif()
+elseif("${AOM_TARGET_CPU}" MATCHES "^x86")
+  if("${AOM_TARGET_CPU}" STREQUAL "x86")
     set(ARCH_X86 1)
     set(RTCD_ARCH_X86 "yes")
-  elseif ("${AOM_TARGET_CPU}" STREQUAL "x86_64")
+  elseif("${AOM_TARGET_CPU}" STREQUAL "x86_64")
     set(ARCH_X86_64 1)
     set(RTCD_ARCH_X86_64 "yes")
-  endif ()
+  endif()
 
   set(X86_FLAVORS "MMX;SSE;SSE2;SSE3;SSSE3;SSE4_1;SSE4_2;AVX;AVX2")
-  foreach (flavor ${X86_FLAVORS})
-    if (ENABLE_${flavor} AND NOT disable_remaining_flavors)
+  foreach(flavor ${X86_FLAVORS})
+    if(ENABLE_${flavor} AND NOT disable_remaining_flavors)
       set(HAVE_${flavor} 1)
       set(RTCD_HAVE_${flavor} "yes")
-    else ()
+    else()
       set(disable_remaining_flavors 1)
       set(HAVE_${flavor} 0)
       string(TOLOWER ${flavor} flavor)
       set(AOM_RTCD_FLAGS ${AOM_RTCD_FLAGS} --disable-${flavor})
-    endif ()
-  endforeach ()
-endif ()
+    endif()
+  endforeach()
+endif()
 
-foreach (config_var ${AOM_CONFIG_VARS})
-  if (${${config_var}})
+foreach(config_var ${AOM_CONFIG_VARS})
+  if(${${config_var}})
     set(RTCD_${config_var} yes)
-  endif ()
-endforeach ()
+  endif()
+endforeach()
diff --git a/build/cmake/dist.cmake b/build/cmake/dist.cmake
index b517765..6f81736 100644
--- a/build/cmake/dist.cmake
+++ b/build/cmake/dist.cmake
@@ -1,64 +1,64 @@
-##
-## Copyright (c) 2017, Alliance for Open Media. All rights reserved
-##
-## This source code is subject to the terms of the BSD 2 Clause License and
-## the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License
-## was not distributed with this source code in the LICENSE file, you can
-## obtain it at www.aomedia.org/license/software. If the Alliance for Open
-## Media Patent License 1.0 was not distributed with this source code in the
-## PATENTS file, you can obtain it at www.aomedia.org/license/patent.
-##
+#
+# Copyright (c) 2017, Alliance for Open Media. All rights reserved
+#
+# This source code is subject to the terms of the BSD 2 Clause License and the
+# Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License was
+# not distributed with this source code in the LICENSE file, you can obtain it
+# at www.aomedia.org/license/software. If the Alliance for Open Media Patent
+# License 1.0 was not distributed with this source code in the PATENTS file, you
+# can obtain it at www.aomedia.org/license/patent.
+#
 cmake_minimum_required(VERSION 3.5)
 
 # Converts spaces in $in_string to semicolons and writes the output to
 # $out_string. In CMake's eyes this converts the input string to a list.
-function (listify_string in_string out_string)
+function(listify_string in_string out_string)
   string(REPLACE " " ";" ${out_string} ${in_string})
   set(${out_string} "${${out_string}}" PARENT_SCOPE)
-endfunction ()
+endfunction()
 
-set(REQUIRED_ARGS "AOM_ROOT" "AOM_CONFIG_DIR" "AOM_DIST_DIR" "AOM_DIST_INCLUDES"
-    "AOM_DIST_LIBS" "ENABLE_DOCS")
+set(REQUIRED_ARGS "AOM_ROOT" "AOM_CONFIG_DIR" "AOM_DIST_DIR"
+    "AOM_DIST_INCLUDES" "AOM_DIST_LIBS" "ENABLE_DOCS")
 
-foreach (arg ${REQUIRED_ARGS})
-  if ("${${arg}}" STREQUAL "")
+foreach(arg ${REQUIRED_ARGS})
+  if("${${arg}}" STREQUAL "")
     message(FATAL_ERROR "${arg} must not be empty.")
-  endif ()
-endforeach ()
+  endif()
+endforeach()
 
-if (ENABLE_DOCS)
+if(ENABLE_DOCS)
   file(INSTALL "${AOM_CONFIG_DIR}/docs" DESTINATION "${AOM_DIST_DIR}")
-endif ()
+endif()
 
-if (AOM_DIST_EXAMPLES)
+if(AOM_DIST_EXAMPLES)
   listify_string("${AOM_DIST_EXAMPLES}" "AOM_DIST_EXAMPLES")
-  foreach (example ${AOM_DIST_EXAMPLES})
-    if (NOT "${example}" MATCHES "aomdec\|aomenc")
+  foreach(example ${AOM_DIST_EXAMPLES})
+    if(NOT "${example}" MATCHES "aomdec\|aomenc")
       file(INSTALL "${example}" DESTINATION "${AOM_DIST_DIR}/bin/examples")
-    endif ()
-  endforeach ()
-endif ()
+    endif()
+  endforeach()
+endif()
 
-if (AOM_DIST_TOOLS)
+if(AOM_DIST_TOOLS)
   listify_string("${AOM_DIST_TOOLS}" "AOM_DIST_TOOLS")
-  foreach (tool ${AOM_DIST_TOOLS})
+  foreach(tool ${AOM_DIST_TOOLS})
     file(INSTALL "${tool}" DESTINATION "${AOM_DIST_DIR}/bin/tools")
-  endforeach ()
-endif ()
+  endforeach()
+endif()
 
-if (AOM_DIST_APPS)
+if(AOM_DIST_APPS)
   listify_string("${AOM_DIST_APPS}" "AOM_DIST_APPS")
-  foreach (app ${AOM_DIST_APPS})
+  foreach(app ${AOM_DIST_APPS})
     file(INSTALL "${app}" DESTINATION "${AOM_DIST_DIR}/bin")
-  endforeach ()
-endif ()
+  endforeach()
+endif()
 
 listify_string("${AOM_DIST_INCLUDES}" "AOM_DIST_INCLUDES")
-foreach (inc ${AOM_DIST_INCLUDES})
+foreach(inc ${AOM_DIST_INCLUDES})
   file(INSTALL "${inc}" DESTINATION "${AOM_DIST_DIR}/include/aom")
-endforeach ()
+endforeach()
 
 listify_string("${AOM_DIST_LIBS}" "AOM_DIST_LIBS")
-foreach (lib ${AOM_DIST_LIBS})
+foreach(lib ${AOM_DIST_LIBS})
   file(INSTALL "${lib}" DESTINATION "${AOM_DIST_DIR}/lib")
-endforeach ()
+endforeach()
diff --git a/build/cmake/exports.cmake b/build/cmake/exports.cmake
index b4cbf1e..5abfc9a 100644
--- a/build/cmake/exports.cmake
+++ b/build/cmake/exports.cmake
@@ -1,44 +1,41 @@
-##
-## Copyright (c) 2017, Alliance for Open Media. All rights reserved
-##
-## This source code is subject to the terms of the BSD 2 Clause License and
-## the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License
-## was not distributed with this source code in the LICENSE file, you can
-## obtain it at www.aomedia.org/license/software. If the Alliance for Open
-## Media Patent License 1.0 was not distributed with this source code in the
-## PATENTS file, you can obtain it at www.aomedia.org/license/patent.
-##
-if (AOM_BUILD_CMAKE_EXPORTS_CMAKE_)
+#
+# Copyright (c) 2017, Alliance for Open Media. All rights reserved
+#
+# This source code is subject to the terms of the BSD 2 Clause License and the
+# Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License was
+# not distributed with this source code in the LICENSE file, you can obtain it
+# at www.aomedia.org/license/software. If the Alliance for Open Media Patent
+# License 1.0 was not distributed with this source code in the PATENTS file, you
+# can obtain it at www.aomedia.org/license/patent.
+#
+if(AOM_BUILD_CMAKE_EXPORTS_CMAKE_)
   return()
-endif ()  # AOM_BUILD_CMAKE_EXPORTS_CMAKE_
+endif() # AOM_BUILD_CMAKE_EXPORTS_CMAKE_
 set(AOM_BUILD_CMAKE_EXPORTS_CMAKE_ 1)
 
 include("${AOM_ROOT}/build/cmake/exports_sources.cmake")
 
 # Creates the custom target which handles generation of the symbol export lists.
-function (setup_exports_target)
-  if ("${AOM_TARGET_SYSTEM}" STREQUAL "Darwin")
+function(setup_exports_target)
+  if("${AOM_TARGET_SYSTEM}" STREQUAL "Darwin")
     set(symbol_file_ext "syms")
-  elseif ("${AOM_TARGET_SYSTEM}" MATCHES "Windows\|MSYS" AND MSVC)
+  elseif("${AOM_TARGET_SYSTEM}" MATCHES "Windows\|MSYS" AND MSVC)
     set(symbol_file_ext "def")
-  else ()
+  else()
     set(symbol_file_ext "ver")
-  endif ()
+  endif()
 
   set(aom_sym_file "${AOM_CONFIG_DIR}/libaom.${symbol_file_ext}")
 
   add_custom_target(generate_exports
-                    COMMAND ${CMAKE_COMMAND}
-                      -DAOM_ROOT="${AOM_ROOT}"
-                      -DAOM_CONFIG_DIR="${AOM_CONFIG_DIR}"
-                      -DAOM_TARGET_SYSTEM=${AOM_TARGET_SYSTEM}
-                      -DAOM_SYM_FILE="${aom_sym_file}"
-                      -DAOM_MSVC=${MSVC}
-                      -DAOM_XCODE=${XCODE}
-                      -DCONFIG_NAME=$<CONFIG>
-                      -DCONFIG_AV1_DECODER=${CONFIG_AV1_DECODER}
-                      -DCONFIG_AV1_ENCODER=${CONFIG_AV1_ENCODER}
-                      -P "${AOM_ROOT}/build/cmake/generate_exports.cmake"
+                    COMMAND ${CMAKE_COMMAND} -DAOM_ROOT="${AOM_ROOT}"
+                            -DAOM_CONFIG_DIR="${AOM_CONFIG_DIR}"
+                            -DAOM_TARGET_SYSTEM=${AOM_TARGET_SYSTEM}
+                            -DAOM_SYM_FILE="${aom_sym_file}" -DAOM_MSVC=${MSVC}
+                            -DAOM_XCODE=${XCODE} -DCONFIG_NAME=$<CONFIG>
+                            -DCONFIG_AV1_DECODER=${CONFIG_AV1_DECODER}
+                            -DCONFIG_AV1_ENCODER=${CONFIG_AV1_ENCODER} -P
+                            "${AOM_ROOT}/build/cmake/generate_exports.cmake"
                     SOURCES ${AOM_EXPORTS_SOURCES}
                     DEPENDS ${AOM_EXPORTS_SOURCES})
 
@@ -46,20 +43,20 @@
   # creating the dylib.
   add_dependencies(aom generate_exports)
 
-  if (APPLE)
-    set_property(TARGET aom APPEND_STRING PROPERTY LINK_FLAGS
-                 "-exported_symbols_list ${aom_sym_file}")
-  elseif (WIN32)
+  if(APPLE)
+    set_property(TARGET aom APPEND_STRING
+                 PROPERTY LINK_FLAGS "-exported_symbols_list ${aom_sym_file}")
+  elseif(WIN32)
     message(FATAL_ERROR "Windows DLL builds not supported yet.")
-    if (NOT MSVC)
-      set_property(TARGET aom APPEND_STRING PROPERTY LINK_FLAGS
-                   "-Wl,--version-script ${aom_sym_file}")
-    endif ()
+    if(NOT MSVC)
+      set_property(TARGET aom APPEND_STRING
+                   PROPERTY LINK_FLAGS "-Wl,--version-script ${aom_sym_file}")
+    endif()
 
     # TODO(tomfinegan): Sort out the import lib situation and flags for MSVC.
 
-  else ()
-    set_property(TARGET aom APPEND_STRING PROPERTY LINK_FLAGS
-                 "-Wl,--version-script,${aom_sym_file}")
-  endif ()
-endfunction ()
+  else()
+    set_property(TARGET aom APPEND_STRING
+                 PROPERTY LINK_FLAGS "-Wl,--version-script,${aom_sym_file}")
+  endif()
+endfunction()
diff --git a/build/cmake/exports_sources.cmake b/build/cmake/exports_sources.cmake
index db34cb2..48790db 100644
--- a/build/cmake/exports_sources.cmake
+++ b/build/cmake/exports_sources.cmake
@@ -1,30 +1,26 @@
-##
-## Copyright (c) 2017, Alliance for Open Media. All rights reserved
-##
-## This source code is subject to the terms of the BSD 2 Clause License and
-## the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License
-## was not distributed with this source code in the LICENSE file, you can
-## obtain it at www.aomedia.org/license/software. If the Alliance for Open
-## Media Patent License 1.0 was not distributed with this source code in the
-## PATENTS file, you can obtain it at www.aomedia.org/license/patent.
-##
-if (AOM_BUILD_CMAKE_EXPORTS_SOURCES_CMAKE_)
+#
+# Copyright (c) 2017, Alliance for Open Media. All rights reserved
+#
+# This source code is subject to the terms of the BSD 2 Clause License and the
+# Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License was
+# not distributed with this source code in the LICENSE file, you can obtain it
+# at www.aomedia.org/license/software. If the Alliance for Open Media Patent
+# License 1.0 was not distributed with this source code in the PATENTS file, you
+# can obtain it at www.aomedia.org/license/patent.
+#
+if(AOM_BUILD_CMAKE_EXPORTS_SOURCES_CMAKE_)
   return()
-endif ()  # AOM_BUILD_CMAKE_EXPORTS_SOURCES_CMAKE_
+endif() # AOM_BUILD_CMAKE_EXPORTS_SOURCES_CMAKE_
 set(AOM_BUILD_CMAKE_EXPORTS_SOURCES_CMAKE_ 1)
 
 set(AOM_EXPORTS_SOURCES "${AOM_ROOT}/aom/exports_com")
 
-if (CONFIG_AV1_DECODER)
-  set(AOM_EXPORTS_SOURCES
-      ${AOM_EXPORTS_SOURCES}
-      "${AOM_ROOT}/aom/exports_dec"
+if(CONFIG_AV1_DECODER)
+  set(AOM_EXPORTS_SOURCES ${AOM_EXPORTS_SOURCES} "${AOM_ROOT}/aom/exports_dec"
       "${AOM_ROOT}/av1/exports_dec")
-endif ()
+endif()
 
-if (CONFIG_AV1_ENCODER)
-  set(AOM_EXPORTS_SOURCES
-      ${AOM_EXPORTS_SOURCES}
-      "${AOM_ROOT}/aom/exports_enc"
+if(CONFIG_AV1_ENCODER)
+  set(AOM_EXPORTS_SOURCES ${AOM_EXPORTS_SOURCES} "${AOM_ROOT}/aom/exports_enc"
       "${AOM_ROOT}/av1/exports_enc")
-endif ()
+endif()
diff --git a/build/cmake/generate_aom_config_templates.cmake b/build/cmake/generate_aom_config_templates.cmake
index 193332e..eef5eb8 100644
--- a/build/cmake/generate_aom_config_templates.cmake
+++ b/build/cmake/generate_aom_config_templates.cmake
@@ -1,18 +1,19 @@
-##
-## Copyright (c) 2017, Alliance for Open Media. All rights reserved
-##
-## This source code is subject to the terms of the BSD 2 Clause License and
-## the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License
-## was not distributed with this source code in the LICENSE file, you can
-## obtain it at www.aomedia.org/license/software. If the Alliance for Open
-## Media Patent License 1.0 was not distributed with this source code in the
-## PATENTS file, you can obtain it at www.aomedia.org/license/patent.
-##
+#
+# Copyright (c) 2017, Alliance for Open Media. All rights reserved
+#
+# This source code is subject to the terms of the BSD 2 Clause License and the
+# Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License was
+# not distributed with this source code in the LICENSE file, you can obtain it
+# at www.aomedia.org/license/software. If the Alliance for Open Media Patent
+# License 1.0 was not distributed with this source code in the PATENTS file, you
+# can obtain it at www.aomedia.org/license/patent.
+#
 cmake_minimum_required(VERSION 3.5)
 
 string(TIMESTAMP year "%Y")
-set(asm_file_header_block
-"\;
+set(
+  asm_file_header_block
+  "\;
 \; Copyright (c) ${year}, Alliance for Open Media. All rights reserved
 \;
 \; This source code is subject to the terms of the BSD 2 Clause License and
@@ -22,9 +23,11 @@
 \; Media Patent License 1.0 was not distributed with this source code in the
 \; PATENTS file, you can obtain it at www.aomedia.org/license/patent.
 \;
-")
-set(h_file_header_block
-"/*
+"
+  )
+set(
+  h_file_header_block
+  "/*
  * Copyright (c) ${year}, Alliance for Open Media. All rights reserved
  *
  * This source code is subject to the terms of the BSD 2 Clause License and
@@ -36,9 +39,11 @@
  */
 \#ifndef AOM_CONFIG_H_
 \#define AOM_CONFIG_H_
-")
-set(cmake_file_header_block
-"##
+"
+  )
+set(
+  cmake_file_header_block
+  "##
 ## Copyright (c) ${year}, Alliance for Open Media. All rights reserved
 ##
 ## This source code is subject to the terms of the BSD 2 Clause License and
@@ -48,28 +53,29 @@
 ## Media Patent License 1.0 was not distributed with this source code in the
 ## PATENTS file, you can obtain it at www.aomedia.org/license/patent.
 ##
-")
+"
+  )
 
 # Terminates cmake execution when $var_name is an empty string, or the variable
 # name it contains does not expand to an existing directory.
-function (check_directory_var var_name)
-  if ("${var_name}" STREQUAL "")
+function(check_directory_var var_name)
+  if("${var_name}" STREQUAL "")
     message(FATAL_ERROR "The CMake variable ${var_name} must be defined.")
-  endif ()
+  endif()
 
-  if (NOT EXISTS "${${var_name}}")
+  if(NOT EXISTS "${${var_name}}")
     message(FATAL_ERROR "${${var_name}} (${var_name}) missing.")
-  endif ()
-endfunction ()
+  endif()
+endfunction()
 
 check_directory_var(AOM_CONFIG_DIR)
 check_directory_var(AOM_ROOT)
 
 set(AOM_DEFAULTS "${AOM_ROOT}/build/cmake/aom_config_defaults.cmake")
-if (NOT EXISTS "${AOM_DEFAULTS}")
+if(NOT EXISTS "${AOM_DEFAULTS}")
   message(FATAL_ERROR
-          "Configuration default values file (${AOM_DEFAULTS}) missing.")
-endif ()
+            "Configuration default values file (${AOM_DEFAULTS}) missing.")
+endif()
 
 include("${AOM_ROOT}/build/cmake/aom_config_defaults.cmake")
 get_cmake_property(cmake_cache_vars CACHE_VARIABLES)
@@ -77,30 +83,28 @@
 set(aom_config_h_template "${AOM_CONFIG_DIR}/aom_config.h.cmake")
 file(WRITE "${aom_config_h_template}" ${h_file_header_block})
 foreach(cache_var ${cmake_cache_vars})
-  if (NOT "${cache_var}" MATCHES "AOM_CONFIG_DIR\|AOM_ROOT\|^CMAKE_")
-    file(APPEND
-         "${aom_config_h_template}" "\#define ${cache_var} \${${cache_var}}\n")
-  endif ()
+  if(NOT "${cache_var}" MATCHES "AOM_CONFIG_DIR\|AOM_ROOT\|^CMAKE_")
+    file(APPEND "${aom_config_h_template}"
+                "\#define ${cache_var} \${${cache_var}}\n")
+  endif()
 endforeach()
 file(APPEND "${aom_config_h_template}" "\#endif  /* AOM_CONFIG_H_ */")
 
 set(aom_asm_config_template "${AOM_CONFIG_DIR}/aom_config.asm.cmake")
 file(WRITE "${aom_asm_config_template}" ${asm_file_header_block})
 foreach(cache_var ${cmake_cache_vars})
-  if (NOT "${cache_var}" MATCHES
-      "AOM_CONFIG_DIR\|AOM_ROOT\|^CMAKE_\|INLINE")
+  if(NOT "${cache_var}" MATCHES "AOM_CONFIG_DIR\|AOM_ROOT\|^CMAKE_\|INLINE")
     file(APPEND "${aom_asm_config_template}"
-         "${cache_var} equ \${${cache_var}}\n")
-  endif ()
-endforeach ()
+                "${cache_var} equ \${${cache_var}}\n")
+  endif()
+endforeach()
 
 set(aom_rtcd_config_template "${AOM_CONFIG_DIR}/rtcd_config.cmake")
 file(WRITE "${aom_rtcd_config_template}" ${cmake_file_header_block})
 foreach(cache_var ${cmake_cache_vars})
-  if (NOT "${cache_var}" MATCHES
-      "AOM_CONFIG_DIR\|AOM_ROOT\|^CMAKE_\|INLINE")
+  if(NOT "${cache_var}" MATCHES "AOM_CONFIG_DIR\|AOM_ROOT\|^CMAKE_\|INLINE")
     file(APPEND "${aom_rtcd_config_template}"
-         "${cache_var}=\${RTCD_${cache_var}}\n")
-  endif ()
-endforeach ()
+                "${cache_var}=\${RTCD_${cache_var}}\n")
+  endif()
+endforeach()
 
diff --git a/build/cmake/generate_exports.cmake b/build/cmake/generate_exports.cmake
index baa2982..4dce3a6 100644
--- a/build/cmake/generate_exports.cmake
+++ b/build/cmake/generate_exports.cmake
@@ -1,64 +1,60 @@
-##
-## Copyright (c) 2017, Alliance for Open Media. All rights reserved
-##
-## This source code is subject to the terms of the BSD 2 Clause License and
-## the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License
-## was not distributed with this source code in the LICENSE file, you can
-## obtain it at www.aomedia.org/license/software. If the Alliance for Open
-## Media Patent License 1.0 was not distributed with this source code in the
-## PATENTS file, you can obtain it at www.aomedia.org/license/patent.
-##
+#
+# Copyright (c) 2017, Alliance for Open Media. All rights reserved
+#
+# This source code is subject to the terms of the BSD 2 Clause License and the
+# Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License was
+# not distributed with this source code in the LICENSE file, you can obtain it
+# at www.aomedia.org/license/software. If the Alliance for Open Media Patent
+# License 1.0 was not distributed with this source code in the PATENTS file, you
+# can obtain it at www.aomedia.org/license/patent.
+#
 cmake_minimum_required(VERSION 3.5)
 
-set(REQUIRED_ARGS "AOM_ROOT" "AOM_CONFIG_DIR" "AOM_TARGET_SYSTEM" "AOM_SYM_FILE"
-    "CONFIG_AV1_DECODER" "CONFIG_AV1_ENCODER")
+set(REQUIRED_ARGS "AOM_ROOT" "AOM_CONFIG_DIR" "AOM_TARGET_SYSTEM"
+    "AOM_SYM_FILE" "CONFIG_AV1_DECODER" "CONFIG_AV1_ENCODER")
 
-foreach (arg ${REQUIRED_ARGS})
-  if ("${${arg}}" STREQUAL "")
+foreach(arg ${REQUIRED_ARGS})
+  if("${${arg}}" STREQUAL "")
     message(FATAL_ERROR "${arg} must not be empty.")
-  endif ()
-endforeach ()
+  endif()
+endforeach()
 
 include("${AOM_ROOT}/build/cmake/exports_sources.cmake")
 
-if ("${AOM_TARGET_SYSTEM}" STREQUAL "Darwin")
+if("${AOM_TARGET_SYSTEM}" STREQUAL "Darwin")
   set(symbol_prefix "_")
-elseif ("${AOM_TARGET_SYSTEM}" MATCHES "Windows\|MSYS" AND AOM_MSVC)
+elseif("${AOM_TARGET_SYSTEM}" MATCHES "Windows\|MSYS" AND AOM_MSVC)
   set(symbol_prefix "_")
-  file(WRITE "${AOM_SYM_FILE}"
-       "LIBRARY libaom INITINSTANCE TERMINSTANCE\n"
-       "DATA MULTIPLE NONSHARED\n"
-       "EXPORTS\n")
-else ()
+  file(WRITE "${AOM_SYM_FILE}" "LIBRARY libaom INITINSTANCE TERMINSTANCE\n"
+             "DATA MULTIPLE NONSHARED\n" "EXPORTS\n")
+else()
   set(symbol_suffix ";")
-endif ()
+endif()
 
 set(aom_sym_file "${AOM_SYM_FILE}")
 
-if ("${AOM_TARGET_SYSTEM}" STREQUAL "Darwin")
+if("${AOM_TARGET_SYSTEM}" STREQUAL "Darwin")
   file(REMOVE "${aom_sym_file}")
-elseif ("${AOM_TARGET_SYSTEM}" MATCHES "Windows\|MSYS")
-  file(WRITE "${aom_sym_file}"
-       "LIBRARY libaom INITINSTANCE TERMINSTANCE\n"
-       "DATA MULTIPLE NONSHARED\n"
-       "EXPORTS\n")
-else ()
+elseif("${AOM_TARGET_SYSTEM}" MATCHES "Windows\|MSYS")
+  file(WRITE "${aom_sym_file}" "LIBRARY libaom INITINSTANCE TERMINSTANCE\n"
+             "DATA MULTIPLE NONSHARED\n" "EXPORTS\n")
+else()
   file(WRITE "${aom_sym_file}" "{ global:\n")
-endif ()
+endif()
 
-foreach (export_file ${AOM_EXPORTS_SOURCES})
+foreach(export_file ${AOM_EXPORTS_SOURCES})
   file(STRINGS "${export_file}" exported_file_data)
   set(exported_symbols "${exported_symbols} ${exported_file_data};")
   string(STRIP "${exported_symbols}" exported_symbols)
-endforeach ()
+endforeach()
 
-foreach (exported_symbol ${exported_symbols})
+foreach(exported_symbol ${exported_symbols})
   string(STRIP "${exported_symbol}" exported_symbol)
   string(REGEX REPLACE "text \|data " "" "exported_symbol" "${exported_symbol}")
   set(exported_symbol "${symbol_prefix}${exported_symbol}${symbol_suffix}")
   file(APPEND "${aom_sym_file}" "${exported_symbol}\n")
-endforeach ()
+endforeach()
 
-if ("${aom_sym_file}" MATCHES "ver$")
+if("${aom_sym_file}" MATCHES "ver$")
   file(APPEND "${aom_sym_file}" " };")
-endif ()
+endif()
diff --git a/build/cmake/msvc_runtime.cmake b/build/cmake/msvc_runtime.cmake
index 1e5542a..9e4cbea 100644
--- a/build/cmake/msvc_runtime.cmake
+++ b/build/cmake/msvc_runtime.cmake
@@ -1,30 +1,37 @@
-##
-## Copyright (c) 2017, Alliance for Open Media. All rights reserved
-##
-## This source code is subject to the terms of the BSD 2 Clause License and
-## the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License
-## was not distributed with this source code in the LICENSE file, you can
-## obtain it at www.aomedia.org/license/software. If the Alliance for Open
-## Media Patent License 1.0 was not distributed with this source code in the
-## PATENTS file, you can obtain it at www.aomedia.org/license/patent.
-##
-if (AOM_BUILD_CMAKE_MSVC_RUNTIME_CMAKE_)
+#
+# Copyright (c) 2017, Alliance for Open Media. All rights reserved
+#
+# This source code is subject to the terms of the BSD 2 Clause License and the
+# Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License was
+# not distributed with this source code in the LICENSE file, you can obtain it
+# at www.aomedia.org/license/software. If the Alliance for Open Media Patent
+# License 1.0 was not distributed with this source code in the PATENTS file, you
+# can obtain it at www.aomedia.org/license/patent.
+#
+if(AOM_BUILD_CMAKE_MSVC_RUNTIME_CMAKE_)
   return()
-endif ()  # AOM_BUILD_CMAKE_MSVC_RUNTIME_CMAKE_
+endif() # AOM_BUILD_CMAKE_MSVC_RUNTIME_CMAKE_
 set(AOM_BUILD_CMAKE_MSVC_RUNTIME_CMAKE_ 1)
 
-if (MSVC)
+if(MSVC)
+
   # CMake defaults to producing code linked to the DLL MSVC runtime. That will
   # not work with googletest, and isn't what we want anyway.
-  if (NOT "${MSVC_RUNTIME}" STREQUAL "dll")
-    foreach (flag_var
-             CMAKE_C_FLAGS CMAKE_C_FLAGS_DEBUG CMAKE_C_FLAGS_RELEASE
-             CMAKE_C_FLAGS_MINSIZEREL CMAKE_C_FLAGS_RELWITHDEBINFO
-             CMAKE_CXX_FLAGS CMAKE_CXX_FLAGS_DEBUG CMAKE_CXX_FLAGS_RELEASE
-             CMAKE_CXX_FLAGS_MINSIZEREL CMAKE_CXX_FLAGS_RELWITHDEBINFO)
-      if (${flag_var} MATCHES "/MD")
+  if(NOT "${MSVC_RUNTIME}" STREQUAL "dll")
+    foreach(flag_var
+            CMAKE_C_FLAGS
+            CMAKE_C_FLAGS_DEBUG
+            CMAKE_C_FLAGS_RELEASE
+            CMAKE_C_FLAGS_MINSIZEREL
+            CMAKE_C_FLAGS_RELWITHDEBINFO
+            CMAKE_CXX_FLAGS
+            CMAKE_CXX_FLAGS_DEBUG
+            CMAKE_CXX_FLAGS_RELEASE
+            CMAKE_CXX_FLAGS_MINSIZEREL
+            CMAKE_CXX_FLAGS_RELWITHDEBINFO)
+      if(${flag_var} MATCHES "/MD")
         string(REGEX REPLACE "/MD" "/MT" ${flag_var} "${${flag_var}}")
-      endif (${flag_var} MATCHES "/MD")
-    endforeach (flag_var)
-  endif ()
-endif ()
+      endif(${flag_var} MATCHES "/MD")
+    endforeach(flag_var)
+  endif()
+endif()
diff --git a/build/cmake/pkg_config.cmake b/build/cmake/pkg_config.cmake
index 6a228e1..b4589c1 100644
--- a/build/cmake/pkg_config.cmake
+++ b/build/cmake/pkg_config.cmake
@@ -1,24 +1,23 @@
-##
-## Copyright (c) 2017, Alliance for Open Media. All rights reserved
-##
-## This source code is subject to the terms of the BSD 2 Clause License and
-## the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License
-## was not distributed with this source code in the LICENSE file, you can
-## obtain it at www.aomedia.org/license/software. If the Alliance for Open
-## Media Patent License 1.0 was not distributed with this source code in the
-## PATENTS file, you can obtain it at www.aomedia.org/license/patent.
-##
+#
+# Copyright (c) 2017, Alliance for Open Media. All rights reserved
+#
+# This source code is subject to the terms of the BSD 2 Clause License and the
+# Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License was
+# not distributed with this source code in the LICENSE file, you can obtain it
+# at www.aomedia.org/license/software. If the Alliance for Open Media Patent
+# License 1.0 was not distributed with this source code in the PATENTS file, you
+# can obtain it at www.aomedia.org/license/patent.
+#
 cmake_minimum_required(VERSION 3.5)
 
-set(REQUIRED_ARGS
-    "AOM_ROOT" "AOM_CONFIG_DIR" "CMAKE_INSTALL_PREFIX" "CMAKE_PROJECT_NAME"
-    "CONFIG_MULTITHREAD" "HAVE_PTHREAD_H")
+set(REQUIRED_ARGS "AOM_ROOT" "AOM_CONFIG_DIR" "CMAKE_INSTALL_PREFIX"
+    "CMAKE_PROJECT_NAME" "CONFIG_MULTITHREAD" "HAVE_PTHREAD_H")
 
-foreach (arg ${REQUIRED_ARGS})
-  if ("${${arg}}" STREQUAL "")
+foreach(arg ${REQUIRED_ARGS})
+  if("${${arg}}" STREQUAL "")
     message(FATAL_ERROR "${arg} must not be empty.")
-  endif ()
-endforeach ()
+  endif()
+endforeach()
 
 include("${AOM_ROOT}/build/cmake/util.cmake")
 
@@ -27,11 +26,11 @@
 # Create a version string suitable for comparison using the RPM version compare
 # algorithm: strip out everything after the number.
 string(FIND "${aom_version}" "-" dash_pos)
-if (${dash_pos} EQUAL -1)
+if(${dash_pos} EQUAL -1)
   set(package_version "${aom_version}")
-else ()
+else()
   string(SUBSTRING "${aom_version}" 0 ${dash_pos} package_version)
-endif ()
+endif()
 
 # Write pkg-config info.
 set(prefix "${CMAKE_INSTALL_PREFIX}")
@@ -44,14 +43,14 @@
 file(APPEND "${pkgconfig_file}" "includedir=\${prefix}/include\n\n")
 file(APPEND "${pkgconfig_file}" "Name: ${pkg_name}\n")
 file(APPEND "${pkgconfig_file}"
-     "Description: AV1 codec library v${aom_version}.\n")
+            "Description: AV1 codec library v${aom_version}.\n")
 file(APPEND "${pkgconfig_file}" "Version: ${package_version}\n")
 file(APPEND "${pkgconfig_file}" "Requires:\n")
 file(APPEND "${pkgconfig_file}" "Conflicts:\n")
 file(APPEND "${pkgconfig_file}" "Libs: -L\${prefix}/lib -l${pkg_name} -lm\n")
-if (CONFIG_MULTITHREAD AND HAVE_PTHREAD_H)
+if(CONFIG_MULTITHREAD AND HAVE_PTHREAD_H)
   file(APPEND "${pkgconfig_file}" "Libs.private: -lm -lpthread\n")
-else ()
+else()
   file(APPEND "${pkgconfig_file}" "Libs.private: -lm\n")
-endif ()
+endif()
 file(APPEND "${pkgconfig_file}" "Cflags: -I\${prefix}/include\n")
diff --git a/build/cmake/sanitizers.cmake b/build/cmake/sanitizers.cmake
index 6828c1d..7e4a574 100644
--- a/build/cmake/sanitizers.cmake
+++ b/build/cmake/sanitizers.cmake
@@ -1,21 +1,21 @@
-##
-## Copyright (c) 2017, Alliance for Open Media. All rights reserved
-##
-## This source code is subject to the terms of the BSD 2 Clause License and
-## the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License
-## was not distributed with this source code in the LICENSE file, you can
-## obtain it at www.aomedia.org/license/software. If the Alliance for Open
-## Media Patent License 1.0 was not distributed with this source code in the
-## PATENTS file, you can obtain it at www.aomedia.org/license/patent.
-##
-if (AOM_BUILD_CMAKE_SANITIZERS_CMAKE_)
+#
+# Copyright (c) 2017, Alliance for Open Media. All rights reserved
+#
+# This source code is subject to the terms of the BSD 2 Clause License and the
+# Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License was
+# not distributed with this source code in the LICENSE file, you can obtain it
+# at www.aomedia.org/license/software. If the Alliance for Open Media Patent
+# License 1.0 was not distributed with this source code in the PATENTS file, you
+# can obtain it at www.aomedia.org/license/patent.
+#
+if(AOM_BUILD_CMAKE_SANITIZERS_CMAKE_)
   return()
-endif()  # AOM_BUILD_CMAKE_SANITIZERS_CMAKE_
+endif() # AOM_BUILD_CMAKE_SANITIZERS_CMAKE_
 set(AOM_BUILD_CMAKE_SANITIZERS_CMAKE_ 1)
 
-if (MSVC OR NOT SANITIZE)
-  return ()
-endif ()
+if(MSVC OR NOT SANITIZE)
+  return()
+endif()
 
 include("${AOM_ROOT}/build/cmake/compiler_flags.cmake")
 
diff --git a/build/cmake/toolchains/arm-ios-common.cmake b/build/cmake/toolchains/arm-ios-common.cmake
index ba96da3..96a86c4 100644
--- a/build/cmake/toolchains/arm-ios-common.cmake
+++ b/build/cmake/toolchains/arm-ios-common.cmake
@@ -1,16 +1,16 @@
-##
-## Copyright (c) 2017, Alliance for Open Media. All rights reserved
-##
-## This source code is subject to the terms of the BSD 2 Clause License and
-## the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License
-## was not distributed with this source code in the LICENSE file, you can
-## obtain it at www.aomedia.org/license/software. If the Alliance for Open
-## Media Patent License 1.0 was not distributed with this source code in the
-## PATENTS file, you can obtain it at www.aomedia.org/license/patent.
-##
-if (AOM_BUILD_CMAKE_TOOLCHAINS_ARM_IOS_COMMON_CMAKE_)
+#
+# Copyright (c) 2017, Alliance for Open Media. All rights reserved
+#
+# This source code is subject to the terms of the BSD 2 Clause License and the
+# Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License was
+# not distributed with this source code in the LICENSE file, you can obtain it
+# at www.aomedia.org/license/software. If the Alliance for Open Media Patent
+# License 1.0 was not distributed with this source code in the PATENTS file, you
+# can obtain it at www.aomedia.org/license/patent.
+#
+if(AOM_BUILD_CMAKE_TOOLCHAINS_ARM_IOS_COMMON_CMAKE_)
   return()
-endif ()  # AOM_BUILD_CMAKE_TOOLCHAINS_ARM_IOS_COMMON_CMAKE_
+endif() # AOM_BUILD_CMAKE_TOOLCHAINS_ARM_IOS_COMMON_CMAKE_
 set(AOM_BUILD_CMAKE_ARM_IOS_COMMON_CMAKE_ 1)
 
 set(CMAKE_SYSTEM_NAME "Darwin")
diff --git a/build/cmake/toolchains/arm64-ios.cmake b/build/cmake/toolchains/arm64-ios.cmake
index ce9d5c4..6feb109 100644
--- a/build/cmake/toolchains/arm64-ios.cmake
+++ b/build/cmake/toolchains/arm64-ios.cmake
@@ -1,22 +1,21 @@
-##
-## Copyright (c) 2017, Alliance for Open Media. All rights reserved
-##
-## This source code is subject to the terms of the BSD 2 Clause License and
-## the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License
-## was not distributed with this source code in the LICENSE file, you can
-## obtain it at www.aomedia.org/license/software. If the Alliance for Open
-## Media Patent License 1.0 was not distributed with this source code in the
-## PATENTS file, you can obtain it at www.aomedia.org/license/patent.
-##
-if (AOM_BUILD_CMAKE_TOOLCHAINS_ARM64_IOS_CMAKE_)
+#
+# Copyright (c) 2017, Alliance for Open Media. All rights reserved
+#
+# This source code is subject to the terms of the BSD 2 Clause License and the
+# Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License was
+# not distributed with this source code in the LICENSE file, you can obtain it
+# at www.aomedia.org/license/software. If the Alliance for Open Media Patent
+# License 1.0 was not distributed with this source code in the PATENTS file, you
+# can obtain it at www.aomedia.org/license/patent.
+#
+if(AOM_BUILD_CMAKE_TOOLCHAINS_ARM64_IOS_CMAKE_)
   return()
-endif ()  # AOM_BUILD_CMAKE_TOOLCHAINS_ARM64_IOS_CMAKE_
+endif() # AOM_BUILD_CMAKE_TOOLCHAINS_ARM64_IOS_CMAKE_
 set(AOM_BUILD_CMAKE_TOOLCHAINS_ARM64_IOS_CMAKE_ 1)
 
-if (XCODE)
-  # TODO(tomfinegan): Handle arm builds in Xcode.
+if(XCODE) # TODO(tomfinegan): Handle arm builds in Xcode.
   message(FATAL_ERROR "This toolchain does not support Xcode.")
-endif ()
+endif()
 
 set(CMAKE_SYSTEM_PROCESSOR "arm64")
 set(CMAKE_OSX_ARCHITECTURES "arm64")
diff --git a/build/cmake/toolchains/arm64-linux-gcc.cmake b/build/cmake/toolchains/arm64-linux-gcc.cmake
index a309e77..590a97a 100644
--- a/build/cmake/toolchains/arm64-linux-gcc.cmake
+++ b/build/cmake/toolchains/arm64-linux-gcc.cmake
@@ -1,24 +1,25 @@
-##
-## Copyright (c) 2017, Alliance for Open Media. All rights reserved
-##
-## This source code is subject to the terms of the BSD 2 Clause License and
-## the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License
-## was not distributed with this source code in the LICENSE file, you can
-## obtain it at www.aomedia.org/license/software. If the Alliance for Open
-## Media Patent License 1.0 was not distributed with this source code in the
-## PATENTS file, you can obtain it at www.aomedia.org/license/patent.
-##
-if (AOM_BUILD_CMAKE_TOOLCHAINS_ARM64_LINUX_GCC_CMAKE_)
+#
+# Copyright (c) 2017, Alliance for Open Media. All rights reserved
+#
+# This source code is subject to the terms of the BSD 2 Clause License and the
+# Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License was
+# not distributed with this source code in the LICENSE file, you can obtain it
+# at www.aomedia.org/license/software. If the Alliance for Open Media Patent
+# License 1.0 was not distributed with this source code in the PATENTS file, you
+# can obtain it at www.aomedia.org/license/patent.
+#
+if(AOM_BUILD_CMAKE_TOOLCHAINS_ARM64_LINUX_GCC_CMAKE_)
   return()
-endif ()  # AOM_BUILD_CMAKE_TOOLCHAINS_ARM64_LINUX_GCC_CMAKE_
+endif() # AOM_BUILD_CMAKE_TOOLCHAINS_ARM64_LINUX_GCC_CMAKE_
 set(AOM_BUILD_CMAKE_TOOLCHAINS_ARM64_LINUX_GCC_CMAKE_ 1)
 
 set(CMAKE_SYSTEM_NAME "Linux")
 
-if ("${CROSS}" STREQUAL "")
+if("${CROSS}" STREQUAL "")
+
   # Default the cross compiler prefix to something known to work.
   set(CROSS aarch64-linux-gnu-)
-endif ()
+endif()
 
 set(CMAKE_C_COMPILER ${CROSS}gcc)
 set(CMAKE_CXX_COMPILER ${CROSS}g++)
diff --git a/build/cmake/toolchains/arm64-mingw-gcc.cmake b/build/cmake/toolchains/arm64-mingw-gcc.cmake
index cbf9b1b..283a3fc 100644
--- a/build/cmake/toolchains/arm64-mingw-gcc.cmake
+++ b/build/cmake/toolchains/arm64-mingw-gcc.cmake
@@ -1,24 +1,24 @@
-##
-## Copyright (c) 2018, Alliance for Open Media. All rights reserved
-##
-## This source code is subject to the terms of the BSD 2 Clause License and
-## the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License
-## was not distributed with this source code in the LICENSE file, you can
-## obtain it at www.aomedia.org/license/software. If the Alliance for Open
-## Media Patent License 1.0 was not distributed with this source code in the
-## PATENTS file, you can obtain it at www.aomedia.org/license/patent.
-##
-if (AOM_BUILD_CMAKE_TOOLCHAINS_ARM64_MINGW_GCC_CMAKE_)
+#
+# Copyright (c) 2018, Alliance for Open Media. All rights reserved
+#
+# This source code is subject to the terms of the BSD 2 Clause License and the
+# Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License was
+# not distributed with this source code in the LICENSE file, you can obtain it
+# at www.aomedia.org/license/software. If the Alliance for Open Media Patent
+# License 1.0 was not distributed with this source code in the PATENTS file, you
+# can obtain it at www.aomedia.org/license/patent.
+#
+if(AOM_BUILD_CMAKE_TOOLCHAINS_ARM64_MINGW_GCC_CMAKE_)
   return()
-endif ()  # AOM_BUILD_CMAKE_TOOLCHAINS_ARM64_MINGW_GCC_CMAKE_
+endif() # AOM_BUILD_CMAKE_TOOLCHAINS_ARM64_MINGW_GCC_CMAKE_
 set(AOM_BUILD_CMAKE_TOOLCHAINS_ARM64_MINGW_GCC_CMAKE_ 1)
 
 set(CMAKE_SYSTEM_PROCESSOR "arm64")
 set(CMAKE_SYSTEM_NAME "Windows")
 
-if ("${CROSS}" STREQUAL "")
+if("${CROSS}" STREQUAL "")
   set(CROSS aarch64-w64-mingw32-)
-endif ()
+endif()
 
 set(CMAKE_C_COMPILER ${CROSS}gcc)
 set(CMAKE_CXX_COMPILER ${CROSS}g++)
diff --git a/build/cmake/toolchains/armv7-ios.cmake b/build/cmake/toolchains/armv7-ios.cmake
index d05c14e..32a1b53 100644
--- a/build/cmake/toolchains/armv7-ios.cmake
+++ b/build/cmake/toolchains/armv7-ios.cmake
@@ -1,22 +1,23 @@
-##
-## Copyright (c) 2017, Alliance for Open Media. All rights reserved
-##
-## This source code is subject to the terms of the BSD 2 Clause License and
-## the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License
-## was not distributed with this source code in the LICENSE file, you can
-## obtain it at www.aomedia.org/license/software. If the Alliance for Open
-## Media Patent License 1.0 was not distributed with this source code in the
-## PATENTS file, you can obtain it at www.aomedia.org/license/patent.
-##
-if (AOM_BUILD_CMAKE_TOOLCHAINS_ARMV7_IOS_CMAKE_)
+#
+# Copyright (c) 2017, Alliance for Open Media. All rights reserved
+#
+# This source code is subject to the terms of the BSD 2 Clause License and the
+# Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License was
+# not distributed with this source code in the LICENSE file, you can obtain it
+# at www.aomedia.org/license/software. If the Alliance for Open Media Patent
+# License 1.0 was not distributed with this source code in the PATENTS file, you
+# can obtain it at www.aomedia.org/license/patent.
+#
+if(AOM_BUILD_CMAKE_TOOLCHAINS_ARMV7_IOS_CMAKE_)
   return()
-endif ()  # AOM_BUILD_CMAKE_TOOLCHAINS_ARMV7_IOS_CMAKE_
+endif() # AOM_BUILD_CMAKE_TOOLCHAINS_ARMV7_IOS_CMAKE_
 set(AOM_BUILD_CMAKE_TOOLCHAINS_ARMV7_IOS_CMAKE_ 1)
 
-if (XCODE)
+if(XCODE)
+
   # TODO(tomfinegan): Handle arm builds in Xcode.
   message(FATAL_ERROR "This toolchain does not support Xcode.")
-endif ()
+endif()
 
 set(CMAKE_SYSTEM_PROCESSOR "armv7")
 set(CMAKE_OSX_ARCHITECTURES "armv7")
diff --git a/build/cmake/toolchains/armv7-linux-gcc.cmake b/build/cmake/toolchains/armv7-linux-gcc.cmake
index 7e43b3e..8cc65b4 100644
--- a/build/cmake/toolchains/armv7-linux-gcc.cmake
+++ b/build/cmake/toolchains/armv7-linux-gcc.cmake
@@ -1,28 +1,29 @@
-##
-## Copyright (c) 2017, Alliance for Open Media. All rights reserved
-##
-## This source code is subject to the terms of the BSD 2 Clause License and
-## the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License
-## was not distributed with this source code in the LICENSE file, you can
-## obtain it at www.aomedia.org/license/software. If the Alliance for Open
-## Media Patent License 1.0 was not distributed with this source code in the
-## PATENTS file, you can obtain it at www.aomedia.org/license/patent.
-##
-if (AOM_BUILD_CMAKE_TOOLCHAINS_ARMV7_LINUX_GCC_CMAKE_)
+#
+# Copyright (c) 2017, Alliance for Open Media. All rights reserved
+#
+# This source code is subject to the terms of the BSD 2 Clause License and the
+# Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License was
+# not distributed with this source code in the LICENSE file, you can obtain it
+# at www.aomedia.org/license/software. If the Alliance for Open Media Patent
+# License 1.0 was not distributed with this source code in the PATENTS file, you
+# can obtain it at www.aomedia.org/license/patent.
+#
+if(AOM_BUILD_CMAKE_TOOLCHAINS_ARMV7_LINUX_GCC_CMAKE_)
   return()
-endif ()  # AOM_BUILD_CMAKE_TOOLCHAINS_ARMV7_LINUX_GCC_CMAKE_
+endif() # AOM_BUILD_CMAKE_TOOLCHAINS_ARMV7_LINUX_GCC_CMAKE_
 set(AOM_BUILD_CMAKE_TOOLCHAINS_ARMV7_LINUX_GCC_CMAKE_ 1)
 
 set(CMAKE_SYSTEM_NAME "Linux")
 
-if ("${CROSS}" STREQUAL "")
+if("${CROSS}" STREQUAL "")
+
   # Default the cross compiler prefix to something known to work.
   set(CROSS arm-linux-gnueabihf-)
-endif ()
+endif()
 
-if (NOT ${CROSS} MATCHES hf-$)
+if(NOT ${CROSS} MATCHES hf-$)
   set(AOM_EXTRA_TOOLCHAIN_FLAGS "-mfloat-abi=softfp")
-endif ()
+endif()
 
 set(CMAKE_C_COMPILER ${CROSS}gcc)
 set(CMAKE_CXX_COMPILER ${CROSS}g++)
@@ -31,8 +32,7 @@
     "-march=armv7-a -mfpu=neon ${AOM_EXTRA_TOOLCHAIN_FLAGS}")
 set(CMAKE_CXX_COMPILER_ARG1
     "-march=armv7-a -mfpu=neon ${AOM_EXTRA_TOOLCHAIN_FLAGS}")
-set(AOM_AS_FLAGS
-    --defsym ARCHITECTURE=7 -march=armv7-a -mfpu=neon
+set(AOM_AS_FLAGS --defsym ARCHITECTURE=7 -march=armv7-a -mfpu=neon
     ${AOM_EXTRA_TOOLCHAIN_FLAGS})
 set(CMAKE_SYSTEM_PROCESSOR "armv7")
 
diff --git a/build/cmake/toolchains/armv7-mingw-gcc.cmake b/build/cmake/toolchains/armv7-mingw-gcc.cmake
index 9fa4a56..86edeb4 100644
--- a/build/cmake/toolchains/armv7-mingw-gcc.cmake
+++ b/build/cmake/toolchains/armv7-mingw-gcc.cmake
@@ -1,24 +1,24 @@
-##
-## Copyright (c) 2018, Alliance for Open Media. All rights reserved
-##
-## This source code is subject to the terms of the BSD 2 Clause License and
-## the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License
-## was not distributed with this source code in the LICENSE file, you can
-## obtain it at www.aomedia.org/license/software. If the Alliance for Open
-## Media Patent License 1.0 was not distributed with this source code in the
-## PATENTS file, you can obtain it at www.aomedia.org/license/patent.
-##
-if (AOM_BUILD_CMAKE_TOOLCHAINS_ARMV7_MINGW_GCC_CMAKE_)
+#
+# Copyright (c) 2018, Alliance for Open Media. All rights reserved
+#
+# This source code is subject to the terms of the BSD 2 Clause License and the
+# Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License was
+# not distributed with this source code in the LICENSE file, you can obtain it
+# at www.aomedia.org/license/software. If the Alliance for Open Media Patent
+# License 1.0 was not distributed with this source code in the PATENTS file, you
+# can obtain it at www.aomedia.org/license/patent.
+#
+if(AOM_BUILD_CMAKE_TOOLCHAINS_ARMV7_MINGW_GCC_CMAKE_)
   return()
-endif ()  # AOM_BUILD_CMAKE_TOOLCHAINS_ARMV7_MINGW_GCC_CMAKE_
+endif() # AOM_BUILD_CMAKE_TOOLCHAINS_ARMV7_MINGW_GCC_CMAKE_
 set(AOM_BUILD_CMAKE_TOOLCHAINS_ARMV7_MINGW_GCC_CMAKE_ 1)
 
 set(CMAKE_SYSTEM_PROCESSOR "armv7")
 set(CMAKE_SYSTEM_NAME "Windows")
 
-if ("${CROSS}" STREQUAL "")
+if("${CROSS}" STREQUAL "")
   set(CROSS armv7-w64-mingw32-)
-endif ()
+endif()
 
 set(CMAKE_C_COMPILER ${CROSS}gcc)
 set(CMAKE_CXX_COMPILER ${CROSS}g++)
diff --git a/build/cmake/toolchains/armv7s-ios.cmake b/build/cmake/toolchains/armv7s-ios.cmake
index 59d98aa..0940a6e 100644
--- a/build/cmake/toolchains/armv7s-ios.cmake
+++ b/build/cmake/toolchains/armv7s-ios.cmake
@@ -1,22 +1,23 @@
-##
-## Copyright (c) 2017, Alliance for Open Media. All rights reserved
-##
-## This source code is subject to the terms of the BSD 2 Clause License and
-## the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License
-## was not distributed with this source code in the LICENSE file, you can
-## obtain it at www.aomedia.org/license/software. If the Alliance for Open
-## Media Patent License 1.0 was not distributed with this source code in the
-## PATENTS file, you can obtain it at www.aomedia.org/license/patent.
-##
-if (AOM_BUILD_CMAKE_TOOLCHAINS_ARMV7S_IOS_CMAKE_)
+#
+# Copyright (c) 2017, Alliance for Open Media. All rights reserved
+#
+# This source code is subject to the terms of the BSD 2 Clause License and the
+# Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License was
+# not distributed with this source code in the LICENSE file, you can obtain it
+# at www.aomedia.org/license/software. If the Alliance for Open Media Patent
+# License 1.0 was not distributed with this source code in the PATENTS file, you
+# can obtain it at www.aomedia.org/license/patent.
+#
+if(AOM_BUILD_CMAKE_TOOLCHAINS_ARMV7S_IOS_CMAKE_)
   return()
-endif ()  # AOM_BUILD_CMAKE_TOOLCHAINS_ARMV7S_IOS_CMAKE_
+endif() # AOM_BUILD_CMAKE_TOOLCHAINS_ARMV7S_IOS_CMAKE_
 set(AOM_BUILD_CMAKE_TOOLCHAINS_ARMV7S_IOS_CMAKE_ 1)
 
-if (XCODE)
+if(XCODE)
+
   # TODO(tomfinegan): Handle arm builds in Xcode.
   message(FATAL_ERROR "This toolchain does not support Xcode.")
-endif ()
+endif()
 
 set(CMAKE_SYSTEM_PROCESSOR "armv7s")
 set(CMAKE_OSX_ARCHITECTURES "armv7s")
diff --git a/build/cmake/toolchains/ios-simulator-common.cmake b/build/cmake/toolchains/ios-simulator-common.cmake
index 9bb465a..76e0bd1 100644
--- a/build/cmake/toolchains/ios-simulator-common.cmake
+++ b/build/cmake/toolchains/ios-simulator-common.cmake
@@ -1,16 +1,16 @@
-##
-## Copyright (c) 2017, Alliance for Open Media. All rights reserved
-##
-## This source code is subject to the terms of the BSD 2 Clause License and
-## the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License
-## was not distributed with this source code in the LICENSE file, you can
-## obtain it at www.aomedia.org/license/software. If the Alliance for Open
-## Media Patent License 1.0 was not distributed with this source code in the
-## PATENTS file, you can obtain it at www.aomedia.org/license/patent.
-##
-if (AOM_BUILD_CMAKE_TOOLCHAINS_IOS_SIMULATOR_COMMON_CMAKE_)
+#
+# Copyright (c) 2017, Alliance for Open Media. All rights reserved
+#
+# This source code is subject to the terms of the BSD 2 Clause License and the
+# Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License was
+# not distributed with this source code in the LICENSE file, you can obtain it
+# at www.aomedia.org/license/software. If the Alliance for Open Media Patent
+# License 1.0 was not distributed with this source code in the PATENTS file, you
+# can obtain it at www.aomedia.org/license/patent.
+#
+if(AOM_BUILD_CMAKE_TOOLCHAINS_IOS_SIMULATOR_COMMON_CMAKE_)
   return()
-endif ()  # AOM_BUILD_CMAKE_TOOLCHAINS_IOS_SIMULATOR_COMMON_CMAKE_
+endif() # AOM_BUILD_CMAKE_TOOLCHAINS_IOS_SIMULATOR_COMMON_CMAKE_
 set(AOM_BUILD_CMAKE_IOS_SIMULATOR_COMMON_CMAKE_ 1)
 
 set(CMAKE_SYSTEM_NAME "Darwin")
diff --git a/build/cmake/toolchains/mips32-linux-gcc.cmake b/build/cmake/toolchains/mips32-linux-gcc.cmake
index af6f3de..0f93490 100644
--- a/build/cmake/toolchains/mips32-linux-gcc.cmake
+++ b/build/cmake/toolchains/mips32-linux-gcc.cmake
@@ -1,64 +1,66 @@
-##
-## Copyright (c) 2017, Alliance for Open Media. All rights reserved
-##
-## This source code is subject to the terms of the BSD 2 Clause License and
-## the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License
-## was not distributed with this source code in the LICENSE file, you can
-## obtain it at www.aomedia.org/license/software. If the Alliance for Open
-## Media Patent License 1.0 was not distributed with this source code in the
-## PATENTS file, you can obtain it at www.aomedia.org/license/patent.
-##
-if (AOM_BUILD_CMAKE_TOOLCHAINS_MIPS32_LINUX_GCC_CMAKE_)
+#
+# Copyright (c) 2017, Alliance for Open Media. All rights reserved
+#
+# This source code is subject to the terms of the BSD 2 Clause License and the
+# Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License was
+# not distributed with this source code in the LICENSE file, you can obtain it
+# at www.aomedia.org/license/software. If the Alliance for Open Media Patent
+# License 1.0 was not distributed with this source code in the PATENTS file, you
+# can obtain it at www.aomedia.org/license/patent.
+#
+if(AOM_BUILD_CMAKE_TOOLCHAINS_MIPS32_LINUX_GCC_CMAKE_)
   return()
-endif ()  # AOM_BUILD_CMAKE_TOOLCHAINS_MIPS32_LINUX_GCC_CMAKE_
+endif() # AOM_BUILD_CMAKE_TOOLCHAINS_MIPS32_LINUX_GCC_CMAKE_
 set(AOM_BUILD_CMAKE_TOOLCHAINS_MIPS32_LINUX_GCC_CMAKE_ 1)
 
 set(CMAKE_SYSTEM_NAME "Linux")
 
-if (ENABLE_DSPR2 AND ENABLE_MSA)
+if(ENABLE_DSPR2 AND ENABLE_MSA)
   message(FATAL_ERROR "ENABLE_DSPR2 and ENABLE_MSA cannot be combined.")
-endif ()
+endif()
 
-if (ENABLE_DSPR2)
+if(ENABLE_DSPR2)
   set(HAVE_DSPR2 1 CACHE BOOL "" FORCE)
 
-  if ("${CROSS}" STREQUAL "")
+  if("${CROSS}" STREQUAL "")
+
     # Default the cross compiler prefix to something known to work.
     set(CROSS mips-linux-gnu-)
-  endif ()
+  endif()
 
   set(MIPS_CFLAGS "-mdspr2")
   set(MIPS_CXXFLAGS "-mdspr2")
-elseif (ENABLE_MSA)
+elseif(ENABLE_MSA)
   set(HAVE_MSA 1 CACHE BOOL "" FORCE)
 
-  if ("${CROSS}" STREQUAL "")
+  if("${CROSS}" STREQUAL "")
+
     # Default the cross compiler prefix to something known to work.
     set(CROSS mips-mti-linux-gnu-)
-  endif ()
+  endif()
 
   set(MIPS_CFLAGS "-mmsa")
   set(MIPS_CXXFLAGS "-mmsa")
-endif ()
+endif()
 
-if ("${CROSS}" STREQUAL "")
-  # TODO(tomfinegan): Make it possible to turn this off. The $CROSS prefix
-  # won't be desired on a mips host.
-  # Default cross compiler prefix to something that might work for an
-  # unoptimized build.
+if("${CROSS}" STREQUAL "")
+
+  # TODO(tomfinegan): Make it possible to turn this off. The $CROSS prefix won't
+  # be desired on a mips host.  Default cross compiler prefix to something that
+  # might work for an  unoptimized build.
   set(CROSS mips-linux-gnu-)
-endif ()
+endif()
 
-if ("${MIPS_CPU}" STREQUAL "")
+if("${MIPS_CPU}" STREQUAL "")
   set(MIPS_CFLAGS "${MIPS_CFLAGS} -mips32r2")
   set(MIPS_CXXFLAGS "${MIPS_CXXFLAGS} -mips32r2")
-elseif ("${MIPS_CPU}" STREQUAL "p5600")
+elseif("${MIPS_CPU}" STREQUAL "p5600")
   set(P56_FLAGS
       "-mips32r5 -mload-store-pairs -msched-weight -mhard-float -mfp64")
   set(MIPS_CFLAGS "${MIPS_CFLAGS} ${P56_FLAGS}")
   set(MIPS_CXXFLAGS "${MIPS_CXXFLAGS} ${P56_FLAGS}")
   set(CMAKE_EXE_LINKER_FLAGS "-mfp64 ${CMAKE_EXE_LINKER_FLAGS}")
-endif ()
+endif()
 
 set(CMAKE_C_COMPILER ${CROSS}gcc)
 set(CMAKE_CXX_COMPILER ${CROSS}g++)
@@ -68,8 +70,8 @@
 set(CMAKE_SYSTEM_PROCESSOR "mips32")
 
 # No runtime cpu detect for mips32-linux-gcc.
-if (CONFIG_RUNTIME_CPU_DETECT)
+if(CONFIG_RUNTIME_CPU_DETECT)
   message("--- CONFIG_RUNTIME_CPU_DETECT not supported for mips32 targets.")
-endif ()
+endif()
 
 set(CONFIG_RUNTIME_CPU_DETECT 0 CACHE NUMBER "" FORCE)
diff --git a/build/cmake/toolchains/mips64-linux-gcc.cmake b/build/cmake/toolchains/mips64-linux-gcc.cmake
index a5a02f2..ad9aab0 100644
--- a/build/cmake/toolchains/mips64-linux-gcc.cmake
+++ b/build/cmake/toolchains/mips64-linux-gcc.cmake
@@ -1,41 +1,43 @@
-##
-## Copyright (c) 2017, Alliance for Open Media. All rights reserved
-##
-## This source code is subject to the terms of the BSD 2 Clause License and
-## the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License
-## was not distributed with this source code in the LICENSE file, you can
-## obtain it at www.aomedia.org/license/software. If the Alliance for Open
-## Media Patent License 1.0 was not distributed with this source code in the
-## PATENTS file, you can obtain it at www.aomedia.org/license/patent.
-##
-if (AOM_BUILD_CMAKE_TOOLCHAINS_MIPS64_LINUX_GCC_CMAKE_)
+#
+# Copyright (c) 2017, Alliance for Open Media. All rights reserved
+#
+# This source code is subject to the terms of the BSD 2 Clause License and the
+# Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License was
+# not distributed with this source code in the LICENSE file, you can obtain it
+# at www.aomedia.org/license/software. If the Alliance for Open Media Patent
+# License 1.0 was not distributed with this source code in the PATENTS file, you
+# can obtain it at www.aomedia.org/license/patent.
+#
+if(AOM_BUILD_CMAKE_TOOLCHAINS_MIPS64_LINUX_GCC_CMAKE_)
   return()
-endif ()  # AOM_BUILD_CMAKE_TOOLCHAINS_MIPS64_LINUX_GCC_CMAKE_
+endif() # AOM_BUILD_CMAKE_TOOLCHAINS_MIPS64_LINUX_GCC_CMAKE_
 set(AOM_BUILD_CMAKE_TOOLCHAINS_MIPS64_LINUX_GCC_CMAKE_ 1)
 
 set(CMAKE_SYSTEM_NAME "Linux")
 
-if ("${CROSS}" STREQUAL "")
-  # TODO(tomfinegan): Make it possible to turn this off. The $CROSS prefix
-  # won't be desired on a mips host.
+if("${CROSS}" STREQUAL "")
+
+  # TODO(tomfinegan): Make it possible to turn this off. The $CROSS prefix won't
+  # be desired on a mips host.
+  #
   # Default the cross compiler prefix to something known to work.
   set(CROSS mips-img-linux-gnu-)
-endif ()
+endif()
 
-if (ENABLE_MSA)
+if(ENABLE_MSA)
   set(HAVE_MSA 1 CACHE BOOL "" FORCE)
   set(MIPS_CFLAGS "-mmsa")
   set(MIPS_CXXFLAGS "-mmsa")
-endif ()
+endif()
 
-if ("${MIPS_CPU}" STREQUAL "i6400" OR "${MIPS_CPU}" STREQUAL "p6600")
+if("${MIPS_CPU}" STREQUAL "i6400" OR "${MIPS_CPU}" STREQUAL "p6600")
   set(MIPS_CPU_FLAGS "-mips64r6 -mabi=64 -mload-store-pairs -msched-weight")
   set(MIPS_CPU_FLAGS "${MIPS_CPU_FLAGS} -mhard-float -mfp64")
   set(MIPS_CFLAGS "${MIPS_CFLAGS} ${MIPS_CPU_FLAGS}")
   set(MIPS_CXXFLAGS "${MIPS_CXXFLAGS} ${MIPS_CPU_FLAGS}")
   set(CMAKE_EXE_LINKER_FLAGS
       "-mips64r6 -mabi64 -mfp64 ${CMAKE_EXE_LINKER_FLAGS}")
-endif ()
+endif()
 
 set(CMAKE_C_COMPILER ${CROSS}gcc)
 set(CMAKE_CXX_COMPILER ${CROSS}g++)
@@ -45,8 +47,8 @@
 set(CMAKE_SYSTEM_PROCESSOR "mips64")
 
 # No runtime cpu detect for mips64-linux-gcc.
-if (CONFIG_RUNTIME_CPU_DETECT)
+if(CONFIG_RUNTIME_CPU_DETECT)
   message("--- CONFIG_RUNTIME_CPU_DETECT not supported for mips64 targets.")
-endif ()
+endif()
 
 set(CONFIG_RUNTIME_CPU_DETECT 0 CACHE NUMBER "" FORCE)
diff --git a/build/cmake/toolchains/ppc-linux-gcc.cmake b/build/cmake/toolchains/ppc-linux-gcc.cmake
index e16ac7d..200bf69 100644
--- a/build/cmake/toolchains/ppc-linux-gcc.cmake
+++ b/build/cmake/toolchains/ppc-linux-gcc.cmake
@@ -1,24 +1,25 @@
-##
-## Copyright (c) 2018, Alliance for Open Media. All rights reserved
-##
-## This source code is subject to the terms of the BSD 2 Clause License and
-## the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License
-## was not distributed with this source code in the LICENSE file, you can
-## obtain it at www.aomedia.org/license/software. If the Alliance for Open
-## Media Patent License 1.0 was not distributed with this source code in the
-## PATENTS file, you can obtain it at www.aomedia.org/license/patent.
-##
-if (AOM_BUILD_CMAKE_TOOLCHAINS_PPC_LINUX_GCC_CMAKE_)
+#
+# Copyright (c) 2018, Alliance for Open Media. All rights reserved
+#
+# This source code is subject to the terms of the BSD 2 Clause License and the
+# Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License was
+# not distributed with this source code in the LICENSE file, you can obtain it
+# at www.aomedia.org/license/software. If the Alliance for Open Media Patent
+# License 1.0 was not distributed with this source code in the PATENTS file, you
+# can obtain it at www.aomedia.org/license/patent.
+#
+if(AOM_BUILD_CMAKE_TOOLCHAINS_PPC_LINUX_GCC_CMAKE_)
   return()
-endif ()  # AOM_BUILD_CMAKE_TOOLCHAINS_PPC_LINUX_GCC_CMAKE_
+endif() # AOM_BUILD_CMAKE_TOOLCHAINS_PPC_LINUX_GCC_CMAKE_
 set(AOM_BUILD_CMAKE_TOOLCHAINS_PPC_LINUX_GCC_CMAKE_ 1)
 
 set(CMAKE_SYSTEM_NAME "Linux")
 
-if ("${CROSS}" STREQUAL "")
+if("${CROSS}" STREQUAL "")
+
   # Default the cross compiler prefix to something known to work.
   set(CROSS powerpc64le-linux-gnu-)
-endif ()
+endif()
 
 set(CMAKE_C_COMPILER ${CROSS}gcc)
 set(CMAKE_CXX_COMPILER ${CROSS}g++)
diff --git a/build/cmake/toolchains/x86-ios-simulator.cmake b/build/cmake/toolchains/x86-ios-simulator.cmake
index 842fca0..6b6f52c 100644
--- a/build/cmake/toolchains/x86-ios-simulator.cmake
+++ b/build/cmake/toolchains/x86-ios-simulator.cmake
@@ -1,22 +1,23 @@
-##
-## Copyright (c) 2017, Alliance for Open Media. All rights reserved
-##
-## This source code is subject to the terms of the BSD 2 Clause License and
-## the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License
-## was not distributed with this source code in the LICENSE file, you can
-## obtain it at www.aomedia.org/license/software. If the Alliance for Open
-## Media Patent License 1.0 was not distributed with this source code in the
-## PATENTS file, you can obtain it at www.aomedia.org/license/patent.
-##
-if (AOM_BUILD_CMAKE_TOOLCHAINS_X86_IOS_SIMULATOR_CMAKE_)
+#
+# Copyright (c) 2017, Alliance for Open Media. All rights reserved
+#
+# This source code is subject to the terms of the BSD 2 Clause License and the
+# Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License was
+# not distributed with this source code in the LICENSE file, you can obtain it
+# at www.aomedia.org/license/software. If the Alliance for Open Media Patent
+# License 1.0 was not distributed with this source code in the PATENTS file, you
+# can obtain it at www.aomedia.org/license/patent.
+#
+if(AOM_BUILD_CMAKE_TOOLCHAINS_X86_IOS_SIMULATOR_CMAKE_)
   return()
-endif ()  # AOM_BUILD_CMAKE_TOOLCHAINS_X86_IOS_SIMULATOR_CMAKE_
+endif() # AOM_BUILD_CMAKE_TOOLCHAINS_X86_IOS_SIMULATOR_CMAKE_
 set(AOM_BUILD_CMAKE_TOOLCHAINS_X86_IOS_SIMULATOR_CMAKE_ 1)
 
-if (XCODE)
+if(XCODE)
+
   # TODO(tomfinegan): Handle ios sim builds in Xcode.
   message(FATAL_ERROR "This toolchain does not support Xcode.")
-endif ()
+endif()
 
 set(CMAKE_SYSTEM_PROCESSOR "i386")
 set(CMAKE_OSX_ARCHITECTURES "i386")
diff --git a/build/cmake/toolchains/x86-linux.cmake b/build/cmake/toolchains/x86-linux.cmake
index 9695da6..c2a700b 100644
--- a/build/cmake/toolchains/x86-linux.cmake
+++ b/build/cmake/toolchains/x86-linux.cmake
@@ -1,16 +1,16 @@
-##
-## Copyright (c) 2017, Alliance for Open Media. All rights reserved
-##
-## This source code is subject to the terms of the BSD 2 Clause License and
-## the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License
-## was not distributed with this source code in the LICENSE file, you can
-## obtain it at www.aomedia.org/license/software. If the Alliance for Open
-## Media Patent License 1.0 was not distributed with this source code in the
-## PATENTS file, you can obtain it at www.aomedia.org/license/patent.
-##
-if (AOM_BUILD_CMAKE_TOOLCHAINS_X86_LINUX_CMAKE_)
+#
+# Copyright (c) 2017, Alliance for Open Media. All rights reserved
+#
+# This source code is subject to the terms of the BSD 2 Clause License and the
+# Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License was
+# not distributed with this source code in the LICENSE file, you can obtain it
+# at www.aomedia.org/license/software. If the Alliance for Open Media Patent
+# License 1.0 was not distributed with this source code in the PATENTS file, you
+# can obtain it at www.aomedia.org/license/patent.
+#
+if(AOM_BUILD_CMAKE_TOOLCHAINS_X86_LINUX_CMAKE_)
   return()
-endif ()  # AOM_BUILD_CMAKE_TOOLCHAINS_X86_LINUX_CMAKE_
+endif() # AOM_BUILD_CMAKE_TOOLCHAINS_X86_LINUX_CMAKE_
 set(AOM_BUILD_CMAKE_TOOLCHAINS_X86_LINUX_CMAKE_ 1)
 
 set(CMAKE_SYSTEM_PROCESSOR "x86")
diff --git a/build/cmake/toolchains/x86-macos.cmake b/build/cmake/toolchains/x86-macos.cmake
index c9cab3d..7a46e06 100644
--- a/build/cmake/toolchains/x86-macos.cmake
+++ b/build/cmake/toolchains/x86-macos.cmake
@@ -1,13 +1,13 @@
-##
-## Copyright (c) 2017, Alliance for Open Media. All rights reserved
-##
-## This source code is subject to the terms of the BSD 2 Clause License and
-## the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License
-## was not distributed with this source code in the LICENSE file, you can
-## obtain it at www.aomedia.org/license/software. If the Alliance for Open
-## Media Patent License 1.0 was not distributed with this source code in the
-## PATENTS file, you can obtain it at www.aomedia.org/license/patent.
-##
+#
+# Copyright (c) 2017, Alliance for Open Media. All rights reserved
+#
+# This source code is subject to the terms of the BSD 2 Clause License and the
+# Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License was
+# not distributed with this source code in the LICENSE file, you can obtain it
+# at www.aomedia.org/license/software. If the Alliance for Open Media Patent
+# License 1.0 was not distributed with this source code in the PATENTS file, you
+# can obtain it at www.aomedia.org/license/patent.
+#
 set(CMAKE_SYSTEM_PROCESSOR "x86")
 set(CMAKE_SYSTEM_NAME "Darwin")
 set(CMAKE_OSX_ARCHITECTURES "i386")
diff --git a/build/cmake/toolchains/x86-mingw-gcc.cmake b/build/cmake/toolchains/x86-mingw-gcc.cmake
index caf87db..0de52a8 100644
--- a/build/cmake/toolchains/x86-mingw-gcc.cmake
+++ b/build/cmake/toolchains/x86-mingw-gcc.cmake
@@ -1,16 +1,16 @@
-##
-## Copyright (c) 2017, Alliance for Open Media. All rights reserved
-##
-## This source code is subject to the terms of the BSD 2 Clause License and
-## the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License
-## was not distributed with this source code in the LICENSE file, you can
-## obtain it at www.aomedia.org/license/software. If the Alliance for Open
-## Media Patent License 1.0 was not distributed with this source code in the
-## PATENTS file, you can obtain it at www.aomedia.org/license/patent.
-##
-if (AOM_BUILD_CMAKE_TOOLCHAINS_X86_MINGW_GCC_CMAKE_)
+#
+# Copyright (c) 2017, Alliance for Open Media. All rights reserved
+#
+# This source code is subject to the terms of the BSD 2 Clause License and the
+# Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License was
+# not distributed with this source code in the LICENSE file, you can obtain it
+# at www.aomedia.org/license/software. If the Alliance for Open Media Patent
+# License 1.0 was not distributed with this source code in the PATENTS file, you
+# can obtain it at www.aomedia.org/license/patent.
+#
+if(AOM_BUILD_CMAKE_TOOLCHAINS_X86_MINGW_GCC_CMAKE_)
   return()
-endif ()  # AOM_BUILD_CMAKE_TOOLCHAINS_X86_MINGW_GCC_CMAKE_
+endif() # AOM_BUILD_CMAKE_TOOLCHAINS_X86_MINGW_GCC_CMAKE_
 set(AOM_BUILD_CMAKE_TOOLCHAINS_X86_MINGW_GCC_CMAKE_ 1)
 
 set(CMAKE_SYSTEM_PROCESSOR "x86")
@@ -18,9 +18,9 @@
 set(CMAKE_C_COMPILER_ARG1 "-m32")
 set(CMAKE_CXX_COMPILER_ARG1 "-m32")
 
-if ("${CROSS}" STREQUAL "")
+if("${CROSS}" STREQUAL "")
   set(CROSS i686-w64-mingw32-)
-endif ()
+endif()
 
 set(CMAKE_C_COMPILER ${CROSS}gcc)
 set(CMAKE_CXX_COMPILER ${CROSS}g++)
diff --git a/build/cmake/toolchains/x86_64-ios-simulator.cmake b/build/cmake/toolchains/x86_64-ios-simulator.cmake
index d76cc00..d4b40ed 100644
--- a/build/cmake/toolchains/x86_64-ios-simulator.cmake
+++ b/build/cmake/toolchains/x86_64-ios-simulator.cmake
@@ -1,22 +1,23 @@
-##
-## Copyright (c) 2017, Alliance for Open Media. All rights reserved
-##
-## This source code is subject to the terms of the BSD 2 Clause License and
-## the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License
-## was not distributed with this source code in the LICENSE file, you can
-## obtain it at www.aomedia.org/license/software. If the Alliance for Open
-## Media Patent License 1.0 was not distributed with this source code in the
-## PATENTS file, you can obtain it at www.aomedia.org/license/patent.
-##
-if (AOM_BUILD_CMAKE_TOOLCHAINS_X86_64_IOS_SIMULATOR_CMAKE_)
+#
+# Copyright (c) 2017, Alliance for Open Media. All rights reserved
+#
+# This source code is subject to the terms of the BSD 2 Clause License and the
+# Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License was
+# not distributed with this source code in the LICENSE file, you can obtain it
+# at www.aomedia.org/license/software. If the Alliance for Open Media Patent
+# License 1.0 was not distributed with this source code in the PATENTS file, you
+# can obtain it at www.aomedia.org/license/patent.
+#
+if(AOM_BUILD_CMAKE_TOOLCHAINS_X86_64_IOS_SIMULATOR_CMAKE_)
   return()
-endif ()  # AOM_BUILD_CMAKE_TOOLCHAINS_X86_64_IOS_SIMULATOR_CMAKE_
+endif() # AOM_BUILD_CMAKE_TOOLCHAINS_X86_64_IOS_SIMULATOR_CMAKE_
 set(AOM_BUILD_CMAKE_TOOLCHAINS_X86_64_IOS_SIMULATOR_CMAKE_ 1)
 
-if (XCODE)
+if(XCODE)
+
   # TODO(tomfinegan): Handle ios sim builds in Xcode.
   message(FATAL_ERROR "This toolchain does not support Xcode.")
-endif ()
+endif()
 
 set(CMAKE_SYSTEM_PROCESSOR "x86_64")
 set(CMAKE_OSX_ARCHITECTURES "x86_64")
diff --git a/build/cmake/toolchains/x86_64-mingw-gcc.cmake b/build/cmake/toolchains/x86_64-mingw-gcc.cmake
index cd1618a..4a93b65 100644
--- a/build/cmake/toolchains/x86_64-mingw-gcc.cmake
+++ b/build/cmake/toolchains/x86_64-mingw-gcc.cmake
@@ -1,24 +1,24 @@
-##
-## Copyright (c) 2017, Alliance for Open Media. All rights reserved
-##
-## This source code is subject to the terms of the BSD 2 Clause License and
-## the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License
-## was not distributed with this source code in the LICENSE file, you can
-## obtain it at www.aomedia.org/license/software. If the Alliance for Open
-## Media Patent License 1.0 was not distributed with this source code in the
-## PATENTS file, you can obtain it at www.aomedia.org/license/patent.
-##
-if (AOM_BUILD_CMAKE_TOOLCHAINS_X86_64_MINGW_GCC_CMAKE_)
+#
+# Copyright (c) 2017, Alliance for Open Media. All rights reserved
+#
+# This source code is subject to the terms of the BSD 2 Clause License and the
+# Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License was
+# not distributed with this source code in the LICENSE file, you can obtain it
+# at www.aomedia.org/license/software. If the Alliance for Open Media Patent
+# License 1.0 was not distributed with this source code in the PATENTS file, you
+# can obtain it at www.aomedia.org/license/patent.
+#
+if(AOM_BUILD_CMAKE_TOOLCHAINS_X86_64_MINGW_GCC_CMAKE_)
   return()
-endif ()  # AOM_BUILD_CMAKE_TOOLCHAINS_X86_64_MINGW_GCC_CMAKE_
+endif() # AOM_BUILD_CMAKE_TOOLCHAINS_X86_64_MINGW_GCC_CMAKE_
 set(AOM_BUILD_CMAKE_TOOLCHAINS_X86_64_MINGW_GCC_CMAKE_ 1)
 
 set(CMAKE_SYSTEM_PROCESSOR "x86_64")
 set(CMAKE_SYSTEM_NAME "Windows")
 
-if ("${CROSS}" STREQUAL "")
+if("${CROSS}" STREQUAL "")
   set(CROSS x86_64-w64-mingw32-)
-endif ()
+endif()
 
 set(CMAKE_C_COMPILER ${CROSS}gcc)
 set(CMAKE_CXX_COMPILER ${CROSS}g++)
diff --git a/build/cmake/util.cmake b/build/cmake/util.cmake
index 1f74f5c..4aa730a 100644
--- a/build/cmake/util.cmake
+++ b/build/cmake/util.cmake
@@ -1,84 +1,84 @@
-##
-## Copyright (c) 2017, Alliance for Open Media. All rights reserved
-##
-## This source code is subject to the terms of the BSD 2 Clause License and
-## the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License
-## was not distributed with this source code in the LICENSE file, you can
-## obtain it at www.aomedia.org/license/software. If the Alliance for Open
-## Media Patent License 1.0 was not distributed with this source code in the
-## PATENTS file, you can obtain it at www.aomedia.org/license/patent.
-##
-if (AOM_BUILD_CMAKE_UTIL_CMAKE_)
+#
+# Copyright (c) 2017, Alliance for Open Media. All rights reserved
+#
+# This source code is subject to the terms of the BSD 2 Clause License and the
+# Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License was
+# not distributed with this source code in the LICENSE file, you can obtain it
+# at www.aomedia.org/license/software. If the Alliance for Open Media Patent
+# License 1.0 was not distributed with this source code in the PATENTS file, you
+# can obtain it at www.aomedia.org/license/patent.
+#
+if(AOM_BUILD_CMAKE_UTIL_CMAKE_)
   return()
-endif()  # AOM_BUILD_CMAKE_UTIL_CMAKE_
+endif() # AOM_BUILD_CMAKE_UTIL_CMAKE_
 set(AOM_BUILD_CMAKE_UTIL_CMAKE_ 1)
 
 # Creates dummy source file in $AOM_CONFIG_DIR named $basename.$extension and
 # returns the full path to the dummy source file via the $out_file_path
 # parameter.
-function (create_dummy_source_file basename extension out_file_path)
+function(create_dummy_source_file basename extension out_file_path)
   set(dummy_source_file "${AOM_CONFIG_DIR}/${basename}_dummy.${extension}")
-  file(WRITE "${dummy_source_file}"
-       "// Generated file. DO NOT EDIT!\n"
-       "// ${target_name} needs a ${extension} file to force link language, \n"
-       "// or to silence a harmless CMake warning: Ignore me.\n"
-       "void ${target_name}_dummy_function(void) {}\n")
+  file(
+    WRITE
+      "${dummy_source_file}" "// Generated file. DO NOT EDIT!\n"
+      "// ${target_name} needs a ${extension} file to force link language, \n"
+      "// or to silence a harmless CMake warning: Ignore me.\n"
+      "void ${target_name}_dummy_function(void) {}\n")
   set(${out_file_path} ${dummy_source_file} PARENT_SCOPE)
-endfunction ()
+endfunction()
 
 # Convenience function for adding a dummy source file to $target_name using
 # $extension as the file extension. Wraps create_dummy_source_file().
-function (add_dummy_source_file_to_target target_name extension)
+function(add_dummy_source_file_to_target target_name extension)
   create_dummy_source_file("${target_name}" "${extension}" "dummy_source_file")
   target_sources(${target_name} PRIVATE ${dummy_source_file})
-endfunction ()
+endfunction()
 
 # Sets the value of the variable referenced by $feature to $value, and reports
 # the change to the user via call to message(WARNING ...). $cause is expected to
 # be a configuration variable that conflicts with $feature in some way.
-function (change_config_and_warn feature value cause)
+function(change_config_and_warn feature value cause)
   set(${feature} ${value} PARENT_SCOPE)
-  if (${value} EQUAL 1)
+  if(${value} EQUAL 1)
     set(verb "Enabled")
     set(reason "required for")
-  else ()
+  else()
     set(verb "Disabled")
     set(reason "incompatible with")
-  endif ()
+  endif()
   set(warning_message "${verb} ${feature}, ${reason} ${cause}.")
   message(WARNING "--- ${warning_message}")
-endfunction ()
+endfunction()
 
 # Extracts the version string from $version_file and returns it to the user via
 # $version_string_out_var. To achieve this VERSION_STRING_NOSP is located in
 # $version_file and then everything but the string literal assigned to the
-# variable is removed. Quotes and the leading 'v' are stripped from the
-# returned string.
-function (extract_version_string version_file version_string_out_var)
+# variable is removed. Quotes and the leading 'v' are stripped from the returned
+# string.
+function(extract_version_string version_file version_string_out_var)
   file(STRINGS "${version_file}" aom_version REGEX "VERSION_STRING_NOSP")
-  string(REPLACE "#define VERSION_STRING_NOSP " "" aom_version
-         "${aom_version}")
+  string(REPLACE "#define VERSION_STRING_NOSP " "" aom_version "${aom_version}")
   string(REPLACE "\"" "" aom_version "${aom_version}")
   string(REPLACE " " "" aom_version "${aom_version}")
   string(FIND "${aom_version}" "v" v_pos)
-  if (${v_pos} EQUAL 0)
+  if(${v_pos} EQUAL 0)
     string(SUBSTRING "${aom_version}" 1 -1 aom_version)
-  endif ()
+  endif()
   set("${version_string_out_var}" "${aom_version}" PARENT_SCOPE)
-endfunction ()
+endfunction()
 
 # Sets CMake compiler launcher to $launcher_name when $launcher_name is found in
 # $PATH. Warns user about ignoring build flag $launcher_flag when $launcher_name
 # is not found in $PATH.
-function (set_compiler_launcher launcher_flag launcher_name)
+function(set_compiler_launcher launcher_flag launcher_name)
   find_program(launcher_path "${launcher_name}")
-  if (launcher_path)
+  if(launcher_path)
     set(CMAKE_C_COMPILER_LAUNCHER "${launcher_path}" PARENT_SCOPE)
     set(CMAKE_CXX_COMPILER_LAUNCHER "${launcher_path}" PARENT_SCOPE)
     message("--- Using ${launcher_name} as compiler launcher.")
-  else ()
+  else()
     message(WARNING
-            "--- Cannot find ${launcher_name}, ${launcher_flag} ignored.")
-  endif ()
-endfunction ()
+              "--- Cannot find ${launcher_name}, ${launcher_flag} ignored.")
+  endif()
+endfunction()
 
diff --git a/build/cmake/version.cmake b/build/cmake/version.cmake
index c2b3bdb..8a8645a 100644
--- a/build/cmake/version.cmake
+++ b/build/cmake/version.cmake
@@ -1,55 +1,56 @@
-##
-## Copyright (c) 2017, Alliance for Open Media. All rights reserved
-##
-## This source code is subject to the terms of the BSD 2 Clause License and
-## the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License
-## was not distributed with this source code in the LICENSE file, you can
-## obtain it at www.aomedia.org/license/software. If the Alliance for Open
-## Media Patent License 1.0 was not distributed with this source code in the
-## PATENTS file, you can obtain it at www.aomedia.org/license/patent.
-##
+#
+# Copyright (c) 2017, Alliance for Open Media. All rights reserved
+#
+# This source code is subject to the terms of the BSD 2 Clause License and the
+# Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License was
+# not distributed with this source code in the LICENSE file, you can obtain it
+# at www.aomedia.org/license/software. If the Alliance for Open Media Patent
+# License 1.0 was not distributed with this source code in the PATENTS file, you
+# can obtain it at www.aomedia.org/license/patent.
+#
 cmake_minimum_required(VERSION 3.5)
 
-set(REQUIRED_ARGS
-    "AOM_ROOT" "AOM_CONFIG_DIR" "GIT_EXECUTABLE" "PERL_EXECUTABLE")
+set(REQUIRED_ARGS "AOM_ROOT" "AOM_CONFIG_DIR" "GIT_EXECUTABLE"
+    "PERL_EXECUTABLE")
 
-foreach (arg ${REQUIRED_ARGS})
-  if ("${${arg}}" STREQUAL "")
+foreach(arg ${REQUIRED_ARGS})
+  if("${${arg}}" STREQUAL "")
     message(FATAL_ERROR "${arg} must not be empty.")
-  endif ()
-endforeach ()
+  endif()
+endforeach()
 
 include("${AOM_ROOT}/build/cmake/util.cmake")
 
 # Generate the version string for this run.
 unset(aom_version)
-if (EXISTS "${GIT_EXECUTABLE}")
+if(EXISTS "${GIT_EXECUTABLE}")
   execute_process(COMMAND ${GIT_EXECUTABLE} --git-dir=${AOM_ROOT}/.git describe
                   OUTPUT_VARIABLE aom_version ERROR_QUIET)
   string(STRIP "${aom_version}" aom_version)
 
   # Remove the leading 'v' from the version string.
   string(FIND "${aom_version}" "v" v_pos)
-  if (${v_pos} EQUAL 0)
+  if(${v_pos} EQUAL 0)
     string(SUBSTRING "${aom_version}" 1 -1 aom_version)
-  endif ()
-endif ()
+  endif()
+endif()
 
-if ("${aom_version}" STREQUAL "")
+if("${aom_version}" STREQUAL "")
   set(aom_version "${AOM_ROOT}/CHANGELOG")
-endif ()
+endif()
 
 unset(last_aom_version)
-if (EXISTS "${AOM_CONFIG_DIR}/aom_version.h")
+if(EXISTS "${AOM_CONFIG_DIR}/aom_version.h")
   extract_version_string("${AOM_CONFIG_DIR}/aom_version.h" last_aom_version)
-endif ()
+endif()
 
-if (NOT "${aom_version}" STREQUAL "${last_aom_version}")
+if(NOT "${aom_version}" STREQUAL "${last_aom_version}")
+
   # TODO(tomfinegan): Perl dependency is unnecessary. CMake can do everything
   # that is done by version.pl on its own (if a bit more verbose...).
-  execute_process(
-    COMMAND ${PERL_EXECUTABLE} "${AOM_ROOT}/build/cmake/version.pl"
-    --version_data=${aom_version}
-    --version_filename=${AOM_CONFIG_DIR}/aom_version.h
-    VERBATIM)
-endif ()
+  execute_process(COMMAND ${PERL_EXECUTABLE}
+                          "${AOM_ROOT}/build/cmake/version.pl"
+                          --version_data=${aom_version}
+                          --version_filename=${AOM_CONFIG_DIR}/aom_version.h
+                          VERBATIM)
+endif()
diff --git a/docs.cmake b/docs.cmake
index 6f14cb4..a35016e 100644
--- a/docs.cmake
+++ b/docs.cmake
@@ -1,16 +1,16 @@
-##
-## Copyright (c) 2017, Alliance for Open Media. All rights reserved
-##
-## This source code is subject to the terms of the BSD 2 Clause License and
-## the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License
-## was not distributed with this source code in the LICENSE file, you can
-## obtain it at www.aomedia.org/license/software. If the Alliance for Open
-## Media Patent License 1.0 was not distributed with this source code in the
-## PATENTS file, you can obtain it at www.aomedia.org/license/patent.
-##
-if (AOM_DOCS_CMAKE_)
+#
+# Copyright (c) 2017, Alliance for Open Media. All rights reserved
+#
+# This source code is subject to the terms of the BSD 2 Clause License and the
+# Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License was
+# not distributed with this source code in the LICENSE file, you can obtain it
+# at www.aomedia.org/license/software. If the Alliance for Open Media Patent
+# License 1.0 was not distributed with this source code in the PATENTS file, you
+# can obtain it at www.aomedia.org/license/patent.
+#
+if(AOM_DOCS_CMAKE_)
   return()
-endif ()  # AOM_DOCS_CMAKE_
+endif() # AOM_DOCS_CMAKE_
 set(AOM_DOCS_CMAKE_ 1)
 
 cmake_minimum_required(VERSION 3.5)
@@ -20,134 +20,106 @@
 set(AOM_DOXYGEN_OUTPUT_DIR "${AOM_CONFIG_DIR}/dox")
 set(AOM_DOXYGEN_SECTIONS "av1")
 
-set(AOM_DOXYGEN_SOURCES
-    "${AOM_ROOT}/aom/aom.h"
-    "${AOM_ROOT}/aom/aom_codec.h"
-    "${AOM_ROOT}/aom/aom_frame_buffer.h"
-    "${AOM_ROOT}/aom/aom_image.h"
-    "${AOM_ROOT}/aom/aom_integer.h"
-    "${AOM_ROOT}/keywords.dox"
-    "${AOM_ROOT}/mainpage.dox"
-    "${AOM_ROOT}/usage.dox")
+set(AOM_DOXYGEN_SOURCES "${AOM_ROOT}/aom/aom.h" "${AOM_ROOT}/aom/aom_codec.h"
+    "${AOM_ROOT}/aom/aom_frame_buffer.h" "${AOM_ROOT}/aom/aom_image.h"
+    "${AOM_ROOT}/aom/aom_integer.h" "${AOM_ROOT}/keywords.dox"
+    "${AOM_ROOT}/mainpage.dox" "${AOM_ROOT}/usage.dox")
 
-if (CONFIG_AV1_DECODER)
-  set(AOM_DOXYGEN_EXAMPLE_SOURCES
-      ${AOM_DOXYGEN_EXAMPLE_SOURCES}
-      "${AOM_ROOT}/aomdec.c"
-      "${AOM_ROOT}/examples/decode_to_md5.c"
+if(CONFIG_AV1_DECODER)
+  set(AOM_DOXYGEN_EXAMPLE_SOURCES ${AOM_DOXYGEN_EXAMPLE_SOURCES}
+      "${AOM_ROOT}/aomdec.c" "${AOM_ROOT}/examples/decode_to_md5.c"
       "${AOM_ROOT}/examples/decode_with_drops.c"
       "${AOM_ROOT}/examples/simple_decoder.c")
 
-  set(AOM_DOXYGEN_EXAMPLE_DESCRIPTIONS
-      ${AOM_DOXYGEN_EXAMPLE_DESCRIPTIONS}
-      "Full featured decoder."
-      "Frame by frame MD5 checksum."
-      "Drops frames while decoding."
-      "Simplified decoder loop.")
+  set(AOM_DOXYGEN_EXAMPLE_DESCRIPTIONS ${AOM_DOXYGEN_EXAMPLE_DESCRIPTIONS}
+      "Full featured decoder." "Frame by frame MD5 checksum."
+      "Drops frames while decoding." "Simplified decoder loop.")
 
   set(AOM_DOXYGEN_SECTIONS ${AOM_DOXYGEN_SECTIONS} "av1_decoder decoder")
 
-  set(AOM_DOXYGEN_SOURCES
-      ${AOM_DOXYGEN_SOURCES}
-      "${AOM_ROOT}/aom/aom_decoder.h"
-      "${AOM_ROOT}/aom/aomdx.h"
+  set(AOM_DOXYGEN_SOURCES ${AOM_DOXYGEN_SOURCES}
+      "${AOM_ROOT}/aom/aom_decoder.h" "${AOM_ROOT}/aom/aomdx.h"
       "${AOM_ROOT}/usage_dx.dox")
 
-  if (CONFIG_ANALYZER)
-    set(AOM_DOXYGEN_EXAMPLE_SOURCES
-        ${AOM_DOXYGEN_EXAMPLE_SOURCES}
+  if(CONFIG_ANALYZER)
+    set(AOM_DOXYGEN_EXAMPLE_SOURCES ${AOM_DOXYGEN_EXAMPLE_SOURCES}
         "${AOM_ROOT}/examples/analyzer.cc")
 
-    set(AOM_DOXYGEN_EXAMPLE_DESCRIPTIONS
-        ${AOM_DOXYGEN_EXAMPLE_DESCRIPTIONS}
+    set(AOM_DOXYGEN_EXAMPLE_DESCRIPTIONS ${AOM_DOXYGEN_EXAMPLE_DESCRIPTIONS}
         "Bitstream analyzer.")
-  endif ()
+  endif()
 
-  if (CONFIG_INSPECTION)
-     set(AOM_DOXYGEN_EXAMPLE_SOURCES
-         ${AOM_DOXYGEN_EXAMPLE_SOURCES}
-         "${AOM_ROOT}/examples/inspect.c")
+  if(CONFIG_INSPECTION)
+    set(AOM_DOXYGEN_EXAMPLE_SOURCES ${AOM_DOXYGEN_EXAMPLE_SOURCES}
+        "${AOM_ROOT}/examples/inspect.c")
 
-    set(AOM_DOXYGEN_EXAMPLE_DESCRIPTIONS
-        ${AOM_DOXYGEN_EXAMPLE_DESCRIPTIONS}
+    set(AOM_DOXYGEN_EXAMPLE_DESCRIPTIONS ${AOM_DOXYGEN_EXAMPLE_DESCRIPTIONS}
         "Bitstream inspector.")
-  endif ()
-endif ()
+  endif()
+endif()
 
-if (CONFIG_AV1_ENCODER)
-  set(AOM_DOXYGEN_EXAMPLE_SOURCES
-      ${AOM_DOXYGEN_EXAMPLE_SOURCES}
-      "${AOM_ROOT}/aomenc.c"
-      "${AOM_ROOT}/examples/lossless_encoder.c"
-      "${AOM_ROOT}/examples/set_maps.c"
-      "${AOM_ROOT}/examples/simple_encoder.c"
+if(CONFIG_AV1_ENCODER)
+  set(AOM_DOXYGEN_EXAMPLE_SOURCES ${AOM_DOXYGEN_EXAMPLE_SOURCES}
+      "${AOM_ROOT}/aomenc.c" "${AOM_ROOT}/examples/lossless_encoder.c"
+      "${AOM_ROOT}/examples/set_maps.c" "${AOM_ROOT}/examples/simple_encoder.c"
       "${AOM_ROOT}/examples/twopass_encoder.c")
 
-  set(AOM_DOXYGEN_EXAMPLE_DESCRIPTIONS
-      ${AOM_DOXYGEN_EXAMPLE_DESCRIPTIONS}
-      "Full featured encoder."
-      "Simplified lossless encoder."
-      "Set active and ROI maps."
-      "Simplified encoder loop."
+  set(AOM_DOXYGEN_EXAMPLE_DESCRIPTIONS ${AOM_DOXYGEN_EXAMPLE_DESCRIPTIONS}
+      "Full featured encoder." "Simplified lossless encoder."
+      "Set active and ROI maps." "Simplified encoder loop."
       "Two-pass encoder loop.")
 
-    set(AOM_DOXYGEN_EXAMPLE_SOURCES
-        ${AOM_DOXYGEN_EXAMPLE_SOURCES}
-        "${AOM_ROOT}/examples/scalable_encoder.c")
+  set(AOM_DOXYGEN_EXAMPLE_SOURCES ${AOM_DOXYGEN_EXAMPLE_SOURCES}
+      "${AOM_ROOT}/examples/scalable_encoder.c")
 
-    set(AOM_DOXYGEN_EXAMPLE_DESCRIPTIONS
-        ${AOM_DOXYGEN_EXAMPLE_DESCRIPTIONS}
-        "Scalable encoder loop.")
+  set(AOM_DOXYGEN_EXAMPLE_DESCRIPTIONS ${AOM_DOXYGEN_EXAMPLE_DESCRIPTIONS}
+      "Scalable encoder loop.")
 
   set(AOM_DOXYGEN_SECTIONS ${AOM_DOXYGEN_SECTIONS} "av1_encoder encoder")
 
-  set(AOM_DOXYGEN_SOURCES
-      ${AOM_DOXYGEN_SOURCES}
-      "${AOM_ROOT}/aom/aomcx.h"
-      "${AOM_ROOT}/aom/aom_encoder.h"
-      "${AOM_ROOT}/usage_cx.dox")
-endif ()
+  set(AOM_DOXYGEN_SOURCES ${AOM_DOXYGEN_SOURCES} "${AOM_ROOT}/aom/aomcx.h"
+      "${AOM_ROOT}/aom/aom_encoder.h" "${AOM_ROOT}/usage_cx.dox")
+endif()
 
-if (CONFIG_AV1_DECODER AND CONFIG_AV1_ENCODER)
-  set(AOM_DOXYGEN_EXAMPLE_SOURCES
-      ${AOM_DOXYGEN_EXAMPLE_SOURCES}
+if(CONFIG_AV1_DECODER AND CONFIG_AV1_ENCODER)
+  set(AOM_DOXYGEN_EXAMPLE_SOURCES ${AOM_DOXYGEN_EXAMPLE_SOURCES}
       "${AOM_ROOT}/examples/aom_cx_set_ref.c")
 
-  set(AOM_DOXYGEN_EXAMPLE_DESCRIPTIONS
-      ${AOM_DOXYGEN_EXAMPLE_DESCRIPTIONS}
+  set(AOM_DOXYGEN_EXAMPLE_DESCRIPTIONS ${AOM_DOXYGEN_EXAMPLE_DESCRIPTIONS}
       "Set encoder reference frame.")
-endif ()
+endif()
 
 # Iterates over list named by $list_name and appends each item to $AOM_DOXYFILE
 # as values assigned to $var_name with no line breaks between list items.
 # Appends a new line after the entire config variable is expanded.
-function (write_cmake_list_to_doxygen_config_var var_name list_name)
+function(write_cmake_list_to_doxygen_config_var var_name list_name)
   unset(output_string)
-  foreach (list_item ${${list_name}})
+  foreach(list_item ${${list_name}})
     set(output_string "${output_string} ${list_item} ")
-  endforeach ()
+  endforeach()
   string(STRIP "${output_string}" output_string)
   file(APPEND "${AOM_DOXYFILE}" "${var_name} += ${output_string}\n")
-endfunction ()
+endfunction()
 
-function (get_name file_path name_var)
-    get_filename_component(file_basename ${file_path} NAME)
-    get_filename_component(${name_var} ${file_basename} NAME_WE)
-    set(${name_var} ${${name_var}} PARENT_SCOPE)
-endfunction ()
+function(get_name file_path name_var)
+  get_filename_component(file_basename ${file_path} NAME)
+  get_filename_component(${name_var} ${file_basename} NAME_WE)
+  set(${name_var} ${${name_var}} PARENT_SCOPE)
+endfunction()
 
-function (setup_documentation_targets)
+function(setup_documentation_targets)
+
   # Sanity check: the lengths of these lists must match.
   list(LENGTH AOM_DOXYGEN_EXAMPLE_SOURCES num_sources)
   list(LENGTH AOM_DOXYGEN_EXAMPLE_DESCRIPTIONS num_descs)
-  if (NOT ${num_sources} EQUAL ${num_descs})
+  if(NOT ${num_sources} EQUAL ${num_descs})
     message(FATAL_ERROR "Unqeual example and description totals.")
-  endif ()
+  endif()
 
   # Take the list of examples and produce example_basename.dox for each file in
   # the list.
   file(MAKE_DIRECTORY "${AOM_DOXYGEN_OUTPUT_DIR}")
-  foreach (example_file ${AOM_DOXYGEN_EXAMPLE_SOURCES})
+  foreach(example_file ${AOM_DOXYGEN_EXAMPLE_SOURCES})
     unset(example_basename)
     get_name("${example_file}" "example_name")
     set(example_dox "${AOM_DOXYGEN_OUTPUT_DIR}/${example_name}.dox")
@@ -155,25 +127,29 @@
     set(dox_string "${dox_string} \\includelineno ${example_file}\n*/\n")
     file(WRITE "${example_dox}" ${dox_string})
     set(AOM_DOXYGEN_SOURCES ${AOM_DOXYGEN_SOURCES} "${example_dox}")
-  endforeach ()
+  endforeach()
 
   # Generate samples.dox, an index page that refers to the example_basename.dox
   # files that were just created.
-  set(samples_header
-"
+  set(
+    samples_header
+    "
 /*!\\page samples Sample Code
 This SDK includes a number of sample applications. Each sample documents a
 feature of the SDK in both prose and the associated C code. The following
 samples are included:
-")
-
-  set(utils_desc
 "
+    )
+
+  set(
+    utils_desc
+    "
 In addition, the SDK contains a number of utilities. Since these utilities are
 built upon the concepts described in the sample code listed above, they are not
 documented in pieces like the samples are. Their source is included here for
 reference. The following utilities are included:
-")
+"
+    )
 
   # Write the description for the samples section.
   set(samples_dox "${AOM_CONFIG_DIR}/samples.dox")
@@ -183,28 +159,28 @@
   # $AOM_DOXYGEN_EXAMPLE_DESCRIPTIONS and massage example names as required by
   # AV1's doxygen setup.
   math(EXPR max_example_index "${num_sources} - 1")
-  foreach (NUM RANGE ${max_example_index})
+  foreach(NUM RANGE ${max_example_index})
     list(GET AOM_DOXYGEN_EXAMPLE_SOURCES ${NUM} ex_name)
     get_name("${ex_name}" "ex_name")
 
     # AV1's doxygen lists aomdec and aomenc as utils apart from the examples.
     # Save the indexes for another pass.
-    if ("${ex_name}" MATCHES "aomdec\|aomenc")
+    if("${ex_name}" MATCHES "aomdec\|aomenc")
       set(util_indexes "${util_indexes}" "${NUM}")
       continue()
-    endif ()
+    endif()
     list(GET AOM_DOXYGEN_EXAMPLE_DESCRIPTIONS ${NUM} ex_desc)
     file(APPEND "${samples_dox}" " - \\subpage example_${ex_name} ${ex_desc}\n")
-  endforeach ()
+  endforeach()
 
   # Write the description and index for the utils.
   file(APPEND "${samples_dox}" "${utils_desc}\n")
-  foreach (util_index ${util_indexes})
+  foreach(util_index ${util_indexes})
     list(GET AOM_DOXYGEN_EXAMPLE_SOURCES ${util_index} ex_name)
     get_name("${ex_name}" "ex_name")
     list(GET AOM_DOXYGEN_EXAMPLE_DESCRIPTIONS ${util_index} ex_desc)
     file(APPEND "${samples_dox}" " - \\subpage example_${ex_name} ${ex_desc}\n")
-  endforeach ()
+  endforeach()
   file(APPEND "${samples_dox}" "*/")
 
   # Add $samples_dox to the doxygen inputs.
@@ -216,11 +192,11 @@
   file(READ "${AOM_ROOT}/${AOM_DOXYGEN_CONFIG_TEMPLATE}" doxygen_template_data)
   file(APPEND "${AOM_DOXYFILE}" ${doxygen_template_data})
   file(APPEND "${AOM_DOXYFILE}"
-       "EXAMPLE_PATH += ${AOM_ROOT} ${AOM_ROOT}/examples\n")
-  file(APPEND
-       "${AOM_DOXYFILE}" "INCLUDE_PATH += ${AOM_CONFIG_DIR} ${AOM_ROOT}\n")
+              "EXAMPLE_PATH += ${AOM_ROOT} ${AOM_ROOT}/examples\n")
   file(APPEND "${AOM_DOXYFILE}"
-       "STRIP_FROM_PATH += ${AOM_ROOT} ${AOM_CONFIG_DIR}\n")
+              "INCLUDE_PATH += ${AOM_CONFIG_DIR} ${AOM_ROOT}\n")
+  file(APPEND "${AOM_DOXYFILE}"
+              "STRIP_FROM_PATH += ${AOM_ROOT} ${AOM_CONFIG_DIR}\n")
   write_cmake_list_to_doxygen_config_var("INPUT" "AOM_DOXYGEN_SOURCES")
   write_cmake_list_to_doxygen_config_var("ENABLED_SECTIONS"
                                          "AOM_DOXYGEN_SECTIONS")
@@ -229,9 +205,9 @@
   add_custom_target(docs ALL
                     COMMAND "${DOXYGEN_EXECUTABLE}" "${AOM_DOXYFILE}"
                     DEPENDS "${AOM_DOXYFILE}" ${AOM_DOXYGEN_SOURCES}
-                             ${AOM_DOXYGEN_EXAMPLE_SOURCES}
-                             "${AOM_DOXYGEN_CONFIG_TEMPLATE}"
+                            ${AOM_DOXYGEN_EXAMPLE_SOURCES}
+                            "${AOM_DOXYGEN_CONFIG_TEMPLATE}"
                     SOURCES "${AOM_DOXYFILE}" ${AOM_DOXYGEN_SOURCES}
-                             ${AOM_DOXYGEN_EXAMPLE_SOURCES}
-                             "${AOM_DOXYGEN_CONFIG_TEMPLATE}")
-endfunction ()
+                            ${AOM_DOXYGEN_EXAMPLE_SOURCES}
+                            "${AOM_DOXYGEN_CONFIG_TEMPLATE}")
+endfunction()
diff --git a/test/test.cmake b/test/test.cmake
index d9d0ec1..a32bb7c 100644
--- a/test/test.cmake
+++ b/test/test.cmake
@@ -1,16 +1,16 @@
-##
-## Copyright (c) 2017, Alliance for Open Media. All rights reserved
-##
-## This source code is subject to the terms of the BSD 2 Clause License and
-## the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License
-## was not distributed with this source code in the LICENSE file, you can
-## obtain it at www.aomedia.org/license/software. If the Alliance for Open
-## Media Patent License 1.0 was not distributed with this source code in the
-## PATENTS file, you can obtain it at www.aomedia.org/license/patent.
-##
-if (AOM_TEST_TEST_CMAKE_)
+#
+# Copyright (c) 2017, Alliance for Open Media. All rights reserved
+#
+# This source code is subject to the terms of the BSD 2 Clause License and the
+# Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License was
+# not distributed with this source code in the LICENSE file, you can obtain it
+# at www.aomedia.org/license/software. If the Alliance for Open Media Patent
+# License 1.0 was not distributed with this source code in the PATENTS file, you
+# can obtain it at www.aomedia.org/license/patent.
+#
+if(AOM_TEST_TEST_CMAKE_)
   return()
-endif ()  # AOM_TEST_TEST_CMAKE_
+endif() # AOM_TEST_TEST_CMAKE_
 set(AOM_TEST_TEST_CMAKE_ 1)
 
 include(FindPythonInterp)
@@ -20,8 +20,7 @@
 
 set(AOM_UNIT_TEST_DATA_LIST_FILE "${AOM_ROOT}/test/test-data.sha1")
 
-set(AOM_UNIT_TEST_WRAPPER_SOURCES
-    "${AOM_CONFIG_DIR}/usage_exit.c"
+set(AOM_UNIT_TEST_WRAPPER_SOURCES "${AOM_CONFIG_DIR}/usage_exit.c"
     "${AOM_ROOT}/test/test_libaom.cc")
 
 set(AOM_UNIT_TEST_COMMON_SOURCES
@@ -38,48 +37,39 @@
     "${AOM_ROOT}/test/util.h"
     "${AOM_ROOT}/test/video_source.h")
 
-if (NOT BUILD_SHARED_LIBS)
-  set(AOM_UNIT_TEST_COMMON_SOURCES
-      ${AOM_UNIT_TEST_COMMON_SOURCES}
-      "${AOM_ROOT}/test/convolve_test.cc"
-      "${AOM_ROOT}/test/simd_impl.h")
+if(NOT BUILD_SHARED_LIBS)
+  set(AOM_UNIT_TEST_COMMON_SOURCES ${AOM_UNIT_TEST_COMMON_SOURCES}
+      "${AOM_ROOT}/test/convolve_test.cc" "${AOM_ROOT}/test/simd_impl.h")
 
-  if (HAVE_NEON)
-    set(AOM_UNIT_TEST_COMMON_SOURCES
-        ${AOM_UNIT_TEST_COMMON_SOURCES}
+  if(HAVE_NEON)
+    set(AOM_UNIT_TEST_COMMON_SOURCES ${AOM_UNIT_TEST_COMMON_SOURCES}
         "${AOM_ROOT}/test/simd_neon_test.cc")
-  endif ()
-  if (HAVE_SSE2)
-    set(AOM_UNIT_TEST_COMMON_SOURCES
-        ${AOM_UNIT_TEST_COMMON_SOURCES}
+  endif()
+  if(HAVE_SSE2)
+    set(AOM_UNIT_TEST_COMMON_SOURCES ${AOM_UNIT_TEST_COMMON_SOURCES}
         "${AOM_ROOT}/test/simd_sse2_test.cc")
-  endif ()
-  if (HAVE_SSSE3)
-    set(AOM_UNIT_TEST_COMMON_SOURCES
-        ${AOM_UNIT_TEST_COMMON_SOURCES}
+  endif()
+  if(HAVE_SSSE3)
+    set(AOM_UNIT_TEST_COMMON_SOURCES ${AOM_UNIT_TEST_COMMON_SOURCES}
         "${AOM_ROOT}/test/simd_ssse3_test.cc")
-  endif ()
-  if (HAVE_SSE4)
-    set(AOM_UNIT_TEST_COMMON_SOURCES
-        ${AOM_UNIT_TEST_COMMON_SOURCES}
+  endif()
+  if(HAVE_SSE4)
+    set(AOM_UNIT_TEST_COMMON_SOURCES ${AOM_UNIT_TEST_COMMON_SOURCES}
         "${AOM_ROOT}/test/simd_sse4_test.cc")
-  endif ()
-  if (HAVE_AVX2)
-    set(AOM_UNIT_TEST_COMMON_SOURCES
-        ${AOM_UNIT_TEST_COMMON_SOURCES}
+  endif()
+  if(HAVE_AVX2)
+    set(AOM_UNIT_TEST_COMMON_SOURCES ${AOM_UNIT_TEST_COMMON_SOURCES}
         "${AOM_ROOT}/test/simd_avx2_test.cc")
-  endif ()
+  endif()
 
-  if (CONFIG_ACCOUNTING)
-    set(AOM_UNIT_TEST_COMMON_SOURCES
-        ${AOM_UNIT_TEST_COMMON_SOURCES}
+  if(CONFIG_ACCOUNTING)
+    set(AOM_UNIT_TEST_COMMON_SOURCES ${AOM_UNIT_TEST_COMMON_SOURCES}
         "${AOM_ROOT}/test/accounting_test.cc")
-  endif ()
+  endif()
 
-endif ()
+endif()
 
-set(AOM_UNIT_TEST_DECODER_SOURCES
-    "${AOM_ROOT}/test/decode_api_test.cc"
+set(AOM_UNIT_TEST_DECODER_SOURCES "${AOM_ROOT}/test/decode_api_test.cc"
     "${AOM_ROOT}/test/ivf_video_source.h")
 
 set(AOM_UNIT_TEST_ENCODER_SOURCES
@@ -100,94 +90,74 @@
     "${AOM_ROOT}/test/yuv_video_source.h"
     "${AOM_ROOT}/test/monochrome_test.cc")
 
-if (NOT BUILD_SHARED_LIBS)
-  set(AOM_UNIT_TEST_ENCODER_SOURCES
-      ${AOM_UNIT_TEST_ENCODER_SOURCES}
-      "${AOM_ROOT}/test/dct32x32_test.cc"
-      "${AOM_ROOT}/test/sad_test.cc")
-endif ()
+if(NOT BUILD_SHARED_LIBS)
+  set(AOM_UNIT_TEST_ENCODER_SOURCES ${AOM_UNIT_TEST_ENCODER_SOURCES}
+      "${AOM_ROOT}/test/dct32x32_test.cc" "${AOM_ROOT}/test/sad_test.cc")
+endif()
 
 set(AOM_DECODE_PERF_TEST_SOURCES "${AOM_ROOT}/test/decode_perf_test.cc")
 set(AOM_ENCODE_PERF_TEST_SOURCES "${AOM_ROOT}/test/encode_perf_test.cc")
 set(AOM_UNIT_TEST_WEBM_SOURCES "${AOM_ROOT}/test/webm_video_source.h")
 
-set(AOM_TEST_INTRA_PRED_SPEED_SOURCES
-    "${AOM_CONFIG_DIR}/usage_exit.c"
+set(AOM_TEST_INTRA_PRED_SPEED_SOURCES "${AOM_CONFIG_DIR}/usage_exit.c"
     "${AOM_ROOT}/test/test_intra_pred_speed.cc")
 
-if (NOT BUILD_SHARED_LIBS)
-  if (CONFIG_AV1_DECODER OR CONFIG_AV1_ENCODER)
-    set(AOM_UNIT_TEST_COMMON_SOURCES
-        ${AOM_UNIT_TEST_COMMON_SOURCES}
-        "${AOM_ROOT}/test/cdef_test.cc"
-        "${AOM_ROOT}/test/intrabc_test.cc"
-        "${AOM_ROOT}/test/intrapred_test.cc"
-        "${AOM_ROOT}/test/lpf_test.cc"
-        "${AOM_ROOT}/test/onyxc_int_test.cc"
-        "${AOM_ROOT}/test/scan_test.cc"
+if(NOT BUILD_SHARED_LIBS)
+  if(CONFIG_AV1_DECODER OR CONFIG_AV1_ENCODER)
+    set(AOM_UNIT_TEST_COMMON_SOURCES ${AOM_UNIT_TEST_COMMON_SOURCES}
+        "${AOM_ROOT}/test/cdef_test.cc" "${AOM_ROOT}/test/intrabc_test.cc"
+        "${AOM_ROOT}/test/intrapred_test.cc" "${AOM_ROOT}/test/lpf_test.cc"
+        "${AOM_ROOT}/test/onyxc_int_test.cc" "${AOM_ROOT}/test/scan_test.cc"
         "${AOM_ROOT}/test/simd_cmp_impl.h")
 
-    set(AOM_UNIT_TEST_ENCODER_SOURCES
-        ${AOM_UNIT_TEST_ENCODER_SOURCES}
+    set(AOM_UNIT_TEST_ENCODER_SOURCES ${AOM_UNIT_TEST_ENCODER_SOURCES}
         "${AOM_ROOT}/test/motion_vector_test.cc")
 
-    if (HAVE_SSE4_1)
-        set(AOM_UNIT_TEST_COMMON_SOURCES
-            ${AOM_UNIT_TEST_COMMON_SOURCES}
-            "${AOM_ROOT}/test/filterintra_test.cc")
-    endif ()
+    if(HAVE_SSE4_1)
+      set(AOM_UNIT_TEST_COMMON_SOURCES ${AOM_UNIT_TEST_COMMON_SOURCES}
+          "${AOM_ROOT}/test/filterintra_test.cc")
+    endif()
 
-    set(AOM_UNIT_TEST_COMMON_SOURCES
-        ${AOM_UNIT_TEST_COMMON_SOURCES}
+    set(AOM_UNIT_TEST_COMMON_SOURCES ${AOM_UNIT_TEST_COMMON_SOURCES}
         "${AOM_ROOT}/test/cfl_test.cc")
 
-    set(AOM_UNIT_TEST_COMMON_SOURCES
-        ${AOM_UNIT_TEST_COMMON_SOURCES}
+    set(AOM_UNIT_TEST_COMMON_SOURCES ${AOM_UNIT_TEST_COMMON_SOURCES}
         "${AOM_ROOT}/test/selfguided_filter_test.cc")
 
-    if (HAVE_SSE2)
-      set(AOM_UNIT_TEST_COMMON_SOURCES
-          ${AOM_UNIT_TEST_COMMON_SOURCES}
+    if(HAVE_SSE2)
+      set(AOM_UNIT_TEST_COMMON_SOURCES ${AOM_UNIT_TEST_COMMON_SOURCES}
           "${AOM_ROOT}/test/hiprec_convolve_test.cc"
           "${AOM_ROOT}/test/hiprec_convolve_test_util.cc"
           "${AOM_ROOT}/test/hiprec_convolve_test_util.h")
-    endif ()
+    endif()
 
-    set(AOM_UNIT_TEST_ENCODER_SOURCES
-        ${AOM_UNIT_TEST_ENCODER_SOURCES}
+    set(AOM_UNIT_TEST_ENCODER_SOURCES ${AOM_UNIT_TEST_ENCODER_SOURCES}
         "${AOM_ROOT}/test/encodetxb_test.cc")
 
-    set(AOM_UNIT_TEST_COMMON_INTRIN_NEON
-        ${AOM_UNIT_TEST_COMMON_INTRIN_NEON}
+    set(AOM_UNIT_TEST_COMMON_INTRIN_NEON ${AOM_UNIT_TEST_COMMON_INTRIN_NEON}
         "${AOM_ROOT}/test/simd_cmp_neon.cc")
-    set(AOM_UNIT_TEST_COMMON_INTRIN_SSE2
-        ${AOM_UNIT_TEST_COMMON_INTRIN_SSE2}
+    set(AOM_UNIT_TEST_COMMON_INTRIN_SSE2 ${AOM_UNIT_TEST_COMMON_INTRIN_SSE2}
         "${AOM_ROOT}/test/simd_cmp_sse2.cc")
-    set(AOM_UNIT_TEST_COMMON_INTRIN_SSSE3
-        ${AOM_UNIT_TEST_COMMON_INTRIN_SSSE3}
+    set(AOM_UNIT_TEST_COMMON_INTRIN_SSSE3 ${AOM_UNIT_TEST_COMMON_INTRIN_SSSE3}
         "${AOM_ROOT}/test/simd_cmp_ssse3.cc")
     set(AOM_UNIT_TEST_COMMON_INTRIN_SSE4_1
         ${AOM_UNIT_TEST_COMMON_INTRIN_SSE4_1}
         "${AOM_ROOT}/test/simd_cmp_sse4.cc")
-    set(AOM_UNIT_TEST_COMMON_INTRIN_AVX2
-        ${AOM_UNIT_TEST_COMMON_INTRIN_AVX2}
+    set(AOM_UNIT_TEST_COMMON_INTRIN_AVX2 ${AOM_UNIT_TEST_COMMON_INTRIN_AVX2}
         "${AOM_ROOT}/test/simd_cmp_avx2.cc")
-  endif ()
-endif ()
+  endif()
+endif()
 
-if (CONFIG_AV1_ENCODER)
-  set(AOM_UNIT_TEST_ENCODER_SOURCES
-      ${AOM_UNIT_TEST_ENCODER_SOURCES}
-      "${AOM_ROOT}/test/active_map_test.cc"
-      "${AOM_ROOT}/test/av1_txfm_test.cc"
-      "${AOM_ROOT}/test/av1_txfm_test.h"
-      "${AOM_ROOT}/test/borders_test.cc"
+if(CONFIG_AV1_ENCODER)
+  set(AOM_UNIT_TEST_ENCODER_SOURCES ${AOM_UNIT_TEST_ENCODER_SOURCES}
+      "${AOM_ROOT}/test/active_map_test.cc" "${AOM_ROOT}/test/av1_txfm_test.cc"
+      "${AOM_ROOT}/test/av1_txfm_test.h" "${AOM_ROOT}/test/borders_test.cc"
       "${AOM_ROOT}/test/cpu_speed_test.cc"
       "${AOM_ROOT}/test/end_to_end_test.cc"
       "${AOM_ROOT}/test/frame_size_tests.cc"
       "${AOM_ROOT}/test/lossless_test.cc")
 
-  if (NOT BUILD_SHARED_LIBS)
+  if(NOT BUILD_SHARED_LIBS)
     set(AOM_UNIT_TEST_ENCODER_SOURCES
         ${AOM_UNIT_TEST_ENCODER_SOURCES}
         "${AOM_ROOT}/test/arf_freq_test.cc"
@@ -212,270 +182,255 @@
         "${AOM_ROOT}/test/sum_squares_test.cc"
         "${AOM_ROOT}/test/variance_test.cc")
 
-    if (HAVE_SSE2)
-      set(AOM_UNIT_TEST_ENCODER_SOURCES
-          ${AOM_UNIT_TEST_ENCODER_SOURCES}
+    if(HAVE_SSE2)
+      set(AOM_UNIT_TEST_ENCODER_SOURCES ${AOM_UNIT_TEST_ENCODER_SOURCES}
           "${AOM_ROOT}/test/av1_convolve_2d_test.cc"
           "${AOM_ROOT}/test/av1_convolve_2d_test_util.cc"
           "${AOM_ROOT}/test/av1_convolve_2d_test_util.h"
           "${AOM_ROOT}/test/comp_avg_pred_test.h"
           "${AOM_ROOT}/test/comp_avg_pred_test.cc")
-    endif ()
+    endif()
 
-    if (HAVE_SSE4_1)
-        set(AOM_UNIT_TEST_ENCODER_SOURCES
-            ${AOM_UNIT_TEST_ENCODER_SOURCES}
-            "${AOM_ROOT}/test/av1_convolve_scale_test.cc"
-            "${AOM_ROOT}/test/warp_filter_test_util.cc"
-            "${AOM_ROOT}/test/warp_filter_test_util.h"
-            "${AOM_ROOT}/test/warp_filter_test.cc")
-    endif ()
+    if(HAVE_SSE4_1)
+      set(AOM_UNIT_TEST_ENCODER_SOURCES ${AOM_UNIT_TEST_ENCODER_SOURCES}
+          "${AOM_ROOT}/test/av1_convolve_scale_test.cc"
+          "${AOM_ROOT}/test/warp_filter_test_util.cc"
+          "${AOM_ROOT}/test/warp_filter_test_util.h"
+          "${AOM_ROOT}/test/warp_filter_test.cc")
+    endif()
 
-    if (HAVE_SSE4_1)
-      set(AOM_UNIT_TEST_ENCODER_SOURCES
-          ${AOM_UNIT_TEST_ENCODER_SOURCES}
+    if(HAVE_SSE4_1)
+      set(AOM_UNIT_TEST_ENCODER_SOURCES ${AOM_UNIT_TEST_ENCODER_SOURCES}
           "${AOM_ROOT}/test/intra_edge_test.cc")
-    endif ()
+    endif()
 
-    if (HAVE_SSE4_1)
-      set(AOM_UNIT_TEST_ENCODER_SOURCES
-          ${AOM_UNIT_TEST_ENCODER_SOURCES}
+    if(HAVE_SSE4_1)
+      set(AOM_UNIT_TEST_ENCODER_SOURCES ${AOM_UNIT_TEST_ENCODER_SOURCES}
           "${AOM_ROOT}/test/av1_horz_only_frame_superres_test.cc")
-    endif ()
+    endif()
 
-    if (HAVE_SSE4_2)
-      set(AOM_UNIT_TEST_ENCODER_SOURCES
-          ${AOM_UNIT_TEST_ENCODER_SOURCES}
+    if(HAVE_SSE4_2)
+      set(AOM_UNIT_TEST_ENCODER_SOURCES ${AOM_UNIT_TEST_ENCODER_SOURCES}
           "${AOM_ROOT}/test/hash_test.cc")
-    endif ()
+    endif()
 
     set(AOM_UNIT_TEST_ENCODER_INTRIN_SSE4_1
         ${AOM_UNIT_TEST_ENCODER_INTRIN_SSE4_1}
         "${AOM_ROOT}/test/corner_match_test.cc")
 
-    set(AOM_UNIT_TEST_ENCODER_SOURCES
-        ${AOM_UNIT_TEST_ENCODER_SOURCES}
+    set(AOM_UNIT_TEST_ENCODER_SOURCES ${AOM_UNIT_TEST_ENCODER_SOURCES}
         "${AOM_ROOT}/test/obmc_sad_test.cc"
         "${AOM_ROOT}/test/obmc_variance_test.cc")
 
-  endif ()
-endif ()
+  endif()
+endif()
 
-if (NOT BUILD_SHARED_LIBS)
-  if (CONFIG_AV1_DECODER AND CONFIG_AV1_ENCODER)
-    set(AOM_UNIT_TEST_COMMON_SOURCES
-        ${AOM_UNIT_TEST_COMMON_SOURCES}
+if(NOT BUILD_SHARED_LIBS)
+  if(CONFIG_AV1_DECODER AND CONFIG_AV1_ENCODER)
+    set(AOM_UNIT_TEST_COMMON_SOURCES ${AOM_UNIT_TEST_COMMON_SOURCES}
         "${AOM_ROOT}/test/divu_small_test.cc"
         "${AOM_ROOT}/test/ethread_test.cc"
-	"${AOM_ROOT}/test/film_grain_table_test.cc"
+        "${AOM_ROOT}/test/film_grain_table_test.cc"
         "${AOM_ROOT}/test/coding_path_sync.cc"
         "${AOM_ROOT}/test/idct8x8_test.cc"
         "${AOM_ROOT}/test/superframe_test.cc"
         "${AOM_ROOT}/test/tile_independence_test.cc"
         "${AOM_ROOT}/test/decode_multithreaded_test.cc")
 
-    set(AOM_UNIT_TEST_COMMON_SOURCES
-        ${AOM_UNIT_TEST_COMMON_SOURCES}
+    set(AOM_UNIT_TEST_COMMON_SOURCES ${AOM_UNIT_TEST_COMMON_SOURCES}
         "${AOM_ROOT}/test/segment_binarization_sync.cc")
-  
-    set(AOM_UNIT_TEST_COMMON_SOURCES
-        ${AOM_UNIT_TEST_COMMON_SOURCES}
+
+    set(AOM_UNIT_TEST_COMMON_SOURCES ${AOM_UNIT_TEST_COMMON_SOURCES}
         "${AOM_ROOT}/test/binary_codes_test.cc"
-        "${AOM_ROOT}/test/boolcoder_test.cc"
-        "${AOM_ROOT}/test/ec_test.cc")
+        "${AOM_ROOT}/test/boolcoder_test.cc" "${AOM_ROOT}/test/ec_test.cc")
 
-      set(AOM_UNIT_TEST_COMMON_SOURCES
-          ${AOM_UNIT_TEST_COMMON_SOURCES}
-          "${AOM_ROOT}/test/av1_ext_tile_test.cc")
-  endif ()
-endif ()
+    set(AOM_UNIT_TEST_COMMON_SOURCES ${AOM_UNIT_TEST_COMMON_SOURCES}
+        "${AOM_ROOT}/test/av1_ext_tile_test.cc")
+  endif()
+endif()
 
-  if (CONFIG_AV1_ENCODER AND NOT BUILD_SHARED_LIBS)
-    set(AOM_UNIT_TEST_COMMON_INTRIN_SSE4_1
-        ${AOM_UNIT_TEST_COMMON_INTRIN_SSE4_1}
-        "${AOM_ROOT}/test/av1_highbd_iht_test.cc"
-        "${AOM_ROOT}/test/av1_quantize_test.cc"
-        "${AOM_ROOT}/test/quantize_func_test.cc"
-        "${AOM_ROOT}/test/reconinter_test.cc")
-  endif ()
+if(CONFIG_AV1_ENCODER AND NOT BUILD_SHARED_LIBS)
+  set(AOM_UNIT_TEST_COMMON_INTRIN_SSE4_1 ${AOM_UNIT_TEST_COMMON_INTRIN_SSE4_1}
+      "${AOM_ROOT}/test/av1_highbd_iht_test.cc"
+      "${AOM_ROOT}/test/av1_quantize_test.cc"
+      "${AOM_ROOT}/test/quantize_func_test.cc"
+      "${AOM_ROOT}/test/reconinter_test.cc")
+endif()
 
-  if (CONFIG_INTERNAL_STATS)
-    set(AOM_UNIT_TEST_COMMON_SOURCES
-        ${AOM_UNIT_TEST_COMMON_SOURCES}
-        "${AOM_ROOT}/test/hbd_metrics_test.cc")
-  endif ()
+if(CONFIG_INTERNAL_STATS)
+  set(AOM_UNIT_TEST_COMMON_SOURCES ${AOM_UNIT_TEST_COMMON_SOURCES}
+      "${AOM_ROOT}/test/hbd_metrics_test.cc")
+endif()
 
-if (CONFIG_UNIT_TESTS)
+if(CONFIG_UNIT_TESTS)
   find_package(PythonInterp)
-  if (NOT PYTHONINTERP_FOUND)
-    message(FATAL_ERROR
-            "--- Unit tests require Python, rerun cmake with "
-            "-DCONFIG_UNIT_TESTS=0 to avoid this error, or install Python and "
-            "make sure it's in your PATH.")
-  endif ()
+  if(NOT PYTHONINTERP_FOUND)
+    message(
+      FATAL_ERROR
+        "--- Unit tests require Python, rerun cmake with "
+        "-DCONFIG_UNIT_TESTS=0 to avoid this error, or install Python and "
+        "make sure it's in your PATH.")
+  endif()
 
-  if (MSVC)
-    # Force static run time to avoid collisions with googletest.
+  if(MSVC) # Force static run time to avoid collisions with googletest.
     include("${AOM_ROOT}/build/cmake/msvc_runtime.cmake")
-  endif ()
+  endif()
 
-  if (BUILD_SHARED_LIBS AND APPLE)
-    # Silence an RPATH warning.
+  if(BUILD_SHARED_LIBS AND APPLE) # Silence an RPATH warning.
     set(CMAKE_MACOSX_RPATH 1)
-  endif ()
+  endif()
 
   include_directories(
     "${AOM_ROOT}/third_party/googletest/src/googletest/include")
 
-  if (AOM_DISABLE_GTEST_CMAKE)
+  if(AOM_DISABLE_GTEST_CMAKE)
     include_directories("${AOM_ROOT}/third_party/googletest/src/googletest")
-    add_library(gtest STATIC
+    add_library(
+      gtest
+      STATIC
       "${AOM_ROOT}/third_party/googletest/src/googletest/src/gtest-all.cc")
-  else ()
+  else()
     add_subdirectory("${AOM_ROOT}/third_party/googletest/src/googletest"
                      EXCLUDE_FROM_ALL)
-  endif ()
+  endif()
 
-endif ()
+endif()
 
 # Setup the targets for CONFIG_UNIT_TESTS. The libaom and app util targets must
 # exist before this function is called.
-function (setup_aom_test_targets)
+function(setup_aom_test_targets)
   add_library(test_aom_common OBJECT ${AOM_UNIT_TEST_COMMON_SOURCES})
   add_dependencies(test_aom_common aom)
 
-  if (CONFIG_AV1_DECODER)
+  if(CONFIG_AV1_DECODER)
     add_library(test_aom_decoder OBJECT ${AOM_UNIT_TEST_DECODER_SOURCES})
     add_dependencies(test_aom_decoder aom)
-  endif ()
+  endif()
 
-  if (CONFIG_AV1_ENCODER)
+  if(CONFIG_AV1_ENCODER)
     add_library(test_aom_encoder OBJECT ${AOM_UNIT_TEST_ENCODER_SOURCES})
     add_dependencies(test_aom_encoder aom)
-  endif ()
+  endif()
 
   add_executable(test_libaom ${AOM_UNIT_TEST_WRAPPER_SOURCES}
                  $<TARGET_OBJECTS:aom_common_app_util>
                  $<TARGET_OBJECTS:test_aom_common>)
   set(AOM_APP_TARGETS ${AOM_APP_TARGETS} test_libaom)
 
-  if (CONFIG_AV1_DECODER)
-    target_sources(test_libaom PRIVATE
-                   $<TARGET_OBJECTS:aom_decoder_app_util>
+  if(CONFIG_AV1_DECODER)
+    target_sources(test_libaom PRIVATE $<TARGET_OBJECTS:aom_decoder_app_util>
                    $<TARGET_OBJECTS:test_aom_decoder>)
 
-    if (CONFIG_DECODE_PERF_TESTS AND CONFIG_WEBM_IO)
+    if(CONFIG_DECODE_PERF_TESTS AND CONFIG_WEBM_IO)
       target_sources(test_libaom PRIVATE ${AOM_DECODE_PERF_TEST_SOURCES})
-    endif ()
-  endif ()
+    endif()
+  endif()
 
-  if (CONFIG_AV1_ENCODER)
-    target_sources(test_libaom PRIVATE
-                   $<TARGET_OBJECTS:test_aom_encoder>
+  if(CONFIG_AV1_ENCODER)
+    target_sources(test_libaom PRIVATE $<TARGET_OBJECTS:test_aom_encoder>
                    $<TARGET_OBJECTS:aom_encoder_app_util>)
 
-    if (CONFIG_ENCODE_PERF_TESTS)
+    if(CONFIG_ENCODE_PERF_TESTS)
       target_sources(test_libaom PRIVATE ${AOM_ENCODE_PERF_TEST_SOURCES})
-    endif ()
+    endif()
 
-    if (NOT BUILD_SHARED_LIBS)
-      add_executable(test_intra_pred_speed
-                     ${AOM_TEST_INTRA_PRED_SPEED_SOURCES}
+    if(NOT BUILD_SHARED_LIBS)
+      add_executable(test_intra_pred_speed ${AOM_TEST_INTRA_PRED_SPEED_SOURCES}
                      $<TARGET_OBJECTS:aom_common_app_util>)
-      target_link_libraries(test_intra_pred_speed ${AOM_LIB_LINK_TYPE}
-                            aom gtest)
+      target_link_libraries(test_intra_pred_speed ${AOM_LIB_LINK_TYPE} aom
+                            gtest)
       set(AOM_APP_TARGETS ${AOM_APP_TARGETS} test_intra_pred_speed)
-    endif ()
-  endif ()
+    endif()
+  endif()
 
   target_link_libraries(test_libaom ${AOM_LIB_LINK_TYPE} aom gtest)
 
-  if (CONFIG_LIBYUV)
+  if(CONFIG_LIBYUV)
     target_sources(test_libaom PRIVATE $<TARGET_OBJECTS:yuv>)
-  endif ()
-  if (CONFIG_WEBM_IO)
+  endif()
+  if(CONFIG_WEBM_IO)
     target_sources(test_libaom PRIVATE $<TARGET_OBJECTS:webm>)
-  endif ()
-  if (HAVE_SSE2)
+  endif()
+  if(HAVE_SSE2)
     add_intrinsics_source_to_target("-msse2" "test_libaom"
                                     "AOM_UNIT_TEST_COMMON_INTRIN_SSE2")
-  endif ()
-  if (HAVE_SSSE3)
+  endif()
+  if(HAVE_SSSE3)
     add_intrinsics_source_to_target("-mssse3" "test_libaom"
                                     "AOM_UNIT_TEST_COMMON_INTRIN_SSSE3")
-  endif ()
-  if (HAVE_SSE4_1)
+  endif()
+  if(HAVE_SSE4_1)
     add_intrinsics_source_to_target("-msse4.1" "test_libaom"
                                     "AOM_UNIT_TEST_COMMON_INTRIN_SSE4_1")
-    if (CONFIG_AV1_ENCODER)
-      if (AOM_UNIT_TEST_ENCODER_INTRIN_SSE4_1)
+    if(CONFIG_AV1_ENCODER)
+      if(AOM_UNIT_TEST_ENCODER_INTRIN_SSE4_1)
         add_intrinsics_source_to_target("-msse4.1" "test_libaom"
                                         "AOM_UNIT_TEST_ENCODER_INTRIN_SSE4_1")
-      endif ()
-    endif ()
-  endif ()
-  if (HAVE_AVX2)
+      endif()
+    endif()
+  endif()
+  if(HAVE_AVX2)
     add_intrinsics_source_to_target("-mavx2" "test_libaom"
                                     "AOM_UNIT_TEST_COMMON_INTRIN_AVX2")
-  endif ()
-  if (HAVE_NEON)
+  endif()
+  if(HAVE_NEON)
     add_intrinsics_source_to_target("${AOM_NEON_INTRIN_FLAG}" "test_libaom"
                                     "AOM_UNIT_TEST_COMMON_INTRIN_NEON")
-  endif ()
+  endif()
 
-  make_test_data_lists("${AOM_UNIT_TEST_DATA_LIST_FILE}"
-                       test_files test_file_checksums)
+  make_test_data_lists("${AOM_UNIT_TEST_DATA_LIST_FILE}" test_files
+                       test_file_checksums)
   list(LENGTH test_files num_test_files)
   list(LENGTH test_file_checksums num_test_file_checksums)
 
   math(EXPR max_file_index "${num_test_files} - 1")
-  foreach (test_index RANGE ${max_file_index})
+  foreach(test_index RANGE ${max_file_index})
     list(GET test_files ${test_index} test_file)
     list(GET test_file_checksums ${test_index} test_file_checksum)
     add_custom_target(testdata_${test_index}
-                      COMMAND ${CMAKE_COMMAND}
-                        -DAOM_CONFIG_DIR="${AOM_CONFIG_DIR}"
-                        -DAOM_ROOT="${AOM_ROOT}"
-                        -DAOM_TEST_FILE="${test_file}"
-                        -DAOM_TEST_CHECKSUM=${test_file_checksum}
-                        -P "${AOM_ROOT}/test/test_data_download_worker.cmake")
+                      COMMAND
+                        ${CMAKE_COMMAND} -DAOM_CONFIG_DIR="${AOM_CONFIG_DIR}"
+                        -DAOM_ROOT="${AOM_ROOT}" -DAOM_TEST_FILE="${test_file}"
+                        -DAOM_TEST_CHECKSUM=${test_file_checksum} -P
+                        "${AOM_ROOT}/test/test_data_download_worker.cmake")
     set(testdata_targets ${testdata_targets} testdata_${test_index})
-  endforeach ()
+  endforeach()
 
   # Create a custom build target for running each test data download target.
   add_custom_target(testdata)
   add_dependencies(testdata ${testdata_targets})
 
-   if (NOT ENABLE_IDE_TEST_HOSTING)
-    if (MSVC OR XCODE)
-      # Skip creation of test run targets when generating for Visual Studio and
-      # Xcode unless the user explicitly requests IDE test hosting. This is done
-      # to make build cycles in the IDE tolerable when the IDE command for build
-      # project is used to build AOM. Default behavior in
-      # IDEs is to build all targets, and the test run takes hours.
-      return ()
-    endif ()
-  endif ()
+  if(NOT ENABLE_IDE_TEST_HOSTING)
+    if(MSVC OR XCODE) # Skip creation of test run targets when generating for
+                      # Visual Studio and  Xcode unless the user explicitly
+                      # requests IDE test hosting. This is done  to make build
+                      # cycles in the IDE tolerable when the IDE command for
+                      # build  project is used to build AOM. Default behavior in
+                      # IDEs is to build all targets, and the test run takes
+                      # hours.
+      return()
+    endif()
+  endif()
 
   # Pick a reasonable number of targets (this controls parallelization).
-  ProcessorCount(num_test_targets)
-  if (num_test_targets EQUAL 0)
-    # Just default to 10 targets when there's no processor count available.
+  processorcount(num_test_targets)
+  if(num_test_targets EQUAL 0) # Just default to 10 targets when there's no
+                               # processor count available.
     set(num_test_targets 10)
-  endif ()
+  endif()
 
   math(EXPR max_shard_index "${num_test_targets} - 1")
-  foreach (shard_index RANGE ${max_shard_index})
+  foreach(shard_index RANGE ${max_shard_index})
     set(test_name "test_${shard_index}")
     add_custom_target(${test_name}
                       COMMAND ${CMAKE_COMMAND}
-                      -DGTEST_SHARD_INDEX=${shard_index}
-                      -DGTEST_TOTAL_SHARDS=${num_test_targets}
-                      -DTEST_LIBAOM=$<TARGET_FILE:test_libaom>
-                      -P "${AOM_ROOT}/test/test_runner.cmake"
+                              -DGTEST_SHARD_INDEX=${shard_index}
+                              -DGTEST_TOTAL_SHARDS=${num_test_targets}
+                              -DTEST_LIBAOM=$<TARGET_FILE:test_libaom> -P
+                              "${AOM_ROOT}/test/test_runner.cmake"
                       DEPENDS testdata test_libaom)
     set(test_targets ${test_targets} ${test_name})
-  endforeach ()
+  endforeach()
   add_custom_target(runtests)
   add_dependencies(runtests ${test_targets})
 
@@ -483,7 +438,10 @@
 
   # Collect all variables containing libaom test source files.
   get_cmake_property(all_cmake_vars VARIABLES)
-  foreach (var ${all_cmake_vars})
+  foreach(var ${all_cmake_vars})
+
+    # https://github.com/cheshirekow/cmake_format/issues/34
+# cmake-format: off
     if (("${var}" MATCHES "_TEST_" AND NOT
          "${var}" MATCHES
          "_DATA_\|_CMAKE_\|INTRA_PRED\|_COMPILED\|_HOSTING\|_PERF_\|CODER_")
@@ -494,21 +452,22 @@
         OR (CONFIG_AV1_ENCODER AND "${var}" MATCHES "_TEST_ENCODER_")
         OR (CONFIG_AV1_DECODER AND  "${var}" MATCHES "_TEST_DECODER_"))
       list(APPEND aom_test_source_vars ${var})
-    endif ()
-  endforeach ()
+    endif()
+    # cmake-format:on
+  endforeach()
 
   # Libaom_test_srcs.txt generation.
   set(libaom_test_srcs_txt_file "${AOM_CONFIG_DIR}/libaom_test_srcs.txt")
   file(WRITE "${libaom_test_srcs_txt_file}"
-       "# This file is generated. DO NOT EDIT.\n")
+             "# This file is generated. DO NOT EDIT.\n")
 
   # Static source file list first.
-  foreach (aom_test_source_var ${aom_test_source_vars})
-    foreach (file ${${aom_test_source_var}})
-      if (NOT "${file}" MATCHES "${AOM_CONFIG_DIR}")
+  foreach(aom_test_source_var ${aom_test_source_vars})
+    foreach(file ${${aom_test_source_var}})
+      if(NOT "${file}" MATCHES "${AOM_CONFIG_DIR}")
         string(REPLACE "${AOM_ROOT}/" "" file "${file}")
         file(APPEND "${libaom_test_srcs_txt_file}" "${file}\n")
-      endif ()
-    endforeach ()
-  endforeach ()
-endfunction ()
+      endif()
+    endforeach()
+  endforeach()
+endfunction()
diff --git a/test/test_data_download_worker.cmake b/test/test_data_download_worker.cmake
index 87f5719..02dfe28 100644
--- a/test/test_data_download_worker.cmake
+++ b/test/test_data_download_worker.cmake
@@ -1,42 +1,47 @@
-##
-## Copyright (c) 2017, Alliance for Open Media. All rights reserved
-##
-## This source code is subject to the terms of the BSD 2 Clause License and
-## the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License
-## was not distributed with this source code in the LICENSE file, you can
-## obtain it at www.aomedia.org/license/software. If the Alliance for Open
-## Media Patent License 1.0 was not distributed with this source code in the
-## PATENTS file, you can obtain it at www.aomedia.org/license/patent.
-##
+#
+# Copyright (c) 2017, Alliance for Open Media. All rights reserved
+#
+# This source code is subject to the terms of the BSD 2 Clause License and the
+# Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License was
+# not distributed with this source code in the LICENSE file, you can obtain it
+# at www.aomedia.org/license/software. If the Alliance for Open Media Patent
+# License 1.0 was not distributed with this source code in the PATENTS file, you
+# can obtain it at www.aomedia.org/license/patent.
+#
 include("${AOM_ROOT}/test/test_data_util.cmake")
 
+# https://github.com/cheshirekow/cmake_format/issues/34
+# cmake-format: off
 if (NOT AOM_ROOT OR NOT AOM_CONFIG_DIR OR NOT AOM_TEST_FILE
     OR NOT AOM_TEST_CHECKSUM)
   message(FATAL_ERROR
           "AOM_ROOT, AOM_CONFIG_DIR, AOM_TEST_FILE and AOM_TEST_CHECKSUM must be
           defined.")
 endif ()
+# cmake-format: on
+
 
 set(AOM_TEST_DATA_URL "http://storage.googleapis.com/aom-test-data")
 
-if (NOT AOM_TEST_DATA_PATH)
+if(NOT AOM_TEST_DATA_PATH)
   set(AOM_TEST_DATA_PATH "$ENV{LIBAOM_TEST_DATA_PATH}")
-endif ()
+endif()
 
-if ("${AOM_TEST_DATA_PATH}" STREQUAL "")
-  message(WARNING "Writing test data to ${AOM_CONFIG_DIR}, set "
-          "$LIBAOM_TEST_DATA_PATH in your environment to avoid this warning.")
+if("${AOM_TEST_DATA_PATH}" STREQUAL "")
+  message(WARNING
+            "Writing test data to ${AOM_CONFIG_DIR}, set "
+            "$LIBAOM_TEST_DATA_PATH in your environment to avoid this warning.")
   set(AOM_TEST_DATA_PATH "${AOM_CONFIG_DIR}")
-endif ()
+endif()
 
-if (NOT EXISTS "${AOM_TEST_DATA_PATH}")
+if(NOT EXISTS "${AOM_TEST_DATA_PATH}")
   file(MAKE_DIRECTORY "${AOM_TEST_DATA_PATH}")
-endif ()
+endif()
 
 expand_test_file_paths("AOM_TEST_FILE" "${AOM_TEST_DATA_PATH}" "filepath")
 expand_test_file_paths("AOM_TEST_FILE" "${AOM_TEST_DATA_URL}" "url")
 
 check_file("${filepath}" "${AOM_TEST_CHECKSUM}" "needs_download")
-if (needs_download)
+if(needs_download)
   download_test_file("${url}" "${AOM_TEST_CHECKSUM}" "${filepath}")
-endif ()
+endif()
diff --git a/test/test_data_util.cmake b/test/test_data_util.cmake
index 13d96c3..a030d08 100644
--- a/test/test_data_util.cmake
+++ b/test/test_data_util.cmake
@@ -1,13 +1,13 @@
-##
-## Copyright (c) 2017, Alliance for Open Media. All rights reserved
-##
-## This source code is subject to the terms of the BSD 2 Clause License and
-## the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License
-## was not distributed with this source code in the LICENSE file, you can
-## obtain it at www.aomedia.org/license/software. If the Alliance for Open
-## Media Patent License 1.0 was not distributed with this source code in the
-## PATENTS file, you can obtain it at www.aomedia.org/license/patent.
-##
+#
+# Copyright (c) 2017, Alliance for Open Media. All rights reserved
+#
+# This source code is subject to the terms of the BSD 2 Clause License and the
+# Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License was
+# not distributed with this source code in the LICENSE file, you can obtain it
+# at www.aomedia.org/license/software. If the Alliance for Open Media Patent
+# License 1.0 was not distributed with this source code in the PATENTS file, you
+# can obtain it at www.aomedia.org/license/patent.
+#
 
 set(AOM_TEST_DATA_FILE_NAMES
     "hantro_collage_w352h288.yuv"
@@ -28,38 +28,33 @@
     "screendata.y4m"
     "niklas_640_480_30.yuv")
 
-if (CONFIG_DECODE_PERF_TESTS AND CONFIG_AV1_ENCODER)
-  set(AOM_TEST_DATA_FILE_NAMES
-      ${AOM_TEST_DATA_FILE_NAMES}
+if(CONFIG_DECODE_PERF_TESTS AND CONFIG_AV1_ENCODER)
+  set(AOM_TEST_DATA_FILE_NAMES ${AOM_TEST_DATA_FILE_NAMES}
       "niklas_1280_720_30.yuv")
-endif ()
+endif()
 
-if (CONFIG_ENCODE_PERF_TESTS AND CONFIG_AV1_ENCODER)
-  set(AOM_TEST_DATA_FILE_NAMES
-      ${AOM_TEST_DATA_FILE_NAMES}
-      "desktop_640_360_30.yuv"
-      "kirland_640_480_30.yuv"
-      "macmarcomoving_640_480_30.yuv"
-      "macmarcostationary_640_480_30.yuv"
-      "niklas_1280_720_30.yuv"
-      "tacomanarrows_640_480_30.yuv"
+if(CONFIG_ENCODE_PERF_TESTS AND CONFIG_AV1_ENCODER)
+  set(AOM_TEST_DATA_FILE_NAMES ${AOM_TEST_DATA_FILE_NAMES}
+      "desktop_640_360_30.yuv" "kirland_640_480_30.yuv"
+      "macmarcomoving_640_480_30.yuv" "macmarcostationary_640_480_30.yuv"
+      "niklas_1280_720_30.yuv" "tacomanarrows_640_480_30.yuv"
       "tacomasmallcameramovement_640_480_30.yuv"
       "thaloundeskmtg_640_480_30.yuv")
-endif ()
+endif()
 
 # Parses test/test-data.sha1 and writes captured file names and checksums to
 # $out_files and $out_checksums as lists.
-function (make_test_data_lists test_data_file out_files out_checksums)
-  if (NOT test_data_file OR NOT EXISTS "${test_data_file}")
+function(make_test_data_lists test_data_file out_files out_checksums)
+  if(NOT test_data_file OR NOT EXISTS "${test_data_file}")
     message(FATAL_ERROR "Test info file missing or empty (${test_data_file})")
-  endif ()
+  endif()
 
   # Read $test_data_file into $files_and_checksums. $files_and_checksums becomes
   # a list with an entry for each line from $test_data_file.
   file(STRINGS "${test_data_file}" files_and_checksums)
 
   # Iterate over the list of lines and split it into $checksums and $filenames.
-  foreach (line ${files_and_checksums})
+  foreach(line ${files_and_checksums})
     string(FIND "${line}" " *" delim_pos)
 
     math(EXPR filename_pos "${delim_pos} + 2")
@@ -67,55 +62,55 @@
     string(SUBSTRING "${line}" ${filename_pos} -1 filename)
 
     list(FIND AOM_TEST_DATA_FILE_NAMES ${filename} list_index)
-    if (NOT ${list_index} EQUAL -1)
+    if(NOT ${list_index} EQUAL -1)
+
       # Include the name and checksum in output only when the file is needed.
       set(checksums ${checksums} ${checksum})
       set(filenames ${filenames} ${filename})
-    endif ()
-  endforeach ()
+    endif()
+  endforeach()
 
   list(LENGTH filenames num_files)
   list(LENGTH checksums num_checksums)
-  if (NOT checksums OR NOT filenames OR NOT num_files EQUAL num_checksums)
+  if(NOT checksums OR NOT filenames OR NOT num_files EQUAL num_checksums)
     message(FATAL_ERROR "Parsing of ${test_data_file} failed.")
-  endif ()
+  endif()
 
   set(${out_checksums} ${checksums} PARENT_SCOPE)
   set(${out_files} ${filenames} PARENT_SCOPE)
-endfunction ()
+endfunction()
 
 # Appends each file name in $test_files to $test_dir and adds the result path to
 # $out_path_list.
-function (expand_test_file_paths test_files test_dir out_path_list)
-  foreach (filename ${${test_files}})
+function(expand_test_file_paths test_files test_dir out_path_list)
+  foreach(filename ${${test_files}})
     set(path_list ${path_list} "${test_dir}/${filename}")
-  endforeach ()
+  endforeach()
   set(${out_path_list} ${path_list} PARENT_SCOPE)
-endfunction ()
+endfunction()
 
-function (check_file local_path expected_checksum out_needs_update)
-  if (EXISTS "${local_path}")
+function(check_file local_path expected_checksum out_needs_update)
+  if(EXISTS "${local_path}")
     file(SHA1 "${local_path}" file_checksum)
-  else ()
+  else()
     set(${out_needs_update} 1 PARENT_SCOPE)
-    return ()
-  endif ()
+    return()
+  endif()
 
-  if ("${file_checksum}" STREQUAL "${expected_checksum}")
+  if("${file_checksum}" STREQUAL "${expected_checksum}")
     unset(${out_needs_update} PARENT_SCOPE)
-  else ()
+  else()
     set(${out_needs_update} 1 PARENT_SCOPE)
-    return ()
-  endif ()
+    return()
+  endif()
   message("${local_path} up to date.")
-endfunction ()
+endfunction()
 
 # Downloads data from $file_url, confirms that $file_checksum matches, and
 # writes it to $local_path.
-function (download_test_file file_url file_checksum local_path)
+function(download_test_file file_url file_checksum local_path)
   message("Downloading ${file_url} ...")
-  file(DOWNLOAD "${file_url}" "${local_path}"
-       SHOW_PROGRESS
+  file(DOWNLOAD "${file_url}" "${local_path}" SHOW_PROGRESS
        EXPECTED_HASH SHA1=${file_checksum})
   message("Download of ${file_url} complete.")
-endfunction ()
+endfunction()
diff --git a/test/test_runner.cmake b/test/test_runner.cmake
index 0ecff9b..d3747b1 100644
--- a/test/test_runner.cmake
+++ b/test/test_runner.cmake
@@ -1,19 +1,21 @@
-##
-## Copyright (c) 2017, Alliance for Open Media. All rights reserved
-##
-## This source code is subject to the terms of the BSD 2 Clause License and
-## the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License
-## was not distributed with this source code in the LICENSE file, you can
-## obtain it at www.aomedia.org/license/software. If the Alliance for Open
-## Media Patent License 1.0 was not distributed with this source code in the
-## PATENTS file, you can obtain it at www.aomedia.org/license/patent.
-##
-if (NOT GTEST_TOTAL_SHARDS OR "${GTEST_SHARD_INDEX}" STREQUAL ""
-    OR NOT TEST_LIBAOM)
-  message(FATAL_ERROR
-          "The variables GTEST_SHARD_INDEX, GTEST_TOTAL_SHARDS and TEST_LIBAOM
-          must be defined.")
-endif ()
+#
+# Copyright (c) 2017, Alliance for Open Media. All rights reserved
+#
+# This source code is subject to the terms of the BSD 2 Clause License and the
+# Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License was
+# not distributed with this source code in the LICENSE file, you can obtain it
+# at www.aomedia.org/license/software. If the Alliance for Open Media Patent
+# License 1.0 was not distributed with this source code in the PATENTS file, you
+# can obtain it at www.aomedia.org/license/patent.
+#
+if(NOT GTEST_TOTAL_SHARDS OR "${GTEST_SHARD_INDEX}" STREQUAL "" OR NOT
+   TEST_LIBAOM)
+  message(
+    FATAL_ERROR
+      "The variables GTEST_SHARD_INDEX, GTEST_TOTAL_SHARDS and TEST_LIBAOM
+          must be defined."
+    )
+endif()
 
 set($ENV{GTEST_SHARD_INDEX} ${GTEST_SHARD_INDEX})
 set($ENV{GTEST_TOTAL_SHARDS} ${GTEST_TOTAL_SHARDS})
@@ -21,6 +23,6 @@
 set(test_message "Test shard ${GTEST_SHARD_INDEX}/${GTEST_TOTAL_SHARDS} result")
 message("${test_message}: ${test_result}")
 
-if (NOT "${test_result}" STREQUAL "0")
+if(NOT "${test_result}" STREQUAL "0")
   message(FATAL_ERROR "${test_message}: FAILED, non-zero exit code.")
-endif ()
+endif()
