Hardcode host-specific name for LTO plugin
[platform/upstream/binutils.git] / packaging / cross-arm-binutils.spec
index 396c8e8..0b00125 100644 (file)
@@ -1,5 +1,5 @@
-Name:         cross-arm-binutils
-ExcludeArch: %arm
+Name:          cross-arm-binutils
+ExclusiveArch: %{ix86} x86_64
 %define cross 1
 %define TARGET arm
 BuildRequires:  bison
@@ -9,9 +9,10 @@ BuildRequires:  gcc-c++
 BuildRequires:  glibc-devel-static
 # for some gold tests
 BuildRequires:  bc
-BuildRequires:  makeinfo
+BuildRequires:  makeinfo ncurses-devel
 BuildRequires:  zlib-devel-static
-Version:        2.23.1
+Requires(pre):  update-alternatives
+Version:        2.25
 Release:        0
 #
 # RUN_TESTS
@@ -22,7 +23,7 @@ Release:        0
 #
 # handle test suite failures
 #
-%ifarch alpha %arm hppa mips sh4 %sparc
+%ifarch alpha %arm aarch64 hppa mips sh4 %sparc
 %define        make_check_handling     true
 %else
 # XXX check again
@@ -34,36 +35,23 @@ Release:        0
 %define        make_check_handling     false
 %endif
 # handle all binary object formats supported by SuSE (and a few more)
-%ifarch %ix86 %arm ia64 ppc ppc64 s390 s390x x86_64
+%ifarch %ix86 %arm aarch64 ia64 ppc ppc64 s390 s390x x86_64
 %define build_multitarget 1
 %else
 %define build_multitarget 0
 %endif
-%define target_list alpha armv5l armv7l armv8l hppa hppa64 i686 ia64 m68k mips powerpc powerpc64 s390 s390x sh4 sparc sparc64 x86_64
+%define target_list aarch64 alpha armv5l armv7l armv8l hppa hppa64 i686 ia64 m68k mips powerpc powerpc64 s390 s390x sh4 sparc sparc64 x86_64
 #
 #
 #
 Url:            http://www.gnu.org/software/binutils/
-%define binutils_version %(echo %version | sed 's/\\.[0-9]\\{8\\}$//')
+#%define binutils_version %(echo %version | sed 's/\\.[0-9]\\{8\\}$//')
 Summary:        GNU Binutils
 License:        GFDL-1.3 and GPL-3.0+
-Group:          Development/Tools/Building
-Source:         binutils-%{binutils_version}.tar.bz2
+Group:          Development/Building
+Source:         binutils-%{version}.tar.bz2
 Source1:        pre_checkin.sh
 Source3:        baselibs.conf
-# Patches auto-generated by git-buildpackage:
-Patch0:     0001-skip-rpaths.patch
-Patch1:     0002-x86-64-biarch.patch
-Patch2:     0003-unit-at-a-time.patch
-Patch3:     0004-ld-dtags.patch
-Patch4:     0005-ld-relro.patch
-Patch5:     0006-testsuite.patch
-Patch6:     0007-enable-targets-gold.patch
-Patch7:     0008-use-hashtype-both-by-default.patch
-Patch8:     0009-build-as-needed.patch
-Patch9:     0010-fixup-testcase-perturb.patch
-Patch10:    0011-gold-depend-on-opcodes.patch
-Patch11:    0012-bso12451.patch
 
 %description
 C compiler utilities: ar, as, gprof, ld, nm, objcopy, objdump, ranlib,
@@ -74,11 +62,9 @@ to compile a program or kernel.
 %package gold
 Summary:        The gold linker
 License:        GPL-3.0+
-Group:          Development/Tools/Building
-Requires:       binutils = %{version}-%{release}
-%if 0%{!?cross:1}
-%define gold_archs %ix86 %arm x86_64 ppc ppc64 %sparc
-%endif
+Group:          Development/Building
+Requires:       %{name} = %{version}-%{release}
+%define gold_archs %ix86 %arm aarch64 x86_64 ppc ppc64 %sparc
 
 %description gold
 gold is an ELF linker. It is intended to have complete support for ELF
