File: CMakeLists.txt

package info (click to toggle)
tasmanian 8.2-1
  • links: PTS, VCS
  • area: main
  • in suites: sid
  • size: 4,852 kB
  • sloc: cpp: 34,523; python: 7,039; f90: 5,080; makefile: 224; sh: 64; ansic: 8
file content (215 lines) | stat: -rw-r--r-- 15,885 bytes parent folder | download
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
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
########################################################################
# Python module, examples and tests
#
# Configure the .in. files using three stage configuration
#   stage 1: everything (build, test, etc) should work in the build folder
#   stage 2: everything should work after make install
#
########################################################################

if (${CMAKE_SYSTEM_NAME} STREQUAL "Windows")
    set(Tasmanian_python_default_path "${CMAKE_INSTALL_PREFIX}/python${Python_VERSION_MAJOR}${Python_VERSION_MINOR}/site-packages")
else()
    set(Tasmanian_python_default_path "${CMAKE_INSTALL_PREFIX}/lib/python${Python_VERSION_MAJOR}.${Python_VERSION_MINOR}/site-packages")
endif()

if (NOT "${Tasmanian_python_install_path}" STREQUAL "${Tasmanian_python_default_path}")
    set(Tasmanian_python_install_path "${Tasmanian_python_default_path}" CACHE INTERNAL "install path for the Python module (version specific)" FORCE)
    set(Tasmanian_PYTHONPATH "${CMAKE_INSTALL_PREFIX}/share/Tasmanian/python/" CACHE PATH "install path for the Python module (version independent)" FORCE)
endif()

# CMake has permissive implementation of boolean true, which includes
# "On", "True" and "Yes" with different cases;
# Here we convert boolen true to "ON" so it can
# be safely passed to Python as a string and interpreted via
# python_boolean = ("@cmake_boolean@" == "ON")
foreach(_tsg_opt Tasmanian_ENABLE_BLAS Tasmanian_ENABLE_CUDA Tasmanian_ENABLE_HIP Tasmanian_ENABLE_DPCPP)
    if (${_tsg_opt})
        set(${_tsg_opt} "ON")
    endif()
endforeach()
unset(_tsg_opt)


########################################################################
# Stage 1: Build folder paths
########################################################################
set(Tasmanian_string_python_hashbang "${Python_EXECUTABLE}")

if (${CMAKE_SYSTEM_NAME} STREQUAL "Windows")
# windows puts the temp .dll files in Release or Debug subfolder, as opposed to directly in ${CMAKE_CURRENT_BINARY_DIR}
# add different configure file for each build type and copy the appropriate one with a custom command
    foreach(_tsg_configtype Release Debug)
        set(Tasmanian_libsparsegrid_path "${CMAKE_CURRENT_BINARY_DIR}/../SparseGrids/${_tsg_configtype}/${CMAKE_SHARED_LIBRARY_PREFIX}tasmaniansparsegrid${CMAKE_SHARED_LIBRARY_SUFFIX}")
        set(Tasmanian_libdream_path      "${CMAKE_CURRENT_BINARY_DIR}/../DREAM/${_tsg_configtype}/${CMAKE_SHARED_LIBRARY_PREFIX}tasmaniandream${CMAKE_SHARED_LIBRARY_SUFFIX}")
        set(Tasmanian_libcaddons_path    "${CMAKE_CURRENT_BINARY_DIR}/../Addons/${_tsg_configtype}/${CMAKE_SHARED_LIBRARY_PREFIX}tasmaniancaddons${CMAKE_SHARED_LIBRARY_SUFFIX}")
        # all libraries that are needed transitively must be included here, currently on the sparse grid library is needed
        set(Tasmanian_libpaths           "${CMAKE_CURRENT_BINARY_DIR}/../SparseGrids/${_tsg_configtype}/")

        configure_file("${CMAKE_CURRENT_SOURCE_DIR}/testConfigureData.in.py"  "${CMAKE_CURRENT_BINARY_DIR}/testConfigureData${_tsg_configtype}.py")
        configure_file("${CMAKE_CURRENT_SOURCE_DIR}/TasmanianConfig.in.py"    "${CMAKE_CURRENT_BINARY_DIR}/TasmanianConfig${_tsg_configtype}.py")

        list(APPEND Tasmanian_python_files  "${CMAKE_CURRENT_BINARY_DIR}/testConfigureData${_tsg_configtype}.py"
                                            "${CMAKE_CURRENT_BINARY_DIR}/TasmanianConfig${_tsg_configtype}.py")
    endforeach()
    unset(_tsg_configtype)

    add_custom_target(Tasmanian_python_interface ALL DEPENDS ${Tasmanian_python_files})
    unset(Tasmanian_python_files)

    add_custom_command(TARGET Tasmanian_python_interface PRE_BUILD
                       COMMAND "${CMAKE_COMMAND}"
                       ARGS -E copy ${CMAKE_CURRENT_BINARY_DIR}/TasmanianConfig$<CONFIG>.py ${CMAKE_CURRENT_BINARY_DIR}/TasmanianConfig.py
                       COMMENT "Copying Python module for config $<CONFIG>")
    add_custom_command(TARGET Tasmanian_python_interface PRE_BUILD
                       COMMAND "${CMAKE_COMMAND}"
                       ARGS -E copy ${CMAKE_CURRENT_BINARY_DIR}/testConfigureData$<CONFIG>.py ${CMAKE_CURRENT_BINARY_DIR}/testConfigureData.py
                       COMMENT "Copying Python module for config $<CONFIG>")
