Skip to content

Commit fbeff9c

Browse files
authored
Fix handling of hh.mod when using coreNEURON (#3301)
1 parent 8dfe5a3 commit fbeff9c

File tree

3 files changed

+28
-37
lines changed

3 files changed

+28
-37
lines changed

CMakeLists.txt

-24
Original file line numberDiff line numberDiff line change
@@ -789,30 +789,6 @@ add_custom_target(
789789
COMMENT "Format only files modified with respect to master branch."
790790
WORKING_DIRECTORY ${PROJECT_SOURCE_DIR})
791791

792-
# =============================================================================
793-
# ~~~
794-
# Update hh.mod for CoreNEURON compatibility
795-
# - Replace GLOBAL variable by RANGE
796-
# - Comment out TABLE
797-
# ~~~
798-
# =============================================================================
799-
if(NRN_ENABLE_CORENEURON OR NRN_ENABLE_MOD_COMPATIBILITY)
800-
set(GLOBAL_VAR_TOGGLE_COMMAND "'s/ GLOBAL minf/ RANGE minf/'")
801-
else()
802-
set(GLOBAL_VAR_TOGGLE_COMMAND "'s/ RANGE minf/ GLOBAL minf/'")
803-
endif()
804-
separate_arguments(GLOBAL_VAR_TOGGLE_COMMAND UNIX_COMMAND "${GLOBAL_VAR_TOGGLE_COMMAND}")
805-
add_custom_target(
806-
hh_update
807-
COMMAND sed ${GLOBAL_VAR_TOGGLE_COMMAND} ${CMAKE_SOURCE_DIR}/src/nrnoc/hh.mod >
808-
${CMAKE_BINARY_DIR}/hh.mod.1
809-
COMMAND ${CMAKE_COMMAND} -E copy_if_different ${CMAKE_BINARY_DIR}/hh.mod.1
810-
${CMAKE_SOURCE_DIR}/src/nrnoc/hh.mod
811-
COMMAND ${CMAKE_COMMAND} -E remove ${CMAKE_BINARY_DIR}/hh.mod.1
812-
COMMENT "Update hh.mod for CoreNEURON compatibility"
813-
VERBATIM)
814-
add_dependencies(nrniv_lib hh_update)
815-
816792
# =============================================================================
817793
# Generate help_data.dat
818794
# =============================================================================

cmake/MacroHelper.cmake

+23-12
Original file line numberDiff line numberDiff line change
@@ -144,29 +144,40 @@ endmacro()
144144
# =============================================================================
145145
# Run nocmodl to convert NMODL to C
146146
# =============================================================================
147-
macro(nocmodl_mod_to_cpp modfile_basename)
147+
macro(nocmodl_mod_to_cpp modfile_basename modfile_compat)
148148
set(NOCMODL_SED_EXPR "s/_reg()/_reg_()/")
149149
if(NOT MSVC)
150150
set(NOCMODL_SED_EXPR "'${NOCMODL_SED_EXPR}'")
151151
endif()
152-
set(REMOVE_CMAKE_COMMAND "rm")
153-
if(CMAKE_VERSION VERSION_LESS "3.17")
154-
set(REMOVE_CMAKE_COMMAND "remove")
152+
set(MODFILE_INPUT_PATH "${PROJECT_SOURCE_DIR}/${modfile_basename}.mod")
153+
set(MODFILE_OUTPUT_PATH "${PROJECT_BINARY_DIR}/${modfile_basename}.mod")
154+
155+
# for coreNEURON only
156+
if(modfile_compat)
157+
file(READ "${MODFILE_INPUT_PATH}" FILE_CONTENT)
158+
string(REGEX REPLACE " GLOBAL minf" " RANGE minf" FILE_CONTENT "${FILE_CONTENT}")
159+
file(WRITE "${MODFILE_OUTPUT_PATH}" "${FILE_CONTENT}")
160+
else()
161+
configure_file("${MODFILE_INPUT_PATH}" "${MODFILE_OUTPUT_PATH}" COPYONLY)
155162
endif()
156-
get_filename_component(modfile_output_dir ${PROJECT_SOURCE_DIR}/${modfile_basename}.mod DIRECTORY)
163+
164+
get_filename_component(modfile_output_dir "${MODFILE_OUTPUT_PATH}" DIRECTORY)
165+
get_filename_component(modfile_name "${MODFILE_OUTPUT_PATH}" NAME_WE)
166+
set(CPPFILE_OUTPUT_PATH "${modfile_output_dir}/${modfile_name}.cpp")
167+
157168
add_custom_command(
158-
OUTPUT ${PROJECT_BINARY_DIR}/${modfile_basename}.cpp
169+
OUTPUT ${CPPFILE_OUTPUT_PATH}
159170
COMMAND
160171
${CMAKE_COMMAND} -E env "MODLUNIT=${PROJECT_BINARY_DIR}/share/nrn/lib/nrnunits.lib"
161172
${NRN_NOCMODL_SANITIZER_ENVIRONMENT} $<TARGET_FILE:${NRN_CODEGENERATOR_TARGET}>
162-
${PROJECT_SOURCE_DIR}/${modfile_basename}.mod ${NRN_NMODL_--neuron} -o ${modfile_output_dir}
163-
COMMAND sed ${NOCMODL_SED_EXPR} ${PROJECT_SOURCE_DIR}/${modfile_basename}.cpp >
164-
${PROJECT_BINARY_DIR}/${modfile_basename}.cpp
165-
COMMAND ${CMAKE_COMMAND} -E ${REMOVE_CMAKE_COMMAND}
166-
${PROJECT_SOURCE_DIR}/${modfile_basename}.cpp
167-
DEPENDS ${NRN_CODEGENERATOR_TARGET} ${PROJECT_SOURCE_DIR}/${modfile_basename}.mod
173+
${MODFILE_OUTPUT_PATH} ${NRN_NMODL_--neuron} -o ${modfile_output_dir}
174+
COMMAND sed ${NOCMODL_SED_EXPR} ${CPPFILE_OUTPUT_PATH} > ${CPPFILE_OUTPUT_PATH}.tmp
175+
COMMAND ${CMAKE_COMMAND} -E copy ${CPPFILE_OUTPUT_PATH}.tmp ${CPPFILE_OUTPUT_PATH}
176+
COMMAND ${CMAKE_COMMAND} -E remove ${CPPFILE_OUTPUT_PATH}.tmp
177+
DEPENDS ${NRN_CODEGENERATOR_TARGET} ${MODFILE_INPUT_PATH}
168178
${PROJECT_BINARY_DIR}/share/nrn/lib/nrnunits.lib
169179
WORKING_DIRECTORY ${PROJECT_BINARY_DIR}/src/nrniv)
180+
170181
endmacro()
171182

172183
# =============================================================================

src/nrniv/CMakeLists.txt

+5-1
Original file line numberDiff line numberDiff line change
@@ -115,7 +115,11 @@ endif()
115115
# Translate all MOD files to C and mark them generated
116116
# =============================================================================
117117
foreach(modfile ${NRN_MODFILE_BASE_NAMES})
118-
nocmodl_mod_to_cpp(${modfile})
118+
set(modfile_compat OFF)
119+
if((NRN_ENABLE_CORENEURON OR NRN_ENABLE_MOD_COMPATIBILITY) AND modfile MATCHES "hh$")
120+
set(modfile_compat ON)
121+
endif()
122+
nocmodl_mod_to_cpp(${modfile} ${modfile_compat})
119123
list(APPEND NRN_MODFILE_CPP ${PROJECT_BINARY_DIR}/${modfile}.cpp)
120124
endforeach()
121125
set_property(

0 commit comments

Comments
 (0)