@@ -89,7 +75,7 @@ a drop-in replacement for the older GNU linker.
 %package devel
 Summary:        GNU binutils (BFD development files)
 License:        GPL-3.0+
-Group:          Development/Libraries/C and C++
+Group:          Development/Building
 Requires:       binutils = %{version}-%{release}
 Requires:       zlib-devel
 Provides:       binutils:/usr/include/bfd.h
@@ -109,34 +95,18 @@ binutils.
 
 %prep
 echo "make check will return with %{make_check_handling} in case of testsuite failures."
-%setup -q -n binutils-%{binutils_version}
-# 0001-skip-rpaths.patch
-%patch0 -p1
-# 0002-x86-64-biarch.patch
-%patch1 -p1
-# 0003-unit-at-a-time.patch
-%patch2 -p1
-# 0004-ld-dtags.patch
-%patch3 -p1
-# 0005-ld-relro.patch
-%patch4 -p1
-# 0006-testsuite.patch
-%patch5 -p1
-# 0007-enable-targets-gold.patch
-%patch6 -p1
-# 0008-use-hashtype-both-by-default.patch
-%patch7 -p1
-# 0009-build-as-needed.patch
-%patch8 -p1
-# 0010-fixup-testcase-perturb.patch
-%patch9 -p1
-# 0011-gold-depend-on-opcodes.patch
-%patch10 -p1
-# 0012-bso12451.patch
-%patch11 -p1
+%setup -q -n binutils-%{version}
+
+%if 0%{!?cross:1}
+%ifarch %arm
+ulimit -Hs unlimited
+ulimit -s unlimited
+%endif
+%endif
 
 sed -i -e '/BFD_VERSION_DATE/s/$/-%(echo %release | sed 's/\.[0-9]*$//')/' bfd/version.h
 %build
+RPM_OPT_FLAGS="$RPM_OPT_FLAGS -DBFD_PLUGIN_LTO_NAME=liblto_plugin_%{_arch}.so"
 RPM_OPT_FLAGS="$RPM_OPT_FLAGS -Wno-error"
 RPM_OPT_FLAGS=`echo $RPM_OPT_FLAGS |sed -e 's/atom/i686/g'`
 %if 0%{!?cross:1}
@@ -168,6 +138,9 @@ EXTRA_TARGETS="$EXTRA_TARGETS,spu-elf"
 %ifarch %arm
 EXTRA_TARGETS="$EXTRA_TARGETS,arm-tizen-linux-gnueabi"
 %endif
+%ifarch aarch64
+EXTRA_TARGETS="$EXTRA_TARGETS,aarch64-tizen-linux"
+%endif
 %endif
 %define common_flags CFLAGS="${RPM_OPT_FLAGS}" CXXFLAGS="${RPM_OPT_FLAGS}" \\\
        --prefix=%{_prefix} --libdir=%{_libdir} \\\
@@ -179,6 +152,12 @@ EXTRA_TARGETS="$EXTRA_TARGETS,arm-tizen-linux-gnueabi"
        --with-pic --build=%{HOST} 
 mkdir build-dir
 cd build-dir
+
+%ifarch %arm
+export CONFIG_SHELL="/bin/bash"
+export SHELL="/bin/bash"
+%endif
+
 ../configure %common_flags \
        ${EXTRA_TARGETS:+--enable-targets="${EXTRA_TARGETS#,}"} \
        --enable-plugins \
@@ -218,6 +197,9 @@ EXTRA_TARGETS="$EXTRA_TARGETS,hppa64-tizen-linux"
 %if "%{TARGET}" == "arm"
 EXTRA_TARGETS="$EXTRA_TARGETS,arm-tizen-linux-gnueabi"
 %endif
+%if "%{TARGET}" == "aarch64"
+EXTRA_TARGETS="$EXTRA_TARGETS,aarch64-tizen-linux"
+%endif
 %if "%{TARGET}" == "avr" || "%{TARGET}" == "spu"
 TARGET_OS=%{TARGET}
 %else