else()
    set(Tasmanian_libsparsegrid_path "${CMAKE_CURRENT_BINARY_DIR}/../SparseGrids/${CMAKE_SHARED_LIBRARY_PREFIX}tasmaniansparsegrid${CMAKE_SHARED_LIBRARY_SUFFIX}")
    set(Tasmanian_libdream_path      "${CMAKE_CURRENT_BINARY_DIR}/../DREAM/${CMAKE_SHARED_LIBRARY_PREFIX}tasmaniandream${CMAKE_SHARED_LIBRARY_SUFFIX}")
    set(Tasmanian_libcaddons_path    "${CMAKE_CURRENT_BINARY_DIR}/../Addons/${CMAKE_SHARED_LIBRARY_PREFIX}tasmaniancaddons${CMAKE_SHARED_LIBRARY_SUFFIX}")
    configure_file("${CMAKE_CURRENT_SOURCE_DIR}/testConfigureData.in.py"  "${CMAKE_CURRENT_BINARY_DIR}/testConfigureData.py")
    configure_file("${CMAKE_CURRENT_SOURCE_DIR}/TasmanianConfig.in.py"    "${CMAKE_CURRENT_BINARY_DIR}/TasmanianConfig.py")
endif()

set(Tasmanian_python_example_import "sys.path.append(\"${CMAKE_CURRENT_BINARY_DIR}\")\n")
configure_file("${CMAKE_CURRENT_SOURCE_DIR}/example_sparse_grids.in.py" "${CMAKE_CURRENT_BINARY_DIR}/example_sparse_grids.py") # also uses Tasmanian_string_python_hashbang
configure_file("${CMAKE_CURRENT_SOURCE_DIR}/example_dream.in.py" "${CMAKE_CURRENT_BINARY_DIR}/example_dream.py") # also uses Tasmanian_string_python_hashbang
configure_file("${CMAKE_CURRENT_SOURCE_DIR}/example_optimization.in.py" "${CMAKE_CURRENT_BINARY_DIR}/example_optimization.py") # also uses Tasmanian_string_python_hashbang

configure_file("${CMAKE_CURRENT_SOURCE_DIR}/sandbox.py" "${CMAKE_CURRENT_BINARY_DIR}/sandbox.py") # only uses Tasmanian_string_python_hashbang

configure_file("${CMAKE_CURRENT_SOURCE_DIR}/../SparseGrids/GaussPattersonRule.table"  "${CMAKE_CURRENT_BINARY_DIR}/GaussPattersonRule.table" COPYONLY) # needed for testing

