-
Notifications
You must be signed in to change notification settings - Fork 20
structure overview
-
contrib
holds third party libraries required by the project. These include things like Catch2, Clara, and a locally-built BLAS/Lapack if requested by the user at configure time. -
src
holds all of the component file triads, as well as themain.cpp
that containsmain()
for the ASGarD binary. -
testing
contains support files for code testing, including the data files holding golden values for comparison, the matlab scripts to generate the golden values, and any global auxiliary functions needed for testing.
Having components makes adding new code to the CMake system fairly straightforward. There is a list of all components defined via set (components ...
, which among other things allows the source files to be added and the tests to be built, all automatically.
To add a new component:
- ensure that the component named "foo" consists of exactly three files in the top-level of the
src/
directory namedfoo.hpp
,foo.cpp
, andfoo_tests.cpp
. - add the component name to the component list, in alphabetical order.
- add a
target_link_libraries
entry for the component (again, alphabetically), defining its private/public/interface relations to other components. - if the component is directly used by the
main.cpp
file, then add the component name to the link list defined byset (main_app_link_deps ...)
The interface of the component, included exported template specializations via extern template
.
-
first line is
#pragma once
-
The component header should only
#include
what is needed to define the interface. The implementation (.cpp
) file will take care of its own#includes
. -
any necessary
extern template
declarations come at the very bottom of the header.
The internal implementation of the component, including any explicitly instantiated templates that are needed.
-
first line is always the
#include
for the component's own header, followed by a blank line (so that clang-format does not reorder into the list of the remaining#include
s) -
remaining
#include
s are listed together with no blank lines, and clang-format will reorder them as necessary. -
any necessary explicit template instantiations come at the very bottom of the file.
Holds all (and only) unit tests of the component contained in Catch TEST_CASE(){}
blocks.