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 27 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from 14 commits
Commits
Show all changes
27 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
f4b8250
Merge branch 'master' into cornu/modlunit_own_cmake
alkino May 31, 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
Original file line number Diff line number Diff line change
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
10 changes: 5 additions & 5 deletions bin/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ include(CMakeListsNrnMech)
# =============================================================================
# nrnmech_makefile (based on coreneuron Configure templates)
# =============================================================================
nrn_configure_file(nrngui bin)
configure_file("nrngui.in" "nrngui" @ONLY)
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/sortspike ${CMAKE_CURRENT_BINARY_DIR}/sortspike COPYONLY)
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/nrnivmodl_makefile_cmake.in
${PROJECT_BINARY_DIR}/bin/nrnmech_makefile @ONLY)
Expand All @@ -49,10 +49,10 @@ configure_file(${CMAKE_CURRENT_SOURCE_DIR}/nrnpyenv.sh.in ${PROJECT_BINARY_DIR}/
# file(CHMOD ...) and v3.20+ support setting permissions directly in configure_file(...).
set(NRN_CONFIG_EXE_FILES "nrnivmodl" "neurondemo")
foreach(NRN_CONFIG_EXE_FILE ${NRN_CONFIG_EXE_FILES})
nrn_configure_dest_src(${NRN_CONFIG_EXE_FILE} bin/tmp ${NRN_CONFIG_EXE_FILE} bin)
configure_file("${NRN_CONFIG_EXE_FILE}.in" "tmp/${NRN_CONFIG_EXE_FILE}" @ONLY)
file(
COPY ${PROJECT_BINARY_DIR}/bin/tmp/${NRN_CONFIG_EXE_FILE}
DESTINATION ${PROJECT_BINARY_DIR}/bin
COPY "${CMAKE_CURRENT_BINARY_DIR}/tmp/${NRN_CONFIG_EXE_FILE}"
DESTINATION "${CMAKE_CURRENT_BINARY_DIR}"
FILE_PERMISSIONS
OWNER_READ
OWNER_WRITE
Expand All @@ -62,7 +62,7 @@ foreach(NRN_CONFIG_EXE_FILE ${NRN_CONFIG_EXE_FILES})
WORLD_READ
WORLD_EXECUTE)
endforeach()
file(REMOVE_RECURSE ${PROJECT_BINARY_DIR}/bin/tmp)
file(REMOVE_RECURSE "${CMAKE_CURRENT_BINARY_DIR}/bin/tmp")

# =============================================================================
# Install targets
Expand Down
48 changes: 21 additions & 27 deletions cmake/ConfigFileSetting.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -155,53 +155,47 @@ nrn_check_type_exists(sys/types.h uid_t int uid_t)
# =============================================================================
nrn_check_signal_return_type(RETSIGTYPE)

# =============================================================================
# Copy cmake specific template files
# =============================================================================
# nrnconf.h.in and nmodlconf.h.in were originally generated from config.h.in generated by
# autoheader. We use repository copy cmake_nrnconf.h.in to create nrnconf.h and nmodlconf.h directly
# in the PROJECT_BINARY_DIR from the nrn_configure_dest_src macro.

# =============================================================================
# Generate file from file.in template
# =============================================================================
set(version_strs ${NRN_PYTHON_VERSIONS})
list(TRANSFORM version_strs APPEND "\"")
list(TRANSFORM version_strs PREPEND "\"")
string(JOIN ", " NRN_DYNAMIC_PYTHON_LIST_OF_VERSION_STRINGS ${version_strs})
nrn_configure_dest_src(nrnconf.h . cmake_nrnconf.h .)
nrn_configure_file(nrnmpiuse.h src/oc)
nrn_configure_file(nrnconfigargs.h src/nrnoc)
nrn_configure_file(nrnneosm.h src/nrncvode)
nrn_configure_file(sundials_config.h src/sundials)
nrn_configure_dest_src(nrn.defaults share/nrn/lib nrn.defaults share/lib)
configure_file("${PROJECT_SOURCE_DIR}/cmake_nrnconf.h.in" "${PROJECT_BINARY_DIR}/nrnconf.h" @ONLY)
configure_file("${PROJECT_SOURCE_DIR}/src/oc/nrnmpiuse.h.in"
"${PROJECT_BINARY_DIR}/src/oc/nrnmpiuse.h" @ONLY)
configure_file("${PROJECT_SOURCE_DIR}/src/nrnoc/nrnconfigargs.h.in"
"${PROJECT_BINARY_DIR}/src/nrnoc/nrnconfigargs.h" @ONLY)
configure_file("${PROJECT_SOURCE_DIR}/src/nrncvode/nrnneosm.h.in"
"${PROJECT_BINARY_DIR}/src/nrncvode/nrnneosm.h" @ONLY)
configure_file("${PROJECT_SOURCE_DIR}/src/sundials/sundials_config.h.in"
"${PROJECT_BINARY_DIR}/src/sundials/sundials_config.h" @ONLY)
configure_file("${PROJECT_SOURCE_DIR}/share/lib/nrn.defaults.in"
"${PROJECT_BINARY_DIR}/share/nrn/lib/nrn.defaults" @ONLY)
file(COPY ${PROJECT_SOURCE_DIR}/share/lib/nrnunits.lib
DESTINATION ${PROJECT_BINARY_DIR}/share/nrn/lib)

if(NRN_MACOS_BUILD)
set(abs_top_builddir ${PROJECT_BINARY_DIR})
nrn_configure_file(macdist.pkgproj src/mac)
nrn_configure_file(postinstall.sh src/mac)
configure_file("${PROJECT_SOURCE_DIR}/src/mac/macdist.pkgproj.in"
"${PROJECT_BINARY_DIR}/src/mac/macdist.pkgproj" @ONLY)
configure_file("${PROJECT_SOURCE_DIR}/src/mac/postinstall.sh.in"
"${PROJECT_BINARY_DIR}/src/mac/postinstall.sh" @ONLY)
endif()
if(MINGW)
dospath("${CMAKE_INSTALL_PREFIX}" WIN_MARSHAL_NRN_DIR)
nrn_configure_file(nrnsetupmingw.nsi src/mswin)
nrn_configure_file(pre_setup_exe.sh src/mswin)
configure_file("${PROJECT_SOURCE_DIR}/src/mswin/nrnsetupmingw.nsi.in"
"${PROJECT_BINARY_DIR}/src/mswin/nrnsetupmingw.nsi" @ONLY)
configure_file("${PROJECT_SOURCE_DIR}/src/mswin/pre_setup_exe.sh.in"
"${PROJECT_BINARY_DIR}/src/mswin/pre_setup_exe.sh" @ONLY)
# Just name and not path since setup.exe user chooses location of install.
set(CXX x86_64-w64-mingw32-g++.exe)
set(BUILD_MINGW_TRUE "")
set(BUILD_MINGW_FALSE "#")
set(nrnskip_rebase "#")
nrn_configure_file(mknrndll.mak src/mswin/lib)
endif()

# =============================================================================
# If Interviews is not provided, configure local files
# =============================================================================
if(NOT NRN_ENABLE_INTERVIEWS)
nrn_configure_dest_src(config.h . cmake_nrnconf.h .)
else()
file(REMOVE "${PROJECT_BINARY_DIR}/config.h")
configure_file("${PROJECT_SOURCE_DIR}/src/mswin/lib/mknrndll.mak.in"
"${PROJECT_BINARY_DIR}/src/mswin/lib/mknrndll.mak" @ONLY)
endif()

# Prepare some variables for setup.py extension building (hoc_module, rx3d and music)
Expand Down
66 changes: 7 additions & 59 deletions cmake/MacroHelper.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -79,51 +79,6 @@ macro(nrn_check_signal_return_type VARIABLE)
file(REMOVE "conftest.cpp")
endmacro()

# =============================================================================
# Transform PROJECT_SOURCE_DIR/sdir/sfile.in to PROJECT_BINARY_DIR/bdir/bfile
# =============================================================================
# ~~~
# This 4 arg macro transformsPROJECT_SOURCE_DIR/sdir/sfile.in into
# PROJECT_BINARY_DIR/bdir/bfile .
# THE shorter two arg form transforms PROJECT_SOURCE_DIR/dir/file.in into
# PROJECT_BINARY_DIR/dir/file
# This first copies with some replacement the sfile.in to _cmake_tmp_bfile.in
# so that the normal cmake configure_file command works to make a proper
# cmake_file. Then that is compared to a possibly existing bfile and,
# if different, copies _cmake_tmp_bfile to bfile. This prevents recompilation of
# .o files that depend on unchanged bfile. The sdir arg is the path relative to
# PROJECT_SOURCE_DIR, the bdir arg is the path relative to PROJECT_BINARY_DIR.
# Note that everytime cmake is run, the bfile is compared to a newly created
# _cmake_tmp_bfile consistent with the current cmake args.
# Note that the sfile arg does NOT contain the .in suffix.
# ~~~
macro(nrn_configure_dest_src bfile bdir sfile sdir)
set(infile ${PROJECT_SOURCE_DIR}/${sdir}/${sfile}.in)
set(bin_dir ${PROJECT_BINARY_DIR}/${bdir})
file(MAKE_DIRECTORY ${bin_dir})
execute_process(
COMMAND sed "s/\#undef *\\(.*\\)/\#cmakedefine \\1 @\\1@/"
INPUT_FILE ${infile}
OUTPUT_FILE ${bin_dir}/_cmake_tmp_${bfile}.in)
configure_file(${bin_dir}/_cmake_tmp_${bfile}.in ${bin_dir}/_cmake_tmp_${bfile} @ONLY)
execute_process(COMMAND cmp -s ${bin_dir}/_cmake_tmp_${bfile} ${bin_dir}/${bfile}
RESULT_VARIABLE result)
if(result EQUAL 0)
file(REMOVE ${bin_dir}/_cmake_tmp_${bfile})
else()
file(RENAME ${bin_dir}/_cmake_tmp_${bfile} ${bin_dir}/${bfile})
endif()
file(REMOVE ${bin_dir}/_cmake_tmp_${bfile}.in)
set_property(
DIRECTORY
APPEND
PROPERTY CMAKE_CONFIGURE_DEPENDS ${infile})
endmacro()

macro(nrn_configure_file file dir)
nrn_configure_dest_src(${file} ${dir} ${file} ${dir})
endmacro()

# =============================================================================
# Perform check_include_files and add it to NRN_HEADERS_INCLUDE_LIST if exist Passing an optional
# CXX will call check_include_files_cxx instead.
Expand Down Expand Up @@ -206,27 +161,20 @@ endmacro()
# =============================================================================
# Run nocmodl to convert NMODL to C
alkino marked this conversation as resolved.
Show resolved Hide resolved
# =============================================================================
macro(nocmodl_mod_to_cpp modfile_basename)
macro(nocmodl_mod_to_cpp modfile_basename source_dir working_dir)
alkino marked this conversation as resolved.
Show resolved Hide resolved
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 ${working_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
WORKING_DIRECTORY ${PROJECT_BINARY_DIR}/src/nrniv)
${NRN_NOCMODL_SANITIZER_ENVIRONMENT} $<TARGET_FILE:nocmodl> -o "${working_dir}"
"${source_dir}/${modfile_basename}.mod"
COMMAND sed -i ${NOCMODL_SED_EXPR} "${working_dir}/${modfile_basename}.cpp"
DEPENDS nocmodl "${source_dir}/${modfile_basename}.mod" "${PROJECT_BINARY_DIR}/share/nrn/lib/nrnunits.lib"
WORKING_DIRECTORY ${working_dir})
endmacro()

# =============================================================================
Expand Down
59 changes: 0 additions & 59 deletions cmake/NeuronFileLists.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -373,60 +373,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
units.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 @@ -443,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)

Expand All @@ -470,11 +414,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