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 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 CMake/CheckCxxTarget.cmake (limited to 'CMake/CheckCxxTarget.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() -- cgit v1.2.3