Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
92 commits
Select commit Hold shift + click to select a range
744864a
cmake: export targets, allow to build models via CMake
matz-e Feb 17, 2024
2df2103
Bump stuff.
matz-e Aug 15, 2024
87cc65b
Fix formatting
github-actions[bot] Aug 15, 2024
fd75527
Merge branch 'master' into export-cmake
Jan 16, 2025
489c390
Add fmt to linked libs for testing
Jan 16, 2025
65fc1ee
Also link fmt in Python build
Jan 16, 2025
047732d
Put back the original `hh.mod`
Jan 16, 2025
86895cb
Fix issue with corenrn target
Jan 20, 2025
5947fa8
Merge branch 'master' into export-cmake
Apr 15, 2025
6a8c83b
Fix issues with paths
Apr 17, 2025
0466496
Fix NMODL line numbers in parser
May 15, 2025
b833b1d
Add newer version of Bison to Docker image
May 15, 2025
bce4aec
Fix additional NMODL paths
May 15, 2025
398fd44
Merge branch 'master' into jelic/alternative_nmodl_fix
JCGoran May 28, 2025
cbef7ce
Update to lcov 2
May 28, 2025
8bbfdcd
Merge branch 'jelic/alternative_nmodl_fix' into jelic/parallel_lcov
May 28, 2025
7a74a13
Merge branch 'master' into jelic/alternative_nmodl_fix
May 28, 2025
2e2d1de
Alternative fix with flexible bison
May 28, 2025
236c51a
Merge remote-tracking branch 'origin/jelic/alternative_nmodl_fix' int…
May 28, 2025
94c568d
Extract version of lcov
May 28, 2025
be489a0
Set launcher command based on lcov version
May 28, 2025
e728fe7
Merge branch 'jelic/alternative_nmodl_fix' into jelic/parallel_lcov
May 28, 2025
d683140
Set lcov launcher flags based on version
May 28, 2025
5e38569
Revert to ubuntu 22.04 to see if it works
May 28, 2025
19ac8aa
Merge branch 'master' into jelic/parallel_lcov
May 30, 2025
3b8d0fb
Merge branch 'master' into jelic/cmake_mechanisms
Jun 3, 2025
58a380f
Update create_nrnmech
Jun 3, 2025
f0eaccc
Remove comments
Jun 3, 2025
c0f168a
Add tentative test
Jun 4, 2025
758142c
Neuron config
Jun 4, 2025
32c2cc1
Fix include paths
Jun 4, 2025
6a8ed75
Add NEURON and special
Jun 4, 2025
6988505
Formatting
Jun 4, 2025
b00f3dc
Better config
Jun 4, 2025
2caa145
Merge branch 'master' into jelic/cmake_mechanisms
Jun 4, 2025
535bb1c
Formatting
Jun 4, 2025
3a7bb98
Appease MODLUNIT
Jun 4, 2025
908dc4e
Workaround for NOCMODL
Jun 4, 2025
a121ef7
Merge branch 'master' into jelic/cmake_mechanisms
Jun 5, 2025
1462039
Use same compiler as used by system
Jun 5, 2025
446fb48
Disable CMake mechanism test if using sanitizers
Jun 5, 2025
ebbe6f5
Use `-nopython` when launching `special`
Jun 5, 2025
81c1d1f
Disable test on coverage as well
Jun 5, 2025
5b087b7
Merge branch 'master' into jelic/cmake_mechanisms
Jun 10, 2025
b08e772
Small changes
Jun 17, 2025
210f2c3
Merge branch 'master' into jelic/cmake_mechanisms
Jun 17, 2025
af6aa53
Fix for building special-core on NVHPC
Jun 17, 2025
6194db8
Fix formatting
Jun 17, 2025
6a5591d
Merge branch 'master' into jelic/cmake_mechanisms
Jun 17, 2025
0c8c917
Merge branch 'master' into jelic/cmake_mechanisms
Jun 18, 2025
5497de0
More flexibility for CUDA detection
Jun 18, 2025
2e7b44f
Use dynamic min CUDA toolkit version
Jun 18, 2025
b87f6c4
More debugging in `create_nrnmech`
Jun 19, 2025
64963f9
Actually update docs to use CMake
Jun 19, 2025
73f346c
Forgot to add it to reqs
Jun 19, 2025
6b3983f
Put docs back next to implementation
Jun 19, 2025
5f5f413
Add example to create_nrnmech
Jun 19, 2025
9a09835
Fix issue with wheels containing wrong paths
Jun 20, 2025
66ba781
Fix slashes in installer
Jun 20, 2025
e086ace
Add workaround for running special under wheels
Jun 21, 2025
a40003f
Update docs for CMake API
Jun 21, 2025
67c2759
Fix install dir on Windows
Jun 21, 2025
36887b0
Merge branch 'master' into jelic/cmake_mechanisms
Jul 8, 2025
8611ccc
Merge branch 'master' into jelic/parallel_lcov
Jul 15, 2025
697e1d2
Merge branch 'master' into jelic/cmake_mechanisms
JCGoran Sep 9, 2025
e4ce946
Merge branch 'master' into jelic/cmake_mechanisms
Sep 19, 2025
f68627e
Merge branch 'master' into jelic/cmake_mechanisms
Oct 21, 2025
009cc34
Merge branch 'jelic/parallel_lcov'
Nov 21, 2025
7e83672
Merge branch 'master' into jelic/cmake_mechanisms
Nov 24, 2025
4e0d8cb
Refactor test
Nov 24, 2025
539f509
Revert "Merge branch 'jelic/parallel_lcov'"
Nov 24, 2025
e492583
Make min version match one of NEURON
Nov 24, 2025
aabe405
Fix issue with embedded nrnunits.lib
Nov 24, 2025
1e189fc
Privately link to readline
Nov 24, 2025
9d76338
Embed nrnunits in NMODL
Nov 25, 2025
3efeb70
Revert "Fix issue with embedded nrnunits.lib"
Nov 25, 2025
f7e96e4
Merge branch 'jelic/embed_nrnunits_nmodl' into jelic/cmake_mechanisms
Nov 25, 2025
6ee81f7
Remove error message
Nov 25, 2025
dabcf6f
Merge branch 'jelic/embed_nrnunits_nmodl' into jelic/cmake_mechanisms
Nov 25, 2025
d0f8f46
Merge branch 'master' into jelic/cmake_mechanisms
Nov 26, 2025
6baa54f
Merge branch 'master' into jelic/cmake_mechanisms
Nov 26, 2025
305fb2d
Add `nrnivmodl.cmake`
Nov 26, 2025
7fcc855
Fix issue when using wheels
Nov 26, 2025
973a294
Merge branch 'master' into jelic/cmake_mechanisms
Nov 26, 2025
922bcf0
Update CI
Nov 26, 2025
4040182
Fix Azure CI
Nov 26, 2025
50ca338
Make SonarThing happy
Nov 26, 2025
5d59350
Put this back
Nov 26, 2025
52728a8
Merge branch 'master' into jelic/cmake_mechanisms
nrnhines Jan 22, 2026
99e8d67
CodeCoverage ci error: keyword signature for target_link_libraries.
nrnhines Jan 22, 2026
94081a3
Previous commit did not have PRIVATE as second arg
nrnhines Jan 22, 2026
504d229
Merge branch 'master' into jelic/cmake_mechanisms
nrnhines Jan 23, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
20 changes: 18 additions & 2 deletions .github/workflows/wheels-template.yml
Original file line number Diff line number Diff line change
Expand Up @@ -73,7 +73,7 @@ jobs:
run: |
brew install --cask xquartz
brew uninstall cmake || echo "CMake was not pre-installed"
brew install flex bison cmake mpich
brew install flex bison cmake mpich ninja
brew unlink mpich && brew install openmpi
# Install newer version of Bash on MacOS
brew install bash
Expand Down Expand Up @@ -127,7 +127,7 @@ jobs:
if: runner.os == 'Linux'
run: |
sudo apt update
sudo apt install -y mpich openmpi-bin libopenmpi-dev libmpich-dev
sudo apt install -y mpich openmpi-bin libopenmpi-dev libmpich-dev ninja-build

