cmake_minimum_required(VERSION 2.6.2) project(CA) set(CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake") find_package(Vc REQUIRED) include_directories(${VC_INCLUDE_DIR}) find_package(SSE) #find_package(TBB REQUIRED) #include_directories(${TBB_INCLUDE_DIRS}) set(ENABLE_TBB FALSE CACHE BOOL "Enable usage of TBB if it is found.") # TBB is never used. change FALSE->TRUE to use TBB when it is available if(ENABLE_TBB) find_package(TBB) include_directories(${TBB_INCLUDE_DIRS}) else(ENABLE_TBB) set(TBB_FOUND FALSE) message("-- TBB will not be used") endif(ENABLE_TBB) set(ENABLE_ROOT TRUE CACHE BOOL "Enable usage of ROOT if it is found.") if(ENABLE_ROOT) find_package(Root) else(ENABLE_ROOT) set(ROOT_FOUND FALSE) endif(ENABLE_ROOT) if(NUM_THREADS) add_definitions(-DNUM_THREADS=${NUM_THREADS}) endif(NUM_THREADS) if(VC_NO_GATHER_TRICKS) add_definitions(-DVC_NO_GATHER_TRICKS) endif(VC_NO_GATHER_TRICKS) 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 -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 -DSTAR_STANDALONE") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -W -Wall -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 -DSTAR_STANDALONE") add_definitions(-DDO_TPCCATRACKER_EFF_PERFORMANCE) add_definitions(-DUSE_TIMERS) if(TBB_FOUND) set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -DTBB_DO_ASSERT=1") endif(TBB_FOUND) 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") if(TBB_FOUND) set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -DTBB_DO_ASSERT=1") endif(TBB_FOUND) 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") # set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -lrt") if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES) message(STATUS "Setting build type to 'Release' as none was specified.") set(CMAKE_BUILD_TYPE Release CACHE STRING "Choose the type of build, options are: None(CMAKE_CXX_FLAGS or CMAKE_C_FLAGS used) Debug Release RelWithDebInfo MinSizeRel." FORCE) endif() 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") 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 -DNODEBUG") set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DNDEBUG -DNODEBUG") 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 -DNODEBUG -O3") set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} -O3") set(CMAKE_C_FLAGS_RELWITHDEBINFO "${CMAKE_C_FLAGS_RELWITHDEBINFO} -DNDEBUG -DNODEBUG -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} ${CMAKE_CURRENT_SOURCE_DIR}/code/Performance) set(CommonCode code/AliHLTTPCCAGBTracker.cxx code/AliHLTTPCCAParameters.cxx code/AliHLTTPCCAGBHit.cxx code/AliHLTTPCCAParam.cxx code/AliHLTTPCCATrackParam.cxx code/AliHLTTPCCATrackParamVector.cxx ) set(SliceTrackerCode code/AliHLTTPCCAGBTrack.cxx # code/ITSCAHitsV.cxx TODO cannot add... ) set(PerformanceCode code/Performance/AliHLTTPCCAPerformance.cxx code/Performance/AliHLTTPCPerformanceBase.cxx code/Performance/AliHLTTPCCATrackPerformanceBase.cxx code/Performance/AliHLTTPCCAGlobalPerformance.cxx code/Performance/AliHLTTPCCAMCVertex.cxx code/Performance/AliHLTTPCCAMCTrack.cxx code/Performance/AliHLTTPCCAMCPoint.cxx ) set(VALGRIND_ENABLED FALSE CACHE BOOL "Enable valgrind client calls") if(NOT VALGRIND_ENABLED) add_definitions(-DNVALGRIND) endif(NOT VALGRIND_ENABLED) 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(-DVC_IMPL=SSE) else(USE_SSE) add_definitions(-DVC_IMPL=Scalar) endif(USE_SSE) 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(CA_SRCS ${CommonCode} ${SliceTrackerCode} ) if(ROOT_FOUND) set(CA_SRCS ${CA_SRCS} ${PerformanceCode}) endif(ROOT_FOUND) if(NOT ROOT_FOUND) # TODO KFParticle # compile only standalone CA add_executable(CA CA.cpp ${CA_SRCS}) if(TBB_FOUND) #compile using TBB add_target_property(CA COMPILE_FLAGS "-DUSE_TBB") target_link_libraries(CA ${TBB_RELEASE_LIBRARIES} ${VC_LIBRARIES}) else(TBB_FOUND) target_link_libraries(CA ${VC_LIBRARIES}) endif(TBB_FOUND) add_target_property(CA COMPILE_FLAGS "-DHLTCA_STANDALONE") if(CMAKE_SYSTEM_NAME STREQUAL "Linux") add_target_property(CA COMPILE_FLAGS "-DR__UNIX") endif(CMAKE_SYSTEM_NAME STREQUAL "Linux") else(NOT ROOT_FOUND) # compile standalone CA with -perf support include_directories(${ROOT_INCLUDE_DIR}) add_executable(CA CA.cpp ${CA_SRCS}) if(TBB_FOUND) #compile using TBB add_target_property(CA COMPILE_FLAGS "-DUSE_TBB") target_link_libraries(CA ${ROOT_LIBS} ${TBB_LIBRARIES} ${VC_LIBRARIES}) else(TBB_FOUND) target_link_libraries(CA ${ROOT_LIBS} ${VC_LIBRARIES}) endif(TBB_FOUND) add_executable(CA-draw CA.cpp ${CA_SRCS} code/AliHLTTPCCADisplay.cxx) add_target_property(CA-draw COMPILE_FLAGS "-DDRAW") if(TBB_FOUND) #compile using TBB add_target_property(CA-draw COMPILE_FLAGS "-DUSE_TBB") target_link_libraries(CA-draw ${ROOT_LIBS} ${TBB_LIBRARIES} ${VC_LIBRARIES}) else(TBB_FOUND) target_link_libraries(CA-draw ${ROOT_LIBS} ${VC_LIBRARIES}) endif(TBB_FOUND) endif(NOT ROOT_FOUND) # install dir is not interesting for now mark_as_advanced(CMAKE_INSTALL_PREFIX)