1 diff --git a/CMakeLists.txt b/CMakeLists.txt
2 index 6f19a16..3c758d2 100644
5 @@ -6,7 +6,6 @@ list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake/modules")
6 include(GNUInstallDirs)
8 # function to extract filelists from defs.bzl file
9 -find_package(PythonInterp)
10 function(get_filelist name outputvar)
12 COMMAND "${PYTHON_EXECUTABLE}" -c
13 @@ -19,9 +18,6 @@ endfunction()
15 project(fbgemm VERSION 0.1 LANGUAGES CXX C)
17 -set(FBGEMM_LIBRARY_TYPE "default" CACHE STRING
18 - "Type of library (shared, static, or default) to build")
19 -set_property(CACHE FBGEMM_LIBRARY_TYPE PROPERTY STRINGS default static shared)
20 option(FBGEMM_BUILD_TESTS "Build fbgemm unit tests" ON)
21 option(FBGEMM_BUILD_BENCHMARKS "Build fbgemm benchmarks" ON)
22 option(FBGEMM_BUILD_DOCS "Build fbgemm documentation" OFF)
23 @@ -101,18 +97,11 @@ set_target_properties(fbgemm_generic fbgemm_avx2 fbgemm_avx512 PROPERTIES
24 #2) MSVC uses /MD in default cxx compiling flags,
25 #need to change it to /MT in static case
27 - set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /wd4244 /wd4267 /wd4305 /wd4309")
28 - if(FBGEMM_LIBRARY_TYPE STREQUAL "static")
29 + set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /wd4244 /wd4267 /wd4305 /wd4309 /wd4703")
30 + if(NOT BUILD_SHARED_LIBS)
31 target_compile_definitions(fbgemm_generic PRIVATE ASMJIT_STATIC)
32 target_compile_definitions(fbgemm_avx2 PRIVATE ASMJIT_STATIC)
33 target_compile_definitions(fbgemm_avx512 PRIVATE ASMJIT_STATIC)
35 - CMAKE_CXX_FLAGS CMAKE_CXX_FLAGS_DEBUG CMAKE_CXX_FLAGS_RELEASE
36 - CMAKE_CXX_FLAGS_MINSIZEREL CMAKE_CXX_FLAGS_RELWITHDEBINFO)
37 - if(${flag_var} MATCHES "/MD")
38 - string(REGEX REPLACE "/MD" "/MT" ${flag_var} "${${flag_var}}")
39 - endif(${flag_var} MATCHES "/MD")
40 - endforeach(flag_var)
42 target_compile_options(fbgemm_avx2 PRIVATE "/arch:AVX2")
43 target_compile_options(fbgemm_avx512 PRIVATE "/arch:AVX512")
44 @@ -145,7 +134,8 @@ message(WARNING "CMAKE_CXX_FLAGS_DEBUG is ${CMAKE_CXX_FLAGS_DEBUG}")
45 message(WARNING "CMAKE_CXX_FLAGS_RELEASE is ${CMAKE_CXX_FLAGS_RELEASE}")
46 message(WARNING "==========")
48 -if(NOT TARGET asmjit)
49 +find_package(asmjit CONFIG REQUIRED) # target 'asmjit::asmjit'
51 #Download asmjit from github if ASMJIT_SRC_DIR is not specified.
52 if(NOT DEFINED ASMJIT_SRC_DIR)
53 set(ASMJIT_SRC_DIR "${FBGEMM_SOURCE_DIR}/third_party/asmjit"
54 @@ -164,7 +154,8 @@ if(NOT TARGET asmjit)
55 set_property(TARGET asmjit PROPERTY POSITION_INDEPENDENT_CODE ON)
58 -if(NOT TARGET cpuinfo)
59 +find_package(unofficial-cpuinfo CONFIG REQUIRED) # target 'unofficial::cpuinfo::cpuinfo'
61 #Download cpuinfo from github if CPUINFO_SOURCE_DIR is not specified.
62 if(NOT DEFINED CPUINFO_SOURCE_DIR)
63 set(CPUINFO_SOURCE_DIR "${FBGEMM_SOURCE_DIR}/third_party/cpuinfo"
64 @@ -185,49 +176,38 @@ endif()
65 target_include_directories(fbgemm_generic BEFORE
66 PUBLIC $<BUILD_INTERFACE:${FBGEMM_SOURCE_DIR}>
67 PUBLIC $<BUILD_INTERFACE:${FBGEMM_SOURCE_DIR}/include>
68 - PRIVATE "${ASMJIT_SRC_DIR}/src"
69 - PRIVATE "${CPUINFO_SOURCE_DIR}/include")
71 +target_link_libraries(fbgemm_generic PUBLIC asmjit::asmjit unofficial::cpuinfo::cpuinfo)
73 target_include_directories(fbgemm_avx2 BEFORE
74 PUBLIC $<BUILD_INTERFACE:${FBGEMM_SOURCE_DIR}>
75 PUBLIC $<BUILD_INTERFACE:${FBGEMM_SOURCE_DIR}/include>
76 - PRIVATE "${ASMJIT_SRC_DIR}/src"
77 - PRIVATE "${CPUINFO_SOURCE_DIR}/include")
79 +target_link_libraries(fbgemm_avx2 PUBLIC asmjit::asmjit unofficial::cpuinfo::cpuinfo)
81 target_include_directories(fbgemm_avx512 BEFORE
82 PUBLIC $<BUILD_INTERFACE:${FBGEMM_SOURCE_DIR}>
83 PUBLIC $<BUILD_INTERFACE:${FBGEMM_SOURCE_DIR}/include>
84 - PRIVATE "${ASMJIT_SRC_DIR}/src"
85 - PRIVATE "${CPUINFO_SOURCE_DIR}/include")
87 -if(FBGEMM_LIBRARY_TYPE STREQUAL "default")
89 - $<TARGET_OBJECTS:fbgemm_generic>
90 - $<TARGET_OBJECTS:fbgemm_avx2>
91 - $<TARGET_OBJECTS:fbgemm_avx512>)
92 -elseif(FBGEMM_LIBRARY_TYPE STREQUAL "shared")
93 - add_library(fbgemm SHARED
94 - $<TARGET_OBJECTS:fbgemm_generic>
95 - $<TARGET_OBJECTS:fbgemm_avx2>
96 - $<TARGET_OBJECTS:fbgemm_avx512>)
98 +target_link_libraries(fbgemm_avx512 PUBLIC asmjit::asmjit unofficial::cpuinfo::cpuinfo)
101 + $<TARGET_OBJECTS:fbgemm_generic>
102 + $<TARGET_OBJECTS:fbgemm_avx2>
103 + $<TARGET_OBJECTS:fbgemm_avx512>)
104 +if(BUILD_SHARED_LIBS)
105 set_property(TARGET fbgemm_generic PROPERTY POSITION_INDEPENDENT_CODE ON)
106 set_property(TARGET fbgemm_avx2 PROPERTY POSITION_INDEPENDENT_CODE ON)
107 set_property(TARGET fbgemm_avx512 PROPERTY POSITION_INDEPENDENT_CODE ON)
108 set_target_properties(fbgemm PROPERTIES
109 CXX_VISIBILITY_PRESET hidden)
110 -elseif(FBGEMM_LIBRARY_TYPE STREQUAL "static")
111 - add_library(fbgemm STATIC
112 - $<TARGET_OBJECTS:fbgemm_generic>
113 - $<TARGET_OBJECTS:fbgemm_avx2>
114 - $<TARGET_OBJECTS:fbgemm_avx512>)
116 #MSVC need to define FBGEMM_STATIC for fbgemm_generic also to
117 #avoid generating _dllimport functions.
118 target_compile_definitions(fbgemm_generic PRIVATE FBGEMM_STATIC)
119 target_compile_definitions(fbgemm_avx2 PRIVATE FBGEMM_STATIC)
120 target_compile_definitions(fbgemm_avx512 PRIVATE FBGEMM_STATIC)
121 target_compile_definitions(fbgemm PRIVATE FBGEMM_STATIC)
123 - message(FATAL_ERROR "Unsupported library type ${FBGEMM_LIBRARY_TYPE}")
127 @@ -239,9 +219,7 @@ target_include_directories(fbgemm BEFORE
128 PUBLIC $<BUILD_INTERFACE:${FBGEMM_SOURCE_DIR}>
129 PUBLIC $<BUILD_INTERFACE:${FBGEMM_SOURCE_DIR}/include>)
131 -target_link_libraries(fbgemm $<BUILD_INTERFACE:asmjit>
132 - $<BUILD_INTERFACE:cpuinfo>)
133 -add_dependencies(fbgemm asmjit cpuinfo)
134 +target_link_libraries(fbgemm PUBLIC asmjit::asmjit unofficial::cpuinfo::cpuinfo)
136 install(TARGETS fbgemm EXPORT fbgemmLibraryConfig
137 ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
138 @@ -254,7 +232,7 @@ install(FILES ${FBGEMM_PUBLIC_HEADERS}
139 install(EXPORT fbgemmLibraryConfig DESTINATION share/cmake/fbgemm
140 FILE fbgemmLibraryConfig.cmake)
144 if(FBGEMM_LIBRARY_TYPE STREQUAL "shared")
146 FILES $<TARGET_PDB_FILE:fbgemm> $<TARGET_PDB_FILE:asmjit>