Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Build modlunit/nocmodl with their own CMakeLists.txt #2848

Open
wants to merge 26 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
26 commits
Select commit Hold shift + click to select a range
039a293
Use configure_file instead of homemade macro
Apr 22, 2024
59da29b
Fix formatting
github-actions[bot] Apr 22, 2024
c72ce56
Build modlunit with its own CMakeLists.txt
Apr 22, 2024
084effa
Not needed
Apr 22, 2024
7a6d327
Merge branch 'master' into cornu/configure_file_is_better
alkino Apr 22, 2024
5be8aeb
Build nocmodl with its own CMakeLists.txt
Apr 22, 2024
f7b1c0b
CHMOD only on cmake >= 3.19
Apr 22, 2024
97af3c1
Merge remote-tracking branch 'origin/cornu/configure_file_is_better'
Apr 22, 2024
5c6b6a1
Merge remote-tracking branch 'origin/cornu/configure_file_is_better'
Apr 22, 2024
eedcd4a
Merge remote-tracking branch 'origin/master'
alkino Apr 23, 2024
bc60cb8
Merge remote-tracking branch 'origin/cornu/configure_file_is_better'
alkino Apr 23, 2024
9a01585
wrap_sprintf in util
alkino Apr 23, 2024
191a9ed
Build default modfiles on their own
alkino Apr 23, 2024
ed95786
More relocatibility
alkino Apr 23, 2024
a8b7aaf
No more NRN_COVERAGE_LIB since #2530
alkino Apr 23, 2024
7968d7c
sed -i -e
alkino Apr 23, 2024
5231aa2
Merge branch 'master' into cornu/modlunit_own_cmake
alkino Apr 24, 2024
98fca63
Fix formatting
github-actions[bot] Apr 24, 2024
65550e9
Fix include of include
Apr 25, 2024
bb75640
Merge branch 'master' into cornu/modlunit_own_cmake
alkino Apr 25, 2024
f97c78a
Merge branch 'master' into cornu/modlunit_own_cmake
alkino Apr 25, 2024
61b317e
Merge remote-tracking branch 'origin/master'
alkino May 7, 2024
df9746f
Add missing depends
alkino May 7, 2024
0e91489
No more depends of modlunit on mswin
May 8, 2024
8c05847
Merge branch 'master' into cornu/modlunit_own_cmake
alkino May 10, 2024
860a0fe
Fix merge
May 10, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
2 changes: 2 additions & 0 deletions CMakeLists.txt
Expand Up @@ -572,6 +572,8 @@ endif()
# =============================================================================
add_subdirectory(src/sparse13)
add_subdirectory(src/gnu)
add_subdirectory(src/modlunit)
add_subdirectory(src/nmodl)
add_subdirectory(src/nrniv)

# Collect the environment variables that are needed to execute NEURON from the build directory. This
Expand Down
25 changes: 9 additions & 16 deletions cmake/MacroHelper.cmake
Expand Up @@ -142,30 +142,23 @@ macro(nrn_print_matching_variables prefix_regex)
endmacro()

# =============================================================================
# Run nocmodl to convert NMODL to C
# Run nocmodl to convert NMODL to C++
# =============================================================================
macro(nocmodl_mod_to_cpp modfile_basename)
macro(nocmodl_mod_to_cpp modfile_basename source_dir target_dir)
set(NOCMODL_SED_EXPR "s/_reg()/_reg_()/")
if(NOT MSVC)
set(NOCMODL_SED_EXPR "'${NOCMODL_SED_EXPR}'")
endif()
set(REMOVE_CMAKE_COMMAND "rm")
if(CMAKE_VERSION VERSION_LESS "3.17")
set(REMOVE_CMAKE_COMMAND "remove")
endif()
add_custom_command(
OUTPUT ${PROJECT_BINARY_DIR}/${modfile_basename}.cpp
OUTPUT "${target_dir}/${modfile_basename}.cpp"
COMMAND
${CMAKE_COMMAND} -E env "MODLUNIT=${PROJECT_BINARY_DIR}/share/nrn/lib/nrnunits.lib"
${NRN_NOCMODL_SANITIZER_ENVIRONMENT} $<TARGET_FILE:nocmodl>
${PROJECT_SOURCE_DIR}/${modfile_basename}.mod
COMMAND sed ${NOCMODL_SED_EXPR} ${PROJECT_SOURCE_DIR}/${modfile_basename}.cpp >
${PROJECT_BINARY_DIR}/${modfile_basename}.cpp
COMMAND ${CMAKE_COMMAND} -E ${REMOVE_CMAKE_COMMAND}
${PROJECT_SOURCE_DIR}/${modfile_basename}.cpp
DEPENDS nocmodl ${PROJECT_SOURCE_DIR}/${modfile_basename}.mod
${PROJECT_BINARY_DIR}/share/nrn/lib/nrnunits.lib
WORKING_DIRECTORY ${PROJECT_BINARY_DIR}/src/nrniv)
${NRN_NOCMODL_SANITIZER_ENVIRONMENT} $<TARGET_FILE:nocmodl> -o "${target_dir}"
"${source_dir}/${modfile_basename}.mod"
COMMAND sed -i -e ${NOCMODL_SED_EXPR} "${target_dir}/${modfile_basename}.cpp"
DEPENDS nocmodl "${source_dir}/${modfile_basename}.mod"
"${PROJECT_BINARY_DIR}/share/nrn/lib/nrnunits.lib"
WORKING_DIRECTORY ${target_dir})
endmacro()

