diff --git a/.appveyor.yml b/.appveyor.yml
deleted file mode 100644
index 452f116..0000000
--- a/.appveyor.yml
+++ /dev/null
@@ -1,20 +0,0 @@
-clone_depth: 50
-
-configuration:
- - Debug
-
-image:
- - Visual Studio 2017
-
-install:
- - pip install jinja2
- - git submodule update --init --recursive
-
-build_script:
- - mkdir build
- - cd build
- - cmake -DDAWN_USE_WERROR=1 -DDAWN_ENABLE_VULKAN=1 ..
- - cmake --build . -- /verbosity:minimal
-
- # TODO(cwallez@chromium.org) test on more than Debug.
- - Debug\dawn_unittests.exe
diff --git a/.gitignore b/.gitignore
index 529d167..5ab63d2 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,29 +1,27 @@
-# Autogenerated files due to apparent VS2017 bug:
-#   https://gitlab.kitware.com/cmake/cmake/issues/16458
-*.dir
-x86
-x64
-
-# Directories added by the standalone GN build
+# Directories added by gclient sync and the GN build
 .gclient
 .gclient_entries
 build
 buildtools
 testing
+third_party/SPIRV-Tools/
 third_party/binutils/
+third_party/clang-format/
+third_party/glfw/
+third_party/glm/
+third_party/glslang/
+third_party/googletest/
 third_party/jinja2/
 third_party/llvm-build
 third_party/markupsafe/
+third_party/shaderc/
+third_party/spirv-cross/
+third_party/spirv-headers/
+third_party/stb/
 tools
 out
 
-# Modified from https://www.gitignore.io/api/vim,macos,linux,emacs,cmake,windows,sublimetext,visualstudio,visualstudiocode
-
-### CMake ###
-# These files are generated if an in-source build is attempted, even though
-# it's disallowed.
-CMakeCache.txt
-CMakeFiles
+# Modified from https://www.gitignore.io/api/vim,macos,linux,emacs,windows,sublimetext,visualstudio,visualstudiocode
 
 ### Emacs ###
 *~
