From bb84a71dba9303fae409e369cb3957675c175859 Mon Sep 17 00:00:00 2001 From: Florian Uhlig <f.uhlig@gsi.de> Date: Tue, 23 Feb 2021 09:51:18 +0100 Subject: [PATCH] Fix usage of OpenMP on macosx On macosx one needs a openmp installation which does not come with the system, at least the omp.h header file is missing. brew has a package libomp which installs the header and a library. Both are found by the cmake module FindOpenMP and properly used during the compilation and linking. In themoment there is still a runtime error when executing the L1 tracking with OpenMP support on macosx, so switch off OpenMP for the time being. The problem is investigated already. refs #2028. Cleanup OpenMP handling in the build system. Move check for OpenMP to top level. Remove OpenMP usage from all libs were it is not needed. --- CMakeLists.txt | 7 ++++ analysis/detectors/sts/CMakeLists.txt | 9 ---- reco/L1/CMakeLists.txt | 58 +++++++++++++++++--------- reco/detectors/sts/CMakeLists.txt | 10 ++--- reco/tracking/lx/Simple/CMakeLists.txt | 2 - reco/tracking/lxTriplet/CMakeLists.txt | 6 --- sim/detectors/sts/CMakeLists.txt | 9 ---- 7 files changed, 51 insertions(+), 50 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 56c454c052..13772c164f 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -302,6 +302,13 @@ else(CBMROOT_MINIMAL) set(FairMQ_HAS_StateMachine FALSE) endif() endif() + + # For the time being don't use OpenMP on APPLE + # There are runtime problems with L1 (Redmine #2028) + if(NOT APPLE) + find_package(OpenMP) + endif() + endif(CBMROOT_MINIMAL) # set a variable which should be used in all CMakeLists.txt diff --git a/analysis/detectors/sts/CMakeLists.txt b/analysis/detectors/sts/CMakeLists.txt index 8b9e9c0139..fb9724d2ac 100644 --- a/analysis/detectors/sts/CMakeLists.txt +++ b/analysis/detectors/sts/CMakeLists.txt @@ -49,15 +49,6 @@ set(LINKDEF ${LIBRARY_NAME}LinkDef.h) # --------------------------------------------------------- -# ---- Enable OpenMP ------------------------------------- -find_package(OpenMP) -if (OPENMP_FOUND) - set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${OpenMP_C_FLAGS}") - set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${OpenMP_CXX_FLAGS}") -endif() -# --------------------------------------------------------- - - # ----- Let cmake do the job --------------------------- include_directories( ${INCLUDE_DIRECTORIES}) include_directories(SYSTEM ${SYSTEM_INCLUDE_DIRECTORIES}) diff --git a/reco/L1/CMakeLists.txt b/reco/L1/CMakeLists.txt index 96810c9529..468e2f35e1 100644 --- a/reco/L1/CMakeLists.txt +++ b/reco/L1/CMakeLists.txt @@ -53,6 +53,19 @@ Set(SYSTEM_INCLUDE_DIRECTORIES ${KFParticle_INCLUDE_DIR} ) +# For the time being don't use OpenMP on APPLE +# There are runtime problems with L1 (Redmine #2028) +if(NOT APPLE) + if (OPENMP_FOUND) + set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${OpenMP_C_FLAGS}") + set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${OpenMP_CXX_FLAGS}") + set(SYSTEM_INCLUDE_DIRECTORIES + ${SYSTEM_INCLUDE_DIRECTORIES} + ${OpenMP_CXX_INCLUDE_DIRS} + ) + endif() +endif() + Include_Directories(SYSTEM ${SYSTEM_INCLUDE_DIRECTORIES}) set(LINK_DIRECTORIES @@ -62,6 +75,14 @@ ${ROOT_LIBRARY_DIR} ${FAIRROOT_LIBRARY_DIR} ${Boost_LIBRARY_DIRS} ) + +if (OPENMP_FOUND AND APPLE) + get_filename_component(OpenMP_CXX_LIBRARY_DIR ${OpenMP_CXX_LIBRARIES} DIRECTORY) + Set(LINK_DIRECTORIES + ${LINK_DIRECTORIES} + ${OpenMP_CXX_LIBRARY_DIR} + ) +endif() link_directories( ${LINK_DIRECTORIES}) @@ -140,11 +161,6 @@ OffLineInterface/CbmL1StsTrackFinder.h -find_package(OpenMP) -if (OPENMP_FOUND) - set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${OpenMP_C_FLAGS}") - set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${OpenMP_CXX_FLAGS}") -endif() If(APPLE) ADD_DEFINITIONS(-Wall -Wsign-promo -Wctor-dtor-privacy -Wreorder -Wno-deprecated -Wno-parentheses -DDO_TPCCATRACKER_EFF_PERFORMANCE -DNonhomogeneousField -DCBM -DUSE_TIMERS) # -Weffc++ -Wnon-virtual-dtor -Woverloaded-virtual -Wold-style-cast : wait for other parts of cbmroot\root. @@ -162,17 +178,6 @@ If(APPLE) ADD_DEFINITIONS(-Wno-non-template-friend) EndIf() - if (OPENMP_FOUND) - Execute_Process(COMMAND clang++ -print-prog-name=clang++ - OUTPUT_VARIABLE _Exe) - Get_Filename_Component(link_directory ${_Exe} DIRECTORY) - Set(link_directory "${link_directory}/../lib") - Set(LINK_DIRECTORIES - ${LINK_DIRECTORIES} - ${link_directory} - ) - link_directories( ${LINK_DIRECTORIES}) - endif() Else() @@ -194,10 +199,16 @@ ENDIF (SSE_FOUND) set(LINKDEF L1LinkDef.h) Set(LIBRARY_NAME L1) -Set(DEPENDENCIES - #Rich +if (OPENMP_FOUND AND APPLE) + Set(DEPENDENCIES + KF CbmMuchBase CbmTrdBase CbmStsBase CbmRecoBase CbmBase CbmData CbmRecoSts Base boost_regex ${OpenMP_CXX_LIBRARIES} +# KF CbmMuchBase CbmTrdBase CbmStsBase CbmRecoBase CbmBase CbmData CbmRecoSts Base boost_regex omp + ) +else() + Set(DEPENDENCIES KF CbmMuchBase CbmTrdBase CbmStsBase CbmRecoBase CbmBase CbmData CbmRecoSts Base boost_regex -) + ) +endif() GENERATE_LIBRARY() @@ -205,3 +216,12 @@ Install(FILES CbmL1Counters.h L1Algo/L1EventEfficiencies.h DESTINATION include ) + +# Test to check if OpenMP is working on APPLE +#set(EXE_NAME test_openmp) +#set(SRCS test.cxx) +#set(DEPENDENCIES +# ${DEPENDENCIES} +# omp +#) +#GENERATE_EXECUTABLE() diff --git a/reco/detectors/sts/CMakeLists.txt b/reco/detectors/sts/CMakeLists.txt index 7a22abb28b..0dc91bcde2 100644 --- a/reco/detectors/sts/CMakeLists.txt +++ b/reco/detectors/sts/CMakeLists.txt @@ -78,11 +78,11 @@ set(LINKDEF ${LIBRARY_NAME}LinkDef.h) # ---- Enable OpenMP ------------------------------------- -find_package(OpenMP) -if (OPENMP_FOUND) - set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${OpenMP_C_FLAGS}") - set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${OpenMP_CXX_FLAGS}") -endif() +# Comented since the OpenMP code is also commented in the moment +#if (OPENMP_FOUND) +# set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${OpenMP_C_FLAGS}") +# set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${OpenMP_CXX_FLAGS}") +#endif() # --------------------------------------------------------- diff --git a/reco/tracking/lx/Simple/CMakeLists.txt b/reco/tracking/lx/Simple/CMakeLists.txt index 04410405d9..5b53647a12 100644 --- a/reco/tracking/lx/Simple/CMakeLists.txt +++ b/reco/tracking/lx/Simple/CMakeLists.txt @@ -39,8 +39,6 @@ Set(SRCS LxTrackAna.cxx ) -find_package(OpenMP) - If (OPENMP_FOUND) Set(SRCS ${SRCS} LxParall.cxx) EndIf (OPENMP_FOUND) diff --git a/reco/tracking/lxTriplet/CMakeLists.txt b/reco/tracking/lxTriplet/CMakeLists.txt index 6ac0362d64..e0599c6c9e 100644 --- a/reco/tracking/lxTriplet/CMakeLists.txt +++ b/reco/tracking/lxTriplet/CMakeLists.txt @@ -39,8 +39,6 @@ Set(SRCS LxTrackAna.cxx ) -find_package(OpenMP) - Set(NO_DICT_SRCS LxCATriplets.cxx LxEff.cxx @@ -49,10 +47,6 @@ Set(NO_DICT_SRCS LxUtils.cxx ) -If (OPENMP_FOUND) - Set( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mavx -fopenmp" ) -EndIf (OPENMP_FOUND) - set(LINKDEF LxLinkDef.h) Set(LIBRARY_NAME LxTrackTripplet) Set(DEPENDENCIES diff --git a/sim/detectors/sts/CMakeLists.txt b/sim/detectors/sts/CMakeLists.txt index df54d5e358..d573e16743 100644 --- a/sim/detectors/sts/CMakeLists.txt +++ b/sim/detectors/sts/CMakeLists.txt @@ -78,15 +78,6 @@ set(LINKDEF ${LIBRARY_NAME}LinkDef.h) # --------------------------------------------------------- -# ---- Enable OpenMP ------------------------------------- -find_package(OpenMP) -if (OPENMP_FOUND) - set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${OpenMP_C_FLAGS}") - set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${OpenMP_CXX_FLAGS}") -endif() -# --------------------------------------------------------- - - # ----- Create the library ------------------------------ include_directories( ${INCLUDE_DIRECTORIES}) include_directories(SYSTEM ${SYSTEM_INCLUDE_DIRECTORIES}) -- GitLab