cmake_minimum_required( VERSION 3.12.4 ) project( RTSN LANGUAGES CXX VERSION 0.0.1 ) set( CMAKE_CXX_STANDARD 20 ) set( CMAKE_CXX_STANDARD_REQUIRED ON ) set( CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -O3 -march=native" ) set( CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS_RELWITHDEBINFO} -O3 -march=native -pg -no-pie" ) set( CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -O0 -Wall -Werror" ) set( CMAKE_RUNTIME_OUTPUT_DIRECTORY "${CMAKE_SOURCE_DIR}/bin" ) file( GLOB_RECURSE SRCS RELATIVE ${CMAKE_SOURCE_DIR} "src/*.cpp" ) include_directories( ${CMAKE_SOURCE_DIR}/include ) add_executable( ${CMAKE_PROJECT_NAME} ${SRCS} ) find_package( OpenMP REQUIRED ) if( OPENMP_FOUND ) set( CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${OpenMP_C_FLAGS}" ) set( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${OpenMP_CXX_FLAGS}" ) endif() find_package( MPI REQUIRED ) include_directories( ${MPI_INCLUDE_PATH} ) find_package( LAPACK REQUIRED ) include_directories( ${LAPACK_INCLUDE_DIR} ) add_definitions( '-DBLAZE_USE_SHARED_MEMORY_PARALLELIZATION=0' ) add_definitions( '-DBLAZE_BLAS_MODE=1' ) message( "Automatic Cache Size Configuration" ) set(flag 1) if (WIN32) execute_process(COMMAND wmic cpu get L3CacheSize OUTPUT_VARIABLE tmp RESULT_VARIABLE flag ERROR_QUIET) if (flag) execute_process(COMMAND wmic cpu get L2CacheSize OUTPUT_VARIABLE tmp RESULT_VARIABLE flag ERROR_QUIET) endif (flag) if (flag) execute_process(COMMAND wmic cpu get L1CacheSize OUTPUT_VARIABLE tmp RESULT_VARIABLE flag ERROR_QUIET) endif (flag) endif (WIN32) if (UNIX) execute_process(COMMAND cat /sys/devices/system/cpu/cpu0/cache/index3/size OUTPUT_VARIABLE tmp RESULT_VARIABLE flag ERROR_QUIET) if (flag) execute_process(COMMAND cat /sys/devices/system/cpu/cpu0/cache/index2/size OUTPUT_VARIABLE tmp RESULT_VARIABLE flag ERROR_QUIET) endif (flag) if (flag) execute_process(COMMAND cat /sys/devices/system/cpu/cpu0/cache/index1/size OUTPUT_VARIABLE tmp RESULT_VARIABLE flag ERROR_QUIET) endif (flag) endif (UNIX) if (APPLE) execute_process(COMMAND sysctl -n hw.l3cachesize OUTPUT_VARIABLE tmp RESULT_VARIABLE flag ERROR_QUIET) if (flag) execute_process(COMMAND sysctl -n hw.l2cachesize OUTPUT_VARIABLE tmp RESULT_VARIABLE flag ERROR_QUIET) endif (flag) if (flag) execute_process(COMMAND sysctl -n hw.l1icachesize OUTPUT_VARIABLE tmp RESULT_VARIABLE flag ERROR_QUIET) endif (flag) if (flag EQUAL 0) math(EXPR tmp ${tmp}/1024) # If successful convert to kibibytes to comply with rest endif (flag EQUAL 0) endif (APPLE) if (flag) message(WARNING "Cache size not found automatically. Using default value as cache size.") set(tmp "3072") endif (flag) string( REGEX MATCH "([0-9][0-9]+)" tmp ${tmp} ) math( EXPR BLAZE_CACHE_SIZE ${tmp}*1024 ) add_definitions( '-DBLAZE_CACHE_SIZE=${BLAZE_CACHE_SIZE}UL' ) message( "Configuring Cache Size: ${BLAZE_CACHE_SIZE}" ) include_directories( ${CMAKE_SOURCE_DIR}/ext/blaze ) find_package( VTK REQUIRED COMPONENTS vtkIOGeometry vtkFiltersCore ) include_directories( ${CMAKE_SOURCE_DIR}/ext/cpptoml/include ) include_directories( ${CMAKE_SOURCE_DIR}/ext/spdlog/include ) execute_process( COMMAND git rev-parse HEAD WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} OUTPUT_VARIABLE GIT_HASH OUTPUT_STRIP_TRAILING_WHITESPACE ) add_definitions( '-DGIT_HASH="${GIT_HASH}"' ) set( CORE_LIBRARIES ${LAPACK_LIBRARIES} ${MPI_LIBRARIES} ${VTK_LIBRARIES} -lstdc++fs ) target_link_libraries( ${CMAKE_PROJECT_NAME} ${CORE_LIBRARIES} ) if( BUILD_TESTING ) add_subdirectory( ${CMAKE_SOURCE_DIR}/ext/Catch2 ) include_directories( ${CMAKE_SOURCE_DIR}/ext/Catch2/single_include/catch2 ) file( GLOB_RECURSE TEST_SRCS RELATIVE ${CMAKE_SOURCE_DIR} "tests/*.cpp" ) list( REMOVE_ITEM SRCS "src/main.cpp" ) add_executable( unit_tests ${SRCS} ${TEST_SRCS} ) target_link_libraries( unit_tests ${CORE_LIBRARIES} ) endif()