diff --git a/.gitmodules b/.gitmodules
deleted file mode 100644
index 55f2c0c..0000000
--- a/.gitmodules
+++ /dev/null
@@ -1,27 +0,0 @@
-[submodule "external/glfw"]
-	path = third_party/glfw
-	url = https://github.com/glfw/glfw.git
-[submodule "external/googletest"]
-	path = third_party/googletest
-	url = https://github.com/google/googletest.git
-[submodule "external/glslang"]
-	path = third_party/glslang
-	url = https://github.com/google/glslang.git
-[submodule "external/shaderc"]
-	path = third_party/shaderc
-	url = https://github.com/google/shaderc.git
-[submodule "external/spirv-tools"]
-	path = third_party/spirv-tools
-	url = https://github.com/KhronosGroup/SPIRV-Tools.git
-[submodule "external/spirv-headers"]
-	path = third_party/spirv-headers
-	url = https://github.com/KhronosGroup/SPIRV-Headers.git
-[submodule "external/spirv-cross"]
-	path = third_party/spirv-cross
-	url = https://github.com/KhronosGroup/SPIRV-Cross.git
-[submodule "external/stb"]
-	path = third_party/stb
-	url = https://github.com/nothings/stb.git
-[submodule "external/glm"]
-	path = third_party/glm
-	url = https://github.com/g-truc/glm.git
diff --git a/.travis.yml b/.travis.yml
deleted file mode 100644
index 754d5f5..0000000
--- a/.travis.yml
+++ /dev/null
@@ -1,75 +0,0 @@
-os:
- - linux
- - osx
-
-# If linux, use precise
-dist: trusty
-sudo: false
-
-language:
- - cpp
-
-python:
- - "2.7"
-
-env:
- - BUILD_TYPE=Debug
- - BUILD_TYPE=Release
-
-compiler:
- - clang
-
-cache:
- - pip
-
-addons:
- # Everything under apt is only used on linux
- apt:
-  sources:
-   # PPA for clang 6.0
-   - llvm-toolchain-trusty-6.0
-   # PPA for clang-format 8
-   - llvm-toolchain-trusty
-   # PPA for a more recen libstdc++
-   - ubuntu-toolchain-r-test
-  packages:
-   # Get recent compilers
-   - clang-6.0
-   # Pull a recent version of libstdc++
-   - libstdc++-6-dev
-   # Ninja builds are faster
-   - ninja-build
-   # Required for the code generator, unfortunately this is jinja2 2.6 which lacks some of the options we use
-   - python-jinja2
-   # Required dependency for GLFW on Linux
-   - xorg-dev
-   # Format using the latest and greatest
-   - clang-format-8
-
-before_install:
- - if [ "$TRAVIS_OS_NAME" == "osx" ]; then brew update; fi
-
-install:
- # Install dependencies required on OSX
- - if [ "$TRAVIS_OS_NAME" == "osx" ]; then brew install ninja; fi
- - if [ "$TRAVIS_OS_NAME" == "osx" ]; then pip2 install --user jinja2; fi
-
-script:
- # Use the more recent compilers we just installed
- - if [ "$TRAVIS_OS_NAME" == "linux" ] && [ "$CXX" == "clang++" ]; then export CXX="clang++-6.0" CC="clang-6.0"; fi
-
- # Build
- - mkdir -p build
- - cd build
- - cmake --version
- - cmake -G "Ninja" -DCMAKE_BUILD_TYPE=$BUILD_TYPE -DDAWN_USE_WERROR=1 ..
- - cmake --build . -- -j 1
-
- # Test
- - ./dawn_unittests
-
- # Get out of the build dir
- - cd ..
-
- # Lint
- - if [ "$TRAVIS_OS_NAME" == "linux" ]; then ./scripts/travis_lint_format.sh clang-format-8; fi
diff --git a/CMakeLists.txt b/CMakeLists.txt
deleted file mode 100644
index 513ce07..0000000
--- a/CMakeLists.txt
+++ /dev/null
@@ -1,252 +0,0 @@
-# Copyright 2017 The Dawn Authors
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-cmake_minimum_required(VERSION 2.8)
-project(dawn C CXX)
-
-# List TARGET_OBJECTS in SOURCES target property.
-cmake_policy(SET CMP0051 NEW)
-
-if(CMAKE_SOURCE_DIR STREQUAL CMAKE_BINARY_DIR)
-    message(FATAL_ERROR
-        "In-source builds are unsupported. Use another directory, like build/, "
-        "as your CMake build directory.\n"
-        "Note: CMakeFiles/ and CMakeCache.txt may have been generated in the "
-        "source directory. These may be removed.")
-endif()
-
-if(NOT CMAKE_BUILD_TYPE)
-    set(CMAKE_BUILD_TYPE "Debug" CACHE STRING
-        "Build type (Debug, Release, RelWithDebInfo, MinSizeRel)" FORCE)
-endif()
-
-################################################################################
-# Configuration options
-################################################################################
-
-option(DAWN_USE_WERROR "Treat warnings as error (useful for CI)" 0)
-
-# Default values for the backend-enabling options
-set(ENABLE_D3D12 OFF)
-set(ENABLE_METAL OFF)
-set(ENABLE_OPENGL OFF)
-set(ENABLE_VULKAN OFF)
-if (WIN32)
-    set(ENABLE_D3D12 ON)
-    set(ENABLE_OPENGL ON)
-    set(ENABLE_VULKAN ON)
-elseif(APPLE)
-    set(ENABLE_METAL ON)
-elseif(UNIX)
-    set(ENABLE_OPENGL ON)
-    set(ENABLE_VULKAN ON)
-endif()
-
-option(DAWN_ENABLE_D3D12 "Enable compilation of the D3D12 backend" ${ENABLE_D3D12})
-option(DAWN_ENABLE_METAL "Enable compilation of the Metal backend" ${ENABLE_METAL})
-option(DAWN_ENABLE_NULL "Enable compilation of the Null backend" ON)
-option(DAWN_ENABLE_OPENGL "Enable compilation of the OpenGL backend" ${ENABLE_OPENGL})
-option(DAWN_ENABLE_VULKAN "Enable compilation of the Vulkan backend" ${ENABLE_VULKAN})
-option(DAWN_ALWAYS_ASSERT "Enable assertions on all build types" OFF)
-option(DAWN_USE_CPP17 "Use some optional C++17 features for compile-time checks" OFF)
-
-################################################################################
-# Precompute compile flags and defines, functions to set them
-################################################################################
-
-set(DAWN_FLAGS "")
-set(DAWN_DEFS "")
-set(DAWN_INTERNAL_FLAGS "")
-set(DAWN_INTERNAL_DEFS "")
-set(DAWN_GENERATED_FLAGS "")
-
-set(DAWN_ENABLE_ASSERTS $<OR:$<CONFIG:Debug>,$<BOOL:${DAWN_ALWAYS_ASSERT}>>)
-
-list(APPEND DAWN_DEFS $<${DAWN_ENABLE_ASSERTS}:DAWN_ENABLE_ASSERTS>)
-
-if (DAWN_USE_CPP17)
-    list(APPEND DAWN_INTERNAL_DEFS "DAWN_CPP_VERSION=17")
-else()
-    list(APPEND DAWN_INTERNAL_DEFS "DAWN_CPP_VERSION=14")
-endif()
-
-if (DAWN_ENABLE_D3D12)
-    list(APPEND DAWN_INTERNAL_DEFS "DAWN_ENABLE_BACKEND_D3D12")
-endif()
-if (DAWN_ENABLE_METAL)
-    list(APPEND DAWN_INTERNAL_DEFS "DAWN_ENABLE_BACKEND_METAL")
-endif()
-if (DAWN_ENABLE_NULL)
-    list(APPEND DAWN_INTERNAL_DEFS "DAWN_ENABLE_BACKEND_NULL")
-endif()
-if (DAWN_ENABLE_OPENGL)
-    list(APPEND DAWN_INTERNAL_DEFS "DAWN_ENABLE_BACKEND_OPENGL")
-endif()
-if (DAWN_ENABLE_VULKAN)
-    list(APPEND DAWN_INTERNAL_DEFS "DAWN_ENABLE_BACKEND_VULKAN")
-endif()
-
-if (WIN32)
-    # Define NOMINMAX to prevent conflicts between std::min/max and the min/max macros in WinDef.h
-    list(APPEND DAWN_DEFS "NOMINMAX")
-    # Avoid Windows.h including a lot of headers
-    list(APPEND DAWN_DEFS "WIN32_LEAN_AND_MEAN")
-    # Remove compile error where the mock Dawn creates too many sections for the old obj format.
-    list(APPEND DAWN_FLAGS "/bigobj")
-endif()
-
-if (MSVC)
-    list(APPEND DAWN_FLAGS "/std:c++14")
-    list(APPEND DAWN_FLAGS "/EHsc")
-    list(APPEND DAWN_FLAGS "/MP")
-    list(APPEND DAWN_INTERNAL_FLAGS "/W4")
-    # Allow declarations hiding members as it is used all over Dawn
-    list(APPEND DAWN_INTERNAL_FLAGS "/wd4458")
-    list(APPEND DAWN_INTERNAL_FLAGS "/wd4996") # Allow deprecated functions like strncpy
-
-    list(APPEND DAWN_GENERATED_FLAGS "/wd4702") # Allow unreachable code
-    list(APPEND DAWN_GENERATED_FLAGS "/wd4189") # Allow unused variable
-
-    if(DAWN_USE_WERROR)
-        list(APPEND DAWN_INTERNAL_FLAGS "/WX")
-    endif()
-else()
-    # Activate C++14 only on C++ files, not C files.
-    list(APPEND DAWN_FLAGS "$<$<COMPILE_LANGUAGE:CXX>:-std=c++14>")
-    # enable -Wold-style-cast on C++
-    list(APPEND DAWN_FLAGS "$<$<COMPILE_LANGUAGE:CXX>:-Wold-style-cast>")
-
-    list(APPEND DAWN_FLAGS "-fvisibility=hidden" "$<$<COMPILE_LANGUAGE:CXX>:-fno-rtti>" "-fno-exceptions")
-    list(APPEND DAWN_FLAGS "-fPIC")
-
-    list(APPEND DAWN_INTERNAL_FLAGS "-Wall" "-Wextra")
-    list(APPEND DAWN_INTERNAL_FLAGS "-pedantic")
-    list(APPEND DAWN_GENERATED_FLAGS "-Wno-unused-variable" "-Wno-unused-function")
-
-    if("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang")
-        # don't break the build on older clang versions
-        list(APPEND DAWN_INTERNAL_FLAGS "-Wno-error=unknown-warning-option")
-        # GCC's conversion warnings are less useful than clang's
-        list(APPEND DAWN_INTERNAL_FLAGS "-Wconversion" "-Wno-sign-conversion")
-        # disable a clang-only -pedantic warning
-        list(APPEND DAWN_INTERNAL_FLAGS "-Wno-gnu-zero-variadic-macro-arguments")
-        # additional potentially useful warnings (feel free to remove if they prove un-useful)
-        list(APPEND DAWN_INTERNAL_FLAGS "-Wextra-semi")
-        list(APPEND DAWN_INTERNAL_FLAGS "-Wstrict-aliasing")
-        list(APPEND DAWN_INTERNAL_FLAGS "-Wunreachable-code")
-        list(APPEND DAWN_GENERATED_FLAGS "-Wno-unreachable-code")
-        # Probably okay to enable if we establish a field naming convention:
-        #list(APPEND DAWN_INTERNAL_FLAGS "-Wshadow")
-    endif()
-    if(DAWN_USE_WERROR)
-        list(APPEND DAWN_INTERNAL_FLAGS "-Werror")
-    endif()
-endif()
-
-function(DawnExternalTarget folder target)
-    set_property(TARGET ${target} APPEND PROPERTY COMPILE_OPTIONS ${DAWN_FLAGS})
-    set_property(TARGET ${target} APPEND PROPERTY COMPILE_DEFINITIONS ${DAWN_DEFS})
-    set_property(TARGET ${target} PROPERTY FOLDER "dawn/${folder}")
-endfunction()
-
-function(DawnInternalTarget folder target)
-    DawnExternalTarget("${folder}" ${target})
-    set_property(TARGET ${target} APPEND PROPERTY COMPILE_OPTIONS ${DAWN_INTERNAL_FLAGS})
-    set_property(TARGET ${target} APPEND PROPERTY COMPILE_DEFINITIONS ${DAWN_INTERNAL_DEFS})
-
-    # Common include directories shared by all internal targets
-    target_include_directories(${target} PRIVATE ${SRC_DIR} ${GENERATED_DIR} ${INCLUDE_DIR})
-
-    # All internal targets require the headers to have been generated
-    add_dependencies(${target} dawn_headers)
-
-    # Group the target sources by folder to have folders show in Visual Studio
-    if (MSVC)
-        get_target_property(targetSources ${target} SOURCES)
-        foreach(sourceFile IN ITEMS ${targetSources})
-            if (IS_ABSOLUTE "${sourceFile}")
-                file(RELATIVE_PATH sourceFile "${CMAKE_CURRENT_SOURCE_DIR}" "${sourceFile}")
-            endif()
-            get_filename_component(sourceDir "${sourceFile}" PATH)
-            string(REPLACE "/" "\\" sourceDir "${sourceDir}")
-            source_group("${sourceDir}" FILES "${sourceFile}")
-        endforeach()
-    endif()
-endfunction()
-
-# Enable the creation of folders for Visual Studio projects
-set_property(GLOBAL PROPERTY USE_FOLDERS ON)
-
-# Output shared libs and executables directly in the build directory
-set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR})
-set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR})
-
-################################################################################
-# Generate the C and C++ Dawn APIs
-################################################################################
-
-set(INCLUDE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/src/include)
-set(SRC_DIR ${CMAKE_CURRENT_SOURCE_DIR}/src)
-
-add_subdirectory(generator)
-
-# Dawn header generation is in its own target so that it can be set as a build dependency for all
-# internal targets
-Generate(
-    LIB_NAME dawn_headers
-    LIB_TYPE OBJECT
-    FOLDER ""
-    PRINT_NAME "Dawn headers"
-    COMMAND_LINE_ARGS
-        ${GENERATOR_COMMON_ARGS}
-        -T dawn_headers
-)
-# Older versions of CMake aren't able to know which linker to use without this and fail.
-set_property(TARGET dawn_headers PROPERTY LINKER_LANGUAGE "CXX")
-
-# libdawn.so/dll/dylib which contains the static proctable C interface and its C++ wrapper
-Generate(
-    LIB_NAME libdawn_autogen
-    LIB_TYPE OBJECT
-    FOLDER "libdawn"
-    PRINT_NAME "libdawn"
-    COMMAND_LINE_ARGS
-        ${GENERATOR_COMMON_ARGS}
-        -T libdawn
-)
-target_compile_definitions(libdawn_autogen PRIVATE DAWN_IMPLEMENTATION)
-
-add_library(libdawn SHARED
-    $<TARGET_OBJECTS:libdawn_autogen>
-    ${INCLUDE_DIR}/dawn/dawn_export.h
-    ${INCLUDE_DIR}/dawn/dawn_wsi.h
-    ${INCLUDE_DIR}/dawn/EnumClassBitmasks.h
-)
-set_property(TARGET libdawn PROPERTY OUTPUT_NAME "dawn")
-target_include_directories(libdawn PUBLIC ${GENERATED_DIR} ${INCLUDE_DIR})
-DawnInternalTarget("libdawn" libdawn)
-
-################################################################################
-# Call to other CMakeLists.txt
-################################################################################
-
-add_subdirectory(third_party)
-
-add_subdirectory(src/common)
-add_subdirectory(src/dawn_native)
-add_subdirectory(src/dawn_wire)
-add_subdirectory(src/utils)
-add_subdirectory(src/tests)
-
-add_subdirectory(examples)
diff --git a/examples/CMakeLists.txt b/examples/CMakeLists.txt
deleted file mode 100644
index ca9bf23..0000000
--- a/examples/CMakeLists.txt
+++ /dev/null
@@ -1,54 +0,0 @@
-# Copyright 2017 The Dawn Authors
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-add_library(sample_utils
-    SampleUtils.cpp
-    SampleUtils.h
-)
-target_link_libraries(sample_utils utils dawn_wire)
-DawnInternalTarget("examples" sample_utils)
-
-function(add_dawn_sample target sources)
-    add_executable(${target} ${sources})
-    target_link_libraries(${target} sample_utils)
-    target_include_directories(${target} SYSTEM PRIVATE ${GLM_INCLUDE_DIR})
-    target_include_directories(${target} PRIVATE ${CMAKE_CURRENT_SOURCE_DIR})
-    target_include_directories(${target} PRIVATE ${GLM_INCLUDE_DIR} ${TINYGLTFLOADER_INCLUDE_DIR})
-    DawnInternalTarget("examples" ${target})
-
-    # Suppress some warnings in our sample dependencies
-    if (MSVC)
-        # nonstandard extension used: nameless struct/union -- for GLM
-        set_property(TARGET ${target} APPEND PROPERTY COMPILE_OPTIONS "/wd4201")
-        # declaration hides global declaration -- for GLM
-        set_property(TARGET ${target} APPEND PROPERTY COMPILE_OPTIONS "/wd4459")
-        # = conversion possible loss of data -- for STB image
-        set_property(TARGET ${target} APPEND PROPERTY COMPILE_OPTIONS "/wd4244")
-        # declaration hides previous declaration -- for STB image
-        set_property(TARGET ${target} APPEND PROPERTY COMPILE_OPTIONS "/wd4456")
-        # declaration hides previous declaration -- for picojson
-        set_property(TARGET ${target} APPEND PROPERTY COMPILE_OPTIONS "/wd4706")
-    else()
-        # re-enable old style casts -- for GLM
-        set_property(TARGET ${target} APPEND PROPERTY COMPILE_OPTIONS "-Wno-old-style-cast")
-    endif()
-endfunction()
-
-add_dawn_sample(CHelloTriangle CHelloTriangle.cpp)
-add_dawn_sample(CppHelloTriangle CppHelloTriangle.cpp)
-add_dawn_sample(ComputeBoids ComputeBoids.cpp)
-add_dawn_sample(Animometer Animometer.cpp)
-add_dawn_sample(CubeReflection CubeReflection.cpp)
-
-add_dawn_sample(glTFViewer glTFViewer/glTFViewer.cpp)
diff --git a/generator/CMakeLists.txt b/generator/CMakeLists.txt
deleted file mode 100644
index 5c1867c..0000000
--- a/generator/CMakeLists.txt
+++ /dev/null
@@ -1,77 +0,0 @@
-# Copyright 2017 The Dawn Authors
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-find_package(PythonInterp REQUIRED)
-include(CMakeParseArguments)
-
-# Check for Jinja2
-message(STATUS "${PYTHON_EXECUTABLE}")
-execute_process(
-    COMMAND ${PYTHON_EXECUTABLE} -c "import jinja2"
-    RESULT_VARIABLE RET
-)
-if (NOT RET EQUAL 0)
-    message(FATAL_ERROR "Missing dependencies for code generation, please ensure you have python-jinja2 installed.")
-endif()
-
-function(Generate)
-    set(oneValueArgs LIB_NAME LIB_TYPE PRINT_NAME EXECUTABLE FOLDER)
-    set(multiValueArgs COMMAND_LINE_ARGS EXTRA_DEPS EXTRA_SOURCES)
-    cmake_parse_arguments(G "" "${oneValueArgs}" "${multiValueArgs}" ${ARGN})
-
-    execute_process(
-        COMMAND ${G_COMMAND_LINE_ARGS} --print-dependencies
-        OUTPUT_VARIABLE DEPENDENCIES
-        RESULT_VARIABLE RET
-    )
-    if (NOT RET EQUAL 0)
-        message(STATUS ${RET})
-        message(FATAL_ERROR "Failed to get the dependencies for ${G_PRINT_NAME}.")
-    endif()
-
-    execute_process(
-        COMMAND ${G_COMMAND_LINE_ARGS} --print-outputs
-        OUTPUT_VARIABLE OUTPUTS
-        RESULT_VARIABLE RET
-    )
-    if (NOT RET EQUAL 0)
-        message(FATAL_ERROR "Failed to get the outputs for ${G_PRINT_NAME}.")
-    endif()
-
-    add_custom_command(
-        COMMAND ${G_COMMAND_LINE_ARGS}
-        DEPENDS ${DEPENDENCIES} ${G_EXTRA_DEPS}
-        OUTPUT ${OUTPUTS}
-        COMMENT "Generating files for ${G_PRINT_NAME}."
-    )
-
-    add_library(${G_LIB_NAME} ${G_LIB_TYPE}
-        ${G_EXTRA_SOURCES}
-        ${OUTPUTS}
-    )
-
-    DawnInternalTarget("${G_FOLDER}" ${G_LIB_NAME})
-    set_property(TARGET ${G_LIB_NAME} APPEND PROPERTY COMPILE_OPTIONS ${DAWN_GENERATED_FLAGS})
-endfunction()
-
-set(GENERATED_DIR ${CMAKE_CURRENT_BINARY_DIR} PARENT_SCOPE)
-
-set(GENERATOR_COMMON_ARGS
-    ${PYTHON_EXECUTABLE}
-    ${CMAKE_CURRENT_SOURCE_DIR}/main.py
-    ${PROJECT_SOURCE_DIR}/dawn.json
-    -t ${CMAKE_CURRENT_SOURCE_DIR}/templates
-    -o ${CMAKE_CURRENT_BINARY_DIR}
-    PARENT_SCOPE
-)
diff --git a/generator/main.py b/generator/main.py
index 37edbb2..9f27d58 100644
--- a/generator/main.py
+++ b/generator/main.py
@@ -503,16 +503,6 @@
 
     return renders
 
