diff --git a/cmssw-patch-build.file b/cmssw-patch-build.file index d17b7869e09..04fcab2fa0a 100644 --- a/cmssw-patch-build.file +++ b/cmssw-patch-build.file @@ -12,20 +12,16 @@ %define baserelqueue %(echo %realversion | sed -e "s|_[[:alnum:]]*patch.*||") %endif -%if "%{?cvstag:set}" != "set" -%define cvstag %realversion -%endif - %if "%{?prebuildtarget}" == "gindices" %define prebuildtarget %{nil} %endif -%define source1 cmstc://?tag=%{cvstag}&module=CMSSW&export=src&baserelver=%{baserelver}&baserel=%{baserelqueue}&output=/src.tar.gz +%define source1 cmstc://?tag=%{realversion}&module=CMSSW&export=src&baserelver=%{baserelver}&baserel=%{baserelqueue}&output=/src.tar.gz %define baserelverX %(echo %{pkgreqs} | sed -e 's|.*/%baserelname/||' | awk '{print $1}') %define patchsrc9 \ if [ "X%{baserelverX}" != "X%{baserelver}" ] ; then \ - echo "ERROR: Please define valid baserel_postfix e.g. -cms, which was added by cmsBuild for %baserelname base release, in %n.spec file.";\ + echo "ERROR: Please define valid baserel_postfix e.g. -cms, which was added by cmsBuild for %baserelname base release, in %{n}.spec file.";\ false ;\ fi diff --git a/cmssw-tool-conf.spec b/cmssw-tool-conf.spec index 85b0872800b..fcaf5f086c8 100644 --- a/cmssw-tool-conf.spec +++ b/cmssw-tool-conf.spec @@ -1,4 +1,4 @@ -### RPM cms cmssw-tool-conf 56.0 +### RPM cms cmssw-tool-conf 57.0 # With cmsBuild, change the above version only when a new tool is added ## INSTALL_DEPENDENCIES cmsLHEtoEOSManager gcc-fixincludes cmssw-osenv cms-git-tools SCRAMV2 @@ -121,7 +121,6 @@ Requires: opencl-cpp Requires: qd Requires: blackhat Requires: sherpa -Requires: geant4-parfullcms Requires: fasthadd Requires: eigen Requires: gdb diff --git a/compilation_flags_pgo.file b/compilation_flags_pgo.file new file mode 100644 index 00000000000..05a26c5a52f --- /dev/null +++ b/compilation_flags_pgo.file @@ -0,0 +1,21 @@ +##################### +#PGO flags +######################################################## +#This file should not be included directly by spec files. +# It is automatically added for selected packages via pgo/cmsdist_packages.py +######################################################## +# Following are set by pgo/cmsdist_packages.py +# pgo_path_prefix: path prefix where package was build. +# pgo_package_name: Original name of the package e.g. geant4, vecgeom , cmssw etc. +# pgo_generate: Set if package is build in pgo generate mode +# pgo_use: Set if package is build in pgo use mode + +%define cmsdist_package_initenv export CMSSW_PGO_DIRECTORY=%{cmsroot}/%{tempprefix} +%define pgo_common -fprofile-prefix-path=%{pgo_path_prefix} -fprofile-update=prefer-atomic -fprofile-correction +%if "%{?pgo_generate:set}" == "set" +%define pgo_build_flags %{pgo_common} -fprofile-generate -fprofile-dir=%%q{CMSSW_PGO_DIRECTORY}/pgo/%%p/%{pgo_package_name} +%endif +%if "%{?pgo_use:set}" == "set" +%define pgo_build_flags %{pgo_common} -fprofile-use -fprofile-partial-training -fprofile-dir=%%q{CMSSW_PGO_DIRECTORY}/pgo/%{pgo_package_name} +%endif + diff --git a/dd4hep.spec b/dd4hep.spec index 4dee12aa682..eb7bb3eadb8 100644 --- a/dd4hep.spec +++ b/dd4hep.spec @@ -11,11 +11,7 @@ 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 build_flags -fPIC %{?arch_build_flags} %{?lto_build_flags} %{?pgo_build_flags} %define cmake_fixed_args \\\ -DCMAKE_INSTALL_PREFIX='%{i}' \\\ diff --git a/g4hepem.spec b/g4hepem.spec index 3acebbbb376..785b61f7232 100644 --- a/g4hepem.spec +++ b/g4hepem.spec @@ -1,5 +1,6 @@ ### RPM external g4hepem 20230309 ## INCLUDE compilation_flags +## INCLUDE compilation_flags_lto %define tag %{realversion} %define branch master %define github_user mnovak42 @@ -10,6 +11,7 @@ BuildRequires: cmake gmake Requires: geant4 %define keep_archives true +%define build_flags -fPIC %{?arch_build_flags} %{?lto_build_flags} %{?pgo_build_flags} %prep %setup -n %{n}.%{realversion} @@ -22,11 +24,7 @@ cd ../build cmake ../%{n}.%{realversion} \ -DCMAKE_CXX_COMPILER="g++" \ -%if "%{?arch_build_flags}" - -DCMAKE_CXX_FLAGS="-fPIC %{arch_build_flags}" \ -%else - -DCMAKE_CXX_FLAGS="-fPIC" \ -%endif + -DCMAKE_CXX_FLAGS="%{build_flags}" \ -DCMAKE_AR=$(which gcc-ar) \ -DCMAKE_RANLIB=$(which gcc-ranlib) \ -DCMAKE_INSTALL_PREFIX:PATH="%i" \ diff --git a/geant4.spec b/geant4.spec index 96f28bdf13d..82111a4f692 100644 --- a/geant4.spec +++ b/geant4.spec @@ -18,11 +18,7 @@ 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 +%define build_flags -fPIC %{?arch_build_flags} %{?lto_build_flags} %{?pgo_build_flags} %prep %setup -n %{n}.%{realversion} @@ -80,6 +76,10 @@ find %i/lib64 -name "*.a" -exec gcc-ar x {} \; gcc-ar rcs libgeant4-static.a *.o find . -name "*.o" -delete +%if "%{?pgo_build_flags}" +sed -ire 's| +(-fprofile-[^ ]+ )+||' %{i}/lib64/Geant4-*/Geant4Config.cmake %{i}/bin/geant4-config +%endif + %post %{relocateCmsFiles} $(find $RPM_INSTALL_PREFIX/%{pkgrel} -name '*.cmake') %{relocateConfig}bin/geant4-config diff --git a/pgo/cmsdist_packages.py b/pgo/cmsdist_packages.py new file mode 100644 index 00000000000..2e29c220833 --- /dev/null +++ b/pgo/cmsdist_packages.py @@ -0,0 +1,17 @@ +from os.path import dirname, join +pgo_packages = ["geant4", "vecgeom", "g4hepem", "dd4hep", "cmssw", "cmssw-patch", "cmssw-tool-conf"] + +def packages(virtual_packages, *args): + opts = args[0].options + try: + if (not opts.PGOGenerate) and (not opts.PGOUse): return + except: + return + for pkg in pgo_packages: + spec = " echo '%%define pgo_path_prefix %s'" % ('@LOCALTOP@' if pkg in ["cmssw-tool-conf"] else '%{_builddir}') + spec += "; echo '%%define pgo_package_name %s'" % ('cmssw' if pkg in ["cmssw-tool-conf"] else pkg) + spec += "; echo '%%define %s 1'" % ('pgo_generate' if opts.PGOGenerate else 'pgo_use') + spec += "; echo '## INCLUDE compilation_flags_pgo'" + spec += "; cat %s/%s.spec" % (opts.cmsdist, pkg) + virtual_packages[pkg] = spec + return diff --git a/rpm-preamble.file b/rpm-preamble.file index 93673f4f94f..e0cad877602 100644 --- a/rpm-preamble.file +++ b/rpm-preamble.file @@ -66,7 +66,7 @@ %define cmsbuildApiVersion 0 %endif -%define pkgdir %{pkgcategory}/%{n}/%{v} +%define pkgdir %{pkgcategory}/%{pkgname}/%{pkgversion} # Architecture comes first by default. Run with "--define 'archfirst no'" # to change this. @@ -164,13 +164,14 @@ %define drop_bootstrap_lib export %{dynamic_path_var}=$(echo $%{dynamic_path_var} | tr ':' '\\n' | grep -v '/external/bootstrap-bundle/' | tr '\\n' ':' | sed 's|:*$||') %define disable_recursive_env %{drop_bootstrap_path}; %{drop_bootstrap_lib}; export _CMSBUILD_BUILD_ENV_=1 %if "%archfirst" == "yes" -%define initenv_all %{disable_recursive_env} ; for x in %{allpkgreqs} .; do i=%{cmsroot}/%{cmsplatf}/$x/etc/profile.d/init.sh; [ -f $i ] && . $i; done -%define initenv_direct %{disable_recursive_env} ; for x in %{directpkgreqs} %{builddirectpkgreqs} .; do i=%{cmsroot}/%{cmsplatf}/$x/etc/profile.d/init.sh; [ -f $i ] && . $i; done +%define initenv_all %{disable_recursive_env} ; for x in %{allpkgreqs} .; do i=%{cmsroot}/%{cmsplatf}/$x/etc/profile.d/init.sh; [ -f $i ] && . $i; done +%define initenv_direct1 %{disable_recursive_env} ; for x in %{directpkgreqs} %{builddirectpkgreqs} .; do i=%{cmsroot}/%{cmsplatf}/$x/etc/profile.d/init.sh; [ -f $i ] && . $i; done %else -%define initenv_all %{disable_recursive_env} ; for x in %{allpkgreqs} .; do i=%{cmsroot}/$x/%{cmsplatf}/etc/profile.d/init.sh; [ -f $i ] && . $i; done -%define initenv_direct %{disable_recursive_env} ; for x in %{directpkgreqs} %{builddirectpkgreqs} .; do i=%{cmsroot}/$x/%{cmsplatf}/etc/profile.d/init.sh; [ -f $i ] && . $i; done +%define initenv_all %{disable_recursive_env} ; for x in %{allpkgreqs} .; do i=%{cmsroot}/$x/%{cmsplatf}/etc/profile.d/init.sh; [ -f $i ] && . $i; done +%define initenv_direct1 %{disable_recursive_env} ; for x in %{directpkgreqs} %{builddirectpkgreqs} .; do i=%{cmsroot}/$x/%{cmsplatf}/etc/profile.d/init.sh; [ -f $i ] && . $i; done %endif -%define initenv %initenv_all +%define initenv_direct %{initenv_direct1} %{?cmsdist_package_initenv: ; %{cmsdist_package_initenv}} +%define initenv %{initenv_all} %{?cmsdist_package_initenv: ; %{cmsdist_package_initenv}} %if "%{?compiling_processes:set}" == "set" %define makeprocesses -j %compiling_processes @@ -279,8 +280,8 @@ fi %define check_version_suffix echo "%%allow_version_suffix defined, skipping version suffix check." %else %define check_version_suffix \ - if [ "%{v}" != "%{realversion}" ] ; then \ - echo "ERROR: %{v} not same as %{realversion}. Automatic version suffix was added, please update the version explicitly for %{n}.spec to avoid this error." ;\ + if [ "%{pkgversion}" != "%{realversion}" ] ; then \ + echo "ERROR: %{pkgversion} not same as %{realversion}. Automatic version suffix was added, please update the version explicitly for %{pkgname}.spec to avoid this error." ;\ exit 1 ;\ fi %endif diff --git a/scram-project-build.file b/scram-project-build.file index bb2d4699340..85491fadc9e 100644 --- a/scram-project-build.file +++ b/scram-project-build.file @@ -11,6 +11,11 @@ %define vectorized_build yes %endif %endif +%if "%{?pgo_generate}" +%undefine runGlimpse +%undefine saveDeps +%undefine subpackageDebug +%endif Requires: SCRAMV1 BuildRequires: gcc @@ -32,10 +37,6 @@ BuildRequires: dwz %define buildtarget release-build %endif -%if "%{?cvstag:set}" != "set" -%define cvstag %realversion -%endif - %if "%{?scram_compiler:set}" != "set" %define scram_compiler gcc %endif @@ -54,27 +55,19 @@ BuildRequires: dwz %endif %if "%{?configtag:set}" != "set" -%define configtag V07-09-01 -%endif - -%if "%{?cvssrc:set}" != "set" -%define cvssrc %(echo %n | sed -e "s|-patch||"| tr 'a-z' 'A-Z') +%define configtag V08-00-00 %endif %if "%{?buildarch:set}" != "set" %define buildarch : %endif -%if "%{?cmsroot:set}" != "set" -%define cmsroot %instroot -%endif - %if "%{?ucprojtype:set}" != "set" -%define ucprojtype %(echo %n | sed -e "s|-patch||" | tr 'a-z' 'A-Z') +%define ucprojtype %(echo %{n} | sed -e "s|-patch||" | tr 'a-z' 'A-Z') %endif %define lcprojtype %(echo %ucprojtype | tr 'A-Z' 'a-z') %if "%{?toolconf:set}" != "set" -%define toolconf %(echo %n | sed "s|-|_|g" | tr 'a-z' 'A-Z')_TOOL_CONF_ROOT +%define toolconf %(echo %{n} | sed "s|-|_|g" | tr 'a-z' 'A-Z')_TOOL_CONF_ROOT %endif %define source0 git+https://github.com/cms-sw/cmssw-config.git?obj=master/%{configtag}&export=config&output=/cmssw-config-%{configtag}.tgz @@ -121,9 +114,14 @@ echo %{configtag} > %_builddir/config/config_tag --keys SCRAM_COMPILER=%{scram_compiler} \ --keys ENABLE_LTO=%{enable_lto} \ %if "%{?gitcommit:set}" == "set" - --keys PROJECT_GIT_HASH=%{gitcommit} + --keys PROJECT_GIT_HASH=%{gitcommit} \ +%else + --keys PROJECT_GIT_HASH=%{realversion} \ +%endif +%if "%{?pgo_build_flags}" + --keys ENABLE_PGO=1 %else - --keys PROJECT_GIT_HASH=%{realversion} + --keys ENABLE_PGO=0 %endif %if "%{?vectorized_build:set}" == "set" sed -i -e 's| SCRAM_TARGETS=.*"| SCRAM_TARGETS="%{package_vectorization}"|' %_builddir/config/Self.xml @@ -141,6 +139,9 @@ rm -rf %i mkdir -p $(dirname %i) %{?buildarch:%buildarch} %scramcmd project -d $(dirname %i) -b %{bootstrapfile} +%if "%{?pgo_build_flags}" +sed -i -e 's|@LOCALTOP@|%{i}|' %i/config/toolbox/%{cmsplatf}/tools/selected/gcc-cxxcompiler.xml +%endif %build @@ -183,7 +184,9 @@ export SCRAM_NOSYMCHECK=true %scramcmd b --verbose -f %{prebuildtarget} + diff --git a/scram-tools.file/tools/geant4/env.sh b/scram-tools.file/tools/geant4/env.sh index adc8738b9b8..0fa5ced2ba5 100644 --- a/scram-tools.file/tools/geant4/env.sh +++ b/scram-tools.file/tools/geant4/env.sh @@ -1,5 +1,5 @@ GEANT4_VECGEOM="" -if grep VECGEOM_ROOT ${TOOL_ROOT}/etc/profile.d/dependencies-setup.sh >/dev/null 2>&1 ; then +if grep VECGEOM_ ${TOOL_ROOT}/etc/profile.d/dependencies-setup.sh >/dev/null 2>&1 ; then GEANT4_VECGEOM='' fi export GEANT4_VECGEOM diff --git a/scram-tools.file/tools/llvm/llvm-cxxcompiler.xml b/scram-tools.file/tools/llvm/llvm-cxxcompiler.xml index 234a965f146..52f3911e71c 100644 --- a/scram-tools.file/tools/llvm/llvm-cxxcompiler.xml +++ b/scram-tools.file/tools/llvm/llvm-cxxcompiler.xml @@ -19,6 +19,7 @@ + diff --git a/vecgeom.spec b/vecgeom.spec index 57e9be229ef..c58fdf37d6e 100644 --- a/vecgeom.spec +++ b/vecgeom.spec @@ -8,6 +8,8 @@ BuildRequires: cmake gmake Patch0: vecgeom-fix-vector +%define build_flags %{?arch_build_flags} %{?lto_build_flags} %{?pgo_build_flags} + %prep %setup -n %{n}-%{realversion} @@ -32,11 +34,10 @@ cmake ../%{n}-%{realversion} \ %endif -DCMAKE_VERBOSE_MAKEFILE=TRUE \ -DCMAKE_CXX_STANDARD=17 \ -%if "%{?arch_build_flags}" - -DCMAKE_CXX_FLAGS="%{arch_build_flags} %{lto_build_flags}" \ -%else - -DCMAKE_CXX_FLAGS="%{lto_build_flags}" \ -%endif + -DCMAKE_STATIC_LIBRARY_CXX_FLAGS="%{build_flags}" \ + -DCMAKE_STATIC_LIBRARY_C_FLAGS="%{build_flags}" \ + -DCMAKE_CXX_FLAGS="%{build_flags}" \ + -DCMAKE_C_FLAGS="%{build_flags}" \ -DGEANT4=OFF make %{makeprocesses} VERBOSE=1