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