Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

ceci est un test #2

Open
wants to merge 114 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
114 commits
Select commit Hold shift + click to select a range
34eeda7
Merge pull request #2 from carlosaguilarmelchor/master
serge-sans-paille Nov 26, 2015
8fbbba8
Initial push
serge-sans-paille-qb Nov 26, 2015
71c7066
Improved the documentation concerning the gaussian generators and cor…
carlosaguilarmelchor Jan 27, 2016
92bd938
Minor directory modification
carlosaguilarmelchor Jan 27, 2016
869b360
Any gaussian generator can be used now as stated in the documentation
carlosaguilarmelchor Jan 28, 2016
051feda
Added alignement tests for all constructors
carlosaguilarmelchor Feb 1, 2016
87c2f6b
Initialize a polynomial from gmp
Feb 11, 2016
57125c5
Merge pull request #3 from quarkslab/feature/initial-push
carlosaguilarmelchor Feb 29, 2016
c3a4b0f
Removed WIP, added doc generation instructions, moved contributors th…
carlosaguilarmelchor Mar 5, 2016
8588f69
Merge pull request #4 from quarkslab/feature/improved-readme
serge-sans-paille Mar 5, 2016
b2b8597
Merge branch 'master' into feature/gmp
Mar 7, 2016
4e9c7fa
Constructor via pair of iterators
Mar 8, 2016
7bcad8a
Merge branch 'feature/constructor-with-iterator-pair' into feature/gmp
Mar 8, 2016
a8353da
Fix comparison signed/unsigned
Mar 8, 2016
9666ebe
Merge branch 'feature/constructor-with-iterator-pair' into feature/gmp
Mar 8, 2016
48e0f1d
Add unitary test and fix a priori unwanted behavior
Mar 10, 2016
8588394
Merge branch 'feature/constructor-with-iterator-pair' into feature/gmp
Mar 10, 2016
cc200f7
Change set mpz constructors
Mar 10, 2016
86b8fdd
Fix minor memory leak
Mar 11, 2016
eed4586
Add an optional argument reduce_coeffs and adapt unitary test
Mar 11, 2016
8f61754
Merge branch 'feature/constructor-with-iterator-pair' into feature/gmp
Mar 11, 2016
f176641
add a type adaptor to poly_p (same as poly) and fix the tests
Mar 11, 2016
a07dd1a
Merge branch 'master' into feature/gmp
Mar 11, 2016
6fa61ac
Merge pull request #6 from tlepoint/master
serge-sans-paille Mar 11, 2016
156a7d5
Merge branch 'master' of https://github.com/quarkslab/NFLlib into fea…
Mar 11, 2016
b14d1ef
Add ntt and binary operators to poly_p
Mar 11, 2016
039543d
Add tests in poly_p test file
Mar 11, 2016
b429d99
Add the cleaning
Mar 11, 2016
09a9002
Merge branch 'feature/constructor-with-iterator-pair' into feature/gmp
Mar 11, 2016
5c23a12
Merge branch 'feature/poly-p-additional-methods' into feature/gmp
Mar 11, 2016
d95f457
Missing p0
Mar 11, 2016
220b91f
Merge branch 'feature/constructor-with-iterator-pair' into feature/gmp
Mar 11, 2016
ab2dbd3
Merge pull request #7 from tlepoint/feature/poly-p-additional-methods
serge-sans-paille Mar 11, 2016
bf49a8b
Merge branch 'master' into feature/gmp
Mar 12, 2016
e05618c
Merge branch 'feature/gmp' of github.com:tlepoint/NFLlib into feature…
Mar 12, 2016
fa754a2
Merge pull request #5 from tlepoint/feature/constructor-with-iterator…
carlosaguilarmelchor Mar 21, 2016
1c929a3
Merge branch 'master' into feature/gmp
Mar 23, 2016
8fa6fdd
Add travis integration
Mar 23, 2016
598f016
poly_p to poly_p_from_modulus
Mar 24, 2016
5292184
variables in poly_p class missing (clang complains)
Mar 24, 2016
65a23bf
Merge pull request #8 from tlepoint/master
serge-sans-paille Apr 5, 2016
cf008d4
Merge branch 'master' into feature/gmp
Apr 12, 2016
575dd17
Cleaning of mpz functions
Apr 12, 2016
7e80ba6
Add aligned_allocator for poly_p
Apr 12, 2016
9f0e554
Merge branch 'master' into feature/gmp
Apr 12, 2016
f7fb45e
Do not use object in static functions
Apr 12, 2016
f7ad4c3
Minor
Apr 12, 2016
583a1bd
Merge pull request #9 from tlepoint/master
serge-sans-paille Apr 12, 2016
f292291
Merge branch 'master' of https://github.com/quarkslab/NFLlib into fea…
Apr 13, 2016
66bc300
Factorization, and cleaning
Apr 19, 2016
d39fc13
Merge branch 'master' into feature/gmp
Apr 19, 2016
0438d79
Cleaning and uniformization with master
Apr 19, 2016
eeb1cd4
Minor modification of initialization of vectors
Apr 19, 2016
5636e48
Bug of overloading in clang
Apr 19, 2016
63b4fc4
Taking into account carlosaguilar comments
Apr 20, 2016
6dc2860
Use array instead of pointer
Apr 22, 2016
2d55d3a
output std::array instead of mpz_t*
Apr 22, 2016
5ab1192
Remove const from poly2mpz
Apr 22, 2016
b95c935
Remove length argument following @sergesanspaille comments
Apr 22, 2016
9b639da
Remove mode void*
Apr 25, 2016
9b8c467
Amelioration setter
Apr 25, 2016
be2561f
std::fill and add test for 0 polynomial
Apr 29, 2016
585206d
Merge pull request #10 from tlepoint/feature/gmp
tlepoint Apr 29, 2016
ca77207
Serialization using cereal
May 3, 2016
d58f2f9
Remove foreach loop
May 4, 2016
f46c031
Updated test
May 5, 2016
62009a1
Serializer perfs
May 9, 2016
4a4d5c5
Manual serialization: removing cereal dependence
May 10, 2016
8f8de9b
Add missing namespace nfl to FastGaussianNoise and minimal cleanup
May 10, 2016
7329597
Do not compile tests as part of make all
serge-sans-paille-qb May 10, 2016
b64e113
Minor modifications
May 10, 2016
937be8e
Add namespace aligned_allocator
May 10, 2016
fe7ded2
Manual (de)serialization, and cereal serialization
May 14, 2016
8bdbd9a
Add comment non cross architecture portability of serialization
May 14, 2016
8173229
Update extension name
May 15, 2016
b0cc0b8
symbolic values
May 15, 2016
16ff1d0
Use some combined mpz_functions, and store values instead of recomputing
May 16, 2016
b06faf3
constexpr instead of define
May 16, 2016
a039f30
add nullptr to gmp_inits
May 16, 2016
9d23ca1
Merge pull request #16 from tlepoint/fix/sphinx-doc
carlosaguilarmelchor May 18, 2016
9cdef1c
Merge pull request #14 from tlepoint/master
serge-sans-paille May 18, 2016
22caec4
Merge pull request #15 from quarkslab/feature/defered-tests-compilation
carlosaguilarmelchor May 19, 2016
698c593
Modifications following merging of PR #15
May 19, 2016
695fd25
Merge pull request #17 from tlepoint/feature/gmp-minor-improvements
tlepoint May 20, 2016
2fd680c
Merge pull request #11 from tlepoint/feature/serializer
serge-sans-paille May 22, 2016
bb982bc
Do not always unroll the permutation loop
aguinetqb May 30, 2016
b6e055b
Merge pull request #18 from quarkslab/fix/notalways_unroll_permut
serge-sans-paille May 31, 2016
e734e1c
Tests for degree=1<<20
carlosaguilarmelchor Jun 2, 2016
6601b5f
Fix segfault with large parameters because of alignment issues
Jun 3, 2016
59212db
Factorization
Jun 3, 2016
4876146
Merge pull request #19 from tlepoint/master
carlosaguilarmelchor Jun 8, 2016
cb331a3
Missing header dependencies
serge-sans-paille-qb Dec 2, 2016
0783ece
Updating CryptoExperts' name in README.md
tlepoint Dec 5, 2016
d61f993
Merge pull request #21 from quarkslab/fix/test-build
carlosaguilarmelchor Mar 17, 2017
2481de4
Prevent multiple definition error
serge-sans-paille-qb Jul 24, 2017
92f8de0
Merge pull request #25 from quarkslab/fix/multiple-definitions
serge-sans-paille Jul 24, 2017
ce7111a
Fix bug AVX: it was not compiling and the error was not showing off b…
Aug 10, 2017
0b813a3
Fix interface of SSE operations
aguinetqb Aug 11, 2017
4eb2f70
Fix interface of AVX2 ops
aguinetqb Aug 11, 2017
936431f
Fix alignment issue in operator bool()
aguinetqb Aug 11, 2017
4c6dafc
Add opt in install
Aug 11, 2017
2a5d78f
fix the description of how generating 32-bit moduli
fionser Sep 12, 2017
335301d
Merge pull request #28 from fionser/master
tlepoint Sep 12, 2017
4010a99
GCC cannot link AVX code on OSX. This patch tells GCC to use LLVM as …
Kirija Nov 13, 2017
f45a6ca
Merge pull request #26 from tlepoint/fix/bug_avx2
carlosaguilarmelchor Nov 29, 2017
5c09207
Merge pull request #30 from Kirija/pr-llvm-linker
carlosaguilarmelchor Dec 7, 2017
d523259
fix bug in description about the twiddle factor
fionser Jun 15, 2018
3ff3839
Merge pull request #32 from fionser/upstream
carlosaguilarmelchor Jun 19, 2018
ab56a70
Fixed bug in sub testing code (#38)
micciancio Sep 22, 2018
ee2df19
Faster serial NTT. (#40)
fionser Sep 26, 2018
01e7a48
ZO dist (#37)
fionser Sep 28, 2018
1634300
Fix bug in HWT and ZO sampling. (#42)
fionser Oct 1, 2018
110ff24
change to MIT License
carlosaguilarmelchor Nov 9, 2019
5cf40ed
replace 1 million degree poly in stack with 32k poly (#47)
carlosaguilarmelchor Nov 18, 2019
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
26 changes: 26 additions & 0 deletions .travis.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
language: cpp
sudo: false


addons:
apt:
sources:
- llvm-toolchain-precise-3.5
- ubuntu-toolchain-r-test
packages:
- g++-5
- clang-3.5
- libgmp-dev
- libmpfr-dev

env:
- NFL_CXX=g++-5 NFL_OPTIMIZED=ON
- NFL_CXX=g++-5 NFL_OPTIMIZED=OFF
- NFL_CXX=clang++-3.5 NFL_OPTIMIZED=ON
- NFL_CXX=clang++-3.5 NFL_OPTIMIZED=OFF

script:
- git clone https://github.com/USCiLab/cereal
- cmake . -DNFL_OPTIMIZED=$NFL_OPTIMIZED -DCMAKE_CXX_COMPILER=$NFL_CXX -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=$PWD/install -DCEREAL_PREFIX=$PWD/cereal
- make && make test ARGS="-VV" && make install

34 changes: 34 additions & 0 deletions CMakeCompilers.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
include(CheckCXXCompilerFlag)

# C++11 support
CHECK_CXX_COMPILER_FLAG(-std=c++11 COMPILER_SUPPORTS_CXX11)
if(COMPILER_SUPPORTS_CXX11)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
else()
CHECK_CXX_COMPILER_FLAG(-std=c++0x COMPILER_SUPPORTS_CXX0X)
if(COMPILER_SUPPORTS_CXX0X)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++0x")
else()
message(STATUS "The compiler ${CMAKE_CXX_COMPILER} has no C++11 support. Please use a different C++ compiler.")
endif()
endif()

# optimization flags support
if(CMAKE_BUILD_TYPE MATCHES Release)
set(CMAKE_CXX_FLAGS_RELEASE "-DNDEBUG -O3")
foreach(FLAG -march=native -mtune=native -funroll-loops)
string(REGEX REPLACE -= _ FLAG_ID ${FLAG})
string(TOUPPER ${FLAG_ID} FLAG_ID)
CHECK_CXX_COMPILER_FLAG(${FLAG} COMPILER_SUPPORTS${FLAG_ID})
set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} ${FLAG}")
endforeach()
else()
add_definitions(-DCHECK_STRICTMOD)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g")
endif()

if(APPLE)
set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -Wa,-q")
endif()


67 changes: 67 additions & 0 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,67 @@
cmake_minimum_required(VERSION 2.8)
project(nfl CXX ASM-ATT)
enable_testing()
if(APPLE)
cmake_policy(SET CMP0042 NEW)
endif()

option(NFL_OPTIMIZED "Build an optimized version of NFL" OFF)
if(NFL_OPTIMIZED)
message(STATUS "Tring to use optimized version of NFL")
add_definitions(-DNFL_OPTIMIZED)

include(CheckCXXSourceCompiles)
set(CMAKE_CXX_FLAGS_OLD ${CMAKE_CXX_FLAGS})
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -march=native")

check_cxx_source_compiles("#include <immintrin.h>\nint main() { return 0;}" NFLLIB_USE_AVX)
check_cxx_source_compiles("#include <pmmintrin.h>\nint main() { return 0;}" NFLLIB_USE_SSE)
if(NFLLIB_USE_AVX)
message(STATUS "Using AVX vector engine")
add_definitions(-DNTT_AVX2)
elseif(NFLLIB_USE_SSE)
message(STATUS "Using SSE vector engine")
add_definitions(-DNTT_SSE)
else()
message(ERROR "Asking for optimized mode but neither SSE not AVX support detected")
endif()
endif()

include(CMakeCompilers.txt)


set(CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/cmake)
find_package(GMP REQUIRED)
find_package(MPFR REQUIRED)

include_directories(include include/nfl include/nfl/arch include/nfl/opt include/nfl/opt/arch include/nfl/prng)


file(GLOB NFLLIB_ASMS lib/prng/*.s)
file(GLOB NFLLIB_SRCS lib/prng/*.cpp lib/params/*.cpp)
file(GLOB NFLLIB_HDRS_0 include/nfl.hpp)
file(GLOB NFLLIB_HDRS_1 include/nfl/*.hpp)
file(GLOB NFLLIB_HDRS_2 include/nfl/arch/*.hpp)
file(GLOB NFLLIB_HDRS_3 include/nfl/opt/*.hpp)
file(GLOB NFLLIB_HDRS_4 include/nfl/opt/arch/*.hpp)
file(GLOB NFLLIB_PRNG_HDRS include/nfl/prng/*.hpp include/nfl/prng/*.h)

# shared library
add_library(nfllib SHARED ${NFLLIB_ASMS} ${NFLLIB_SRCS})
target_link_libraries(nfllib ${GMP_LIBRARY} ${MPFR_LIBRARY})
install(TARGETS nfllib LIBRARY DESTINATION lib)

# static library
add_library(nfllib_static STATIC ${NFLLIB_ASMS} ${NFLLIB_SRCS})
target_link_libraries(nfllib_static ${GMP_LIBRARY} ${MPFR_LIBRARY})
install(TARGETS nfllib_static ARCHIVE DESTINATION lib)

install(FILES ${NFLLIB_} DESTINATION include)
install(FILES ${NFLLIB_HDRS_0} DESTINATION include)
install(FILES ${NFLLIB_HDRS_1} DESTINATION include/nfl)
install(FILES ${NFLLIB_HDRS_2} DESTINATION include/nfl/arch)
install(FILES ${NFLLIB_HDRS_3} DESTINATION include/nfl/opt)
install(FILES ${NFLLIB_HDRS_4} DESTINATION include/nfl/opt/arch)
install(FILES ${NFLLIB_PRNG_HDRS} DESTINATION include/nfl/prng)

add_subdirectory(tests)
8 changes: 8 additions & 0 deletions MIT_LICENSE.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
Copyright (c) 2016, Carlos Aguilar-Melchor, Serge Guelton, Adrien Guinet, Tancrède Lepoint

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.

53 changes: 47 additions & 6 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,18 +1,59 @@
# NFLlib
NTT-based Fast Lattice library

Work in Progress ... the library should be available in a few weeks.
An NTT-based Fast Lattice library

## Goal

NFLlib is an efficient and open-source C++ library dedicated to ideal lattice cryptography. It is specialized in polynomial rings quotiented by a cyclotomic polynomial whose degree is a power of two. The library combines algorithmic optimizations (Chinese Remainder Theorem, optimized Number Theoretic Transform) together with programming optimization techniques (SSE and AVX2 specializations, C++ expression templates, etc.).

## License

When published here the library will be available under an open source license.
MIT

# Install Steps

You need cmake, GMP and Mpfr, as well as a C++11 compiler to build NFLLib.

To build, test and install a production version of nfllib, run the following:

```
$> mkdir _build
$> cd _build
$> cmake .. -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=$HOME/nfllib
$> make
$> make test
$> make install
```

The following CMake options are relevant:

Option | Description
------------------------------------|---------------------------------
`-DCMAKE_INSTALL_PREFIX=<value>` | Where the library is installed
`-DCMAKE_BUILD_TYPE=Release\|Debug` | The basic compiler configuration
`-DNFL_OPTIMIZED=ON` | Enable SSE/AVX-based optimization

# SSE/AVX optimizations

To use SSE-based optimizations, compile the code with the flags `-DNFL_OPTIMIZED=ON -DNTT_SSE`.

To use AVX-based optimizations, compile the code with the flags `-DNFL_OPTIMIZED=ON -DNTT_AVX2`.

# Getting started

In order to get the documentation you need Sphinx and the Alabaster theme. Installation procedures are described at (we recommend using pip for both installations) :

* http://www.sphinx-doc.org/en/stable/install.html
* https://anaconda.org/pypi/alabaster

After getting both Sphinx and the Alabaster theme build the documentation and show it with:

```
$> sphinx-build . build
$> your_favorite_browser build/nfl.html
```

## Contributors
If you have issues building the documentation please contact the developper team.

This library is an extension/evolution of the NTTTools module from [XPIR](https://github.com/XPIR-team/XPIR) done by members of [Cryptoexperts](https://www.cryptoexperts.com), [INP ENSEEIHT](http://www.enseeiht.com), [Quarkslab](http://www.quarkslab.com) (in alphabetical order).
# Contributors

This library is an extension/evolution of the NTTTools module from [XPIR](https://github.com/XPIR-team/XPIR) done by members of [CryptoExperts](https://www.cryptoexperts.com), [INP ENSEEIHT](http://www.enseeiht.com), [Quarkslab](http://www.quarkslab.com) (in alphabetical order).
10 changes: 10 additions & 0 deletions cmake/FindCEREAL.cmake
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
# Copyright (c) 2016 NFLlib

set(CEREAL_PREFIX "" CACHE PATH "The path to the prefix of an CEREAL installation")

find_path(CEREAL_INCLUDE_DIR cereal
PATHS ${CEREAL_PREFIX}/include /usr/include /usr/local/include)

if(CEREAL_INCLUDE_DIR)
set(CEREAL_FOUND TRUE)
endif()
36 changes: 36 additions & 0 deletions cmake/FindGMP.cmake
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
# Copyright (c) 2008-2010 Kent State University
# Copyright (c) 2011-2012 Texas A&M University
#
# This file is distributed under the MIT License. See the accompanying file
# LICENSE.txt or http://www.opensource.org/licenses/mit-license.php for terms
# and conditions.

# FIXME: How do I find the version of GMP that I want to use?
# What versions are available?

# NOTE: GMP prefix is understood to be the path to the root of the GMP
# installation library.
set(GMP_PREFIX "" CACHE PATH "The path to the prefix of a GMP installation")


find_path(GMP_INCLUDE_DIR gmp.h
PATHS ${GMP_PREFIX}/include /usr/include /usr/local/include)

find_library(GMP_LIBRARY NAMES gmp
PATHS ${GMP_PREFIX}/lib /usr/lib /usr/local/lib)


if(GMP_INCLUDE_DIR AND GMP_LIBRARY)
get_filename_component(GMP_LIBRARY_DIR ${GMP_LIBRARY} PATH)
set(GMP_FOUND TRUE)
endif()

if(GMP_FOUND)
if(NOT GMP_FIND_QUIETLY)
MESSAGE(STATUS "Found GMP: ${GMP_LIBRARY}")
endif()
elseif(GMP_FOUND)
if(GMP_FIND_REQUIRED)
message(FATAL_ERROR "Could not find GMP")
endif()
endif()
35 changes: 35 additions & 0 deletions cmake/FindMPFR.cmake
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
# Copyright (c) 2008-2010 Kent State University
# Copyright (c) 2011-2012 Texas A&M University
#
# This file is distributed under the MIT License. See the accompanying file
# LICENSE.txt or http://www.opensource.org/licenses/mit-license.php for terms
# and conditions.

# FIXME: How do I find the version of MPFR that I want to use?
# What versions are available?

# NOTE: MPFR prefix is understood to be the path to the root of the MPFR
# installation library.
set(MPFR_PREFIX "" CACHE PATH "The path to the previx of an MPFR installation")

find_path(MPFR_INCLUDE_DIR mpfr.h
PATHS ${MPFR_PREFIX}/include /usr/include /usr/local/include)

find_library(MPFR_LIBRARY NAMES mpfr
PATHS ${MPFR_PREFIX}/lib /usr/lib /usr/local/lib)

if(MPFR_INCLUDE_DIR AND MPFR_LIBRARY)
get_filename_component(MPFR_LIBRARY_DIR ${MPFR_LIBRARY} PATH)
set(MPFR_FOUND TRUE)
endif()


if(MPFR_FOUND)
if(NOT MPFR_FIND_QUIETLY)
MESSAGE(STATUS "Found MPFR: ${MPFR_LIBRARY}")
endif()
elseif(MPFR_FOUND)
if(MPFR_FIND_REQUIRED)
message(FATAL_ERROR "Could not find MPFR")
endif()
endif()
Loading