@@ -120,9 +120,12 @@ if (${NO_STATIC} AND ${NO_SHARED})
120
120
endif ()
121
121
122
122
#Set default output directory
123
- set ( CMAKE_LIBRARY_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR} /lib )
124
- set ( CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR} /lib )
125
-
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 ()
126
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)
127
130
set (TARGET_OBJS "" )
128
131
foreach (SUBDIR ${SUBDIRS} )
@@ -142,9 +145,12 @@ if (NOT NO_LAPACKE)
142
145
endif ()
143
146
endif ()
144
147
145
- #Only generate .def for dll on MSVC
148
+ # Only generate .def for dll on MSVC and always produce pdb files for debug and release
146
149
if (MSVC )
147
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" )
148
154
endif ()
149
155
150
156
# add objects to the openblas lib
@@ -159,15 +165,15 @@ set_target_properties( ${OpenBLAS_LIBNAME} PROPERTIES LIBRARY_OUTPUT_NAME_DEBUG
159
165
foreach (OUTPUTCONFIG ${CMAKE_CONFIGURATION_TYPES} )
160
166
string ( TOUPPER ${OUTPUTCONFIG} OUTPUTCONFIG )
161
167
162
- set_target_properties ( ${OpenBLAS_LIBNAME} PROPERTIES RUNTIME_OUTPUT_DIRECTORY_${OUTPUTCONFIG} ${PROJECT_BINARY_DIR} /lib)
163
- set_target_properties ( ${OpenBLAS_LIBNAME} PROPERTIES LIBRARY_OUTPUT_DIRECTORY_${OUTPUTCONFIG} ${PROJECT_BINARY_DIR} /lib)
164
- set_target_properties ( ${OpenBLAS_LIBNAME} PROPERTIES ARCHIVE_OUTPUT_DIRECTORY_${OUTPUTCONFIG} ${PROJECT_BINARY_DIR} /lib)
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} )
165
171
endforeach ()
166
172
167
173
enable_testing ()
168
174
add_subdirectory (utest)
169
175
170
- if (NOT MSVC )
176
+ if (NOT MSVC )
171
177
#only build shared library for MSVC
172
178
173
179
add_library (${OpenBLAS_LIBNAME} _static STATIC ${LA_SOURCES} ${LAPACKE_SOURCES} ${TARGET_OBJS} )
@@ -224,10 +230,7 @@ install(TARGETS ${OpenBLAS_LIBNAME}
224
230
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} )
225
231
226
232
# Install include files
227
- add_executable (gen_config_h gen_config_h.c)
228
- target_compile_definitions (gen_config_h PRIVATE VERSION =\"${OpenBLAS_VERSION} \")
229
- message (STATUS "Generating openblas_config.h in ${CMAKE_BINARY_DIR} " )
230
- GET_TARGET_PROPERTY (GENCONFIG_BIN gen_config_h LOCATION )
233
+ set (GENCONFIG_BIN ${CMAKE_BINARY_DIR} /gen_config_h${CMAKE_EXECUTABLE_SUFFIX} )
231
234
ADD_CUSTOM_COMMAND (
232
235
OUTPUT ${CMAKE_BINARY_DIR} /openblas_config.h
233
236
DEPENDS ${CMAKE_CURRENT_SOURCE_DIR} /config.h
@@ -238,19 +241,32 @@ install(TARGETS ${OpenBLAS_LIBNAME}
238
241
install (FILES ${CMAKE_BINARY_DIR} /openblas_config.h DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} )
239
242
240
243
message (STATUS "Generating f77blas.h in ${CMAKE_INSTALL_INCLUDEDIR} " )
244
+ if (NOT MSVC )
241
245
ADD_CUSTOM_TARGET (genf77blas
242
246
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
243
-
244
247
DEPENDS ${CMAKE_CURRENT_SOURCE_DIR} /config.h
245
248
)
249
+ else ()
250
+ ADD_CUSTOM_TARGET (genf77blas
251
+ 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
252
+ DEPENDS ${CMAKE_CURRENT_SOURCE_DIR} /config.h
253
+ )
254
+ endif ()
246
255
install (FILES ${CMAKE_BINARY_DIR} /f77blas.h DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} )
247
256
248
257
if (NOT NO_CBLAS)
249
258
message (STATUS "Generating cblas.h in ${CMAKE_INSTALL_INCLUDEDIR} " )
259
+ if (NOT MSVC )
250
260
ADD_CUSTOM_TARGET (gencblas
251
- COMMAND sed 's/common/openblas_config/g' ${CMAKE_CURRENT_SOURCE_DIR} /cblas.h > "${CMAKE_BINARY_DIR} /cblas.h"
261
+ COMMAND ${SED} 's/common/openblas_config/g' ${CMAKE_CURRENT_SOURCE_DIR} /cblas.h > "${CMAKE_BINARY_DIR} /cblas.h"
252
262
DEPENDS ${CMAKE_CURRENT_SOURCE_DIR} /cblas.h
253
263
)
264
+ else ()
265
+ ADD_CUSTOM_TARGET (gencblas
266
+ COMMAND ${SED} "s/common/openblas_config/g" ${CMAKE_CURRENT_SOURCE_DIR} /cblas.h > "${CMAKE_BINARY_DIR} /cblas.h"
267
+ DEPENDS ${CMAKE_CURRENT_SOURCE_DIR} /cblas.h
268
+ )
269
+ endif ()
254
270
add_dependencies ( ${OpenBLAS_LIBNAME} gencblas)
255
271
install (FILES ${CMAKE_BINARY_DIR} /cblas.h DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} )
256
272
endif ()
@@ -277,3 +293,15 @@ if(PKG_CONFIG_FOUND)
277
293
configure_file (${PROJECT_SOURCE_DIR} /cmake/openblas.pc.in ${PROJECT_BINARY_DIR} /openblas.pc @ONLY)
278
294
install (FILES ${PROJECT_BINARY_DIR} /openblas.pc DESTINATION ${CMAKE_INSTALL_LIBDIR} /pkgconfig/)
279
295
endif ()
296
+
297
+ # build dependencies graph
298
+ # add_dependencies(genconfig gen_config_h genf77blas gencblas)
299
+ add_dependencies (genconfig genf77blas gencblas)
300
+ add_dependencies (interface genconfig)
301
+ add_dependencies (kernel genconfig)
302
+ add_dependencies (driver_level2 genconfig)
303
+ add_dependencies (driver_level3 genconfig)
304
+ add_dependencies (driver_others genconfig)
305
+ add_dependencies (${OpenBLAS_LIBNAME} kernel driver_level2 driver_level3 driver_others interface )
306
+ add_dependencies (openblas_utest ${OpenBLAS_LIBNAME} )
307
+
0 commit comments