1
1
# Master CMAKE Build Script
2
- cmake_minimum_required (VERSION 3.0 )
2
+ cmake_minimum_required (VERSION 3.7 )
3
3
project (curvefit C CXX Fortran )
4
4
5
5
# Define version information
6
- set (curvefit_VERSION_MAJOR 1 )
7
- set (curvefit_VERSION_MINOR 1 )
8
- set (curvefit_VERSION_PATCH 0 )
6
+ set (CURVEFIT_MAJOR_VERSION 1 )
7
+ set (CURVEFIT_MINOR_VERSION 1 )
8
+ set (CURVEFIT_PATCH_VERSION 0 )
9
+ set (CURVEFIT_VERSION ${CURVEFIT_MAJOR_VERSION} .${CURVEFIT_MINOR_VERSION}.${CURVEFIT_PATCH_VERSION} )
10
+
11
+ # Set a default build type if none was specified
12
+ if (NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES )
13
+ message (STATUS "Setting build type to 'Release' as none was specified." )
14
+ set (CMAKE_BUILD_TYPE Release CACHE STRING "Choose the type of build." FORCE )
15
+ # Set the possible values of build type for cmake-gui
16
+ set_property (CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS "Debug" "Release" )
17
+ endif ()
18
+
19
+ # By default, shared library
20
+ option (BUILD_SHARED_LIBS "Build shared libraries" ON )
21
+
22
+ # Locate Dependencies
23
+ find_package (ferror 1.3.0 )
24
+ find_package (linalg 1.5.0 )
25
+ find_package (nonlin 1.3.0 )
26
+
27
+ # Define dependency directories
28
+ set (NONLIN_DIRECTORY ${PROJECT_SOURCE_DIR} /src/external/nonlin )
29
+ set (LINALG_DIRECTORY ${NONLIN_DIRECTORY} /src/external/linalg )
30
+ set (FERROR_DIRECTORY ${LINALG_DIRECTORY} /src/external/ferror )
31
+
32
+ # If FERROR is not installed on the system, build the default implementation
33
+ if (${ferror_FOUND} )
34
+ message (STATUS "An acceptable version of FERROR (v" ${ferror_VERSION} ") was found, and will be utilized." )
35
+ set (FERROR_LIBRARIES ferror )
36
+ get_target_property (ferror_LibLocation ferror LOCATION )
37
+ endif ()
38
+
39
+ # If LINALG is not installed on the system, build the default implementation
40
+ if (${linalg_FOUND} )
41
+ message (STATUS "An acceptable version of LINALG (v" ${linalg_VERSION} ") was found, and will be utilized." )
42
+ set (LINALG_LIBRARIES linalg )
43
+ get_target_property (linalg_LibLocation linalg LOCATION )
44
+ endif ()
45
+
46
+ # If NONLIN is not installed on the system, build the default implementation
47
+ if (${nonlin_FOUND} )
48
+ message (STATUS "An acceptable version of NONLIN (v" ${nonlin_VERSION} ") was found, and will be utilized." )
49
+ set (NONLIN_LIBRARIES nonlin )
50
+ get_target_property (nonlin_LibLocation nonlin LOCATION )
51
+ else ()
52
+ message (STATUS "NONLIN not found. The default implementation will be used." )
53
+ add_subdirectory (${NONLIN_DIRECTORY} )
54
+ set (nonlin_INCLUDE_DIRS ${NONLIN_DIRECTORY} /include )
55
+ set (NONLIN_LIBRARIES nonlin )
56
+ set (nonlin_LibLocation ${nonlin_BINARY_DIR} )
57
+ include_directories (${LINALG_DIRECTORY} /include )
58
+ include_directories (${FERROR_DIRECTORY} /include )
59
+ endif ()
60
+
61
+ # Include the dependency module files
62
+ include_directories (${nonlin_INCLUDE_DIRS} ${linalg_INCLUDE_DIRS} ${ferror_INCLUDE_DIRS} )
63
+
64
+ # Export all symbols on Windows when building shared libraries
65
+ SET (CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS TRUE )
66
+
67
+ # Locate the module files
68
+ set (CMAKE_Fortran_MODULE_DIRECTORY ${PROJECT_SOURCE_DIR} /include )
9
69
10
70
# Define output directories, if undefined
11
71
if (NOT CMAKE_LIBRARY_OUTPUT_DIRECTORY )
12
- message (STATUS "Library output directories undefined. Using default directories." )
72
+ message (STATUS "CURVEFIT library output directories undefined. Using default directories." )
13
73
if (CMAKE_BUILD_TYPE MATCHES Debug )
14
74
# Debug Build
15
75
if (BUILD_SHARED_LIBS )
16
76
set (CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${PROJECT_SOURCE_DIR} /bin/Debug )
17
77
set (CMAKE_LIBRARY_OUTPUT_DIRECTORY ${PROJECT_SOURCE_DIR} /bin/Debug )
18
78
set (CMAKE_RUNTIME_OUTPUT_DIRECTORY ${PROJECT_SOURCE_DIR} /bin/Debug )
19
- set (CMAKE_Fortran_MODULE_DIRECTORY ${PROJECT_SOURCE_DIR} /bin/Debug/mod )
20
79
else ()
21
80
set (CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${PROJECT_SOURCE_DIR} /lib/Debug )
22
81
set (CMAKE_LIBRARY_OUTPUT_DIRECTORY ${PROJECT_SOURCE_DIR} /lib/Debug )
23
82
set (CMAKE_RUNTIME_OUTPUT_DIRECTORY ${PROJECT_SOURCE_DIR} /lib/Debug )
24
- set (CMAKE_Fortran_MODULE_DIRECTORY ${PROJECT_SOURCE_DIR} /lib/Debug/mod )
25
83
endif ()
26
84
elseif (CMAKE_BUILD_TYPE MATCHES Release )
27
85
# Release Build
28
86
if (BUILD_SHARED_LIBS )
29
87
set (CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${PROJECT_SOURCE_DIR} /bin/Release )
30
88
set (CMAKE_LIBRARY_OUTPUT_DIRECTORY ${PROJECT_SOURCE_DIR} /bin/Release )
31
89
set (CMAKE_RUNTIME_OUTPUT_DIRECTORY ${PROJECT_SOURCE_DIR} /bin/Release )
32
- set (CMAKE_Fortran_MODULE_DIRECTORY ${PROJECT_SOURCE_DIR} /bin/Release/mod )
33
90
else ()
34
91
set (CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${PROJECT_SOURCE_DIR} /lib/Release )
35
92
set (CMAKE_LIBRARY_OUTPUT_DIRECTORY ${PROJECT_SOURCE_DIR} /lib/Release )
36
93
set (CMAKE_RUNTIME_OUTPUT_DIRECTORY ${PROJECT_SOURCE_DIR} /lib/Release )
37
- set (CMAKE_Fortran_MODULE_DIRECTORY ${PROJECT_SOURCE_DIR} /lib/Release/mod )
38
94
endif ()
39
95
else ()
40
96
# Default Condition
41
97
if (BUILD_SHARED_LIBS )
42
98
set (CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${PROJECT_SOURCE_DIR} /bin/Debug )
43
99
set (CMAKE_LIBRARY_OUTPUT_DIRECTORY ${PROJECT_SOURCE_DIR} /bin/Debug )
44
100
set (CMAKE_RUNTIME_OUTPUT_DIRECTORY ${PROJECT_SOURCE_DIR} /bin/Debug )
45
- set (CMAKE_Fortran_MODULE_DIRECTORY ${PROJECT_SOURCE_DIR} /bin/Debug/mod )
46
101
else ()
47
102
set (CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${PROJECT_SOURCE_DIR} /lib/Debug )
48
103
set (CMAKE_LIBRARY_OUTPUT_DIRECTORY ${PROJECT_SOURCE_DIR} /lib/Debug )
49
104
set (CMAKE_RUNTIME_OUTPUT_DIRECTORY ${PROJECT_SOURCE_DIR} /lib/Debug )
50
- set (CMAKE_Fortran_MODULE_DIRECTORY ${PROJECT_SOURCE_DIR} /lib/Debug/mod )
51
105
endif ()
52
106
endif ()
53
107
endif ()
@@ -71,18 +125,6 @@ else (Fortran_COMPILER_NAME MATCHES "gfortran.*")
71
125
set (CMAKE_Fortran_FLAGS_DEBUG "-O0 -g -Wall" )
72
126
endif (Fortran_COMPILER_NAME MATCHES "gfortran.*" )
73
127
74
- # Define necessary CMake variables, and define the dependency.
75
- set (ExternalProjectCMakeArgs
76
- -DCMAKE_ARCHIVE_OUTPUT_DIRECTORY=${CMAKE_ARCHIVE_OUTPUT_DIRECTORY}
77
- -DCMAKE_LIBRARY_OUTPUT_DIRECTORY=${CMAKE_LIBRARY_OUTPUT_DIRECTORY}
78
- -DCMAKE_RUNTIME_OUTPUT_DIRECTORY=${CMAKE_RUNTIME_OUTPUT_DIRECTORY}
79
- -DCMAKE_Fortran_MODULE_DIRECTORY=${CMAKE_Fortran_MODULE_DIRECTORY}
80
- -DCMAKE_INSTALL_PREFIX=${CMAKE_SOURCE_DIR}/external
81
- -DCMAKE_Fortran_COMPILER=${CMAKE_Fortran_COMPILER}
82
- -DCMAKE_C_COMPILER=${CMAKE_C_COMPILER}
83
- -DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER}
84
- -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} )
85
-
86
128
# Locate the source directory
87
129
add_subdirectory (src )
88
130
@@ -94,71 +136,18 @@ if (BUILD_CURVEFIT_EXAMPLES)
94
136
# Inform the user we're building the examples
95
137
message (STATUS "Building CURVEFIT examples." )
96
138
97
- # Interpolation Example
98
- add_executable (curvefit_interp_example examples/curvefit_interp_example.f90 )
99
- target_link_libraries (curvefit_interp_example curvefit )
100
-
101
- # LOWESS Example
102
- add_executable (curvefit_lowess_example examples/curvefit_lowess_example.f90 )
103
- target_link_libraries (curvefit_lowess_example curvefit )
104
-
105
- # Nonlinear Regression Example
106
- add_executable (curvefit_nlreg_example examples/curvefit_nlreg_example.f90 )
107
- target_link_libraries (curvefit_nlreg_example curvefit )
108
-
109
- # Calibration Example
110
- add_executable (curvefit_cal_example examples/curvefit_cal_example.f90 )
111
- target_link_libraries (curvefit_cal_example curvefit )
112
-
113
- # --------------------
114
- include_directories (${PROJECT_SOURCE_DIR} /include
115
- ${PROJECT_SOURCE_DIR} /src/external/nonlin/include
116
- ${PROJECT_SOURCE_DIR} /src/external/nonlin/src/external/linalg/include
117
- ${PROJECT_SOURCE_DIR} /src/external/nonlin/src/external/linalg/src/external/ferror/include )
118
-
119
- # Linear Interpolation Example
120
- add_executable (curvefit_c_interp_example examples/curvefit_c_interp_example.c )
121
- target_link_libraries (curvefit_c_interp_example curvefit )
122
-
123
- # LOWESS Example
124
- add_executable (curvefit_c_lowess_example examples/curvefit_c_lowess_example.c )
125
- target_link_libraries (curvefit_c_lowess_example curvefit m )
126
-
127
- # Nonlinear Regression Example
128
- add_executable (curvefit_c_nlreg_example examples/curvefit_c_nlreg_example.c )
129
- target_link_libraries (curvefit_c_nlreg_example curvefit )
139
+ # Build the examples
140
+ add_subdirectory (examples )
130
141
endif ()
131
142
132
143
# ------------------------------------------------------------------------------
133
144
# TESTS
134
145
# ------------------------------------------------------------------------------
135
- option (BUILD_CURVEFIT_TESTS "Build CURVEFIT tests?" ON )
146
+ option (BUILD_CURVEFIT_TESTS "Build CURVEFIT tests?" OFF )
136
147
if (BUILD_CURVEFIT_TESTS )
137
- set (curvefit_test_sources tests/curvefit_test.f90
138
- tests/curvefit_test_interp.f90 tests/curvefit_test_statistics.f90
139
- src/external/nonlin/src/external/linalg/tests/test_core.f90
140
- tests/curvefit_test_regression.f90 tests/curvefit_test_calibration.f90 )
141
- add_executable (curvefit_test ${curvefit_test_sources} )
142
- target_link_libraries (curvefit_test curvefit )
143
- add_custom_command (OUTPUT curvefit_tests DEPENDS ${curvefit_test_sources}
144
- COMMAND curvefit_test )
145
- add_custom_target (run_curvefit_tests ALL DEPENDS curvefit_tests )
146
- endif ()
148
+ # Inform the user we're building the tests
149
+ message (STATUS "Building CURVEFIT tests." )
147
150
148
- # C Test
149
- option (BUILD_CURVEFIT_C_TESTS "Build CURVEFIT C API tests?" ON )
150
- if (BUILD_CURVEFIT_C_TESTS )
151
- include_directories (${PROJECT_SOURCE_DIR} /include
152
- ${PROJECT_SOURCE_DIR} /src/external/nonlin/include
153
- ${PROJECT_SOURCE_DIR} /src/external/nonlin/src/external/linalg/include
154
- ${PROJECT_SOURCE_DIR} /src/external/nonlin/src/external/linalg/src/external/ferror/include
155
- ${PROJECT_SOURCE_DIR} /src/external/nonlin/src/external/linalg/tests )
156
- set (curvefit_c_test_sources tests/curvefit_c_test.c
157
- ${PROJECT_SOURCE_DIR} /src/external/nonlin/src/external/linalg/tests/c_test_core.c )
158
- add_executable (curvefit_c_test ${curvefit_c_test_sources} )
159
- target_link_libraries (curvefit_c_test curvefit m )
160
- add_custom_command (OUTPUT curvefit_c_tests_cmd
161
- DEPENDS ${curvefit_c_test_sources}
162
- COMMAND curvefit_c_test )
163
- add_custom_target (run_curvefit_c_tests ALL DEPENDS curvefit_c_tests_cmd )
151
+ # Build the tests
152
+ add_subdirectory (tests )
164
153
endif ()
0 commit comments