Mercurial > vec
diff CMakeLists.txt @ 36:677c03c382b8
Backed out changeset e26874655738
author | Paper <paper@tflc.us> |
---|---|
date | Fri, 25 Apr 2025 17:40:55 -0400 |
parents | 8b5e0974fd41 |
children |
line wrap: on
line diff
--- a/CMakeLists.txt Fri Apr 25 17:40:51 2025 -0400 +++ b/CMakeLists.txt Fri Apr 25 17:40:55 2025 -0400 @@ -1,114 +1,49 @@ cmake_minimum_required(VERSION 3.23) -project(vec VERSION 3.0.0 DESCRIPTION "a tiny C99 SIMD vector library") +project(vec VERSION 2.0.0 DESCRIPTION "a tiny C99 SIMD vector library") + +add_library(vec SHARED src/vec.c) -add_library(vec SHARED "src/vec.c;src/cpu.c;src/impl/generic.c;src/impl/fallback.c") +target_sources(vec PUBLIC + $<INSTALL_INTERFACE:vec/vec.h> + $<BUILD_INTERFACE:${CMAKE_CURRENT_LIST_DIR}/include/vec/vec.h> + $<INSTALL_INTERFACE:vec/impl/integer.h> + $<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}/include/vec/impl/integer.h> +) include(CheckCCompilerFlag) if(MSVC) - # Untested! - - if(CMAKE_SIZEOF_VOID_P EQUAL 8) - set(COMPILER_HAS_MMX OFF) - else() - set(COMPILER_HAS_MMX ON) - set(COMPILER_MMX_FLAGS "") # none? - endif() - check_c_compiler_flag("/arch:SSE2" COMPILER_HAS_SSE2) - if(COMPILER_HAS_SSE2) - set(COMPILER_SSE2_FLAGS "/arch:SSE2") - endif() - check_c_compiler_flag("/arch:SSE4.2" COMPILER_HAS_SSE41) - if(COMPILER_HAS_SSE41) - set(COMPILER_SSE41_FLAGS "/arch:SSE4.2") + # TODO ? +else() + check_c_compiler_flag("-maltivec" COMPILER_HAS_ALTIVEC) + if(COMPILER_HAS_ALTIVEC) + target_compile_options(vec PRIVATE "-maltivec") endif() - check_c_compiler_flag("/arch:AVX2" COMPILER_HAS_AVX2) - if(COMPILER_HAS_AVX2) - set(COMPILER_AVX2_FLAGS "/arch:AVX2") - endif() - check_c_compiler_flag("/arch:AVX512" COMPILER_HAS_AVX512F) - if(COMPILER_HAS_AVX512F) - set(COMPILER_AVX512F_FLAGS "/arch:AVX512") - endif() - # TODO we have to try_compile to detect NEON -else() - #check_c_compiler_flag("-maltivec" COMPILER_HAS_ALTIVEC) - #if(COMPILER_HAS_ALTIVEC) - # set(COMPILER_ALTIVEC_FLAGS "-maltivec") - #endif() - #check_c_compiler_flag("-mfpu=neon" COMPILER_HAS_NEON) - #if(COMPILER_HAS_NEON) - # set(COMPILER_NEON_FLAGS "-mfpu=neon") - #endif() check_c_compiler_flag("-mmmx" COMPILER_HAS_MMX) if(COMPILER_HAS_MMX) - set(COMPILER_MMX_FLAGS "-mmmx") + target_compile_options(vec PRIVATE "-mmmx") endif() check_c_compiler_flag("-msse2" COMPILER_HAS_SSE2) if(COMPILER_HAS_SSE2) - set(COMPILER_SSE2_FLAGS "-msse2") + target_compile_options(vec PRIVATE "-msse2") endif() check_c_compiler_flag("-msse4.1" COMPILER_HAS_SSE41) if(COMPILER_HAS_SSE41) - set(COMPILER_SSE41_FLAGS "-msse4.1") + target_compile_options(vec PRIVATE "-msse4.1") endif() check_c_compiler_flag("-mavx2" COMPILER_HAS_AVX2) if(COMPILER_HAS_AVX2) - set(COMPILER_AVX2_FLAGS "-mavx2") + target_compile_options(vec PRIVATE "-mavx2") endif() check_c_compiler_flag("-mavx512f" COMPILER_HAS_AVX512F) if(COMPILER_HAS_AVX512F) - set(COMPILER_AVX512F_FLAGS "-mavx512f") + target_compile_options(vec PRIVATE "-mavx512f") endif() endif() -if(COMPILER_HAS_ALTIVEC) - target_sources(vec PRIVATE "src/impl/ppc/altivec.c") - set_source_files_properties("src/impl/ppc/altivec.c" PROPERTIES COMPILE_FLAGS "${COMPILER_ALTIVEC_FLAGS}") - target_compile_definitions(vec PRIVATE "-DVEC_COMPILER_HAS_ALTIVEC") -endif() - -if(COMPILER_HAS_NEON) - target_sources(vec PRIVATE "src/impl/arm/neon.c") - set_source_files_properties("src/impl/arm/neon.c" PROPERTIES COMPILE_FLAGS "${COMPILER_NEON_FLAGS}") - target_compile_definitions(vec PRIVATE "-DVEC_COMPILER_HAS_NEON") -endif() - -if(COMPILER_HAS_MMX) - target_sources(vec PRIVATE "src/impl/x86/mmx.c") - set_source_files_properties("src/impl/x86/mmx.c" PROPERTIES COMPILE_FLAGS "${COMPILER_MMX_FLAGS}") - target_compile_definitions(vec PRIVATE "-DVEC_COMPILER_HAS_MMX") -endif() - -if(COMPILER_HAS_SSE2) - target_sources(vec PRIVATE "src/impl/x86/sse2.c") - set_source_files_properties("src/impl/x86/sse2.c" PROPERTIES COMPILE_FLAGS "${COMPILER_SSE2_FLAGS}") - target_compile_definitions(vec PRIVATE "-DVEC_COMPILER_HAS_SSE2") -endif() - -if(COMPILER_HAS_SSE41) - target_sources(vec PRIVATE "src/impl/x86/sse41.c") - set_source_files_properties("src/impl/x86/sse41.c" PROPERTIES COMPILE_FLAGS "${COMPILER_SSE41_FLAGS}") - target_compile_definitions(vec PRIVATE "-DVEC_COMPILER_HAS_SSE41") -endif() - -if(COMPILER_HAS_AVX2) - target_sources(vec PRIVATE "src/impl/x86/avx2.c") - set_source_files_properties("src/impl/x86/avx2.c" PROPERTIES COMPILE_FLAGS "${COMPILER_AVX2_FLAGS}") - target_compile_definitions(vec PRIVATE "-DVEC_COMPILER_HAS_AVX2") -endif() - -if(COMPILER_HAS_AVX512F) - target_sources(vec PRIVATE "src/impl/x86/avx512f.c") - set_source_files_properties("src/impl/x86/avx512f.c" PROPERTIES COMPILE_FLAGS "${COMPILER_AVX512F_FLAGS}") - target_compile_definitions(vec PRIVATE "-DVEC_COMPILER_HAS_AVX512F") -endif() - - ######################################################################### -# integer types; it's nice to accommodate for older broken systems that -# may not have stdint.h. +# integer types include(CheckTypeSize) @@ -126,7 +61,6 @@ check_type_size("long" LONG_SIZE LANGUAGE C) check_type_size("long long" LONG_LONG_SIZE LANGUAGE C) check_type_size("uintptr_t" UINTPTR_T_SIZE LANGUAGE C) -check_type_size("size_t" SIZE_T_SIZE LANGUAGE C) if(INT16_T_SIZE EQUAL 2) set(SIZE16 "int16_t") @@ -134,8 +68,6 @@ set(SIZE16 "short") elseif(INT_SIZE EQUAL 2) set(SIZE16 "int") -else() - message(FATAL_ERROR "Failed to find a signed 16-bit integer type.") endif() if(UINT16_T_SIZE EQUAL 2) @@ -146,8 +78,6 @@ set(USIZE16 "unsigned short") elseif(INT_SIZE EQUAL 2) set(USIZE16 "unsigned int") -else() - message(FATAL_ERROR "Failed to find an unsigned 16-bit integer type.") endif() if(INT32_T_SIZE EQUAL 4) @@ -158,8 +88,6 @@ set(SIZE32 "int") elseif(LONG_SIZE EQUAL 4) set(SIZE32 "long") -else() - message(FATAL_ERROR "Failed to find a signed 32-bit integer type.") endif() if(UINT32_T_SIZE EQUAL 4) @@ -172,8 +100,6 @@ set(USIZE32 "unsigned int") elseif(LONG_SIZE EQUAL 4) set(USIZE32 "unsigned long") -else() - message(FATAL_ERROR "Failed to find an unsigned 32-bit integer type.") endif() if(INT64_T_SIZE EQUAL 8) @@ -186,8 +112,6 @@ set(SIZE64 "long") elseif(LONG_LONG_SIZE EQUAL 8) set(SIZE64 "long long") -else() - message(FATAL_ERROR "Failed to find a signed 64-bit integer type.") endif() if(UINT64_T_SIZE EQUAL 8) @@ -202,46 +126,28 @@ set(USIZE64 "unsigned long") elseif(LONG_LONG_SIZE EQUAL 8) set(USIZE64 "unsigned long long") -else() - message(FATAL_ERROR "Failed to find an unsigned 64-bit integer type.") endif() if(CMAKE_SIZEOF_VOID_P EQUAL UINTPTR_T_SIZE) set(USIZEPTR "uintptr_t") -elseif(CMAKE_SIZEOF_VOID_P LESS_EQUAL 1) +elseif(CMAKE_SIZEOF_VOID_P EQUAL 1) set(USIZEPTR "unsigned char") -elseif(CMAKE_SIZEOF_VOID_P LESS_EQUAL 2) +elseif(CMAKE_SIZEOF_VOID_P EQUAL 2) set(USIZEPTR "${USIZE16}") -elseif(CMAKE_SIZEOF_VOID_P LESS_EQUAL 4) +elseif(CMAKE_SIZEOF_VOID_P EQUAL 4) set(USIZEPTR "${USIZE32}") -elseif(CMAKE_SIZEOF_VOID_P LESS_EQUAL 8) +elseif(CMAKE_SIZEOF_VOID_P EQUAL 8) set(USIZEPTR "${USIZE64}") -else() - message(FATAL_ERROR "Failed to find an integer type that can fit a pointer.") endif() -if(NOT SIZE_T_SIZE EQUAL 0 AND NOT SIZE_T_SIZE EQUAL "") - set(USIZESIZE "size_t") -else() - # should be close enough I guess - set(USIZESIZE "${USIZEPTR}") -endif() +configure_file(include/vec/impl/integer.h.in include/vec/impl/integer.h @ONLY) -configure_file(include/vec/types.h.in include/vec/types.h @ONLY) +target_compile_definitions(vec PRIVATE "VEC_HAVE_IMPL_INTEGER_H") ######################################################################### -target_sources(vec PUBLIC - $<INSTALL_INTERFACE:vec/vec.h> - $<BUILD_INTERFACE:${CMAKE_CURRENT_LIST_DIR}/include/vec/vec.h> - $<INSTALL_INTERFACE:vec/types.h> - $<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}/include/vec/types.h> - $<INSTALL_INTERFACE:vec/cpu.h> - $<BUILD_INTERFACE:${CMAKE_CURRENT_LIST_DIR}/include/vec/cpu.h> -) - target_compile_features(vec PRIVATE $<IF:$<COMPILE_FEATURES:c_std_11>,c_std_11,c_std_99>) -target_include_directories(vec PUBLIC "${CMAKE_CURRENT_SOURCE_DIR}/include;${CMAKE_CURRENT_BINARY_DIR}/include") +target_include_directories(vec PRIVATE "${CMAKE_CURRENT_SOURCE_DIR}/include;${CMAKE_CURRENT_BINARY_DIR}/include/vec") # Installing