Add configuration option to enable SSE2. Add -ffloat-store flag on x86 without SSE2. Gentoo bug: https://bugs.gentoo.org/631852 Gentoo bug: https://bugs.gentoo.org/641716 Upstream bug: https://bugs.freedesktop.org/show_bug.cgi?id=101033 This patch is an aggregation of the following upstream commits: 5996bbd995aed5045cc22e4d1fab08c989377983 77bf71ea365a19ac55c59cf10399b566a02d82c1 939482ab2b5a6585bdd2e5251f3f2f113d64686f cd617d181de03a7a13c2020e6c73cd14585e24b6 f136d434f0809e064ac195b5bc4e0b50484a474c diff --git a/CMakeLists.txt b/CMakeLists.txt index e9a699e..d140a24 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,5 +1,6 @@ ######## Project settings cmake_minimum_required(VERSION 2.8.5) +include(CheckCCompilerFlag) set (PACKAGE_NAME uchardet) project (${PACKAGE_NAME} CXX C) enable_testing() @@ -33,13 +34,31 @@ include(GNUInstallDirs) ######## Configuration -option(BUILD_BINARY "Build executable" ON) -option(BUILD_SHARED_LIBS "Build shared library and link executable to it" ON) +option(BUILD_BINARY "Build the CLI tool." ON) +option(BUILD_SHARED_LIBS "Build shared library and link executable to it." ON) +option(CHECK_SSE2 "Check and enable SSE2 extensions if supported. Disabling SSE on platforms which support it may decrease performances." ON) +set(TARGET_ARCHITECTURE "" CACHE STRING "Target CPU architecture. It is autodetected if not specified.") if (BUILD_SHARED_LIBS) option(BUILD_STATIC "Build static library" ON) endif (BUILD_SHARED_LIBS) +if (TARGET_ARCHITECTURE STREQUAL "") + string(TOLOWER ${CMAKE_SYSTEM_PROCESSOR} TARGET_ARCHITECTURE) +endif (TARGET_ARCHITECTURE STREQUAL "") + +if (TARGET_ARCHITECTURE MATCHES ".*(x86)|(amd).*") + CHECK_C_COMPILER_FLAG(-msse2 SUPPORTS_CFLAG_SSE2) + CHECK_C_COMPILER_FLAG(-mfpmath=sse SUPPORTS_CFLAG_SSE_MATH) + if (CHECK_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 (CHECK_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 (CHECK_SSE2 AND SUPPORTS_CFLAG_SSE2 AND SUPPORTS_CFLAG_SSE_MATH) +endif (TARGET_ARCHITECTURE MATCHES ".*(x86)|(amd).*") + configure_file( uchardet.pc.in uchardet.pc