- name: "Apply workaround for MPICH on Ubuntu 24.04"
if: inputs.platform == 'ubuntu-24.04'
Expand All @@ -141,6 +141,22 @@ jobs:
wget 'https://launchpad.net/ubuntu/+source/mpich/4.2.0-5.1/+build/28285882/+files/libmpich12_4.2.0-5.1_amd64.deb'
sudo dpkg --install mpich_4.2.0-5.1_amd64.deb libmpich12_4.2.0-5.1_amd64.deb

- name: Set env vars for testing (Linux)
if: startsWith(inputs.platform, "ubuntu")
run: |
echo CMAKE_BUILD_PARALLEL_LEVEL=4 >> $GITHUB_ENV
echo CMAKE_GENERATOR=Ninja >> $GITHUB_ENV

- name: Set env vars for testing (MacOS)
if: startsWith(runner.os, "macOS")
run: |
if [[ "${{runner.os}}" == "macOS-15-intel" ]]; then
echo CMAKE_BUILD_PARALLEL_LEVEL=4 >> $GITHUB_ENV
else
echo CMAKE_BUILD_PARALLEL_LEVEL=3 >> $GITHUB_ENV
fi
echo CMAKE_GENERATOR=Ninja >> $GITHUB_ENV

- name: Test wheel with ${{ inputs.python_version }}
run: |
minor_version="$(python${{ inputs.python_version }} -c 'import sys;print(sys.version_info.minor)')"
Expand Down
48 changes: 48 additions & 0 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -587,6 +587,8 @@ endif()
# initialize CLI11 submodule
cpp_cc_git_submodule(CLI11 BUILD PACKAGE CLI11 REQUIRED)