# See the matlab CMakeText.txt on how to copy multiple scripts
set(Tasmanian_python_test_files TasmanianSG.py TasmanianAddons.py Tasmanian.py
                                TasmanianDREAM.py TasmanianDreamLikely.py TasmanianDreamState.py TasmanianDreamSampler.py
                                TasmanianOPT.py TasmanianParticleSwarm.py TasmanianGradientDescent.py
                                testTSG.py testCommon.py testBasicIO.py testAcceleration.py testExceptions.py testMakeUpdate.py
                                testRefinement.py testUnstructuredData.py testMisc.py testAddons.py testDream.py testOptimization.py
                                example_sparse_grids_01.py example_sparse_grids_02.py example_sparse_grids_03.py
                                example_sparse_grids_04.py example_sparse_grids_05.py example_sparse_grids_06.py
                                example_sparse_grids_07.py example_sparse_grids_08.py example_sparse_grids_09.py
                                example_sparse_grids_10.py example_sparse_grids_11.py
                                example_dream_01.py example_dream_02.py example_dream_03.py example_dream_04.py example_dream_05.py
                                example_optimization_01.py example_optimization_02.py
                                )

foreach(Tasmanian_python_testing_file ${Tasmanian_python_test_files})
    add_custom_command(OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/${Tasmanian_python_testing_file}"
                       COMMAND "${CMAKE_COMMAND}"
                       ARGS -E copy ${CMAKE_CURRENT_SOURCE_DIR}/${Tasmanian_python_testing_file} ${CMAKE_CURRENT_BINARY_DIR}//${Tasmanian_python_testing_file}
                       DEPENDS "${CMAKE_CURRENT_SOURCE_DIR}/${Tasmanian_python_testing_file}"
                       COMMENT "Copying ${CMAKE_CURRENT_SOURCE_DIR}/${Tasmanian_python_testing_file}")
    list(APPEND Tasmanian_python_testing_files_stage1 "${CMAKE_CURRENT_BINARY_DIR}/${Tasmanian_python_testing_file}")
endforeach()
unset(Tasmanian_python_testing_file)
add_custom_target(Tasmanian_python_testing ALL DEPENDS "${Tasmanian_python_testing_files_stage1}")


########################################################################
# Stage 2: Install folder paths
########################################################################
set(Tasmanian_shared_lib_destination "${CMAKE_INSTALL_LIBDIR}")
if (${CMAKE_SYSTEM_NAME} STREQUAL "Windows") # windows puts the .dll files in bin, as opposed to lib
    set(Tasmanian_shared_lib_destination "bin")
endif()

set(Tasmanian_libsparsegrid_path "${Tasmanian_final_install_path}/${Tasmanian_shared_lib_destination}/${CMAKE_SHARED_LIBRARY_PREFIX}tasmaniansparsegrid${CMAKE_SHARED_LIBRARY_SUFFIX}")
set(Tasmanian_libdream_path      "${Tasmanian_final_install_path}/${Tasmanian_shared_lib_destination}/${CMAKE_SHARED_LIBRARY_PREFIX}tasmaniandream${CMAKE_SHARED_LIBRARY_SUFFIX}")
set(Tasmanian_libcaddons_path    "${Tasmanian_final_install_path}/${Tasmanian_shared_lib_destination}/${CMAKE_SHARED_LIBRARY_PREFIX}tasmaniancaddons${CMAKE_SHARED_LIBRARY_SUFFIX}")
set(Tasmanian_libpaths           "${Tasmanian_final_install_path}/bin/")
configure_file("${CMAKE_CURRENT_SOURCE_DIR}/TasmanianConfig.in.py"  "${CMAKE_CURRENT_BINARY_DIR}/configured/TasmanianConfig.py")


set(Tasmanian_python_example_import "sys.path.append(\"${Tasmanian_python_install_path}\")\n")
if (SKBUILD)
    set(Tasmanian_python_example_import "") # if installed through pip, no path is needed
