@@ -108,6 +108,15 @@ option(FBGEMM_BUILD_FBGEMM_GPU "Build fbgemm_gpu library" OFF)
108
108
option (FBGEMM_USE_IPO "Build fbgemm with interprocedural optimization" OFF )
109
109
option (DISABLE_FBGEMM_AUTOVEC "Disable FBGEMM Autovec" OFF )
110
110
111
+
112
+ if (FBGEMM_LIBRARY_TYPE STREQUAL "default" )
113
+ if (BUILD_SHARED_LIB )
114
+ set (FBGEMM_LIBRARY_TYPE "shared" )
115
+ else ()
116
+ set (FBGEMM_LIBRARY_TYPE "static" )
117
+ endif ()
118
+ endif ()
119
+
111
120
if (FBGEMM_BUILD_TESTS )
112
121
enable_testing ()
113
122
endif ()
@@ -138,7 +147,7 @@ include(${CMAKE_CURRENT_SOURCE_DIR}/cmake/modules/FindGnuH2fIeee.cmake)
138
147
139
148
# We should default to a Release build
140
149
if (NOT CMAKE_BUILD_TYPE OR CMAKE_BUILD_TYPE STREQUAL "" )
141
- set (CMAKE_BUILD_TYPE "Release" CACHE STRING "" FORCE )
150
+ set (CMAKE_BUILD_TYPE "Release" CACHE STRING "" FORCE )
142
151
endif ()
143
152
144
153
if (DISABLE_FBGEMM_AUTOVEC )
@@ -173,28 +182,26 @@ add_library(fbgemm_autovec OBJECT ${FBGEMM_AUTOVEC_SRCS})
173
182
# Make libraries depend on defs.bzl
174
183
add_custom_target (defs.bzl DEPENDS defs.bzl )
175
184
add_dependencies (fbgemm_generic defs.bzl )
176
- add_dependencies (fbgemm_avx2 defs.bzl )
177
- add_dependencies (fbgemm_avx512 defs.bzl )
178
- add_dependencies (fbgemm_autovec defs.bzl )
185
+ target_link_libraries (fbgemm_avx2 PUBLIC fbgemm_generic )
186
+ target_link_libraries (fbgemm_avx512 PUBLIC fbgemm_generic )
187
+ target_link_libraries (fbgemm_autovec PUBLIC fbgemm_generic )
188
+
189
+ target_include_directories (fbgemm_generic PUBLIC
190
+ $< BUILD_INTERFACE:${FBGEMM_SOURCE_DIR} >
191
+ $< BUILD_INTERFACE:${FBGEMM_SOURCE_DIR} /include>
192
+ $< BUILD_INTERFACE:${FBGEMM_SOURCE_DIR} /bench> )
193
+
194
+ target_link_libraries (fbgemm_generic PUBLIC
195
+ $< BUILD_INTERFACE:asmjit>
196
+ $< BUILD_INTERFACE:cpuinfo> )
179
197
180
198
# On Windows:
181
199
# 1) Adding definition of ASMJIT_STATIC to avoid generating asmjit function
182
200
# calls with _dllimport attribute
183
- # 2) MSVC uses /MD in default cxx compiling flags,
184
- # Need to change it to /MT in static case
185
201
if (MSVC )
186
- set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /wd4244 /wd4267 /wd4305 /wd4309" )
202
+ set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /wd4244 /wd4267 /wd4305 /wd4309" )
187
203
if (FBGEMM_LIBRARY_TYPE STREQUAL "static" )
188
- target_compile_definitions (fbgemm_generic PRIVATE ASMJIT_STATIC )
189
- target_compile_definitions (fbgemm_avx2 PRIVATE ASMJIT_STATIC )
190
- target_compile_definitions (fbgemm_avx512 PRIVATE ASMJIT_STATIC )
191
- foreach (flag_var
192
- CMAKE_CXX_FLAGS CMAKE_CXX_FLAGS_DEBUG CMAKE_CXX_FLAGS_RELEASE
193
- CMAKE_CXX_FLAGS_MINSIZEREL CMAKE_CXX_FLAGS_RELWITHDEBINFO )
194
- if (${flag_var} MATCHES "/MD" )
195
- string (REGEX REPLACE "/MD" "/MT" ${flag_var} "${${flag_var} }" )
196
- endif (${flag_var} MATCHES "/MD" )
197
- endforeach (flag_var )
204
+ target_compile_definitions (fbgemm_generic PUBLIC ASMJIT_STATIC )
198
205
endif ()
199
206
target_compile_options (fbgemm_avx2 PRIVATE "/arch:AVX2" )
200
207
target_compile_options (fbgemm_avx512 PRIVATE "/arch:AVX512" )
@@ -238,11 +245,9 @@ else(MSVC)
238
245
endif (MSVC )
239
246
240
247
if (USE_SANITIZER )
241
- target_compile_options (fbgemm_generic PRIVATE
248
+ target_link_options (fbgemm_generic PUBLIC
242
249
"-fsanitize=${USE_SANITIZER} " "-fno-omit-frame-pointer" )
243
- target_compile_options (fbgemm_avx2 PRIVATE
244
- "-fsanitize=${USE_SANITIZER} " "-fno-omit-frame-pointer" )
245
- target_compile_options (fbgemm_avx512 PRIVATE
250
+ target_compile_options (fbgemm_generic PUBLIC
246
251
"-fsanitize=${USE_SANITIZER} " "-fno-omit-frame-pointer" )
247
252
endif ()
248
253
@@ -303,78 +308,35 @@ if(NOT TARGET cpuinfo)
303
308
set_property (TARGET cpuinfo PROPERTY POSITION_INDEPENDENT_CODE ON )
304
309
endif ()
305
310
306
- target_include_directories (fbgemm_generic BEFORE
307
- PUBLIC $< BUILD_INTERFACE:${FBGEMM_SOURCE_DIR} >
308
- PUBLIC $< BUILD_INTERFACE:${FBGEMM_SOURCE_DIR} /include>
309
- PRIVATE "${ASMJIT_SRC_DIR} /src"
310
- PRIVATE "${CPUINFO_SOURCE_DIR} /include" )
311
-
312
- target_include_directories (fbgemm_avx2 BEFORE
313
- PUBLIC $< BUILD_INTERFACE:${FBGEMM_SOURCE_DIR} >
314
- PUBLIC $< BUILD_INTERFACE:${FBGEMM_SOURCE_DIR} /include>
315
- PRIVATE "${ASMJIT_SRC_DIR} /src"
316
- PRIVATE "${CPUINFO_SOURCE_DIR} /include" )
317
-
318
- target_include_directories (fbgemm_avx512 BEFORE
319
- PUBLIC $< BUILD_INTERFACE:${FBGEMM_SOURCE_DIR} >
320
- PUBLIC $< BUILD_INTERFACE:${FBGEMM_SOURCE_DIR} /include>
321
- PRIVATE "${ASMJIT_SRC_DIR} /src"
322
- PRIVATE "${CPUINFO_SOURCE_DIR} /include" )
323
-
324
- target_include_directories (fbgemm_autovec BEFORE
325
- PUBLIC $< BUILD_INTERFACE:${FBGEMM_SOURCE_DIR} >
326
- PUBLIC $< BUILD_INTERFACE:${FBGEMM_SOURCE_DIR} /include>
327
- PRIVATE "${ASMJIT_SRC_DIR} /src"
328
- PRIVATE "${CPUINFO_SOURCE_DIR} /include" )
329
-
330
- if ((FBGEMM_LIBRARY_TYPE STREQUAL "default" AND BUILD_SHARED_LIB ) OR FBGEMM_LIBRARY_TYPE STREQUAL "shared" )
331
- add_library (fbgemm SHARED
332
- $< TARGET_OBJECTS:fbgemm_generic>
333
- $< TARGET_OBJECTS:fbgemm_avx2>
334
- $< TARGET_OBJECTS:fbgemm_avx512>
335
- $< TARGET_OBJECTS:fbgemm_autovec> )
336
- set_property (TARGET fbgemm PROPERTY POSITION_INDEPENDENT_CODE ON )
337
- set_property (TARGET fbgemm_generic PROPERTY POSITION_INDEPENDENT_CODE ON )
338
- set_property (TARGET fbgemm_avx2 PROPERTY POSITION_INDEPENDENT_CODE ON )
339
- set_property (TARGET fbgemm_avx512 PROPERTY POSITION_INDEPENDENT_CODE ON )
340
- set_property (TARGET fbgemm_autovec PROPERTY POSITION_INDEPENDENT_CODE ON )
341
- elseif ((FBGEMM_LIBRARY_TYPE STREQUAL "default" AND NOT BUILD_SHARED_LIB ) OR FBGEMM_LIBRARY_TYPE STREQUAL "static" )
342
- add_library (fbgemm STATIC
343
- $< TARGET_OBJECTS:fbgemm_generic>
344
- $< TARGET_OBJECTS:fbgemm_avx2>
345
- $< TARGET_OBJECTS:fbgemm_avx512>
346
- $< TARGET_OBJECTS:fbgemm_autovec> )
311
+ file (WRITE "${CMAKE_BINARY_DIR} /fbgemm_lib_dummy.cc" "" )
312
+ if (FBGEMM_LIBRARY_TYPE STREQUAL "shared" )
313
+ add_library (fbgemm SHARED "${CMAKE_BINARY_DIR} /fbgemm_lib_dummy.cc" )
314
+ elseif (FBGEMM_LIBRARY_TYPE STREQUAL "static" )
315
+ add_library (fbgemm STATIC "${CMAKE_BINARY_DIR} /fbgemm_lib_dummy.cc" )
347
316
#MSVC need to define FBGEMM_STATIC for fbgemm_generic also to
348
317
#avoid generating _dllimport functions.
349
- target_compile_definitions (fbgemm_generic PRIVATE FBGEMM_STATIC )
350
- target_compile_definitions (fbgemm_avx2 PRIVATE FBGEMM_STATIC )
351
- target_compile_definitions (fbgemm_avx512 PRIVATE FBGEMM_STATIC )
352
- target_compile_definitions (fbgemm_autovec PRIVATE FBGEMM_STATIC )
353
- target_compile_definitions (fbgemm PRIVATE FBGEMM_STATIC )
318
+ target_compile_definitions (fbgemm_generic PUBLIC FBGEMM_STATIC )
354
319
else ()
355
320
message (FATAL_ERROR "Unsupported library type ${FBGEMM_LIBRARY_TYPE} " )
356
321
endif ()
357
-
358
- if (USE_SANITIZER )
359
- target_link_options (fbgemm PRIVATE
360
- "-fsanitize=${USE_SANITIZER} " "-fno-omit-frame-pointer" )
361
- endif ()
362
-
363
- target_include_directories (fbgemm BEFORE
364
- PUBLIC $< BUILD_INTERFACE:${FBGEMM_SOURCE_DIR} >
365
- PUBLIC $< BUILD_INTERFACE:${FBGEMM_SOURCE_DIR} /include> )
322
+ set_property (TARGET fbgemm PROPERTY POSITION_INDEPENDENT_CODE ON )
323
+ set_property (TARGET fbgemm_generic PROPERTY POSITION_INDEPENDENT_CODE ON )
324
+ set_property (TARGET fbgemm_avx2 PROPERTY POSITION_INDEPENDENT_CODE ON )
325
+ set_property (TARGET fbgemm_avx512 PROPERTY POSITION_INDEPENDENT_CODE ON )
326
+ set_property (TARGET fbgemm_autovec PROPERTY POSITION_INDEPENDENT_CODE ON )
366
327
367
328
target_link_libraries (fbgemm PUBLIC
368
- $< BUILD_INTERFACE:asmjit>
369
- $< BUILD_INTERFACE:cpuinfo> )
329
+ fbgemm_generic
330
+ fbgemm_avx2
331
+ fbgemm_avx512
332
+ fbgemm_autovec )
370
333
371
334
if (OpenMP_FOUND )
372
- target_link_libraries (fbgemm PUBLIC OpenMP::OpenMP_CXX )
373
335
target_link_libraries (fbgemm_generic PUBLIC OpenMP::OpenMP_CXX )
374
336
endif ()
375
337
376
338
install (
377
- TARGETS fbgemm
339
+ TARGETS fbgemm fbgemm_generic fbgemm_avx2 fbgemm_avx512 fbgemm_autovec
378
340
EXPORT fbgemmLibraryConfig
379
341
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
380
342
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
0 commit comments