diff --git a/.clang-format b/.clang-format deleted file mode 100644 index 9d8530931..000000000 --- a/.clang-format +++ /dev/null @@ -1,94 +0,0 @@ ---- -Language: Cpp -# BasedOnStyle: Chromium -AccessModifierOffset: -2 -AlignAfterOpenBracket: Align -AlignConsecutiveAssignments: false -AlignConsecutiveDeclarations: false -AlignEscapedNewlinesLeft: true -AlignOperands: true -AlignTrailingComments: true -AllowAllParametersOfDeclarationOnNextLine: false -AllowShortBlocksOnASingleLine: false -AllowShortCaseLabelsOnASingleLine: false -AllowShortFunctionsOnASingleLine: false -AllowShortIfStatementsOnASingleLine: false -AllowShortLoopsOnASingleLine: false -AlwaysBreakAfterDefinitionReturnType: None -AlwaysBreakAfterReturnType: None -AlwaysBreakBeforeMultilineStrings: true -AlwaysBreakTemplateDeclarations: true -BinPackArguments: true -BinPackParameters: false -BraceWrapping: - AfterClass: false - AfterControlStatement: false - AfterEnum: false - AfterFunction: false - AfterNamespace: false - AfterObjCDeclaration: false - AfterStruct: false - AfterUnion: false - BeforeCatch: false - BeforeElse: false - IndentBraces: false -BreakBeforeBinaryOperators: None -BreakBeforeBraces: Attach -BreakBeforeTernaryOperators: true -BreakConstructorInitializersBeforeComma: false -BreakAfterJavaFieldAnnotations: false -BreakStringLiterals: false -ColumnLimit: 100 -CommentPragmas: '^ IWYU pragma:' -ConstructorInitializerAllOnOneLineOrOnePerLine: true -ConstructorInitializerIndentWidth: 4 -ContinuationIndentWidth: 4 -Cpp11BracedListStyle: true -DerivePointerAlignment: false -DisableFormat: false -ExperimentalAutoDetectBinPacking: false -ForEachMacros: [ foreach, Q_FOREACH, BOOST_FOREACH ] -IncludeCategories: - - Regex: '^<.*\.h>' - Priority: 1 - - Regex: '^<.*' - Priority: 2 - - Regex: '.*' - Priority: 3 -IncludeIsMainRegex: '([-_](test|unittest))?$' -IndentCaseLabels: true -IndentWidth: 4 -IndentWrappedFunctionNames: false -KeepEmptyLinesAtTheStartOfBlocks: false -MacroBlockBegin: '' -MacroBlockEnd: '' -MaxEmptyLinesToKeep: 1 -NamespaceIndentation: None -ObjCBlockIndentWidth: 2 -ObjCSpaceAfterProperty: false -ObjCSpaceBeforeProtocolList: false -PenaltyBreakBeforeFirstCallParameter: 1 -PenaltyBreakComment: 300 -PenaltyBreakFirstLessLess: 120 -PenaltyBreakString: 1000 -PenaltyExcessCharacter: 1000000 -PenaltyReturnTypeOnItsOwnLine: 200 -PointerAlignment: Left -ReflowComments: true -SortIncludes: false -SpaceAfterCStyleCast: false -SpaceBeforeAssignmentOperators: true -SpaceBeforeParens: ControlStatements -SpaceInEmptyParentheses: false -SpacesBeforeTrailingComments: 2 -SpacesInAngles: false -SpacesInContainerLiterals: true -SpacesInCStyleCastParentheses: false -SpacesInParentheses: false -SpacesInSquareBrackets: false -Standard: Cpp03 -TabWidth: 8 -UseTab: Never -JavaScriptQuotes: Leave -... - diff --git a/.cmake-format.changes.yaml b/.cmake-format.changes.yaml new file mode 100644 index 000000000..7ff1b0cda --- /dev/null +++ b/.cmake-format.changes.yaml @@ -0,0 +1,6 @@ +additional_commands: + cuda_add_library: + pargs: '*' + flags: ["STATIC", "SHARED", "MODULE", "EXCLUDE_FROM_ALL"] + kwargs: + OPTIONS: '*' diff --git a/.gitmodules b/.gitmodules index efe058a2e..c40f13f63 100644 --- a/.gitmodules +++ b/.gitmodules @@ -10,3 +10,6 @@ [submodule "external/Random123"] path = external/Random123 url = https://github.com/BlueBrain/Random123.git +[submodule "CMake/hpc-coding-conventions"] + path = CMake/hpc-coding-conventions + url = https://github.com/BlueBrain/hpc-coding-conventions.git diff --git a/CMake/AddCLI11Submodule.cmake b/CMake/AddCLI11Submodule.cmake index 5b2185486..0bafee982 100644 --- a/CMake/AddCLI11Submodule.cmake +++ b/CMake/AddCLI11Submodule.cmake @@ -1,13 +1,17 @@ # ============================================================================= -# Copyright (C) 2020 Blue Brain Project +# Copyright (C) 2016-2020 Blue Brain Project # # See top-level LICENSE file for details. # ============================================================================= - include(FindPackageHandleStandardArgs) find_package(FindPkgConfig QUIET) -find_path(CLI11_PROJ NAMES CMakeLists.txt PATHS "${CORENEURON_PROJECT_SOURCE_DIR}/external/CLI11") + +find_path( + CLI11_PROJ + NAMES CMakeLists.txt + PATHS "${CORENEURON_PROJECT_SOURCE_DIR}/external/CLI11") + find_package_handle_standard_args(CLI11 REQUIRED_VARS CLI11_PROJ) if(NOT CLI11_FOUND) @@ -16,8 +20,9 @@ if(NOT CLI11_FOUND) message(FATAL_ERROR "git not found, clone repository with --recursive") endif() message(STATUS "Sub-module CLI11 missing: running git submodule update --init --recursive") - execute_process(COMMAND ${GIT_EXECUTABLE} submodule update --init --recursive -- - ${CORENEURON_PROJECT_SOURCE_DIR}/external/CLI11 - WORKING_DIRECTORY ${CORENEURON_PROJECT_SOURCE_DIR}) + execute_process( + COMMAND + ${GIT_EXECUTABLE} submodule update --init --recursive -- + ${CORENEURON_PROJECT_SOURCE_DIR}/external/CLI11 + WORKING_DIRECTORY ${CORENEURON_PROJECT_SOURCE_DIR}) endif() - diff --git a/CMake/AddMod2cSubmodule.cmake b/CMake/AddMod2cSubmodule.cmake index 5c06c4a16..dd85bdf46 100644 --- a/CMake/AddMod2cSubmodule.cmake +++ b/CMake/AddMod2cSubmodule.cmake @@ -1,13 +1,17 @@ # ============================================================================= -# Copyright (C) 2016-2019 Blue Brain Project +# Copyright (C) 2016-2020 Blue Brain Project # # See top-level LICENSE file for details. # ============================================================================= include(ExternalProject) - find_package(FindPkgConfig QUIET) -find_path(MOD2C_PROJ NAMES CMakeLists.txt PATHS "${CORENEURON_PROJECT_SOURCE_DIR}/external/mod2c") + +find_path( + MOD2C_PROJ + NAMES CMakeLists.txt + PATHS "${CORENEURON_PROJECT_SOURCE_DIR}/external/mod2c") + find_package_handle_standard_args(MOD2C REQUIRED_VARS MOD2C_PROJ) if(NOT MOD2C_FOUND) @@ -16,24 +20,23 @@ if(NOT MOD2C_FOUND) message(FATAL_ERROR "git not found, clone repository with --recursive") endif() message(STATUS "Sub-module mod2c missing : running git submodule update --init --recursive") - execute_process(COMMAND ${GIT_EXECUTABLE} submodule update --init --recursive -- - ${CORENEURON_PROJECT_SOURCE_DIR}/external/mod2c - WORKING_DIRECTORY ${CORENEURON_PROJECT_SOURCE_DIR}) + execute_process( + COMMAND + ${GIT_EXECUTABLE} submodule update --init --recursive -- + ${CORENEURON_PROJECT_SOURCE_DIR}/external/mod2c + WORKING_DIRECTORY ${CORENEURON_PROJECT_SOURCE_DIR}) else() message(STATUS "Using mod2c submodule from ${MOD2C_PROJ}") endif() set(ExternalProjectCMakeArgs - -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} - -DCMAKE_INSTALL_PREFIX=${CMAKE_BINARY_DIR} + -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} -DCMAKE_INSTALL_PREFIX=${CMAKE_BINARY_DIR} -DCMAKE_C_COMPILER=${CORENRN_FRONTEND_C_COMPILER} -DCMAKE_CXX_COMPILER=${CORENRN_FRONTEND_CXX_COMPILER}) -externalproject_add(mod2c - BUILD_ALWAYS - 1 - SOURCE_DIR - ${CORENEURON_PROJECT_SOURCE_DIR}/external/mod2c - GIT_SUBMODULES - CMAKE_ARGS - ${ExternalProjectCMakeArgs}) +ExternalProject_Add( + mod2c + BUILD_ALWAYS 1 + SOURCE_DIR ${CORENEURON_PROJECT_SOURCE_DIR}/external/mod2c + GIT_SUBMODULES + CMAKE_ARGS ${ExternalProjectCMakeArgs}) diff --git a/CMake/AddNmodlSubmodule.cmake b/CMake/AddNmodlSubmodule.cmake index 70e7c77ff..cfa3df1c0 100644 --- a/CMake/AddNmodlSubmodule.cmake +++ b/CMake/AddNmodlSubmodule.cmake @@ -1,12 +1,16 @@ # ============================================================================= -# Copyright (C) 2016-2019 Blue Brain Project +# Copyright (C) 2016-2020 Blue Brain Project # # See top-level LICENSE file for details. # ============================================================================= - find_package(FindPkgConfig QUIET) -find_path(NMODL_PROJ NAMES CMakeLists.txt PATHS "${CORENEURON_PROJECT_SOURCE_DIR}/external/nmodl") + +find_path( + NMODL_PROJ + NAMES CMakeLists.txt + PATHS "${CORENEURON_PROJECT_SOURCE_DIR}/external/nmodl") + find_package_handle_standard_args(NMODL REQUIRED_VARS NMODL_PROJ) if(NOT NMODL_FOUND) @@ -15,12 +19,13 @@ if(NOT NMODL_FOUND) message(FATAL_ERROR "git not found, clone repository with --recursive") endif() message(STATUS "Sub-module nmodl missing : running git submodule update --init --recursive") - execute_process(COMMAND ${GIT_EXECUTABLE} submodule update --init --recursive -- - ${CORENEURON_PROJECT_SOURCE_DIR}/external/nmodl - WORKING_DIRECTORY ${CORENEURON_PROJECT_SOURCE_DIR}) + execute_process( + COMMAND + ${GIT_EXECUTABLE} submodule update --init --recursive -- + ${CORENEURON_PROJECT_SOURCE_DIR}/external/nmodl + WORKING_DIRECTORY ${CORENEURON_PROJECT_SOURCE_DIR}) else() message(STATUS "Using nmodl submodule from ${NMODL_PROJ}") endif() add_subdirectory(${CORENEURON_PROJECT_SOURCE_DIR}/external/nmodl) - diff --git a/CMake/AddRandom123Submodule.cmake b/CMake/AddRandom123Submodule.cmake index 043453751..6178ac214 100644 --- a/CMake/AddRandom123Submodule.cmake +++ b/CMake/AddRandom123Submodule.cmake @@ -1,13 +1,17 @@ # ============================================================================= -# Copyright (C) 2020 Blue Brain Project +# Copyright (C) 2016-2020 Blue Brain Project # # See top-level LICENSE file for details. # ============================================================================= - include(FindPackageHandleStandardArgs) find_package(FindPkgConfig QUIET) -find_path(Random123_PROJ NAMES LICENSE PATHS "${CORENEURON_PROJECT_SOURCE_DIR}/external/Random123") + +find_path( + Random123_PROJ + NAMES LICENSE + PATHS "${CORENEURON_PROJECT_SOURCE_DIR}/external/Random123") + find_package_handle_standard_args(Random123 REQUIRED_VARS Random123_PROJ) if(NOT Random123_FOUND) @@ -16,8 +20,9 @@ if(NOT Random123_FOUND) message(FATAL_ERROR "git not found, clone repository with --recursive") endif() message(STATUS "Sub-module Random123 missing: running git submodule update --init --recursive") - execute_process(COMMAND ${GIT_EXECUTABLE} submodule update --init --recursive -- - ${CORENEURON_PROJECT_SOURCE_DIR}/external/Random123 - WORKING_DIRECTORY ${CORENEURON_PROJECT_SOURCE_DIR}) + execute_process( + COMMAND + ${GIT_EXECUTABLE} submodule update --init --recursive -- + ${CORENEURON_PROJECT_SOURCE_DIR}/external/Random123 + WORKING_DIRECTORY ${CORENEURON_PROJECT_SOURCE_DIR}) endif() - diff --git a/CMake/CMakeDetermineISPCCompiler.cmake b/CMake/CMakeDetermineISPCCompiler.cmake index 0acd1d655..20c6f1fe3 100644 --- a/CMake/CMakeDetermineISPCCompiler.cmake +++ b/CMake/CMakeDetermineISPCCompiler.cmake @@ -1,16 +1,15 @@ # ============================================================================= -# Copyright (C) 2016-2019 Blue Brain Project +# Copyright (C) 2016-2020 Blue Brain Project # # See top-level LICENSE file for details. # ============================================================================= -# Find the compiler +# Find the ISPC compiler find_program( - CMAKE_ISPC_COMPILER - NAMES $ENV{ISPC} ispc - PATHS ENV PATH - DOC "ISPC compiler" -) + CMAKE_ISPC_COMPILER + NAMES $ENV{ISPC} ispc + PATHS ENV PATH + DOC "ISPC compiler") mark_as_advanced(CMAKE_ISPC_COMPILER) set(CMAKE_ISPC_SOURCE_FILE_EXTENSIONS ispc) diff --git a/CMake/CMakeISPCInformation.cmake b/CMake/CMakeISPCInformation.cmake index 0d1e04480..3f15411f4 100644 --- a/CMake/CMakeISPCInformation.cmake +++ b/CMake/CMakeISPCInformation.cmake @@ -8,6 +8,6 @@ set(CMAKE_INCLUDE_FLAG_ISPC "-I") if(NOT CMAKE_ISPC_COMPILE_OBJECT) - set(CMAKE_ISPC_COMPILE_OBJECT " -o ") + set(CMAKE_ISPC_COMPILE_OBJECT " -o ") endif() set(CMAKE_ISPC_INFORMATION_LOADED 1) diff --git a/CMake/CMakeTestISPCCompiler.cmake b/CMake/CMakeTestISPCCompiler.cmake index d2990cf1a..64ef987fc 100644 --- a/CMake/CMakeTestISPCCompiler.cmake +++ b/CMake/CMakeTestISPCCompiler.cmake @@ -1,30 +1,36 @@ if(CMAKE_ISPC_COMPILER_FORCED) - # The compiler configuration was forced by the user. - # Assume the user has configured all compiler information. + # ~~~ + # The compiler configuration was forced by the user. Assume the user has + # configured all compiler information. + # ~~~ set(CMAKE_ISPC_COMPILER_WORKS TRUE) return() endif() -set(CMAKE_ISPC_COMPILER_WORKS 1 CACHE INTERNAL "") +set(CMAKE_ISPC_COMPILER_WORKS + 1 + CACHE INTERNAL "") -# Remove any cached result from an older CMake version. -# We now store this in CMakeISPCCompiler.cmake. +# Remove any cached result from an older CMake version. We now store this in +# CMakeISPCCompiler.cmake. unset(CMAKE_ISPC_COMPILER_WORKS CACHE) -# This file is used by EnableLanguage in cmGlobalGenerator to -# determine that the selected ispc compiler can actually compile -# and the most basic program. If not, a fatal error -# is set and cmake stops processing commands and will not generate -# any makefiles or projects. +# ~~~ +# This file is used by EnableLanguage in cmGlobalGenerator to determine that the selected +# ispc compiler can actually compile and the most basic program. If not, a fatal error is +# set and cmake stops processing commands and will not generate any makefiles or projects. +# ~~~ if(NOT CMAKE_ISPC_COMPILER_WORKS) - PrintTestCompilerStatus("ISPC" "") + printtestcompilerstatus("ISPC" "") file(WRITE ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/kernel.ispc - "export uniform int kernel(uniform int){return 0;}\n") + "export uniform int kernel(uniform int){return 0;}\n") - execute_process(COMMAND ${CMAKE_ISPC_COMPILER} "${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/kernel.ispc" - OUTPUT_VARIABLE __CMAKE_ISPC_COMPILER_OUTPUT - ERROR_VARIABLE __CMAKE_ISPC_COMPILER_ERROR - RESULT_VARIABLE ISPC_RESULT) + execute_process( + COMMAND ${CMAKE_ISPC_COMPILER} + "${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/kernel.ispc" + OUTPUT_VARIABLE __CMAKE_ISPC_COMPILER_OUTPUT + ERROR_VARIABLE __CMAKE_ISPC_COMPILER_ERROR + RESULT_VARIABLE ISPC_RESULT) if(${ISPC_RESULT}) set(CMAKE_ISPC_COMPILER_WORKS 0) @@ -37,25 +43,28 @@ if(NOT CMAKE_ISPC_COMPILER_WORKS) set(ISPC_TEST_WAS_RUN 1) endif() +# Print compiler status if(NOT CMAKE_ISPC_COMPILER_WORKS) - PrintTestCompilerStatus("ISPC" " -- broken") + printtestcompilerstatus("ISPC" " -- broken") file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeError.log - "Determining if the ISPC compiler works failed with " - "the following output:\n${__CMAKE_ISPC_COMPILER_OUTPUT}\n\n") - string(REPLACE "\n" "\n " _output "${__CMAKE_ISPC_COMPILER_OUTPUT} ${__CMAKE_ISPC_COMPILER_ERROR}") - message(FATAL_ERROR "The ISPC compiler\n \"${CMAKE_ISPC_COMPILER}\"\n" - "is not able to compile a simple test program.\nIt fails " - "with the following output:\n ${_output}\n\n" - "CMake will not be able to correctly generate this project.") + "Determining if the ISPC compiler works failed with " + "the following output:\n${__CMAKE_ISPC_COMPILER_OUTPUT}\n\n") + string(REPLACE "\n" "\n " _output + "${__CMAKE_ISPC_COMPILER_OUTPUT} ${__CMAKE_ISPC_COMPILER_ERROR}") + message( + FATAL_ERROR + "The ISPC compiler\n \"${CMAKE_ISPC_COMPILER}\"\n" + "is not able to compile a simple test program.\nIt fails " + "with the following output:\n ${_output}\n\n" + "CMake will not be able to correctly generate this project.") else() if(ISPC_TEST_WAS_RUN) - PrintTestCompilerStatus("ISPC" " -- works") + printtestcompilerstatus("ISPC" " -- works") file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeOutput.log - "Determining if the ISPC compiler works passed with " - "the following output:\n${__CMAKE_ISPC_COMPILER_OUTPUT}\n\n") + "Determining if the ISPC compiler works passed with " + "the following output:\n${__CMAKE_ISPC_COMPILER_OUTPUT}\n\n") endif() endif() - unset(__CMAKE_ISPC_COMPILER_OUTPUT) unset(__CMAKE_ISPC_COMPILER_ERROR) diff --git a/CMake/ClangFormatHelper.cmake b/CMake/ClangFormatHelper.cmake index 173757f53..692fc3e6b 100644 --- a/CMake/ClangFormatHelper.cmake +++ b/CMake/ClangFormatHelper.cmake @@ -1,5 +1,5 @@ # ============================================================================= -# Copyright (C) 2016-2019 Blue Brain Project +# Copyright (C) 2016-2020 Blue Brain Project # # See top-level LICENSE file for details. # ============================================================================= @@ -17,23 +17,26 @@ if(CLANG_FORMAT_FOUND) file(COPY ${CORENEURON_PROJECT_SOURCE_DIR}/.clang-format DESTINATION ${CMAKE_CURRENT_BINARY_DIR}) # all source files under coreneuron directory - file(GLOB_RECURSE SRC_FILES_FOR_CLANG_FORMAT - ${CORENEURON_PROJECT_SOURCE_DIR}/coreneuron/*.c - ${CORENEURON_PROJECT_SOURCE_DIR}/coreneuron/*.cpp - ${CORENEURON_PROJECT_SOURCE_DIR}/coreneuron/*.h* - ${CORENEURON_PROJECT_SOURCE_DIR}/coreneuron/*.ipp*) + file( + GLOB_RECURSE + SRC_FILES_FOR_CLANG_FORMAT + ${CORENEURON_PROJECT_SOURCE_DIR}/coreneuron/*.c + ${CORENEURON_PROJECT_SOURCE_DIR}/coreneuron/*.cpp + ${CORENEURON_PROJECT_SOURCE_DIR}/coreneuron/*.h* + ${CORENEURON_PROJECT_SOURCE_DIR}/coreneuron/*.ipp*) # exclude random123 file(GLOB_RECURSE RANDOM123_FILES - ${CORENEURON_PROJECT_SOURCE_DIR}/coreneuron/utils/randoms/Random123/*.cpp - ${CORENEURON_PROJECT_SOURCE_DIR}/coreneuron/utils/randoms/Random123/*.h) + ${CORENEURON_PROJECT_SOURCE_DIR}/coreneuron/utils/randoms/Random123/*.cpp + ${CORENEURON_PROJECT_SOURCE_DIR}/coreneuron/utils/randoms/Random123/*.h) foreach(R123_PATH ${RANDOM123_FILES}) list(REMOVE_ITEM SRC_FILES_FOR_CLANG_FORMAT ${R123_PATH}) endforeach(R123_PATH) - add_custom_target(clang-format - COMMAND ${CMAKE_COMMAND} -DSOURCE_FILES:STRING="${SRC_FILES_FOR_CLANG_FORMAT}" - -DCLANG_FORMAT_EXECUTABLE=${CLANG_FORMAT_EXECUTABLE} -P - "${CORENEURON_PROJECT_SOURCE_DIR}/CMake/ClangFormatUtils.cmake") + add_custom_target( + clang-format + COMMAND ${CMAKE_COMMAND} -DSOURCE_FILES:STRING="${SRC_FILES_FOR_CLANG_FORMAT}" + -DCLANG_FORMAT_EXECUTABLE=${CLANG_FORMAT_EXECUTABLE} -P + "${CORENEURON_PROJECT_SOURCE_DIR}/CMake/ClangFormatUtils.cmake") endif() diff --git a/CMake/ClangFormatUtils.cmake b/CMake/ClangFormatUtils.cmake index 7d0c3fb54..f6061ed5f 100644 --- a/CMake/ClangFormatUtils.cmake +++ b/CMake/ClangFormatUtils.cmake @@ -1,15 +1,12 @@ # ============================================================================= -# Copyright (C) 2016-2019 Blue Brain Project +# Copyright (C) 2016-2020 Blue Brain Project # # See top-level LICENSE file for details. # ============================================================================= -string(REPLACE " " - ";" - FILES_TO_FORMAT - ${SOURCE_FILES}) +string(REPLACE " " ";" FILES_TO_FORMAT ${SOURCE_FILES}) foreach(SRC_FILE ${FILES_TO_FORMAT}) - execute_process( - COMMAND ${CLANG_FORMAT_EXECUTABLE} -i -style=file -fallback-style=none ${SRC_FILE}) + execute_process(COMMAND ${CLANG_FORMAT_EXECUTABLE} -i -style=file -fallback-style=none + ${SRC_FILE}) endforeach() diff --git a/CMake/CrayPortability.cmake b/CMake/CrayPortability.cmake index 66508e9b0..c1e735ffa 100644 --- a/CMake/CrayPortability.cmake +++ b/CMake/CrayPortability.cmake @@ -1,42 +1,42 @@ # ============================================================================= -# Copyright (C) 2016-2019 Blue Brain Project +# Copyright (C) 2016-2020 Blue Brain Project # # See top-level LICENSE file for details. # ============================================================================= if(IS_DIRECTORY "/opt/cray") - set(CRAY_SYSTEM TRUE) + set(CRAY_SYSTEM TRUE) endif() if(CRAY_SYSTEM) - # default build type is static for cray - if(NOT DEFINED COMPILE_LIBRARY_TYPE) - set(COMPILE_LIBRARY_TYPE "STATIC") - endif() - - ## Cray wrapper take care of everything! - set(MPI_LIBRARIES "") - set(MPI_C_LIBRARIES "") - set(MPI_CXX_LIBRARIES "") - - # instead of -rdynamic, cray wrapper needs either -dynamic or -static(default) - # also cray compiler needs fPIC flag - if(COMPILE_LIBRARY_TYPE STREQUAL "SHARED") - set(CMAKE_SHARED_LIBRARY_LINK_CXX_FLAGS "-dynamic") + # default build type is static for cray + if(NOT DEFINED COMPILE_LIBRARY_TYPE) + set(COMPILE_LIBRARY_TYPE "STATIC") + endif() - # TODO: add Cray compiler flag configurations in CompilerFlagsHelpers.cmake - # Cray compilers need PIC flag - if(CMAKE_C_COMPILER_IS_CRAY) - set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fPIC") - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fPIC") - endif() + # Cray wrapper take care of everything! + set(MPI_LIBRARIES "") + set(MPI_C_LIBRARIES "") + set(MPI_CXX_LIBRARIES "") - else() - set(CMAKE_SHARED_LIBRARY_LINK_CXX_FLAGS "") + # ~~~ + # instead of -rdynamic, cray wrapper needs either -dynamic or -static(default) + # also cray compiler needs fPIC flag + # ~~~ + if(COMPILE_LIBRARY_TYPE STREQUAL "SHARED") + set(CMAKE_SHARED_LIBRARY_LINK_CXX_FLAGS "-dynamic") + # TODO: add Cray compiler flag configurations in CompilerFlagsHelpers.cmake + if(CMAKE_C_COMPILER_IS_CRAY) + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fPIC") + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fPIC") endif() + + else() + set(CMAKE_SHARED_LIBRARY_LINK_CXX_FLAGS "") + endif() else() - # default is shared library - if(NOT DEFINED COMPILE_LIBRARY_TYPE) - set(COMPILE_LIBRARY_TYPE "SHARED") - endif() + # default is shared library + if(NOT DEFINED COMPILE_LIBRARY_TYPE) + set(COMPILE_LIBRARY_TYPE "SHARED") + endif() endif() diff --git a/CMake/NmodlHelper.cmake b/CMake/NmodlHelper.cmake index 8dd622c59..060a1a5cb 100644 --- a/CMake/NmodlHelper.cmake +++ b/CMake/NmodlHelper.cmake @@ -1,22 +1,23 @@ # ============================================================================= -# Copyright (C) 2016-2019 Blue Brain Project +# Copyright (C) 2016-2020 Blue Brain Project # # See top-level LICENSE file for details. # ============================================================================= +# ~~~ # Macro sets up build rule for .cpp files from .mod files. Parameters: # KEY name : An arbitrary name to keep track of output .c files # MODFILE input : The path to the mod file # OUTTYPE : The output type (optional, defaults to serial) # -# Because nmodl/mod2c_core wants to write the .cpp file in the same directory as the mod file, we copy the -# mod file to the binary directory first +# Because nmodl/mod2c_core wants to write the .cpp file in the same directory as the mod file, +# we copy the mod file to the binary directory first # -# The macro appends the names of the output files to NMODL_${name}_OUTPUTS and the names of the mod -# files (without directories) to NMODL_${name}_MODS +# The macro appends the names of the output files to NMODL_${name}_OUTPUTS and the names of the +# mod files (without directories) to NMODL_${name}_MODS +# ~~~ macro(nmodl_to_cpp_target) - # first parse the arguments set(options) set(oneValueArgs TARGET MODFILE KEY) @@ -36,41 +37,21 @@ macro(nmodl_to_cpp_target) # check for nmodl target if("${mod2c_TARGET}" STREQUAL "serial") - string(REGEX - REPLACE "\\.mod$" - ".cpp" - mod2c_outname_ - "${mod2c_modname_}") + string(REGEX REPLACE "\\.mod$" ".cpp" mod2c_outname_ "${mod2c_modname_}") set(nmodl_modearg "--c") elseif("${mod2c_TARGET}" STREQUAL "ispc") file(STRINGS ${mod2c_MODFILE} mod2c_mod_artcell REGEX "ARTIFICIAL_CELL") if(NOT "${mod2c_mod_artcell}" STREQUAL "") - string(REGEX - REPLACE "\\.mod$" - ".cpp" - mod2c_outname_ - "${mod2c_modname_}") + string(REGEX REPLACE "\\.mod$" ".cpp" mod2c_outname_ "${mod2c_modname_}") set(nmodl_modearg "--c") else() - string(REGEX - REPLACE "\\.mod$" - ".ispc" - mod2c_outname_ - "${mod2c_modname_}") - string(REGEX - REPLACE "\\.mod$" - ".cpp" - mod2c_wrapper_outname_ - "${mod2c_modname_}") + string(REGEX REPLACE "\\.mod$" ".ispc" mod2c_outname_ "${mod2c_modname_}") + string(REGEX REPLACE "\\.mod$" ".cpp" mod2c_wrapper_outname_ "${mod2c_modname_}") set(nmodl_modearg "--ispc") endif() elseif("${mod2c_TARGET}" STREQUAL "") # default case - string(REGEX - REPLACE "\\.mod$" - ".cpp" - mod2c_outname_ - "${mod2c_modname_}") + string(REGEX REPLACE "\\.mod$" ".cpp" mod2c_outname_ "${mod2c_modname_}") set(nmodl_modearg "--c") else() message( @@ -95,19 +76,20 @@ macro(nmodl_to_cpp_target) else() string(REPLACE "passes" "passes;--inline" NMODL_FLAGS "${NMODL_EXTRA_FLAGS_LIST}") endif() - add_custom_command(OUTPUT ${mod2c_output_} ${mod2c_wrapper_output_} - DEPENDS ${mod2c_MODFILE} ${CORENRN_NMODL_BINARY} - COMMAND ${CMAKE_COMMAND} -E copy "${mod2c_source_}" - "${CMAKE_CURRENT_BINARY_DIR}" - COMMAND ${CORENRN_NMODL_COMMAND} "${mod2c_modname_}" -o "${CMAKE_CURRENT_BINARY_DIR}" - host ${nmodl_modearg} ${NMODL_FLAGS} - WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}") + add_custom_command( + OUTPUT ${mod2c_output_} ${mod2c_wrapper_output_} + DEPENDS ${mod2c_MODFILE} ${CORENRN_NMODL_BINARY} + COMMAND ${CMAKE_COMMAND} -E copy "${mod2c_source_}" "${CMAKE_CURRENT_BINARY_DIR}" + COMMAND + ${CORENRN_NMODL_COMMAND} "${mod2c_modname_}" -o "${CMAKE_CURRENT_BINARY_DIR}" host + ${nmodl_modearg} ${NMODL_FLAGS} + WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}") else() - add_custom_command(OUTPUT ${mod2c_output_} - DEPENDS ${mod2c_MODFILE} mod2c ${CORENRN_NMODL_BINARY} - COMMAND ${CMAKE_COMMAND} -E copy "${mod2c_source_}" - "${CMAKE_CURRENT_BINARY_DIR}" - COMMAND ${CORENRN_NMODL_COMMAND} "${mod2c_modname_}" - WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}") + add_custom_command( + OUTPUT ${mod2c_output_} + DEPENDS ${mod2c_MODFILE} mod2c ${CORENRN_NMODL_BINARY} + COMMAND ${CMAKE_COMMAND} -E copy "${mod2c_source_}" "${CMAKE_CURRENT_BINARY_DIR}" + COMMAND ${CORENRN_NMODL_COMMAND} "${mod2c_modname_}" + WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}") endif() endmacro() diff --git a/CMake/OpenAccHelper.cmake b/CMake/OpenAccHelper.cmake index 975197bfb..1e552596a 100644 --- a/CMake/OpenAccHelper.cmake +++ b/CMake/OpenAccHelper.cmake @@ -1,5 +1,5 @@ # ============================================================================= -# Copyright (C) 2016-2019 Blue Brain Project +# Copyright (C) 2016-2020 Blue Brain Project # # See top-level LICENSE file for details. # ============================================================================= @@ -13,7 +13,9 @@ if(CORENRN_ENABLE_GPU) # if user don't specify host compiler, use gcc from $PATH if(NOT CUDA_HOST_COMPILER) find_program(GCC_BIN gcc) - set(CUDA_HOST_COMPILER ${GCC_BIN} CACHE FILEPATH "" FORCE) + set(CUDA_HOST_COMPILER + ${GCC_BIN} + CACHE FILEPATH "" FORCE) endif() # various flags for PGI compiler with GPU build @@ -29,8 +31,8 @@ if(CORENRN_ENABLE_GPU) set(CMAKE_C_FLAGS "${ACC_FLAGS} ${CMAKE_C_FLAGS}") set(CMAKE_CXX_FLAGS "${ACC_FLAGS} ${CMAKE_CXX_FLAGS} ${PGI_DIAG_FLAGS}") # avoid PGI adding standard compliant "-A" flags - set(CMAKE_CXX11_STANDARD_COMPILE_OPTION --c++11) - set(CMAKE_CXX14_STANDARD_COMPILE_OPTION --c++14) + set(CMAKE_CXX11_STANDARD_COMPILE_OPTION --c++11) + set(CMAKE_CXX14_STANDARD_COMPILE_OPTION --c++14) else() message(WARNING "Non-PGI compiler : make sure to add required compiler flags to enable OpenACC") endif() diff --git a/CMake/TestScriptUtils.cmake b/CMake/TestScriptUtils.cmake index d9be79210..b62842e9b 100644 --- a/CMake/TestScriptUtils.cmake +++ b/CMake/TestScriptUtils.cmake @@ -1,9 +1,10 @@ # ============================================================================= -# Copyright (C) 2016-2019 Blue Brain Project +# Copyright (C) 2016-2020 Blue Brain Project # # See top-level LICENSE file for details. # ============================================================================= +# ~~~ # Utility functions for manipulating test labels and producing # tests from scripts: # @@ -37,59 +38,64 @@ # * TEST_PREFIX, ${NAME}_TEST_PREFIX # If defined, preface the interpreter with this prefix. # ${NAME}_TEST_PREFIX takes priority over TEST_PREFIX. +# ~~~ function(add_test_label NAME) - set_property(TEST ${NAME} APPEND PROPERTY LABELS ${ARGN}) - # create test classes for each label - foreach(L ${ARGN}) - add_test_class(${L}) - endforeach() + set_property( + TEST ${NAME} + APPEND + PROPERTY LABELS ${ARGN}) + # create test classes for each label + foreach(L ${ARGN}) + add_test_class(${L}) + endforeach() endfunction() function(add_test_script NAME SCRIPT INTERP) - set(RUN_PREFIX ${TEST_PREFIX}) - if(${NAME}_TEST_PREFIX) - set(RUN_PREFIX ${${NAME}_TEST_PREFIX}) - endif() + set(RUN_PREFIX ${TEST_PREFIX}) + if(${NAME}_TEST_PREFIX) + set(RUN_PREFIX ${${NAME}_TEST_PREFIX}) + endif() - if(NOT INTERP) - set(INTERP "/bin/sh") - endif() + if(NOT INTERP) + set(INTERP "/bin/sh") + endif() - set(RUN_ARGS ${TEST_ARGS}) - if (${NAME}_TEST_ARGS) - set(RUN_ARGS ${${NAME}_TEST_ARGS}) - endif() + set(RUN_ARGS ${TEST_ARGS}) + if(${NAME}_TEST_ARGS) + set(RUN_ARGS ${${NAME}_TEST_ARGS}) + endif() - set(SCRIPT_PATH "${SCRIPT}") - if(NOT IS_ABSOLUTE "${SCRIPT_PATH}") - set(SCRIPT_PATH "${CMAKE_CURRENT_SOURCE_DIR}/${SCRIPT_PATH}") - endif() + set(SCRIPT_PATH "${SCRIPT}") + if(NOT IS_ABSOLUTE "${SCRIPT_PATH}") + set(SCRIPT_PATH "${CMAKE_CURRENT_SOURCE_DIR}/${SCRIPT_PATH}") + endif() - add_test(NAME ${NAME} - COMMAND ${RUN_PREFIX} ${INTERP} "${SCRIPT_PATH}" ${RUN_ARGS} - WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}") + add_test( + NAME ${NAME} + COMMAND ${RUN_PREFIX} ${INTERP} "${SCRIPT_PATH}" ${RUN_ARGS} + WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}") - # Add test labels - set(TEST_LABELS ${TEST_LABEL} ${${NAME}_TEST_LABEL}) - if (TEST_LABELS) - add_test_label(${NAME} ${TEST_LABELS}) - endif() + # Add test labels + set(TEST_LABELS ${TEST_LABEL} ${${NAME}_TEST_LABEL}) + if(TEST_LABELS) + add_test_label(${NAME} ${TEST_LABELS}) + endif() - if(TEST_ENVIRONMENT) - set_property(TEST ${NAME} PROPERTY ENVIRONMENT ${TEST_ENVIRONMENT}) - endif() + if(TEST_ENVIRONMENT) + set_property(TEST ${NAME} PROPERTY ENVIRONMENT ${TEST_ENVIRONMENT}) + endif() endfunction() function(add_test_class) - string(REPLACE ";" "-" TEST_SUFFIX "${ARGN}") - string(REPLACE ";" "$$;-L;^" TEST_LOPTS "${ARGN}") + string(REPLACE ";" "-" TEST_SUFFIX "${ARGN}") + string(REPLACE ";" "$$;-L;^" TEST_LOPTS "${ARGN}") - if(NOT TARGET test-${TEST_SUFFIX}) - add_custom_target("test-${TEST_SUFFIX}" - COMMAND ${CMAKE_CTEST_COMMAND} -L ^${TEST_LOPTS}$$ - WORKING_DIRECTORY ${${PROJECT_NAME}_BINARY_DIR} - COMMENT "Running all ${ARGN} tests") - endif() + if(NOT TARGET test-${TEST_SUFFIX}) + add_custom_target( + "test-${TEST_SUFFIX}" + COMMAND ${CMAKE_CTEST_COMMAND} -L ^${TEST_LOPTS}$$ + WORKING_DIRECTORY ${${PROJECT_NAME}_BINARY_DIR} + COMMENT "Running all ${ARGN} tests") + endif() endfunction() - diff --git a/CMake/config/CompilerFlagsHelpers.cmake b/CMake/config/CompilerFlagsHelpers.cmake index 4d5409019..f125aa6f0 100644 --- a/CMake/config/CompilerFlagsHelpers.cmake +++ b/CMake/config/CompilerFlagsHelpers.cmake @@ -1,139 +1,134 @@ # ============================================================================= -# Copyright (C) 2016-2019 Blue Brain Project +# Copyright (C) 2016-2020 Blue Brain Project # # See top-level LICENSE file for details. # ============================================================================= +# ~~~ # CompilerFlagsHelpers.cmake -# # set of Convenience functions for portable compiler flags - +# ~~~ set(SUPPORTED_COMPILER_LANGUAGE_LIST "C;CXX") -## detect compiler +# detect compiler foreach(COMPILER_LANGUAGE ${SUPPORTED_COMPILER_LANGUAGE_LIST}) - if(CMAKE_${COMPILER_LANGUAGE}_COMPILER_ID STREQUAL "XL") - set(CMAKE_${COMPILER_LANGUAGE}_COMPILER_IS_XLC ON) - elseif(CMAKE_${COMPILER_LANGUAGE}_COMPILER_ID STREQUAL "Intel") - set(CMAKE_${COMPILER_LANGUAGE}_COMPILER_IS_ICC ON) - elseif ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC") - set(CMAKE_${COMPILER_LANGUAGE}_COMPILER_IS_MSVC) - elseif(${CMAKE_${COMPILER_LANGUAGE}_COMPILER_ID} STREQUAL "Clang") - set(CMAKE_${COMPILER_LANGUAGE}_COMPILER_IS_CLANG ON) - elseif(CMAKE_${COMPILER_LANGUAGE}_COMPILER_ID STREQUAL "GNU") - set(CMAKE_${COMPILER_LANGUAGE}_COMPILER_IS_GCC ON) - elseif(CMAKE_${COMPILER_LANGUAGE}_COMPILER_ID STREQUAL "Cray") - set(CMAKE_${COMPILER_LANGUAGE}_COMPILER_IS_CRAY ON) - endif() - + if(CMAKE_${COMPILER_LANGUAGE}_COMPILER_ID STREQUAL "XL") + set(CMAKE_${COMPILER_LANGUAGE}_COMPILER_IS_XLC ON) + elseif(CMAKE_${COMPILER_LANGUAGE}_COMPILER_ID STREQUAL "Intel") + set(CMAKE_${COMPILER_LANGUAGE}_COMPILER_IS_ICC ON) + elseif("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC") + set(CMAKE_${COMPILER_LANGUAGE}_COMPILER_IS_MSVC) + elseif(${CMAKE_${COMPILER_LANGUAGE}_COMPILER_ID} STREQUAL "Clang") + set(CMAKE_${COMPILER_LANGUAGE}_COMPILER_IS_CLANG ON) + elseif(CMAKE_${COMPILER_LANGUAGE}_COMPILER_ID STREQUAL "GNU") + set(CMAKE_${COMPILER_LANGUAGE}_COMPILER_IS_GCC ON) + elseif(CMAKE_${COMPILER_LANGUAGE}_COMPILER_ID STREQUAL "Cray") + set(CMAKE_${COMPILER_LANGUAGE}_COMPILER_IS_CRAY ON) + endif() endforeach() - - - foreach(COMPILER_LANGUAGE ${SUPPORTED_COMPILER_LANGUAGE_LIST}) + # XLC compiler + if(CMAKE_${COMPILER_LANGUAGE}_COMPILER_IS_XLC) + # ~~~ + # XLC -qinfo=all is awfully verbose on any platforms that use the GNU STL + # Enable by default only the relevant one + # ~~~ + set(CMAKE_${COMPILER_LANGUAGE}_WARNING_ALL "-qformat=all -qinfo=lan:trx:ret:zea:cmp:ret") - # XLC compiler - if(CMAKE_${COMPILER_LANGUAGE}_COMPILER_IS_XLC) - - # XLC -qinfo=all is awfully verbose on any platforms that use the GNU STL - # Enable by default only the relevant one - set(CMAKE_${COMPILER_LANGUAGE}_WARNING_ALL "-qformat=all -qinfo=lan:trx:ret:zea:cmp:ret") + set(CMAKE_${COMPILER_LANGUAGE}_DEBUGINFO_FLAGS "-g") - set(CMAKE_${COMPILER_LANGUAGE}_DEBUGINFO_FLAGS "-g") + set(CMAKE_${COMPILER_LANGUAGE}_OPT_NONE "-O0") + set(CMAKE_${COMPILER_LANGUAGE}_OPT_NORMAL "-O2") + set(CMAKE_${COMPILER_LANGUAGE}_OPT_AGGRESSIVE "-O3") + set(CMAKE_${COMPILER_LANGUAGE}_OPT_FASTEST "-O5") - set(CMAKE_${COMPILER_LANGUAGE}_OPT_NONE "-O0") - set(CMAKE_${COMPILER_LANGUAGE}_OPT_NORMAL "-O2") - set(CMAKE_${COMPILER_LANGUAGE}_OPT_AGGRESSIVE "-O3") - set(CMAKE_${COMPILER_LANGUAGE}_OPT_FASTEST "-O5") + set(CMAKE_${COMPILER_LANGUAGE}_STACK_PROTECTION "-qstackprotect") - set(CMAKE_${COMPILER_LANGUAGE}_STACK_PROTECTION "-qstackprotect") + set(CMAKE_${COMPILER_LANGUAGE}_POSITION_INDEPENDENT "-qpic=small") - set(CMAKE_${COMPILER_LANGUAGE}_POSITION_INDEPENDENT "-qpic=small") + set(CMAKE_${COMPILER_LANGUAGE}_VECTORIZE "-qhot") + set(ADDITIONAL_THREADSAFE_FLAGS "-qthreaded") + set(IGNORE_UNKNOWN_PRAGMA_FLAGS "-qsuppress=1506-224") - set(CMAKE_${COMPILER_LANGUAGE}_VECTORIZE "-qhot") - set(ADDITIONAL_THREADSAFE_FLAGS "-qthreaded") - set(IGNORE_UNKNOWN_PRAGMA_FLAGS "-qsuppress=1506-224") + # Microsoft compiler + elseif(CMAKE_${COMPILER_LANGUAGE}_COMPILER_IS_MSVC) - # Microsoft compiler - elseif(CMAKE_${COMPILER_LANGUAGE}_COMPILER_IS_MSVC) + set(CMAKE_${COMPILER_LANGUAGE}_DEBUGINFO_FLAGS "-Zi") - set(CMAKE_${COMPILER_LANGUAGE}_DEBUGINFO_FLAGS "-Zi") + set(CMAKE_${COMPILER_LANGUAGE}_OPT_NONE "") + set(CMAKE_${COMPILER_LANGUAGE}_OPT_NORMAL "-O2") + set(CMAKE_${COMPILER_LANGUAGE}_OPT_AGGRESSIVE "-O2") + set(CMAKE_${COMPILER_LANGUAGE}_OPT_FASTEST "-O2") - set(CMAKE_${COMPILER_LANGUAGE}_OPT_NONE "") - set(CMAKE_${COMPILER_LANGUAGE}_OPT_NORMAL "-O2") - set(CMAKE_${COMPILER_LANGUAGE}_OPT_AGGRESSIVE "-O2") - set(CMAKE_${COMPILER_LANGUAGE}_OPT_FASTEST "-O2") + set(CMAKE_${COMPILER_LANGUAGE}_STACK_PROTECTION "-GS") - set(CMAKE_${COMPILER_LANGUAGE}_STACK_PROTECTION "-GS") + # enable by default on MSVC + set(CMAKE_${COMPILER_LANGUAGE}_POSITION_INDEPENDENT "") - # enable by default on MSVC - set(CMAKE_${COMPILER_LANGUAGE}_POSITION_INDEPENDENT "") + # GCC + elseif(CMAKE_${COMPILER_LANGUAGE}_COMPILER_IS_GCC) - ## GCC - elseif(CMAKE_${COMPILER_LANGUAGE}_COMPILER_IS_GCC) + set(CMAKE_${COMPILER_LANGUAGE}_WARNING_ALL "-Wall") + set(CMAKE_${COMPILER_LANGUAGE}_DEBUGINFO_FLAGS "-g") - set(CMAKE_${COMPILER_LANGUAGE}_WARNING_ALL "-Wall") - set(CMAKE_${COMPILER_LANGUAGE}_DEBUGINFO_FLAGS "-g") + set(CMAKE_${COMPILER_LANGUAGE}_OPT_NONE "-O0") + set(CMAKE_${COMPILER_LANGUAGE}_OPT_NORMAL "-O2") + set(CMAKE_${COMPILER_LANGUAGE}_OPT_AGGRESSIVE "-O3") + set(CMAKE_${COMPILER_LANGUAGE}_OPT_FASTEST "-Ofast -march=native") - set(CMAKE_${COMPILER_LANGUAGE}_OPT_NONE "-O0") - set(CMAKE_${COMPILER_LANGUAGE}_OPT_NORMAL "-O2") - set(CMAKE_${COMPILER_LANGUAGE}_OPT_AGGRESSIVE "-O3") - set(CMAKE_${COMPILER_LANGUAGE}_OPT_FASTEST "-Ofast -march=native") + set(CMAKE_${COMPILER_LANGUAGE}_STACK_PROTECTION "-fstack-protector") - set(CMAKE_${COMPILER_LANGUAGE}_STACK_PROTECTION "-fstack-protector") + set(CMAKE_${COMPILER_LANGUAGE}_POSITION_INDEPENDENT "-fPIC") - set(CMAKE_${COMPILER_LANGUAGE}_POSITION_INDEPENDENT "-fPIC") + set(CMAKE_${COMPILER_LANGUAGE}_VECTORIZE "-ftree-vectorize") + set(IGNORE_UNKNOWN_PRAGMA_FLAGS "-Wno-unknown-pragmas") - set(CMAKE_${COMPILER_LANGUAGE}_VECTORIZE "-ftree-vectorize") - set(IGNORE_UNKNOWN_PRAGMA_FLAGS "-Wno-unknown-pragmas") + if(CMAKE_${COMPILER_LANGUAGE}_COMPILER_VERSION VERSION_GREATER "4.7.0") + set(CMAKE_${COMPILER_LANGUAGE}_LINK_TIME_OPT "-flto") + endif() - if(CMAKE_${COMPILER_LANGUAGE}_COMPILER_VERSION VERSION_GREATER "4.7.0") - set(CMAKE_${COMPILER_LANGUAGE}_LINK_TIME_OPT "-flto") - endif() + if((CMAKE_HOST_SYSTEM_PROCESSOR MATCHES "^ppc") OR (CMAKE_HOST_SYSTEM_PROCESSOR MATCHES "^power" + )) + # ppc arch do not support -march= syntax + set(CMAKE_${COMPILER_LANGUAGE}_GEN_NATIVE "-mcpu=native") + else() + set(CMAKE_${COMPILER_LANGUAGE}_GEN_NATIVE "-march=native") + endif() - if( (CMAKE_HOST_SYSTEM_PROCESSOR MATCHES "^ppc" ) OR ( CMAKE_HOST_SYSTEM_PROCESSOR MATCHES "^power" ) ) - ## ppc arch do not support -march= syntax - set(CMAKE_${COMPILER_LANGUAGE}_GEN_NATIVE "-mcpu=native") - else() - set(CMAKE_${COMPILER_LANGUAGE}_GEN_NATIVE "-march=native") - endif() + # CLANG + elseif(CMAKE_${COMPILER_LANGUAGE}_COMPILER_IS_CLANG) + # Force same ld behavior as when called from gcc --as-needed forces the linker to check whether + # a dynamic library mentioned in the command line is actually needed by the objects being + # linked. Symbols needed in shared objects are already linked when building that library. + set(CMAKE_EXE_LINKER_FLAGS "-Wl,--as-needed") + set(CMAKE_SHARED_LINKER_FLAGS "-Wl,--as-needed") - ## CLANG - elseif(CMAKE_${COMPILER_LANGUAGE}_COMPILER_IS_CLANG) - ## Force same ld behavior as when called from gcc - ## --as-needed forces the linker to check whether a dynamic library mentioned in the command line is actually - ## needed by the objects being linked. Symbols needed in shared objects are already linked when building that - ## library. - set(CMAKE_EXE_LINKER_FLAGS "-Wl,--as-needed") - set(CMAKE_SHARED_LINKER_FLAGS "-Wl,--as-needed") + # rest of the world + else() + set(CMAKE_${COMPILER_LANGUAGE}_WARNING_ALL "-Wall") + set(CMAKE_${COMPILER_LANGUAGE}_DEBUGINFO_FLAGS "-g") - ## rest of the world - else() - set(CMAKE_${COMPILER_LANGUAGE}_WARNING_ALL "-Wall") - set(CMAKE_${COMPILER_LANGUAGE}_DEBUGINFO_FLAGS "-g") + set(CMAKE_${COMPILER_LANGUAGE}_OPT_NONE "-O0") + set(CMAKE_${COMPILER_LANGUAGE}_OPT_NORMAL "-O2") + set(CMAKE_${COMPILER_LANGUAGE}_OPT_AGGRESSIVE "-O3") + set(CMAKE_${COMPILER_LANGUAGE}_OPT_FASTEST "-O3") - set(CMAKE_${COMPILER_LANGUAGE}_OPT_NONE "-O0") - set(CMAKE_${COMPILER_LANGUAGE}_OPT_NORMAL "-O2") - set(CMAKE_${COMPILER_LANGUAGE}_OPT_AGGRESSIVE "-O3") - set(CMAKE_${COMPILER_LANGUAGE}_OPT_FASTEST "-O3") + set(CMAKE_${COMPILER_LANGUAGE}_STACK_PROTECTION "") + set(CMAKE_${COMPILER_LANGUAGE}_POSITION_INDEPENDENT "-fPIC") + set(CMAKE_${COMPILER_LANGUAGE}_VECTORIZE "") - set(CMAKE_${COMPILER_LANGUAGE}_STACK_PROTECTION "") - set(CMAKE_${COMPILER_LANGUAGE}_POSITION_INDEPENDENT "-fPIC") - set(CMAKE_${COMPILER_LANGUAGE}_VECTORIZE "") + if(CMAKE_${COMPILER_LANGUAGE}_COMPILER_IS_ICC) + # unknown compiler flags produce error on Cray and hence just set this for intel now + set(IGNORE_UNKNOWN_PRAGMA_FLAGS "-Wno-unknown-pragmas") + # Intel O3 is extreme + set(CMAKE_${COMPILER_LANGUAGE}_OPT_AGGRESSIVE "-O2") + endif() - if(CMAKE_${COMPILER_LANGUAGE}_COMPILER_IS_ICC) - ## unknown compiler flags produce error on Cray and hence just set this for intel now - set(IGNORE_UNKNOWN_PRAGMA_FLAGS "-Wno-unknown-pragmas") - ## Intel O3 is extreme - set(CMAKE_${COMPILER_LANGUAGE}_OPT_AGGRESSIVE "-O2") - endif() - if (CMAKE_${COMPILER_LANGUAGE}_COMPILER_ID STREQUAL "PGI") - set(CMAKE_${COMPILER_LANGUAGE}_WARNING_ALL "") - endif() - endif() + if(CMAKE_${COMPILER_LANGUAGE}_COMPILER_ID STREQUAL "PGI") + set(CMAKE_${COMPILER_LANGUAGE}_WARNING_ALL "") + endif() + endif() endforeach() - - diff --git a/CMake/config/ReleaseDebugAutoFlags.cmake b/CMake/config/ReleaseDebugAutoFlags.cmake index d8c3ed236..4bf17eeb7 100644 --- a/CMake/config/ReleaseDebugAutoFlags.cmake +++ b/CMake/config/ReleaseDebugAutoFlags.cmake @@ -1,35 +1,42 @@ # ============================================================================= -# Copyright (C) 2016-2019 Blue Brain Project +# Copyright (C) 2016-2020 Blue Brain Project # # See top-level LICENSE file for details. # ============================================================================= +# ~~~ # ReleaseDebugAutoFlags.cmake -# # Release / Debug configuration helper +# ~~~ -## default configuration +# default configuration if(NOT CMAKE_BUILD_TYPE AND (NOT CMAKE_CONFIGURATION_TYPES)) - set(CMAKE_BUILD_TYPE RelWithDebInfo CACHE STRING "Choose the type of build." FORCE) + set(CMAKE_BUILD_TYPE + RelWithDebInfo + CACHE STRING "Choose the type of build." FORCE) message(STATUS "Setting build type to '${CMAKE_BUILD_TYPE}' as none was specified.") endif() -# Different configuration types: -# -# Debug : Optimized for debugging, include symbols -# Release : Release mode, no debuginfo +# ============================================================================= +# Different build types +# ============================================================================= +# ~~~ +# Debug : Optimized for debugging, include debug symbols +# Release : Release mode, no debuginfo # RelWithDebInfo : Distribution mode, basic optimizations for potable code with debuginfos # Fast : Maximum level of optimization. Target native architecture, not portable code +# ~~~ include(CompilerFlagsHelpers) -set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_OPT_NORMAL}") -set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_DEBUGINFO_FLAGS} ${CMAKE_C_OPT_NONE} ${CMAKE_C_STACK_PROTECTION}") +# ~~~ +set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_OPT_NORMAL}") +set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_DEBUGINFO_FLAGS} ${CMAKE_C_OPT_NONE} ${CMAKE_C_STACK_PROTECTION}") set(CMAKE_C_FLAGS_RELWITHDEBINFO "${CMAKE_C_DEBUGINFO_FLAGS} ${CMAKE_C_OPT_NORMAL}") set(CMAKE_C_FLAGS_FAST " ${CMAKE_C_OPT_FASTEST} ${CMAKE_C_LINK_TIME_OPT} ${CMAKE_C_GEN_NATIVE}") -set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_OPT_NORMAL}") -set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_DEBUGINFO_FLAGS} ${CMAKE_CXX_OPT_NONE} ${CMAKE_CXX_STACK_PROTECTION}") +set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_OPT_NORMAL}") +set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_DEBUGINFO_FLAGS} ${CMAKE_CXX_OPT_NONE} ${CMAKE_CXX_STACK_PROTECTION}") set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_DEBUGINFO_FLAGS} ${CMAKE_CXX_OPT_NORMAL}") set(CMAKE_CXX_FLAGS_FAST " ${CMAKE_CXX_OPT_FASTEST} ${CMAKE_CXX_LINK_TIME_OPT} ${CMAKE_CXX_GEN_NATIVE}") - +# ~~~ diff --git a/CMake/config/SetRpath.cmake b/CMake/config/SetRpath.cmake index da8b16a10..c12b8cf64 100644 --- a/CMake/config/SetRpath.cmake +++ b/CMake/config/SetRpath.cmake @@ -1,24 +1,28 @@ # enable @rpath in the install name for any shared library being built set(CMAKE_MACOSX_RPATH 1) -# On platforms like bgq, xlc didn't like rpath with static build -# Similar issue was seen on Cray -IF(NOT CRAY_SYSTEM) - # use, i.e. don't skip the full RPATH for the build tree - SET(CMAKE_SKIP_BUILD_RPATH FALSE) +# ~~~ +# On platforms like bgq, xlc didn't like rpath with static build and similar +# issue was seen on Cray +# ~~~ +if(NOT CRAY_SYSTEM) + # use, i.e. don't skip the full RPATH for the build tree + set(CMAKE_SKIP_BUILD_RPATH FALSE) - # when building, don't use the install RPATH already # (but later on when installing) - SET(CMAKE_BUILD_WITH_INSTALL_RPATH FALSE) + # when building, don't use the install RPATH already but later on when installing + set(CMAKE_BUILD_WITH_INSTALL_RPATH FALSE) - # add the automatically determined parts of the RPATH - # which point to directories outside the build tree to the install RPATH - SET(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE) + # ~~~ + # add the automatically determined parts of the RPATH which point to directories + # outside the build tree to the install RPATH + # ~~~ + set(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE) - set(LIB_INSTALL_DIR "${CMAKE_INSTALL_PREFIX}/lib") + set(LIB_INSTALL_DIR "${CMAKE_INSTALL_PREFIX}/lib") - # the RPATH to be used when installing, but only if it's not a system directory - LIST(FIND CMAKE_PLATFORM_IMPLICIT_LINK_DIRECTORIES "${LIB_INSTALL_DIR}" isSystemDir) - IF("${isSystemDir}" STREQUAL "-1") - SET(CMAKE_INSTALL_RPATH "${LIB_INSTALL_DIR}") - ENDIF("${isSystemDir}" STREQUAL "-1") -ENDIF() + # the RPATH to be used when installing, but only if it's not a system directory + list(FIND CMAKE_PLATFORM_IMPLICIT_LINK_DIRECTORIES "${LIB_INSTALL_DIR}" isSystemDir) + if("${isSystemDir}" STREQUAL "-1") + set(CMAKE_INSTALL_RPATH "${LIB_INSTALL_DIR}") + endif("${isSystemDir}" STREQUAL "-1") +endif() diff --git a/CMake/config/TestHelpers.cmake b/CMake/config/TestHelpers.cmake index 6d325bd3a..ba64d51ab 100644 --- a/CMake/config/TestHelpers.cmake +++ b/CMake/config/TestHelpers.cmake @@ -1,88 +1,84 @@ # ============================================================================= -# Copyright (C) 2016-2019 Blue Brain Project +# Copyright (C) 2016-2020 Blue Brain Project # # See top-level LICENSE file for details. # ============================================================================= +# ~~~ # TestHelpers.cmake -# # set of Convenience functions for unit testing with cmake +# ~~~ -## # enable or disable detection of SLURM and MPIEXEC -option(AUTO_TEST_WITH_SLURM "automatically add srun as test prefix in a SLURM environment" TRUE) -option(AUTO_TEST_WITH_MPIEXEC "automatically add mpiexec as test prefix in a MPICH2/OpenMPI environment" TRUE) +option(AUTO_TEST_WITH_SLURM "Add srun as test prefix in a SLURM environment" TRUE) +option(AUTO_TEST_WITH_MPIEXEC "Add mpiexec as test prefix in a MPICH2/OpenMPI environment" TRUE) -### -## -## Basic SLURM support -## the prefix "srun" is added to any test in the environment -## For a slurm test execution, simply run "salloc [your_exec_parameters] ctest" -## -## +# ~~~ +# Basic SLURM support the prefix "srun" is added to any test in the environment/ For a +# slurm test execution, simply run "salloc [your_exec_parameters] ctest" +# ~~~ if(AUTO_TEST_WITH_SLURM) - if(NOT DEFINED SLURM_SRUN_COMMAND) - find_program(SLURM_SRUN_COMMAND - NAMES "srun" - HINTS "${SLURM_ROOT}/bin" - QUIET) - endif() - - if(SLURM_SRUN_COMMAND) - set(TEST_EXEC_PREFIX_DEFAULT "${SLURM_SRUN_COMMAND}") - set(TEST_MPI_EXEC_PREFIX_DEFAULT "${SLURM_SRUN_COMMAND}") - set(TEST_MPI_EXEC_BIN_DEFAULT "${SLURM_SRUN_COMMAND}") - set(TEST_WITH_SLURM ON) - endif() + if(NOT DEFINED SLURM_SRUN_COMMAND) + find_program( + SLURM_SRUN_COMMAND + NAMES "srun" + HINTS "${SLURM_ROOT}/bin" QUIET) + endif() + + if(SLURM_SRUN_COMMAND) + set(TEST_EXEC_PREFIX_DEFAULT "${SLURM_SRUN_COMMAND}") + set(TEST_MPI_EXEC_PREFIX_DEFAULT "${SLURM_SRUN_COMMAND}") + set(TEST_MPI_EXEC_BIN_DEFAULT "${SLURM_SRUN_COMMAND}") + set(TEST_WITH_SLURM ON) + endif() endif() -### -## Basic MPIExec support, will just forward mpiexec as prefix -## +# Basic mpiexec support, will just forward mpiexec as prefix if(AUTO_TEST_WITH_MPIEXEC AND NOT TEST_WITH_SLURM) - if(NOT DEFINED MPIEXEC) - find_program(MPIEXEC - NAMES "mpiexec" - HINTS "${MPI_ROOT}/bin") - endif() - - if(MPIEXEC) - set(TEST_MPI_EXEC_PREFIX_DEFAULT "${MPIEXEC}") - set(TEST_MPI_EXEC_BIN_DEFAULT "${MPIEXEC}") - set(TEST_WITH_MPIEXEC ON) - endif() + if(NOT DEFINED MPIEXEC) + find_program( + MPIEXEC + NAMES "mpiexec" + HINTS "${MPI_ROOT}/bin") + endif() + + if(MPIEXEC) + set(TEST_MPI_EXEC_PREFIX_DEFAULT "${MPIEXEC}") + set(TEST_MPI_EXEC_BIN_DEFAULT "${MPIEXEC}") + set(TEST_WITH_MPIEXEC ON) + endif() endif() - - -### -## MPI executor program path without arguments used for testing. -## default: srun or mpiexec if found -## -set(TEST_MPI_EXEC_BIN "${TEST_MPI_EXEC_BIN_DEFAULT}" CACHE STRING "path of the MPI executor (mpiexec, mpirun) for test execution") - - - -### -## Test execution prefix. Override this variable for any execution prefix required in clustered environment -## -## To specify manually a command with argument, e.g -DTEST_EXEC_PREFIX="/usr/bin/srun;-n;-4" for a srun execution -## with 4 nodes -## -## default: srun if found -## -set(TEST_EXEC_PREFIX "${TEST_EXEC_PREFIX_DEFAULT}" CACHE STRING "prefix command for the test executions") - - - -### -## Test execution prefix specific for MPI programs. -## -## To specify manually a command with argument, use the cmake list syntax. e.g -DTEST_EXEC_PREFIX="/usr/bin/mpiexec;-n;-4" for an MPI execution -## with 4 nodes -## -## default: srun or mpiexec if found -## -set(TEST_MPI_EXEC_PREFIX "${TEST_MPI_EXEC_PREFIX_DEFAULT}" CACHE STRING "prefix command for the MPI test executions") - +# ~~~ +# MPI executor program path without arguments used for testing. +# default: srun or mpiexec if found +# ~~~ +set(TEST_MPI_EXEC_BIN + "${TEST_MPI_EXEC_BIN_DEFAULT}" + CACHE STRING "path of the MPI executor (mpiexec, mpirun) for test execution") + +# ~~~ +# Test execution prefix. Override this variable for any execution prefix required +# in clustered environment +# +# To specify manually a command with argument, e.g -DTEST_EXEC_PREFIX="/usr/bin/srun;-n;-4" +# for a srun execution with 4 nodes +# +# default: srun if found +# ~~~ +set(TEST_EXEC_PREFIX + "${TEST_EXEC_PREFIX_DEFAULT}" + CACHE STRING "prefix command for the test executions") + +# ~~~ +# Test execution prefix specific for MPI programs. +# +# To specify manually a command with argument, use the cmake list syntax. e.g +# -DTEST_EXEC_PREFIX="/usr/bin/mpiexec;-n;-4" for an MPI execution with 4 nodes +# +# default: srun or mpiexec if found +# ~~~ +set(TEST_MPI_EXEC_PREFIX + "${TEST_MPI_EXEC_PREFIX_DEFAULT}" + CACHE STRING "prefix command for the MPI test executions") diff --git a/CMake/coreneuron-config.cmake b/CMake/coreneuron-config.cmake index ef2b76bf4..aa4bc179e 100644 --- a/CMake/coreneuron-config.cmake +++ b/CMake/coreneuron-config.cmake @@ -9,8 +9,9 @@ get_filename_component(CONFIG_PATH "${CMAKE_CURRENT_LIST_FILE}" PATH) find_path(CORENEURON_INCLUDE_DIR "coreneuron/coreneuron.h" HINTS "${CONFIG_PATH}/../../include") -find_path(CORENEURON_LIB_DIR - NAMES libcoreneuron.a libcoreneuron.so libcoreneuron.dylib - HINTS "${CONFIG_PATH}/../../lib") +find_path( + CORENEURON_LIB_DIR + NAMES libcoreneuron.a libcoreneuron.so libcoreneuron.dylib + HINTS "${CONFIG_PATH}/../../lib") include(${CONFIG_PATH}/coreneuron.cmake) diff --git a/CMake/hpc-coding-conventions b/CMake/hpc-coding-conventions new file mode 160000 index 000000000..de25d00e9 --- /dev/null +++ b/CMake/hpc-coding-conventions @@ -0,0 +1 @@ +Subproject commit de25d00e911ce73f7db1ede349562efb37263125 diff --git a/CMakeLists.txt b/CMakeLists.txt index 4542870f9..1bde3d323 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,16 +1,18 @@ # ============================================================================= -# Copyright (C) 2016-2019 Blue Brain Project +# Copyright (C) 2016-2020 Blue Brain Project # # See top-level LICENSE file for details. # ============================================================================= cmake_minimum_required(VERSION 3.7 FATAL_ERROR) -project(coreneuron VERSION 0.18.0) +project(coreneuron VERSION 0.21.0) +# ~~~ # It is a bad idea having floating point versions, since macros cant handle them # We therefore, have version as an int, which is pretty much standard +# ~~~ math(EXPR CORENEURON_VERSION_COMBINED - "${coreneuron_VERSION_MAJOR} * 100 + ${coreneuron_VERSION_MINOR}") + "${coreneuron_VERSION_MAJOR} * 100 + ${coreneuron_VERSION_MINOR}") # ============================================================================= # CMake common project settings @@ -19,8 +21,8 @@ set(CMAKE_CXX_STANDARD 14) set(CMAKE_CXX_STANDARD_REQUIRED ON) set(CMAKE_CXX_EXTENSIONS OFF) set(CMAKE_BUILD_TYPE - RelWithDebInfo - CACHE STRING "Empty or one of Debug, Release, RelWithDebInfo") + RelWithDebInfo + CACHE STRING "Empty or one of Debug, Release, RelWithDebInfo") # ============================================================================= # Settings to enable project as submodule @@ -31,11 +33,22 @@ if(NOT CMAKE_CURRENT_SOURCE_DIR STREQUAL CMAKE_SOURCE_DIR) set(CORENEURON_AS_SUBPROJECT ON) endif() +# ============================================================================= +# HPC Coding Conventions +# ============================================================================= +set(CODING_CONV_PREFIX "CORENRN") +set(CORENRN_ClangFormat_EXCLUDES_RE + ".*/external/.*$$" + CACHE STRING "list of regular expressions to exclude C/C++ files from formatting" FORCE) +set(CORENRN_CMakeFormat_EXCLUDES_RE + ".*/external/.*$$" ".*/CMake/packages/.*$$" + CACHE STRING "list of regular expressions to exclude CMake files from formatting" FORCE) +add_subdirectory(CMake/hpc-coding-conventions/cpp) + # ============================================================================= # Include cmake modules path # ============================================================================= -list(APPEND CMAKE_MODULE_PATH - ${CORENEURON_PROJECT_SOURCE_DIR}/CMake +list(APPEND CMAKE_MODULE_PATH ${CORENEURON_PROJECT_SOURCE_DIR}/CMake ${CORENEURON_PROJECT_SOURCE_DIR}/CMake/packages ${CORENEURON_PROJECT_SOURCE_DIR}/CMake/config) @@ -71,13 +84,21 @@ option(CORENRN_ENABLE_UNIT_TESTS "Enable unit tests execution" ON) option(CORENRN_ENABLE_GPU "Enable GPU support using OpenACC" OFF) option(CORENRN_ENABLE_SHARED "Enable shared library build" ON) -set(CORENRN_NMODL_DIR "" CACHE PATH "Path to nmodl source-to-source compiler installation") -set(LIKWID_DIR "" CACHE PATH "Path to likwid performance analysis suite") - -set(CORENRN_FRONTEND_C_COMPILER gcc CACHE FILEPATH "C compiler for building mod2c [frontend]") -set(CORENRN_FRONTEND_CXX_COMPILER g++ CACHE FILEPATH "C++ compiler for building mod2c [frontend]") - -if (CORENEURON_AS_SUBPROJECT) +set(CORENRN_NMODL_DIR + "" + CACHE PATH "Path to nmodl source-to-source compiler installation") +set(LIKWID_DIR + "" + CACHE PATH "Path to likwid performance analysis suite") + +set(CORENRN_FRONTEND_C_COMPILER + gcc + CACHE FILEPATH "C compiler for building mod2c [frontend]") +set(CORENRN_FRONTEND_CXX_COMPILER + g++ + CACHE FILEPATH "C++ compiler for building mod2c [frontend]") + +if(CORENEURON_AS_SUBPROJECT) set(CORENRN_ENABLE_UNIT_TESTS OFF) endif() @@ -118,8 +139,10 @@ if(${CMAKE_CXX_COMPILER_ID} STREQUAL "PGI") add_definitions(-DEIGEN_DONT_VECTORIZE=1) endif() -# OpenACC needs to build static library in order to have global/routines -# working. See https://www.pgroup.com/userforum/viewtopic.php?t=5350 +# ~~~ +# OpenACC needs to build static library in order to have global/routines working. +# See https://www.pgroup.com/userforum/viewtopic.php?t=5350 +# ~~~ if(CORENRN_ENABLE_SHARED AND NOT CORENRN_ENABLE_GPU) set(COMPILE_LIBRARY_TYPE "SHARED") else() @@ -174,7 +197,7 @@ endif() if(CORENRN_ENABLE_REPORTING) find_package(reportinglib) find_package(sonata) - find_program (H5DUMP_EXECUTABLE h5dump) + find_program(H5DUMP_EXECUTABLE h5dump) if(NOT reportinglib_FOUND AND NOT sonata_FOUND) message(SEND_ERROR "Neither reportinglib nor SONATA libraries were found") elseif(reportinglib_FOUND AND sonata_FOUND) @@ -206,7 +229,7 @@ endif() # ============================================================================= if(CORENRN_ENABLE_NMODL) find_package(nmodl) - if (nmodl_FOUND) + if(nmodl_FOUND) set(CORENRN_NMODL_BINARY ${nmodl_BINARY}) set(CORENRN_NMODL_INCLUDE ${nmodl_INCLUDE}) # path to python interface @@ -222,7 +245,9 @@ if(CORENRN_ENABLE_NMODL) endif() include_directories(${CORENRN_NMODL_INCLUDE}) # set correct arguments for nmodl for cpu/gpu target - set(CORENRN_NMODL_FLAGS "" CACHE STRING "Extra NMODL options such as passes") + set(CORENRN_NMODL_FLAGS + "" + CACHE STRING "Extra NMODL options such as passes") if(CORENRN_ENABLE_GPU) string(APPEND CORENRN_NMODL_FLAGS " acc --oacc") endif() @@ -233,7 +258,6 @@ else() set(CORENRN_NMODL_INCLUDE ${CMAKE_BINARY_DIR}/include) endif() - # ============================================================================= # Profiler/Instrumentation Options # ============================================================================= @@ -277,7 +301,6 @@ else() set(COMPILER_FLAGS "${CMAKE_CXX_FLAGS_${BUILD_TYPE_UPPER}}") endif() - # ============================================================================= # Setup Doxygen documentation # ============================================================================= @@ -286,11 +309,11 @@ if(DOXYGEN_FOUND) # generate Doxyfile with correct source paths configure_file(${PROJECT_SOURCE_DIR}/docs/Doxyfile.in ${PROJECT_BINARY_DIR}/Doxyfile) add_custom_target( - doxygen - COMMAND ${DOXYGEN_EXECUTABLE} ${PROJECT_BINARY_DIR}/Doxyfile - WORKING_DIRECTORY ${PROJECT_BINARY_DIR} - COMMENT "Generating API documentation with Doxygen" - VERBATIM) + doxygen + COMMAND ${DOXYGEN_EXECUTABLE} ${PROJECT_BINARY_DIR}/Doxyfile + WORKING_DIRECTORY ${PROJECT_BINARY_DIR} + COMMENT "Generating API documentation with Doxygen" + VERBATIM) endif() # ============================================================================= @@ -302,12 +325,10 @@ if(SPHINX_FOUND) set(SPHINX_BUILD ${PROJECT_BINARY_DIR}/docs/) add_custom_target( - sphinx - COMMAND ${SPHINX_EXECUTABLE} -b html - ${SPHINX_SOURCE} ${SPHINX_BUILD} - WORKING_DIRECTORY ${PROJECT_BINARY_DIR} - COMMENT "Generating documentation with Sphinx" - ) + sphinx + COMMAND ${SPHINX_EXECUTABLE} -b html ${SPHINX_SOURCE} ${SPHINX_BUILD} + WORKING_DIRECTORY ${PROJECT_BINARY_DIR} + COMMENT "Generating documentation with Sphinx") endif() # ============================================================================= @@ -315,22 +336,19 @@ endif() # ============================================================================= if(DOXYGEN_FOUND AND SPHINX_FOUND) add_custom_target( - docs - COMMAND make doxygen - WORKING_DIRECTORY ${PROJECT_BINARY_DIR} - COMMAND make sphinx - WORKING_DIRECTORY ${PROJECT_BINARY_DIR} - COMMENT "Generating full documentation" - ) + docs + COMMAND make doxygen + WORKING_DIRECTORY ${PROJECT_BINARY_DIR} + COMMAND make sphinx + WORKING_DIRECTORY ${PROJECT_BINARY_DIR} + COMMENT "Generating full documentation") else() add_custom_target( - docs - VERBATIM COMMAND echo "Please install docs requirements (see docs/README.md)!" - COMMENT "Documentation generation not possible!" - ) + docs VERBATIM + COMMAND echo "Please install docs requirements (see docs/README.md)!" + COMMENT "Documentation generation not possible!") endif() - # ============================================================================= # Build status # ============================================================================= diff --git a/coreneuron/CMakeLists.txt b/coreneuron/CMakeLists.txt index 2448dd9a8..1723d3b57 100644 --- a/coreneuron/CMakeLists.txt +++ b/coreneuron/CMakeLists.txt @@ -1,15 +1,12 @@ # ============================================================================= -# Copyright (C) 2016-2019 Blue Brain Project +# Copyright (C) 2016-2020 Blue Brain Project # # See top-level LICENSE file for details. # ============================================================================= # commonly included directories -include_directories(utils/randoms - ${MPI_INCLUDE_PATH} - ${PROJECT_BINARY_DIR}/coreneuron - ${CMAKE_BINARY_DIR}/coreneuron - ${CMAKE_BINARY_DIR}/include) +include_directories(utils/randoms ${MPI_INCLUDE_PATH} ${PROJECT_BINARY_DIR}/coreneuron + ${CMAKE_BINARY_DIR}/coreneuron ${CMAKE_BINARY_DIR}/include) # put libraries (e.g. dll) in bin directory set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin) @@ -19,17 +16,19 @@ set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin) # ============================================================================= file(GLOB_RECURSE CORENEURON_HEADER_FILES "*.h*") file(GLOB_RECURSE CORENEURON_TEMPLATE_FILES "*.ipp") -file(GLOB CORENEURON_CODE_FILES - "apps/main1.cpp" - "apps/corenrn_parameters.cpp" - "gpu/*.cpp" - "io/*.cpp" - "io/reports/*.cpp" - "mechanism/*.cpp" - "mpi/*.cpp" - "network/*.cpp" - "permute/*.cpp" - "sim/*.cpp") +file( + GLOB + CORENEURON_CODE_FILES + "apps/main1.cpp" + "apps/corenrn_parameters.cpp" + "gpu/*.cpp" + "io/*.cpp" + "io/reports/*.cpp" + "mechanism/*.cpp" + "mpi/*.cpp" + "network/*.cpp" + "permute/*.cpp" + "sim/*.cpp") file(GLOB_RECURSE CORENEURON_UTILS_FILES "utils/*.c*") list(APPEND CORENEURON_CODE_FILES ${CORENEURON_UTILS_FILES}) file(GLOB_RECURSE CORENEURON_CUDA_FILES "*.cu") @@ -43,14 +42,23 @@ set(ENGINEMECH_CODE_FILE "mechanism/mech/enginemech.cpp") # for external mod files we need to generate modl_ref function in mod_func.c set(MODFUNC_PERL_SCRIPT "mechanism/mech/mod_func.c.pl") -# as openacc limits passing function pointers as arguments, mod2c translated files depend on a -# _kinderiv.h file that is constructed by kinderiv.py +# ~~~ +# as openacc limits passing function pointers as arguments, mod2c translated files +# depend on a _kinderiv.h file that is constructed by kinderiv.py +# ~~~ set(KINDERIV_PYTHON_SCRIPT "${CMAKE_CURRENT_SOURCE_DIR}/kinderiv.py") set(KINDERIV_HEADER_FILE "${CMAKE_CURRENT_BINARY_DIR}/_kinderiv.h") set(NMODL_UNITS_FILE "${CMAKE_BINARY_DIR}/share/nrnunits.lib") set(INBUILT_MOD_PATH "mechanism/mech/modfile") -set(INBUILT_MOD_FILES expsyn.mod exp2syn.mod hh.mod netstim.mod passive.mod pattern.mod stim.mod) +set(INBUILT_MOD_FILES + expsyn.mod + exp2syn.mod + hh.mod + netstim.mod + passive.mod + pattern.mod + stim.mod) # Has helper macro for generating cpp file from mod2c include(NmodlHelper) @@ -59,8 +67,7 @@ include(NmodlHelper) # Command for MOD to CPP conversion # ============================================================================= set(CORENRN_NMODL_COMMAND env "MODLUNIT=${NMODL_UNITS_FILE}" - "PYTHONPATH=${CORENRN_NMODL_PYTHONPATH}" - ${CORENRN_NMODL_BINARY}) + "PYTHONPATH=${CORENRN_NMODL_PYTHONPATH}" ${CORENRN_NMODL_BINARY}) if(${CORENRN_ENABLE_ISPC}) set(NMODL_CODEGEN_TARGET ispc) @@ -70,7 +77,8 @@ endif() # configure every mod file to configure with mod2c/nmodl foreach(MOD ${INBUILT_MOD_FILES}) - nmodl_to_cpp_target(KEY INBUILT_MOD MODFILE "${INBUILT_MOD_PATH}/${MOD}" TARGET ${NMODL_CODEGEN_TARGET}) + nmodl_to_cpp_target(KEY INBUILT_MOD MODFILE "${INBUILT_MOD_PATH}/${MOD}" TARGET + ${NMODL_CODEGEN_TARGET}) endforeach() set_source_files_properties(${NMODL_INBUILT_MOD_OUTPUTS} PROPERTIES GENERATED TRUE) @@ -80,9 +88,7 @@ if(CORENRN_ENABLE_ISPC) set(NMODL_ISPC_INBUILT_MOD_OUTPUTS ${NMODL_INBUILT_MOD_OUTPUTS}) list(FILTER NMODL_ISPC_INBUILT_MOD_OUTPUTS INCLUDE REGEX ".*\.ispc$") set_source_files_properties(${NMODL_ISPC_INBUILT_MOD_OUTPUTS} PROPERTIES LANGUAGE ISPC) - set_source_files_properties(${NMODL_ISPC_INBUILT_MOD_OUTPUTS} - PROPERTIES - COMPILE_FLAGS + set_source_files_properties(${NMODL_ISPC_INBUILT_MOD_OUTPUTS} PROPERTIES COMPILE_FLAGS "-I${CORENRN_NMODL_INCLUDE} --pic") endif() @@ -90,8 +96,10 @@ endif() # coreneuron GPU library # ============================================================================= if(CORENRN_ENABLE_GPU) - # artificial cells and some other cpp files (using Random123) should be compiled without OpenACC - # to avoid use of GPU Random123 streams + # ~~~ + # artificial cells and some other cpp files (using Random123) should be compiled + # without OpenACC to avoid use of GPU Random123 streams + # ~~~ set(OPENACC_EXCLUDED_FILES ${CMAKE_CURRENT_BINARY_DIR}/netstim.cpp ${CMAKE_CURRENT_BINARY_DIR}/netstim_inhpoisson.cpp @@ -100,36 +108,28 @@ if(CORENRN_ENABLE_GPU) ${CMAKE_CURRENT_SOURCE_DIR}/io/nrn_setup.cpp ${CMAKE_CURRENT_SOURCE_DIR}/io/global_vars.cpp) - set_source_files_properties(${DIMPLIC_CODE_FILE} - ${NMODL_INBUILT_MOD_OUTPUTS} - PROPERTIES - COMPILE_FLAGS - "") + set_source_files_properties(${DIMPLIC_CODE_FILE} ${NMODL_INBUILT_MOD_OUTPUTS} PROPERTIES + COMPILE_FLAGS "") - set_source_files_properties(${OPENACC_EXCLUDED_FILES} - PROPERTIES - COMPILE_FLAGS + set_source_files_properties(${OPENACC_EXCLUDED_FILES} PROPERTIES COMPILE_FLAGS "-DDISABLE_OPENACC") # TODO : only older PGI versions? if(${CMAKE_C_COMPILER_ID} STREQUAL "PGI") set_source_files_properties(${CMAKE_CURRENT_SOURCE_DIR}/scopmath_core/sparse_thread.c - PROPERTIES - COMPILE_FLAGS - "-ta=tesla:nollvm") + PROPERTIES COMPILE_FLAGS "-ta=tesla:nollvm") endif() # compile cuda files for multiple architecture - cuda_add_library("cudacoreneuron" - ${CORENEURON_CUDA_FILES} - OPTIONS - -arch=sm_30 - -gencode=arch=compute_30,code=sm_30 - -gencode=arch=compute_50,code=sm_50 - -gencode=arch=compute_52,code=sm_52 - -gencode=arch=compute_52,code=compute_52 - -Xcompiler - -fPIC) + cuda_add_library( + "cudacoreneuron" ${CORENEURON_CUDA_FILES} + OPTIONS -arch=sm_30 + -gencode=arch=compute_30,code=sm_30 + -gencode=arch=compute_50,code=sm_50 + -gencode=arch=compute_52,code=sm_52 + -gencode=arch=compute_52,code=compute_52 + -Xcompiler + -fPIC) set(link_cudacoreneuron cudacoreneuron) else() set(link_cudacoreneuron "") @@ -138,11 +138,12 @@ endif() # ============================================================================= # run KINDERIV_PYTHON_SCRIPT to generate _kinderiv.h # ============================================================================= -add_custom_command(OUTPUT "${KINDERIV_HEADER_FILE}" - DEPENDS ${NMODL_INBUILT_MOD_OUTPUTS} "${KINDERIV_PYTHON_SCRIPT}" - COMMAND ${PYTHON_EXECUTABLE} ${KINDERIV_PYTHON_SCRIPT} ${CMAKE_CURRENT_BINARY_DIR} - WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} - COMMENT "Generating kinderiv.h by inspecting MOD files") +add_custom_command( + OUTPUT "${KINDERIV_HEADER_FILE}" + DEPENDS ${NMODL_INBUILT_MOD_OUTPUTS} "${KINDERIV_PYTHON_SCRIPT}" + COMMAND ${PYTHON_EXECUTABLE} ${KINDERIV_PYTHON_SCRIPT} ${CMAKE_CURRENT_BINARY_DIR} + WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} + COMMENT "Generating kinderiv.h by inspecting MOD files") add_custom_target(kin_deriv_header DEPENDS "${KINDERIV_HEADER_FILE}") # ============================================================================= @@ -150,13 +151,9 @@ add_custom_target(kin_deriv_header DEPENDS "${KINDERIV_HEADER_FILE}") # ============================================================================= # main coreneuron library -add_library(coreneuron - ${COMPILE_LIBRARY_TYPE} - ${CORENEURON_HEADER_FILES} - ${CORENEURON_TEMPLATE_FILES} - ${CORENEURON_CODE_FILES} - ${cudacorenrn_objs} - ${NMODL_INBUILT_MOD_OUTPUTS}) +add_library( + coreneuron ${COMPILE_LIBRARY_TYPE} ${CORENEURON_HEADER_FILES} ${CORENEURON_TEMPLATE_FILES} + ${CORENEURON_CODE_FILES} ${cudacorenrn_objs} ${NMODL_INBUILT_MOD_OUTPUTS}) # need to have _kinderiv.h for mod2c generated files add_dependencies(coreneuron kin_deriv_header) @@ -165,45 +162,41 @@ add_dependencies(coreneuron kin_deriv_header) add_library(scopmath STATIC ${CORENEURON_HEADER_FILES} ${SCOPMATH_CODE_FILES}) # minimal main and dimplic file for nrnivmodl-core workflow -add_library(corenrnmech - ${COMPILE_LIBRARY_TYPE} - ${CORENEURON_HEADER_FILES} - ${ENGINEMECH_CODE_FILE} - ${DIMPLIC_CODE_FILE}) - -target_link_libraries(coreneuron - ${MPI_CXX_LIBRARIES} - ${reportinglib_LIBRARY} - ${sonatareport_LIBRARY} - ${link_cudacoreneuron} - ${CUDA_LIBRARIES} - ${CALIPER_LIB} - ${CALIPER_MPI_LIB} - ${likwid_LIBRARIES}) -target_include_directories(coreneuron SYSTEM PRIVATE - ${CORENEURON_PROJECT_SOURCE_DIR}/external/Random123/include) -target_include_directories(coreneuron SYSTEM PRIVATE ${CORENEURON_PROJECT_SOURCE_DIR}/external/CLI11/include) +add_library(corenrnmech ${COMPILE_LIBRARY_TYPE} ${CORENEURON_HEADER_FILES} ${ENGINEMECH_CODE_FILE} + ${DIMPLIC_CODE_FILE}) + +target_link_libraries( + coreneuron + ${MPI_CXX_LIBRARIES} + ${reportinglib_LIBRARY} + ${sonatareport_LIBRARY} + ${link_cudacoreneuron} + ${CUDA_LIBRARIES} + ${CALIPER_LIB} + ${CALIPER_MPI_LIB} + ${likwid_LIBRARIES}) +target_include_directories(coreneuron SYSTEM + PRIVATE ${CORENEURON_PROJECT_SOURCE_DIR}/external/Random123/include) +target_include_directories(coreneuron SYSTEM + PRIVATE ${CORENEURON_PROJECT_SOURCE_DIR}/external/CLI11/include) target_link_libraries(corenrnmech scopmath coreneuron) -set_target_properties(coreneuron corenrnmech scopmath ${link_cudacoreneuron} - PROPERTIES ARCHIVE_OUTPUT_DIRECTORY - ${CMAKE_BINARY_DIR}/lib - LIBRARY_OUTPUT_DIRECTORY - ${CMAKE_BINARY_DIR}/lib - POSITION_INDEPENDENT_CODE - ON) +set_target_properties( + coreneuron corenrnmech scopmath ${link_cudacoreneuron} + PROPERTIES ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib LIBRARY_OUTPUT_DIRECTORY + ${CMAKE_BINARY_DIR}/lib POSITION_INDEPENDENT_CODE ON) # ============================================================================= # create special-core with halfgap.mod for tests # ============================================================================= -add_custom_command(TARGET coreneuron - POST_BUILD - COMMAND ${CMAKE_BINARY_DIR}/bin/nrnivmodl-core - ${CORENEURON_PROJECT_SOURCE_DIR}/tests/integration/ring_gap/mod - WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/bin - BYPRODUCTS ${CMAKE_BINARY_DIR}/bin/${CMAKE_SYSTEM_PROCESSOR}/special-core - COMMENT "Running nrnivmodl-core with halfgap.mod") +add_custom_command( + TARGET coreneuron POST_BUILD + COMMAND ${CMAKE_BINARY_DIR}/bin/nrnivmodl-core + ${CORENEURON_PROJECT_SOURCE_DIR}/tests/integration/ring_gap/mod + WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/bin + BYPRODUCTS ${CMAKE_BINARY_DIR}/bin/${CMAKE_SYSTEM_PROCESSOR}/special-core + COMMENT "Running nrnivmodl-core with halfgap.mod") add_dependencies(coreneuron scopmath) # ============================================================================= @@ -213,12 +206,8 @@ add_dependencies(coreneuron scopmath) include_directories(${CORENEURON_PROJECT_SOURCE_DIR}) add_executable(nrniv-core "apps/coreneuron.cpp") -target_link_libraries(nrniv-core - corenrnmech - ${reportinglib_LIBRARY} - ${sonatareport_LIBRARY} - ${MPI_C_LIBRARIES} - ${MPI_CXX_LIBRARIES}) +target_link_libraries(nrniv-core corenrnmech ${reportinglib_LIBRARY} ${sonatareport_LIBRARY} + ${MPI_C_LIBRARIES} ${MPI_CXX_LIBRARIES}) set_target_properties(nrniv-core PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin) @@ -229,7 +218,9 @@ get_target_property(CORENRN_LINK_LIBS coreneuron LINK_LIBRARIES) if(NOT CORENRN_LINK_LIBS) set(CORENRN_LINK_LIBS "") endif() -set(CORENRN_LINK_LIBS "${CORENRN_LINK_LIBS}" PARENT_SCOPE) +set(CORENRN_LINK_LIBS + "${CORENRN_LINK_LIBS}" + PARENT_SCOPE) # ============================================================================= # Copy files for nrnivmodl-core workflow during build time @@ -243,53 +234,59 @@ configure_file(${ENGINEMECH_CODE_FILE} ${CMAKE_BINARY_DIR}/share/coreneuron/engi # Make headers avail to build tree configure_file(engine.h.in ${CMAKE_BINARY_DIR}/include/coreneuron/engine.h @ONLY) -file(GLOB_RECURSE main_headers RELATIVE "${CMAKE_CURRENT_SOURCE_DIR}" *.h *.hpp *.ispc) +file( + GLOB_RECURSE main_headers + RELATIVE "${CMAKE_CURRENT_SOURCE_DIR}" + *.h *.hpp *.ispc) + foreach(header ${main_headers}) configure_file("${header}" "${CMAKE_BINARY_DIR}/include/coreneuron/${header}" COPYONLY) endforeach() + configure_file("utils/profile/profiler_interface.h" ${CMAKE_BINARY_DIR}/include/coreneuron/nrniv/profiler_interface.h COPYONLY) if(NOT CORENRN_ENABLE_NMODL) - # MOD2C puts UNITS_FILE in share, but we need to see it in share/mod2c - # We create a link since we know neither the source location nor when its copied - FILE(MAKE_DIRECTORY "${CMAKE_BINARY_DIR}/share/mod2c/") - ADD_CUSTOM_TARGET(link_units ALL - COMMAND ${CMAKE_COMMAND} -E create_symlink - "${NMODL_UNITS_FILE}" "${CMAKE_BINARY_DIR}/share/mod2c/nrnunits.lib") + # ~~~ + # MOD2C puts UNITS_FILE in share, but we need to see it in share/mod2c We create + # a link since we know neither the source location nor when its copied + # ~~~ + file(MAKE_DIRECTORY "${CMAKE_BINARY_DIR}/share/mod2c/") + add_custom_target(link_units ALL COMMAND ${CMAKE_COMMAND} -E create_symlink "${NMODL_UNITS_FILE}" + "${CMAKE_BINARY_DIR}/share/mod2c/nrnunits.lib") endif() # main program required for building special-core file(COPY apps/coreneuron.cpp DESTINATION ${CMAKE_BINARY_DIR}/share/coreneuron) - # ============================================================================= # Install main targets # ============================================================================= # coreneuron main libraries -install(TARGETS coreneuron corenrnmech ${link_cudacoreneuron} - EXPORT coreneuron - LIBRARY DESTINATION lib - ARCHIVE DESTINATION lib - INCLUDES - DESTINATION $) +install( + TARGETS coreneuron corenrnmech ${link_cudacoreneuron} + EXPORT coreneuron + LIBRARY DESTINATION lib + ARCHIVE DESTINATION lib + INCLUDES DESTINATION $) # scopemath into share for nrnivmodl-core -install(TARGETS scopmath EXPORT coreneuron DESTINATION lib) +install( + TARGETS scopmath + EXPORT coreneuron + DESTINATION lib) # headers and some standalone code files for nrnivmodl-core -install(DIRECTORY ${CMAKE_BINARY_DIR}/include/coreneuron - DESTINATION include/ - FILES_MATCHING - PATTERN "*.h*" - PATTERN "*.ipp" - PATTERN "*.ispc") -install(FILES ${KINDERIV_PYTHON_SCRIPT} - ${MODFUNC_PERL_SCRIPT} - ${DIMPLIC_CODE_FILE} - ${ENGINEMECH_CODE_FILE} - DESTINATION share/coreneuron) +install( + DIRECTORY ${CMAKE_BINARY_DIR}/include/coreneuron + DESTINATION include/ + FILES_MATCHING + PATTERN "*.h*" + PATTERN "*.ipp" + PATTERN "*.ispc") +install(FILES ${KINDERIV_PYTHON_SCRIPT} ${MODFUNC_PERL_SCRIPT} ${DIMPLIC_CODE_FILE} + ${ENGINEMECH_CODE_FILE} DESTINATION share/coreneuron) # copy mod2c/nmodl for nrnivmodl-core install(PROGRAMS ${CORENRN_NMODL_BINARY} DESTINATION bin) @@ -303,5 +300,4 @@ install(TARGETS nrniv-core DESTINATION bin) install(FILES apps/coreneuron.cpp DESTINATION share/coreneuron) # install random123 and nmodl headers -install(DIRECTORY ${CMAKE_BINARY_DIR}/include/ - DESTINATION include) +install(DIRECTORY ${CMAKE_BINARY_DIR}/include/ DESTINATION include) diff --git a/external/nmodl b/external/nmodl index 806e08c68..f90f671e0 160000 --- a/external/nmodl +++ b/external/nmodl @@ -1 +1 @@ -Subproject commit 806e08c68a72d7a503beda8f83dc728fc0e41b60 +Subproject commit f90f671e03fd537540de359e52e21852a335f2b1 diff --git a/extra/CMakeLists.txt b/extra/CMakeLists.txt index 5d4714f03..6032cea82 100644 --- a/extra/CMakeLists.txt +++ b/extra/CMakeLists.txt @@ -1,5 +1,5 @@ # ============================================================================= -# Copyright (C) 2016-2019 Blue Brain Project +# Copyright (C) 2016-2020 Blue Brain Project # # See top-level LICENSE file for details. # ============================================================================= @@ -12,13 +12,15 @@ get_directory_property(CORENRN_COMPILE_FLAGS COMPILE_DEFINITIONS) if(CORENRN_COMPILE_FLAGS) set(CORENRN_COMPILE_DEFS "") - foreach( flag ${CORENRN_COMPILE_FLAGS} ) + foreach(flag ${CORENRN_COMPILE_FLAGS}) set(CORENRN_COMPILE_DEFS "${CORENRN_COMPILE_DEFS} -D${flag}") endforeach() endif() -# find_cuda uses FindThreads that adds below imported target -# we shouldn't add imported target to link line +# ~~~ +# find_cuda uses FindThreads that adds below imported target we shouldn't add +# imported target to link line +# ~~~ list(REMOVE_ITEM CORENRN_LINK_LIBS "Threads::Threads") # replicate CMake magic to transform system libs to -l @@ -28,11 +30,7 @@ foreach(link_lib ${CORENRN_LINK_LIBS}) string(APPEND CORENRN_LINK_DEFS " -l${link_lib}") elseif("${path}" MATCHES "^(/lib|/lib64|/usr/lib|/usr/lib64)$") get_filename_component(libname ${link_lib} NAME_WE) - string(REGEX - REPLACE "^lib" - "" - libname - ${libname}) + string(REGEX REPLACE "^lib" "" libname ${libname}) string(APPEND CORENRN_LINK_DEFS " -l${libname}") else() string(APPEND CORENRN_LINK_DEFS " ${link_lib}") @@ -40,10 +38,7 @@ foreach(link_lib ${CORENRN_LINK_LIBS}) endforeach() # PGI compiler add --c++14;-A option for c++14 flag -string(REPLACE ";" - " " - CXX14_STANDARD_COMPILE_OPTION - "${CMAKE_CXX14_STANDARD_COMPILE_OPTION}") +string(REPLACE ";" " " CXX14_STANDARD_COMPILE_OPTION "${CMAKE_CXX14_STANDARD_COMPILE_OPTION}") # compiler flags depending on BUILD_TYPE (configured as BUILD_TYPE__FLAGS) string(TOUPPER "${CMAKE_BUILD_TYPE}" _BUILD_TYPE) @@ -68,8 +63,10 @@ set(nmodl_binary_name ${nmodl_name}) # Install first into build directory and then to install prefix # ============================================================================= -configure_file(nrnivmodl_core_makefile.in ${CMAKE_BINARY_DIR}/share/coreneuron/nrnivmodl_core_makefile @ONLY) +configure_file(nrnivmodl_core_makefile.in + ${CMAKE_BINARY_DIR}/share/coreneuron/nrnivmodl_core_makefile @ONLY) configure_file(nrnivmodl-core.in ${CMAKE_BINARY_DIR}/bin/nrnivmodl-core @ONLY) -install(FILES ${CMAKE_BINARY_DIR}/share/coreneuron/nrnivmodl_core_makefile DESTINATION share/coreneuron) +install(FILES ${CMAKE_BINARY_DIR}/share/coreneuron/nrnivmodl_core_makefile + DESTINATION share/coreneuron) install(PROGRAMS ${CMAKE_BINARY_DIR}/bin/nrnivmodl-core DESTINATION bin) diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index c647ac1c8..2de5d7a01 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -1,5 +1,5 @@ # ============================================================================= -# Copyright (C) 2016-2019 Blue Brain Project +# Copyright (C) 2016-2020 Blue Brain Project # # See top-level LICENSE file for details. # ============================================================================= @@ -13,11 +13,7 @@ if(NOT Boost_USE_STATIC_LIBS) endif() set(Boost_NO_BOOST_CMAKE TRUE) -find_package(Boost 1.41.0 QUIET - COMPONENTS filesystem - system - atomic - unit_test_framework) +find_package(Boost 1.41.0 QUIET COMPONENTS filesystem system atomic unit_test_framework) if(Boost_FOUND) if(CORENRN_ENABLE_UNIT_TESTS) diff --git a/tests/integration/CMakeLists.txt b/tests/integration/CMakeLists.txt index 6a2b10fbc..b4dfebfeb 100644 --- a/tests/integration/CMakeLists.txt +++ b/tests/integration/CMakeLists.txt @@ -1,5 +1,5 @@ # ============================================================================= -# Copyright (C) 2016-2019 Blue Brain Project +# Copyright (C) 2016-2020 Blue Brain Project # # See top-level LICENSE file for details. # ============================================================================= @@ -29,23 +29,26 @@ set(TEST_CASES_WITH_ARGS "ring_gap_permute2!${RING_GAP_COMMON_ARGS} ${GPU_ARGS} --outpath ${CMAKE_CURRENT_BINARY_DIR}/ring_gap_permute2 ${PERMUTE2_ARGS}" ) -set(NEGATIVE_TEST_CASES_WITH_ARGS "ring_different_seed!${RING_COMMON_ARGS} ${GPU_ARGS} --outpath ${CMAKE_CURRENT_BINARY_DIR}/ring_different_seed --seed 123456") +set(NEGATIVE_TEST_CASES_WITH_ARGS + "ring_different_seed!${RING_COMMON_ARGS} ${GPU_ARGS} --outpath ${CMAKE_CURRENT_BINARY_DIR}/ring_different_seed --seed 123456" +) +# ~~~ # There are no directories for permute and multisend related tests, -# create them and copy ref spikes +# create them and copy reference spikes +# ~~~ foreach(data_dir "ring" "ring_gap") - foreach(test_suffix - "multisend" - "binqueue" - "savestate_permute0" - "savestate_permute1" - "savestate_permute2" - "permute1" - "permute2") - file(COPY - "${CMAKE_CURRENT_SOURCE_DIR}/${data_dir}/out.dat.ref" - DESTINATION - "${CMAKE_CURRENT_BINARY_DIR}/${data_dir}_${test_suffix}/") + foreach( + test_suffix + "multisend" + "binqueue" + "savestate_permute0" + "savestate_permute1" + "savestate_permute2" + "permute1" + "permute2") + file(COPY "${CMAKE_CURRENT_SOURCE_DIR}/${data_dir}/out.dat.ref" + DESTINATION "${CMAKE_CURRENT_BINARY_DIR}/${data_dir}_${test_suffix}/") endforeach() endforeach() @@ -58,50 +61,38 @@ foreach(data_dir "ring" "ring_gap") endforeach() # test for small spike buffer -file(COPY - "${CMAKE_CURRENT_SOURCE_DIR}/ring/out.dat.ref" - DESTINATION - "${CMAKE_CURRENT_BINARY_DIR}/ring_spike_buffer/") +file(COPY "${CMAKE_CURRENT_SOURCE_DIR}/ring/out.dat.ref" + DESTINATION "${CMAKE_CURRENT_BINARY_DIR}/ring_spike_buffer/") # Configure test scripts foreach(args_line ${TEST_CASES_WITH_ARGS}) - string(REPLACE "!" - ";" - string_line - ${args_line}) + string(REPLACE "!" ";" string_line ${args_line}) if(MPI_FOUND) - string(REPLACE ";" - " " - SRUN_PREFIX - "${TEST_MPI_EXEC_BIN};-n;2") + string(REPLACE ";" " " SRUN_PREFIX "${TEST_MPI_EXEC_BIN};-n;2") endif() list(GET string_line 0 TEST_NAME) list(GET string_line 1 TEST_ARGS) set(SIM_NAME ${TEST_NAME}) configure_file(integration_test.sh.in ${TEST_NAME}/integration_test.sh @ONLY) - add_test(NAME ${TEST_NAME}_TEST - COMMAND "/bin/sh" ${CMAKE_CURRENT_BINARY_DIR}/${TEST_NAME}/integration_test.sh - WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/${TEST_NAME}") + add_test( + NAME ${TEST_NAME}_TEST + COMMAND "/bin/sh" ${CMAKE_CURRENT_BINARY_DIR}/${TEST_NAME}/integration_test.sh + WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/${TEST_NAME}") endforeach() foreach(args_line ${NEGATIVE_TEST_CASES}) - string(REPLACE "!" - ";" - string_line - ${args_line}) + string(REPLACE "!" ";" string_line ${args_line}) if(MPI_FOUND) - string(REPLACE ";" - " " - SRUN_PREFIX - "${TEST_MPI_EXEC_BIN};-n;2") + string(REPLACE ";" " " SRUN_PREFIX "${TEST_MPI_EXEC_BIN};-n;2") endif() list(GET string_line 0 TEST_NAME) list(GET string_line 1 TEST_ARGS) set(SIM_NAME ${TEST_NAME}) configure_file(negative_integration_test.sh.in ${TEST_NAME}/negative_integration_test.sh @ONLY) - add_test(NAME ${TEST_NAME}_TEST - COMMAND "/bin/sh" ${CMAKE_CURRENT_BINARY_DIR}/${TEST_NAME}/negative_integration_test.sh - WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/${TEST_NAME}") + add_test( + NAME ${TEST_NAME}_TEST + COMMAND "/bin/sh" ${CMAKE_CURRENT_BINARY_DIR}/${TEST_NAME}/negative_integration_test.sh + WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/${TEST_NAME}") endforeach() if(CORENRN_ENABLE_REPORTING) @@ -111,8 +102,9 @@ if(CORENRN_ENABLE_REPORTING) configure_file(reportinglib/${TEST_NAME}.conf.in ${SIM_NAME}/${TEST_NAME}.conf @ONLY) configure_file(reportinglib/reporting_test.sh.in ${SIM_NAME}/reporting_test.sh @ONLY) configure_file(reportinglib/${TEST_NAME}.check.in ${SIM_NAME}/${TEST_NAME}.check @ONLY) - add_test(NAME ${SIM_NAME} - COMMAND "/bin/sh" ${CMAKE_CURRENT_BINARY_DIR}/${SIM_NAME}/reporting_test.sh - WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/${SIM_NAME}") + add_test( + NAME ${SIM_NAME} + COMMAND "/bin/sh" ${CMAKE_CURRENT_BINARY_DIR}/${SIM_NAME}/reporting_test.sh + WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/${SIM_NAME}") endforeach() endif() diff --git a/tests/unit/alignment/CMakeLists.txt b/tests/unit/alignment/CMakeLists.txt index 1940230ec..22e9e5720 100644 --- a/tests/unit/alignment/CMakeLists.txt +++ b/tests/unit/alignment/CMakeLists.txt @@ -1,5 +1,5 @@ # ============================================================================= -# Copyright (C) 2016-2019 Blue Brain Project +# Copyright (C) 2016-2020 Blue Brain Project # # See top-level LICENSE file for details. # ============================================================================= @@ -14,5 +14,5 @@ if(CORENRN_ENABLE_GPU) target_link_libraries(alignment_test_bin ${link_cudacoreneuron} ${CUDA_LIBRARIES}) endif() -add_test(NAME alignment_test - COMMAND ${TEST_EXEC_PREFIX} ${CMAKE_CURRENT_BINARY_DIR}/alignment_test_bin) +add_test(NAME alignment_test COMMAND ${TEST_EXEC_PREFIX} + ${CMAKE_CURRENT_BINARY_DIR}/alignment_test_bin) diff --git a/tests/unit/cmdline_interface/CMakeLists.txt b/tests/unit/cmdline_interface/CMakeLists.txt index 4d47778a9..9f2837d27 100644 --- a/tests/unit/cmdline_interface/CMakeLists.txt +++ b/tests/unit/cmdline_interface/CMakeLists.txt @@ -1,5 +1,5 @@ # ============================================================================= -# Copyright (C) 2016-2019 Blue Brain Project +# Copyright (C) 2016-2020 Blue Brain Project # # See top-level LICENSE file for details. # ============================================================================= @@ -7,13 +7,11 @@ file(GLOB cmd_interface_test_src "*.cpp") add_executable(cmd_interface_test_bin ${cmd_interface_test_src}) -target_link_libraries(cmd_interface_test_bin - ${MPI_CXX_LIBRARIES} - ${Boost_UNIT_TEST_FRAMEWORK_LIBRARY} - coreneuron - ${reportinglib_LIBRARY} - ${sonatareport_LIBRARY}) -target_include_directories(cmd_interface_test_bin SYSTEM PRIVATE ${CORENEURON_PROJECT_SOURCE_DIR}/external/CLI11/include) +target_link_libraries( + cmd_interface_test_bin ${MPI_CXX_LIBRARIES} ${Boost_UNIT_TEST_FRAMEWORK_LIBRARY} coreneuron + ${reportinglib_LIBRARY} ${sonatareport_LIBRARY}) +target_include_directories(cmd_interface_test_bin SYSTEM + PRIVATE ${CORENEURON_PROJECT_SOURCE_DIR}/external/CLI11/include) -add_test(NAME cmd_interface_test - COMMAND ${TEST_EXEC_PREFIX} ${CMAKE_CURRENT_BINARY_DIR}/cmd_interface_test_bin) +add_test(NAME cmd_interface_test COMMAND ${TEST_EXEC_PREFIX} + ${CMAKE_CURRENT_BINARY_DIR}/cmd_interface_test_bin) diff --git a/tests/unit/interleave_info/CMakeLists.txt b/tests/unit/interleave_info/CMakeLists.txt index f6e524699..c59a5804e 100644 --- a/tests/unit/interleave_info/CMakeLists.txt +++ b/tests/unit/interleave_info/CMakeLists.txt @@ -1,5 +1,5 @@ # ============================================================================= -# Copyright (C) 2016-2019 Blue Brain Project +# Copyright (C) 2016-2020 Blue Brain Project # # See top-level LICENSE file for details. # ============================================================================= @@ -7,12 +7,8 @@ file(GLOB interleave_info_src "*.cpp") add_executable(interleave_info_bin ${interleave_info_src}) -target_link_libraries(interleave_info_bin - ${MPI_CXX_LIBRARIES} - ${Boost_UNIT_TEST_FRAMEWORK_LIBRARY} - coreneuron - ${reportinglib_LIBRARY} - ${sonatareport_LIBRARY}) +target_link_libraries(interleave_info_bin ${MPI_CXX_LIBRARIES} ${Boost_UNIT_TEST_FRAMEWORK_LIBRARY} + coreneuron ${reportinglib_LIBRARY} ${sonatareport_LIBRARY}) add_test(NAME interleave_info_constructor_test - COMMAND ${TEST_EXEC_PREFIX} ${CMAKE_CURRENT_BINARY_DIR}/interleave_info_bin) + COMMAND ${TEST_EXEC_PREFIX} ${CMAKE_CURRENT_BINARY_DIR}/interleave_info_bin) diff --git a/tests/unit/queueing/CMakeLists.txt b/tests/unit/queueing/CMakeLists.txt index bc9562598..b3994c46e 100644 --- a/tests/unit/queueing/CMakeLists.txt +++ b/tests/unit/queueing/CMakeLists.txt @@ -1,5 +1,5 @@ # ============================================================================= -# Copyright (C) 2016-2019 Blue Brain Project +# Copyright (C) 2016-2020 Blue Brain Project # # See top-level LICENSE file for details. # ============================================================================= @@ -7,11 +7,7 @@ file(GLOB queuing_test_src "*.cpp") add_executable(queuing_test_bin ${queuing_test_src}) -target_link_libraries(queuing_test_bin - ${Boost_UNIT_TEST_FRAMEWORK_LIBRARY} - ${Boost_SYSTEM_LIBRARY} - coreneuron - ${reportinglib_LIBRARY} - ${sonatareport_LIBRARY}) +target_link_libraries(queuing_test_bin ${Boost_UNIT_TEST_FRAMEWORK_LIBRARY} ${Boost_SYSTEM_LIBRARY} + coreneuron ${reportinglib_LIBRARY} ${sonatareport_LIBRARY}) add_test(NAME queuing_test COMMAND ${TEST_EXEC_PREFIX} ${CMAKE_CURRENT_BINARY_DIR}/queuing_test_bin)