endif()
configure_file("${CMAKE_CURRENT_SOURCE_DIR}/example_sparse_grids.in.py" "${CMAKE_CURRENT_BINARY_DIR}/configured/example_sparse_grids.py") # also uses Tasmanian_string_python_hashbang
configure_file("${CMAKE_CURRENT_SOURCE_DIR}/example_dream.in.py" "${CMAKE_CURRENT_BINARY_DIR}/configured/example_dream.py") # also uses Tasmanian_string_python_hashbang
configure_file("${CMAKE_CURRENT_SOURCE_DIR}/example_optimization.in.py" "${CMAKE_CURRENT_BINARY_DIR}/configured/example_optimization.py") # also uses Tasmanian_string_python_hashbang


########################################################################
# Testing
########################################################################
add_test(NAME PythonIO           COMMAND Python::Interpreter "${CMAKE_CURRENT_BINARY_DIR}/testTSG.py" TestTasmanian.testBasicIO)
add_test(NAME PythonAcceleration COMMAND Python::Interpreter "${CMAKE_CURRENT_BINARY_DIR}/testTSG.py" TestTasmanian.testAcceleratedEvaluate)
add_test(NAME PythonExceptions   COMMAND Python::Interpreter "${CMAKE_CURRENT_BINARY_DIR}/testTSG.py" TestTasmanian.testBasicException)
add_test(NAME PythonMakeUpdate   COMMAND Python::Interpreter "${CMAKE_CURRENT_BINARY_DIR}/testTSG.py" TestTasmanian.testAMakeUpdate)
add_test(NAME PythonRefine       COMMAND Python::Interpreter "${CMAKE_CURRENT_BINARY_DIR}/testTSG.py" TestTasmanian.testBRefinement)
add_test(NAME PythonLearning     COMMAND Python::Interpreter "${CMAKE_CURRENT_BINARY_DIR}/testTSG.py" TestTasmanian.testCUnsructuredData)
add_test(NAME PythonMisc         COMMAND Python::Interpreter "${CMAKE_CURRENT_BINARY_DIR}/testTSG.py" TestTasmanian.testZMisc)
add_test(NAME PythonAddons       COMMAND Python::Interpreter "${CMAKE_CURRENT_BINARY_DIR}/testTSG.py" TestTasmanian.testAddons)
add_test(NAME PythonDream        COMMAND Python::Interpreter "${CMAKE_CURRENT_BINARY_DIR}/testTSG.py" TestTasmanian.testDream)
add_test(NAME PythonOptimization COMMAND Python::Interpreter "${CMAKE_CURRENT_BINARY_DIR}/testTSG.py" TestTasmanian.testOptimization)
set_tests_properties(PythonIO PROPERTIES RUN_SERIAL ON) # IO and Refine read/write to potentially the same files
set_tests_properties(PythonRefine PROPERTIES RUN_SERIAL ON)
Tasmanian_set_test_properties(TESTS PythonIO PythonAcceleration PythonExceptions PythonMakeUpdate PythonRefine PythonLearning PythonMisc PythonAddons PythonDream)


########################################################################
# Windows system paths
########################################################################
if (${CMAKE_SYSTEM_NAME} STREQUAL "Windows")
    set(Tasmanian_MSVC_PATH_STRING "${CMAKE_CURRENT_BINARY_DIR}/../SparseGrids/Release;${CMAKE_CURRENT_BINARY_DIR}/../SparseGrids/Debug")
    set(Tasmanian_MSVC_PATH_STRING "${Tasmanian_MSVC_PATH_STRING};${CMAKE_CURRENT_BINARY_DIR}/../DREAM/Release;${CMAKE_CURRENT_BINARY_DIR}/../DREAM/Debug")
    set(Tasmanian_MSVC_PATH_STRING "${Tasmanian_MSVC_PATH_STRING};${CMAKE_CURRENT_BINARY_DIR}/../Addons/Release;${CMAKE_CURRENT_BINARY_DIR}/../Addons/Debug;$ENV{PATH}")
    string(REPLACE ";" "\\;" Tasmanian_MSVC_PATH_STRING "${Tasmanian_MSVC_PATH_STRING}")
    set_tests_properties(PythonIO PythonAcceleration PythonExceptions PythonMakeUpdate PythonRefine PythonLearning PythonMisc PythonAddons PythonDream
                         PROPERTIES ENVIRONMENT "PATH=${Tasmanian_MSVC_PATH_STRING}")