# coreneuron targets will get propagated down from the subdirectory

# =============================================================================
# Enable NMODL code-generator support
# =============================================================================
Expand Down Expand Up @@ -1117,6 +1119,52 @@ if(NRN_MACOS_BUILD AND NOT SKBUILD)
nrn_macos_after_install()
endif()

# =============================================================================
# Install CMake glue
# =============================================================================
configure_file(cmake/neuronMechMaker.cmake
"${PROJECT_BINARY_DIR}/lib/cmake/neuron/neuronMechMaker.cmake" COPYONLY)
configure_file(cmake/mod_reg_nrn.cpp.in "${PROJECT_BINARY_DIR}/share/nrn/mod_reg_nrn.cpp.in"
COPYONLY)
configure_file(cmake/mod_reg_corenrn.cpp.in
"${PROJECT_BINARY_DIR}/share/nrn/mod_reg_corenrn.cpp.in" COPYONLY)
install(
TARGETS ${CORENRN_INSTALL_LIB_TARGETS}
EXPORT NeuronTargets
DESTINATION "${NRN_INSTALL_DATA_PREFIX}lib")
install(
TARGETS ${CORENRN_INSTALL_BIN_TARGETS}
EXPORT NeuronTargets
DESTINATION "${NRN_INSTALL_DATA_PREFIX}bin")
export(
EXPORT NeuronTargets
FILE ${PROJECT_BINARY_DIR}/lib/cmake/neuron/neuronTargets.cmake
NAMESPACE neuron::)

install(
EXPORT NeuronTargets
FILE neuronTargets.cmake
NAMESPACE neuron::
DESTINATION "${NRN_INSTALL_DATA_PREFIX}lib/cmake/neuron")

configure_file(${CMAKE_CURRENT_SOURCE_DIR}/cmake/neuronConfig.cmake.in
${CMAKE_CURRENT_BINARY_DIR}/lib/cmake/neuron/neuronConfig.cmake @ONLY)

install(FILES ${CMAKE_CURRENT_BINARY_DIR}/lib/cmake/neuron/neuronConfig.cmake
DESTINATION "${NRN_INSTALL_DATA_PREFIX}lib/cmake/neuron")
install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/cmake/neuronMechMaker.cmake
DESTINATION "${NRN_INSTALL_DATA_PREFIX}lib/cmake/neuron")

install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/cmake/mod_reg_nrn.cpp.in
${CMAKE_CURRENT_SOURCE_DIR}/cmake/mod_reg_corenrn.cpp.in
DESTINATION "${NRN_INSTALL_DATA_PREFIX}share/nrn")

