@@ -25,8 +25,16 @@ ENDIF()
2525######################################################################
2626
2727IF (MSVC )
28- # respect the standard
29- 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
3038ENDIF (MSVC )
3139
3240IF (UNIX )
@@ -118,18 +126,24 @@ ENDIF(NOT NO_GCC_EBX_FPIC_BUG)
118126
119127FIND_PACKAGE (SSE) # checks SSE, AVX and AVX2
120128IF (C_SSE2_FOUND)
129+ MESSAGE (STATUS "SSE2 Found" )
121130 SET (CMAKE_C_FLAGS "${C_SSE2_FLAGS} -DUSE_SSE2 ${CMAKE_C_FLAGS} " )
122131ENDIF (C_SSE2_FOUND)
123132IF (C_SSE3_FOUND)
133+ MESSAGE (STATUS "SSE3 Found" )
124134 SET (CMAKE_C_FLAGS "${C_SSE3_FLAGS} -DUSE_SSE3 ${CMAKE_C_FLAGS} " )
125135ENDIF (C_SSE3_FOUND)
136+ # we dont set AVX and AVX2 flags globally, but only for specific files
126137IF (C_AVX_FOUND)
127- SET (CMAKE_C_FLAGS "${C_AVX_FLAGS} ${CMAKE_C_FLAGS} " )
138+ MESSAGE (STATUS "AVX Found" )
139+ # SET(CMAKE_C_FLAGS "${C_AVX_FLAGS} ${CMAKE_C_FLAGS}")
128140ENDIF (C_AVX_FOUND)
129141IF (C_AVX2_FOUND)
130- SET (CMAKE_C_FLAGS "${C_AVX2_FLAGS} ${CMAKE_C_FLAGS} " )
142+ MESSAGE (STATUS "AVX2 Found" )
143+ # SET(CMAKE_C_FLAGS "${C_AVX2_FLAGS} ${CMAKE_C_FLAGS}")
131144ENDIF (C_AVX2_FOUND)
132145
146+
133147CHECK_C_SOURCE_RUNS("
134148#include <stdatomic.h>
135149int main()
@@ -176,45 +190,40 @@ ENDIF()
176190##### sources section
177191######################################################################
178192
193+ # IF ANY SIMD FOUND
179194IF (C_AVX2_FOUND OR C_AVX_FOUND OR C_SSE4_2_FOUND OR C_SSE4_1_FOUND)
180195 SET (simd generic/simd/convolve.c)
181- IF (MSVC )
182- SET_SOURCE_FILES_PROPERTIES (generic/simd/convolve.c PROPERTIES COMPILE_FLAGS "/std:c99" )
183- ELSE (MSVC )
184- SET_SOURCE_FILES_PROPERTIES (generic/simd/convolve.c PROPERTIES COMPILE_FLAGS "-std=c99" )
185- ENDIF (MSVC )
186196ENDIF (C_AVX2_FOUND OR C_AVX_FOUND OR C_SSE4_2_FOUND OR C_SSE4_1_FOUND)
187197
188- IF (C_SSE4_1_FOUND)
189- SET (CMAKE_C_FLAGS "${C_SSE4_1_FLAGS} -DUSE_SSE4_1 ${CMAKE_C_FLAGS} " )
190- ENDIF (C_SSE4_1_FOUND)
191- IF (C_SSE4_2_FOUND)
192- SET (CMAKE_C_FLAGS "${C_SSE4_2_FLAGS} -DUSE_SSE4_2 ${CMAKE_C_FLAGS} " )
193- ENDIF (C_SSE4_2_FOUND)
194-
195- IF (C_SSE4_1_FOUND OR C_SSE4_2_FOUND)
198+ # IF SSE4 FOUND
199+ IF (C_SSE4_1_FOUND AND C_SSE4_2_FOUND)
200+ SET (CMAKE_C_FLAGS "${C_SSE4_1_FLAGS} -DUSE_SSE4_1 ${C_SSE4_2_FLAGS} -DUSE_SSE4_2 ${CMAKE_C_FLAGS} " )
196201 IF (MSVC )
197- SET_SOURCE_FILES_PROPERTIES (generic/simd/convolve5x5_sse.c PROPERTIES COMPILE_FLAGS "/Ox /fp:fast /std:c99 " )
202+ SET_SOURCE_FILES_PROPERTIES (generic/simd/convolve5x5_sse.c PROPERTIES COMPILE_FLAGS "/Ox /fp:fast" )
198203 ELSE (MSVC )
199- SET_SOURCE_FILES_PROPERTIES (generic/simd/convolve5x5_sse.c PROPERTIES COMPILE_FLAGS "-O3 -ffast-math -std=c99 " )
204+ SET_SOURCE_FILES_PROPERTIES (generic/simd/convolve5x5_sse.c PROPERTIES COMPILE_FLAGS "-O3 -ffast-math" )
200205 ENDIF (MSVC )
201206 SET (simd ${simd} generic/simd/convolve5x5_sse.c)
202- ENDIF (C_SSE4_1_FOUND OR C_SSE4_2_FOUND)
207+ ENDIF (C_SSE4_1_FOUND AND C_SSE4_2_FOUND)
203208
204- IF (MSVC )
205- SET_SOURCE_FILES_PROPERTIES (generic/THTensorMath.c PROPERTIES COMPILE_FLAGS "/std:c99" )
206- ELSE (MSVC )
207- SET_SOURCE_FILES_PROPERTIES (generic/THTensorMath.c PROPERTIES COMPILE_FLAGS "-std=c99" )
208- ENDIF (MSVC )
209+ # IF AVX FOUND
210+ IF (C_AVX_FOUND)
211+ IF (MSVC )
212+ SET_SOURCE_FILES_PROPERTIES (vector/AVX.c generic/simd/convolve5x5_avx.c PROPERTIES COMPILE_FLAGS "/Ox /fp:fast ${C_AVX_FLAGS} " )
213+ ELSE (MSVC )
214+ SET_SOURCE_FILES_PROPERTIES (vector/AVX.c generic/simd/convolve5x5_avx.c PROPERTIES COMPILE_FLAGS "-O3 -ffast-math ${C_AVX_FLAGS} " )
215+ ENDIF (MSVC )
216+ SET (simd ${simd} vector/AVX.c generic/simd/convolve5x5_avx.c)
217+ ENDIF (C_AVX_FOUND)
209218
210- IF (C_AVX_FOUND OR C_AVX2_FOUND)
219+ IF (C_AVX2_FOUND)
211220 IF (MSVC )
212- SET_SOURCE_FILES_PROPERTIES (generic/simd/convolve5x5_avx .c PROPERTIES COMPILE_FLAGS "/Ox /fp:fast /arch:AVX /std:c99 " )
221+ SET_SOURCE_FILES_PROPERTIES (vector/AVX2 .c PROPERTIES COMPILE_FLAGS "/Ox /fp:fast ${C_AVX2_FLAGS} " )
213222 ELSE (MSVC )
214- SET_SOURCE_FILES_PROPERTIES (generic/simd/convolve5x5_avx .c PROPERTIES COMPILE_FLAGS "-O3 -ffast-math -mavx -std=c99 " )
223+ SET_SOURCE_FILES_PROPERTIES (vector/AVX2 .c PROPERTIES COMPILE_FLAGS "-O3 -ffast-math ${C_AVX2_FLAGS} " )
215224 ENDIF (MSVC )
216- SET (simd ${simd} generic/simd/convolve5x5_avx .c)
217- ENDIF (C_AVX_FOUND OR C_AVX2_FOUND)
225+ SET (simd ${simd} vector/AVX2 .c)
226+ ENDIF (C_AVX2_FOUND)
218227
219228SET (hdr
220229 THGeneral.h THHalf.h THAllocator.h THStorage.h THTensor.h THTensorApply.h THBlas.h THMath.h
@@ -224,8 +233,6 @@ SET(src
224233 THGeneral.c THHalf.c THAllocator.c THStorage.c THTensor.c THBlas.c THLapack.c
225234 THLogAdd.c THRandom.c THFile.c THDiskFile.c THMemoryFile.c THAtomic.c THVector.c)
226235
227- SET (src ${src} vector/AVX.c vector/AVX2.c)
228-
229236SET (src ${src} ${hdr} ${simd} )
230237
231238#######################################################################
0 commit comments