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

/** @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.
 */

/** @file scripts/caffe_data_extractor.py
 *  @brief Basic script to export weights from Caffe to npy files.
 */

/** @file scripts/tensorflow_data_extractor.py
 *  @brief Basic script to export weights from TensorFlow to npy files.
 */

/** @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.
 */