# configuration and installation of nrnivmodl
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/cmake/nrnivmodl.cmake
${CMAKE_CURRENT_BINARY_DIR}/lib/cmake/neuron/nrnivmodl/CMakeLists.txt @ONLY)
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/lib/cmake/neuron/nrnivmodl/CMakeLists.txt
DESTINATION "${NRN_INSTALL_DATA_PREFIX}lib/cmake/neuron/nrnivmodl")

# =============================================================================
# Copy bash executable for windows
# =============================================================================
Expand Down
31 changes: 29 additions & 2 deletions bin/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,8 @@ configure_file(${CMAKE_CURRENT_SOURCE_DIR}/nrnpyenv.sh.in ${PROJECT_BINARY_DIR}/
# Make sure nrnivmodl and neurondemo are executable in the build folder, so we can execute it to
# prepare test files. This can be done more elegantly in newer CMake versions; v3.19+ have
# file(CHMOD ...) and v3.20+ support setting permissions directly in configure_file(...).
set(NRN_CONFIG_EXE_FILES "nrnivmodl" "neurondemo")
set(NRNIVMODL_NEURON ON)
set(NRN_CONFIG_EXE_FILES "nrnivmodl" "neurondemo" "nrnivmodl-cmake")
foreach(NRN_CONFIG_EXE_FILE ${NRN_CONFIG_EXE_FILES})
configure_file("${NRN_CONFIG_EXE_FILE}.in" "tmp/${NRN_CONFIG_EXE_FILE}" @ONLY)
file(
Expand All @@ -62,13 +63,39 @@ foreach(NRN_CONFIG_EXE_FILE ${NRN_CONFIG_EXE_FILES})
WORLD_READ
WORLD_EXECUTE)
endforeach()
unset(NRNIVMODL_NEURON)
if(NRN_ENABLE_CORENEURON)
# nrnivmodl-all-cmake builds mechanisms for both NEURON and coreNEURON
set(NRNIVMODL_NEURON ON)
set(NRNIVMODL_CORENEURON ON)
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/nrnivmodl-cmake.in
"${CMAKE_CURRENT_BINARY_DIR}/tmp/nrnivmodl-all-cmake" @ONLY)
file(
COPY "${CMAKE_CURRENT_BINARY_DIR}/tmp/nrnivmodl-all-cmake"
DESTINATION "${CMAKE_CURRENT_BINARY_DIR}"
FILE_PERMISSIONS
OWNER_READ
OWNER_WRITE
OWNER_EXECUTE
GROUP_READ
GROUP_EXECUTE
WORLD_READ
WORLD_EXECUTE)
unset(NRNIVMODL_NEURON)
unset(NRNIVMODL_CORENEURON)
endif()
file(REMOVE_RECURSE "${CMAKE_CURRENT_BINARY_DIR}/bin/tmp")

# =============================================================================
# Install targets
# =============================================================================
install(PROGRAMS ${PROJECT_BINARY_DIR}/bin/nrngui ${PROJECT_BINARY_DIR}/bin/neurondemo
${PROJECT_BINARY_DIR}/bin/nrnivmodl DESTINATION ${NRN_INSTALL_DATA_PREFIX}bin)
${PROJECT_BINARY_DIR}/bin/nrnivmodl ${PROJECT_BINARY_DIR}/bin/nrnivmodl-cmake
DESTINATION ${NRN_INSTALL_DATA_PREFIX}bin)
if(NRN_ENABLE_CORENEURON)
install(PROGRAMS ${PROJECT_BINARY_DIR}/bin/nrnivmodl-all-cmake
DESTINATION ${NRN_INSTALL_DATA_PREFIX}bin)
endif()

