CMakeLists.txt 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  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. find_path(MPFR_INCLUDES
  8. NAMES
  9. mpfr.h
  10. PATHS
  11. $ENV{MPFR_DIR}
  12. ${INCLUDE_INSTALL_DIR}
  13. )
  14. find_library(MPFR_LIBRARIES mpfr PATHS $ENV{MPFR_DIR} ${LIB_INSTALL_DIR})
  15. set(CMAKE_CXX_STANDARD 17)
  16. #FILE(GLOB MandelSources src/*.cpp)
  17. SET(MandelSources
  18. src/ClGenerators.cpp
  19. src/CpuGenerators.cpp
  20. src/Generators.cpp
  21. src/mandel.cpp
  22. src/Hardware.cpp
  23. src/MandelUtil.cpp
  24. )
  25. FILE(GLOB MandelHeaders include/*.h)
  26. if (ARCH STREQUAL "X86_64" OR ARCH STREQUAL "X86")
  27. list(APPEND MandelSources src/CpuGeneratorsAVX.cpp src/CpuGeneratorsSSE2.cpp)
  28. elseif(ARCH STREQUAL "ARM")
  29. list(APPEND MandelSources src/CpuGeneratorsNeon.cpp)
  30. endif()
  31. # message(${MandelSources})
  32. add_library(mandel STATIC ${MandelSources})
  33. if(MPFR_INCLUDES AND MPFR_LIBRARIES)
  34. set(MPFR_FOUND TRUE)
  35. #target_compile_definitions(mandel PUBLIC WITH_MPFR)
  36. endif()
  37. if(OPENCL_FOUND)
  38. target_compile_definitions(mandel PUBLIC WITH_OPENCL)
  39. target_include_directories(mandel PUBLIC
  40. "include"
  41. ${OpenCL_INCLUDE_DIRS}
  42. )
  43. link_directories(${OpenCL_LIBRARY})
  44. else(OPENCL_FOUND)
  45. include_directories("include")
  46. endif(OPENCL_FOUND)
  47. if (APPLE AND OpenCL_FOUND)
  48. SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -framework OpenCL")
  49. endif()
  50. if (ARCH STREQUAL "X86_64" OR ARCH STREQUAL "X86")
  51. if (MSVC)
  52. set_source_files_properties(src/CpuGeneratorsAVX.cpp PROPERTIES COMPILE_FLAGS /arch:AVX)
  53. else()
  54. set_source_files_properties(src/CpuGeneratorsAVX.cpp PROPERTIES COMPILE_FLAGS -mavx)
  55. endif(MSVC)
  56. if (MSVC)
  57. set_source_files_properties(src/CpuGeneratorsSSE2.cpp PROPERTIES COMPILE_FLAGS /arch:SSE2)
  58. else()
  59. set_source_files_properties(src/CpuGeneratorsSSE2.cpp PROPERTIES COMPILE_FLAGS -msse2)
  60. endif(MSVC)
  61. elseif(ARCH STREQUAL "ARM")
  62. #set_source_files_properties(src/CpuGeneratorsNeon.cpp PROPERTIES COMPILE_FLAGS -mfpu=neon)
  63. endif()
  64. if(OpenMP_CXX_FOUND)
  65. target_link_libraries(mandel PUBLIC OpenMP::OpenMP_CXX)
  66. endif()
  67. if(OpenCL_FOUND)
  68. target_link_libraries(mandel PUBLIC OpenCL::OpenCL)
  69. endif()
  70. if(MPFR_FOUND)
  71. target_link_libraries(mandel PUBLIC MPFR_LIBRARIES)
  72. endif()