11###############################################################################
22# APR - Adaptive Particle Representation
33###############################################################################
4- cmake_minimum_required (VERSION 3.9)
5- project (LibAPR DESCRIPTION "Adaptive Particle Representation library" )
4+ cmake_minimum_required (VERSION 3.10)
5+ project (APR DESCRIPTION "Adaptive Particle Representation library" )
6+
7+ message (STATUS "CMAKE VERSION ${CMAKE_VERSION} " )
68
79set (CMAKE_CXX_STANDARD 14)
810set (CMAKE_CXX_STANDARD_REQUIRED ON )
911
1012# APR build options:
1113option (APR_INSTALL "Install APR library" OFF )
12- option (APR_BUILD_SHARED_LIB "Builds shared library" ON )
13- option (APR_BUILD_STATIC_LIB "Builds static library" OFF )
14+ option (APR_BUILD_SHARED_LIB "Builds shared library" OFF )
15+ option (APR_BUILD_STATIC_LIB "Builds static library" ON )
1416option (APR_BUILD_EXAMPLES "Build APR examples" OFF )
1517option (APR_USE_LIBTIFF "Use LibTIFF" ON )
1618option (APR_TESTS "Build APR tests" OFF )
17- option (APR_PREFER_EXTERNAL_GTEST "When found, use the installed GTEST libs instead of included sources" OFF )
18- option (APR_PREFER_EXTERNAL_BLOSC "When found, use the installed BLOSC libs instead of included sources" OFF )
19+ option (APR_PREFER_EXTERNAL_GTEST "When found, use the installed GTEST libs instead of included sources" ON )
20+ option (APR_PREFER_EXTERNAL_BLOSC "When found, use the installed BLOSC libs instead of included sources" ON )
1921option (APR_USE_CUDA "should APR use CUDA? (experimental - under development)" OFF )
2022option (APR_USE_OPENMP "should APR use OpenMP?" ON )
2123option (APR_BENCHMARK "add benchmarking code" OFF )
@@ -77,7 +79,6 @@ if(APR_DENOISE)
7779
7880endif ()
7981
80-
8182if (APR_USE_LIBTIFF)
8283 find_package (TIFF)
8384 set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DHAVE_LIBTIFF" )
@@ -86,17 +87,22 @@ endif()
8687
8788# Handle OpenMP
8889find_package (OpenMP)
90+
8991if (NOT OPENMP_FOUND OR NOT APR_USE_OPENMP)
9092 message (WARNING "OpenMP support not found or disabled with current compiler. While APR can compile like this, performance might not be optimal. Please see README.md for instructions." )
93+ set (OPENMP_LINK "" )
9194else ()
95+ set (OPENMP_LINK "OpenMP::OpenMP_CXX" )
9296 set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DHAVE_OPENMP ${OpenMP_C_FLAGS} " )
9397 set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DHAVE_OPENMP ${OpenMP_CXX_FLAGS} " )
9498endif ()
99+
95100include_directories (${HDF5_INCLUDE_DIRS} ${ZLIB_INCLUDE_DIRS} ${TIFF_INCLUDE_DIR} )
96101
97102if (APR_PREFER_EXTERNAL_BLOSC)
98103 find_package (BLOSC)
99104endif ()
105+
100106if (BLOSC_FOUND)
101107 message (STATUS "APR: blosc found, using external blosc" )
102108 include_directories (${BLOSC_INCLUDE_DIR} )
@@ -117,7 +123,7 @@ else()
117123endif ()
118124
119125# Add submodule GLM (include files only)
120- include_directories (" external/glm" )
126+ include_directories (external/glm)
121127
122128#message(STATUS "---------------------- VARS BEG ---------------------")
123129#get_cmake_property(_variableNames VARIABLES)
@@ -132,18 +138,49 @@ include_directories("external/glm")
132138# If you ever want to compile with Intel's icc (or any other compiler) provide
133139# compiler names/paths in cmake command like this:
134140# CC="icc" CXX="icc" CXXFLAGS="-O3" cmake -DAPR_TESTS=1
135- set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++14 " )
136- if (CMAKE_COMPILER_IS_GNUCC)
137- set (CMAKE_CXX_FLAGS_RELEASE "-O4 -ffast-math" )
138- set (CMAKE_CXX_FLAGS_DEBUG "-O0 -g -Wall -pedantic" )
139- set (CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Bdynamic" )
140- if (NOT WIN32 )
141- set (CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -ldl -lz" )
141+
142+ if (WIN32 )
143+
144+ set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DWIN_COMPILE" )
145+ set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DWIN_COMPILE" )
146+
147+ if (CMAKE_CXX_COMPILER_ID MATCHES "Clang" )
148+
149+ message (STATUS "Compiling on windows with CLANG!" )
150+ set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Xclang -fcxx-exceptions" )
151+
152+ set (CMAKE_CXX_FLAGS_DEBUG "/MDd /Z7" )
153+ set (CMAKE_CXX_FLAGS_RELEASE "/MD /EHsc /std:c++17 /arch:AVX2 -Xclang -O3 /nologo /fp:fast" ) #-flto=thin -march=native /O2 /Ob2
154+
155+ endif ()
156+
157+ if (CMAKE_CXX_COMPILER_ID MATCHES "MSVC" )
158+ message (STATUS "Compiling on windows with MSVC!" )
159+
160+ set (CMAKE_CXX_FLAGS_RELEASE "/MD /EHsc /std:c++17 /arch:AVX2 /O2 /Ob2 /nologo /fp:fast" )
161+ set (CMAKE_CXX_FLAGS_DEBUG "/MDd /Z7" )
162+
163+ set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DWIN_VS" )
164+ set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DWIN_VS" )
165+
166+ endif ()
167+
168+
169+ else ()
170+ set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++14 " )
171+
172+ if (CMAKE_COMPILER_IS_GNUCC)
173+ set (CMAKE_CXX_FLAGS_RELEASE "-O4 -ffast-math" )
174+ set (CMAKE_CXX_FLAGS_DEBUG "-O0 -g -Wall -pedantic" )
175+ set (CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Bdynamic" )
176+ if (NOT WIN32 )
177+ set (CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -ldl -lz" )
178+ endif ()
179+ elseif (CMAKE_CXX_COMPILER_ID MATCHES "Clang" )
180+ set (CMAKE_CXX_FLAGS_RELEASE "-O3 -ffast-math" )
181+ set (CMAKE_CXX_FLAGS_DEBUG "-O0 -g -Wall -pedantic" )
182+ set (CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -lz" )
142183 endif ()
143- elseif (CMAKE_CXX_COMPILER_ID MATCHES "Clang" )
144- set (CMAKE_CXX_FLAGS_RELEASE "-O3 -ffast-math" )
145- set (CMAKE_CXX_FLAGS_DEBUG "-O0 -g -Wall -pedantic" )
146- set (CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -lz" )
147184endif ()
148185
149186if (APR_BENCHMARK)
@@ -156,14 +193,15 @@ endif()
156193# Generate APR library
157194###############################################################################
158195
159- set (LIBRARY_NAME apr )
196+ set (LIBRARY_NAME APR )
160197
161198include_directories (src)
162199
163200set (SOURCE_FILES src/io/blosc_filter.c src/io/hdf5functions_blosc.cpp)
164- # set(SOURCE_FILES_RAYCAST src/numerics/APRRaycaster .cpp src/vis/Camera .cpp src/vis/Object .cpp src/vis/RaytracedObject .cpp)
201+ set (SOURCE_FILES_RAYCAST src/vis/Camera .cpp src/vis/Object .cpp src/vis/RaytracedObject .cpp src/vis/RaycastUtils .cpp)
165202
166203add_library (aprObjLib OBJECT ${SOURCE_FILES} ${SOURCE_FILES_RAYCAST} )
204+ set_property (TARGET aprObjLib PROPERTY POSITION_INDEPENDENT_CODE ON )
167205
168206if (APR_USE_CUDA)
169207 message (STATUS "APR: Building CUDA for APR" )
@@ -204,11 +242,16 @@ if(APR_BUILD_STATIC_LIB)
204242 set_target_properties (${STATIC_TARGET_NAME} PROPERTIES CUDA_SEPARABLE_COMPILATION OFF )
205243 target_include_directories (${STATIC_TARGET_NAME} PUBLIC $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR} /src> $<BUILD_INTERFACE:${PROJECT_BINARY_DIR} >)
206244
245+ target_link_libraries (${STATIC_TARGET_NAME} PRIVATE ${HDF5_LIBRARIES} ${TIFF_LIBRARIES} ${CUDA_CUDART_LIBRARY} ${ZLIB_LIBRARIES} )
246+
207247 # generate fat static library by adding dependencies
208248 if (NOT BLOSC_FOUND)
209249 include (cmake/AddStaticLibs.cmake)
210- addStaticLibs(${STATIC_TARGET_NAME} blosc_static)
250+ addStaticLibs(${STATIC_TARGET_NAME} blosc_static) #this is not working currently for clang-cl please use external.
251+ else ()
252+ target_link_libraries (${STATIC_TARGET_NAME} PRIVATE ${BLOSC_LIBRARIES} ${ZLIB_LIBRARIES} )
211253 endif ()
254+
212255endif ()
213256
214257if (APR_BUILD_SHARED_LIB)
@@ -223,7 +266,7 @@ if(APR_BUILD_SHARED_LIB)
223266 set_property (TARGET ${SHARED_TARGET_NAME} PROPERTY VERSION ${APR_VERSION_STRING} )
224267 set_property (TARGET ${SHARED_TARGET_NAME} PROPERTY SOVERSION ${APR_VERSION_MAJOR} )
225268
226- target_link_libraries (${SHARED_TARGET_NAME} PRIVATE ${HDF5_LIBRARIES} ${TIFF_LIBRARIES} ${CUDA_CUDART_LIBRARY} ${ZLIB_LIBRARIES} )
269+ target_link_libraries (${SHARED_TARGET_NAME} PRIVATE ${HDF5_LIBRARIES} ${TIFF_LIBRARIES} ${CUDA_CUDART_LIBRARY} ${ZLIB_LIBRARIES} )
227270 if (BLOSC_FOUND)
228271 target_link_libraries (${SHARED_TARGET_NAME} PRIVATE ${BLOSC_LIBRARIES} ${ZLIB_LIBRARIES} )
229272 else ()
@@ -263,7 +306,7 @@ if(APR_INSTALL)
263306 install (FILES ${PROJECT_BINARY_DIR} /ConfigAPR.h COMPONENT DEV DESTINATION ${INSTALL_INCLUDE_PROJECT_DIR} /io)
264307 install (FILES ${PROJECT_BINARY_DIR} /ConfigAPR.h COMPONENT DEV DESTINATION ${INSTALL_INCLUDE_PROJECT_DIR} )
265308
266- set (APR_TARGETS LibAprTargets )
309+ set (APR_TARGETS LibAPRTargets )
267310 install (TARGETS ${SHARED_TARGET_NAME} ${STATIC_TARGET_NAME}
268311 EXPORT ${APR_TARGETS}
269312 LIBRARY DESTINATION ${INSTALL_LIB_DIR}
@@ -274,18 +317,18 @@ if(APR_INSTALL)
274317 configure_file ("${CMAKE_CURRENT_SOURCE_DIR} /cmake/apr.pc.in" "${CMAKE_CURRENT_BINARY_DIR} /apr.pc" @ONLY)
275318 install (FILES "${CMAKE_CURRENT_BINARY_DIR} /apr.pc" DESTINATION lib/pkgconfig COMPONENT DEV)
276319
277- # AprTargets
320+ # APRTargets
278321 set (APR_NAMESPACE ${LIBRARY_NAME} ::)
279- export ( EXPORT ${APR_TARGETS} FILE "${CMAKE_CURRENT_BINARY_DIR} /AprTargets .cmake" NAMESPACE ${APR_NAMESPACE} )
280- install (EXPORT ${APR_TARGETS} FILE AprTargets .cmake NAMESPACE ${APR_NAMESPACE} DESTINATION ${INSTALL_CMAKE_DIR} )
322+ export ( EXPORT ${APR_TARGETS} FILE "${CMAKE_CURRENT_BINARY_DIR} /APRTargets .cmake" NAMESPACE ${APR_NAMESPACE} )
323+ install (EXPORT ${APR_TARGETS} FILE APRTargets .cmake NAMESPACE ${APR_NAMESPACE} DESTINATION ${INSTALL_CMAKE_DIR} )
281324
282- # AprConfig
283- configure_file (cmake/AprConfig.cmake "${CMAKE_CURRENT_BINARY_DIR} /AprConfig .cmake" @ONLY)
284- install (FILES ${CMAKE_CURRENT_BINARY_DIR} /AprConfig .cmake ${CMAKE_CURRENT_BINARY_DIR} /AprConfigVersion .cmake DESTINATION ${INSTALL_CMAKE_DIR} COMPONENT DEV)
325+ # APRConfig
326+ configure_file (cmake/AprConfig.cmake "${CMAKE_CURRENT_BINARY_DIR} /APRConfig .cmake" @ONLY)
327+ install (FILES ${CMAKE_CURRENT_BINARY_DIR} /APRConfig .cmake ${CMAKE_CURRENT_BINARY_DIR} /APRConfigVersion .cmake DESTINATION ${INSTALL_CMAKE_DIR} COMPONENT DEV)
285328
286- # AprConfigVersion
329+ # APRConfigVersion
287330 include (CMakePackageConfigHelpers)
288- write_basic_package_version_file("${CMAKE_CURRENT_BINARY_DIR} /AprConfigVersion .cmake" VERSION ${APR_VERSION_STRING} COMPATIBILITY AnyNewerVersion)
331+ write_basic_package_version_file("${CMAKE_CURRENT_BINARY_DIR} /APRConfigVersion .cmake" VERSION ${APR_VERSION_STRING} COMPATIBILITY AnyNewerVersion)
289332
290333 # uninstall
291334 configure_file ("${CMAKE_CURRENT_SOURCE_DIR} /cmake/cmake-uninstall.cmake.in"
0 commit comments