diff --git a/CMakeLists.txt b/CMakeLists.txt index 47a1837799570f7427e69a204283d981a7609f82..574141293409522be8fc97b393f009d623c744fa 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1131,7 +1131,7 @@ generate_pkgconfig_file() ################## set(CPACK_SOURCE_GENERATOR "TGZ") set(CPACK_PACKAGE_NAME "chameleon") -set(CPACK_PACKAGE_DESCRIPTION_FILE ${CMAKE_CURRENT_SOURCE_DIR}/README.md) +set(CPACK_PACKAGE_DESCRIPTION_FILE ${CMAKE_CURRENT_SOURCE_DIR}/README.org) set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "Chameleon is a C library providing parallel algorithms to perform BLAS/LAPACK " " operations exploiting fully modern architectures.") set(CHAMELEON_VERSION_PATCH ${CHAMELEON_VERSION_MICRO}) @@ -1140,7 +1140,7 @@ set(CPACK_PACKAGE_FILE_NAME "${CPACK_PACKAGE_NAME}-${CPACK_PACKAGE_VERSION}") set(CPACK_SOURCE_PACKAGE_FILE_NAME "${CPACK_PACKAGE_NAME}-${CPACK_PACKAGE_VERSION}") set(CPACK_PACKAGE_VENDOR "Inria") set(CPACK_PACKAGE_CONTACT "morse-devel@lists.gforge.inria.fr") -set(CPACK_RESOURCE_FILE_README ${CMAKE_CURRENT_SOURCE_DIR}/README.md) +set(CPACK_RESOURCE_FILE_README ${CMAKE_CURRENT_SOURCE_DIR}/README.org) set(CPACK_RESOURCE_FILE_LICENSE ${CMAKE_CURRENT_SOURCE_DIR}/LICENCE.txt) set(CPACK_SOURCE_IGNORE_FILES "plasma-conversion;build;.cproject;.settings;.dir-locals.el;.project;.pydevproject;.svn;.git;.gitmodules;.gitlab-ci.yml") include(CPack) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md deleted file mode 100644 index b2fd3dba263bc1ec30415efd75ce9bd421496f14..0000000000000000000000000000000000000000 --- a/CONTRIBUTING.md +++ /dev/null @@ -1,60 +0,0 @@ -# To contribute to the project, you need to do it through pull/merge request - -First you need to fork the repository into your own account. You can do that simply by clicking the fork button on the gitlab interface. - -https://gitlab.inria.fr/solverstack/chameleon/forks/new - -Then, clone the repository on your laptop: -``` -#!shell -git clone git@gitlab.inria.fr:username/forkname.git -``` - -Once this is done, you can setup the chameleon repository as the upstream of your clone to simplify the update of your fork repository. -``` -#!shell -git remote add upstream git@gitlab.inria.fr:solverstack/chameleon.git -``` - -To update your fork with the upstream chameleon's state: -``` -#!shell -git pull upstream master -git push -u origin master -``` - -Now, you have your repository configured, and you want to create a new pull request. The first step is to create a branch from the HEAD of the your fork repository. -``` -#!shell -git branch your_branch_name -git checkout your_branch_name -``` - -Apply your modifications in your branch. Then, you need to push this branch on your online repository -``` -#!shell -git push -f origin your_branch_name -``` - -or without -f, if the branch already exists online, and you just want to update it. - -Once your branch is online, on the gitlab interface, go to the branches webpage, select the branch you want to push as a merge request, and push the button !!! - -***Be careful to check the 'close after merge' check box, and to push to the solverstack/chameleon repository*** By default the checkbox is not checked, and the default repository is your fork. - - -# To review locally a private pull request submitted by someone else - -Get the patch from the pull request (Need to update that !!!! Coming from bitbucket) -``` -#!shell -curl https://bitbucket.org/api/2.0/repositories/icldistcomp/parsec/pullrequests/#PR/patch > pr#PR.patch -``` - -Than apply the patch on your local copy - -``` -#!shell - -git apply pr#PR.patch -``` diff --git a/CONTRIBUTING.org b/CONTRIBUTING.org new file mode 100644 index 0000000000000000000000000000000000000000..705c6d1ff83f0b34e82aa59d826343fe979cc8d5 --- /dev/null +++ b/CONTRIBUTING.org @@ -0,0 +1,88 @@ +* To contribute to the project, you need to do it through merge request + + First you need to fork the repository into your own account. You can + do that simply by clicking the fork button on the gitlab interface. + + https://gitlab.inria.fr/solverstack/chameleon/forks/new + + Then, clone the repository on your laptop: + #+begin_src sh + git clone git@gitlab.inria.fr:username/forkname.git + #+end_src + + Once this is done, you can setup the chameleon repository as the + upstream of your clone to simplify the update of your fork + repository. + #+begin_src sh + git remote add upstream git@gitlab.inria.fr:solverstack/chameleon.git + #+end_src + + To update your fork with the upstream chameleon's state: + #+begin_src sh + git pull upstream master + git push -u origin master + #+end_src + + Now, you have your repository configured, and you want to create a + new pull request. The first step is to create a branch from the HEAD + of the your fork repository. + + #+begin_src sh + git branch your_branch_name + git checkout your_branch_name + #+end_src + + Apply your modifications in your branch. Then, you need to push this + branch on your online repository + #+begin_src sh + git push -f origin your_branch_name + #+end_src + or without -f, if the branch already exists online, and you just + want to update it. + + Once your branch is online, on the gitlab interface, go to the + branches webpage, select the branch you want to push as a merge + request, and push the button !!! + + *Be careful to check the 'close after merge' check box, and to push + to the solverstack/chameleon repository*. By default the checkbox + may not be checked, and the default repository is your fork. + + If the pull request is made to fix an issue, please name the branch + "issueXX" so it is automatically linked to the issue. In addition, + please add "fix issue #xx" in the comment of the pull request to + automatically close the issue when the PR is merged. + +** Rebase on top of 'master' + + In some cases your "feature" branch you want to merge into "master" + has a long life span so that your branch and the master branch + could make some conflicts. To avoid having to handle the possible + conflicts at *merge request* time, please rebase your "feature" on + top of "master" before pushing the button *merge request*. + + To do that, just go at the HEAD of your "feature" branch and rebase + #+begin_src sh + git checkout feature + git rebase master + #+end_src + + Then force to push on your origin + #+begin_src sh + git push --force origin feature + #+end_src + + Then push the button *merge request*. + +* To review locally a private pull request submitted by someone else + + Get the patch from the pull request (Need to update that !!!! + Coming from bitbucket) + #+begin_src sh + curl https://bitbucket.org/api/2.0/repositories/icldistcomp/parsec/pullrequests/#PR/patch > pr#PR.patch + #+end_src + + Then apply the patch on your local copy + #+begin_src sh + git apply pr#PR.patch + #+end_src diff --git a/README.md b/README.md deleted file mode 100644 index e6fa51cfbf2a0912336b1c3d6e0950979460b4ac..0000000000000000000000000000000000000000 --- a/README.md +++ /dev/null @@ -1,120 +0,0 @@ -Chameleon: A dense linear algebra software for heterogeneous architectures -==================== - -Chameleon is a C library providing parallel algorithms to perform -BLAS/LAPACK operations exploiting fully modern architectures. - -Chameleon dense linear algebra software relies on sequential -task-based algorithms where sub-tasks of the overall algorithms are -submitted to a Runtime system. Such a system is a layer between the -application and the hardware which handles the scheduling and the -effective execution of tasks on the processing units. A Runtime system -such as [StarPU](http://starpu.gforge.inria.fr/) is able to manage -automatically data transfers between not shared memory area -(CPUs-GPUs, distributed nodes). - -This kind of implementation paradigm allows to design high performing -linear algebra algorithms on very different type of architecture: -laptop, many-core nodes, CPUs-GPUs, multiple nodes. For example, -Chameleon is able to perform a Cholesky factorization -(double-precision) at 80 TFlop/s on a dense matrix of order 400 000 -(i.e. 4 min). Chameleon is a sub-project of -[MORSE](http://icl.cs.utk.edu/morse/) specifically dedicated to dense -linear algebra. - -Get Chameleon ---------------------- - -To use last development states of Chameleon, please clone the master -branch. Note that Chameleon contains a `git submodule` **morse_cmake**. -To get sources please use these commands: - - # if git version >= 1.9 - git clone --recursive git@gitlab.inria.fr:solverstack/chameleon.git - cd chameleon - # else - git clone git@gitlab.inria.fr:solverstack/chameleon.git - cd chameleon - git submodule init - git submodule update - -Last releases of Chameleon are hosted on the -[gforge.inria.fr](https://gforge.inria.fr/frs/?group_id=2884) for now. -Future releases will be available on this gitlab project. - -Documentation ---------------------- - -There is no up-to-date documentation of Chameleon. We would like to -provide a doxygen documentation hosted on -[gitlab](https://about.gitlab.com/2016/04/07/gitlab-pages-setup/) in -the future. - -The documentation of Chameleon's last release is available here: -[chameleon-0.9.1 -documentation](http://morse.gforge.inria.fr/chameleon/0.9.1/chameleon_users_guide-0.9.1.html) - -Installation ---------------------- - -### Build and install with CMake - -Chameleon can be built using [CMake](https://cmake.org/). This -installation requires to have some library dependencies already -installed on the system. - -Please refer to the -[chameleon-0.9.1](http://morse.gforge.inria.fr/chameleon/0.9.1/chameleon_users_guide-0.9.1.html#Installing-CHAMELEON) -to get configuration information. - -### Distribution of Chameleon -To get support to install a full distribution (Chameleon + -dependencies) we encourage users to use the morse branch of -**Spack**. - -Please read these documentations: - -* [Spack Morse](http://morse.gforge.inria.fr/spack/spack.html). -* [Section Chameleon](http://morse.gforge.inria.fr/spack/spack.html#sec-2-1). - -Get involved! ---------------------- - -### Mailing list - -TODO - -### Contributions - -https://gitlab.inria.fr/solverstack/chameleon/blob/master/CONTRIBUTING.md - -### Authors - -First, since the Chameleon library started as an extension of the PLASMA library -to support multiple runtime systems, all developpers of the PLASMA library are -developpers of the Chameleon library. - -The following people contributed to the development of Chameleon: - * Emmanuel Agullo, PI - * Olivier Aumage - * Cedric castagnede - * Terry Cojean - * Mathieu Faverge, PI - * Nathalie Furmento - * Reazul Hoque, PaRSEC support - * Gregoire Pichon, Two-sided algorithms - * Florent Pruvost, PI, CMake and Spack - * Marc Sergent - * Guillaume Sylvand - * Samuel Thibault, StarPU support - * Omar Zenati - -If we forgot your name, please let us know that we can fix that mistake. - -### Citing Chameleon - -TODO - -### Licence - -https://gitlab.inria.fr/solverstack/chameleon/blob/master/LICENCE.txt diff --git a/README.org b/README.org new file mode 100644 index 0000000000000000000000000000000000000000..b9f1dacaa43e3e8e08a9c3291de92bcb3b5ee527 --- /dev/null +++ b/README.org @@ -0,0 +1,154 @@ +#+TITLE: Chameleon: A dense linear algebra software for heterogeneous architectures +#+LANGUAGE: en +#+OPTIONS: H:3 num:t \n:nil @:t ::t |:t _:nil ^:nil -:t f:t *:t <:t +#+OPTIONS: TeX:t LaTeX:t skip:nil d:nil pri:nil tags:not-in-toc html-style:nil + +Chameleon is a C library providing parallel algorithms to perform +BLAS/LAPACK operations exploiting fully modern architectures. + +Chameleon dense linear algebra software relies on sequential +task-based algorithms where sub-tasks of the overall algorithms are +submitted to a Runtime system. Such a system is a layer between the +application and the hardware which handles the scheduling and the +effective execution of tasks on the processing units. A Runtime system +such as [[http://starpu.gforge.inria.fr/][StarPU]] is able to manage automatically data transfers between +not shared memory area (CPUs-GPUs, distributed nodes). + +This kind of implementation paradigm allows to design high performing +linear algebra algorithms on very different type of architecture: +laptop, many-core nodes, CPUs-GPUs, multiple nodes. For example, +Chameleon is able to perform a Cholesky factorization +(double-precision) at 80 TFlop/s on a dense matrix of order 400 000 +(i.e. 4 min). Chameleon is a sub-project of [[http://icl.cs.utk.edu/morse/][MORSE]] specifically +dedicated to dense linear algebra. + +* Get Chameleon + + To use last development states of Chameleon, please clone the master + branch. Note that Chameleon contains a ~git submodule~ *morse_cmake*. + To get sources please use these commands: + + #+begin_src sh + # if git version >= 1.9 + git clone --recursive git@gitlab.inria.fr:solverstack/chameleon.git + cd chameleon + # else + git clone git@gitlab.inria.fr:solverstack/chameleon.git + cd chameleon + git submodule init + git submodule update + #+end_src + + Last releases of Chameleon are hosted on the [[https://gforge.inria.fr/frs/?group_id=2884][gforge.inria.fr]] for + now. Future releases will be available on this gitlab project. + +* Documentation + + There is no up-to-date documentation of Chameleon. We would like to + provide a doxygen documentation hosted on [[https://about.gitlab.com/2016/04/07/gitlab-pages-setup/][gitlab]] in the + future. Please refer to the section 2.1 of [[file:READMEDEV.org][READMEDEV]] to get + information about the documentation generation. + + The documentation of Chameleon's last release is available here: + [[http://morse.gforge.inria.fr/chameleon/0.9.1/chameleon_users_guide-0.9.1.html][chameleon-0.9.1 documentation]]. + +** For developers + + [[file:READMEDEV.org][READMEDEV]] + +* Installation + +** Distribution of Chameleon + + To get support to install a full distribution (Chameleon + + dependencies) we encourage users to use the morse branch of *Spack*. + + Please read these documentations: + + * [[http://morse.gforge.inria.fr/spack/spack.html][Spack Morse]] + * [[http://morse.gforge.inria.fr/spack/spack.html#sec-2-1][Section Chameleon]] + +*** Usage example for a simple distribution of Chameleon + + #+begin_src sh + git clone https://github.com/solverstack/spack.git + . ./spack/share/spack/setup-env.sh + spack install -v chameleon + # chameleon is installed here: + `spack location -i chameleon` + #+end_src + +** Build and install with CMake + + Chameleon can be built using [[https://cmake.org/][CMake]]. This installation requires to + have some library dependencies already installed on the system. + + Please refer to [[http://morse.gforge.inria.fr/chameleon/0.9.1/chameleon_users_guide-0.9.1.html#Installing-CHAMELEON][chameleon-0.9.1]] to get configuration information. + +* Get involved! + +** Mailing list + + To contact the developers send an email to + [[mailto:morse-devel@lists.gforge.inria.fr][morse-devel@lists.gforge.inria.fr]] + +** Contributions + + [[file:CONTRIBUTING.org][CONTRIBUTING]] + +* Authors + + First, since the Chameleon library started as an extension of the + PLASMA library to support multiple runtime systems, all developpers + of the PLASMA library are developpers of the Chameleon library. + + The following people contributed to the development of Chameleon: + * Emmanuel Agullo, PI + * Olivier Aumage + * Cedric castagnede + * Terry Cojean + * Mathieu Faverge, PI + * Nathalie Furmento + * Reazul Hoque, PaRSEC support + * Gregoire Pichon, Two-sided algorithms + * Florent Pruvost, PI, CMake and Spack + * Marc Sergent + * Guillaume Sylvand + * Samuel Thibault, StarPU support + * Omar Zenati + + If we forgot your name, please let us know that we can fix that mistake. + +* Citing Chameleon + +Feel free to use the following publications to reference Chameleon: + + * Original paper that initiated Chameleon and the principles: + - Agullo, Emmanuel and Augonnet, Cédric and Dongarra, Jack and + Ltaief, Hatem and Namyst, Raymond and Thibault, Samuel and Tomov, + Stanimire, *Faster, Cheaper, Better -- a Hybridization Methodology + to Develop Linear Algebra Software for GPUs*, /GPU Computing Gems/, + [[https://hal.inria.fr/inria-00547847][First Online: 17 December 2010]]. + * Design of the QR algorithms: + - Agullo, Emmanuel and Augonnet, Cédric and Dongarra, Jack and + Faverge, Mathieu and Ltaief, Hatem and Thibault, Samuel an + Tomov, Stanimire, *QR Factorization on a Multicore Node Enhanced + with Multiple GPU Accelerators*, /25th IEEE International Parallel + & Distributed Processing Symposium/, [[https://hal.inria.fr/inria-00547614][First Online: 16 December + 2010]]. + * Design of the LU algorithms: + - Agullo, Emmanuel and Augonnet, Cédric and Dongarra, Jack and + Faverge, Mathieu and Langou, Julien and Ltaief, Hatem and Tomov, + Stanimire, *LU Factorization for Accelerator-based Systems*, + /9th ACS/IEEE International Conference on Computer Systems and + Applications (AICCSA 11)/, [[https://hal.inria.fr/hal-00654193][First Online: 21 December 2011]]. + * Regarding distributed memory: + - Agullo, Emmanuel and Aumage, Olivier and Faverge, Mathieu and + Furmento, Nathalie and Pruvost, Florent and Sergent, Marc and + Thibault, Samuel, *Achieving High Performance on Supercomputers + with a Sequential Task-based Programming Model*, /Research Report/, + [[https://hal.inria.fr/hal-01332774][First Online: 16 June 2016]]. + +* Licence + + [[file:LICENCE.txt][LICENCE]] diff --git a/READMEDEV.org b/READMEDEV.org new file mode 100644 index 0000000000000000000000000000000000000000..cdaefe4fe096473bff0a9c6ccea9004e9ac943d8 --- /dev/null +++ b/READMEDEV.org @@ -0,0 +1,103 @@ +#+TITLE: README for developers +#+LANGUAGE: en +#+OPTIONS: H:3 num:t \n:nil @:t ::t |:t _:nil ^:nil -:t f:t *:t <:t +#+OPTIONS: TeX:t LaTeX:t skip:nil d:nil pri:nil tags:not-in-toc html-style:nil + +This page is dedicated to rules and conventions that Chameleon's +developers must follow and that should be read by contributors. + +* Gitlab flow: how to contribute to Chameleon + + Please read and follow guidelines given in the [[file:CONTRIBUTING.org][CONTRIBUTING file]]. + +** Update submodules + + Chameleon git project depends on a "submodule" git, located in + cmake_modules/morse_cmake and hosted here + https://gitlab.inria.fr/solverstack/morse_cmake. + + To update this submodule to the last development state, follow + these steps: + + #+begin_src sh + git submodule update --remote cmake_modules/morse_cmake + git commit cmake_modules/morse_cmake -m "update morse_cmake submodule" + git push --recurse-submodules=check + #+end_src + +* Documentation + <<sec:doc>> +** Generate the documentation + +*** Prerequisites + + To generate the documentation you need to have [[http://www.stack.nl/~dimitri/doxygen/][Doxygen]] and + [[https://www.gnu.org/software/texinfo/][Texinfo]] installed on your system. + + For example, on Debian systems: + #+begin_src sh + sudo apt install doxygen texinfo + #+end_src + +*** configure + make documentation + + Enter into the Chameleon's source root directory and configure + with *CHAMELEON_ENABLE_DOCS=ON*, then generate the documentation + with ~make docs~ + + #+begin_src sh + cd chameleon + mkdir build && cd build + cmake .. -DCHAMELEON_ENABLE_DOCS=ON + make docs + #+end_src + +** Rules about source code documentation + + Please refer to this file for the documentation guidelines [[file:docs/doxygen/README.org][README]]. + +* Naming and writting conventions + + Chameleon library started as an extension of the PLASMA library so + that code naming and writting conventions should follow [[https://bitbucket.org/icl/plasma][PLASMA]] ones. + +* Packaging + + A Chameleon's release is a source package, of the form + chameleon-major.minor.patch.tar.gz, which: + 1) has been properly tested, + 2) contains a generated documentation corresponding to the released version, + 3) has an up-to-date ChangeLog file, + 4) is published on internet. + +** Test Chameleon before packaging + + TODO - Write the way we could systematically test Chameleon before + packaging, for example writting a script (generated from this + org-mode file) to be used on PlaFRIM plus some specific ctest + tests. + +** Source tarball generation + + This step requires to generate the [[sec:doc][documentation]]. + + #+begin_src sh + export CHAMELEON_ROOT=/path/to/chameleon/sources/to/be/released + cmake $CHAMELEON_ROOT -DCHAMELEON_ENABLE_DOCS=ON + make docs && cp docs/texinfo/users_guide.pdf $CHAMELEON_ROOT && make package_source + #+end_src + + A tarball chameleon-major.minor.patch.tar.gz should be generated + and contains the users_guide documentation. + +** Publish the release on internet + + A git tag must be first created, for example + #+begin_src sh + git tag -a v1.0.0 -m 'Version 1.0.0' + git push --tags + #+end_src + + Then in the Chameleon *Tags* tab, + https://gitlab.inria.fr/solverstack/chameleon/tags, edit the + release notes and attach the tarball previously generated. diff --git a/docs/doxygen/README.org b/docs/doxygen/README.org new file mode 100644 index 0000000000000000000000000000000000000000..b9d930b754d3cc649ddc6f16f5050045c4f4aebf --- /dev/null +++ b/docs/doxygen/README.org @@ -0,0 +1,178 @@ +#+TITLE: Doxygen Documentation + +Document all functions prototypes, modules, macros, structures and +variables. Doxygen is not very flexible: read this documentation and +follow the guidelines. Remember to generate the documentation, and +check that it appears as expected. + +The file ~xxxx.c~ has examples of all features used in the +documentation. + +* Functions Prototype Documentation + To document a function, use the following format: + + #+begin_src c + /** + ******************************************************************************* + * + * @ingroup name_of_parent_module + * + * @brief Single line explanation of the function + * + * Multiple lines explaining the detailed function behavior + * exceptions, preconditions, algorithm, etc. + * + ******************************************************************************* + * + * @param[inout] name_of_parameter + * Explanation of the parameter + * + * @param[in] name_of_parameter + * Explanation of the parameter + * + ******************************************************************************* + * + * @return Explain what is returned by the function + * + * or + * + * @retval value1 explanation of the returned value and in which case it is returned + * @retval value2 ... + * + *******************************************************************************/ + int + function(int param1, int *param2) + { + } + #+end_src + + ~[in]~ *must* be attached to ~@param~, and *it must* be /lower + case/. Otherwise, Doxygen thinks the name of the parameter is ~[IN]~. + + Blank lines are /important/: there must be a blank line between ~@brief~ + and the ~details~ section. + +* Structures documentation + + Use the following format: + + #+begin_src c + /** + * @ingroup name_of_parent_module + + * @brief Single line explanation of the structure + * + * General description of the structure + */ + struct name_s { + type1 field1; /**< What is stored in this field */ + type2 field2; /**< What is stored in this field */ + }; + #+end_src + + It is important to use the ~/**<~ marker, or the description of the + field is not imported in an array representation of the data + structure. + +* Macros Documentation + + Use the following format: + + #+begin_src c + /** + * @ingroup name_of_parent_module + * + * @brief Single line explanation of the macro + * + * General description of the macro if needed + */ + #define macro + #+end_src + + Without the ~@brief~, the documentation does not appear just under the + macro definition. All macro definitions are output directly in the + generated documentation. + +* Variable Documentation + + Use the following format: + + #+begin_src c + /** + * @ingroup name_of_parent_module + * + * @brief Single line explanation of the variable + * + * General description of the variable if needed + */ + int var; + #+end_src + + Without the ~@brief~, the documentation does not appear just under the + variable definition. + +* Modules Documentation + + General documentation on how the functions of a same module are used + together belong to the Module documentation section. Modules are + defined with the following format in the groups.dox file: + + #+begin_src c + /** + * @defgroup name_of_module Readable Name Of Module + * @ingroup name_of_parent_module + * @{ + * + * @brief One line description of module + * + * Multiple lines description of module + * Can use markdown language features, like + * sharp for section headers, etc. + */ + ... + /** @} */ + #+end_src + + All functions between ~@{~ and ~@}~ belong to the same Module. Most + modules have already been created, look for defgroup. Some of them + are defined in the file ~groups.dox~, because they span over multiple + files in the source code. + +* DOs and DO NOTs + +** Functions Prototypes + *DO* comment all functions at their function definition (typically .c + file), or, if they are static functions used in a single file, + before the function definition. + + *DO NOT* comment /both/ the function definition and the function + prototype, or the documentation of the function will be duplicated. + +** Doxygen Comments + All ~/** ... */~ comments are interpreted by Doxygen as to be added + to the documentation. + + If you enter a ~/** ... */~ comment without Doxygen commands in it, + all the text of the comment will be appended to the next Doxygen + group. + + So, *DO NOT* start comments inside the code with ~/**~, despite the + nice coloring of your editor. All these comments make no sense once + they are appended to the next function or structure documentation. + + *DO* configure your editor to use your preferred coloring scheme for + normal comments :) + +** Doxygen keywords + Any ~@something~ inside a ~/** ... */~ block is interpreted as a + Doxygen keyword. Doxygen stops parsing the entire file if it finds + a keyword it does not know. *DO NOT* use your own keywords, *DO* check + the generated documentation. + +* Modules Structure + All functions, macros, variables should belong to a module. *DO* look + at the documentation to see the structure, and if you document a + function, be sure that it belongs to the right module. *DO NOT* just + document a function without enclosing it inside a ~@addtogroup @ + ... @}~ group, or without adding a ~@ingroup group_name~ before the + function definition.