project(KFParticle) set(CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake") find_package(Root) macro(add_target_property _target _prop _value) get_target_property(_oldprop "${_target}" ${_prop}) if(NOT _oldprop) set_target_properties("${_target}" PROPERTIES ${_prop} "${_value}") else(NOT _oldprop) set_target_properties("${_target}" PROPERTIES ${_prop} "${_oldprop} ${_value}") endif(NOT _oldprop) endmacro(add_target_property) if(CMAKE_COMPILER_IS_GNUCXX) ################################################################################################## # GCC # ################################################################################################## set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -W -Wall -Wimplicit -Wswitch -Wformat -Wchar-subscripts -Wparentheses -Wmultichar -Wtrigraphs -Wpointer-arith -Wcast-align -Wreturn-type -Wno-unused-function -ansi -pedantic -Wno-long-long -Wno-variadic-macros -msse -msse2 -Wshadow -fno-threadsafe-statics") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -W -Wall -Wimplicit -Wswitch -Wformat -Wchar-subscripts -Wparentheses -Wmultichar -Wtrigraphs -Wpointer-arith -Wcast-align -Wreturn-type -Wno-unused-function -ansi -pedantic -Wno-long-long -Wno-variadic-macros -msse -msse2 -Wshadow -fno-threadsafe-statics") set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -DTBB_DO_ASSERT=1") set(CMAKE_CXX_FLAGS_MINSIZEREL "${CMAKE_CXX_FLAGS_MINSIZEREL}") set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -O3") set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS_RELWITHDEBINFO} -O3") set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -DTBB_DO_ASSERT=1") set(CMAKE_C_FLAGS_MINSIZEREL "${CMAKE_C_FLAGS_MINSIZEREL}") set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} -O3") set(CMAKE_C_FLAGS_RELWITHDEBINFO "${CMAKE_C_FLAGS_RELWITHDEBINFO} -O3") # if(CMAKE_BUILD_TYPE STREQUAL "Release" OR CMAKE_BUILD_TYPE STREQUAL "RelWithDebInfo") set(ENABLE_STRICT_ALIASING true CACHE BOOL "Enables strict aliasing rules for more aggressive optimizations") # if(NOT ENABLE_STRICT_ALIASING) # set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fno-strict-aliasing") # set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fno-strict-aliasing") # endif(NOT ENABLE_STRICT_ALIASING) # set(DISABLE_DEBUG true CACHE BOOL "Disables debugging code, like assertions") # if(DISABLE_DEBUG) # set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DNDEBUG") # set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DNDEBUG") # endif(DISABLE_DEBUG) # endif(CMAKE_BUILD_TYPE STREQUAL "Release" OR CMAKE_BUILD_TYPE STREQUAL "RelWithDebInfo") # set(USE_SSSE3 ${SSSE3_FOUND} CACHE BOOL "Use SSE3 and SSSE3. If (S)SSE3 instructions are not enabled they will be emulated.") # set(USE_SSE4_1 ${SSE4_1_FOUND} CACHE BOOL "Use SSE4.1. If SSE4.1 instructions are not enabled they will be emulated.") # if(USE_SSSE3) # set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -msse3 -mssse3") # set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -msse3 -mssse3") # endif(USE_SSSE3) # if(USE_SSE4_1) # set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -msse4.1") # set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -msse4.1") # endif(USE_SSE4_1) elseif(CMAKE_CXX_COMPILER MATCHES "/(icpc|icc)$") ################################################################################################## # Intel Compiler # ################################################################################################## set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -O3") set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS_RELWITHDEBINFO} -DNDEBUG -O3") set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} -O3") set(CMAKE_C_FLAGS_RELWITHDEBINFO "${CMAKE_C_FLAGS_RELWITHDEBINFO} -DNDEBUG -O3") set(ALIAS_FLAGS "-no-ansi-alias") if(CMAKE_BUILD_TYPE STREQUAL "Release" OR CMAKE_BUILD_TYPE STREQUAL "RelWithDebInfo") set(ENABLE_STRICT_ALIASING true CACHE BOOL "Enables strict aliasing rules for more aggressive optimizations") if(ENABLE_STRICT_ALIASING) set(ALIAS_FLAGS "-ansi-alias") endif(ENABLE_STRICT_ALIASING) endif(CMAKE_BUILD_TYPE STREQUAL "Release" OR CMAKE_BUILD_TYPE STREQUAL "RelWithDebInfo") # per default icc is not IEEE compliant, but we need that for verification set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${ALIAS_FLAGS} -w1 -fp-model precise") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${ALIAS_FLAGS} -w1 -fp-model precise") # if(CMAKE_BUILD_TYPE STREQUAL "Debug") # add_definitions(-DNO_OPTIMIZATION) # elseif(CMAKE_BUILD_TYPE STREQUAL "" AND NOT CMAKE_CXX_FLAGS MATCHES "-O[123]") # add_definitions(-DNO_OPTIMIZATION) # endif(CMAKE_BUILD_TYPE STREQUAL "Debug") endif(CMAKE_COMPILER_IS_GNUCXX) #if(CMAKE_BUILD_TYPE STREQUAL "" AND NOT CMAKE_CXX_FLAGS MATCHES "-O[123]") # message(STATUS "WARNING! It seems you are compiling without optimization. Please set CMAKE_BUILD_TYPE.") #endif(CMAKE_BUILD_TYPE STREQUAL "" AND NOT CMAKE_CXX_FLAGS MATCHES "-O[123]") set(FAST_MATH FALSE CACHE BOOL "Use floating point math shortcuts. Might not be IEEE compliant!") if(FAST_MATH) if(CMAKE_COMPILER_IS_GNUCXX) set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -ffast-math") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -ffast-math") elseif(CMAKE_CXX_COMPILER MATCHES "/(icpc|icc)$") set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fp-model fast=2") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fp-model fast=2") elseif(MSVC) endif(CMAKE_COMPILER_IS_GNUCXX) endif(FAST_MATH) include_directories(${CMAKE_CURRENT_SOURCE_DIR}/code ${CMAKE_CURRENT_SOURCE_DIR}) set(CommonCode code/AliKFParticle.cxx code/AliKFParticleBase.cxx code/KFPTrack.cxx code/KFPVertex.cxx ) set(TESTS_ENABLED FALSE CACHE BOOL "Enable build of unit tests") if(TESTS_ENABLED) add_subdirectory(tests) enable_testing() endif(TESTS_ENABLED) #set(DEBUG_MESSAGES "0" CACHE STRING "Enable debug messages (1: Seeding, 2: Fitting, 4: Kalman Filter, 8: TrackletSelector, 16: Tracker::WriteOutput)") #if(DEBUG_MESSAGES) # add_definitions(-DDEBUG_MESSAGES=${DEBUG_MESSAGES}) #endif(DEBUG_MESSAGES) add_definitions(-DENABLE_VECTORIZATION) #set(ENABLE_ARRAY_BOUNDS_CHECKING FALSE CACHE BOOL "Enable Array bounds checking. Slow!") #if(ENABLE_ARRAY_BOUNDS_CHECKING) # add_definitions(-DENABLE_ARRAY_BOUNDS_CHECKING) #endif(ENABLE_ARRAY_BOUNDS_CHECKING) #set(USE_SSE TRUE CACHE BOOL "When compiling on x86 use SSE Vector class instead of Simple implementation") #if(USE_SSE) # add_definitions(-DUSE_SSE) #endif(USE_SSE) set(CommonCode ${CommonCode}) #set(DUMP_LINKS FALSE CACHE BOOL "dump links into Links directory after NeighboursFinder") #if(DUMP_LINKS) # add_definitions(-DDUMP_LINKS) #endif(DUMP_LINKS) #set(DUMP_TRACKLETCONSTRUCTION FALSE CACHE BOOL "dump Tracklet Construction states into TrackletConstruction directory") #if(DUMP_TRACKLETCONSTRUCTION) # add_definitions(-DDUMP_TRACKLETCONSTRUCTION) #endif(DUMP_TRACKLETCONSTRUCTION) #set(DUMP_TC_OUTPUT FALSE CACHE BOOL "dump Tracklet Construction output to stdout") #if(DUMP_TC_OUTPUT) # add_definitions(-DDUMP_TC_OUTPUT) #endif(DUMP_TC_OUTPUT) ######################################################################################### #add_executable(convertToBinary convertToBinary.cpp code/AliHLTTPCCAMCTrack.cxx) #target_link_libraries(convertToBinary ${ROOT_LIBS} ${VC_LIBRARIES}) #add_executable(benchmark benchmark.cpp) set(KF_SRCS ${CommonCode}) if(ROOT_FOUND) set(KF_SRCS ${KF_SRCS}) endif(ROOT_FOUND) if(ROOT_FOUND) # compile standalone CA with -perf support include_directories(${ROOT_INCLUDE_DIR}) add_executable(KFParticle KFParticle.cpp ${KF_SRCS}) target_link_libraries(KFParticle ${ROOT_LIBS} ${TBB_LIBRARIES} ${VC_LIBRARIES}) endif(ROOT_FOUND) # install dir is not interesting for now mark_as_advanced(CMAKE_INSTALL_PREFIX)