# Copyright (C) 2016 The Android Open Source Project
#
# 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.

# Generated globbing source file
# This file will be automatically regenerated if deleted, do not edit by hand.
# If you add a new file to the directory, just delete this file, run any cmake
# build and the file will be recreated, check in the new version.

set(files
    base_type.cpp
    base_type.h
    context.cpp
    context.h
    context_test.cpp
    function_table.h
    gfx_api.h
    gles_gfx_api.cpp
    gles_gfx_api.h
    gles_renderer.h
    interpreter.cpp
    interpreter.h
    interpreter_test.cpp
    memory_manager.cpp
    memory_manager.h
    memory_manager_test.cpp
    mock_resource_provider.h
    post_buffer.cpp
    post_buffer.h
    post_buffer_test.cpp
    renderer.h
    replay_request.cpp
    replay_request.h
    replay_request_test.cpp
    resource.h
    resource_cache.cpp
    resource_cache.h
    resource_disk_cache.cpp
    resource_disk_cache.h
    resource_in_memory_cache.cpp
    resource_in_memory_cache.h
    resource_in_memory_cache_test.cpp
    resource_provider.h
    resource_requester.cpp
    resource_requester.h
    resource_requester_test.cpp
    server_connection.cpp
    server_connection.h
    server_connection_test.cpp
    server_listener.cpp
    server_listener.h
    server_listener_test.cpp
    stack.cpp
    stack.h
    stack_test.cpp
    test_utilities.h
    test_utilities_test.cpp
    vulkan_gfx_api.cpp
    vulkan_gfx_api.h
    vulkan_gfx_api_extras.cpp
    vulkan_renderer.h
)
set(dirs
    android
    linux
    osx
    posix
    windows
)
