Skip to content
Snippets Groups Projects
  • John Biddiscombe's avatar
    CMake fixes (#137) · 71aa4b18
    John Biddiscombe authored
    * Fix CMakeLists to handle build as a subproject
    
    When several CMake generated projects are build together, it is common
    practice to have a 'superproject' CMakeLists that uses
      add_subdir(proj1)
      add_subdir(proj2)
      ...
    where each subproject is a self contained CMake based project
    (Example proj1=HPX, proj2=nestmc, proj3=another, ...)
    
    CMAKE_SOURCE_DIR always points to the top level directory which
    is the superproject dir in this case, whereas PROJECT_SOURCE_DIR
    always points to the root of the current project() in the CMakeLists
    so one shouod use PROJECT_SOURCE_DIR as this gets the relative paths
    correct.
    
    * Add option to turn off auto generation from *.mod files
    
    * Fix #134 : Change CMake WITH_OPTION to NMC_WITH_OPTION, compiler #define to NMC_HAVE_OPTION
    
    1) The user may select an option by saying NMC_WITH_XXX
    
    2) This may trigger CMake to use find_package(...) or setup some
    other variables. CMake can then set variable NMC_HAVE_XXX and add a
    what has actually been used.
    
    3) Code should use #ifdef NMC_HAVE_XXX to check for a feature
    
    Old CMake/define      New CMake                 Compiler #define
    ----------------      ---------                 ----------------
    THREADING_MODEL       NMC_THREAD_MODEL
        WITH_TBB          NMC_WITH_TBB              NMC_HAVE_TBB
        WITH_OMP          NMC_WITH_OMP              NMC_HAVE_OMP
        WITH_SERIAL       NMC_WITH_SERiAL           NMC_HAVE_SERIAL
    
    WITH_MPI              NMC_WITH_MPI              NMC_HAVE_MPI
    WITH_CUDA             NMC_WITH_CUDA             NMC_HAVE_CUDA
    WITH_GPU                                        NMC_HAVE_GPU
    WITH_ASSERTIONS       NMC_WITH_ASSERTIONS       NMC_HAVE_ASSERTIONS
    WITH_TRACE            NMC_WITH_TRACE            NMC_HAVE_TRACE
    WITH_PROFILING        NMC_WITH_PROFILING        NMC_HAVE_PROFILING
    
    Other user visible CMake vars
    -----------------------------
    VECTORIZE_TARGET            -> NMC_VECTORIZE_TARGET
    USE_OPTIIZED_KERNELS        -> NMC_USE_OPTIIZED_KERNELS
    BUILD_VALIDATION_DATA       -> NMC_BUILD_VALIDATION_DATA
    BUILD_JULIA_VALIDATION_DATA -> NMC_BUILD_JULIA_VALIDATION_DATA
    BUILD_NRN_VALIDATION_DATA   -> NMC_BUILD_NRN_VALIDATION_DATA
    VALIDATION_DATA_DIR         -> NMC_VALIDATION_DATA_DIR
    
    Variables such as NMC_THREADING_MODEL and NMC_VECTORIZE_TARGET now use
    enumerated cmake values so you can toggle between them in ccmake gui.
    SYSTEM_TYPE_CRAY/BGQ        -> NMC_SYSTEM_TYPE (Generic/Cray/BGQ)
    
    * Use generator expression for modcc path
    
    Some IDE's (like Xcode for example), override the CMake binary paths
    and add /Debug or /Release etc so rules that have hard coded paths
    to binaries will fail.
    71aa4b18