CMakeLists.txt 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123
  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. set(Boost_USE_STATIC_LIBS ON)
  9. find_package(Boost 1.53)
  10. find_path(MPFR_INCLUDES
  11. NAMES
  12. mpfr.h
  13. PATHS
  14. $ENV{MPFR_DIR}
  15. ${INCLUDE_INSTALL_DIR}
  16. )
  17. find_library(MPFR_LIBRARIES mpfr PATHS $ENV{MPFR_DIR} ${LIB_INSTALL_DIR})
  18. set(CMAKE_CXX_STANDARD 17)
  19. #FILE(GLOB MandelSources src/*.cpp)
  20. SET(MandelSources
  21. src/ClGenerators.cpp
  22. src/CpuGenerators.cpp
  23. src/Generators.cpp
  24. src/Mandel.cpp
  25. src/Hardware.cpp
  26. src/MandelUtil.cpp
  27. src/Types.cpp
  28. )
  29. FILE(GLOB MandelHeaders include/*.h)
  30. if (ARCH STREQUAL "X86_64" OR ARCH STREQUAL "X86")
  31. list(APPEND MandelSources src/CpuGeneratorsAVX.cpp src/CpuGeneratorsSSE2.cpp)
  32. elseif(ARCH STREQUAL "ARM")
  33. list(APPEND MandelSources src/CpuGeneratorsNeon.cpp)
  34. endif()
  35. # message(${MandelSources})
  36. add_library(mandel STATIC ${MandelSources})
  37. FILE(GLOB QdSources qd-2.3.22/src/*.cpp)
  38. target_compile_definitions(mandel PUBLIC WITH_QD)
  39. add_library(qd STATIC ${QdSources})
  40. target_include_directories(qd PUBLIC qd-2.3.22/include qd-2.3.22)
  41. #target_include_directories(mandel PUBLI#C qd-2.3.22/include)
  42. target_link_libraries(mandel PUBLIC qd)
  43. include(CheckIPOSupported)
  44. check_ipo_supported(RESULT LTO_SUPPORTED)
  45. if (LTO_SUPPORTED AND WITH_LTO)
  46. message("Enabling link-time optimization.")
  47. set_property(TARGET mandel PROPERTY INTERPROCEDURAL_OPTIMIZATION TRUE)
  48. set_property(TARGET qd PROPERTY INTERPROCEDURAL_OPTIMIZATION TRUE)
  49. endif()
  50. if(MPFR_INCLUDES AND MPFR_LIBRARIES)
  51. set(MPFR_FOUND TRUE)
  52. #target_compile_definitions(mandel PUBLIC WITH_MPFR)
  53. endif()
  54. if(OPENCL_FOUND)
  55. target_compile_definitions(mandel PUBLIC WITH_OPENCL)
  56. target_include_directories(mandel PUBLIC
  57. "include"
  58. ${OpenCL_INCLUDE_DIRS}
  59. )
  60. link_directories(${OpenCL_LIBRARY})
  61. else(OPENCL_FOUND)
  62. include_directories("include")
  63. endif(OPENCL_FOUND)
  64. if (APPLE AND OpenCL_FOUND)
  65. SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -framework OpenCL")
  66. endif()
  67. target_compile_definitions(mandel PUBLIC WITH_BOOST)
  68. if(Boost_FOUND)
  69. target_compile_definitions(mandel PUBLIC WITH_BOOST)
  70. target_include_directories(mandel PRIVATE ${Boost_INCLUDE_DIRS})
  71. target_link_libraries(mandel PRIVATE ${Boost_LIBRARIES})
  72. endif(Boost_FOUND)
  73. if (ARCH STREQUAL "X86_64" OR ARCH STREQUAL "X86")
  74. if (MSVC)
  75. set_source_files_properties(src/CpuGeneratorsAVX.cpp PROPERTIES COMPILE_FLAGS /arch:AVX)
  76. else()
  77. set_source_files_properties(src/CpuGeneratorsAVX.cpp PROPERTIES COMPILE_FLAGS -mavx)
  78. endif(MSVC)
  79. if (MSVC)
  80. set_source_files_properties(src/CpuGeneratorsSSE2.cpp PROPERTIES COMPILE_FLAGS /arch:SSE2)
  81. else()
  82. set_source_files_properties(src/CpuGeneratorsSSE2.cpp PROPERTIES COMPILE_FLAGS -msse2)
  83. endif(MSVC)
  84. elseif(ARCH STREQUAL "ARM")
  85. #set_source_files_properties(src/CpuGeneratorsNeon.cpp PROPERTIES COMPILE_FLAGS -mfpu=neon)
  86. endif()
  87. if(OpenMP_CXX_FOUND)
  88. target_link_libraries(mandel PUBLIC OpenMP::OpenMP_CXX)
  89. endif()
  90. if(OpenCL_FOUND)
  91. target_link_libraries(mandel PUBLIC OpenCL::OpenCL)
  92. endif()
  93. if(MPFR_FOUND)
  94. target_link_libraries(mandel PUBLIC MPFR_LIBRARIES)
  95. endif()