Skip to content
Snippets Groups Projects
  • Sam Yates's avatar
    Feature/lib install target part i (#506) · ad1c78ab
    Sam Yates authored and Benjamin Cumming's avatar Benjamin Cumming committed
    CMake and build refactoring
    
    *   Use CUDA as first-class language (leading to CMake 3.9 minimum version requirement).
    
    *   Use 'modern CMake' interface libraries for compiler options, include file and library dependency tracking. Interface library targets:
        * `arbor-deps`: compiler options and library requirements for the `libarbor.a` static library, as governed by configure-time options and environment.
        * `arbor-private-headers`: include path for non-installed headers, as required by unit tests and arbor itself.
        * `arbor-aux`: helper classes and utilities used across tests and examples.
        * `ext-json`, `ext-tclap`, `ext-tbb`, `ext-benchmark`, `ext-sphinx_rtd_theme`: externally maintained software that we include (directly or via submodule) in the `ext/` subdirectory.
     
    *   Single static library `libarbor.a` includes all built-in modules and CUDA objects.
    
    *   Simply configuration options:
        *  `ARB_WITH_TRACE`, `ARB_AUTORUN_MODCC_ON_CHANGES` `ARB_SYSTEM_TYPE` removed.
        * External `modcc` is provided by `ARB_MODCC` configuration option; if provided `modcc` is still buildable, but is not included in the default target.
        * `ARB_PRIVATE_TBBLIB`, defaulting to `OFF`, instructs the build to make TBB from the included submodule.
    
    *   Extend `ErrorTarget` functionality to provide a dummy target or an error target based on a condition.
    *   Generate header version defines and library version variables based on git status and project version, via new script `include/git-source-id`.
    *   All generated binaries now placed in `bin/` subdirectory at build.
    *   Install targets installs: public headers (incomplete); static library; `modcc` tool; `lmorpho` executable; `html` documentation (examples, tests and validation data are currently not installed).
    *   Executable targets have had the `.exe` suffix removed; unit tests are labelled `unit` (arbor unit tests), `unit-modcc` (modcc unit tests), `unit-local` (distributed tests with local context), `unit-mpi` (distributed tests with MPI context).
    *   More graceful handling of configure-time detection of `nrniv`, Julia and required Julia modules for validation data generation.
    *   Add `cmake/FindJulia.cmake`, `cmake/FindTBB.cmake`  package finders, and adjust `cmake/FindUnwind.cmake` to use link library-style properties.
    *  Adjust travis script to test `unit-local` and `unit-mpi` if appropriate.
    *  Simply documentation `conf.py`.
    
    Source relocation and reorganization
    
    * All external project sources and files moved to `ext/`.
    * Source code refactoring to decouple library-using code from the configure-time definitions that govern arbor behaviour: removes conditional code in public headers that depends upon `ARB_WITH_X`-type definitions at compile time. Affected code is is in the public interfaces for MPI, the threading implementation, and the profiler.
    * Remove `util/debug.hpp`; split out functionality for pretty-printing from assertion handling.
    * Make FVM cell non-physical voltage check a run-time cell-group parameter.
    * Move spike double buffer implementation to `simulation.cpp`.
    * Make timer utility wrap POSIX `clock_gettime` independent of threading configuration.
    * Make `mpi_error` derive from `system_error` and follow C++11 `system_error` semantics.
    * `EXPECTS` macro replaced by `arb_assert` macro.
    * JSON dependency removed from `libarbor.a` and header files: moved to auxiliary library.
    * Publicly visible macros garner an `ARB_` prefix as required.
    * Move SWC test file to `test/unit` directory.
    * Work-in-progress splitting of public from private includes: as a convention not entirely adhered to as yet, private headers within arbor source are included with `""`, public headers with `<>`.
    
    Modcc interface changes
    
    * Expose via `--namespace` option the functionality that sets the namespace in generated code.
    * Use `--profile` option to add profiler hooks to generated code; uses public function interface directly rather than `PE/PL` macros in order to avoid public `PE` and `PL` defines.
    ad1c78ab