-
Notifications
You must be signed in to change notification settings - Fork 148
Expand file tree
/
Copy pathCMakeLists.txt
More file actions
103 lines (95 loc) · 4.13 KB
/
Copy pathCMakeLists.txt
File metadata and controls
103 lines (95 loc) · 4.13 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
# =============================================================================
# Set various variables used in template files
# =============================================================================
# TODO: for nrn.defaults but these are repeated in cmake_config/CMakeLists.txt
include(${CODING_CONV_CMAKE}/build-time-copy.cmake)
set(modsubdir ${CMAKE_SYSTEM_PROCESSOR})
set(nrndef_unix "//")
set(nrndef_mac "//")
set(nrndef_mswin "//")
set(MAC_DARWIN_TRUE "\#")
set(MAC_DARWIN_FALSE "")
if(NRN_LINUX_BUILD)
set(nrndef_unix "")
elseif(NRN_MACOS_BUILD)
set(nrndef_mac "")
set(MAC_DARWIN_TRUE "")
set(MAC_DARWIN_FALSE "\#")
elseif(NRN_WINDOWS_BUILD)
set(nrndef_mswin "")
endif()
# for nrnmech_makefile
set(CMAKE_INSTALL_BINDIR bin)
set(CMAKE_INSTALL_LIBDIR lib)
set(CMAKE_INSTALL_INCLUDEDIR include)
set(CMAKE_INSTALL_DATADIR share/nrn)
set(CMAKE_INSTALL_DATADIR_NMODL share/nmodl)
# =============================================================================
# Include nrnivmodl makefile generator
# =============================================================================
include(CMakeListsNrnMech)
# =============================================================================
# nrnmech_makefile (based on coreneuron Configure templates)
# =============================================================================
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)
string(JOIN " " NRN_PYTHON_VERSIONS_STRING ${NRN_PYTHON_VERSIONS})
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/nrnpyenv.sh.in ${PROJECT_BINARY_DIR}/bin/nrnpyenv.sh
@ONLY)
# 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(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(
COPY "${CMAKE_CURRENT_BINARY_DIR}/tmp/${NRN_CONFIG_EXE_FILE}"
DESTINATION "${CMAKE_CURRENT_BINARY_DIR}"
FILE_PERMISSIONS
OWNER_READ
OWNER_WRITE
OWNER_EXECUTE
GROUP_READ
GROUP_EXECUTE
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 ${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
${PROJECT_BINARY_DIR}/bin/nrnpyenv.sh ${CMAKE_CURRENT_SOURCE_DIR}/set_nrnpyenv.sh
DESTINATION ${NRN_INSTALL_DATA_PREFIX}bin)