diff --git a/compilation_flags.file b/compilation_flags.file index 2a2b061c720..e8c605e269e 100644 --- a/compilation_flags.file +++ b/compilation_flags.file @@ -1,4 +1,4 @@ -%define lto_build_flags -flto -fipa-icf -flto-odr-type-merging -fno-fat-lto-objects -Wodr +#Special architecture related flags %if "%{?arch_build_flags:set}" != "set" %ifarch ppc64le %define arch_build_flags -mcpu=power8 -mtune=power8 --param=l1-cache-size=64 --param=l1-cache-line-size=128 --param=l2-cache-size=512 diff --git a/compilation_flags_lto.file b/compilation_flags_lto.file new file mode 100644 index 00000000000..80fc3a2cea0 --- /dev/null +++ b/compilation_flags_lto.file @@ -0,0 +1,13 @@ +#Enable/disable LTO builds +%define enable_lto 0 + +#LTO related flags +%ifarch ppc64le +%undefine enable_lto +%define enable_lto 0 +%endif +%if "%{enable_lto}" == "1" +%define lto_build_flags -flto -fipa-icf -flto-odr-type-merging -fno-fat-lto-objects -Wodr +%else +%define lto_build_flags %{nil} +%endif diff --git a/dd4hep.spec b/dd4hep.spec index 0b9e8288181..4dee12aa682 100644 --- a/dd4hep.spec +++ b/dd4hep.spec @@ -1,4 +1,6 @@ ### RPM external dd4hep v01-23x +## INCLUDE compilation_flags +## INCLUDE compilation_flags_lto %define tag 5c3b494f047ee025b2e32303c16ad854bfbb342d %define branch master @@ -9,6 +11,28 @@ Source: git+https://github.com/%{github_user}/DD4hep.git?obj=%{branch}/%{tag}&ex BuildRequires: cmake Requires: root boost clhep xerces-c geant4 +%if "%{?arch_build_flags}" +%define build_flags -fPIC %{arch_build_flags} %{lto_build_flags} +%else +%define build_flags -fPIC %{lto_build_flags} +%endif + +%define cmake_fixed_args \\\ + -DCMAKE_INSTALL_PREFIX='%{i}' \\\ + -DCMAKE_CXX_FLAGS="%{build_flags}" \\\ + -DCMAKE_STATIC_LIBRARY_CXX_FLAGS="%{build_flags}" \\\ + -DCMAKE_STATIC_LIBRARY_C_FLAGS="%{build_flags}" \\\ + -DBoost_NO_BOOST_CMAKE=ON \\\ + -DDD4HEP_USE_XERCESC=ON \\\ + -DDD4HEP_USE_PYROOT=ON \\\ + -DCMAKE_AR=$(which gcc-ar) \\\ + -DCMAKE_RANLIB=$(which gcc-ranlib) \\\ + -DCMAKE_CXX_STANDARD=17 \\\ + -DCMAKE_BUILD_TYPE=Release \\\ + -DDD4HEP_USE_GEANT4_UNITS=ON \\\ + -DXERCESC_ROOT_DIR=${XERCES_C_ROOT} \\\ + -DCMAKE_PREFIX_PATH="${CLHEP_ROOT};${XERCES_C_ROOT}" + %prep %setup -n %{n}-%{realversion} @@ -16,25 +40,16 @@ Requires: root boost clhep xerces-c geant4 %build export BOOST_ROOT -CMAKE_ARGS="-DCMAKE_INSTALL_PREFIX='%{i}' \ - -DBoost_NO_BOOST_CMAKE=ON \ - -DDD4HEP_USE_XERCESC=ON \ - -DXERCESC_ROOT_DIR=${XERCES_C_ROOT} \ - -DDD4HEP_USE_PYROOT=ON \ - -DCMAKE_CXX_STANDARD=17 \ - -DCMAKE_BUILD_TYPE=Release \ - -DDD4HEP_USE_GEANT4_UNITS=ON \ - -DCMAKE_PREFIX_PATH=${CLHEP_ROOT};${XERCES_C_ROOT}" #Build normal Shared D4Hep without Geant4 rm -rf ../build; mkdir ../build; cd ../build -cmake $CMAKE_ARGS -DBUILD_SHARED_LIBS=ON ../%{n}-%{realversion} +cmake %{cmake_fixed_args} -DBUILD_SHARED_LIBS=ON ../%{n}-%{realversion} make %{makeprocesses} VERBOSE=1 make install #Building DDG4 static rm -rf ../build-g4; mkdir ../build-g4; cd ../build-g4 -cmake $CMAKE_ARGS -DBUILD_SHARED_LIBS=OFF -DDD4HEP_USE_GEANT4=ON ../%{n}-%{realversion} +cmake %{cmake_fixed_args} -DBUILD_SHARED_LIBS=OFF -DDD4HEP_USE_GEANT4=ON ../%{n}-%{realversion} cd DDG4 make %{makeprocesses} VERBOSE=1 for lib in $(ls ../lib/libDDG4*.a | sed 's|.a$||'); do diff --git a/geant4.spec b/geant4.spec index 1b05041a504..61ec8a64f56 100644 --- a/geant4.spec +++ b/geant4.spec @@ -1,5 +1,6 @@ ### RPM external geant4 10.7.2 ## INCLUDE compilation_flags +## INCLUDE compilation_flags_lto %define use_vecgeom 1 %define tag %{realversion} %define branch geant4-10.7-release @@ -17,6 +18,11 @@ Requires: vecgeom Requires: zlib %define keep_archives true +%if "%{?arch_build_flags}" +%define build_flags -fPIC %{arch_build_flags} %{lto_build_flags} +%else +%define build_flags -fPIC %{lto_build_flags} +%endif %prep %setup -n %{n}.%{realversion} @@ -37,15 +43,9 @@ export VecGeom_DIR=${VECGEOM_ROOT}/lib/cmake/VecGeom cmake ../%{n}.%{realversion} \ -DCMAKE_CXX_COMPILER="g++" \ -%if "%{?arch_build_flags}" - -DCMAKE_CXX_FLAGS="-fPIC %{arch_build_flags}" \ - -DCMAKE_STATIC_LIBRARY_CXX_FLAGS="-fPIC %{arch_build_flags}" \ - -DCMAKE_STATIC_LIBRARY_C_FLAGS="-fPIC %{arch_build_flags}" \ -%else - -DCMAKE_CXX_FLAGS="-fPIC" \ - -DCMAKE_STATIC_LIBRARY_CXX_FLAGS="-fPIC" \ - -DCMAKE_STATIC_LIBRARY_C_FLAGS="-fPIC" \ -%endif + -DCMAKE_CXX_FLAGS="%{build_flags}" \ + -DCMAKE_STATIC_LIBRARY_CXX_FLAGS="%{build_flags}" \ + -DCMAKE_STATIC_LIBRARY_C_FLAGS="%{build_flags}" \ -DCMAKE_AR=$(which gcc-ar) \ -DCMAKE_RANLIB=$(which gcc-ranlib) \ -DCMAKE_INSTALL_PREFIX:PATH="%i" \ diff --git a/scram-project-build.file b/scram-project-build.file index 4c9d37660ce..578f412d1a4 100644 --- a/scram-project-build.file +++ b/scram-project-build.file @@ -1,5 +1,6 @@ ### FILE scram-project-build ## NO_AUTO_DEPENDENCY +## INCLUDE compilation_flags_lto # FIXME: support building all platforms together like scram does? # FIXME: automatic sub-packages for "doc" etc? %define cmssw_libs biglib/%{cmsplatf} lib/%{cmsplatf} @@ -53,7 +54,7 @@ BuildRequires: dwz %endif %if "%{?configtag:set}" != "set" -%define configtag V07-03-11 +%define configtag V07-03-12 %endif %if "%{?cvssrc:set}" != "set" @@ -116,7 +117,9 @@ rm -rf config %{srctree} poison cd %_builddir echo %{configtag} > %_builddir/config/config_tag -%_builddir/config/updateConfig.py -p %{ucprojtype} -v %v -s $SCRAMV1_VERSION -t ${%{toolconf}} --keys SCRAM_COMPILER=%{scram_compiler} \ +%_builddir/config/updateConfig.py -p %{ucprojtype} -v %v -s $SCRAMV1_VERSION -t ${%{toolconf}} \ + --keys SCRAM_COMPILER=%{scram_compiler} \ + --keys ENABLE_LTO=%{enable_lto} \ %if "%{?gitcommit:set}" == "set" --keys PROJECT_GIT_HASH=%{gitcommit} %else diff --git a/scram-tools.file/tool-env.file b/scram-tools.file/tool-env.file index da32bed7994..f49de70ce9a 100644 --- a/scram-tools.file/tool-env.file +++ b/scram-tools.file/tool-env.file @@ -1,4 +1,5 @@ ## INCLUDE compilation_flags +## INCLUDE compilation_flags_lto ## INCLUDE cuda-flags export ROOT_CXXMODULES="0" @@ -16,5 +17,8 @@ export COMPILER_CXXFLAGS="%{arch_build_flags}" export ORACLE_ENV_ROOT="" export CUDA_FLAGS="%{nvcc_cuda_flags}" export CUDA_HOST_CXXFLAGS="%{nvcc_stdcxx}" +%if "%{?lto_build_flags}" +export LTO_FLAGS="%{lto_build_flags}" +%endif if [ $(echo ' %requiredtools ' | grep ' python3 ' |wc -l) -gt 0 ] ; then export PYTHON3_LIB_SITE_PACKAGES ; fi if [ $(echo ' %requiredtools ' | grep ' python ' |wc -l) -gt 0 ] ; then export PYTHON_LIB_SITE_PACKAGES ; fi diff --git a/scram-tools.file/tools/gcc/gcc-cxxcompiler.xml b/scram-tools.file/tools/gcc/gcc-cxxcompiler.xml index 72cbb4a6ea4..e99e485287f 100644 --- a/scram-tools.file/tools/gcc/gcc-cxxcompiler.xml +++ b/scram-tools.file/tools/gcc/gcc-cxxcompiler.xml @@ -23,6 +23,7 @@ + diff --git a/vecgeom.spec b/vecgeom.spec index 385341d35e6..57e9be229ef 100644 --- a/vecgeom.spec +++ b/vecgeom.spec @@ -1,5 +1,6 @@ ### RPM external vecgeom v1.1.17 ## INCLUDE compilation_flags +## INCLUDE compilation_flags_lto %define tag ed9a40412c354652262ec80af449f5531206e52c Source: git+https://gitlab.cern.ch/VecGeom/VecGeom.git?obj=master/%{tag}&export=%{n}-%{realversion}&output=/%{n}-%{realversion}.tgz BuildRequires: cmake gmake @@ -32,7 +33,9 @@ cmake ../%{n}-%{realversion} \ -DCMAKE_VERBOSE_MAKEFILE=TRUE \ -DCMAKE_CXX_STANDARD=17 \ %if "%{?arch_build_flags}" - -DCMAKE_CXX_FLAGS="%{arch_build_flags}" \ + -DCMAKE_CXX_FLAGS="%{arch_build_flags} %{lto_build_flags}" \ +%else + -DCMAKE_CXX_FLAGS="%{lto_build_flags}" \ %endif -DGEANT4=OFF