comparison CMakeLists.txt @ 28:c6c99ab1088a

*: add min/max functions and a big big refactor (again) agh, this time I added a few more implementations (and generally made the code just a little faster...)
author Paper <paper@tflc.us>
date Thu, 24 Apr 2025 00:54:02 -0400
parents d00b95f95dd1
children e59c91d050c0
comparison
equal deleted inserted replaced
27:d00b95f95dd1 28:c6c99ab1088a
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 SHARED "src/vec.c;src/cpu.c;src/impl/generic.c;src/impl/fallback.c") 5 add_library(vec "src/vec.c")
6
7 target_sources(vec PRIVATE
8 "src/cpu.c"
9 "src/impl/generic.c"
10 # "src/impl/fallback.c" -- deadcode
11 )
6 12
7 include(CheckCCompilerFlag) 13 include(CheckCCompilerFlag)
8 14
9 if(MSVC) 15 if(MSVC)
10 # Untested! 16 # Untested!
47 endif() 53 endif()
48 check_c_compiler_flag("-msse2" COMPILER_HAS_SSE2) 54 check_c_compiler_flag("-msse2" COMPILER_HAS_SSE2)
49 if(COMPILER_HAS_SSE2) 55 if(COMPILER_HAS_SSE2)
50 set(COMPILER_SSE2_FLAGS "-msse2") 56 set(COMPILER_SSE2_FLAGS "-msse2")
51 endif() 57 endif()
58 check_c_compiler_flag("-msse3" COMPILER_HAS_SSE3)
59 if(COMPILER_HAS_SSE3)
60 set(COMPILER_SSE3_FLAGS "-msse3")
61 endif()
52 check_c_compiler_flag("-msse4.1" COMPILER_HAS_SSE41) 62 check_c_compiler_flag("-msse4.1" COMPILER_HAS_SSE41)
53 if(COMPILER_HAS_SSE41) 63 if(COMPILER_HAS_SSE41)
54 set(COMPILER_SSE41_FLAGS "-msse4.1") 64 set(COMPILER_SSE41_FLAGS "-msse4.1")
55 endif() 65 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()
56 check_c_compiler_flag("-mavx2" COMPILER_HAS_AVX2) 70 check_c_compiler_flag("-mavx2" COMPILER_HAS_AVX2)
57 if(COMPILER_HAS_AVX2) 71 if(COMPILER_HAS_AVX2)
58 set(COMPILER_AVX2_FLAGS "-mavx2") 72 set(COMPILER_AVX2_FLAGS "-mavx2")
59 endif() 73 endif()
60 check_c_compiler_flag("-mavx512f" COMPILER_HAS_AVX512F) 74 check_c_compiler_flag("-mavx512f" COMPILER_HAS_AVX512F)
61 if(COMPILER_HAS_AVX512F) 75 if(COMPILER_HAS_AVX512F)
62 set(COMPILER_AVX512F_FLAGS "-mavx512f") 76 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")
63 endif() 85 endif()
64 endif() 86 endif()
65 87
66 if(COMPILER_HAS_ALTIVEC) 88 if(COMPILER_HAS_ALTIVEC)
67 target_sources(vec PRIVATE "src/impl/ppc/altivec.c") 89 target_sources(vec PRIVATE "src/impl/ppc/altivec.c")
85 target_sources(vec PRIVATE "src/impl/x86/sse2.c") 107 target_sources(vec PRIVATE "src/impl/x86/sse2.c")
86 set_source_files_properties("src/impl/x86/sse2.c" PROPERTIES COMPILE_FLAGS "${COMPILER_SSE2_FLAGS}") 108 set_source_files_properties("src/impl/x86/sse2.c" PROPERTIES COMPILE_FLAGS "${COMPILER_SSE2_FLAGS}")
87 target_compile_definitions(vec PRIVATE "-DVEC_COMPILER_HAS_SSE2") 109 target_compile_definitions(vec PRIVATE "-DVEC_COMPILER_HAS_SSE2")
88 endif() 110 endif()
89 111
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
90 if(COMPILER_HAS_SSE41) 118 if(COMPILER_HAS_SSE41)
91 target_sources(vec PRIVATE "src/impl/x86/sse41.c") 119 target_sources(vec PRIVATE "src/impl/x86/sse41.c")
92 set_source_files_properties("src/impl/x86/sse41.c" PROPERTIES COMPILE_FLAGS "${COMPILER_SSE41_FLAGS}") 120 set_source_files_properties("src/impl/x86/sse41.c" PROPERTIES COMPILE_FLAGS "${COMPILER_SSE41_FLAGS}")
93 target_compile_definitions(vec PRIVATE "-DVEC_COMPILER_HAS_SSE41") 121 target_compile_definitions(vec PRIVATE "-DVEC_COMPILER_HAS_SSE41")
94 endif() 122 endif()
95 123
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
96 if(COMPILER_HAS_AVX2) 130 if(COMPILER_HAS_AVX2)
97 target_sources(vec PRIVATE "src/impl/x86/avx2.c") 131 target_sources(vec PRIVATE "src/impl/x86/avx2.c")
98 set_source_files_properties("src/impl/x86/avx2.c" PROPERTIES COMPILE_FLAGS "${COMPILER_AVX2_FLAGS}") 132 set_source_files_properties("src/impl/x86/avx2.c" PROPERTIES COMPILE_FLAGS "${COMPILER_AVX2_FLAGS}")
99 target_compile_definitions(vec PRIVATE "-DVEC_COMPILER_HAS_AVX2") 133 target_compile_definitions(vec PRIVATE "-DVEC_COMPILER_HAS_AVX2")
100 endif() 134 endif()
103 target_sources(vec PRIVATE "src/impl/x86/avx512f.c") 137 target_sources(vec PRIVATE "src/impl/x86/avx512f.c")
104 set_source_files_properties("src/impl/x86/avx512f.c" PROPERTIES COMPILE_FLAGS "${COMPILER_AVX512F_FLAGS}") 138 set_source_files_properties("src/impl/x86/avx512f.c" PROPERTIES COMPILE_FLAGS "${COMPILER_AVX512F_FLAGS}")
105 target_compile_definitions(vec PRIVATE "-DVEC_COMPILER_HAS_AVX512F") 139 target_compile_definitions(vec PRIVATE "-DVEC_COMPILER_HAS_AVX512F")
106 endif() 140 endif()
107 141
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()
108 153
109 ######################################################################### 154 #########################################################################
110 # integer types; it's nice to accommodate for older broken systems that 155 # integer types; it's nice to accommodate for older broken systems that
111 # may not have stdint.h. 156 # may not have stdint.h.
112 157