@@ -20,11 +20,21 @@ IF(NOT TH_INSTALL_BIN_SUBDIR
2020 SET (TH_INSTALL_CMAKE_SUBDIR "share/cmake/TH" CACHE PATH "TH install cmake subdirectory" )
2121ENDIF ()
2222
23- # flags
23+ #######################################################################
24+ ##### flags section
25+ ######################################################################
2426
2527IF (MSVC )
26- # respect the standard
27- ADD_DEFINITIONS (-D_CRT_SECURE_NO_DEPRECATE=1)
28+ # MSVC now supports C99 since VS2013/VS2015
29+ SET (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /std:c99" )
30+ ELSE (MSVC )
31+ # enable gnu99 and not c99 because we use
32+ # gnu extensions like posix_memalign
33+ SET (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -std=gnu99" )
34+ ENDIF (MSVC )
35+
36+ IF (MSVC )
37+ ADD_DEFINITIONS (-D_CRT_SECURE_NO_DEPRECATE=1) # respect the standard
2838ENDIF (MSVC )
2939
3040IF (UNIX )
@@ -114,82 +124,27 @@ IF(NOT NO_GCC_EBX_FPIC_BUG)
114124ENDIF (NOT NO_GCC_EBX_FPIC_BUG)
115125
116126
117- FIND_PACKAGE (SSE)
127+ FIND_PACKAGE (SSE) # checks SSE, AVX and AVX2
118128IF (C_SSE2_FOUND)
129+ MESSAGE (STATUS "SSE2 Found" )
119130 SET (CMAKE_C_FLAGS "${C_SSE2_FLAGS} -DUSE_SSE2 ${CMAKE_C_FLAGS} " )
120131ENDIF (C_SSE2_FOUND)
121132IF (C_SSE3_FOUND)
133+ MESSAGE (STATUS "SSE3 Found" )
122134 SET (CMAKE_C_FLAGS "${C_SSE3_FLAGS} -DUSE_SSE3 ${CMAKE_C_FLAGS} " )
123135ENDIF (C_SSE3_FOUND)
136+ # we dont set -mavx and -mavx2 flags globally, but only for specific files
137+ # however, we want to enable the AVX codepaths, so we still need to
138+ # add USE_AVX and USE_AVX2 macro defines
124139IF (C_AVX_FOUND)
125- SET (CMAKE_C_FLAGS "${C_AVX_FLAGS} -DUSE_AVX ${CMAKE_C_FLAGS} " )
140+ MESSAGE (STATUS "AVX Found" )
141+ SET (CMAKE_C_FLAGS "-DUSE_AVX ${CMAKE_C_FLAGS} " )
126142ENDIF (C_AVX_FOUND)
127143IF (C_AVX2_FOUND)
128- SET (CMAKE_C_FLAGS "${C_AVX2_FLAGS} -DUSE_AVX2 ${CMAKE_C_FLAGS} " )
144+ MESSAGE (STATUS "AVX2 Found" )
145+ SET (CMAKE_C_FLAGS "-DUSE_AVX2 ${CMAKE_C_FLAGS} " )
129146ENDIF (C_AVX2_FOUND)
130147
131- IF (C_AVX2_FOUND OR C_AVX_FOUND OR C_SSE4_2_FOUND OR C_SSE4_1_FOUND)
132- SET (simd generic/simd/convolve.c)
133- IF (MSVC )
134- SET_SOURCE_FILES_PROPERTIES (generic/simd/convolve.c PROPERTIES COMPILE_FLAGS "/std:c99" )
135- ELSE (MSVC )
136- SET_SOURCE_FILES_PROPERTIES (generic/simd/convolve.c PROPERTIES COMPILE_FLAGS "-std=c99" )
137- ENDIF (MSVC )
138- ENDIF (C_AVX2_FOUND OR C_AVX_FOUND OR C_SSE4_2_FOUND OR C_SSE4_1_FOUND)
139-
140- IF (C_SSE4_1_FOUND)
141- SET (CMAKE_C_FLAGS "${C_SSE4_1_FLAGS} -DUSE_SSE4_1 ${CMAKE_C_FLAGS} " )
142- ENDIF (C_SSE4_1_FOUND)
143- IF (C_SSE4_2_FOUND)
144- SET (CMAKE_C_FLAGS "${C_SSE4_2_FLAGS} -DUSE_SSE4_2 ${CMAKE_C_FLAGS} " )
145- ENDIF (C_SSE4_2_FOUND)
146-
147- IF (C_SSE4_1_FOUND OR C_SSE4_2_FOUND)
148- IF (MSVC )
149- SET_SOURCE_FILES_PROPERTIES (generic/simd/convolve5x5_sse.c PROPERTIES COMPILE_FLAGS "/Ox /fp:fast /std:c99" )
150- ELSE (MSVC )
151- SET_SOURCE_FILES_PROPERTIES (generic/simd/convolve5x5_sse.c PROPERTIES COMPILE_FLAGS "-O3 -ffast-math -std=c99" )
152- ENDIF (MSVC )
153- SET (simd ${simd} generic/simd/convolve5x5_sse.c)
154- ENDIF (C_SSE4_1_FOUND OR C_SSE4_2_FOUND)
155-
156- IF (MSVC )
157- SET_SOURCE_FILES_PROPERTIES (generic/THTensorMath.c PROPERTIES COMPILE_FLAGS "/std:c99" )
158- ELSE (MSVC )
159- SET_SOURCE_FILES_PROPERTIES (generic/THTensorMath.c PROPERTIES COMPILE_FLAGS "-std=c99" )
160- ENDIF (MSVC )
161-
162- IF (C_AVX_FOUND OR C_AVX2_FOUND)
163- SET (CMAKE_C_FLAGS "-DUSE_AVX ${CMAKE_C_FLAGS} " )
164- IF (MSVC )
165- SET_SOURCE_FILES_PROPERTIES (generic/simd/convolve5x5_avx.c PROPERTIES COMPILE_FLAGS "/Ox /fp:fast /arch:AVX /std:c99" )
166- ELSE (MSVC )
167- SET_SOURCE_FILES_PROPERTIES (generic/simd/convolve5x5_avx.c PROPERTIES COMPILE_FLAGS "-O3 -ffast-math -mavx -std=c99" )
168- ENDIF (MSVC )
169- SET (simd ${simd} generic/simd/convolve5x5_avx.c)
170- ENDIF (C_AVX_FOUND OR C_AVX2_FOUND)
171-
172- SET (hdr
173- THGeneral.h THHalf.h THAllocator.h THStorage.h THTensor.h THTensorApply.h THBlas.h THMath.h
174- THLapack.h THLogAdd.h THRandom.h THVector.h THAtomic.h )
175-
176- SET (src
177- THGeneral.c THHalf.c THAllocator.c THStorage.c THTensor.c THBlas.c THLapack.c
178- THLogAdd.c THRandom.c THFile.c THDiskFile.c THMemoryFile.c THAtomic.c THVector.c)
179-
180- SET (src ${src} ${hdr} ${simd} )
181- ADD_LIBRARY (TH SHARED ${src} )
182- if (BUILD_STATIC)
183- ADD_LIBRARY (TH_static STATIC ${src} )
184- endif ()
185-
186- IF (NOT TH_SO_VERSION)
187- SET (TH_SO_VERSION 0)
188- ENDIF (NOT TH_SO_VERSION)
189- MESSAGE (STATUS "TH_SO_VERSION: ${TH_SO_VERSION} " )
190- SET_TARGET_PROPERTIES (TH PROPERTIES
191- VERSION ${TH_SO_VERSION}
192- SOVERSION ${TH_SO_VERSION} )
193148
194149CHECK_C_SOURCE_RUNS("
195150#include <stdatomic.h>
@@ -233,6 +188,74 @@ int main()
233188" HAS_GCC_ATOMICS)
234189ENDIF ()
235190
191+ #######################################################################
192+ ##### sources section
193+ ######################################################################
194+
195+ # IF ANY SIMD FOUND
196+ IF (C_AVX2_FOUND OR C_AVX_FOUND OR C_SSE4_2_FOUND OR C_SSE4_1_FOUND)
197+ SET (simd generic/simd/convolve.c)
198+ ENDIF (C_AVX2_FOUND OR C_AVX_FOUND OR C_SSE4_2_FOUND OR C_SSE4_1_FOUND)
199+
200+ # IF SSE4 FOUND
201+ IF (C_SSE4_1_FOUND AND C_SSE4_2_FOUND)
202+ SET (CMAKE_C_FLAGS "${C_SSE4_1_FLAGS} -DUSE_SSE4_1 ${C_SSE4_2_FLAGS} -DUSE_SSE4_2 ${CMAKE_C_FLAGS} " )
203+ IF (MSVC )
204+ SET_SOURCE_FILES_PROPERTIES (generic/simd/convolve5x5_sse.c PROPERTIES COMPILE_FLAGS "/Ox /fp:fast" )
205+ ELSE (MSVC )
206+ SET_SOURCE_FILES_PROPERTIES (generic/simd/convolve5x5_sse.c PROPERTIES COMPILE_FLAGS "-O3 -ffast-math" )
207+ ENDIF (MSVC )
208+ SET (simd ${simd} generic/simd/convolve5x5_sse.c)
209+ ENDIF (C_SSE4_1_FOUND AND C_SSE4_2_FOUND)
210+
211+ # IF AVX FOUND
212+ IF (C_AVX_FOUND)
213+ IF (MSVC )
214+ SET_SOURCE_FILES_PROPERTIES (generic/simd/convolve5x5_avx.c PROPERTIES COMPILE_FLAGS "/Ox /fp:fast ${C_AVX_FLAGS} " )
215+ SET_SOURCE_FILES_PROPERTIES (vector/AVX.c PROPERTIES COMPILE_FLAGS "/Ox ${C_AVX_FLAGS} " )
216+ ELSE (MSVC )
217+ SET_SOURCE_FILES_PROPERTIES (generic/simd/convolve5x5_avx.c PROPERTIES COMPILE_FLAGS "-O3 -ffast-math ${C_AVX_FLAGS} " )
218+ SET_SOURCE_FILES_PROPERTIES (vector/AVX.c PROPERTIES COMPILE_FLAGS "-O3 ${C_AVX_FLAGS} " )
219+ ENDIF (MSVC )
220+ SET (simd ${simd} vector/AVX.c generic/simd/convolve5x5_avx.c)
221+ ENDIF (C_AVX_FOUND)
222+
223+ IF (C_AVX2_FOUND)
224+ IF (MSVC )
225+ SET_SOURCE_FILES_PROPERTIES (vector/AVX2.c PROPERTIES COMPILE_FLAGS "/Ox ${C_AVX2_FLAGS} " )
226+ ELSE (MSVC )
227+ SET_SOURCE_FILES_PROPERTIES (vector/AVX2.c PROPERTIES COMPILE_FLAGS "-O3 ${C_AVX2_FLAGS} " )
228+ ENDIF (MSVC )
229+ SET (simd ${simd} vector/AVX2.c)
230+ ENDIF (C_AVX2_FOUND)
231+
232+ SET (hdr
233+ THGeneral.h THHalf.h THAllocator.h THStorage.h THTensor.h THTensorApply.h THBlas.h THMath.h
234+ THLapack.h THLogAdd.h THRandom.h THVector.h THAtomic.h )
235+
236+ SET (src
237+ THGeneral.c THHalf.c THAllocator.c THStorage.c THTensor.c THBlas.c THLapack.c
238+ THLogAdd.c THRandom.c THFile.c THDiskFile.c THMemoryFile.c THAtomic.c THVector.c)
239+
240+ SET (src ${src} ${hdr} ${simd} )
241+
242+ #######################################################################
243+ ##### build section
244+ ######################################################################
245+
246+ ADD_LIBRARY (TH SHARED ${src} )
247+ if (BUILD_STATIC)
248+ ADD_LIBRARY (TH_static STATIC ${src} )
249+ endif ()
250+
251+ IF (NOT TH_SO_VERSION)
252+ SET (TH_SO_VERSION 0)
253+ ENDIF (NOT TH_SO_VERSION)
254+ MESSAGE (STATUS "TH_SO_VERSION: ${TH_SO_VERSION} " )
255+ SET_TARGET_PROPERTIES (TH PROPERTIES
256+ VERSION ${TH_SO_VERSION}
257+ SOVERSION ${TH_SO_VERSION} )
258+
236259IF (HAS_C11_ATOMICS)
237260 ADD_DEFINITIONS (-DUSE_C11_ATOMICS=1)
238261 MESSAGE (STATUS "Atomics: using C11 intrinsics" )
@@ -264,10 +287,6 @@ IF(LAPACK_FOUND)
264287 TARGET_LINK_LIBRARIES (TH ${LAPACK_LIBRARIES} )
265288ENDIF (LAPACK_FOUND)
266289
267- IF (BLAS_IS_ACCELERATE)
268- MESSAGE (STATUS "BLAS FOUND IS ACCELERATE: Fix for sdot" )
269- ENDIF ()
270-
271290IF (UNIX AND NOT APPLE )
272291 INCLUDE (CheckLibraryExists)
273292 # https://github.com/libgit2/libgit2/issues/2128#issuecomment-35649830
@@ -284,6 +303,7 @@ IF(UNIX)
284303 IF (HAVE_MMAP)
285304 ADD_DEFINITIONS (-DHAVE_MMAP=1)
286305 ENDIF (HAVE_MMAP)
306+ # done for lseek: https://www.gnu.org/software/libc/manual/html_node/File-Position-Primitive.html
287307 ADD_DEFINITIONS (-D_FILE_OFFSET_BITS=64)
288308 CHECK_FUNCTION_EXISTS(shm_open HAVE_SHM_OPEN)
289309 IF (HAVE_SHM_OPEN)
@@ -299,47 +319,10 @@ IF(UNIX)
299319 ENDIF (HAVE_MALLOC_USABLE_SIZE)
300320ENDIF (UNIX )
301321
302-
303-
304322IF (NOT MSVC )
305323 TARGET_LINK_LIBRARIES (TH m)
306324ENDIF (NOT MSVC )
307325
308- SET (CMAKE_REQUIRED_FLAGS_SAVE ${CMAKE_REQUIRED_FLAGS} )
309- FOREACH (KEYWORD "inline" "__inline__" "__inline" )
310- IF (NOT DEFINED C_INLINE)
311-
312- SET (CMAKE_REQUIRED_FLAGS "-Dinline=${KEYWORD} ${CMAKE_C_FLAGS} " )
313- CHECK_C_SOURCE_RUNS("
314- static inline int static_foo()
315- {
316- return 0;
317- }
318-
319- int main(int argc, char *argv[])
320- {
321- static_foo();
322- return 0;
323- }" C_HAS_${KEYWORD} )
324-
325- IF (C_HAS_${KEYWORD} )
326- SET (C_INLINE TRUE )
327- # Right now i put it in THGeneral.h -- debatable
328- # ADD_DEFINITIONS("-Dinline=${KEYWORD}")
329- SET (TH_INLINE ${KEYWORD} )
330- MESSAGE (STATUS "C inline is supported (${KEYWORD} )" )
331- ENDIF (C_HAS_${KEYWORD} )
332- ENDIF (NOT DEFINED C_INLINE)
333- ENDFOREACH (KEYWORD)
334- SET (CMAKE_REQUIRED_FLAGS ${CMAKE_REQUIRED_FLAGS_SAVE} )
335-
336- IF (NOT DEFINED C_INLINE)
337- MESSAGE (STATUS "C inline seems not supported" )
338- # Right now i put it in THGeneral.h -- debatable
339- # ADD_DEFINITIONS("-Dinline=")
340- SET (TH_INLINE "" )
341- ENDIF (NOT DEFINED C_INLINE)
342-
343326# Is __thread supported?
344327IF (NOT MSVC )
345328 CHECK_C_SOURCE_COMPILES("static __thread int x = 1; int main() { return x; }" C_HAS_THREAD)
@@ -355,6 +338,11 @@ ENDIF(NOT C_HAS_THREAD)
355338INCLUDE_DIRECTORIES ("${CMAKE_CURRENT_BINARY_DIR} " )
356339CONFIGURE_FILE (THGeneral.h.in "${CMAKE_CURRENT_BINARY_DIR} /THGeneral.h" )
357340
341+
342+ #######################################################################
343+ ##### install section
344+ ######################################################################
345+
358346INSTALL (TARGETS TH
359347 EXPORT TH-exports
360348 RUNTIME DESTINATION "${TH_INSTALL_BIN_SUBDIR} "
@@ -388,6 +376,11 @@ INSTALL(FILES
388376 THHalf.h
389377 DESTINATION "${TH_INSTALL_INCLUDE_SUBDIR} /TH" )
390378
379+ INSTALL (FILES
380+ vector/AVX.h
381+ vector/AVX2.h
382+ DESTINATION "${TH_INSTALL_INCLUDE_SUBDIR} /TH/vector" )
383+
391384INSTALL (FILES
392385 generic/THBlas.c
393386 generic/THBlas.h
0 commit comments