kfr

Fast, modern C++ DSP framework, FFT, Sample Rate Conversion, FIR/IIR/Biquad Filters (SSE, AVX, AVX-512, ARM NEON)
Log | Files | Refs | README

commit ed7e89cf37d970ebece987bd5e92086823d12578
parent cdc50503eb69ae5652eaaa415070ffeab76f499c
Author: d.levin256@gmail.com <d.levin256@gmail.com>
Date:   Mon, 19 Nov 2018 08:46:21 +0300

CMake refactoring/FindGMP

Diffstat:
MCMakeLists.txt | 166+++++++++++++++++++------------------------------------------------------------
Mazure-pipelines.yml | 14+++++++-------
Mexamples/CMakeLists.txt | 2++
Minclude/kfr/cometa.hpp | 24++++++++++++------------
Minclude/kfr/dft/dft-src.cpp | 2+-
Minclude/kfr/dsp/ebu.hpp | 8++++----
Minclude/kfr/testo/comparison.hpp | 2++
Minclude/kfr/testo/testo.hpp | 1+
Mtests/CMakeLists.txt | 59+++++++++++++++++++++++++++--------------------------------
Atests/cmake/FindGMP.cmake | 5+++++
10 files changed, 100 insertions(+), 183 deletions(-)

diff --git a/CMakeLists.txt b/CMakeLists.txt @@ -17,96 +17,6 @@ cmake_minimum_required(VERSION 3.0) -#set(DISABLE_CLANG 1) - -if(NOT CMAKE_CXX_COMPILER) - - if (${CMAKE_GENERATOR} STREQUAL "MinGW Makefiles" - OR ${CMAKE_GENERATOR} STREQUAL "MSYS Makefiles" - OR ${CMAKE_GENERATOR} STREQUAL "Unix Makefiles" - OR ${CMAKE_GENERATOR} STREQUAL "Ninja") - - # Find clang and set as c++ compiler for MinGW, MSYS and Unix - # If clang is not found, leave default compiler (usually GCC) - - if(NOT DISABLE_CLANG) - find_program(CLANG_CXX_PATH clang++-8) - find_program(CLANG_CXX_PATH clang++-7) - find_program(CLANG_CXX_PATH clang++-8.0) - find_program(CLANG_CXX_PATH clang++-7.0) - find_program(CLANG_CXX_PATH clang++-6.0) - find_program(CLANG_CXX_PATH clang++-5.0) - find_program(CLANG_CXX_PATH clang++-4.0) - find_program(CLANG_CXX_PATH clang++-4.0) - find_program(CLANG_CXX_PATH clang++-3.9) - find_program(CLANG_CXX_PATH clang++-3.8) - find_program(CLANG_CXX_PATH clang++-3.7) - find_program(CLANG_CXX_PATH clang++-3.6) - find_program(CLANG_CXX_PATH clang++) - - # If clang is found - if(CLANG_CXX_PATH) - set(CMAKE_CXX_COMPILER ${CLANG_CXX_PATH}) - message(STATUS "Clang found") - else() - message(STATUS "Clang not found") - endif() - - else() - message(STATUS "Clang disabled") - endif() - - elseif (${CMAKE_GENERATOR} STREQUAL "Visual Studio 14 2015" - OR ${CMAKE_GENERATOR} STREQUAL "Visual Studio 14 2015 Win64") - - # Find LLVM-vs2014 toolset for MSVC - # If clang is not found, leave default Microsoft's cl.exe compiler - - if(NOT DISABLE_CLANG) - file(MAKE_DIRECTORY "${CMAKE_BINARY_DIR}/test_toolset") - - # Check if toolset can be set - execute_process(COMMAND "${CMAKE_COMMAND}" -G "Visual Studio 14 2015" -T LLVM-vs2014 "${CMAKE_SOURCE_DIR}/cmake/test_toolset" WORKING_DIRECTORY "${CMAKE_BINARY_DIR}/test_toolset" RESULT_VARIABLE TOOLSET_EXISTS OUTPUT_QUIET ERROR_QUIET) - - if(${TOOLSET_EXISTS} EQUAL 0) - set(CMAKE_GENERATOR_TOOLSET LLVM-vs2014) - message(STATUS "LLVM-vs2014 found") - else() - message(STATUS "LLVM-vs2014 not found") - endif() - else() - message(STATUS "LLVM-vs2014 disabled") - endif() - - endif() -endif() - -if (${CMAKE_GENERATOR} STREQUAL "MinGW Makefiles" - OR ${CMAKE_GENERATOR} STREQUAL "MSYS Makefiles" - OR ${CMAKE_GENERATOR} STREQUAL "Unix Makefiles" - OR ${CMAKE_GENERATOR} STREQUAL "Ninja") - - if (CMAKE_CXX_COMPILER MATCHES "clang" AND NOT CMAKE_CXX_COMPILER MATCHES "clang-cl") - if (WIN32) - # On windows, clang requires --target - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} --target=x86_64-w64-windows-gnu" CACHE STRING "cxx compile flags" FORCE) - endif() - endif() -endif() - -#################################### - -# Release build by default -if (CMAKE_BUILD_TYPE_INITIALIZED_TO_DEFAULT) - set(CMAKE_BUILD_TYPE Release) -endif () - -# Only Debug and Release builds -set(CMAKE_CONFIGURATION_TYPES "Debug;Release" CACHE STRING "config types" FORCE) - -# Insert common c++ flags here -set(CMAKE_CXX_FLAGS " ${CMAKE_CXX_FLAGS}" CACHE STRING "compile flags" FORCE) - project(kfr CXX) message(STATUS "C++ compiler: ${CMAKE_CXX_COMPILER_ID} ${CMAKE_CXX_COMPILER_VERSION} ${CMAKE_CXX_COMPILER} ") @@ -117,50 +27,52 @@ else() set(CLANG 0) endif() -# Binary output directories -set(CMAKE_RUNTIME_OUTPUT_DIRECTORY_RELEASE ${PROJECT_BINARY_DIR}/bin) -set(CMAKE_RUNTIME_OUTPUT_DIRECTORY_DEBUG ${PROJECT_BINARY_DIR}/bin/Debug) - # Include list of source files include(sources.cmake) -if (IOS) - set(STD_LIB) -else () - set(STD_LIB stdc++) -endif () - add_definitions(-D_ENABLE_EXTENDED_ALIGNED_STORAGE) -add_definitions(-D_CRT_SECURE_NO_WARNINGS) +option(ENABLE_TESTS "Enable tests and examples. This changes many compiler flags" OFF) -if (NOT MSVC OR CLANG) - # Enable C++14, disable exceptions and rtti - add_compile_options(-std=c++1y -fno-exceptions -fno-rtti ) - if (NOT ARCH_FLAGS) - add_compile_options(-march=native) - if(WIN32) - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mstackrealign -fno-asynchronous-unwind-tables") - endif() +if (ENABLE_TESTS) + + if (IOS) + set(STD_LIB) else () - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${ARCH_FLAGS}") + set(STD_LIB stdc++) endif () - if(NOT MSVC) - link_libraries(${STD_LIB} pthread m) - endif() -else () - # Disable exceptions - add_compile_options(/EHsc /D_HAS_EXCEPTIONS=0 /D_CRT_SECURE_NO_WARNINGS=1) - add_compile_options(/arch:AVX) -endif () - -if ("${CMAKE_GENERATOR_TOOLSET}" STREQUAL "LLVM-vs2014") - add_compile_options( -Wno-unused-command-line-argument ) -endif() - -set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/tests/cmake/") -file(MAKE_DIRECTORY ${PROJECT_BINARY_DIR}/svg) + # Binary output directories + set(CMAKE_RUNTIME_OUTPUT_DIRECTORY_RELEASE ${PROJECT_BINARY_DIR}/bin) + set(CMAKE_RUNTIME_OUTPUT_DIRECTORY_DEBUG ${PROJECT_BINARY_DIR}/bin/Debug) + + add_definitions(-D_CRT_SECURE_NO_WARNINGS) + + if (NOT MSVC OR CLANG) + # Enable C++14, disable exceptions and rtti + if (CMAKE_CXX_COMPILER_ID STREQUAL "GNU") + add_compile_options(-std=gnu++1y) + else () + add_compile_options(-std=c++1y) + endif () + add_compile_options(-fno-exceptions -fno-rtti ) + if (NOT ARCH_FLAGS) + add_compile_options(-march=native) + if(WIN32) + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mstackrealign -fno-asynchronous-unwind-tables") + endif() + else () + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${ARCH_FLAGS}") + endif () + if(NOT MSVC) + link_libraries(${STD_LIB} pthread m) + endif() + else () + # Disable exceptions + add_compile_options(/EHsc /D_HAS_EXCEPTIONS=0 /D_CRT_SECURE_NO_WARNINGS=1) + add_compile_options(/arch:AVX) + endif () -add_subdirectory(examples) -add_subdirectory(tests) + add_subdirectory(examples) + add_subdirectory(tests) +endif () diff --git a/azure-pipelines.yml b/azure-pipelines.yml @@ -8,7 +8,7 @@ jobs: sudo apt-get install -y ninja-build libmpfr-dev mkdir build cd build - cmake -GNinja -DCMAKE_BUILD_TYPE=Release .. + cmake -GNinja -DENABLE_TESTS=ON -DCMAKE_BUILD_TYPE=Release .. ninja cd tests ctest -V @@ -22,7 +22,7 @@ jobs: sudo apt-get install -y ninja-build g++-arm-linux-gnueabihf qemu mkdir build cd build - cmake -GNinja -DCMAKE_BUILD_TYPE=Release -DCMAKE_TOOLCHAIN_FILE=../cmake/arm.cmake -DARCH_FLAGS=-DLIBC_WORKAROUND_GETS=1 .. + cmake -GNinja -DENABLE_TESTS=ON -DCMAKE_BUILD_TYPE=Release -DCMAKE_TOOLCHAIN_FILE=../cmake/arm.cmake -DARCH_FLAGS=-DLIBC_WORKAROUND_GETS=1 .. ninja cd tests ctest -V @@ -49,7 +49,7 @@ jobs: brew install ninja mkdir build cd build - cmake -GNinja -DCMAKE_BUILD_TYPE=Release .. + cmake -GNinja -DENABLE_TESTS=ON -DCMAKE_BUILD_TYPE=Release .. ninja cd tests ctest -V @@ -63,7 +63,7 @@ jobs: choco install llvm ninja mkdir build cd build - cmake -GNinja -DCMAKE_CXX_COMPILER="C:/Program Files/LLVM/bin/clang++.exe" -DCMAKE_BUILD_TYPE=Release .. + cmake -GNinja -DENABLE_TESTS=ON -DCMAKE_CXX_COMPILER="C:/Program Files/LLVM/bin/clang++.exe" -DCMAKE_CXX_FLAGS=--target=x86_64-w64-windows-gnu -DCMAKE_BUILD_TYPE=Release .. ninja cd tests ctest -V @@ -79,7 +79,7 @@ jobs: call "C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\VC\Auxiliary\Build\vcvars64.bat" set PATH=%PATH:C:\tools\mingw64\bin;=% set PATH=%PATH:C:\Program Files\Git\mingw64\bin;=% - cmake -GNinja -DCMAKE_CXX_COMPILER="C:/Program Files/LLVM/bin/clang-cl.exe" -DARCH_FLAGS=-mavx -DCMAKE_CXX_FLAGS=-m64 -DCMAKE_BUILD_TYPE=Release .. + cmake -GNinja -DENABLE_TESTS=ON -DCMAKE_CXX_COMPILER="C:/Program Files/LLVM/bin/clang-cl.exe" -DARCH_FLAGS=-mavx -DCMAKE_CXX_FLAGS=-m64 -DCMAKE_BUILD_TYPE=Release .. ninja cd tests ctest -V @@ -95,7 +95,7 @@ jobs: call "C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\VC\Auxiliary\Build\vcvars32.bat" set PATH=%PATH:C:\tools\mingw64\bin;=% set PATH=%PATH:C:\Program Files\Git\mingw64\bin;=% - cmake -GNinja -DCMAKE_CXX_COMPILER="C:/Program Files/LLVM/bin/clang-cl.exe" -DARCH_FLAGS=-mavx -DCMAKE_CXX_FLAGS=-m32 -DCMAKE_BUILD_TYPE=Release .. + cmake -GNinja -DENABLE_TESTS=ON -DCMAKE_CXX_COMPILER="C:/Program Files/LLVM/bin/clang-cl.exe" -DARCH_FLAGS=-mavx -DCMAKE_CXX_FLAGS=-m32 -DCMAKE_BUILD_TYPE=Release .. ninja cd tests ctest -V @@ -107,7 +107,7 @@ jobs: mkdir build cd build call "C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Auxiliary\Build\vcvars64.bat" - cmake -GNinja -DARCH_TESTS=ON -DCMAKE_CXX_COMPILER="C:/LLVM/bin/clang-cl.exe" -DARCH_FLAGS="-mavx512f -mavx512cd -mavx512bw -mavx512dq -mavx512vl" -DCMAKE_CXX_FLAGS=-m64 -DCMAKE_BUILD_TYPE=Release .. + cmake -GNinja -DENABLE_TESTS=ON -DARCH_TESTS=ON -DCMAKE_CXX_COMPILER="C:/LLVM/bin/clang-cl.exe" -DARCH_FLAGS="-mavx512f -mavx512cd -mavx512bw -mavx512dq -mavx512vl" -DCMAKE_CXX_FLAGS=-m64 -DCMAKE_BUILD_TYPE=Release .. ninja cd tests ctest -V diff --git a/examples/CMakeLists.txt b/examples/CMakeLists.txt @@ -17,6 +17,8 @@ cmake_minimum_required(VERSION 3.0) +file(MAKE_DIRECTORY ${PROJECT_BINARY_DIR}/svg) + include_directories(../include) add_executable(biquads biquads.cpp ${KFR_SRC}) diff --git a/include/kfr/cometa.hpp b/include/kfr/cometa.hpp @@ -55,18 +55,6 @@ using pconstvoid = const void*; template <typename...> using void_t = void; -// Workaround for GCC 4.8 -template <typename T> -constexpr const T& const_max(const T& x, const T& y) -{ - return x > y ? x : y; -} -template <typename T> -constexpr const T& const_min(const T& x, const T& y) -{ - return x < y ? x : y; -} - namespace details { constexpr inline bool args_or() { return false; } @@ -1722,6 +1710,18 @@ template <typename... List> constexpr indicesfor_t<List...> indicesfor{}; #endif +// Workaround for GCC 4.8 +template <typename T> +constexpr conditional<std::is_scalar<T>::value, T, const T &> const_max(const T& x, const T& y) +{ + return x > y ? x : y; +} +template <typename T> +constexpr conditional<std::is_scalar<T>::value, T, const T &> const_min(const T& x, const T& y) +{ + return x < y ? x : y; +} + CMT_PRAGMA_GNU(GCC diagnostic pop) } diff --git a/include/kfr/dft/dft-src.cpp b/include/kfr/dft/dft-src.cpp @@ -1065,7 +1065,7 @@ void dft_plan_real<T>::from_fmt(complex<T>* out, const complex<T>* in, dft_pack_ } template <typename T> -dft_plan<T>::~dft_plan() = default; +dft_plan<T>::~dft_plan() {} namespace internal { diff --git a/include/kfr/dsp/ebu.hpp b/include/kfr/dsp/ebu.hpp @@ -9,9 +9,9 @@ #include "speaker.hpp" #include "units.hpp" -#pragma clang diagnostic push -#if __has_warning("-Winaccessible-base") -#pragma clang diagnostic ignored "-Winaccessible-base" +CMT_PRAGMA_GNU(GCC diagnostic push) +#if CMT_HAS_WARNING("-Winaccessible-base") +CMT_PRAGMA_GNU(GCC diagnostic ignored "-Winaccessible-base") #endif namespace kfr @@ -329,4 +329,4 @@ private: } // namespace kfr -#pragma clang diagnostic pop +CMT_PRAGMA_GNU(GCC diagnostic pop) diff --git a/include/kfr/testo/comparison.hpp b/include/kfr/testo/comparison.hpp @@ -8,7 +8,9 @@ #include <cmath> CMT_PRAGMA_GNU(GCC diagnostic push) +#if CMT_HAS_WARNING("-Wexit-time-destructors") CMT_PRAGMA_GNU(GCC diagnostic ignored "-Wexit-time-destructors") +#endif CMT_PRAGMA_GNU(GCC diagnostic ignored "-Wpadded") CMT_PRAGMA_GNU(GCC diagnostic ignored "-Wshadow") diff --git a/include/kfr/testo/testo.hpp b/include/kfr/testo/testo.hpp @@ -17,6 +17,7 @@ #include <cmath> CMT_PRAGMA_GNU(GCC diagnostic push) +CMT_PRAGMA_GNU(GCC diagnostic ignored "-Wpragmas") CMT_PRAGMA_GNU(GCC diagnostic ignored "-Wexit-time-destructors") CMT_PRAGMA_GNU(GCC diagnostic ignored "-Wpadded") CMT_PRAGMA_GNU(GCC diagnostic ignored "-Wshadow") diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt @@ -17,13 +17,12 @@ cmake_minimum_required(VERSION 3.0) -set(TEST_SRC -) - add_definitions(-DKFR_TESTING=1) include_directories(../include) +set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/tests/cmake/") + if (NOT ARM) if(MSVC AND NOT CLANG) add_executable(multiarch multiarch.cpp multiarch_fir_sse2.cpp multiarch_fir_avx.cpp ${KFR_SRC}) @@ -37,6 +36,7 @@ if (NOT ARM) endif () find_package(MPFR) +find_package(GMP) set(ALL_TESTS_CPP all_tests.cpp @@ -47,38 +47,33 @@ set(ALL_TESTS_CPP expression_test.cpp intrinsic_test.cpp) -if (MPFR_FOUND) +if (MPFR_FOUND AND GMP_FOUND) list(APPEND ALL_TESTS_CPP transcendental_test.cpp) +else () + message(STATUS "MPFR is not found. Skipping transcendental_test") endif () -add_executable(all_tests ${ALL_TESTS_CPP} ${KFR_SRC} ${TEST_SRC} ../include/kfr/dft/dft-src.cpp) +add_executable(all_tests ${ALL_TESTS_CPP} ${KFR_SRC} ../include/kfr/dft/dft-src.cpp) target_compile_definitions(all_tests PRIVATE KFR_NO_MAIN) -add_executable(intrinsic_test intrinsic_test.cpp ${KFR_SRC} ${TEST_SRC}) -add_executable(dft_test dft_test.cpp ${KFR_SRC} ${TEST_SRC} ../include/kfr/dft/dft-src.cpp) -if (MPFR_FOUND) +add_executable(intrinsic_test intrinsic_test.cpp ${KFR_SRC} ) +add_executable(dft_test dft_test.cpp ${KFR_SRC} ../include/kfr/dft/dft-src.cpp) +if (MPFR_FOUND AND GMP_FOUND) add_definitions(-DHAVE_MPFR) - include_directories(${MPFR_INCLUDE_DIR}) - add_executable(transcendental_test transcendental_test.cpp ${KFR_SRC} ${TEST_SRC}) - target_link_libraries(all_tests ${MPFR_LIBRARIES}) - target_link_libraries(transcendental_test ${MPFR_LIBRARIES}) - if (WIN32) - target_link_libraries(transcendental_test gmp) # for MSYS - target_link_libraries(all_tests gmp) # for MSYS - endif() + include_directories(${MPFR_INCLUDE_DIR} ${GMP_INCLUDE_DIR}) + add_executable(transcendental_test transcendental_test.cpp ${KFR_SRC} ) + target_link_libraries(all_tests ${MPFR_LIBRARIES} ${GMP_LIBRARIES}) + target_link_libraries(transcendental_test ${MPFR_LIBRARIES} ${GMP_LIBRARIES}) endif () function(add_x86_test NAME FLAGS) separate_arguments(FLAGS) - add_executable(all_tests_${NAME} ${ALL_TESTS_CPP} ${KFR_SRC} ${TEST_SRC} ../include/kfr/dft/dft-src.cpp) + add_executable(all_tests_${NAME} ${ALL_TESTS_CPP} ${KFR_SRC} ../include/kfr/dft/dft-src.cpp) target_compile_options(all_tests_${NAME} PRIVATE ${FLAGS}) target_compile_definitions(all_tests_${NAME} PRIVATE KFR_NO_MAIN) - if(MPFR_FOUND) - target_link_libraries(all_tests_${NAME} ${MPFR_LIBRARIES}) - if (WIN32) - target_link_libraries(all_tests_${NAME} gmp) # for MSYS - endif() - endif() + if (MPFR_FOUND AND GMP_FOUND) + target_link_libraries(all_tests_${NAME} ${MPFR_LIBRARIES} ${GMP_LIBRARIES}) + endif () endfunction() message(STATUS CMAKE_SYSTEM_PROCESSOR = ${CMAKE_SYSTEM_PROCESSOR}) @@ -94,13 +89,13 @@ if (ARCH_TESTS) add_x86_test(avx512 "-march=x86-64 -msse4.1 -mavx2 -mfma -mavx512f -mavx512cd -mavx512bw -mavx512dq -mavx512vl") endif() -add_executable(dsp_test dsp_test.cpp ${KFR_SRC} ${TEST_SRC}) -add_executable(empty_test empty_test.cpp ${KFR_SRC} ${TEST_SRC}) -add_executable(complex_test complex_test.cpp ${KFR_SRC} ${TEST_SRC}) -add_executable(base_test base_test.cpp ${KFR_SRC} ${TEST_SRC}) -add_executable(expression_test expression_test.cpp ${KFR_SRC} ${TEST_SRC}) +add_executable(dsp_test dsp_test.cpp ${KFR_SRC} ) +add_executable(empty_test empty_test.cpp ${KFR_SRC} ) +add_executable(complex_test complex_test.cpp ${KFR_SRC} ) +add_executable(base_test base_test.cpp ${KFR_SRC} ) +add_executable(expression_test expression_test.cpp ${KFR_SRC} ) -add_executable(ebu_test ebu_test.cpp ${KFR_SRC} ${TEST_SRC}) +add_executable(ebu_test ebu_test.cpp ${KFR_SRC} ) if(USE_SDE) find_program(EMULATOR "sde") @@ -121,7 +116,7 @@ if (NOT IOS) COMMAND ${EMULATOR} ${PROJECT_BINARY_DIR}/bin/intrinsic_test) add_test(NAME dsp_test COMMAND ${EMULATOR} ${PROJECT_BINARY_DIR}/bin/dsp_test) - if (MPFR_FOUND) + if (MPFR_FOUND AND GMP_FOUND) add_test(NAME transcendental_test COMMAND ${EMULATOR} ${PROJECT_BINARY_DIR}/bin/transcendental_test) endif () @@ -137,7 +132,7 @@ if (NOT IOS) add_test(NAME dft_test COMMAND ${EMULATOR} ${PROJECT_BINARY_DIR}/bin/dft_test) - if(ARCH_TESTS) + if (ARCH_TESTS) add_test(NAME generic COMMAND ${EMULATOR} ${PROJECT_BINARY_DIR}/bin/all_tests_generic ) add_test(NAME sse2 COMMAND ${EMULATOR} ${PROJECT_BINARY_DIR}/bin/all_tests_sse2 ) add_test(NAME sse3 COMMAND ${EMULATOR} ${PROJECT_BINARY_DIR}/bin/all_tests_sse3 ) @@ -146,5 +141,5 @@ if (NOT IOS) add_test(NAME avx COMMAND ${EMULATOR} ${PROJECT_BINARY_DIR}/bin/all_tests_avx ) add_test(NAME avx2 COMMAND ${EMULATOR} ${PROJECT_BINARY_DIR}/bin/all_tests_avx2 ) add_test(NAME avx512 COMMAND ${EMULATOR} ${PROJECT_BINARY_DIR}/bin/all_tests_avx512 ) - endif() + endif () endif () diff --git a/tests/cmake/FindGMP.cmake b/tests/cmake/FindGMP.cmake @@ -0,0 +1,5 @@ +find_path(GMP_INCLUDE_DIR NAMES gmp.h) +find_library(GMP_LIBRARIES NAMES gmp libgmp) + +include(FindPackageHandleStandardArgs) +FIND_PACKAGE_HANDLE_STANDARD_ARGS(GMP DEFAULT_MSG GMP_INCLUDE_DIR GMP_LIBRARIES)