1*bf2c3715SXin Liproject(BTL) 2*bf2c3715SXin Li 3*bf2c3715SXin Licmake_minimum_required(VERSION 2.6.2) 4*bf2c3715SXin Li 5*bf2c3715SXin Liset(CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/cmake ${Eigen_SOURCE_DIR}/cmake) 6*bf2c3715SXin Liinclude(MacroOptionalAddSubdirectory) 7*bf2c3715SXin Li 8*bf2c3715SXin Lioption(BTL_NOVEC "Disable SSE/Altivec optimizations when possible" OFF) 9*bf2c3715SXin Li 10*bf2c3715SXin Liset(CMAKE_INCLUDE_CURRENT_DIR ON) 11*bf2c3715SXin Li 12*bf2c3715SXin Listring(REGEX MATCH icpc IS_ICPC ${CMAKE_CXX_COMPILER}) 13*bf2c3715SXin Liif(CMAKE_COMPILER_IS_GNUCXX OR IS_ICPC) 14*bf2c3715SXin Li set(CMAKE_CXX_FLAGS "-g0 -O3 -DNDEBUG ${CMAKE_CXX_FLAGS}") 15*bf2c3715SXin Li set(CMAKE_Fortran_FLAGS "-g0 -O3 -DNDEBUG ${CMAKE_Fortran_FLAGS}") 16*bf2c3715SXin Li if(BTL_NOVEC) 17*bf2c3715SXin Li set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DEIGEN_DONT_VECTORIZE") 18*bf2c3715SXin Li endif(BTL_NOVEC) 19*bf2c3715SXin Liendif(CMAKE_COMPILER_IS_GNUCXX OR IS_ICPC) 20*bf2c3715SXin Li 21*bf2c3715SXin Liif(MSVC) 22*bf2c3715SXin Li set(CMAKE_CXX_FLAGS " /O2 /Ot /GL /fp:fast -DNDEBUG") 23*bf2c3715SXin Li# set(CMAKE_Fortran_FLAGS "-g0 -O3 -DNDEBUG") 24*bf2c3715SXin Li if(BTL_NOVEC) 25*bf2c3715SXin Li set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DEIGEN_DONT_VECTORIZE") 26*bf2c3715SXin Li endif(BTL_NOVEC) 27*bf2c3715SXin Liendif(MSVC) 28*bf2c3715SXin Li 29*bf2c3715SXin Liif(IS_ICPC) 30*bf2c3715SXin Li set(CMAKE_CXX_FLAGS "-fast ${CMAKE_CXX_FLAGS}") 31*bf2c3715SXin Li set(CMAKE_Fortran_FLAGS "-fast ${CMAKE_Fortran_FLAGS}") 32*bf2c3715SXin Liendif() 33*bf2c3715SXin Li 34*bf2c3715SXin Liinclude_directories( 35*bf2c3715SXin Li ${PROJECT_SOURCE_DIR}/actions 36*bf2c3715SXin Li ${PROJECT_SOURCE_DIR}/generic_bench 37*bf2c3715SXin Li ${PROJECT_SOURCE_DIR}/generic_bench/utils 38*bf2c3715SXin Li ${PROJECT_SOURCE_DIR}/libs/STL) 39*bf2c3715SXin Li 40*bf2c3715SXin Li# find_package(MKL) 41*bf2c3715SXin Li# if (MKL_FOUND) 42*bf2c3715SXin Li# add_definitions(-DHAVE_MKL) 43*bf2c3715SXin Li# set(DEFAULT_LIBRARIES ${MKL_LIBRARIES}) 44*bf2c3715SXin Li# endif () 45*bf2c3715SXin Li 46*bf2c3715SXin Lifind_library(EIGEN_BTL_RT_LIBRARY rt) 47*bf2c3715SXin Li# if we cannot find it easily, then we don't need it! 48*bf2c3715SXin Liif(NOT EIGEN_BTL_RT_LIBRARY) 49*bf2c3715SXin Li set(EIGEN_BTL_RT_LIBRARY "") 50*bf2c3715SXin Liendif() 51*bf2c3715SXin Li 52*bf2c3715SXin Limacro(BTL_ADD_BENCH targetname) 53*bf2c3715SXin Li 54*bf2c3715SXin Li foreach(_current_var ${ARGN}) 55*bf2c3715SXin Li set(_last_var ${_current_var}) 56*bf2c3715SXin Li endforeach() 57*bf2c3715SXin Li 58*bf2c3715SXin Li set(_sources ${ARGN}) 59*bf2c3715SXin Li list(LENGTH _sources _argn_length) 60*bf2c3715SXin Li 61*bf2c3715SXin Li list(REMOVE_ITEM _sources ON OFF TRUE FALSE) 62*bf2c3715SXin Li 63*bf2c3715SXin Li list(LENGTH _sources _src_length) 64*bf2c3715SXin Li 65*bf2c3715SXin Li if (${_argn_length} EQUAL ${_src_length}) 66*bf2c3715SXin Li set(_last_var ON) 67*bf2c3715SXin Li endif () 68*bf2c3715SXin Li 69*bf2c3715SXin Li option(BUILD_${targetname} "Build benchmark ${targetname}" ${_last_var}) 70*bf2c3715SXin Li 71*bf2c3715SXin Li if(BUILD_${targetname}) 72*bf2c3715SXin Li add_executable(${targetname} ${_sources}) 73*bf2c3715SXin Li add_test(${targetname} "${targetname}") 74*bf2c3715SXin Li target_link_libraries(${targetname} ${DEFAULT_LIBRARIES} ${EIGEN_BTL_RT_LIBRARY}) 75*bf2c3715SXin Li endif(BUILD_${targetname}) 76*bf2c3715SXin Li 77*bf2c3715SXin Liendmacro(BTL_ADD_BENCH) 78*bf2c3715SXin Li 79*bf2c3715SXin Limacro(btl_add_target_property target prop value) 80*bf2c3715SXin Li 81*bf2c3715SXin Li if(BUILD_${target}) 82*bf2c3715SXin Li get_target_property(previous ${target} ${prop}) 83*bf2c3715SXin Li if(NOT previous) 84*bf2c3715SXin Li set(previous "") 85*bf2c3715SXin Li endif() 86*bf2c3715SXin Li set_target_properties(${target} PROPERTIES ${prop} "${previous} ${value}") 87*bf2c3715SXin Li endif() 88*bf2c3715SXin Li 89*bf2c3715SXin Liendmacro() 90*bf2c3715SXin Li 91*bf2c3715SXin Lienable_testing() 92*bf2c3715SXin Li 93*bf2c3715SXin Liadd_subdirectory(libs/eigen3) 94*bf2c3715SXin Liadd_subdirectory(libs/eigen2) 95*bf2c3715SXin Liadd_subdirectory(libs/tensors) 96*bf2c3715SXin Liadd_subdirectory(libs/BLAS) 97*bf2c3715SXin Liadd_subdirectory(libs/ublas) 98*bf2c3715SXin Liadd_subdirectory(libs/gmm) 99*bf2c3715SXin Liadd_subdirectory(libs/mtl4) 100*bf2c3715SXin Liadd_subdirectory(libs/blitz) 101*bf2c3715SXin Liadd_subdirectory(libs/tvmet) 102*bf2c3715SXin Liadd_subdirectory(libs/STL) 103*bf2c3715SXin Liadd_subdirectory(libs/blaze) 104*bf2c3715SXin Li 105*bf2c3715SXin Liadd_subdirectory(data) 106*bf2c3715SXin Li 107*bf2c3715SXin Li 108