-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathCMakeLists.txt
More file actions
202 lines (179 loc) · 6.51 KB
/
CMakeLists.txt
File metadata and controls
202 lines (179 loc) · 6.51 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
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
# ##############################################################################
# CMakeLists.txt for the DiFfRG library
# ##############################################################################
cmake_minimum_required(VERSION 3.20)
project(FunKit LANGUAGES C)
set(CMAKE_INSTALL_MESSAGE LAZY)
include(${CMAKE_CURRENT_SOURCE_DIR}/utils/common.cmake)
if(CMAKE_VERSION VERSION_GREATER_EQUAL "3.31.0")
cmake_policy(SET CMP0177 NEW)
endif()
# ##############################################################################
# Install the Mathematica package
# ##############################################################################
find_program(WolframLanguage_wolframscript_EXE NAMES wolframscript wolfram math)
# See if the variable WolframLanguage_wolframscript_EXE is defined
if(DEFINED ENV{WOLFRAM_SCRIPT})
set(WolframLanguage_wolframscript_EXE $ENV{WOLFRAM_SCRIPT})
elseif(NOT (WolframLanguage_wolframscript_EXE STREQUAL ""))
# nothing to do, we found it with find_program
else()
set(WolframLanguage_wolframscript_EXE "")
endif()
if(NOT DEFINED WolframLanguage_wolframscript_EXE
OR WolframLanguage_wolframscript_EXE STREQUAL "")
# download CPM.cmake
file(
DOWNLOAD
https://github.com/cpm-cmake/CPM.cmake/releases/download/v0.40.8/CPM.cmake
${CMAKE_CURRENT_BINARY_DIR}/cmake/CPM.cmake
EXPECTED_HASH
SHA256=78ba32abdf798bc616bab7c73aac32a17bbd7b06ad9e26a6add69de8f3ae4791)
include(${CMAKE_CURRENT_BINARY_DIR}/cmake/CPM.cmake)
if("${CPM_SOURCE_CACHE}" STREQUAL "OFF" OR NOT DEFINED CPM_SOURCE_CACHE)
if(WIN32)
set(CPM_SOURCE_CACHE $ENV{LOCALAPPDATA}/CPM)
else()
set(CPM_SOURCE_CACHE $ENV{HOME}/.cache/CPM)
endif()
endif()
# Get codeparser
cpmaddpackage(
NAME
LibraryLinkUtilities
GITHUB_REPOSITORY
WolframResearch/LibraryLinkUtilities
GIT_TAG
v3.2.0
DOWNLOAD_ONLY
True)
list(APPEND CMAKE_MODULE_PATH ${LibraryLinkUtilities_SOURCE_DIR}/cmake)
find_package(WolframLanguage 12.0 COMPONENTS wolframscript)
if(${WolframLanguage_FOUND})
message(STATUS "Wolfram Language found: ${WolframLanguage_VERSION}")
else()
message(ERROR "Wolfram Language not found.")
endif()
endif()
# strip newlines from the executable path. Happens sometimes, breaks everything
string(REPLACE "\n" "" WolframLanguage_wolframscript_EXE
"${WolframLanguage_wolframscript_EXE}")
message(
STATUS
"Found a matching wolfram executable at: ${WolframLanguage_wolframscript_EXE}"
)
# get the application directory
execute_process(
COMMAND ${WolframLanguage_wolframscript_EXE} -script
${CMAKE_CURRENT_SOURCE_DIR}/utils/get_wolfram_app_dir.m
OUTPUT_VARIABLE WOLFRAM_APP_DIR
OUTPUT_STRIP_TRAILING_WHITESPACE)
message(STATUS "Wolfram Language application directory: ${WOLFRAM_APP_DIR}")
# Install dependencies if we are NOT on windows
if(WIN32)
execute_process(COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/dependencies/install.bat
${WOLFRAM_APP_DIR})
else()
execute_process(
COMMAND bash ${CMAKE_CURRENT_SOURCE_DIR}/dependencies/install.sh
${WOLFRAM_APP_DIR})
endif()
# install the Mathematica package
install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/FunKit.m
DESTINATION ${WOLFRAM_APP_DIR}/FunKit)
install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/PacletInfo.m
DESTINATION ${WOLFRAM_APP_DIR}/FunKit)
install(
DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/modules
${CMAKE_CURRENT_SOURCE_DIR}/examples
${CMAKE_CURRENT_SOURCE_DIR}/utils ${CMAKE_CURRENT_SOURCE_DIR}/tests
MESSAGE_NEVER
DESTINATION ${WOLFRAM_APP_DIR}/FunKit
FILES_MATCHING
PATTERN "*.m"
PATTERN "*.wl"
PATTERN "*.mx"
PATTERN "*.nb")
# ##############################################################################
# Testing
# ##############################################################################
if(WIN32)
add_custom_target(
test
COMMAND
${WolframLanguage_wolframscript_EXE} -script
${CMAKE_CURRENT_SOURCE_DIR}/tests/Test.m
DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/tests/Test.m
COMMENT "Running tests"
VERBATIM)
add_custom_target(
test-single
COMMAND
${WolframLanguage_wolframscript_EXE} -script
${CMAKE_CURRENT_SOURCE_DIR}/tests/Test.m $(FILE)
DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/tests/Test.m
COMMENT "Running tests")
else()
add_custom_target(
test
COMMAND
${WolframLanguage_wolframscript_EXE} -script
${CMAKE_CURRENT_SOURCE_DIR}/tests/Test.m | tee
${CMAKE_CURRENT_BINARY_DIR}/test.log
DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/tests/Test.m
COMMENT "Running tests"
VERBATIM)
# Run a single test file or directory:
# make test-single FILE=FEDeriK/FunctionalDTests.m
# make test-single FILE=FEDeriK
# Note: $(FILE) is expanded by Make at build time, not by CMake at configure
# time. VERBATIM is intentionally omitted so that Make resolves the variable.
add_custom_target(
test-single
COMMAND
${WolframLanguage_wolframscript_EXE} -script
${CMAKE_CURRENT_SOURCE_DIR}/tests/Test.m $(FILE) | tee
${CMAKE_CURRENT_BINARY_DIR}/test.log
DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/tests/Test.m
COMMENT "Running tests")
endif()
# ##############################################################################
# Benchmarks
# ##############################################################################
if(WIN32)
add_custom_target(
bench
COMMAND
${WolframLanguage_wolframscript_EXE} -script
${CMAKE_CURRENT_SOURCE_DIR}/benchmarks/Benchmark.m
DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/benchmarks/Benchmark.m
COMMENT "Running benchmarks"
VERBATIM)
add_custom_target(
bench-single
COMMAND
${WolframLanguage_wolframscript_EXE} -script
${CMAKE_CURRENT_SOURCE_DIR}/benchmarks/Benchmark.m $(FILE)
DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/benchmarks/Benchmark.m
COMMENT "Running benchmark")
else()
add_custom_target(
bench
COMMAND
${WolframLanguage_wolframscript_EXE} -script
${CMAKE_CURRENT_SOURCE_DIR}/benchmarks/Benchmark.m | tee
${CMAKE_CURRENT_BINARY_DIR}/bench.log
DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/benchmarks/Benchmark.m
COMMENT "Running benchmarks"
VERBATIM)
# Run a single benchmark file:
# make bench-single FILE=ScalarBench.m
add_custom_target(
bench-single
COMMAND
${WolframLanguage_wolframscript_EXE} -script
${CMAKE_CURRENT_SOURCE_DIR}/benchmarks/Benchmark.m $(FILE) | tee
${CMAKE_CURRENT_BINARY_DIR}/bench.log
DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/benchmarks/Benchmark.m
COMMENT "Running benchmark")
endif()