%define cross armv7l %define armv7l 1 %ifarch armv7l %define ARCH armv7l %define ABI eabi %endif %ifarch armv7hl %define ARCH armv7hl %define ABI eabihf %endif %ifarch %ix86 %define ARCH i586 %endif %ifarch x86_64 %define ARCH x86_64 %endif %ifarch aarch64 %define ARCH aarch64 %endif %define host_arch %{ARCH}-tizen-linux-gnu%{?ABI} %define target_cpu %{?cross}%{!?cross:%{ARCH}} %define target_abi %{?cross:%{?armv7l:eabi}%{?armv7hl:eabihf}}%{!?cross:%{?ABI}} %define target_arch %{target_cpu}-tizen-linux-gnu%{?target_abi} %if 0%{?run_tests} %define binutils_run_tests 1 %endif # Enable this when testing on device to: # 1. Enable macro to turn on testsuite building ('binutils_run_tests 1') # 2. Keep 'obj/' folder in build stage as we do not want to rebuild all binutils # again on device after invoking rpmbuild --short-circuit -bc ... # 3. Skip configure and make commands and go directly to 'make check' %if 0%{?run_tests_on_device} %define binutils_run_tests 1 %define binutils_keep_build_dir 1 %define binutils_skip_configure 1 %define binutils_skip_make 1 %endif # Exit right after 'make ..' step to keep all object files produced by binutils build %if 0%{?exit_on_make_finish} %define binutils_exit_on_make_finish 1 %endif Name: binutils%{?cross:-%{cross}} BuildRequires: makeinfo BuildRequires: bison BuildRequires: flex BuildRequires: expat-devel BuildRequires: ncurses-devel BuildRequires: zlib-devel BuildRequires: gcc-c++ %if 0%{?binutils_run_tests} BuildRequires: dejagnu BuildRequires: glibc-devel-static %endif Version: 2.33.1 Release: 0 Url: http://www.gnu.org/software/binutils/ Summary: GNU Binutils License: GFDL-1.3 and GPL-3.0+ Group: Development/Building %{?cross:ExcludeArch: %{cross}} Source: binutils-%{version}.tar.bz2 Source1001: binutils.manifest %description C compiler utilities: ar, as, gprof, ld, nm, objcopy, objdump, ranlib, size, strings, and strip. These utilities are needed whenever you want to compile a program or kernel. %package gold Summary: The gold linker License: GPL-3.0+ Group: Development/Building %description gold gold is an ELF linker. It is intended to have complete support for ELF and to run as fast as possible on modern systems. For normal use it is a drop-in replacement for the older GNU linker. %package devel Summary: GNU binutils (BFD development files) License: GPL-3.0+ Group: Development/Building Requires: zlib-devel %description devel This package includes header files and static libraries necessary to build programs which use the GNU BFD library, which is part of binutils. %{!?cross: %package -n gdb Summary: A GNU source-level debugger for C, C++, Java and other languages License: GPL-3.0+ Group: Development/Building Requires: python %description -n gdb GDB, the GNU debugger, allows you to debug programs written in C, C++, Java, and other languages, by executing them in a controlled fashion and printing their data. } %package -n gdb-server Summary: A standalone server for GDB (the GNU source-level debugger) %description -n gdb-server GDB, the GNU debugger, allows you to debug programs written in C, C++, Java, and other languages, by executing them in a controlled fashion and printing their data. This package provides a program that allows you to run GDB on a different machine than the one which is running the program being debugged. %{?binutils_run_tests: %package testresults Summary: Testsuite results License: SUSE-Public-Domain Group: Development/Languages %description testresults Results from running the gcc and target library testsuites. } %prep %setup -q -n binutils-%{version} cp %{SOURCE1001} . %build RPM_OPT_FLAGS="$RPM_OPT_FLAGS -Wno-error %{?cross:-DIGNORE_BROKEN_PLUGINS}" export CFLAGS="${RPM_OPT_FLAGS}" export CXXFLAGS="${RPM_OPT_FLAGS}" %{!?binutils_keep_build_dir: rm -rf build-dir } mkdir build-dir cd build-dir %{!?binutils_skip_configure: ../configure \ --prefix=%{_prefix} --libdir=%{_libdir} \ --infodir=%{_infodir} --mandir=%{_mandir} \ --with-bugurl=https://bugs.tizen.org/ \ --with-sysroot=/ \ --disable-nls \ --with-separate-debug-dir=%{_prefix}/lib/debug \ --with-pic \ --build=%{host_arch} --target=%{target_arch} \ --host=%{host_arch} \ %{?annobin_verification: --enable-annobin-verification=warn } \ %{?annobin_verification_strict: --enable-annobin-verification=strict } \ %{?cross: \ --enable-targets=%{target_arch} \ --enable-64-bit-bfd \ } \ %{!?cross: \ --enable-targets=aarch64-tizen-linux,armv7l-tizen-linux,armv7hl-tizen-linux,armv8l-tizen-linux,i686-tizen-linux,x86_64-tizen-linux \ } \ --enable-plugins \ --enable-gold \ --enable-shared \ --enable-new-dtags \ --with-gdb-datadir=%{_datadir}/gdb \ --enable-gdb-build-warnings=,-Wno-unused \ --with-separate-debug-dir=/usr/lib/debug \ --disable-sim \ --with-expat } %{!?binutils_skip_make: make %{?_smp_mflags} } %{?binutils_exit_on_make_finish: exit 1 } %{?binutils_run_tests: echo "Run testsuite" # asan needs a whole shadow address space ulimit -v unlimited || true make -k check %{?_smp_mflags} || true mkdir ../testresults ../contrib/test_summary | tee ../testresults/test_summary.txt } %install cd build-dir make DESTDIR=$RPM_BUILD_ROOT install # Copy instead of hardlinks for binary in ar as ld{,.bfd,.gold} nm obj{dump,copy} ranlib strip do rm %{buildroot}%{_prefix}/%{target_arch}/bin/$binary %{!?cross: cp %{buildroot}%{_bindir}/$binary %{buildroot}%{_prefix}/%{target_arch}/bin/$binary } %{?cross: cp %{buildroot}%{_bindir}/%{target_arch}-$binary %{buildroot}%{_prefix}/%{target_arch}/bin/$binary } done install -m 644 libiberty/pic/libiberty.a %{buildroot}%{_prefix}/%{_lib} install -m 644 ../include/libiberty.h %{buildroot}%{_prefix}/include %{?binutils_run_tests: find . \( -name "*.sum" -o -name "*.log" -a \! -name "config.log" \) -exec tar -rf testresults.tar {} \; mkdir -p ../testresults && tar -xf testresults.tar -C ../testresults find ../testresults/ -type f -exec chmod 644 {} \; } # Remove unwanted files to shut up rpm %{remove_docs} rm -rf %{buildroot}%{_libdir}/lib{bfd,opcodes,inproctrace}.{so,la} %{?cross: rm -rf %{buildroot}%{_prefix}/%{target_arch}/lib/ldscripts rm -rf %{buildroot}%{_prefix}/%{host_arch} rm -rf %{buildroot}%{_includedir} rm -rf %{buildroot}%{_prefix}/lib* rm -rf %{buildroot}%{_datadir} } %files %manifest binutils.manifest %defattr(-,root,root) %{_bindir}/* %{_prefix}/%{target_arch}/bin/* %{!?cross: %exclude %{_bindir}/gdb* %exclude %{_bindir}/ld.gold %exclude %{_prefix}/%{target_arch}/bin/ld.gold %{_libdir}/*.so %{_prefix}/%{host_arch}/lib/ldscripts %files devel %manifest binutils.manifest %defattr(-,root,root) %{_includedir}/*.h %{_includedir}/gdb/*.h %{_libdir}/*.a %files gold %manifest binutils.manifest %defattr(-,root,root) %{_bindir}/ld.gold %{_prefix}/%{target_arch}/bin/ld.gold %files -n gdb %{_datadir}/gdb %{_bindir}/gcore %{_bindir}/gdb %{_bindir}/gdb-add-index %files -n gdb-server %{_bindir}/gdbserver } %{?binutils_run_tests: %files testresults %defattr(-,root,root) %doc testresults/test_summary.txt %doc testresults/* } %changelog