install(FILES ${PROJECT_BINARY_DIR}/bin/nrnmech_makefile DESTINATION ${NRN_INSTALL_DATA_PREFIX}bin)
install(PROGRAMS ${CMAKE_CURRENT_BINARY_DIR}/sortspike ${CMAKE_CURRENT_SOURCE_DIR}/mkthreadsafe
Expand Down
74 changes: 74 additions & 0 deletions bin/nrnivmodl-cmake.in
Original file line number Diff line number Diff line change
@@ -0,0 +1,74 @@
#!/usr/bin/env bash

# =============================================================================
# Simple wrapper for CMake that builds mechanisms from mod files
# =============================================================================

set -eu

# Where the output files will be placed
bindir="$(uname -m)"

# The name of the current program
program_name="$(basename "${0}")"

# Where the `*.cmake` files are located
NRN_CMAKE_PREFIX_PATH_DEFAULT="$(readlink -f "$(dirname "${0}")/../lib/cmake/")"
if [ -n "${CMAKE_PREFIX_PATH:-}" ]; then
CMAKE_PREFIX_PATH="${CMAKE_PREFIX_PATH}:${NRN_CMAKE_PREFIX_PATH_DEFAULT}"
else
CMAKE_PREFIX_PATH="${NRN_CMAKE_PREFIX_PATH_DEFAULT}"
fi
export CMAKE_PREFIX_PATH

# On MacOS we need to set the deployment target to be equal to the one of NEURON
if command -v xcrun >& /dev/null; then
@NRN_OSX_BUILD_TRUE@export SDKROOT="$(xcrun --sdk macosx --show-sdk-path)"
@NRN_OSX_BUILD_TRUE@export MACOSX_DEPLOYMENT_TARGET="@CMAKE_OSX_DEPLOYMENT_TARGET@"
if [ -z "${MACOSX_DEPLOYMENT_TARGET}" ]; then
unset MACOSX_DEPLOYMENT_TARGET
fi
fi

# We use the CMakeLists.txt from the NEURON installation directory to not have
# to deal with any pre-existing CMakeLists.txt in the current directory
srcdir="${NRN_CMAKE_PREFIX_PATH_DEFAULT}/neuron/nrnivmodl/"

# In case of no files, default to using the files in the current dir
if [ $# -lt 1 ]; then
set -- ./*.mod
# In case of a single input, check if it's a directory; if it is, collect all mod files in it
elif [ $# -eq 1 ] && [ -d "${1}" ]; then
printf "[%s] Collecting mod files under %s\n" "${program_name}" "$(readlink -f "${1}")"
set -- "${1}"/*.mod
fi

# After collecting the mod files, check each mod file actually exists
for mod_file in "$@"; do
if [ ! -e "${mod_file}" ]; then
printf "[%s] ERROR: Mod file %s does not exist!\n" "${program_name}" "${mod_file}" >&2
exit 4
fi
done

# Convert all mod file paths to absolute paths because the source dir is in the NEURON install
args=()
for f in "$@"; do
resolved=$(readlink -f "$f") || exit 1
args+=("$resolved")
done
set -- "${args[@]}"

# TODO what if the mod filenames contain semicolons?
modfiles=$(IFS=";"; echo "$*")

# Configure the mod files
cmake \
-S "${srcdir}" \
-B "${bindir}" \
-DNRNIVMODL_MOD_FILES="${modfiles}" \
-DNRNIVMODL_NEURON=@NRNIVMODL_NEURON@ \
-DNRNIVMODL_CORENEURON=@NRNIVMODL_CORENEURON@

# Actually build them
cmake --build "${bindir}"
1 change: 1 addition & 0 deletions ci/azure-wheel-test-upload.yml
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ steps:

- script: |
export SKIP_EMBEDED_PYTHON_TEST=true
export CMAKE_BUILD_PARALLEL_LEVEL=4
packaging/python/test_wheels.sh $(which python) $(ls -t wheelhouse/*.whl)
displayName: 'Test with System Python'

Expand Down
5 changes: 5 additions & 0 deletions ci/requirements.txt
Original file line number Diff line number Diff line change
Expand Up @@ -2708,6 +2708,7 @@ sphinx==7.3.7 \
# sphinx-rtd-theme
# sphinxcontrib-jquery
# sphinxcontrib-mermaid
# sphinxcontrib-moderncmakedomain
sphinx-design==0.6.1 \
--hash=sha256:b11f37db1a802a183d61b159d9a202314d4d2fe29c163437001324fe2f19549c \
--hash=sha256:b44eea3719386d04d765c1a8257caca2b3e6f8421d7b3a5e742c0fd45f84e632
Expand Down Expand Up @@ -2750,6 +2751,10 @@ sphinxcontrib-mermaid==1.0.0 \
--hash=sha256:2e8ab67d3e1e2816663f9347d026a8dee4a858acdd4ad32dd1c808893db88146 \
--hash=sha256:60b72710ea02087f212028feb09711225fbc2e343a10d34822fe787510e1caa3
# via -r docs/docs_requirements.txt
sphinxcontrib-moderncmakedomain==3.29.0 \
--hash=sha256:22385d9956e9565311eca41a09f26688312e4997a7366cb965fa610d1fd1436c \
--hash=sha256:3587def241ff2577d0bbef11810a082e9dec1b78a3d4b4a066240b5f3dc1b5b2
# via -r docs/docs_requirements.txt
sphinxcontrib-qthelp==2.0.0 \
--hash=sha256:4fe7d0ac8fc171045be623aba3e2a8f613f8682731f9153bb2e40ece16b9bbab \
--hash=sha256:b18a828cdba941ccd6ee8445dbe72ffa3ef8cbe7505d8cd1fa0d42d3f2d5f3eb
Expand Down
16 changes: 16 additions & 0 deletions cmake/mod_reg_corenrn.cpp.in
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
#include <cstdio>
namespace coreneuron {
extern int nrnmpi_myid;
extern int nrn_nobanner_;

@MECH_DECLARE@

void modl_reg() {
if (!nrn_nobanner_) if (nrnmpi_myid < 1) {
fprintf(stderr, " Additional mechanisms from files\n");
@MECH_PRINT@
fprintf(stderr, "\n\n");
}
@MECH_REGISTRE@
}
} //namespace coreneuron
16 changes: 16 additions & 0 deletions cmake/mod_reg_nrn.cpp.in
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
#include <stdio.h>
#include "hocdec.h"
extern int nrnmpi_myid;
extern int nrn_nobanner_;

@MECH_DECLARE@

extern "C" void modl_reg() {
if (!nrn_nobanner_) if (nrnmpi_myid < 1) {
fprintf(stderr, "Additional mechanisms from files\n");
@MECH_PRINT@
fprintf(stderr, "\n");
}
@MECH_REGISTRE@
}

25 changes: 25 additions & 0 deletions cmake/neuronConfig.cmake.in
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
include(CMakeFindDependencyMacro)

find_dependency(Threads)

include("${CMAKE_CURRENT_LIST_DIR}/neuronTargets.cmake")

get_filename_component(_dir "${CMAKE_CURRENT_LIST_FILE}" PATH)
get_filename_component(_prefix "${_dir}/../../.." ABSOLUTE)

set(NRN_ENABLE_CORENEURON @NRN_ENABLE_CORENEURON@)

set(_NEURON_MAIN "${_prefix}/share/nrn/nrnmain.cpp")
set(_NEURON_MAIN_INCLUDE_DIR "${_prefix}/include/nrncvode" "${_prefix}/include")
set(_NEURON_MECH_REG "${_prefix}/share/nrn/mod_reg_nrn.cpp.in")

set(_CORENEURON_BASE_MOD "${_prefix}/share/modfile")
set(_CORENEURON_MAIN "${_prefix}/share/coreneuron/coreneuron.cpp")
set(_CORENEURON_MECH_REG "${_prefix}/share/nrn/mod_reg_corenrn.cpp.in")
set(_CORENEURON_MECH_ENG "${_prefix}/share/coreneuron/enginemech.cpp")
set(_CORENEURON_RANDOM_INCLUDE "${_prefix}/include/coreneuron/utils/randoms" "${_prefix}/include")
set(_CORENEURON_FLAGS @CORENRN_CXX_FLAGS@)

set(_CORENEURON_MIN_CUDA_TOOLKIT_VERSION @CORENRN_CUDA_VERSION_SHORT@)

include("${CMAKE_CURRENT_LIST_DIR}/neuronMechMaker.cmake")
Loading
Loading