@@ -120,9 +120,12 @@ if (${NO_STATIC} AND ${NO_SHARED})
120120endif ()
121121
122122#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 ()
126129# 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)
127130set (TARGET_OBJS "" )
128131foreach (SUBDIR ${SUBDIRS} )
@@ -142,9 +145,12 @@ if (NOT NO_LAPACKE)
142145endif ()
143146endif ()
144147
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
146149if (MSVC )
147150set (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" )
148154endif ()
149155
150156# add objects to the openblas lib
@@ -159,15 +165,15 @@ set_target_properties( ${OpenBLAS_LIBNAME} PROPERTIES LIBRARY_OUTPUT_NAME_DEBUG
159165foreach (OUTPUTCONFIG ${CMAKE_CONFIGURATION_TYPES} )
160166 string ( TOUPPER ${OUTPUTCONFIG} OUTPUTCONFIG )
161167
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} )
165171endforeach ()
166172
167173enable_testing ()
168174add_subdirectory (utest )
169175
170- if (NOT MSVC )
176+ if (NOT MSVC )
171177 #only build shared library for MSVC
172178
173179 add_library (${OpenBLAS_LIBNAME} _static STATIC ${LA_SOURCES} ${LAPACKE_SOURCES} ${TARGET_OBJS} )
@@ -224,34 +230,38 @@ install(TARGETS ${OpenBLAS_LIBNAME}
224230 LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} )
225231
226232# 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} )
231234 ADD_CUSTOM_COMMAND (
232235 OUTPUT ${CMAKE_BINARY_DIR} /openblas_config.h
233236 DEPENDS ${CMAKE_CURRENT_SOURCE_DIR} /config.h
234237 COMMAND ${GENCONFIG_BIN} ${CMAKE_CURRENT_SOURCE_DIR} /config.h ${CMAKE_CURRENT_SOURCE_DIR} /openblas_config_template.h > ${CMAKE_BINARY_DIR} /openblas_config.h
235238 )
236239 ADD_CUSTOM_TARGET (genconfig DEPENDS openblas_config.h )
237- add_dependencies( ${OpenBLAS_LIBNAME} genconfig genf77blas)
240+ add_dependencies (genconfig ${OpenBLAS_LIBNAME} )
241+
238242 install (FILES ${CMAKE_BINARY_DIR} /openblas_config.h DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} )
239243
240244 message (STATUS "Generating f77blas.h in ${CMAKE_INSTALL_INCLUDEDIR} " )
245+
241246 ADD_CUSTOM_TARGET (genf77blas
242247 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-
244248 DEPENDS ${CMAKE_CURRENT_SOURCE_DIR} /config.h
245249 )
250+ add_dependencies(genf77blas ${OpenBLAS_LIBNAME} )
251+
246252 install (FILES ${CMAKE_BINARY_DIR} /f77blas.h DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} )
247253
248254if(NOT NO_CBLAS)
249255 message (STATUS " Generating cblas.h in ${CMAKE_INSTALL_INCLUDEDIR} ")
256+
250257 ADD_CUSTOM_TARGET(gencblas
251- COMMAND sed 's/common/openblas_config/g' ${CMAKE_CURRENT_SOURCE_DIR} /cblas.h > " ${CMAKE_BINARY_DIR} /cblas.h "
258+ COMMAND ${SED} 's/common/openblas_config/g' ${CMAKE_CURRENT_SOURCE_DIR} /cblas.h > " ${CMAKE_BINARY_DIR} /cblas.tmp "
259+ COMMAND cp " ${CMAKE_BINARY_DIR} /cblas.tmp " " ${CMAKE_BINARY_DIR} /cblas.h "
252260 DEPENDS ${CMAKE_CURRENT_SOURCE_DIR} /cblas.h
253261 )
254- add_dependencies( ${OpenBLAS_LIBNAME} gencblas)
262+
263+ add_dependencies(gencblas ${OpenBLAS_LIBNAME} )
264+
255265 install (FILES ${CMAKE_BINARY_DIR} /cblas.h DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} )
256266endif()
257267
@@ -261,7 +271,6 @@ if(NOT NO_LAPACKE)
261271 FILE(GLOB_RECURSE INCLUDE_FILES " ${CMAKE_CURRENT_SOURCE_DIR} /lapack-netlib/LAPACKE/*.h ")
262272 install (FILES ${INCLUDE_FILES} DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} )
263273
264-
265274 ADD_CUSTOM_TARGET(genlapacke
266275 COMMAND cp ${CMAKE_CURRENT_SOURCE_DIR} /lapack-netlib/LAPACKE/include/lapacke_mangling_with_flags.h.in " ${CMAKE_BINARY_DIR} /lapacke_mangling.h "
267276 )
0 commit comments