@@ -228,6 +210,10 @@ TARGET_OS=%{TARGET}-tizen-linux
 %endif
 %endif
 ../configure CFLAGS="${RPM_OPT_FLAGS}" \
+  --enable-plugins \
+%ifarch %gold_archs
+  --enable-gold \
+%endif
   --prefix=%{_prefix} \
   --with-bugurl=http://bugs.opensuse.org/ \
   --with-pkgversion="GNU Binutils; %{DIST}" \
@@ -269,19 +255,33 @@ cd build-dir
 make DESTDIR=$RPM_BUILD_ROOT install-gold
 ln -sf ld.gold $RPM_BUILD_ROOT%{_bindir}/gold
 %endif
+
 make DESTDIR=$RPM_BUILD_ROOT install-info install
 make -C gas/doc DESTDIR=$RPM_BUILD_ROOT install-info-am install-am
 make DESTDIR=$RPM_BUILD_ROOT install-bfd install-opcodes
-# we could eventually use alternatives for /usr/bin/ld
-if test -f $RPM_BUILD_ROOT%{_bindir}/ld.bfd; then
-  rm $RPM_BUILD_ROOT%{_bindir}/ld
-  ln -sf ld.bfd $RPM_BUILD_ROOT%{_bindir}/ld;
+
+# We have gdb in separate package
+rm -f %buildroot/%_bindir/gdb*
+rm -f %buildroot/%_bindir/gcore*
+
+if [ ! -f "%buildroot/%_bindir/ld.bfd" ]; then
+  mv "%buildroot/%_bindir"/{ld,ld.bfd};
+else
+  rm -f "%buildroot/%_bindir/ld";
 fi
+mkdir -p "%buildroot/%_sysconfdir/alternatives";
+ln -s "%_bindir/ld" "%buildroot/%_sysconfdir/alternatives/ld";
+ln -s "%_sysconfdir/alternatives/ld" "%buildroot/%_bindir/ld";
 rm -rf $RPM_BUILD_ROOT%{_prefix}/%{HOST}/bin
 mkdir -p $RPM_BUILD_ROOT%{_prefix}/%{HOST}/bin
 ln -sf ../../bin/{ar,as,ld,nm,ranlib,strip} $RPM_BUILD_ROOT%{_prefix}/%{HOST}/bin
-#mv $RPM_BUILD_ROOT%{_prefix}/%{HOST}/lib/ldscripts $RPM_BUILD_ROOT%{_libdir}
-#ln -sf ../../%{_lib}/ldscripts $RPM_BUILD_ROOT%{_prefix}/%{HOST}/lib/ldscripts
+%ifarch %gold_archs
+ln -sf ../../bin/ld.gold $RPM_BUILD_ROOT%{_prefix}/%{HOST}/bin
+%endif
+
+mv $RPM_BUILD_ROOT%{_prefix}/%{HOST}/lib/ldscripts $RPM_BUILD_ROOT%{_libdir}
+ln -sf ../../%{_lib}/ldscripts $RPM_BUILD_ROOT%{_prefix}/%{HOST}/lib/ldscripts
+
 # Install header files
 make -C libiberty install_to_libdir target_header_dir=/usr/include DESTDIR=$RPM_BUILD_ROOT
 # We want the PIC libiberty.a
@@ -290,11 +290,10 @@ install -m 644 libiberty/pic/libiberty.a $RPM_BUILD_ROOT%{_libdir}
 chmod a+x $RPM_BUILD_ROOT%{_libdir}/libbfd-*
 chmod a+x $RPM_BUILD_ROOT%{_libdir}/libopcodes-*
 # No shared linking outside binutils
-rm $RPM_BUILD_ROOT%{_libdir}/lib{bfd,opcodes}.so
-rm $RPM_BUILD_ROOT%{_libdir}/lib{bfd,opcodes}.la
+rm -f $RPM_BUILD_ROOT%{_libdir}/lib{bfd,opcodes,inproctrace}.so
+rm -f $RPM_BUILD_ROOT%{_libdir}/lib{bfd,opcodes}.la
 # Remove unwanted files to shut up rpm
