2
2
## Author: Hank Anderson <[email protected] >
3
3
##
4
4
5
- cmake_minimum_required (VERSION 2.8.4 )
5
+ cmake_minimum_required (VERSION 2.8.5 )
6
6
project (OpenBLAS)
7
7
set (OpenBLAS_MAJOR_VERSION 0)
8
8
set (OpenBLAS_MINOR_VERSION 2)
9
- set (OpenBLAS_PATCH_VERSION 19 )
9
+ set (OpenBLAS_PATCH_VERSION 20 )
10
10
set (OpenBLAS_VERSION "${OpenBLAS_MAJOR_VERSION} .${OpenBLAS_MINOR_VERSION} .${OpenBLAS_PATCH_VERSION} " )
11
11
12
12
enable_language (ASM)
13
13
enable_language (C)
14
14
15
+ # Adhere to GNU filesystem layout conventions
16
+ include (GNUInstallDirs)
17
+
15
18
if (MSVC )
16
19
set (OpenBLAS_LIBNAME libopenblas)
17
20
else ()
@@ -30,10 +33,20 @@ set(NO_LAPACK 1)
30
33
set (NO_LAPACKE 1)
31
34
endif ()
32
35
33
- if (BUILD_DEBUG)
34
- set (CMAKE_BUILD_TYPE Debug)
36
+ if (CMAKE_CONFIGURATION_TYPES ) # multiconfig generator?
37
+ set (CMAKE_CONFIGURATION_TYPES "Debug;Release" CACHE STRING "" FORCE)
38
+ set (CMAKE_BUILD_TYPE
39
+ Debug Debug
40
+ Release Release
41
+ )
35
42
else ()
36
- set (CMAKE_BUILD_TYPE Release)
43
+ if ( NOT CMAKE_BUILD_TYPE )
44
+ if (BUILD_DEBUG)
45
+ set (CMAKE_BUILD_TYPE Debug)
46
+ else ()
47
+ set (CMAKE_BUILD_TYPE Release)
48
+ endif ()
49
+ endif ()
37
50
endif ()
38
51
39
52
if (BUILD_WITHOUT_CBLAS)
@@ -107,9 +120,12 @@ if (${NO_STATIC} AND ${NO_SHARED})
107
120
endif ()
108
121
109
122
#Set default output directory
110
- set ( CMAKE_LIBRARY_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR} /lib )
111
- set ( CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR} /lib )
112
-
123
+ set ( CMAKE_LIBRARY_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR} /lib)
124
+ set ( CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR} /lib)
125
+ if (MSVC )
126
+ set ( CMAKE_LIBRARY_OUTPUT_DIRECTORY_DEBUG ${PROJECT_BINARY_DIR} /lib/Debug)
127
+ set ( CMAKE_ARCHIVE_OUTPUT_DIRECTORY_RELEASE ${PROJECT_BINARY_DIR} /lib/Release)
128
+ endif ()
113
129
# get obj vars into format that add_library likes: $<TARGET_OBJS:objlib> (see http://www.cmake.org/cmake/help/v3.0/command/add_library.html)
114
130
set (TARGET_OBJS "" )
115
131
foreach (SUBDIR ${SUBDIRS} )
@@ -129,9 +145,12 @@ if (NOT NO_LAPACKE)
129
145
endif ()
130
146
endif ()
131
147
132
- #Only generate .def for dll on MSVC
148
+ # Only generate .def for dll on MSVC and always produce pdb files for debug and release
133
149
if (MSVC )
134
150
set (OpenBLAS_DEF_FILE "${PROJECT_BINARY_DIR} /openblas.def" )
151
+ set (CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /Zi" )
152
+ set (CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} /Zi" )
153
+ set (CMAKE_SHARED_LINKER_FLAGS_RELEASE "${CMAKE_SHARED_LINKER_FLAGS_RELEASE} /DEBUG /OPT:REF /OPT:ICF" )
135
154
endif ()
136
155
137
156
# add objects to the openblas lib
@@ -141,25 +160,29 @@ include("${PROJECT_SOURCE_DIR}/cmake/export.cmake")
141
160
142
161
# Set output for libopenblas
143
162
set_target_properties ( ${OpenBLAS_LIBNAME} PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR} /lib)
163
+ set_target_properties ( ${OpenBLAS_LIBNAME} PROPERTIES LIBRARY_OUTPUT_NAME_DEBUG "${OpenBLAS_LIBNAME} _d" )
164
+
144
165
foreach (OUTPUTCONFIG ${CMAKE_CONFIGURATION_TYPES} )
145
166
string ( TOUPPER ${OUTPUTCONFIG} OUTPUTCONFIG )
146
- set_target_properties ( ${OpenBLAS_LIBNAME} PROPERTIES RUNTIME_OUTPUT_DIRECTORY_${OUTPUTCONFIG} ${PROJECT_BINARY_DIR} /lib)
147
- set_target_properties ( ${OpenBLAS_LIBNAME} PROPERTIES LIBRARY_OUTPUT_DIRECTORY_${OUTPUTCONFIG} ${PROJECT_BINARY_DIR} /lib)
148
- set_target_properties ( ${OpenBLAS_LIBNAME} PROPERTIES ARCHIVE_OUTPUT_DIRECTORY_${OUTPUTCONFIG} ${PROJECT_BINARY_DIR} /lib)
167
+
168
+ set_target_properties ( ${OpenBLAS_LIBNAME} PROPERTIES RUNTIME_OUTPUT_DIRECTORY_${OUTPUTCONFIG} ${PROJECT_BINARY_DIR} /lib/${OUTPUTCONFIG} )
169
+ set_target_properties ( ${OpenBLAS_LIBNAME} PROPERTIES LIBRARY_OUTPUT_DIRECTORY_${OUTPUTCONFIG} ${PROJECT_BINARY_DIR} /lib/${OUTPUTCONFIG} )
170
+ set_target_properties ( ${OpenBLAS_LIBNAME} PROPERTIES ARCHIVE_OUTPUT_DIRECTORY_${OUTPUTCONFIG} ${PROJECT_BINARY_DIR} /lib/${OUTPUTCONFIG} )
149
171
endforeach ()
150
172
151
173
enable_testing ()
152
174
add_subdirectory (utest)
153
175
154
- if (NOT MSVC )
155
- #only build shared library for MSVC
156
- add_library (${OpenBLAS_LIBNAME} _static STATIC ${LA_SOURCES} ${LAPACKE_SOURCES} ${TARGET_OBJS} )
157
- set_target_properties (${OpenBLAS_LIBNAME} _static PROPERTIES OUTPUT_NAME ${OpenBLAS_LIBNAME} )
158
- set_target_properties (${OpenBLAS_LIBNAME} _static PROPERTIES CLEAN_DIRECT_OUTPUT 1)
159
-
160
- if (SMP)
161
- target_link_libraries (${OpenBLAS_LIBNAME} pthread)
162
- target_link_libraries (${OpenBLAS_LIBNAME} _static pthread)
176
+ if (NOT MSVC )
177
+ #only build shared library for MSVC
178
+
179
+ add_library (${OpenBLAS_LIBNAME} _static STATIC ${LA_SOURCES} ${LAPACKE_SOURCES} ${TARGET_OBJS} )
180
+ set_target_properties (${OpenBLAS_LIBNAME} _static PROPERTIES OUTPUT_NAME ${OpenBLAS_LIBNAME} )
181
+ set_target_properties (${OpenBLAS_LIBNAME} _static PROPERTIES CLEAN_DIRECT_OUTPUT 1)
182
+
183
+ if (SMP)
184
+ target_link_libraries (${OpenBLAS_LIBNAME} pthread)
185
+ target_link_libraries (${OpenBLAS_LIBNAME} _static pthread)
163
186
endif ()
164
187
165
188
#build test and ctest
@@ -198,3 +221,73 @@ set_target_properties(${OpenBLAS_LIBNAME} PROPERTIES
198
221
#endif
199
222
# @touch lib.grd
200
223
224
+ # Install project
225
+
226
+ # Install libraries
227
+ install (TARGETS ${OpenBLAS_LIBNAME}
228
+ RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
229
+ ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
230
+ LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} )
231
+
232
+ # Install include files
233
+ set (GENCONFIG_BIN ${CMAKE_BINARY_DIR} /gen_config_h${CMAKE_EXECUTABLE_SUFFIX} )
234
+ ADD_CUSTOM_COMMAND (
235
+ OUTPUT ${CMAKE_BINARY_DIR} /openblas_config.h
236
+ DEPENDS ${CMAKE_CURRENT_SOURCE_DIR} /config.h
237
+ COMMAND ${GENCONFIG_BIN} ${CMAKE_CURRENT_SOURCE_DIR} /config.h ${CMAKE_CURRENT_SOURCE_DIR} /openblas_config_template.h > ${CMAKE_BINARY_DIR} /openblas_config.h
238
+ )
239
+
240
+ ADD_CUSTOM_TARGET (genconfig
241
+ ALL
242
+ DEPENDS openblas_config.h
243
+ )
244
+ add_dependencies (genconfig ${OpenBLAS_LIBNAME} )
245
+
246
+ install (FILES ${CMAKE_BINARY_DIR} /openblas_config.h DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} )
247
+
248
+ message (STATUS "Generating f77blas.h in ${CMAKE_INSTALL_INCLUDEDIR} " )
249
+
250
+ ADD_CUSTOM_TARGET (genf77blas
251
+ ALL
252
+ COMMAND ${AWK} 'BEGIN{print \"\#ifndef OPENBLAS_F77BLAS_H\" \; print \"\#define OPENBLAS_F77BLAS_H\" \; print \"\#include \\"openblas_config.h\\" \"}; NF {print}; END{print \"\#endif\"}' ${CMAKE_CURRENT_SOURCE_DIR}/common_interface.h > ${CMAKE_BINARY_DIR}/f77blas.h
253
+ DEPENDS ${CMAKE_CURRENT_SOURCE_DIR} /config.h
254
+ )
255
+ add_dependencies (genf77blas ${OpenBLAS_LIBNAME} )
256
+
257
+ install (FILES ${CMAKE_BINARY_DIR} /f77blas.h DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} )
258
+
259
+ if (NOT NO_CBLAS)
260
+ message (STATUS "Generating cblas.h in ${CMAKE_INSTALL_INCLUDEDIR} " )
261
+
262
+ ADD_CUSTOM_TARGET (gencblas
263
+ ALL
264
+ COMMAND ${SED} 's/common/openblas_config/g' ${CMAKE_CURRENT_SOURCE_DIR} /cblas.h > "${CMAKE_BINARY_DIR} /cblas.tmp"
265
+ COMMAND cp "${CMAKE_BINARY_DIR} /cblas.tmp" "${CMAKE_BINARY_DIR} /cblas.h"
266
+ DEPENDS ${CMAKE_CURRENT_SOURCE_DIR} /cblas.h
267
+ )
268
+ add_dependencies (gencblas ${OpenBLAS_LIBNAME} )
269
+
270
+ install (FILES ${CMAKE_BINARY_DIR} /cblas.h DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} )
271
+ endif ()
272
+
273
+ if (NOT NO_LAPACKE)
274
+ message (STATUS "Copying LAPACKE header files to ${CMAKE_INSTALL_INCLUDEDIR} " )
275
+ add_dependencies ( ${OpenBLAS_LIBNAME} genlapacke)
276
+ FILE (GLOB_RECURSE INCLUDE_FILES "${CMAKE_CURRENT_SOURCE_DIR} /lapack-netlib/LAPACKE/*.h" )
277
+ install (FILES ${INCLUDE_FILES} DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} )
278
+
279
+ ADD_CUSTOM_TARGET (genlapacke
280
+ COMMAND cp ${CMAKE_CURRENT_SOURCE_DIR} /lapack-netlib/LAPACKE/include /lapacke_mangling_with_flags.h.in "${CMAKE_BINARY_DIR} /lapacke_mangling.h"
281
+ )
282
+ install (FILES ${CMAKE_BINARY_DIR} /lapacke_mangling.h DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} )
283
+ endif ()
284
+
285
+ if (NOT MSVC )
286
+ install (TARGETS ${OpenBLAS_LIBNAME} _static DESTINATION ${CMAKE_INSTALL_LIBDIR} )
287
+ endif ()
288
+
289
+ include (FindPkgConfig QUIET )
290
+ if (PKG_CONFIG_FOUND)
291
+ configure_file (${PROJECT_SOURCE_DIR} /cmake/openblas.pc.in ${PROJECT_BINARY_DIR} /openblas.pc @ONLY)
292
+ install (FILES ${PROJECT_BINARY_DIR} /openblas.pc DESTINATION ${CMAKE_INSTALL_LIBDIR} /pkgconfig/)
293
+ endif ()
0 commit comments