Mercurial > vec
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 | 
