********************************
Library Source Code Organization
********************************

The hipBLAS code is split into two major parts:

- The `library` directory contains all source code for the library.
- The `clients` directory contains all test code and code to build clients.
- Infrastructure

The `library` directory
-----------------------

library/include
```````````````
Contains C98 include files for the external API. These files also contain Doxygen
comments that document the API.

library/src/amd_detail
```````````````````````
Implementation of hipBLAS interface compatible with rocBLAS APIs.

library/src/nvidia_detail
`````````````````````````
Implementation of hipBLAS interface compatible with cuBLAS-v2 APIs.

library/src/include
```````````````````
Internal include files for:

- Converting C++ exceptions to hipBLAS status.

The `clients` directory
-----------------------

clients/gtest
`````````````
Code for client hipblas-test. This client is used to test hipBLAS.

clients/benchmarks
``````````````````
Code for client hipblas-benchmark. This client is used to benchmark hipBLAS functions.

clients/include
```````````````
Code for testing and benchmarking individual hipBLAS functions, and utility code for testing.

clients/common
``````````````
Common code used by both hipblas-benchmark and hipblas-test.

clients/samples
```````````````
Sample code for calling hipBLAS functions.


Infrastructure
--------------

- CMake is used to build and package hipBLAS. There are CMakeLists.txt files throughout the code.
- Doxygen/Breathe/Sphinx/ReadTheDocs are used to produce documentation. Content for the documentation is from:

  - Doxygen comments in include files in the directory library/include
  - files in the directory docs/source.

- Jenkins is used to automate Continuous Integration testing.
- clang-format is used to format C++ code.


