-
Notifications
You must be signed in to change notification settings - Fork 12
/
CMakeLists.txt
155 lines (136 loc) · 5.98 KB
/
CMakeLists.txt
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
# FindMathematica example project
cmake_minimum_required(VERSION 3.5.0)
project (Mathematica-project)
set (CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/CMake/Mathematica")
set (CMAKE_VERBOSE_MAKEFILE OFF)
set (CMAKE_COLOR_MAKEFILE ON)
set (CMAKE_SKIP_ASSEMBLY_SOURCE_RULES ON)
set (CMAKE_SKIP_PREPROCESSED_SOURCE_RULES ON)
set (CMAKE_INCLUDE_CURRENT_DIR ON)
set (CMAKE_INCLUDE_DIRECTORIES_PROJECT_BEFORE ON)
if (NOT CMAKE_CONFIGURATION_TYPES AND NOT CMAKE_BUILD_TYPE)
set (CMAKE_BUILD_TYPE Debug)
endif()
set_property(GLOBAL PROPERTY USE_FOLDERS 1)
if (NOT CMAKE_VERSION VERSION_LESS "3.1")
# compile all example C++ code as C++11
set (CMAKE_CXX_STANDARD 11)
endif()
# default settings for options that affect search
#set (Mathematica_USE_STATIC_LIBRARIES OFF)
#set (Mathematica_USE_MINIMAL_LIBRARIES ON)
#set (Mathematica_USE_LIBCXX_LIBRARIES ON)
#set (Mathematica_MathLink_FIND_VERSION_MAJOR 3)
#set (Mathematica_WSTP_FIND_VERSION_MAJOR 3)
#set (Mathematica_DEBUG OFF)
#set (Mathematica_RUN_KERNEL_ON_CONFIGURE ON)
# finds newest Mathematica installation and its default components
find_package(Mathematica)
# finds Mathematica 10.0.2 installation and required components
#find_package(Mathematica 10.0.2 EXACT REQUIRED MathLink WSTP JLink WolframLibrary)
# finds Mathematica >= 11 installation and optional components
#find_package(Mathematica 11 COMPONENTS MathLink JLink)
# find Java and use the Java installation bundled with Mathematica
if (Mathematica_JLink_JAVA_HOME AND NOT APPLE)
set (JAVA_HOME "${Mathematica_JLink_JAVA_HOME}")
endif()
find_package(Java 1.8 COMPONENTS Development)
if (Mathematica_MathLink_DEFINITIONS)
add_definitions(${Mathematica_MathLink_DEFINITIONS})
endif()
if (Mathematica_WSTP_DEFINITIONS)
add_definitions(${Mathematica_WSTP_DEFINITIONS})
endif()
enable_testing()
# helper macro which adds convenience target which lets you run tests from IDE
macro (add_convenience_test_target _targetName _testRegEx)
if (CMAKE_CONFIGURATION_TYPES)
add_custom_target("${_targetName}"
COMMAND
${CMAKE_CTEST_COMMAND} -V --force-new-ctest-process
--tests-regex "${_testRegEx}"
--build-config "${CMAKE_CFG_INTDIR}")
else()
add_custom_target("${_targetName}"
COMMAND
${CMAKE_CTEST_COMMAND} -V --force-new-ctest-process
--tests-regex "${_testRegEx}")
endif()
set_target_properties("${_targetName}" PROPERTIES FOLDER "Tests")
endmacro()
if (${Mathematica_FOUND})
message(STATUS "Mathematica Version ${Mathematica_VERSION}")
# Mathematica_SYSTEM_IDS contains the list of Mathematica platform system IDs that the
# project is being compiled for. This usually contains just one entry (e.g., "Windows").
# It may contain multiple entries if we are building a universal binary under macOS
# (e.g., "MacOSX-x86-64;MacOSX-ARM64").
message(STATUS "Mathematica Target System IDs ${Mathematica_SYSTEM_IDS}")
# Mathematica_HOST_SYSTEM_IDS is the list of Mathematica platform system IDs that can
# run on the build host. If we are executing the CMake build under a 64-bit version of
# Windows this would be "Windows-x86-64;Windows". Under a 32-bit version of Windows this
# would be just "Windows".
message(STATUS "Mathematica Host System IDs ${Mathematica_HOST_SYSTEM_IDS}")
# Mathematica_BASE_DIR is the directory for system-wide files to be loaded by Mathematica
message(STATUS "Mathematica Base Directory ${Mathematica_BASE_DIR}")
# Mathematica_USERBASE_DIR is the directory for user-specific files to be loaded by Mathematica
message(STATUS "Mathematica User Base Directory ${Mathematica_USERBASE_DIR}")
message(STATUS "Mathematica runtime library dirs: ${Mathematica_RUNTIME_LIBRARY_DIRS}")
message(STATUS "Mathematica runtime library dirs debug: ${Mathematica_RUNTIME_LIBRARY_DIRS_DEBUG}")
add_subdirectory(MathematicaExamples)
if (${Mathematica_JLink_FOUND})
add_subdirectory(DocumentationExamples)
endif()
endif()
if (${Mathematica_WolframLibrary_FOUND})
# copy LibraryLink example files from Mathematica installation to source directory
if (EXISTS "${Mathematica_LibraryLink_PACKAGE_DIR}/LibraryResources")
file (GLOB_RECURSE _LibraryLinkExamples
"${Mathematica_LibraryLink_PACKAGE_DIR}/LibraryResources/*.c"
"${Mathematica_LibraryLink_PACKAGE_DIR}/LibraryResources/*.cxx")
file (COPY ${_LibraryLinkExamples}
DESTINATION "${CMAKE_BINARY_DIR}/LibraryLinkExamples"
NO_SOURCE_PERMISSIONS)
add_subdirectory(LibraryLinkExamples)
endif()
add_subdirectory(CodeGenerationExamples)
endif()
if (${Mathematica_MathLink_FOUND})
# copy MathLink example files from Mathematica installation to source directory
if (EXISTS "${Mathematica_MathLink_HOST_ROOT_DIR}/MathLinkExamples")
file (GLOB_RECURSE _MathLinkExamples
"${Mathematica_MathLink_HOST_ROOT_DIR}/MathLinkExamples/*.tm"
"${Mathematica_MathLink_HOST_ROOT_DIR}/MathLinkExamples/*.c"
"${Mathematica_MathLink_HOST_ROOT_DIR}/MathLinkExamples/*.cxx")
file (COPY ${_MathLinkExamples}
DESTINATION "${CMAKE_BINARY_DIR}/MathLinkExamples"
NO_SOURCE_PERMISSIONS)
add_subdirectory(MathLinkExamples)
endif()
endif()
if (${Mathematica_WSTP_FOUND})
# copy WSTP example files from Mathematica installation to source directory
if (EXISTS "${Mathematica_WSTP_HOST_ROOT_DIR}/WSTPExamples")
file (GLOB_RECURSE _WSTPExamples
"${Mathematica_WSTP_HOST_ROOT_DIR}/WSTPExamples/*.tm"
"${Mathematica_WSTP_HOST_ROOT_DIR}/WSTPExamples/*.c"
"${Mathematica_WSTP_HOST_ROOT_DIR}/WSTPExamples/*.cxx")
file (COPY ${_WSTPExamples}
DESTINATION "${CMAKE_BINARY_DIR}/WSTPExamples"
NO_SOURCE_PERMISSIONS)
add_subdirectory(WSTPExamples)
endif()
endif()
if (Mathematica_MUnit_FOUND)
add_subdirectory(MUnitExamples)
endif ()
if (JAVA_FOUND AND Mathematica_JLink_FOUND)
# copy J/Link example files from Mathematica installation to source directory
if (EXISTS "${Mathematica_JLink_PACKAGE_DIR}/Examples")
file (GLOB_RECURSE _JLinkLinkExamples
"${Mathematica_JLink_PACKAGE_DIR}/Examples/*.java")
file (COPY ${_JLinkLinkExamples}
DESTINATION "${CMAKE_BINARY_DIR}/JLinkExamples"
NO_SOURCE_PERMISSIONS)
add_subdirectory(JLinkExamples)
endif()
endif()