123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132 |
- cmake_minimum_required(VERSION 3.9)
- set(ARCH "X86_64" CACHE STRING "Target Architecture")
- #message(CMAKE_SYSTEM_PROCESSOR)
- project(mandel VERSION 1.0.0 DESCRIPTION "library for mandelbrot calculations")
- find_package(OpenCL REQUIRED)
- find_package(OpenMP)
- #set(Boost_DEBUG 1)
- set(Boost_USE_STATIC_LIBS ON)
- find_package(Boost 1.65 REQUIRED)
- set(CMAKE_CXX_STANDARD 17)
- #FILE(GLOB MandelSources src/*.cpp)
- SET(MandelSources
- src/ClGenerators.cpp
- src/CpuGenerators.cpp
- src/Generators.cpp
- src/Mandel.cpp
- src/Hardware.cpp
- src/MandelUtil.cpp
- src/Types.cpp
- src/OpenClCode.cpp
- src/IterationGenerator.cpp
- src/IterationFormula.cpp
- src/IterationCompiler.cpp
- src/IterationIR.cpp
- )
- FILE(GLOB MandelHeaders include/*.h)
- if (ARCH STREQUAL "X86_64" OR ARCH STREQUAL "X86")
- list(APPEND MandelSources src/CpuGeneratorsAVX.cpp src/CpuGeneratorsAVXFMA.cpp src/CpuGeneratorsSSE2.cpp src/CpuGeneratorsAVX512.cpp)
- elseif(ARCH STREQUAL "ARM")
- list(APPEND MandelSources src/CpuGeneratorsNeon.cpp)
- endif()
- # message(${MandelSources})
- add_library(mandel STATIC ${MandelSources})
- FILE(GLOB QdSources qd-2.3.22/src/*.cpp)
- target_compile_definitions(mandel PUBLIC WITH_QD)
- add_library(qd STATIC ${QdSources})
- target_include_directories(qd PUBLIC qd-2.3.22/include qd-2.3.22)
- FILE(GLOB AsmjitSources asmjit/src/asmjit/*/*.cpp)
- add_library(asmjit STATIC ${AsmjitSources})
- target_include_directories(asmjit PUBLIC asmjit/src)
- target_compile_definitions(asmjit PUBLIC NOMINMAX)
- target_compile_definitions(asmjit PUBLIC ASMJIT_STATIC)
- #target_include_directories(mandel PUBLI#C qd-2.3.22/include)
- #target_include_directories(mandel PUBLI#C qd-2.3.22/include)
- target_link_libraries(mandel PUBLIC qd)
- target_link_libraries(mandel PUBLIC asmjit)
- include(CheckIPOSupported)
- check_ipo_supported(RESULT LTO_SUPPORTED)
- if (LTO_SUPPORTED AND WITH_LTO)
- message("Enabling link-time optimization.")
- set_property(TARGET mandel PROPERTY INTERPROCEDURAL_OPTIMIZATION TRUE)
- set_property(TARGET qd PROPERTY INTERPROCEDURAL_OPTIMIZATION TRUE)
- endif()
- if(OPENCL_FOUND)
- target_compile_definitions(mandel PUBLIC WITH_OPENCL)
- target_include_directories(mandel PUBLIC
- "include"
- ${OpenCL_INCLUDE_DIRS}
- )
- link_directories(${OpenCL_LIBRARY})
- else(OPENCL_FOUND)
- include_directories("include")
- endif(OPENCL_FOUND)
- if (APPLE AND OpenCL_FOUND)
- SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -framework OpenCL")
- endif()
- target_compile_definitions(mandel PUBLIC WITH_BOOST)
- if(Boost_FOUND)
- target_compile_definitions(mandel PUBLIC WITH_BOOST)
- target_include_directories(mandel PRIVATE ${Boost_INCLUDE_DIRS})
- target_link_libraries(mandel PRIVATE ${Boost_LIBRARIES})
- endif(Boost_FOUND)
- if (ARCH STREQUAL "X86_64" OR ARCH STREQUAL "X86")
- if (MSVC)
- set_source_files_properties(src/CpuGeneratorsAVX512.cpp PROPERTIES COMPILE_FLAGS /arch:AVX512F)
- else()
- set_source_files_properties(src/CpuGeneratorsAVX512.cpp PROPERTIES COMPILE_FLAGS -mavx512f)
- endif(MSVC)
- if (MSVC)
- set_source_files_properties(src/CpuGeneratorsAVX.cpp PROPERTIES COMPILE_FLAGS /arch:AVX)
- set_source_files_properties(src/CpuGeneratorsAVXFMA.cpp PROPERTIES COMPILE_FLAGS /arch:AVX)
- else()
- set_source_files_properties(src/CpuGeneratorsAVX.cpp PROPERTIES COMPILE_FLAGS -mavx)
- set_source_files_properties(src/JuliaGenerators.cpp PROPERTIES COMPILE_FLAGS -mavx)
- set_source_files_properties(src/CpuGeneratorsAVXFMA.cpp PROPERTIES COMPILE_FLAGS -mavx)
- endif(MSVC)
- if (MSVC)
- set_source_files_properties(src/CpuGeneratorsAVXFMA.cpp PROPERTIES COMPILE_FLAGS /arch:FMA)
- else()
- set_source_files_properties(src/CpuGeneratorsAVXFMA.cpp PROPERTIES COMPILE_FLAGS -mfma)
- endif(MSVC)
- if (MSVC)
- set_source_files_properties(src/CpuGeneratorsSSE2.cpp PROPERTIES COMPILE_FLAGS /arch:SSE2)
- else()
- set_source_files_properties(src/CpuGeneratorsSSE2.cpp PROPERTIES COMPILE_FLAGS -msse2)
- endif(MSVC)
- elseif(ARCH STREQUAL "ARM")
- #set_source_files_properties(src/CpuGeneratorsNeon.cpp PROPERTIES COMPILE_FLAGS -mfpu=neon)
- endif()
- if(OpenMP_CXX_FOUND)
- target_link_libraries(mandel PUBLIC OpenMP::OpenMP_CXX)
- endif()
- if(OpenCL_FOUND)
- target_link_libraries(mandel PUBLIC OpenCL::OpenCL)
- endif()
|