endif()

########################################################################
# Installation
########################################################################
macro(Tasmanian_python_install)
    cmake_parse_arguments(_tsg_py "" "" "FILES" ${ARGN})
    foreach(_tsg_py_file ${_tsg_py_FILES})
        get_filename_component(_tsg_py_name ${_tsg_py_file} NAME)

        # install in the version specific site-package location
        install(FILES ${_tsg_py_file} DESTINATION "${Tasmanian_python_install_path}"
                PERMISSIONS OWNER_WRITE OWNER_READ GROUP_READ WORLD_READ)

        # install in the version independent location (note that pip-install doesn't handle sym-links)
        install(FILES ${_tsg_py_file} DESTINATION "${Tasmanian_PYTHONPATH}"
                PERMISSIONS OWNER_WRITE OWNER_READ GROUP_READ WORLD_READ)

        if (${CMAKE_SYSTEM_NAME} STREQUAL "Windows" AND Tasmanian_windows_virtual)
            # windows virtual environments use a different path and naming convention, annoying ...
            install(FILES ${_tsg_py_file} DESTINATION "${CMAKE_INSTALL_PREFIX}/Lib/site-packages/"
                    PERMISSIONS OWNER_WRITE OWNER_READ GROUP_READ WORLD_READ)
        elseif(${CMAKE_SYSTEM_NAME} STREQUAL "Darwin" AND Tasmanian_osx_framework)
            install(FILES ${_tsg_py_file} DESTINATION "${CMAKE_INSTALL_PREFIX}/lib/python/site-packages/"
                    PERMISSIONS OWNER_WRITE OWNER_READ GROUP_READ WORLD_READ)
        endif()
    endforeach()
endmacro(Tasmanian_python_install)

Tasmanian_python_install(FILES "${CMAKE_CURRENT_SOURCE_DIR}/TasmanianSG.py"
                               "${CMAKE_CURRENT_SOURCE_DIR}/TasmanianAddons.py"
                               "${CMAKE_CURRENT_SOURCE_DIR}/TasmanianDREAM.py"
                               "${CMAKE_CURRENT_SOURCE_DIR}/TasmanianDreamLikely.py"
                               "${CMAKE_CURRENT_SOURCE_DIR}/TasmanianDreamState.py"
                               "${CMAKE_CURRENT_SOURCE_DIR}/TasmanianDreamSampler.py"
                               "${CMAKE_CURRENT_SOURCE_DIR}/TasmanianOPT.py"
                               "${CMAKE_CURRENT_SOURCE_DIR}/TasmanianParticleSwarm.py"
                               "${CMAKE_CURRENT_SOURCE_DIR}/TasmanianGradientDescent.py"
                               "${CMAKE_CURRENT_BINARY_DIR}/configured/TasmanianConfig.py"
                               "${CMAKE_CURRENT_SOURCE_DIR}/Tasmanian.py")

install(DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/"
        DESTINATION "share/Tasmanian/examples/"
        FILES_MATCHING PATTERN "example_*.py"
        PATTERN "*.in.*" EXCLUDE
        PATTERN "*PipInstaller*" EXCLUDE
        PERMISSIONS OWNER_WRITE OWNER_READ GROUP_READ WORLD_READ)

install(FILES "${CMAKE_CURRENT_BINARY_DIR}/configured/example_sparse_grids.py"
              "${CMAKE_CURRENT_BINARY_DIR}/configured/example_dream.py"
              "${CMAKE_CURRENT_BINARY_DIR}/configured/example_optimization.py"
        DESTINATION "share/Tasmanian/examples/"
        PERMISSIONS OWNER_EXECUTE OWNER_WRITE OWNER_READ GROUP_EXECUTE GROUP_READ WORLD_EXECUTE WORLD_READ)