Skip to content
This repository was archived by the owner on Mar 20, 2023. It is now read-only.

Commit 45153b3

Browse files
ferdonlinepramodk
authored andcommitted
nrnivmodl-core implementation for coreneuron (#130)
Allow coreneuron to build executable from mod files (similar to nrnvimodl in NEURON) : * Integration for nrnivmodl as nrnivmodl-core * Build executable as special-core * Refactor kinderiv.py * Remove legacy cmake file and update flags for intel compiler * Install data files to share/coreneuron
1 parent 07be921 commit 45153b3

File tree

13 files changed

+444
-303
lines changed

13 files changed

+444
-303
lines changed

CMake/config/CompilerFlagsHelpers.cmake

Lines changed: 21 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@
2626

2727

2828
# CompilerFlagsHelpers.cmake
29-
#
29+
#
3030
# set of Convenience functions for portable compiler flags
3131

3232

@@ -56,7 +56,7 @@ endforeach()
5656
foreach(COMPILER_LANGUAGE ${SUPPORTED_COMPILER_LANGUAGE_LIST})
5757

5858
# XLC compiler
59-
if(CMAKE_${COMPILER_LANGUAGE}_COMPILER_IS_XLC)
59+
if(CMAKE_${COMPILER_LANGUAGE}_COMPILER_IS_XLC)
6060

6161
# XLC -qinfo=all is awfully verbose on any platforms that use the GNU STL
6262
# Enable by default only the relevant one
@@ -71,14 +71,14 @@ foreach(COMPILER_LANGUAGE ${SUPPORTED_COMPILER_LANGUAGE_LIST})
7171

7272
set(CMAKE_${COMPILER_LANGUAGE}_STACK_PROTECTION "-qstackprotect")
7373

74-
set(CMAKE_${COMPILER_LANGUAGE}_POSITION_INDEPENDANT "-qpic=small")
74+
set(CMAKE_${COMPILER_LANGUAGE}_POSITION_INDEPENDENT "-qpic=small")
7575

7676
set(CMAKE_${COMPILER_LANGUAGE}_VECTORIZE "-qhot")
7777
set(ADDITIONAL_THREADSAFE_FLAGS "-qthreaded")
7878
set(IGNORE_UNKNOWN_PRAGMA_FLAGS "-qsuppress=1506-224")
7979

8080
# Microsoft compiler
81-
elseif(CMAKE_${COMPILER_LANGUAGE}_COMPILER_IS_MSVC)
81+
elseif(CMAKE_${COMPILER_LANGUAGE}_COMPILER_IS_MSVC)
8282

8383
set(CMAKE_${COMPILER_LANGUAGE}_DEBUGINFO_FLAGS "-Zi")
8484

@@ -90,12 +90,12 @@ foreach(COMPILER_LANGUAGE ${SUPPORTED_COMPILER_LANGUAGE_LIST})
9090
set(CMAKE_${COMPILER_LANGUAGE}_STACK_PROTECTION "-GS")
9191

9292
# enable by default on MSVC
93-
set(CMAKE_${COMPILER_LANGUAGE}_POSITION_INDEPENDANT "")
93+
set(CMAKE_${COMPILER_LANGUAGE}_POSITION_INDEPENDENT "")
9494

9595
## GCC
9696
elseif(CMAKE_${COMPILER_LANGUAGE}_COMPILER_IS_GCC)
9797

98-
set(CMAKE_${COMPILER_LANGUAGE}_WARNING_ALL "")
98+
set(CMAKE_${COMPILER_LANGUAGE}_WARNING_ALL "-Wall")
9999
set(CMAKE_${COMPILER_LANGUAGE}_DEBUGINFO_FLAGS "-g")
100100

101101
set(CMAKE_${COMPILER_LANGUAGE}_OPT_NONE "-O0")
@@ -105,12 +105,12 @@ foreach(COMPILER_LANGUAGE ${SUPPORTED_COMPILER_LANGUAGE_LIST})
105105

106106
set(CMAKE_${COMPILER_LANGUAGE}_STACK_PROTECTION "-fstack-protector")
107107

108-
set(CMAKE_${COMPILER_LANGUAGE}_POSITION_INDEPENDANT "-fPIC")
108+
set(CMAKE_${COMPILER_LANGUAGE}_POSITION_INDEPENDENT "-fPIC")
109109

110110
set(CMAKE_${COMPILER_LANGUAGE}_VECTORIZE "-ftree-vectorize")
111111
set(IGNORE_UNKNOWN_PRAGMA_FLAGS "-Wno-unknown-pragmas")
112112

113-
if(CMAKE_${COMPILER_LANGUAGE}_COMPILER_IS_GCC AND ( CMAKE_${COMPILER_LANGUAGE}_COMPILER_VERSION VERSION_GREATER "4.7.0") )
113+
if(CMAKE_${COMPILER_LANGUAGE}_COMPILER_VERSION VERSION_GREATER "4.7.0")
114114
set(CMAKE_${COMPILER_LANGUAGE}_LINK_TIME_OPT "-flto")
115115
endif()
116116

@@ -123,28 +123,26 @@ foreach(COMPILER_LANGUAGE ${SUPPORTED_COMPILER_LANGUAGE_LIST})
123123

124124
## rest of the world
125125
else()
126+
set(CMAKE_${COMPILER_LANGUAGE}_WARNING_ALL "-Wall")
127+
set(CMAKE_${COMPILER_LANGUAGE}_DEBUGINFO_FLAGS "-g")
126128

127-
## unknown compiler flags produce error on Cray and hence just set this for intel now
128-
if(CMAKE_${COMPILER_LANGUAGE}_COMPILER_IS_ICC)
129-
set(IGNORE_UNKNOWN_PRAGMA_FLAGS "-Wno-unknown-pragmas")
130-
endif()
131-
132-
set(CMAKE_${COMPILER_LANGUAGE}_WARNING_ALL "")
133-
134-
set(CMAKE_${COMPILER_LANGUAGE}_DEBUGINFO_FLAGS "")
135-
136-
set(CMAKE_${COMPILER_LANGUAGE}_OPT_NONE "")
137-
set(CMAKE_${COMPILER_LANGUAGE}_OPT_NORMAL "")
138-
set(CMAKE_${COMPILER_LANGUAGE}_OPT_AGGRESSIVE "")
139-
set(CMAKE_${COMPILER_LANGUAGE}_OPT_FASTEST "")
129+
set(CMAKE_${COMPILER_LANGUAGE}_OPT_NONE "-O0")
130+
set(CMAKE_${COMPILER_LANGUAGE}_OPT_NORMAL "-O2")
131+
set(CMAKE_${COMPILER_LANGUAGE}_OPT_AGGRESSIVE "-O3")
132+
set(CMAKE_${COMPILER_LANGUAGE}_OPT_FASTEST "-O3")
140133

141134
set(CMAKE_${COMPILER_LANGUAGE}_STACK_PROTECTION "")
142-
set(CMAKE_${COMPILER_LANGUAGE}_POSITION_INDEPENDANT "")
135+
set(CMAKE_${COMPILER_LANGUAGE}_POSITION_INDEPENDENT "-fPIC")
143136
set(CMAKE_${COMPILER_LANGUAGE}_VECTORIZE "")
144137

138+
if(CMAKE_${COMPILER_LANGUAGE}_COMPILER_IS_ICC)
139+
## unknown compiler flags produce error on Cray and hence just set this for intel now
140+
set(IGNORE_UNKNOWN_PRAGMA_FLAGS "-Wno-unknown-pragmas")
141+
## Intel O3 is extreme
142+
set(CMAKE_${COMPILER_LANGUAGE}_OPT_AGGRESSIVE "-O2")
143+
endif()
145144
endif()
146145

147146
endforeach()
148147

149148

150-

CMake/config/DefineInstallationPaths.cmake

Lines changed: 8 additions & 148 deletions
Original file line numberDiff line numberDiff line change
@@ -25,151 +25,11 @@
2525
# THE POSSIBILITY OF SUCH DAMAGE.
2626

2727

28-
IF (UNIX)
29-
IF (NOT APPLICATION_NAME)
30-
MESSAGE(STATUS "${PROJECT_NAME} is used as APPLICATION_NAME")
31-
SET(APPLICATION_NAME ${PROJECT_NAME})
32-
ENDIF (NOT APPLICATION_NAME)
33-
34-
# detect lib suffix
35-
36-
GET_PROPERTY(LIB64_SUFFIX GLOBAL PROPERTY FIND_LIBRARY_USE_LIB64_PATHS)
37-
38-
IF(LIB64_SUFFIX)
39-
SET(LIB_SUFFIX "64"
40-
CACHE STRING "Suffix of the lib")
41-
ELSE()
42-
SET(LIB_SUFFIX ""
43-
CACHE STRING "Suffix of the lib")
44-
ENDIF()
45-
46-
47-
# correct cmake netpath issue with cmake 2.8
48-
IF("${CMAKE_INSTALL_PREFIX}" STREQUAL "/")
49-
SET(INTERNAL_BASE_PREFIX "")
50-
ELSE("${CMAKE_INSTALL_PREFIX}" STREQUAL "/")
51-
SET(INTERNAL_BASE_PREFIX "${CMAKE_INSTALL_PREFIX}")
52-
ENDIF("${CMAKE_INSTALL_PREFIX}" STREQUAL "/")
53-
54-
SET(EXEC_INSTALL_PREFIX
55-
"${CMAKE_INSTALL_PREFIX}"
56-
CACHE PATH "Base directory for executables and libraries"
57-
)
58-
59-
60-
61-
SET(SHARE_INSTALL_PREFIX
62-
"${INTERNAL_BASE_PREFIX}/share"
63-
CACHE PATH "Base directory for files which go to share/"
64-
)
65-
SET(DATA_INSTALL_PREFIX
66-
"${INTERNAL_BASE_PREFIX}/${APPLICATION_NAME}"
67-
CACHE PATH "The parent directory where applications can install their data")
68-
69-
# The following are directories where stuff will be installed to
70-
SET(BIN_INSTALL_DIR
71-
"${INTERNAL_BASE_PREFIX}/bin"
72-
CACHE PATH "The ${APPLICATION_NAME} binary install dir (default prefix/bin)"
73-
)
74-
SET(SBIN_INSTALL_DIR
75-
"${INTERNAL_BASE_PREFIX}/sbin"
76-
CACHE PATH "The ${APPLICATION_NAME} sbin install dir (default prefix/sbin)"
77-
)
78-
SET(LIB_INSTALL_DIR
79-
"${INTERNAL_BASE_PREFIX}/lib${LIB_SUFFIX}"
80-
CACHE PATH "The subdirectory relative to the install prefix where libraries will be installed (default is prefix/lib)"
81-
)
82-
SET(LIBEXEC_INSTALL_DIR
83-
"${INTERNAL_BASE_PREFIX}/libexec"
84-
CACHE PATH "The subdirectory relative to the install prefix where libraries will be installed (default is prefix/libexec)"
85-
)
86-
87-
SET(PKGCONFIG_FILES_DIR
88-
"${LIB_INSTALL_DIR}/pkgconfig/"
89-
CACHE PATH "subdirectory relative to the install prefix where pkgconfig files (.pc) will be installed"
90-
)
91-
92-
SET(PLUGIN_INSTALL_DIR
93-
"${LIB_INSTALL_DIR}/${APPLICATION_NAME}"
94-
CACHE PATH "The subdirectory relative to the install prefix where plugins will be installed (default is prefix/lib/${APPLICATION_NAME})"
95-
)
96-
SET(INCLUDE_INSTALL_DIR
97-
"${INTERNAL_BASE_PREFIX}/include"
98-
CACHE PATH "The subdirectory to the header prefix (default prefix/include)"
99-
)
100-
101-
SET(DATA_INSTALL_DIR
102-
"${DATA_INSTALL_PREFIX}"
103-
CACHE PATH "The parent directory where applications can install their data (default prefix/share/${APPLICATION_NAME})"
104-
)
105-
106-
SET(DOC_INSTALL_DIR
107-
"${SHARE_INSTALL_PREFIX}/doc/${APPLICATION_NAME}"
108-
CACHE PATH "The parent directory where applications can install their documentation (default prefix/share/doc/${APPLICATION_NAME})"
109-
)
110-
111-
SET(HTML_INSTALL_DIR
112-
"${DATA_INSTALL_PREFIX}/doc/HTML"
113-
CACHE PATH "The HTML install dir for documentation (default data/doc/html)"
114-
)
115-
SET(ICON_INSTALL_DIR
116-
"${DATA_INSTALL_PREFIX}/icons"
117-
CACHE PATH "The icon install dir (default data/icons/)"
118-
)
119-
SET(SOUND_INSTALL_DIR
120-
"${DATA_INSTALL_PREFIX}/sounds"
121-
CACHE PATH "The install dir for sound files (default data/sounds)"
122-
)
123-
124-
SET(LOCALE_INSTALL_DIR
125-
"${SHARE_INSTALL_PREFIX}/locale"
126-
CACHE PATH "The install dir for translations (default prefix/share/locale)"
127-
)
128-
129-
SET(XDG_APPS_DIR
130-
"${SHARE_INSTALL_PREFIX}/applications/"
131-
CACHE PATH "The XDG apps dir"
132-
)
133-
SET(XDG_DIRECTORY_DIR
134-
"${SHARE_INSTALL_PREFIX}/desktop-directories"
135-
CACHE PATH "The XDG directory"
136-
)
137-
138-
SET(SYSCONF_INSTALL_DIR
139-
"${EXEC_INSTALL_PREFIX}/etc"
140-
CACHE PATH "The ${APPLICATION_NAME} sysconfig install dir (default prefix/etc)"
141-
)
142-
SET(MAN_INSTALL_DIR
143-
"${SHARE_INSTALL_PREFIX}/man"
144-
CACHE PATH "The ${APPLICATION_NAME} man install dir (default prefix/man)"
145-
)
146-
SET(INFO_INSTALL_DIR
147-
"${SHARE_INSTALL_PREFIX}/info"
148-
CACHE PATH "The ${APPLICATION_NAME} info install dir (default prefix/info)"
149-
)
150-
ENDIF (UNIX)
151-
152-
if (WIN32)
153-
# Same same
154-
SET(EXEC_INSTALL_PREFIX
155-
"${CMAKE_INSTALL_PREFIX}"
156-
CACHE PATH "Base directory for executables and libraries"
157-
)
158-
set(BIN_INSTALL_DIR "${EXEC_INSTALL_PREFIX}/bin" CACHE PATH "-")
159-
set(SBIN_INSTALL_DIR "${EXEC_INSTALL_PREFIX}/bin" CACHE PATH "-")
160-
set(LIB_INSTALL_DIR "${EXEC_INSTALL_PREFIX}/bin" CACHE PATH "-")
161-
set(INCLUDE_INSTALL_DIR "${EXEC_INSTALL_PREFIX}/include" CACHE PATH "-")
162-
SET(SYSCONF_INSTALL_DIR
163-
"${CMAKE_INSTALL_PREFIX}/etc"
164-
CACHE PATH "The ${APPLICATION_NAME} sysconfig install dir (default prefix/etc)"
165-
)
166-
SET(PKGCONFIG_FILES_DIR "${EXEC_INSTALL_PREFIX}/lib/pkgconfig/"
167-
CACHE PATH "subdirectory relative to the install prefix where pkgconfig files (.pc) will be installed"
168-
)
169-
set(PLUGIN_INSTALL_DIR "${EXEC_INSTALL_PREFIX}/bin/plugins" CACHE PATH "-")
170-
set(HTML_INSTALL_DIR "${EXEC_INSTALL_PREFIX}/doc/HTML" CACHE PATH "-")
171-
set(ICON_INSTALL_DIR "." CACHE PATH "-")
172-
set(SOUND_INSTALL_DIR "." CACHE PATH "-")
173-
set(LOCALE_INSTALL_DIR "lang" CACHE PATH "-")
174-
endif (WIN32)
175-
28+
IF (NOT APPLICATION_NAME)
29+
MESSAGE(STATUS "${PROJECT_NAME} is used as APPLICATION_NAME")
30+
SET(APPLICATION_NAME ${PROJECT_NAME})
31+
ENDIF (NOT APPLICATION_NAME)
32+
33+
# Manual implementation not required since there are standard Dirs defined in GNUInstallDirs
34+
# See https://cmake.org/cmake/help/v3.0/module/GNUInstallDirs.html
35+
include(GNUInstallDirs)

CMakeLists.txt

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -78,9 +78,8 @@ set(MOD2C "" CACHE FILEPATH "Path of MOD2C binary")
7878
option(UNIT_TESTS "Enable unit tests compilation and execution" ON)
7979
option(FUNCTIONAL_TESTS "Enable functional tests compilation and execution" ON)
8080

81-
# For external development, allow one to install all headers and mod files
82-
# todo: need to refactor to install specific set of headers only
83-
option(ENABLE_DEV_FILES_INSTALLATION "Allow to install hedaers/mod files for development" OFF)
81+
# todo: need to refactor to install only necessary header files
82+
option(ENABLE_HEADER_INSTALL "Install hedaers files for standalone compilation" ON)
8483

8584
list(APPEND CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/CMake
8685
${PROJECT_SOURCE_DIR}/CMake/portability
@@ -278,5 +277,7 @@ else()
278277
endif(Boost_FOUND)
279278

280279

280+
add_subdirectory(extra)
281+
281282
# Documentation
282283
#include(DoxygenRule)

apps/CMakeLists.txt

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -30,14 +30,18 @@ include_directories(${PROJECT_SOURCE_DIR} ${PROJECT_SOURCE_DIR}/coreneuron ${CMA
3030
# The mechanism registration function will be always defined from extra mechanisms in test directory
3131
add_definitions(-DADDITIONAL_MECHS)
3232

33+
# LIbrary required for special
34+
add_library(coreneuron_main STATIC "coreneuron.cpp")
35+
3336
add_executable(coreneuron_exec "${CMAKE_CURRENT_SOURCE_DIR}/coreneuron.cpp")
3437

3538
set_target_properties(coreneuron_exec PROPERTIES
36-
OUTPUT_NAME "coreneuron_exec"
37-
RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin")
39+
OUTPUT_NAME "coreneuron_exec")
3840

3941
target_link_libraries(coreneuron_exec coreneuron ${MPI_C_LIBRARIES} ${MPI_CXX_LIBRARIES} ${reportinglib_LIBRARY})
4042

4143
install(TARGETS coreneuron_exec
42-
DESTINATION ${BIN_INSTALL_DIR}/)
44+
DESTINATION "${CMAKE_INSTALL_BINDIR}")
4345

46+
install(TARGETS coreneuron_main
47+
DESTINATION "${CMAKE_INSTALL_LIBDIR}")

coreneuron/CMakeLists.txt

Lines changed: 38 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -295,26 +295,50 @@ endif()
295295
if(ENABLE_REPORTINGLIB)
296296
set(link_reportinglib ${reportinglib_LIBRARY})
297297
endif()
298-
target_link_libraries(coreneuron ${MPI_CXX_LIBRARIES}
299-
${link_reportinglib} ${link_cudacoreneuron} ${CUDA_LIBRARIES} )
300298

301299

300+
target_link_libraries(coreneuron ${MPI_CXX_LIBRARIES}
301+
${link_reportinglib} ${link_cudacoreneuron} ${CUDA_LIBRARIES} )
302+
302303
set_target_properties(coreneuron PROPERTIES
303-
VERSION ${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_PATCH}
304-
SOVERSION ${VERSION_MAJOR}
305-
CLEAN_DIRECT_OUTPUT 1)
304+
VERSION ${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_PATCH}
305+
SOVERSION ${VERSION_MAJOR}
306+
CLEAN_DIRECT_OUTPUT 1)
307+
308+
309+
# Extract link defs to the whole project
310+
get_target_property(CORENRN_LINK_LIBS coreneuron LINK_LIBRARIES)
311+
set(CORENRN_LINK_LIBS ${CORENRN_LINK_LIBS} PARENT_SCOPE)
312+
313+
# Share built-in OPTIONAL MODS also with rest of project
314+
set(CORENRN_OPTMECH_MODS "${MOD2C_OPTMECH_MODS}" PARENT_SCOPE)
315+
306316

307317
install(TARGETS coreneuron
308-
LIBRARY DESTINATION ${LIB_INSTALL_DIR}
309-
ARCHIVE DESTINATION ${LIB_INSTALL_DIR} )
310-
install(FILES "engine.h" DESTINATION include/coreneuron)
318+
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
319+
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR})
320+
321+
install(FILES "engine.h"
322+
DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/coreneuron)
311323