-def output_to_files(outputs, output_dir):
-    for output in outputs:
-        output_file = output_dir + os.path.sep + output.name
-        directory = os.path.dirname(output_file)
-        if not os.path.exists(directory):
-            os.makedirs(directory)
-
-        with open(output_file, 'w') as outfile:
-            outfile.write(output.content)
-
 def output_to_json(outputs, output_json):
     json_root = {}
     for output in outputs:
@@ -535,15 +525,10 @@
     parser.add_argument('json', metavar='DAWN_JSON', nargs=1, type=str, help ='The DAWN JSON definition to use.')
     parser.add_argument('-t', '--template-dir', default='templates', type=str, help='Directory with template files.')
     parser.add_argument('-T', '--targets', required=True, type=str, help='Comma-separated subset of targets to output. Available targets: ' + ', '.join(allowed_targets))
-    # Arguments used only for the GN build
     parser.add_argument(kExtraPythonPath, default=None, type=str, help='Additional python path to set before loading Jinja2')
     parser.add_argument('--output-json-tarball', default=None, type=str, help='Name of the "JSON tarball" to create (tar is too annoying to use in python).')
     parser.add_argument('--depfile', default=None, type=str, help='Name of the Ninja depfile to create for the JSON tarball')
     parser.add_argument('--expected-outputs-file', default=None, type=str, help="File to compare outputs with and fail if it doesn't match")
