CMakeLists.txt 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  1. cmake_minimum_required(VERSION 3.9)
  2. set(ARCH "X86_64" CACHE STRING "Target Architecture")
  3. #message(CMAKE_SYSTEM_PROCESSOR)
  4. project(mandel VERSION 1.0.0 DESCRIPTION "library for mandelbrot calculations")
  5. find_package(OpenCL)
  6. find_package(OpenMP)
  7. #set(Boost_DEBUG 1)
  8. find_package(Boost 1.53)
  9. find_path(MPFR_INCLUDES
  10. NAMES
  11. mpfr.h
  12. PATHS
  13. $ENV{MPFR_DIR}
  14. ${INCLUDE_INSTALL_DIR}
  15. )
  16. find_library(MPFR_LIBRARIES mpfr PATHS $ENV{MPFR_DIR} ${LIB_INSTALL_DIR})
  17. set(CMAKE_CXX_STANDARD 17)
  18. #FILE(GLOB MandelSources src/*.cpp)
  19. SET(MandelSources
  20. src/ClGenerators.cpp
  21. src/CpuGenerators.cpp
  22. src/Generators.cpp
  23. src/mandel.cpp
  24. src/Hardware.cpp
  25. src/MandelUtil.cpp
  26. )
  27. FILE(GLOB MandelHeaders include/*.h)
  28. if (ARCH STREQUAL "X86_64" OR ARCH STREQUAL "X86")
  29. list(APPEND MandelSources src/CpuGeneratorsAVX.cpp src/CpuGeneratorsSSE2.cpp)
  30. elseif(ARCH STREQUAL "ARM")
  31. list(APPEND MandelSources src/CpuGeneratorsNeon.cpp)
  32. endif()
  33. # message(${MandelSources})
  34. add_library(mandel STATIC ${MandelSources})
  35. if(MPFR_INCLUDES AND MPFR_LIBRARIES)
  36. set(MPFR_FOUND TRUE)
  37. #target_compile_definitions(mandel PUBLIC WITH_MPFR)
  38. endif()
  39. if(OPENCL_FOUND)
  40. target_compile_definitions(mandel PUBLIC WITH_OPENCL)
  41. target_include_directories(mandel PUBLIC
  42. "include"
  43. ${OpenCL_INCLUDE_DIRS}
  44. )
  45. link_directories(${OpenCL_LIBRARY})
  46. else(OPENCL_FOUND)
  47. include_directories("include")
  48. endif(OPENCL_FOUND)
  49. if (APPLE AND OpenCL_FOUND)
  50. SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -framework OpenCL")
  51. endif()
  52. target_compile_definitions(mandel PUBLIC WITH_BOOST)
  53. if(Boost_FOUND)
  54. target_compile_definitions(mandel PUBLIC WITH_BOOST)
  55. target_include_directories(mandel PRIVATE ${Boost_INCLUDE_DIRS})
  56. endif(Boost_FOUND)
  57. if (ARCH STREQUAL "X86_64" OR ARCH STREQUAL "X86")
  58. if (MSVC)
  59. set_source_files_properties(src/CpuGeneratorsAVX.cpp PROPERTIES COMPILE_FLAGS /arch:AVX)
  60. else()
  61. set_source_files_properties(src/CpuGeneratorsAVX.cpp PROPERTIES COMPILE_FLAGS -mavx)
  62. endif(MSVC)
  63. if (MSVC)
  64. set_source_files_properties(src/CpuGeneratorsSSE2.cpp PROPERTIES COMPILE_FLAGS /arch:SSE2)
  65. else()
  66. set_source_files_properties(src/CpuGeneratorsSSE2.cpp PROPERTIES COMPILE_FLAGS -msse2)
  67. endif(MSVC)
  68. elseif(ARCH STREQUAL "ARM")
  69. #set_source_files_properties(src/CpuGeneratorsNeon.cpp PROPERTIES COMPILE_FLAGS -mfpu=neon)
  70. endif()
  71. if(OpenMP_CXX_FOUND)
  72. target_link_libraries(mandel PUBLIC OpenMP::OpenMP_CXX)
  73. endif()
  74. if(OpenCL_FOUND)
  75. target_link_libraries(mandel PUBLIC OpenCL::OpenCL)
  76. endif()
  77. if(MPFR_FOUND)
  78. target_link_libraries(mandel PUBLIC MPFR_LIBRARIES)
  79. endif()