@@ -34,6 +34,10 @@ set(NO_AFFINITY 1)
34
34
endif ()
35
35
option (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 )
36
36
option (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 ()
37
41
38
42
# Add a prefix or suffix to all exported symbol names in the shared library.
39
43
# Avoids conflicts with other BLAS libraries, especially when using
@@ -183,8 +187,24 @@ if (${DYNAMIC_ARCH})
183
187
endif ()
184
188
185
189
# 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
+ set (OpenBLAS_LIBS "" )
191
+ if (BUILD_STATIC_LIBS)
192
+ add_library (${OpenBLAS_LIBNAME} _static STATIC ${LA_SOURCES} ${LAPACKE_SOURCES} ${RELA_SOURCES} ${TARGET_OBJS} ${OpenBLAS_DEF_FILE} )
193
+ target_include_directories (${OpenBLAS_LIBNAME} _static INTERFACE $<INSTALL_INTERFACE:include /openblas${SUFFIX64} >)
194
+ list (APPEND OpenBLAS_LIBS ${OpenBLAS_LIBNAME} _static)
195
+ endif ()
196
+ if (BUILD_SHARED_LIBS )
197
+ add_library (${OpenBLAS_LIBNAME} _shared SHARED ${LA_SOURCES} ${LAPACKE_SOURCES} ${RELA_SOURCES} ${TARGET_OBJS} ${OpenBLAS_DEF_FILE} )
198
+ target_include_directories (${OpenBLAS_LIBNAME} _shared INTERFACE $<INSTALL_INTERFACE:include /openblas${SUFFIX64} >)
199
+ list (APPEND OpenBLAS_LIBS ${OpenBLAS_LIBNAME} _shared)
200
+ endif ()
201
+ if (BUILD_STATIC_LIBS)
202
+ add_library (${OpenBLAS_LIBNAME} ALIAS ${OpenBLAS_LIBNAME} _static)
203
+ else ()
204
+ add_library (${OpenBLAS_LIBNAME} ALIAS ${OpenBLAS_LIBNAME} _shared)
205
+ endif ()
206
+
207
+ set_target_properties (${OpenBLAS_LIBS} PROPERTIES OUTPUT_NAME ${OpenBLAS_LIBNAME} )
188
208
189
209
# Android needs to explicitly link against libm
190
210
if (ANDROID)
@@ -197,21 +217,21 @@ if(MSVC AND BUILD_SHARED_LIBS)
197
217
include ("${PROJECT_SOURCE_DIR} /cmake/export.cmake" )
198
218
else ()
199
219
# Creates verbose .def file (51KB vs 18KB)
200
- set_target_properties (${OpenBLAS_LIBNAME} PROPERTIES WINDOWS_EXPORT_ALL_SYMBOLS true )
220
+ set_target_properties (${OpenBLAS_LIBNAME} _shared PROPERTIES WINDOWS_EXPORT_ALL_SYMBOLS true )
201
221
endif ()
202
222
endif ()
203
223
204
224
# 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" )
225
+ set_target_properties ( ${OpenBLAS_LIBS } PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR} /lib)
226
+ set_target_properties ( ${OpenBLAS_LIBS } PROPERTIES LIBRARY_OUTPUT_NAME_DEBUG "${OpenBLAS_LIBNAME} _d" )
227
+ set_target_properties ( ${OpenBLAS_LIBS } PROPERTIES EXPORT_NAME "OpenBLAS" )
208
228
209
229
foreach (OUTPUTCONFIG ${CMAKE_CONFIGURATION_TYPES} )
210
230
string ( TOUPPER ${OUTPUTCONFIG} OUTPUTCONFIG )
211
231
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} )
232
+ set_target_properties ( ${OpenBLAS_LIBS } PROPERTIES RUNTIME_OUTPUT_DIRECTORY_${OUTPUTCONFIG} ${PROJECT_BINARY_DIR} /lib/${OUTPUTCONFIG} )
233
+ set_target_properties ( ${OpenBLAS_LIBS } PROPERTIES LIBRARY_OUTPUT_DIRECTORY_${OUTPUTCONFIG} ${PROJECT_BINARY_DIR} /lib/${OUTPUTCONFIG} )
234
+ set_target_properties ( ${OpenBLAS_LIBS } PROPERTIES ARCHIVE_OUTPUT_DIRECTORY_${OUTPUTCONFIG} ${PROJECT_BINARY_DIR} /lib/${OUTPUTCONFIG} )
215
235
endforeach ()
216
236
217
237
enable_testing ()
@@ -223,7 +243,12 @@ if (USE_THREAD)
223
243
set_property (TARGET ${OpenBLAS_LIBNAME} PROPERTY COMPILE_OPTIONS "-pthread" )
224
244
set_property (TARGET ${OpenBLAS_LIBNAME} PROPERTY INTERFACE_COMPILE_OPTIONS "-pthread" )
225
245
endif ()
226
- target_link_libraries (${OpenBLAS_LIBNAME} ${CMAKE_THREAD_LIBS_INIT} )
246
+ if (BUILD_STATIC_LIBS)
247
+ target_link_libraries (${OpenBLAS_LIBNAME} _static ${CMAKE_THREAD_LIBS_INIT} )
248
+ endif ()
249
+ if (BUILD_SHARED_LIBS )
250
+ target_link_libraries (${OpenBLAS_LIBNAME} _shared ${CMAKE_THREAD_LIBS_INIT} )
251
+ endif ()
227
252
endif ()
228
253
229
254
#if (MSVC OR NOT NOFORTRAN)
@@ -244,14 +269,14 @@ if (NOT NOFORTRAN)
244
269
endif ()
245
270
endif ()
246
271
247
- set_target_properties (${OpenBLAS_LIBNAME } PROPERTIES
272
+ set_target_properties (${OpenBLAS_LIBS } PROPERTIES
248
273
VERSION ${OpenBLAS_MAJOR_VERSION} .${OpenBLAS_MINOR_VERSION}
249
274
SOVERSION ${OpenBLAS_MAJOR_VERSION}
250
275
)
251
276
252
277
if (BUILD_SHARED_LIBS AND BUILD_RELAPACK)
253
278
if (NOT MSVC )
254
- target_link_libraries (${OpenBLAS_LIBNAME} "-Wl,-allow-multiple-definition" )
279
+ target_link_libraries (${OpenBLAS_LIBNAME} _shared "-Wl,-allow-multiple-definition" )
255
280
else ()
256
281
set (CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} /FORCE:MULTIPLE" )
257
282
endif ()
@@ -314,7 +339,7 @@ endif()
314
339
if (NOT ${SYMBOLSUFFIX} STREQUAL "" )
315
340
message (STATUS "adding suffix ${SYMBOLSUFFIX} to names of exported symbols in ${OpenBLAS_LIBNAME} " )
316
341
endif ()
317
- add_custom_command (TARGET ${OpenBLAS_LIBNAME} POST_BUILD
342
+ add_custom_command (TARGET ${OpenBLAS_LIBNAME} _shared POST_BUILD
318
343
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
319
344
COMMAND objcopy -v --redefine-syms ${PROJECT_BINARY_DIR} /objcopy.def ${PROJECT_BINARY_DIR} /lib/lib${OpenBLAS_LIBNAME} .so
320
345
COMMENT "renaming symbols"
@@ -325,7 +350,7 @@ endif()
325
350
# Install project
326
351
327
352
# Install libraries
328
- install (TARGETS ${OpenBLAS_LIBNAME }
353
+ install (TARGETS ${OpenBLAS_LIBS }
329
354
EXPORT "OpenBLAS${SUFFIX64} Targets"
330
355
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
331
356
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
@@ -387,7 +412,12 @@ endif()
387
412
388
413
if (NOT NO_LAPACKE)
389
414
message (STATUS "Copying LAPACKE header files to ${CMAKE_INSTALL_INCLUDEDIR} " )
390
- add_dependencies ( ${OpenBLAS_LIBNAME} genlapacke)
415
+ if (BUILD_STATIC_LIBS)
416
+ add_dependencies ( ${OpenBLAS_LIBNAME} _static genlapacke)
417
+ endif ()
418
+ if (BUILD_STATIC_LIBS)
419
+ add_dependencies ( ${OpenBLAS_LIBNAME} _shared genlapacke)
420
+ endif ()
391
421
FILE (GLOB_RECURSE INCLUDE_FILES "${CMAKE_CURRENT_SOURCE_DIR} /lapack-netlib/LAPACKE/*.h" )
392
422
install (FILES ${INCLUDE_FILES} DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} )
393
423
0 commit comments