## Compilation using qmake Even though the application does not use QT, it can be compiled using qmake, which provides great integration with QtCreator and is therefore indended for code development. The qmake build system is currently also used for unit testing and CI. The only required dependency is the wxWidgets library. Optional dependencies are: - Catch2 - C++ unit testing framework, only needed to compile and run unit tests - Intel Threading Building Blocks - generally improves performance of the code (enabled by `use_tbb`) - OpenMP - alternative to TBB, however it is currently an inferior option (enabled by `use_openmp`) - Eigen - provides additional methods for setting up initial conditions (enabled by `use_eigen`) - ChaiScript allows to read and modify particle data from a script (enabled by `use_chaiscript`) - OpenVDB - used for converting particles to volumetric data, usable by renderers (enabled by `use_vdb`) - HDF5 - allows reading files generated by miluphcuda code (enabled by `use_hdf5`) The compilation should be as easy as ```bash mkdir build_version cd build_version qmake CONFIG+=version ../sph.pro make ``` where *version* can be one of: - *release* - full-speed version of the code. This is the default option if no build version is specified - *debug* - debugging build with no optimizations (SLOW) - *assert* - build with all optimizations and additional sanity checks - *profile* - full-speed build that measures durations of various segments of the code and print run statistics Use different build directory for each version! By default, OpenSPH uses a custom thread pool for parallelization. It is possible to use Intel TBB library instead, by adding `use_tbb` flag: ```bash qmake CONFIG+=version CONFIG+=use_tbb ../sph.pro ``` The project `sph.pro` builds command-line launcher and the GUI application that allows to set up and run simulations, as well as view previously saved results. To further build the code examples, run: ```bash cd build_version qmake CONFIG+=version ../examples.pro make ```