-    # Arguments used only for the CMake build
-    parser.add_argument('-o', '--output-dir', default=None, type=str, help='Output directory for the generated source files.')
-    parser.add_argument('--print-dependencies', action='store_true', help='Prints a space separated list of file dependencies, used for CMake integration')
-    parser.add_argument('--print-outputs', action='store_true', help='Prints a space separated list of file outputs, used for CMake integration')
 
     args = parser.parse_args()
 
@@ -555,27 +540,8 @@
     targets = args.targets.split(',')
     renders = get_renders_for_targets(api_params, targets)
 
-    # Print outputs and dependencies for CMake
-    if args.print_dependencies:
-        dependencies = set(
-            [os.path.abspath(args.template_dir + os.path.sep + render.template) for render in renders] +
-            [os.path.abspath(args.json[0])] +
-            [os.path.realpath(__file__)]
-        )
-        dependencies = [dependency.replace('\\', '/') for dependency in dependencies]
-        sys.stdout.write(';'.join(dependencies))
-        return 0
-
-    if args.print_outputs:
-        outputs = set(
-            [os.path.abspath(args.output_dir + os.path.sep + render.output) for render in renders]
-        )
-        outputs = [output.replace('\\', '/') for output in outputs]
-        sys.stdout.write(';'.join(outputs))
-        return 0
-
     # The caller wants to assert that the outputs are what it expects.
-    # Load the file and compare with our renders. GN-only.
+    # Load the file and compare with our renders.
     if args.expected_outputs_file != None:
         with open(args.expected_outputs_file) as f:
             expected = set([line.strip() for line in f.readlines()])
@@ -590,11 +556,7 @@
 
     outputs = do_renders(renders, args.template_dir)
 
-    # CMake only: output all the files directly.
-    if args.output_dir != None:
-        output_to_files(outputs, args.output_dir)
-
-    # GN only: output the tarball and its depfile
+    # Output the tarball and its depfile
     if args.output_json_tarball != None:
         output_to_json(outputs, args.output_json_tarball)
 