# =============================================================================
Expand Down
58 changes: 0 additions & 58 deletions cmake/NeuronFileLists.cmake
Expand Up @@ -363,59 +363,6 @@ set(NRNPYTHON_FILES_LIST
rxd_marching_cubes.cpp
rxd_llgramarea.cpp)

# built-in mod files
set(MODFILE_BASE_NAMES
apcount
exp2syn
expsyn
feature
hh
intfire1
intfire2
intfire4
netstim
oclmp
passive
pattern
ppmark
stim
svclmp
syn
vclmp)

set(MODLUNIT_FILES_LIST
consist.cpp
declare.cpp
init.cpp
io.cpp
kinunit.cpp
list.cpp
model.cpp
nrnunit.cpp
passn.cpp
symbol.cpp
units.cpp
units1.cpp
version.cpp)

set(NMODL_FILES_LIST
consist.cpp
deriv.cpp
discrete.cpp
init.cpp
io.cpp
kinetic.cpp
list.cpp
modl.cpp
nocpout.cpp
noccout.cpp
parsact.cpp
netrec_discon.cpp
simultan.cpp
solve.cpp
symbol.cpp
version.cpp)

set(IVOS_FILES_LIST observe.cpp resource.cpp)

set(MPI_DYNAMIC_INCLUDE nrnmpi_dynam.h nrnmpi_dynam_cinc nrnmpi_dynam_wrappers.inc)
Expand All @@ -442,8 +389,6 @@ set(NRN_IVOC_SRC_DIR ${PROJECT_SOURCE_DIR}/src/ivoc)
set(NRN_NODEORDEROPTIM_SRC_DIR ${PROJECT_SOURCE_DIR}/src/coreneuron/permute)
set(NRN_NRNCVODE_SRC_DIR ${PROJECT_SOURCE_DIR}/src/nrncvode)
set(NRN_NRNIV_SRC_DIR ${PROJECT_SOURCE_DIR}/src/nrniv)
set(NRN_MODLUNIT_SRC_DIR ${PROJECT_SOURCE_DIR}/src/modlunit)
set(NRN_NMODL_SRC_DIR ${PROJECT_SOURCE_DIR}/src/nmodl)
set(NRN_IVOS_SRC_DIR ${PROJECT_SOURCE_DIR}/src/ivos)
set(NRN_MUSIC_SRC_DIR ${PROJECT_SOURCE_DIR}/src/neuronmusic)
set(NRN_PARALLEL_SRC_DIR ${PROJECT_SOURCE_DIR}/src/parallel)
Expand Down Expand Up @@ -473,11 +418,8 @@ nrn_create_file_list(NRN_SCOPMATH_SRC_FILES ${PROJECT_SOURCE_DIR}/src/scopmath
nrn_create_file_list(NRN_NRNMPI_SRC_FILES ${PROJECT_SOURCE_DIR}/src/nrnmpi ${NRNMPI_FILES_LIST})
nrn_create_file_list(NRN_NRNPYTHON_SRC_FILES ${PROJECT_SOURCE_DIR}/src/nrnpython
${NRNPYTHON_FILES_LIST})
nrn_create_file_list(NRN_MODFILE_BASE_NAMES src/nrnoc ${MODFILE_BASE_NAMES})
nrn_create_file_list(NRN_BIN_SRC_FILES ${PROJECT_SOURCE_DIR}/src/ivoc/ nrnmain.cpp)
nrn_create_file_list(NRN_BIN_SRC_FILES ${PROJECT_SOURCE_DIR}/src/oc/ ockludge.cpp modlreg.cpp)
nrn_create_file_list(NRN_MODLUNIT_SRC_FILES ${NRN_MODLUNIT_SRC_DIR} ${MODLUNIT_FILES_LIST})
nrn_create_file_list(NRN_NMODL_SRC_FILES ${NRN_NMODL_SRC_DIR} ${NMODL_FILES_LIST})
nrn_create_file_list(NRNMPI_DYNAMIC_INCLUDE_FILE ${PROJECT_SOURCE_DIR}/src/nrnmpi
${MPI_DYNAMIC_INCLUDE})
nrn_create_file_list(NRN_IVOS_SRC_FILES ${NRN_IVOS_SRC_DIR} ${IVOS_FILES_LIST})
Expand Down
32 changes: 32 additions & 0 deletions src/modlunit/CMakeLists.txt
@@ -0,0 +1,32 @@
flex_target(modlunit_lex lex.lpp ${CMAKE_CURRENT_BINARY_DIR}/lex.cpp)
bison_target(modlunit_parse parse1.ypp ${CMAKE_CURRENT_BINARY_DIR}/parse1.cpp
DEFINES_FILE ${CMAKE_CURRENT_BINARY_DIR}/parse1.hpp)

add_executable(
modlunit
consist.cpp
declare.cpp
init.cpp
io.cpp
kinunit.cpp
list.cpp
model.cpp
nrnunit.cpp
passn.cpp
symbol.cpp
units.cpp
units1.cpp
version.cpp
"${CMAKE_CURRENT_BINARY_DIR}/lex.cpp"
"${CMAKE_CURRENT_BINARY_DIR}/parse1.cpp")
target_compile_definitions(modlunit PRIVATE NRNUNIT=1)
cpp_cc_configure_sanitizers(TARGET modlunit)
target_include_directories(
modlunit PRIVATE "${CMAKE_CURRENT_BINARY_DIR}" "${PROJECT_SOURCE_DIR}/src"
"${CMAKE_CURRENT_SOURCE_DIR}")

if(NRN_NMODL_CXX_FLAGS)
target_compile_options(modlunit PRIVATE ${NRN_NMODL_CXX_FLAGS})
endif()

install(TARGETS modlunit DESTINATION bin)
2 changes: 1 addition & 1 deletion src/modlunit/model.h
@@ -1,5 +1,5 @@
/* /local/src/master/nrn/src/modlunit/model.h,v 1.2 1997/11/24 16:19:13 hines Exp */
#include "wrap_sprintf.h"
#include "utils/wrap_sprintf.hpp"
#include <stdio.h>
#include <assert.h>

Expand Down
1 change: 0 additions & 1 deletion src/modlunit/units.cpp
Expand Up @@ -6,7 +6,6 @@
/* /local/src/master/nrn/src/modlunit/units.c,v 1.5 1997/11/24 16:19:13 hines Exp */
/* Mostly from Berkeley */
#include "model.h"
#include "nrnassrt.h"
#include <stdio.h>
#include <stdlib.h>
#include <signal.h>
Expand Down
51 changes: 51 additions & 0 deletions src/nmodl/CMakeLists.txt
@@ -0,0 +1,51 @@
flex_target(nocmodl_lex lex.lpp ${CMAKE_CURRENT_BINARY_DIR}/lex.cpp)
bison_target(nocmodl_parse parse1.ypp ${CMAKE_CURRENT_BINARY_DIR}/parse1.cpp
DEFINES_FILE ${CMAKE_CURRENT_BINARY_DIR}/parse1.hpp)
bison_target(nocmodl_diffeq diffeq.ypp ${CMAKE_CURRENT_BINARY_DIR}/diffeq.cpp
DEFINES_FILE ${CMAKE_CURRENT_BINARY_DIR}/diffeq.hpp)

add_custom_target(
nocmodl_generated_files
DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/lex.cpp" "${CMAKE_CURRENT_BINARY_DIR}/parse1.hpp"
"${CMAKE_CURRENT_BINARY_DIR}/parse1.cpp" "${CMAKE_CURRENT_BINARY_DIR}/diffeq.hpp"
"${CMAKE_CURRENT_BINARY_DIR}/diffeq.cpp")
# add_dependencies(generated_source_files nocmodl_generated_files)
add_executable(
nocmodl
consist.cpp
deriv.cpp
discrete.cpp
init.cpp
io.cpp
kinetic.cpp
list.cpp
modl.cpp
nocpout.cpp
noccout.cpp
parsact.cpp
netrec_discon.cpp
simultan.cpp
solve.cpp
symbol.cpp
../modlunit/units.cpp
version.cpp
"${CMAKE_CURRENT_BINARY_DIR}/lex.cpp"
"${CMAKE_CURRENT_BINARY_DIR}/parse1.cpp"
"${CMAKE_CURRENT_BINARY_DIR}/diffeq.cpp")
cpp_cc_configure_sanitizers(TARGET nocmodl)
target_compile_definitions(nocmodl PRIVATE COMPILE_DEFINITIONS NMODL=1 CVODE=1)

# Otherwise the generated code in the binary directory does not find headers in the modlunit source
# directory and the source files in the source directory do not find generated headers in the binary
# directory. TODO: (see also coreneuron) fix adding a dependency on CLI11::CLI11 when CLI11 is a
# submodule. Right now this doesn't work because the CLI11 targets are not exported/installed but
# coreneuron-core is.
get_target_property(CLI11_HEADER_DIRECTORY CLI11::CLI11 INTERFACE_INCLUDE_DIRECTORIES)
target_include_directories(
nocmodl PRIVATE "${CMAKE_CURRENT_BINARY_DIR}" "${CMAKE_CURRENT_SOURCE_DIR}"
"${CLI11_HEADER_DIRECTORY}" "${PROJECT_SOURCE_DIR}/src")
if(NRN_NMODL_CXX_FLAGS)
target_compile_options(nocmodl PRIVATE ${NRN_NMODL_CXX_FLAGS})
endif()

install(TARGETS nocmodl DESTINATION bin)
2 changes: 1 addition & 1 deletion src/nmodl/modl.h
@@ -1,5 +1,5 @@
#pragma once
#include "wrap_sprintf.h"
#include "utils/wrap_sprintf.hpp"

#include <stdio.h>
#include <string.h>
Expand Down