|
@@ -1,15 +1,31 @@
|
|
cmake_minimum_required(VERSION 3.9)
|
|
cmake_minimum_required(VERSION 3.9)
|
|
|
|
|
|
set(CMAKE_CXX_STANDARD 17)
|
|
set(CMAKE_CXX_STANDARD 17)
|
|
|
|
+OPTION(ARCH "Target Architecture" X86_64)
|
|
project(mandel VERSION 1.0.0 DESCRIPTION "library for mandelbrot calculations")
|
|
project(mandel VERSION 1.0.0 DESCRIPTION "library for mandelbrot calculations")
|
|
|
|
|
|
-find_package(OpenCL REQUIRED)
|
|
|
|
|
|
+find_package(OpenCL)
|
|
find_package(OpenMP)
|
|
find_package(OpenMP)
|
|
|
|
|
|
|
|
|
|
-FILE(GLOB MandelSources src/*.cpp
|
|
|
|
-FILE(GLOB MandelHeaders include/*.h))
|
|
|
|
|
|
+#FILE(GLOB MandelSources src/*.cpp)
|
|
|
|
+SET(MandelSources
|
|
|
|
+ src/ClGenerators.cpp
|
|
|
|
+ src/CpuGenerators.cpp
|
|
|
|
+ src/Generators.cpp
|
|
|
|
+ src/mandel.cpp
|
|
|
|
+ src/CpuGeneratorsAVX.cpp
|
|
|
|
+ src/CpuGeneratorsSSE2.cpp
|
|
|
|
+ src/Hardware.cpp
|
|
|
|
+ src/MandelUtil.cpp
|
|
|
|
+)
|
|
|
|
+FILE(GLOB MandelHeaders include/*.h)
|
|
|
|
+
|
|
|
|
+if (NOT (ARCH EQUAL X86_64 OR ARCH EQUAL X86))
|
|
|
|
+ list(REMOVE_ITEM MandelSources src/CpuGeneratorsAVX.cpp src/CpuGeneratorsSSE2.cpp)
|
|
|
|
+endif()
|
|
|
|
|
|
|
|
+ message(${MandelSources})
|
|
|
|
|
|
include_directories(
|
|
include_directories(
|
|
"include"
|
|
"include"
|
|
@@ -17,28 +33,31 @@ include_directories(
|
|
)
|
|
)
|
|
link_directories(${OpenCL_LIBRARY})
|
|
link_directories(${OpenCL_LIBRARY})
|
|
|
|
|
|
-if (APPLE)
|
|
|
|
|
|
+if (APPLE AND OpenCL_FOUND)
|
|
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -framework OpenCL")
|
|
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -framework OpenCL")
|
|
endif()
|
|
endif()
|
|
|
|
|
|
-if (MSVC)
|
|
|
|
- set_source_files_properties(src/CpuGeneratorsAVX.cpp PROPERTIES COMPILE_FLAGS /arch:AVX)
|
|
|
|
-else()
|
|
|
|
- set_source_files_properties(src/CpuGeneratorsAVX.cpp PROPERTIES COMPILE_FLAGS -mavx)
|
|
|
|
-endif(MSVC)
|
|
|
|
|
|
+if (${ARCH} EQUAL X86_64 OR ${ARCH} EQUAL X86)
|
|
|
|
+ if (MSVC)
|
|
|
|
+ set_source_files_properties(src/CpuGeneratorsAVX.cpp PROPERTIES COMPILE_FLAGS /arch:AVX)
|
|
|
|
+ else()
|
|
|
|
+ set_source_files_properties(src/CpuGeneratorsAVX.cpp PROPERTIES COMPILE_FLAGS -mavx)
|
|
|
|
+ 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)
|
|
|
|
|
|
+ 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)
|
|
|
|
+endif()
|
|
|
|
|
|
add_library(mandel STATIC ${MandelSources})
|
|
add_library(mandel STATIC ${MandelSources})
|
|
|
|
|
|
|
|
|
|
if(OpenMP_CXX_FOUND)
|
|
if(OpenMP_CXX_FOUND)
|
|
- target_link_libraries(mandel PUBLIC OpenCL::OpenCL OpenMP::OpenMP_CXX)
|
|
|
|
-else()
|
|
|
|
|
|
+ target_link_libraries(mandel PUBLIC OpenMP::OpenMP_CXX)
|
|
|
|
+endif()
|
|
|
|
+if(OpenCL_FOUND)
|
|
target_link_libraries(mandel OpenCL::OpenCL)
|
|
target_link_libraries(mandel OpenCL::OpenCL)
|
|
endif()
|
|
endif()
|