//
// Copyright © 2020,2022 Arm Ltd. All rights reserved.
// SPDX-License-Identifier: MIT
//

// The following files are omitted due to technical limitations:
// Directories : data, include, python
// Files : LICENSE, README.md, SConscript, SConstruct, Security.md, filelist.json, filedefs.json

/** @file Android.bp
 *  @brief Generation script for building AndroidNN driver.
 */

/** @dir arm_compute
 *  @brief All the arm_compute headers.
 */

/** @dir arm_compute/core
 *  @brief Core module: common basic types and kernels.
 */

/** @dir arm_compute/core/CL
 *  @brief OpenCL backend core: kernels and utilities.
 */

/** @file arm_compute/core/CL/CLKernelLibrary.h
 *  @brief Manages all the OpenCL kernels compilation and caching, provides accessors for the OpenCL Context.
 */

/** @file arm_compute/core/CL/OpenCL.h
 *  @brief Wrapper to configure the Khronos OpenCL C++ header
 */

/** @dir arm_compute/core/CPP
 *  @brief CPP backend core: kernels and utilities.
 */

/** @file arm_compute/core/CPP/CPPKernels.h
 *  @brief Includes all the CPP kernels at once
 */

/** @dir arm_compute/core/CPP/kernels
 *  @brief Folder containing all the CPP kernels
 */

/** @dir arm_compute/core/experimental
 *  @brief All experimental interfaces
 */

/** @dir src/core/NEON
 *  @brief Arm® Neon™ backend core: kernels and utilities.
 */

/** @file src/core/NEON/NEKernels.h
 *  @brief Includes all the Arm® Neon™ kernels at once
 */

/** @dir src/core/NEON/kernels
 *  @brief Folder containing all the Arm® Neon™ kernels
 */

/** @dir arm_compute/core/utils
 *  @brief Common core utilities.
 */

/** @dir arm_compute/graph
 *  @brief Graph API.
 */

/** @dir arm_compute/graph/algorithms
 *  @brief Generic algorithms used by the graph backend (e.g Order of traversal)
 */

/** @dir arm_compute/graph/backends
 *  @brief The backend specific code
 */

/** @dir arm_compute/graph/backends/CL
 *  @brief OpenCL specific operations
 */

/** @dir arm_compute/graph/backends/NEON
 *  @brief Arm® Neon™ specific operations
 */

/** @dir arm_compute/graph/detail
 *  @brief Collection of internal utilities.
 */

/** @dir arm_compute/graph/frontend
 *  @brief Code related to the stream frontend interface.
 */

/** @dir arm_compute/graph/mutators
 *  @brief Used to modify / optimise the Graph intermediate representation(Operator fusion, in place operations, etc.)
 */

/** @dir arm_compute/graph/nodes
 *  @brief The various nodes supported by the graph API.
 */

/** @dir arm_compute/graph/printers
 *  @brief Debug printers.
 */

/** @file arm_compute/graph.h
 *  @brief Includes all the Graph headers at once.
 */

/** @dir arm_compute/runtime
 *  @brief Runtime interface: memory, scheduler, functions.
 */

/** @dir arm_compute/runtime/CL
 *  @brief OpenCL backend runtime interface.
 */

/** @file arm_compute/runtime/CL/CLFunctions.h
 *  @brief Includes all the OpenCL functions at once
 */

/** @file arm_compute/runtime/CL/CLScheduler.h
 *  @brief Interface to enqueue OpenCL kernels and get/set the OpenCL CommandQueue and ICLTuner.
 */

/** @file arm_compute/runtime/CL/ICLTuner.h
 *  @brief Interface used to tune the local work-group size of OpenCL kernels.
 */

/** @dir arm_compute/runtime/CL/functions
 *  @brief Folder containing all the OpenCL functions.
 */

/** @dir arm_compute/runtime/CL/tuners
 *  @brief Local workgroup size tuners for specific architectures / GPUs.
 */

/** @dir arm_compute/runtime/CPP
 *  @brief CPP backend runtime interface.
 */

/** @file arm_compute/runtime/CPP/CPPScheduler.h
 *  @brief Basic pool of threads to execute CPP/Neon code on several cores in parallel.
 */

