@@ -20,7 +20,9 @@ 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 )
2628 # respect the standard
@@ -128,6 +130,52 @@ IF(C_AVX2_FOUND)
128130 SET (CMAKE_C_FLAGS "${C_AVX2_FLAGS} -DUSE_AVX2 ${CMAKE_C_FLAGS} " )
129131ENDIF (C_AVX2_FOUND)
130132
133+ CHECK_C_SOURCE_RUNS("
134+ #include <stdatomic.h>
135+ int main()
136+ {
137+ int a;
138+ int oa;
139+ atomic_store(&a, 1);
140+ atomic_fetch_add(&a, 1);
141+ oa = atomic_load(&a);
142+ if(!atomic_compare_exchange_strong(&a, &oa, 3))
143+ return -1;
144+ return 0;
145+ }
146+ " HAS_C11_ATOMICS)
147+
148+ IF (NOT HAS_C11_ATOMICS)
149+ CHECK_C_SOURCE_RUNS("
150+ #include <intrin.h>
151+ int main()
152+ {
153+ long a;
154+ _InterlockedExchange(&a, 1);
155+ _InterlockedExchangeAdd(&a, 1);
156+ if(_InterlockedCompareExchange(&a, 3, 2) != 2)
157+ return -1;
158+ return 0;
159+ }
160+ " HAS_MSC_ATOMICS)
161+
162+ CHECK_C_SOURCE_RUNS("
163+ int main()
164+ {
165+ int a;
166+ __sync_lock_test_and_set(&a, 1);
167+ __sync_fetch_and_add(&a, 1);
168+ if(!__sync_bool_compare_and_swap(&a, 2, 3))
169+ return -1;
170+ return 0;
171+ }
172+ " HAS_GCC_ATOMICS)
173+ ENDIF ()
174+
175+ #######################################################################
176+ ##### sources section
177+ ######################################################################
178+
131179IF (C_AVX2_FOUND OR C_AVX_FOUND OR C_SSE4_2_FOUND OR C_SSE4_1_FOUND)
132180 SET (simd generic/simd/convolve.c)
133181 IF (MSVC )
@@ -178,6 +226,11 @@ SET(src
178226 THLogAdd.c THRandom.c THFile.c THDiskFile.c THMemoryFile.c THAtomic.c THVector.c)
179227
180228SET (src ${src} ${hdr} ${simd} )
229+
230+ #######################################################################
231+ ##### build section
232+ ######################################################################
233+
181234ADD_LIBRARY (TH SHARED ${src} )
182235if (BUILD_STATIC)
183236 ADD_LIBRARY (TH_static STATIC ${src} )
@@ -191,48 +244,6 @@ SET_TARGET_PROPERTIES(TH PROPERTIES
191244 VERSION ${TH_SO_VERSION}
192245 SOVERSION ${TH_SO_VERSION} )
193246
194- CHECK_C_SOURCE_RUNS("
195- #include <stdatomic.h>
196- int main()
197- {
198- int a;
199- int oa;
200- atomic_store(&a, 1);
201- atomic_fetch_add(&a, 1);
202- oa = atomic_load(&a);
203- if(!atomic_compare_exchange_strong(&a, &oa, 3))
204- return -1;
205- return 0;
206- }
207- " HAS_C11_ATOMICS)
208-
209- IF (NOT HAS_C11_ATOMICS)
210- CHECK_C_SOURCE_RUNS("
211- #include <intrin.h>
212- int main()
213- {
214- long a;
215- _InterlockedExchange(&a, 1);
216- _InterlockedExchangeAdd(&a, 1);
217- if(_InterlockedCompareExchange(&a, 3, 2) != 2)
218- return -1;
219- return 0;
220- }
221- " HAS_MSC_ATOMICS)
222-
223- CHECK_C_SOURCE_RUNS("
224- int main()
225- {
226- int a;
227- __sync_lock_test_and_set(&a, 1);
228- __sync_fetch_and_add(&a, 1);
229- if(!__sync_bool_compare_and_swap(&a, 2, 3))
230- return -1;
231- return 0;
232- }
233- " HAS_GCC_ATOMICS)
234- ENDIF ()
235-
236247IF (HAS_C11_ATOMICS)
237248 ADD_DEFINITIONS (-DUSE_C11_ATOMICS=1)
238249 MESSAGE (STATUS "Atomics: using C11 intrinsics" )
@@ -264,10 +275,6 @@ IF(LAPACK_FOUND)
264275 TARGET_LINK_LIBRARIES (TH ${LAPACK_LIBRARIES} )
265276ENDIF (LAPACK_FOUND)
266277
267- IF (BLAS_IS_ACCELERATE)
268- MESSAGE (STATUS "BLAS FOUND IS ACCELERATE: Fix for sdot" )
269- ENDIF ()
270-
271278IF (UNIX AND NOT APPLE )
272279 INCLUDE (CheckLibraryExists)
273280 # https://github.com/libgit2/libgit2/issues/2128#issuecomment-35649830
@@ -284,6 +291,7 @@ IF(UNIX)
284291 IF (HAVE_MMAP)
285292 ADD_DEFINITIONS (-DHAVE_MMAP=1)
286293 ENDIF (HAVE_MMAP)
294+ # done for lseek: https://www.gnu.org/software/libc/manual/html_node/File-Position-Primitive.html
287295 ADD_DEFINITIONS (-D_FILE_OFFSET_BITS=64)
288296 CHECK_FUNCTION_EXISTS(shm_open HAVE_SHM_OPEN)
289297 IF (HAVE_SHM_OPEN)
@@ -299,47 +307,10 @@ IF(UNIX)
299307 ENDIF (HAVE_MALLOC_USABLE_SIZE)
300308ENDIF (UNIX )
301309
302-
303-
304310IF (NOT MSVC )
305311 TARGET_LINK_LIBRARIES (TH m)
306312ENDIF (NOT MSVC )
307313
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-
343314# Is __thread supported?
344315IF (NOT MSVC )
345316 CHECK_C_SOURCE_COMPILES("static __thread int x = 1; int main() { return x; }" C_HAS_THREAD)
@@ -355,6 +326,11 @@ ENDIF(NOT C_HAS_THREAD)
355326INCLUDE_DIRECTORIES ("${CMAKE_CURRENT_BINARY_DIR} " )
356327CONFIGURE_FILE (THGeneral.h.in "${CMAKE_CURRENT_BINARY_DIR} /THGeneral.h" )
357328
329+
330+ #######################################################################
331+ ##### install section
332+ ######################################################################
333+
358334INSTALL (TARGETS TH
359335 EXPORT TH-exports
360336 RUNTIME DESTINATION "${TH_INSTALL_BIN_SUBDIR} "
0 commit comments