312-
if(ENABLE_DEV_FILES_INSTALLATION)
324+
if(ENABLE_HEADER_INSTALL)
313325
install(DIRECTORY .
314-
DESTINATION include/coreneuron
315-
FILES_MATCHING PATTERN "*.h*" PATTERN "*.ipp")
326+
DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/coreneuron
327+
FILES_MATCHING PATTERN "*.h*" PATTERN "*.ipp")
328+
329+
install(FILES ${KINDERIV_PY}
330+
DESTINATION ${CMAKE_INSTALL_DATADIR}/coreneuron)
316331

317-
install(DIRECTORY ./mech/modfile/.
318-
DESTINATION share/mod
319-
FILES_MATCHING PATTERN "*.mod")
332+
install(FILES ${MOD_FUNC_C_PL}
333+
DESTINATION ${CMAKE_INSTALL_DATADIR}/coreneuron)
334+
335+
install(DIRECTORY "scopmath_core"
336+
DESTINATION ${CMAKE_INSTALL_DATADIR}/coreneuron
337+
FILES_MATCHING PATTERN "dimplic.cpp")
320338
endif()
339+
340+
install(PROGRAMS ${MOD2C_BINARY}
341+
DESTINATION ${CMAKE_INSTALL_BINDIR})
342+
343+
install(FILES ${MOD2C_UNITS}
344+
DESTINATION ${CMAKE_INSTALL_DATADIR}/mod2c)

0 commit comments

Comments
 (0)