/** @dir arm_compute/runtime/CPP/functions
 *  @brief Folder containing all the CPP functions.
 */

/** @dir arm_compute/runtime/experimental
 *  @brief Experimental runtime interface.
 */

/** @dir arm_compute/runtime/NEON
 *  @brief Arm® Neon™ backend runtime interface.
 */

/** @file arm_compute/runtime/NEON/NEFunctions.h
 *  @brief Includes all the Arm® Neon™ functions at once.
 */

/** @dir arm_compute/runtime/NEON/functions
 *  @brief Folder containing all the Arm® Neon™ functions.
 */

/** @dir arm_compute/runtime/OMP
 *  @brief OpenMP backend runtime interface.
 */

/** @file arm_compute/runtime/OMP/OMPScheduler.h
 *  @brief OpenMP scheduler (Alternative to the CPPScheduler).
 */

/** @dir arm_compute/runtime/common
 *  @brief Common utility code used by all backends.
 */

/** @dir docs
 *  @brief Doxyfile and Doxygen sources used to generate this documentation.
 */

/** @dir ./examples
 *  @brief Set of examples using the Compute Library
 *
 *  @details Examples have the following structure:
 *
 *  -# cl_*.cpp --> OpenCL examples
 *  -# graph_*.cpp --> Graph examples
 *  -# neoncl_*.cpp --> Arm® Neon™ / OpenCL interoperability examples
 *  -# neon_*.cpp --> Arm® Neon™ examples
 */

/** @dir examples/gemm_tuner
 *  @brief OpenCL GEMM tuner utility.
 */

/** @dir scripts
 *  @brief Utility scripts.
 */

/** @dir src
 *  @brief Source code implementing all the arm_compute headers.
 */

/** @dir src/core/NEON/kernels/detail
 *  @brief Common code for several intrinsics implementations.
 */

/** @dir src/core/NEON/wrapper
 *  @brief Arm® Neon™ wrapper used to simplify code
 */

/** @file src/core/NEON/wrapper/traits.h
 *  @brief Traits defined on Arm® Neon™ vectors
 */

/** @file src/core/NEON/wrapper/wrapper.h
 *  @brief Includes all wrapper headers at once
 */

/** @dir src/core/NEON/wrapper/intrinsics
 *  @brief Arm® Neon™ intrinsics wrappers
 */

/** @dir src/core/NEON/wrapper/scalar
 *  @brief Scalar operations
 */

/** @dir src/gpu/cl/kernels/gemm
 *  @brief Folder containing all the configuration files for GEMM
 */

/** @dir src/core/CL/kernels
 *  @brief All the OpenCL kernels
 */

/** @dir support
 *  @brief Various headers to work around toolchains / platform issues.
 */

/** @dir tests
 *  @brief All test related files shared between validation and benchmark.
 */

/** @file tests/main.cpp
 *  @brief Main entry point for the tests. Currently shared between validation and benchmarking.
 */

/** @dir tests/CL
 *  @brief OpenCL accessors.
 */

/** @dir tests/NEON
 *  @brief Arm® Neon™ accessors.
 */

/** @dir tests/benchmark
 *  @brief Sources for benchmarking.
 */

/** @dir tests/benchmark/CL
 *  @brief OpenCL benchmarking tests.
 */

/** @dir tests/benchmark/NEON
 *  @brief Arm® Neon™ benchmarking tests.
 */

/** @dir tests/benchmark_examples
 *  @brief Sources needed to wrap examples to run through our benchmarking framework.
 */

/** @dir tests/framework
 *  @brief Boiler plate code for both validation and benchmark test suites (Command line parsers, instruments, output loggers, etc.)
 */

/** @dir tests/instruments
 *  @brief User defined instruments that can be registered to the framework.
 */

/** @dir tests/validate_examples
 *  @brief Sources needed to wrap examples to run through our validation framework.
 */

/** @dir tests/validation
 *  @brief Source for validation.
 */

/** @dir tests/validation/CL
 *  @brief OpenCL validation tests.
 */

/** @dir tests/validation/CPP
 *  @brief C++ validation tests.
 */

/** @dir tests/validation/NEON
 *  @brief Arm® Neon™ validation tests.
 */

/** @dir tests/validation/reference
 *  @brief Reference implementation used to validate the results of the various backends.
 */
