зеркало из https://github.com/microsoft/SEAL.git
79 строки
2.2 KiB
CMake
79 строки
2.2 KiB
CMake
# Copyright (c) Microsoft Corporation. All rights reserved.
|
|
# Licensed under the MIT license.
|
|
|
|
if(SEAL_USE_INTRIN)
|
|
cmake_push_check_state(RESET)
|
|
set(CMAKE_REQUIRED_QUIET TRUE)
|
|
if(NOT MSVC)
|
|
set(CMAKE_REQUIRED_FLAGS "${CMAKE_REQUIRED_FLAGS} -O0 ${SEAL_LANG_FLAG}")
|
|
endif()
|
|
|
|
if(MSVC)
|
|
# Check for presence of _umul128
|
|
check_cxx_source_runs("
|
|
#include <${SEAL_INTRIN_HEADER}>
|
|
int main() {
|
|
unsigned long long a = 0, b = 0;
|
|
unsigned long long c;
|
|
volatile unsigned long long d;
|
|
d = _umul128(a, b, &c);
|
|
return 0;
|
|
}"
|
|
SEAL__UMUL128_FOUND
|
|
)
|
|
|
|
# Check for _BitScanReverse64
|
|
check_cxx_source_runs("
|
|
#include <${SEAL_INTRIN_HEADER}>
|
|
int main() {
|
|
unsigned long a = 0, b = 0;
|
|
volatile unsigned char res = _BitScanReverse64(&a, b);
|
|
return 0;
|
|
}"
|
|
SEAL__BITSCANREVERSE64_FOUND
|
|
)
|
|
else()
|
|
# Check for presence of __int128
|
|
set(CMAKE_EXTRA_INCLUDE_FILES ${SEAL_INTRIN_HEADER})
|
|
check_type_size("__int128" INT128 LANGUAGE CXX)
|
|
if(INT128 EQUAL 16)
|
|
set(SEAL___INT128_FOUND ON)
|
|
else()
|
|
set(SEAL___INT128_FOUND OFF)
|
|
endif()
|
|
|
|
# Check for __builtin_clzll
|
|
check_cxx_source_runs("
|
|
int main() {
|
|
volatile auto res = __builtin_clzll(0);
|
|
return 0;
|
|
}"
|
|
SEAL___BUILTIN_CLZLL_FOUND
|
|
)
|
|
endif()
|
|
|
|
# Check for _addcarry_u64
|
|
check_cxx_source_runs("
|
|
#include <${SEAL_INTRIN_HEADER}>
|
|
int main() {
|
|
unsigned long long a;
|
|
volatile auto res = _addcarry_u64(0,0,0,&a);
|
|
return 0;
|
|
}"
|
|
SEAL__ADDCARRY_U64_FOUND
|
|
)
|
|
|
|
# Check for _subborrow_u64
|
|
check_cxx_source_runs("
|
|
#include <${SEAL_INTRIN_HEADER}>
|
|
int main() {
|
|
unsigned long long a;
|
|
volatile auto res = _subborrow_u64(0,0,0,&a);
|
|
return 0;
|
|
}"
|
|
SEAL__SUBBORROW_U64_FOUND
|
|
)
|
|
|
|
cmake_pop_check_state()
|
|
endif()
|