diff --git a/src/common/CMakeLists.txt b/src/common/CMakeLists.txt
deleted file mode 100644
index 8423961..0000000
--- a/src/common/CMakeLists.txt
+++ /dev/null
@@ -1,37 +0,0 @@
-# Copyright 2017 The Dawn Authors
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-set(COMMON_DIR ${CMAKE_CURRENT_SOURCE_DIR})
-
-list(APPEND COMMON_SOURCES
-    ${COMMON_DIR}/Assert.cpp
-    ${COMMON_DIR}/Assert.h
-    ${COMMON_DIR}/BitSetIterator.h
-    ${COMMON_DIR}/Compiler.h
-    ${COMMON_DIR}/DynamicLib.cpp
-    ${COMMON_DIR}/DynamicLib.h
-    ${COMMON_DIR}/HashUtils.h
-    ${COMMON_DIR}/Math.cpp
-    ${COMMON_DIR}/Math.h
-    ${COMMON_DIR}/Platform.h
-    ${COMMON_DIR}/Result.h
-    ${COMMON_DIR}/Serial.h
-    ${COMMON_DIR}/SerialQueue.h
-    ${COMMON_DIR}/SwapChainUtils.h
-    ${COMMON_DIR}/vulkan_platform.h
-    ${COMMON_DIR}/windows_with_undefs.h
-)
-
-add_library(dawn_common STATIC ${COMMON_SOURCES})
-DawnInternalTarget("" dawn_common)
diff --git a/src/dawn_native/CMakeLists.txt b/src/dawn_native/CMakeLists.txt
deleted file mode 100644
index 1f06adb..0000000
--- a/src/dawn_native/CMakeLists.txt
+++ /dev/null
@@ -1,409 +0,0 @@
-# Copyright 2017 The Dawn Authors
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-set(DAWN_NATIVE_DIR ${CMAKE_CURRENT_SOURCE_DIR})
-set(D3D12_DIR ${CMAKE_CURRENT_SOURCE_DIR}/d3d12)
-set(METAL_DIR ${CMAKE_CURRENT_SOURCE_DIR}/metal)
-set(NULL_DIR ${CMAKE_CURRENT_SOURCE_DIR}/null)
-set(OPENGL_DIR ${CMAKE_CURRENT_SOURCE_DIR}/opengl)
-set(VULKAN_DIR ${CMAKE_CURRENT_SOURCE_DIR}/vulkan)
-set(DAWN_NATIVE_INCLUDE_DIR ${INCLUDE_DIR}/dawn_native)
-
-Generate(
-    LIB_NAME dawn_native_utils_autogen
-    LIB_TYPE STATIC
-    FOLDER "dawn_native"
-    PRINT_NAME "Autogenerated dawn_native utilities"
-    COMMAND_LINE_ARGS
-        ${GENERATOR_COMMON_ARGS}
-        -T dawn_native_utils
-)
-
-set(DAWN_NATIVE_SOURCES)
-set(DAWN_NATIVE_DEPS dawn_common spirv_cross dawn_native_utils_autogen SPIRV-Tools)
-set(DAWN_NATIVE_INCLUDE_DIRS ${SPIRV_CROSS_INCLUDE_DIR} ${SPIRV_TOOLS_INCLUDE_DIR})
-
-################################################################################
-# OpenGL Backend
-################################################################################
-
-if (DAWN_ENABLE_OPENGL)
-    list(APPEND DAWN_NATIVE_DEPS glad)
-    list(APPEND DAWN_NATIVE_INCLUDE_DIRS ${GLAD_INCLUDE_DIR})
-    list(APPEND DAWN_NATIVE_SOURCES
-        ${OPENGL_DIR}/BlendStateGL.cpp
-        ${OPENGL_DIR}/BlendStateGL.h
-        ${OPENGL_DIR}/BufferGL.cpp
-        ${OPENGL_DIR}/BufferGL.h
-        ${OPENGL_DIR}/CommandBufferGL.cpp
-        ${OPENGL_DIR}/CommandBufferGL.h
-        ${OPENGL_DIR}/ComputePipelineGL.cpp
-        ${OPENGL_DIR}/ComputePipelineGL.h
-        ${OPENGL_DIR}/DepthStencilStateGL.cpp
-        ${OPENGL_DIR}/DepthStencilStateGL.h
-        ${OPENGL_DIR}/DeviceGL.cpp
-        ${OPENGL_DIR}/DeviceGL.h
-        ${OPENGL_DIR}/Forward.h
-        ${OPENGL_DIR}/InputStateGL.cpp
-        ${OPENGL_DIR}/InputStateGL.h
-        ${OPENGL_DIR}/PersistentPipelineStateGL.cpp
-        ${OPENGL_DIR}/PersistentPipelineStateGL.h
-        ${OPENGL_DIR}/PipelineGL.cpp
-        ${OPENGL_DIR}/PipelineGL.h
-        ${OPENGL_DIR}/PipelineLayoutGL.cpp
-        ${OPENGL_DIR}/PipelineLayoutGL.h
-        ${OPENGL_DIR}/QueueGL.cpp
-        ${OPENGL_DIR}/QueueGL.h
-        ${OPENGL_DIR}/RenderPipelineGL.cpp
-        ${OPENGL_DIR}/RenderPipelineGL.h
-        ${OPENGL_DIR}/SamplerGL.cpp
-        ${OPENGL_DIR}/SamplerGL.h
-        ${OPENGL_DIR}/ShaderModuleGL.cpp
-        ${OPENGL_DIR}/ShaderModuleGL.h
-        ${OPENGL_DIR}/SwapChainGL.cpp
-        ${OPENGL_DIR}/SwapChainGL.h
-        ${OPENGL_DIR}/TextureGL.cpp
-        ${OPENGL_DIR}/TextureGL.h
-        ${DAWN_NATIVE_INCLUDE_DIR}/OpenGLBackend.h
-    )
-endif()
-
-################################################################################
-# Null Backend
-################################################################################
-
-if (DAWN_ENABLE_NULL)
-    list(APPEND DAWN_NATIVE_SOURCES
-        ${NULL_DIR}/NullBackend.cpp
-        ${NULL_DIR}/NullBackend.h
-        ${DAWN_NATIVE_INCLUDE_DIR}/NullBackend.h
-    )
-endif()
-
-################################################################################
-# Metal Backend
-################################################################################
-
-if (DAWN_ENABLE_METAL)
-    list(APPEND DAWN_NATIVE_DEPS "-framework Metal" "-framework Cocoa")
-
-    list(APPEND DAWN_NATIVE_SOURCES
-        ${METAL_DIR}/BlendStateMTL.mm
-        ${METAL_DIR}/BlendStateMTL.h
-        ${METAL_DIR}/BufferMTL.mm
-        ${METAL_DIR}/BufferMTL.h
-        ${METAL_DIR}/CommandBufferMTL.mm
-        ${METAL_DIR}/CommandBufferMTL.h
-        ${METAL_DIR}/ComputePipelineMTL.mm
-        ${METAL_DIR}/ComputePipelineMTL.h
-        ${METAL_DIR}/DepthStencilStateMTL.mm
-        ${METAL_DIR}/DepthStencilStateMTL.h
-        ${METAL_DIR}/DeviceMTL.mm
-        ${METAL_DIR}/DeviceMTL.h
-        ${METAL_DIR}/Forward.h
-        ${METAL_DIR}/InputStateMTL.mm
-        ${METAL_DIR}/InputStateMTL.h
-        ${METAL_DIR}/PipelineLayoutMTL.mm
-        ${METAL_DIR}/PipelineLayoutMTL.h
-        ${METAL_DIR}/QueueMTL.mm
-        ${METAL_DIR}/QueueMTL.h
-        ${METAL_DIR}/RenderPipelineMTL.mm
-        ${METAL_DIR}/RenderPipelineMTL.h
-        ${METAL_DIR}/ResourceUploader.mm
-        ${METAL_DIR}/ResourceUploader.h
-        ${METAL_DIR}/SamplerMTL.mm
-        ${METAL_DIR}/SamplerMTL.h
-        ${METAL_DIR}/ShaderModuleMTL.mm
-        ${METAL_DIR}/ShaderModuleMTL.h
-        ${METAL_DIR}/SwapChainMTL.mm
-        ${METAL_DIR}/SwapChainMTL.h
-        ${METAL_DIR}/TextureMTL.mm
-        ${METAL_DIR}/TextureMTL.h
-        ${DAWN_NATIVE_INCLUDE_DIR}/MetalBackend.h
-    )
-endif()
-
-################################################################################
-# D3D12 Backend
-################################################################################
-
-if (DAWN_ENABLE_D3D12)
-    # WIN10_SDK_PATH will be something like C:\Program Files (x86)\Windows Kits\10
-    get_filename_component(WIN10_SDK_PATH "[HKEY_LOCAL_MACHINE\\SOFTWARE\\WOW6432Node\\Microsoft\\Microsoft SDKs\\Windows\\v10.0;InstallationFolder]" ABSOLUTE CACHE)
-
-    # TEMP_WIN10_SDK_VERSION will be something like ${CMAKE_CURRENT_SOURCE_DIR}\10.0.14393 or ${CMAKE_CURRENT_SOURCE_DIR}\10.0.14393.0
-    get_filename_component(TEMP_WIN10_SDK_VERSION "[HKEY_LOCAL_MACHINE\\SOFTWARE\\WOW6432Node\\Microsoft\\Microsoft SDKs\\Windows\\v10.0;ProductVersion]" ABSOLUTE CACHE)
-
-    # strip off ${CMAKE_CURRENT_SOURCE_DIR} to get just the version number
-    get_filename_component(WIN10_SDK_VERSION ${TEMP_WIN10_SDK_VERSION} NAME)
-    # WIN10_SDK_VERSION will be something like 10.0.14393 or 10.0.14393.0; we need the one that matches the directory name.
-    if (IS_DIRECTORY "${WIN10_SDK_PATH}/Include/${WIN10_SDK_VERSION}.0")
-        set(WIN10_SDK_VERSION "${WIN10_SDK_VERSION}.0")
-    endif()
-
-    # Find the d3d12 and dxgi include path, it will typically look something like this.
-    # C:\Program Files (x86)\Windows Kits\10\Include\10.0.10586.0\um\d3d12.h
-    # C:\Program Files (x86)\Windows Kits\10\Include\10.0.10586.0\shared\dxgi1_4.h
-    find_path(D3D12_INCLUDE_DIR     # Set variable D3D12_INCLUDE_DIR
-        d3d12.h                     # Find a path with d3d12.h
-        HINTS "${WIN10_SDK_PATH}/Include/${WIN10_SDK_VERSION}/um"
-        DOC "path to WIN10 SDK header files"
-        HINTS
-    )
-
-    find_path(DXGI_INCLUDE_DIR      # Set variable DXGI_INCLUDE_DIR
-        dxgi1_4.h                   # Find a path with dxgi1_4.h
-        HINTS "${WIN10_SDK_PATH}/Include/${WIN10_SDK_VERSION}/shared"
-        DOC "path to WIN10 SDK header files"
-        HINTS
-    )
-
-    if (CMAKE_GENERATOR MATCHES "Visual Studio.*ARM" )
-        set(WIN10_SDK_LIB_PATH ${WIN10_SDK_PATH}/Lib/${WIN10_SDK_VERSION}/um/arm)
-    elseif (CMAKE_GENERATOR MATCHES "Visual Studio.*ARM64" )
-        set(WIN10_SDK_LIB_PATH ${WIN10_SDK_PATH}/Lib/${WIN10_SDK_VERSION}/um/arm64)
-    elseif (CMAKE_GENERATOR MATCHES "Visual Studio.*Win64" )
-        set(WIN10_SDK_LIB_PATH ${WIN10_SDK_PATH}/Lib/${WIN10_SDK_VERSION}/um/x64)
-    else()
-        set(WIN10_SDK_LIB_PATH ${WIN10_SDK_PATH}/Lib/${WIN10_SDK_VERSION}/um/x86)
-    endif()
-
-    find_library(D3D12_LIBRARY NAMES d3d12.lib HINTS ${WIN10_SDK_LIB_PATH})
-    find_library(DXGI_LIBRARY NAMES dxgi.lib HINTS ${WIN10_SDK_LIB_PATH})
-    find_library(D3DCOMPILER_LIBRARY NAMES d3dcompiler.lib HINTS ${WIN10_SDK_LIB_PATH})
-
-    list(APPEND D3D12_LIBRARIES
-        ${D3D12_LIBRARY}
-        ${DXGI_LIBRARY}
-        ${D3DCOMPILER_LIBRARY}
-    )
-
-    if (CMAKE_BUILD_TYPE STREQUAL "Debug")
-        find_library(DXGUID_LIBRARY NAMES dxguid.lib HINTS ${WIN10_SDK_LIB_PATH})
-        list(APPEND D3D12_LIBRARIES ${DXGUID_LIBRARY})
-    endif()
-
-    list(APPEND DAWN_NATIVE_DEPS ${D3D12_LIBRARIES})
-    list(APPEND DAWN_NATIVE_INCLUDE_DIRS ${D3D12_INCLUDE_DIR} ${DXGI_INCLUDE_DIR})
-    list(APPEND DAWN_NATIVE_SOURCES
-        ${D3D12_DIR}/d3d12_platform.h
-        ${D3D12_DIR}/BindGroupD3D12.cpp
-        ${D3D12_DIR}/BindGroupD3D12.h
-        ${D3D12_DIR}/BindGroupLayoutD3D12.cpp
-        ${D3D12_DIR}/BindGroupLayoutD3D12.h
-        ${D3D12_DIR}/BlendStateD3D12.cpp
-        ${D3D12_DIR}/BlendStateD3D12.h
-        ${D3D12_DIR}/BufferD3D12.cpp
-        ${D3D12_DIR}/BufferD3D12.h
-        ${D3D12_DIR}/CommandAllocatorManager.cpp
-        ${D3D12_DIR}/CommandAllocatorManager.h
-        ${D3D12_DIR}/CommandBufferD3D12.cpp
-        ${D3D12_DIR}/CommandBufferD3D12.h
-        ${D3D12_DIR}/ComputePipelineD3D12.cpp
-        ${D3D12_DIR}/ComputePipelineD3D12.h
-        ${D3D12_DIR}/DepthStencilStateD3D12.cpp
-        ${D3D12_DIR}/DepthStencilStateD3D12.h
-        ${D3D12_DIR}/DescriptorHeapAllocator.cpp
-        ${D3D12_DIR}/DescriptorHeapAllocator.h
-        ${D3D12_DIR}/DeviceD3D12.cpp
-        ${D3D12_DIR}/DeviceD3D12.h
-        ${D3D12_DIR}/Forward.h
-        ${D3D12_DIR}/InputStateD3D12.cpp
-        ${D3D12_DIR}/InputStateD3D12.h
-        ${D3D12_DIR}/NativeSwapChainImplD3D12.cpp
-        ${D3D12_DIR}/NativeSwapChainImplD3D12.h
-        ${D3D12_DIR}/PipelineLayoutD3D12.cpp
-        ${D3D12_DIR}/PipelineLayoutD3D12.h
-        ${D3D12_DIR}/PlatformFunctions.cpp
-        ${D3D12_DIR}/PlatformFunctions.h
-        ${D3D12_DIR}/QueueD3D12.cpp
-        ${D3D12_DIR}/QueueD3D12.h
-        ${D3D12_DIR}/RenderPassDescriptorD3D12.cpp
-        ${D3D12_DIR}/RenderPassDescriptorD3D12.h
-        ${D3D12_DIR}/RenderPipelineD3D12.cpp
-        ${D3D12_DIR}/RenderPipelineD3D12.h
-        ${D3D12_DIR}/ResourceAllocator.cpp
-        ${D3D12_DIR}/ResourceAllocator.h
-        ${D3D12_DIR}/ResourceUploader.cpp
-        ${D3D12_DIR}/ResourceUploader.h
-        ${D3D12_DIR}/SamplerD3D12.cpp
-        ${D3D12_DIR}/SamplerD3D12.h
-        ${D3D12_DIR}/ShaderModuleD3D12.cpp
-        ${D3D12_DIR}/ShaderModuleD3D12.h
-        ${D3D12_DIR}/SwapChainD3D12.cpp
-        ${D3D12_DIR}/SwapChainD3D12.h
-        ${D3D12_DIR}/TextureCopySplitter.cpp
-        ${D3D12_DIR}/TextureCopySplitter.h
-        ${D3D12_DIR}/TextureD3D12.cpp
-        ${D3D12_DIR}/TextureD3D12.h
-        ${DAWN_NATIVE_INCLUDE_DIR}/D3D12Backend.h
-    )
-endif()
-
-################################################################################
-# Vulkan Backend
-################################################################################
-
-if (DAWN_ENABLE_VULKAN)
-    list(APPEND DAWN_NATIVE_INCLUDE_DIRS ${VULKAN_HEADERS_INCLUDE_DIR})
-    list(APPEND DAWN_NATIVE_SOURCES
-        ${VULKAN_DIR}/BindGroupVk.cpp
-        ${VULKAN_DIR}/BindGroupVk.h
-        ${VULKAN_DIR}/BindGroupLayoutVk.cpp
-        ${VULKAN_DIR}/BindGroupLayoutVk.h
-        ${VULKAN_DIR}/BlendStateVk.cpp
-        ${VULKAN_DIR}/BlendStateVk.h
-        ${VULKAN_DIR}/BufferUploader.cpp
-        ${VULKAN_DIR}/BufferUploader.h
-        ${VULKAN_DIR}/BufferVk.cpp
-        ${VULKAN_DIR}/BufferVk.h
-        ${VULKAN_DIR}/CommandBufferVk.cpp
-        ${VULKAN_DIR}/CommandBufferVk.h
-        ${VULKAN_DIR}/ComputePipelineVk.cpp
-        ${VULKAN_DIR}/ComputePipelineVk.h
-        ${VULKAN_DIR}/DeviceVk.cpp
-        ${VULKAN_DIR}/DeviceVk.h
-        ${VULKAN_DIR}/DepthStencilStateVk.cpp
-        ${VULKAN_DIR}/DepthStencilStateVk.h
-        ${VULKAN_DIR}/FencedDeleter.cpp
-        ${VULKAN_DIR}/FencedDeleter.h
-        ${VULKAN_DIR}/Forward.h
-        ${VULKAN_DIR}/InputStateVk.cpp
-        ${VULKAN_DIR}/InputStateVk.h
-        ${VULKAN_DIR}/MemoryAllocator.cpp
-        ${VULKAN_DIR}/MemoryAllocator.h
-        ${VULKAN_DIR}/NativeSwapChainImplVk.cpp
-        ${VULKAN_DIR}/NativeSwapChainImplVk.h
-        ${VULKAN_DIR}/PipelineLayoutVk.cpp
-        ${VULKAN_DIR}/PipelineLayoutVk.h
-        ${VULKAN_DIR}/QueueVk.cpp
-        ${VULKAN_DIR}/QueueVk.h
-        ${VULKAN_DIR}/RenderPassCache.cpp
-        ${VULKAN_DIR}/RenderPassCache.h
-        ${VULKAN_DIR}/RenderPassDescriptorVk.cpp
-        ${VULKAN_DIR}/RenderPassDescriptorVk.h
-        ${VULKAN_DIR}/RenderPipelineVk.cpp
-        ${VULKAN_DIR}/RenderPipelineVk.h
-        ${VULKAN_DIR}/SamplerVk.cpp
-        ${VULKAN_DIR}/SamplerVk.h
-        ${VULKAN_DIR}/ShaderModuleVk.cpp
-        ${VULKAN_DIR}/ShaderModuleVk.h
-        ${VULKAN_DIR}/SwapChainVk.cpp
-        ${VULKAN_DIR}/SwapChainVk.h
-        ${VULKAN_DIR}/TextureVk.cpp
-        ${VULKAN_DIR}/TextureVk.h
-        ${VULKAN_DIR}/VulkanFunctions.cpp
-        ${VULKAN_DIR}/VulkanFunctions.h
-        ${VULKAN_DIR}/VulkanInfo.cpp
-        ${VULKAN_DIR}/VulkanInfo.h
-        ${DAWN_NATIVE_INCLUDE_DIR}/VulkanBackend.h
-    )
-endif()
-
-################################################################################
-# Common sources and definition of the library
-################################################################################
-
-list(APPEND DAWN_NATIVE_SOURCES
-    ${DAWN_NATIVE_DIR}/dawn_platform.h
-    ${DAWN_NATIVE_DIR}/BindGroup.cpp
-    ${DAWN_NATIVE_DIR}/BindGroup.h
-    ${DAWN_NATIVE_DIR}/BindGroupLayout.cpp
-    ${DAWN_NATIVE_DIR}/BindGroupLayout.h
-    ${DAWN_NATIVE_DIR}/BlendState.cpp
-    ${DAWN_NATIVE_DIR}/BlendState.h
-    ${DAWN_NATIVE_DIR}/Builder.cpp
-    ${DAWN_NATIVE_DIR}/Builder.h
-    ${DAWN_NATIVE_DIR}/Buffer.cpp
-    ${DAWN_NATIVE_DIR}/Buffer.h
-    ${DAWN_NATIVE_DIR}/Commands.cpp
-    ${DAWN_NATIVE_DIR}/Commands.h
-    ${DAWN_NATIVE_DIR}/CommandAllocator.cpp
-    ${DAWN_NATIVE_DIR}/CommandAllocator.h
-    ${DAWN_NATIVE_DIR}/CommandBuffer.cpp
-    ${DAWN_NATIVE_DIR}/CommandBuffer.h
-    ${DAWN_NATIVE_DIR}/ComputePassEncoder.cpp
-    ${DAWN_NATIVE_DIR}/ComputePassEncoder.h
-    ${DAWN_NATIVE_DIR}/ComputePipeline.cpp
-    ${DAWN_NATIVE_DIR}/ComputePipeline.h
-    ${DAWN_NATIVE_DIR}/CommandBufferStateTracker.cpp
-    ${DAWN_NATIVE_DIR}/CommandBufferStateTracker.h
-    ${DAWN_NATIVE_DIR}/DawnNative.cpp
-    ${DAWN_NATIVE_DIR}/DepthStencilState.cpp
-    ${DAWN_NATIVE_DIR}/DepthStencilState.h
-    ${DAWN_NATIVE_DIR}/Device.cpp
-    ${DAWN_NATIVE_DIR}/Device.h
-    ${DAWN_NATIVE_DIR}/Error.cpp
-    ${DAWN_NATIVE_DIR}/Error.h
-    ${DAWN_NATIVE_DIR}/ErrorData.cpp
-    ${DAWN_NATIVE_DIR}/ErrorData.h
-    ${DAWN_NATIVE_DIR}/Forward.h
-    ${DAWN_NATIVE_DIR}/InputState.cpp
-    ${DAWN_NATIVE_DIR}/InputState.h
-    ${DAWN_NATIVE_DIR}/ObjectBase.cpp
-    ${DAWN_NATIVE_DIR}/ObjectBase.h
-    ${DAWN_NATIVE_DIR}/PassResourceUsage.h
-    ${DAWN_NATIVE_DIR}/PerStage.cpp
-    ${DAWN_NATIVE_DIR}/PerStage.h
-    ${DAWN_NATIVE_DIR}/Pipeline.cpp
-    ${DAWN_NATIVE_DIR}/Pipeline.h
-    ${DAWN_NATIVE_DIR}/PipelineLayout.cpp
-    ${DAWN_NATIVE_DIR}/PipelineLayout.h
-    ${DAWN_NATIVE_DIR}/ProgrammablePassEncoder.cpp
-    ${DAWN_NATIVE_DIR}/ProgrammablePassEncoder.h
-    ${DAWN_NATIVE_DIR}/Queue.cpp
-    ${DAWN_NATIVE_DIR}/Queue.h
-    ${DAWN_NATIVE_DIR}/RefCounted.cpp
-    ${DAWN_NATIVE_DIR}/RefCounted.h
-    ${DAWN_NATIVE_DIR}/RenderPassDescriptor.cpp
-    ${DAWN_NATIVE_DIR}/RenderPassDescriptor.h
-    ${DAWN_NATIVE_DIR}/RenderPassEncoder.cpp
-    ${DAWN_NATIVE_DIR}/RenderPassEncoder.h
-    ${DAWN_NATIVE_DIR}/RenderPipeline.cpp
-    ${DAWN_NATIVE_DIR}/RenderPipeline.h
-    ${DAWN_NATIVE_DIR}/Sampler.cpp
-    ${DAWN_NATIVE_DIR}/Sampler.h
-    ${DAWN_NATIVE_DIR}/ShaderModule.cpp
-    ${DAWN_NATIVE_DIR}/ShaderModule.h
-    ${DAWN_NATIVE_DIR}/SwapChain.cpp
-    ${DAWN_NATIVE_DIR}/SwapChain.h
-    ${DAWN_NATIVE_DIR}/Texture.cpp
-    ${DAWN_NATIVE_DIR}/Texture.h
-    ${DAWN_NATIVE_DIR}/ToBackend.h
-    ${DAWN_NATIVE_INCLUDE_DIR}/dawn_native_export.h
-    ${DAWN_NATIVE_INCLUDE_DIR}/DawnNative.h
-)
-
-# We want to produce both a static and a shared libdawn_native library. The static one is for
-# unittests that need access to all the symbols of the library. The shared one is for the other
-# users that access libdawn_native through the regular interface.
-# We use a CMake "OBJECT" library type which allows precompiling the source files and reusing
-# them for both the static and the shared library. Recent CMake versions make it so if you
-# depend on an OBJECT library you get its dependencies and source files, which is very similar to
-# GN's source_set. However the versions of CMake on our test bots is too old and doesn't support
-# this, so instead we duplicate the deps everywhere.
-add_library(libdawn_native_objects OBJECT ${DAWN_NATIVE_SOURCES})
-DawnInternalTarget("dawn_native" libdawn_native_objects)
-target_compile_definitions(libdawn_native_objects PRIVATE DAWN_NATIVE_IMPLEMENTATION SPIRV_CROSS_EXCEPTIONS_TO_ASSERTIONS)
-target_include_directories(libdawn_native_objects PRIVATE ${DAWN_NATIVE_INCLUDE_DIRS})
-add_dependencies(libdawn_native_objects dawn_native_utils_autogen)
-
-add_library(libdawn_native SHARED $<TARGET_OBJECTS:libdawn_native_objects>)
-DawnInternalTarget("dawn_native" libdawn_native)
-target_link_libraries(libdawn_native PRIVATE ${DAWN_NATIVE_DEPS})
-set_property(TARGET libdawn_native PROPERTY OUTPUT_NAME "dawn_native")
-
-add_library(libdawn_native_static STATIC $<TARGET_OBJECTS:libdawn_native_objects>)
-DawnInternalTarget("dawn_native" libdawn_native_static)
-target_link_libraries(libdawn_native_static ${DAWN_NATIVE_DEPS})
diff --git a/src/dawn_wire/CMakeLists.txt b/src/dawn_wire/CMakeLists.txt
deleted file mode 100644
index b5ff96a..0000000
--- a/src/dawn_wire/CMakeLists.txt
+++ /dev/null
@@ -1,37 +0,0 @@
-# Copyright 2017 The Dawn Authors
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-set(DAWN_WIRE_DIR ${CMAKE_CURRENT_SOURCE_DIR})
-set(DAWN_WIRE_INCLUDE_DIR ${INCLUDE_DIR}/dawn_wire)
-
-Generate(
-    LIB_NAME dawn_wire_autogen
-    LIB_TYPE OBJECT
-    FOLDER "wire"
-    PRINT_NAME "dawn_wire autogenerated files"
-    COMMAND_LINE_ARGS
-        ${GENERATOR_COMMON_ARGS}
-        -T dawn_wire
-)
-target_compile_definitions(dawn_wire_autogen PRIVATE DAWN_WIRE_IMPLEMENTATION)
-
-add_library(dawn_wire SHARED
-    $<TARGET_OBJECTS:dawn_wire_autogen>
-	${DAWN_WIRE_DIR}/WireCmd.h
-    ${DAWN_WIRE_INCLUDE_DIR}/Wire.h
-    ${DAWN_WIRE_INCLUDE_DIR}/dawn_wire_export.h
-)
-target_link_libraries(dawn_wire PRIVATE dawn_common)
-target_compile_definitions(dawn_wire PRIVATE DAWN_WIRE_IMPLEMENTATION)
-DawnInternalTarget("wire" dawn_wire)
diff --git a/src/tests/CMakeLists.txt b/src/tests/CMakeLists.txt
deleted file mode 100644
index 68c573b..0000000
--- a/src/tests/CMakeLists.txt
+++ /dev/null
@@ -1,94 +0,0 @@
-# Copyright 2017 The Dawn Authors
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-Generate(
-    LIB_NAME mock_dawn
-    LIB_TYPE STATIC
-    FOLDER "tests"
-    PRINT_NAME libMockDawn
-    COMMAND_LINE_ARGS
-        ${GENERATOR_COMMON_ARGS}
-        -T mock_dawn
-)
-target_link_libraries(mock_dawn gtest)
-
-set(TESTS_DIR ${CMAKE_CURRENT_SOURCE_DIR})
-set(UNITTESTS_DIR ${TESTS_DIR}/unittests)
-set(VALIDATION_TESTS_DIR ${UNITTESTS_DIR}/validation)
-set(END2END_TESTS_DIR ${TESTS_DIR}/end2end)
-
-list(APPEND UNITTEST_SOURCES
-    ${UNITTESTS_DIR}/BitSetIteratorTests.cpp
-    ${UNITTESTS_DIR}/CommandAllocatorTests.cpp
-    ${UNITTESTS_DIR}/EnumClassBitmasksTests.cpp
-    ${UNITTESTS_DIR}/ErrorTests.cpp
-    ${UNITTESTS_DIR}/MathTests.cpp
-    ${UNITTESTS_DIR}/ObjectBaseTests.cpp
-    ${UNITTESTS_DIR}/PerStageTests.cpp
-    ${UNITTESTS_DIR}/RefCountedTests.cpp
-    ${UNITTESTS_DIR}/ResultTests.cpp
-    ${UNITTESTS_DIR}/SerialQueueTests.cpp
-    ${UNITTESTS_DIR}/ToBackendTests.cpp
-    ${UNITTESTS_DIR}/WireTests.cpp
-    ${VALIDATION_TESTS_DIR}/BindGroupValidationTests.cpp
-    ${VALIDATION_TESTS_DIR}/BlendStateValidationTests.cpp
-    ${VALIDATION_TESTS_DIR}/BufferValidationTests.cpp
-    ${VALIDATION_TESTS_DIR}/CommandBufferValidationTests.cpp
-    ${VALIDATION_TESTS_DIR}/ComputeValidationTests.cpp
-    ${VALIDATION_TESTS_DIR}/CopyCommandsValidationTests.cpp
-    ${VALIDATION_TESTS_DIR}/DepthStencilStateValidationTests.cpp
-    ${VALIDATION_TESTS_DIR}/DynamicStateCommandValidationTests.cpp
-    ${VALIDATION_TESTS_DIR}/InputStateValidationTests.cpp
-    ${VALIDATION_TESTS_DIR}/PushConstantsValidationTests.cpp
-    ${VALIDATION_TESTS_DIR}/RenderPassDescriptorValidationTests.cpp
-    ${VALIDATION_TESTS_DIR}/RenderPipelineValidationTests.cpp
-    ${VALIDATION_TESTS_DIR}/ShaderModuleValidationTests.cpp
-    ${VALIDATION_TESTS_DIR}/VertexBufferValidationTests.cpp
-    ${VALIDATION_TESTS_DIR}/ValidationTest.cpp
-    ${VALIDATION_TESTS_DIR}/ValidationTest.h
-    ${TESTS_DIR}/UnittestsMain.cpp
-)
-
-if (DAWN_ENABLE_D3D12)
-    list(APPEND UNITTEST_SOURCES
-        ${UNITTESTS_DIR}/d3d12/CopySplitTests.cpp
-    )
-endif()
-
-add_executable(dawn_unittests ${UNITTEST_SOURCES})
-target_link_libraries(dawn_unittests dawn_common gtest libdawn_native_static mock_dawn dawn_wire utils)
-DawnInternalTarget("tests" dawn_unittests)
-
-add_executable(dawn_end2end_tests
-    ${END2END_TESTS_DIR}/BasicTests.cpp
-    ${END2END_TESTS_DIR}/BufferTests.cpp
-    ${END2END_TESTS_DIR}/BlendStateTests.cpp
-    ${END2END_TESTS_DIR}/ComputeCopyStorageBufferTests.cpp
-    ${END2END_TESTS_DIR}/CopyTests.cpp
-    ${END2END_TESTS_DIR}/DrawElementsTests.cpp
-    ${END2END_TESTS_DIR}/DepthStencilStateTests.cpp
-    ${END2END_TESTS_DIR}/IndexFormatTests.cpp
-    ${END2END_TESTS_DIR}/InputStateTests.cpp
-    ${END2END_TESTS_DIR}/PrimitiveTopologyTests.cpp
-    ${END2END_TESTS_DIR}/PushConstantTests.cpp
-    ${END2END_TESTS_DIR}/RenderPassLoadOpTests.cpp
-    ${END2END_TESTS_DIR}/ScissorTests.cpp
-    ${END2END_TESTS_DIR}/SamplerTests.cpp
-    ${END2END_TESTS_DIR}/ViewportOrientationTests.cpp
-    ${TESTS_DIR}/End2EndTestsMain.cpp
-    ${TESTS_DIR}/DawnTest.cpp
-    ${TESTS_DIR}/DawnTest.h
-)
-target_link_libraries(dawn_end2end_tests dawn_common dawn_wire gtest utils)
-DawnInternalTarget("tests" dawn_end2end_tests)
diff --git a/src/utils/CMakeLists.txt b/src/utils/CMakeLists.txt
deleted file mode 100644
index d985016..0000000
--- a/src/utils/CMakeLists.txt
+++ /dev/null
@@ -1,85 +0,0 @@
-# Copyright 2017 The Dawn Authors
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-set(UTILS_DIR ${CMAKE_CURRENT_SOURCE_DIR})
-
-list(APPEND UTILS_SOURCES
-    ${UTILS_DIR}/BackendBinding.cpp
-    ${UTILS_DIR}/BackendBinding.h
-    ${UTILS_DIR}/DawnHelpers.cpp
-    ${UTILS_DIR}/DawnHelpers.h
-    ${UTILS_DIR}/SystemUtils.cpp
-    ${UTILS_DIR}/SystemUtils.h
-    ${UTILS_DIR}/TerribleCommandBuffer.cpp
-    ${UTILS_DIR}/TerribleCommandBuffer.h
-)
-
-list(APPEND UTILS_DEPS
-    dawn_common
-    libdawn_native
-    shaderc_shared
-    libdawn
-    glfw
-)
-
-set(UTILS_INCLUDE_DIRS)
-
-if (DAWN_ENABLE_D3D12)
-    list(APPEND UTILS_SOURCES
-        ${UTILS_DIR}/D3D12Binding.cpp
-    )
-endif()
-
-if (DAWN_ENABLE_METAL)
-    list(APPEND UTILS_SOURCES
-        ${UTILS_DIR}/MetalBinding.mm
-    )
-    list(APPEND UTILS_DEPS
-        "-framework Metal"
-        "-framework QuartzCore"
-    )
-endif()
-
-if (DAWN_ENABLE_NULL)
-    list(APPEND UTILS_SOURCES
-        ${UTILS_DIR}/NullBinding.cpp
-    )
-endif()
-
-if (DAWN_ENABLE_OPENGL)
-    list(APPEND UTILS_SOURCES
-        ${UTILS_DIR}/OpenGLBinding.cpp
-    )
-    list(APPEND UTILS_DEPS
-        glad
-    )
-endif()
-
-if (DAWN_ENABLE_VULKAN)
-    list(APPEND UTILS_SOURCES
-        ${UTILS_DIR}/VulkanBinding.cpp
-    )
-    list(APPEND UTILS_INCLUDE_DIRS
-        ${VULKAN_HEADERS_INCLUDE_DIR}
-    )
-endif()
-
-add_library(utils STATIC ${UTILS_SOURCES})
-target_link_libraries(utils ${UTILS_DEPS})
-target_include_directories(utils PRIVATE ${UTILS_INCLUDE_DIRS})
-DawnInternalTarget("" utils)
-if(NOT MSVC)
-    # allow C-style casts -- for shaderc
-    set_property(TARGET utils APPEND PROPERTY COMPILE_OPTIONS "-Wno-old-style-cast")
-endif()
diff --git a/third_party/glfw b/third_party/glfw
deleted file mode 160000
index 096efdf..0000000
--- a/third_party/glfw
+++ /dev/null
@@ -1 +0,0 @@
-Subproject commit 096efdf798896cff80a0b2db08d7398b703406fe
diff --git a/third_party/glm b/third_party/glm
deleted file mode 160000
index 06f0840..0000000
--- a/third_party/glm
+++ /dev/null
@@ -1 +0,0 @@
-Subproject commit 06f084063fd6d9aa2ef6904517650700ae47b63d
diff --git a/third_party/glslang b/third_party/glslang
deleted file mode 160000
index a08f465..0000000
--- a/third_party/glslang
+++ /dev/null
@@ -1 +0,0 @@
-Subproject commit a08f465d5398518e9a6aeebd4775604a4c10e381
diff --git a/third_party/googletest b/third_party/googletest
deleted file mode 160000
index 98a0d00..0000000
--- a/third_party/googletest
+++ /dev/null
@@ -1 +0,0 @@
-Subproject commit 98a0d007d7092b72eea0e501bb9ad17908a1a036
diff --git a/third_party/shaderc b/third_party/shaderc
deleted file mode 160000
index 909f0d3..0000000
--- a/third_party/shaderc
+++ /dev/null
@@ -1 +0,0 @@
-Subproject commit 909f0d3d31e7e7c8f39b40ba0e1dd7f99b749776
diff --git a/third_party/spirv-cross b/third_party/spirv-cross
deleted file mode 160000
index a769744..0000000
--- a/third_party/spirv-cross
+++ /dev/null
@@ -1 +0,0 @@
-Subproject commit a7697446b12666da353bb2bdafa792d988fb268c
diff --git a/third_party/spirv-headers b/third_party/spirv-headers
deleted file mode 160000
index d5b2e12..0000000
--- a/third_party/spirv-headers
+++ /dev/null
@@ -1 +0,0 @@
-Subproject commit d5b2e1255f706ce1f88812217e9a554f299848af
diff --git a/third_party/spirv-tools b/third_party/spirv-tools
deleted file mode 160000
index 1225324..0000000
--- a/third_party/spirv-tools
+++ /dev/null
@@ -1 +0,0 @@
-Subproject commit 1225324ae2450623e62621b91b380644f84c16d1
diff --git a/third_party/stb b/third_party/stb
deleted file mode 160000
index c711058..0000000
--- a/third_party/stb
+++ /dev/null
@@ -1 +0,0 @@
-Subproject commit c7110588a4d24c4bb5155c184fbb77dd90b3116e
