From 2cc1b3a3ee595c8be761fee309167b8a56393d3e Mon Sep 17 00:00:00 2001 From: Julian Andres Klode Date: Sun, 3 Feb 2019 16:39:37 +0100 Subject: Detect function multiversioning and sse4.2/crc32, enables i386 This fixes the build on kfreebsd-amd64, and due to the detection of sse4.2, should also enable the sse4.2 on i386. --- CMake/CheckCxxTarget.cmake | 35 +++++++++++++++++++++++++++++++++++ CMake/config.h.in | 4 ++++ 2 files changed, 39 insertions(+) create mode 100644 CMake/CheckCxxTarget.cmake (limited to 'CMake') diff --git a/CMake/CheckCxxTarget.cmake b/CMake/CheckCxxTarget.cmake new file mode 100644 index 000000000..373c0be4c --- /dev/null +++ b/CMake/CheckCxxTarget.cmake @@ -0,0 +1,35 @@ +# CMake support for target-based function multiversioning +# +# Copyright (C) 2019 Canonical Ltd +# +# Author: Julian Andres Klode . +# +# Permission is hereby granted, free of charge, to any person +# obtaining a copy of this software and associated documentation files +# (the "Software"), to deal in the Software without restriction, +# including without limitation the rights to use, copy, modify, merge, +# publish, distribute, sublicense, and/or sell copies of the Software, +# and to permit persons to whom the Software is furnished to do so, +# subject to the following conditions: +# +# The above copyright notice and this permission notice shall be +# included in all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS +# BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN +# ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +# CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +# SOFTWARE. + + +function(check_cxx_target var target code) + check_cxx_source_compiles( + " + __attribute__((target(\"${target}\"))) static int foo() { ${code} return 1; } + __attribute__((target(\"default\"))) static int foo() { ${code} return 0; } + int main() { return foo(); } + " ${var}) +endfunction() diff --git a/CMake/config.h.in b/CMake/config.h.in index bd0da8649..98a81ad6c 100644 --- a/CMake/config.h.in +++ b/CMake/config.h.in @@ -81,3 +81,7 @@ /* unrolling is faster combined with an optimizing compiler */ #define SHA2_UNROLL_TRANSFORM + +/* defined if __builtin_ia32_crc32{s,d}i() exists in an sse4.2 target */ +#define HAVE_FMV_SSE42_AND_CRC32 +#define HAVE_FMV_SSE42_AND_CRC32DI -- cgit v1.2.3-18-g5258