mirror of
https://gitlab.freedesktop.org/uchardet/uchardet.git
synced 2025-12-31 19:02:23 +08:00
Floating point accuracy may be different depending on the architecture. In particular some architectures may store floating values with different precision, resulting in unreliable results across various machines. It would seem in particular true on older x86 machines without SSE support, which were reported cases. The proposed solution is to test for SSE support and explicitly add the proper flags (even though they are set by default anyway on modern x86). When this is not available (on older machines or simply when not on x86 processors), I replace sse2 flags with -ffloat-store, which forces IEEE floating point definition. The reason why not to always force -ffloat-store is because it seems to decrease performance on some machines. SSE is prefered if available. I also add a ENABLE_SSE2 option on the CMake file to allow builders to use -ffloat-store even though SSE2 may be available on the build machine. This would allow to build portable binaries which can also be installed on older machines.
75 lines
2.0 KiB
CMake
75 lines
2.0 KiB
CMake
######## Project settings
|
|
cmake_minimum_required(VERSION 2.8.5)
|
|
include(CheckCCompilerFlag)
|
|
set (PACKAGE_NAME uchardet)
|
|
project (${PACKAGE_NAME} CXX C)
|
|
enable_testing()
|
|
|
|
######## Package information
|
|
set (PACKAGE_URL https://www.freedesktop.org/wiki/Software/uchardet/)
|
|
set (PACKAGE_BUGREPORT https://bugs.freedesktop.org/enter_bug.cgi?product=uchardet)
|
|
set (UCHARDET_VERSION_MAJOR 0)
|
|
set (UCHARDET_VERSION_MINOR 0)
|
|
set (UCHARDET_VERSION_REVISION 6)
|
|
|
|
if (CMAKE_BUILD_TYPE MATCHES Debug)
|
|
set (version_suffix .debug)
|
|
endif (CMAKE_BUILD_TYPE MATCHES Debug)
|
|
|
|
set (
|
|
UCHARDET_VERSION
|
|
${UCHARDET_VERSION_MAJOR}.${UCHARDET_VERSION_MINOR}.${UCHARDET_VERSION_REVISION}${version_suffix}
|
|
)
|
|
set(CMAKE_CXX_STANDARD 11)
|
|
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
|
|
|
######## Windows
|
|
|
|
#if (WIN32)
|
|
# set(CMAKE_SHARED_LIBRARY_PREFIX ${CMAKE_INSTALL_PREFIX})
|
|
# set(CMAKE_STATIC_LIBRARY_PREFIX ${CMAKE_INSTALL_PREFIX})
|
|
#endif (WIN32)
|
|
|
|
######## Directory
|
|
|
|
include(GNUInstallDirs)
|
|
|
|
######## Configuration
|
|
|
|
option(BUILD_BINARY "Build executable" ON)
|
|
option(BUILD_SHARED_LIBS "Build shared library and link executable to it" ON)
|
|
option(ENABLE_SSE2 "Enable SSE2 extensions if the compiler supports it" ON)
|
|
|
|
if (BUILD_SHARED_LIBS)
|
|
option(BUILD_STATIC "Build static library" ON)
|
|
endif (BUILD_SHARED_LIBS)
|
|
|
|
CHECK_C_COMPILER_FLAG(-msse2 SUPPORTS_CFLAG_SSE2)
|
|
CHECK_C_COMPILER_FLAG(-mfpmath=sse SUPPORTS_CFLAG_SSE_MATH)
|
|
if (ENABLE_SSE2 AND SUPPORTS_CFLAG_SSE2 AND SUPPORTS_CFLAG_SSE_MATH)
|
|
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -msse2 -mfpmath=sse")
|
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -msse2 -mfpmath=sse")
|
|
else (ENABLE_SSE2 AND SUPPORTS_CFLAG_SSE2 AND SUPPORTS_CFLAG_SSE_MATH)
|
|
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -ffloat-store")
|
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -ffloat-store")
|
|
endif (ENABLE_SSE2 AND SUPPORTS_CFLAG_SSE2 AND SUPPORTS_CFLAG_SSE_MATH)
|
|
|
|
configure_file(
|
|
uchardet.pc.in
|
|
uchardet.pc
|
|
@ONLY
|
|
)
|
|
|
|
install(
|
|
FILES
|
|
${CMAKE_BINARY_DIR}/uchardet.pc
|
|
DESTINATION
|
|
${CMAKE_INSTALL_LIBDIR}/pkgconfig
|
|
)
|
|
|
|
######## Subdirectories
|
|
|
|
add_subdirectory(src)
|
|
add_subdirectory(doc)
|
|
add_subdirectory(test)
|