Everyday DevOps: création de gcc 9.3.1 pour CentOS 8

Severstal a implémenté de grands systèmes d'entreprise tels que SAP ou QMET, mais il existe également de nombreuses tâches différentes couvertes par notre propre développement, et les tâches de ce développement sont rarement simples. Cela signifie que les exigences pour les outils de développement sont assez spécifiques. Que faire si vos développeurs ont besoin de gcc-9 sur CentOS et qu'il ne se trouve pas dans les référentiels publics? Retroussez vos manches et créez les sacs nécessaires, bien sûr. Mais cette tâche ne semble simple qu'à première vue. 





Si vous vous demandez quels râteaux sont prévus pour remplacer le compilateur système et comment nous les avons traités, bienvenue dans cat. 





Étape 1. L'assemblage proprement dit de gcc 

Il semblerait que tout soit simple ici: prendre gcc.spec du paquet gcc-8.3.1, changer 8 en 9, lancer rpmbuild –bb, combien de temps attendons-nous? Oui mais non. Pour commencer, vous devrez réviser et corriger tous les correctifs, et en même temps également installer des binutils plus frais, car ce n'est pas difficile. Ensuite, nous ne changeons pas simplement le compilateur, nous nous donnons quelques outils nvptx supplémentaires, ce qui signifie que lorsque la construction est terminée et que les tests commencent, les tests dans libgomp, liés au déchargement du code, commenceront à se bloquer et à rester bloqués. diverses positions étranges ... 





Il peut y avoir deux solutions ici: 





  1. Conservateur: dites aux développeurs "désolé, je n'ai pas pu le faire" et désactivez nvptx-tools. 





  1. : ,  nvptx  ,  rpmbuild, .  tests failed  , . 





Stage 2. Package libgcc.i686 has inferior architecture 

,      gcc-9.3.1-3.el8.x86_64.rpm, gcc-offload-nvptx-9.3.1-3.el8.x86_64.rpm  ..  ..   ,  ,   /etc/yum.repos.d,  dnf update … , ,  ? . , 64-  Debian  RedHat   x86 32- ( ,  multilib),   multilib    32- , (libgcc.i686, libgfortran.i686, libgomp.i686, libquadmath.i686  libstdc++.i686) . , : 





  1. :  mock      i686, (nvptx, , ). 





  1. : , 32- 64-,      .  gcc.spec  ,  .  gcc.spec  libgcc-i686.spec, %build, %install  : 





%install 

rm -rf %{buildroot} 

mkdir -p %{buildroot} 

tar cf - -C %{_buildrootdir}/%{name}-%{version}-%{release}.x86_64 usr | tar xf - -C %{buildroot} 

 

FULLPATH=%{buildroot}%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major} 

FULLEPATH=%{buildroot}%{_prefix}/libexec/gcc/%{gcc_target_platform}/%{gcc_major} 

 

# fix some things 

mkdir -p %{buildroot}/%{_lib} 

mv -f %{buildroot}%{_prefix}/%{_lib}/libgcc_s.so.1 %{buildroot}/%{_lib}/libgcc_s-%{gcc_major}-%{DATE}.so.1 

chmod 755 %{buildroot}/%{_lib}/libgcc_s-%{gcc_major}-%{DATE}.so.1 

ln -sf libgcc_s-%{gcc_major}-%{DATE}.so.1 %{buildroot}/%{_lib}/libgcc_s.so.1 

 

mkdir -p %{buildroot}%{_datadir}/gdb/auto-load/%{_prefix}/%{_lib} 

mv -f %{buildroot}%{_prefix}/%{_lib}/libstdc++*gdb.py* \ 

      %{buildroot}%{_datadir}/gdb/auto-load/%{_prefix}/%{_lib}/ 

pushd %{name}-%{version}-%{DATE}/libstdc++-v3/python 

 

for i in `find . -name \*.py`; do 

  touch -r $i %{buildroot}%{_prefix}/share/gcc-%{gcc_major}/python/$i 

done 

touch -r hook.in %{buildroot}%{_datadir}/gdb/auto-load/%{_prefix}/%{_lib}/libstdc++*gdb.py 

popd 

 

for f in `find %{buildroot}%{_prefix}/share/gcc-%{gcc_major}/python/ \ 

       %{buildroot}%{_datadir}/gdb/auto-load/%{_prefix}/%{_lib}/ -name \*.py`; do 

  r=${f/$RPM_BUILD_ROOT/} 

  %{__python3} -c 'import py_compile; py_compile.compile("'$f'", dfile="'$r'")' 

  %{__python3} -O -c 'import py_compile; py_compile.compile("'$f'", dfile="'$r'")' 

done 

 

rm -rf %{buildroot}%{_prefix}/%{_lib}/%{name} 
      
      



 rpmbuild –bb libgcc-i686.spec - ,  gcc   torture,  ,  32- ( , $RPM_BUILD_ROOT/RPMS/i686).  , ,  dnf makecache –repo gcc-9 && dnf update … , . 





Stage 3. Annobin  libtool 

,    RHEL  CentOS, ,  gcc   annobin.  , .  annobin.spec  , , : ,  gcc 8.3.1,   gcc,  gcc < %{gcc_next}   gcc <= %{gcc_next}, ,  gcc,  ,  gcc < %{gcc_next}    %undefine _annotated_build – . ,  _annotated_build  , (  ) . 





 libtool.   gcc,  , ,  libtool   gcc,   gcc   gcc-9. 





, . , , , ( dnf downgrade gcc),  . 





-, ? 








All Articles