comparison CMakeLists.txt @ 31:bf6ad516f1e6

Backed out changeset c6c99ab1088a
author Paper <paper@tflc.us>
date Fri, 25 Apr 2025 17:40:33 -0400
parents 641d8c79b1da
children 0de48dc864ea
comparison
equal deleted inserted replaced
30:641d8c79b1da 31:bf6ad516f1e6
1 cmake_minimum_required(VERSION 3.23) 1 cmake_minimum_required(VERSION 3.23)
2 2
3 project(vec VERSION 3.0.0 DESCRIPTION "a tiny C99 SIMD vector library" LANGUAGES C) 3 project(vec VERSION 3.0.0 DESCRIPTION "a tiny C99 SIMD vector library" LANGUAGES C)
4 4
5 add_library(vec "src/vec.c") 5 add_library(vec SHARED "src/vec.c;src/cpu.c;src/impl/generic.c;src/impl/fallback.c")
6
7 target_sources(vec PRIVATE
8 "src/cpu.c"
9 "src/impl/generic.c"
10 # "src/impl/fallback.c" -- deadcode
11 )
12 6
13 include(CheckCCompilerFlag) 7 include(CheckCCompilerFlag)
14 8
15 if(MSVC) 9 if(MSVC)
16 # Untested! 10 # Untested!
53 endif() 47 endif()
54 check_c_compiler_flag("-msse2" COMPILER_HAS_SSE2) 48 check_c_compiler_flag("-msse2" COMPILER_HAS_SSE2)
55 if(COMPILER_HAS_SSE2) 49 if(COMPILER_HAS_SSE2)
56 set(COMPILER_SSE2_FLAGS "-msse2") 50 set(COMPILER_SSE2_FLAGS "-msse2")
57 endif() 51 endif()
58 check_c_compiler_flag("-msse3" COMPILER_HAS_SSE3)
59 if(COMPILER_HAS_SSE3)
60 set(COMPILER_SSE3_FLAGS "-msse3")
61 endif()
62 check_c_compiler_flag("-msse4.1" COMPILER_HAS_SSE41) 52 check_c_compiler_flag("-msse4.1" COMPILER_HAS_SSE41)
63 if(COMPILER_HAS_SSE41) 53 if(COMPILER_HAS_SSE41)
64 set(COMPILER_SSE41_FLAGS "-msse4.1") 54 set(COMPILER_SSE41_FLAGS "-msse4.1")
65 endif() 55 endif()
66 check_c_compiler_flag("-msse4.2" COMPILER_HAS_SSE42)
67 if(COMPILER_HAS_SSE42)
68 set(COMPILER_SSE42_FLAGS "-msse4.2")
69 endif()
70 check_c_compiler_flag("-mavx2" COMPILER_HAS_AVX2) 56 check_c_compiler_flag("-mavx2" COMPILER_HAS_AVX2)
71 if(COMPILER_HAS_AVX2) 57 if(COMPILER_HAS_AVX2)
72 set(COMPILER_AVX2_FLAGS "-mavx2") 58 set(COMPILER_AVX2_FLAGS "-mavx2")
73 endif() 59 endif()
74 check_c_compiler_flag("-mavx512f" COMPILER_HAS_AVX512F) 60 check_c_compiler_flag("-mavx512f" COMPILER_HAS_AVX512F)
75 if(COMPILER_HAS_AVX512F) 61 if(COMPILER_HAS_AVX512F)
76 set(COMPILER_AVX512F_FLAGS "-mavx512f") 62 set(COMPILER_AVX512F_FLAGS "-mavx512f")
77 endif()
78 check_c_compiler_flag("-mavx512bw" COMPILER_HAS_AVX512BW)
79 if(COMPILER_HAS_AVX512BW)
80 set(COMPILER_AVX512BW_FLAGS "-mavx512bw")
81 endif()
82 check_c_compiler_flag("-mavx512dq" COMPILER_HAS_AVX512DQ)
83 if(COMPILER_HAS_AVX512DQ)
84 set(COMPILER_AVX512DQ_FLAGS "-mavx512dq")
85 endif() 63 endif()
86 endif() 64 endif()
87 65
88 if(COMPILER_HAS_ALTIVEC) 66 if(COMPILER_HAS_ALTIVEC)
89 target_sources(vec PRIVATE "src/impl/ppc/altivec.c") 67 target_sources(vec PRIVATE "src/impl/ppc/altivec.c")
107 target_sources(vec PRIVATE "src/impl/x86/sse2.c") 85 target_sources(vec PRIVATE "src/impl/x86/sse2.c")
108 set_source_files_properties("src/impl/x86/sse2.c" PROPERTIES COMPILE_FLAGS "${COMPILER_SSE2_FLAGS}") 86 set_source_files_properties("src/impl/x86/sse2.c" PROPERTIES COMPILE_FLAGS "${COMPILER_SSE2_FLAGS}")
109 target_compile_definitions(vec PRIVATE "-DVEC_COMPILER_HAS_SSE2") 87 target_compile_definitions(vec PRIVATE "-DVEC_COMPILER_HAS_SSE2")
110 endif() 88 endif()
111 89
112 if(COMPILER_HAS_SSE3)
113 target_sources(vec PRIVATE "src/impl/x86/sse3.c")
114 set_source_files_properties("src/impl/x86/sse3.c" PROPERTIES COMPILE_FLAGS "${COMPILER_SSE3_FLAGS}")
115 target_compile_definitions(vec PRIVATE "-DVEC_COMPILER_HAS_SSE3")
116 endif()
117
118 if(COMPILER_HAS_SSE41) 90 if(COMPILER_HAS_SSE41)
119 target_sources(vec PRIVATE "src/impl/x86/sse41.c") 91 target_sources(vec PRIVATE "src/impl/x86/sse41.c")
120 set_source_files_properties("src/impl/x86/sse41.c" PROPERTIES COMPILE_FLAGS "${COMPILER_SSE41_FLAGS}") 92 set_source_files_properties("src/impl/x86/sse41.c" PROPERTIES COMPILE_FLAGS "${COMPILER_SSE41_FLAGS}")
121 target_compile_definitions(vec PRIVATE "-DVEC_COMPILER_HAS_SSE41") 93 target_compile_definitions(vec PRIVATE "-DVEC_COMPILER_HAS_SSE41")
122 endif() 94 endif()
123 95
124 if(COMPILER_HAS_SSE42)
125 target_sources(vec PRIVATE "src/impl/x86/sse42.c")
126 set_source_files_properties("src/impl/x86/sse42.c" PROPERTIES COMPILE_FLAGS "${COMPILER_SSE42_FLAGS}")
127 target_compile_definitions(vec PRIVATE "-DVEC_COMPILER_HAS_SSE42")
128 endif()
129
130 if(COMPILER_HAS_AVX2) 96 if(COMPILER_HAS_AVX2)
131 target_sources(vec PRIVATE "src/impl/x86/avx2.c") 97 target_sources(vec PRIVATE "src/impl/x86/avx2.c")
132 set_source_files_properties("src/impl/x86/avx2.c" PROPERTIES COMPILE_FLAGS "${COMPILER_AVX2_FLAGS}") 98 set_source_files_properties("src/impl/x86/avx2.c" PROPERTIES COMPILE_FLAGS "${COMPILER_AVX2_FLAGS}")
133 target_compile_definitions(vec PRIVATE "-DVEC_COMPILER_HAS_AVX2") 99 target_compile_definitions(vec PRIVATE "-DVEC_COMPILER_HAS_AVX2")
134 endif() 100 endif()
137 target_sources(vec PRIVATE "src/impl/x86/avx512f.c") 103 target_sources(vec PRIVATE "src/impl/x86/avx512f.c")
138 set_source_files_properties("src/impl/x86/avx512f.c" PROPERTIES COMPILE_FLAGS "${COMPILER_AVX512F_FLAGS}") 104 set_source_files_properties("src/impl/x86/avx512f.c" PROPERTIES COMPILE_FLAGS "${COMPILER_AVX512F_FLAGS}")
139 target_compile_definitions(vec PRIVATE "-DVEC_COMPILER_HAS_AVX512F") 105 target_compile_definitions(vec PRIVATE "-DVEC_COMPILER_HAS_AVX512F")
140 endif() 106 endif()
141 107
142 if(COMPILER_HAS_AVX512BW)
143 target_sources(vec PRIVATE "src/impl/x86/avx512bw.c")
144 set_source_files_properties("src/impl/x86/avx512bw.c" PROPERTIES COMPILE_FLAGS "${COMPILER_AVX512BW_FLAGS}")
145 target_compile_definitions(vec PRIVATE "-DVEC_COMPILER_HAS_AVX512BW")
146 endif()
147
148 if(COMPILER_HAS_AVX512DQ)
149 target_sources(vec PRIVATE "src/impl/x86/avx512dq.c")
150 set_source_files_properties("src/impl/x86/avx512dq.c" PROPERTIES COMPILE_FLAGS "${COMPILER_AVX512DQ_FLAGS}")
151 target_compile_definitions(vec PRIVATE "-DVEC_COMPILER_HAS_AVX512DQ")
152 endif()
153 108
154 ######################################################################### 109 #########################################################################
155 # integer types; it's nice to accommodate for older broken systems that 110 # integer types; it's nice to accommodate for older broken systems that
156 # may not have stdint.h. 111 # may not have stdint.h.
157 112