@@ -34,6 +34,10 @@ set(NO_AFFINITY 1)
3434endif ()
3535option (CPP_THREAD_SAFETY_TEST "Run a massively parallel DGEMM test to confirm thread safety of the library (requires OpenMP and about 1.3GB of RAM)" OFF )
3636option (CPP_THREAD_SAFETY_GEMV "Run a massively parallel DGEMV test to confirm thread safety of the library (requires OpenMP)" OFF )
37+ option (BUILD_STATIC_LIBS "Build static library" ON )
38+ if (NOT BUILD_STATIC_LIBS AND NOT BUILD_SHARED_LIBS )
39+ set (BUILD_STATIC_LIBS ON CACHE BOOL "Build static library" FORCE )
40+ endif ()
3741
3842# Add a prefix or suffix to all exported symbol names in the shared library.
3943# Avoids conflicts with other BLAS libraries, especially when using
@@ -183,12 +187,45 @@ if (${DYNAMIC_ARCH})
183187endif ()
184188
185189# add objects to the openblas lib
186- add_library (${OpenBLAS_LIBNAME} ${LA_SOURCES} ${LAPACKE_SOURCES} ${RELA_SOURCES} ${TARGET_OBJS} ${OpenBLAS_DEF_FILE} )
187- target_include_directories (${OpenBLAS_LIBNAME} INTERFACE $<INSTALL_INTERFACE :include /openblas ${SUFFIX64} >)
190+ if (NOT NO_LAPACK)
191+ add_library (LAPACK OBJECT ${LA_SOURCES} )
192+ list (APPEND TARGET_OBJS "$<TARGET_OBJECTS :LAPACK >" )
193+ endif ()
194+ if (NOT NO_LAPACKE)
195+ add_library (LAPACKE OBJECT ${LAPACKE_SOURCES} )
196+ list (APPEND TARGET_OBJS "$<TARGET_OBJECTS :LAPACKE >" )
197+ endif ()
198+ if (BUILD_RELAPACK)
199+ add_library (RELAPACK OBJECT ${RELA_SOURCES} )
200+ list (APPEND TARGET_OBJS "$<TARGET_OBJECTS :RELAPACK >" )
201+ endif ()
202+ set (OpenBLAS_LIBS "" )
203+ if (BUILD_STATIC_LIBS)
204+ add_library (${OpenBLAS_LIBNAME} _static STATIC ${TARGET_OBJS} ${OpenBLAS_DEF_FILE} )
205+ target_include_directories (${OpenBLAS_LIBNAME} _static INTERFACE $<INSTALL_INTERFACE :include /openblas ${SUFFIX64} >)
206+ list (APPEND OpenBLAS_LIBS ${OpenBLAS_LIBNAME} _static)
207+ endif ()
208+ if (BUILD_SHARED_LIBS )
209+ add_library (${OpenBLAS_LIBNAME} _shared SHARED ${TARGET_OBJS} ${OpenBLAS_DEF_FILE} )
210+ target_include_directories (${OpenBLAS_LIBNAME} _shared INTERFACE $<INSTALL_INTERFACE :include /openblas ${SUFFIX64} >)
211+ list (APPEND OpenBLAS_LIBS ${OpenBLAS_LIBNAME} _shared)
212+ endif ()
213+ if (BUILD_STATIC_LIBS)
214+ add_library (${OpenBLAS_LIBNAME} ALIAS ${OpenBLAS_LIBNAME} _static )
215+ else ()
216+ add_library (${OpenBLAS_LIBNAME} ALIAS ${OpenBLAS_LIBNAME} _shared )
217+ endif ()
218+
219+ set_target_properties (${OpenBLAS_LIBS} PROPERTIES OUTPUT_NAME ${OpenBLAS_LIBNAME} )
188220
189221# Android needs to explicitly link against libm
190222if (ANDROID )
191- target_link_libraries (${OpenBLAS_LIBNAME} m )
223+ if (BUILD_STATIC_LIBS)
224+ target_link_libraries (${OpenBLAS_LIBNAME} _static m )
225+ endif ()
226+ if (BUILD_SHARED_LIBS )
227+ target_link_libraries (${OpenBLAS_LIBNAME} _shared m )
228+ endif ()
192229endif ()
193230
194231# Handle MSVC exports
@@ -197,21 +234,21 @@ if(MSVC AND BUILD_SHARED_LIBS)
197234 include ("${PROJECT_SOURCE_DIR} /cmake/export.cmake" )
198235 else ()
199236 # Creates verbose .def file (51KB vs 18KB)
200- set_target_properties (${OpenBLAS_LIBNAME} PROPERTIES WINDOWS_EXPORT_ALL_SYMBOLS true )
237+ set_target_properties (${OpenBLAS_LIBNAME} _shared PROPERTIES WINDOWS_EXPORT_ALL_SYMBOLS true )
201238 endif ()
202239endif ()
203240
204241# Set output for libopenblas
205- set_target_properties ( ${OpenBLAS_LIBNAME } PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR} /lib )
206- set_target_properties ( ${OpenBLAS_LIBNAME } PROPERTIES LIBRARY_OUTPUT_NAME_DEBUG "${OpenBLAS_LIBNAME} _d" )
207- set_target_properties ( ${OpenBLAS_LIBNAME } PROPERTIES EXPORT_NAME "OpenBLAS" )
242+ set_target_properties ( ${OpenBLAS_LIBS } PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR} /lib )
243+ set_target_properties ( ${OpenBLAS_LIBS } PROPERTIES LIBRARY_OUTPUT_NAME_DEBUG "${OpenBLAS_LIBNAME} _d" )
244+ set_target_properties ( ${OpenBLAS_LIBS } PROPERTIES EXPORT_NAME "OpenBLAS" )
208245
209246foreach (OUTPUTCONFIG ${CMAKE_CONFIGURATION_TYPES} )
210247 string ( TOUPPER ${OUTPUTCONFIG} OUTPUTCONFIG )
211248
212- set_target_properties ( ${OpenBLAS_LIBNAME } PROPERTIES RUNTIME_OUTPUT_DIRECTORY_${OUTPUTCONFIG} ${PROJECT_BINARY_DIR} /lib/${OUTPUTCONFIG} )
213- set_target_properties ( ${OpenBLAS_LIBNAME } PROPERTIES LIBRARY_OUTPUT_DIRECTORY_${OUTPUTCONFIG} ${PROJECT_BINARY_DIR} /lib/${OUTPUTCONFIG} )
214- set_target_properties ( ${OpenBLAS_LIBNAME } PROPERTIES ARCHIVE_OUTPUT_DIRECTORY_${OUTPUTCONFIG} ${PROJECT_BINARY_DIR} /lib/${OUTPUTCONFIG} )
249+ set_target_properties ( ${OpenBLAS_LIBS } PROPERTIES RUNTIME_OUTPUT_DIRECTORY_${OUTPUTCONFIG} ${PROJECT_BINARY_DIR} /lib/${OUTPUTCONFIG} )
250+ set_target_properties ( ${OpenBLAS_LIBS } PROPERTIES LIBRARY_OUTPUT_DIRECTORY_${OUTPUTCONFIG} ${PROJECT_BINARY_DIR} /lib/${OUTPUTCONFIG} )
251+ set_target_properties ( ${OpenBLAS_LIBS } PROPERTIES ARCHIVE_OUTPUT_DIRECTORY_${OUTPUTCONFIG} ${PROJECT_BINARY_DIR} /lib/${OUTPUTCONFIG} )
215252endforeach ()
216253
217254enable_testing ()
@@ -220,10 +257,21 @@ if (USE_THREAD)
220257 # Add threading library to linker
221258 find_package (Threads )
222259 if (THREADS_HAVE_PTHREAD_ARG)
223- set_property (TARGET ${OpenBLAS_LIBNAME} PROPERTY COMPILE_OPTIONS "-pthread" )
224- set_property (TARGET ${OpenBLAS_LIBNAME} PROPERTY INTERFACE_COMPILE_OPTIONS "-pthread" )
260+ if (BUILD_STATIC_LIBS)
261+ set_property (TARGET ${OpenBLAS_LIBNAME} _static PROPERTY COMPILE_OPTIONS "-pthread" )
262+ set_property (TARGET ${OpenBLAS_LIBNAME} _static PROPERTY INTERFACE_COMPILE_OPTIONS "-pthread" )
263+ endif ()
264+ if (BUILD_SHARED_LIBS )
265+ set_property (TARGET ${OpenBLAS_LIBNAME} _shared PROPERTY COMPILE_OPTIONS "-pthread" )
266+ set_property (TARGET ${OpenBLAS_LIBNAME} _shared PROPERTY INTERFACE_COMPILE_OPTIONS "-pthread" )
267+ endif ()
268+ endif ()
269+ if (BUILD_STATIC_LIBS)
270+ target_link_libraries (${OpenBLAS_LIBNAME} _static ${CMAKE_THREAD_LIBS_INIT} )
271+ endif ()
272+ if (BUILD_SHARED_LIBS )
273+ target_link_libraries (${OpenBLAS_LIBNAME} _shared ${CMAKE_THREAD_LIBS_INIT} )
225274 endif ()
226- target_link_libraries (${OpenBLAS_LIBNAME} ${CMAKE_THREAD_LIBS_INIT} )
227275endif ()
228276
229277#if (MSVC OR NOT NOFORTRAN)
@@ -244,14 +292,14 @@ if (NOT NOFORTRAN)
244292 endif ()
245293endif ()
246294
247- set_target_properties (${OpenBLAS_LIBNAME } PROPERTIES
295+ set_target_properties (${OpenBLAS_LIBS } PROPERTIES
248296 VERSION ${OpenBLAS_MAJOR_VERSION} .${OpenBLAS_MINOR_VERSION}
249297 SOVERSION ${OpenBLAS_MAJOR_VERSION}
250298)
251299
252300if (BUILD_SHARED_LIBS AND BUILD_RELAPACK)
253301 if (NOT MSVC )
254- target_link_libraries (${OpenBLAS_LIBNAME} "-Wl,-allow-multiple-definition" )
302+ target_link_libraries (${OpenBLAS_LIBNAME} _shared "-Wl,-allow-multiple-definition" )
255303 else ()
256304 set (CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} /FORCE:MULTIPLE" )
257305 endif ()
@@ -314,7 +362,7 @@ endif()
314362if (NOT ${SYMBOLSUFFIX} STREQUAL "" )
315363message (STATUS "adding suffix ${SYMBOLSUFFIX} to names of exported symbols in ${OpenBLAS_LIBNAME} " )
316364endif ()
317- add_custom_command (TARGET ${OpenBLAS_LIBNAME} POST_BUILD
365+ add_custom_command (TARGET ${OpenBLAS_LIBNAME} _shared POST_BUILD
318366 COMMAND perl ${PROJECT_SOURCE_DIR} /exports/gensymbol "objcopy" "${ARCH} " "${BU} " "${EXPRECISION_IN} " "${NO_CBLAS_IN} " "${NO_LAPACK_IN} " "${NO_LAPACKE_IN} " "${NEED2UNDERSCORES_IN} " "${ONLY_CBLAS_IN} " \"${SYMBOLPREFIX} \" \" ${SYMBOLSUFFIX} \" " ${BUILD_LAPACK_DEPRECATED} " > ${PROJECT_BINARY_DIR} /objcopy.def
319367 COMMAND objcopy -v --redefine-syms ${PROJECT_BINARY_DIR} /objcopy.def ${PROJECT_BINARY_DIR} /lib/lib${OpenBLAS_LIBNAME} .so
320368 COMMENT " renaming symbols "
@@ -325,7 +373,7 @@ endif()
325373# Install project
326374
327375# Install libraries
328- install(TARGETS ${OpenBLAS_LIBNAME }
376+ install(TARGETS ${OpenBLAS_LIBS }
329377 EXPORT " OpenBLAS${SUFFIX64}Targets "
330378 RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
331379 ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
@@ -387,7 +435,12 @@ endif()
387435
388436if (NOT NO_LAPACKE)
389437 message (STATUS "Copying LAPACKE header files to ${CMAKE_INSTALL_INCLUDEDIR} " )
390- add_dependencies ( ${OpenBLAS_LIBNAME} genlapacke )
438+ if (BUILD_STATIC_LIBS)
439+ add_dependencies ( ${OpenBLAS_LIBNAME} _static genlapacke )
440+ endif ()
441+ if (BUILD_SHARED_LIBS )
442+ add_dependencies ( ${OpenBLAS_LIBNAME} _shared genlapacke )
443+ endif ()
391444 FILE (GLOB_RECURSE INCLUDE_FILES "${CMAKE_CURRENT_SOURCE_DIR} /lapack-netlib/LAPACKE/*.h" )
392445 install (FILES ${INCLUDE_FILES} DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} )
393446
0 commit comments