-rm $RPM_BUILD_ROOT%{_infodir}/configure* $RPM_BUILD_ROOT%{_infodir}/standards.info*
-rm $RPM_BUILD_ROOT%{_mandir}/man1/dlltool.1 $RPM_BUILD_ROOT%{_mandir}/man1/windres.1 $RPM_BUILD_ROOT%{_mandir}/man1/windmc.1
+rm -f $RPM_BUILD_ROOT%{_mandir}/man1/dlltool.1 $RPM_BUILD_ROOT%{_mandir}/man1/windres.1 $RPM_BUILD_ROOT%{_mandir}/man1/windmc.1
 cd ..
 #%find_lang binutils
 #%find_lang bfd binutils.lang
@@ -326,15 +325,38 @@ rm -rf $RPM_BUILD_ROOT%{_infodir}
 rm -rf $RPM_BUILD_ROOT%{_prefix}/lib*
 rm -rf $RPM_BUILD_ROOT%{_prefix}/include
 rm -f $RPM_BUILD_ROOT%{_prefix}/bin/*-c++filt
+
+# We have gdb in separate package
+rm -f $RPM_BUILD_ROOT%{_bindir}/gdb*
+rm -f $RPM_BUILD_ROOT%{_bindir}/gcore*
+rm -rf $RPM_BUILD_ROOT%{_datadir}/gdb
+
 > ../binutils.lang
 %endif
 cd $RPM_BUILD_DIR/binutils-%version
 
-%clean
-rm -rf $RPM_BUILD_ROOT
 
 %if 0%{!?cross:1}
 %docs_package
+%post
+"%_sbindir/update-alternatives" --install \
+    "%_bindir/ld" ld "%_bindir/ld.bfd" 1
+
+%post gold
+"%_sbindir/update-alternatives" --install \
+    "%_bindir/ld" ld "%_bindir/ld.gold" 2
+
+
+%preun
+if [ "$1" = 0 ]; then
+    "%_sbindir/update-alternatives" --remove ld "%_bindir/ld.bfd";
+fi;
+
+%preun gold
+if [ "$1" = 0 ]; then
+    "%_sbindir/update-alternatives" --remove ld "%_bindir/ld.gold";
+fi;
+
 %endif
 
 %files 
@@ -343,11 +365,11 @@ rm -rf $RPM_BUILD_ROOT
 %{_docdir}/%{name}
 %{_prefix}/%{HOST}/bin/*
 %{_prefix}/%{HOST}/lib/ldscripts
-#%{_libdir}/ldscripts
+%ghost %_sysconfdir/alternatives/ld
+%{_libdir}/ldscripts
 %{_bindir}/*
 %ifarch %gold_archs
-%exclude %{_bindir}/gold
-%exclude %{_bindir}/ld.gold
+%exclude %{_bindir}/*gold
 %endif
 %doc %{_infodir}/*.gz
 %{_libdir}/lib*-%{version}*.so
@@ -359,16 +381,25 @@ rm -rf $RPM_BUILD_ROOT
 %ifarch %gold_archs
 %files gold 
 %defattr(-,root,root)
-%doc gold/NEWS gold/README
-%{_bindir}/gold
-%{_bindir}/ld.gold
+%{_bindir}/*gold
+%if 0%{?cross:1}
+%if "%{TARGET}" == "arm"
+%{_prefix}/%{TARGET}-tizen-linux-gnueabi/bin/*gold
+%else
+%{_prefix}/%{TARGET}-tizen-linux/bin/*gold
+%endif
+%else
+%{_prefix}/%{HOST}/bin/*gold
+%endif
 %endif
 
 %if 0%{!?cross:1}
 %files devel
 %defattr(-,root,root)
 %{_prefix}/include/*.h
+%{_prefix}/include/gdb/*.h
 %{_libdir}/lib*.*a
+%{_datadir}/gdb/*
 %endif
 
 %changelog