#!/usr/bin/make -f include /usr/share/dpkg/architecture.mk include /usr/share/dpkg/buildopts.mk include /usr/share/dpkg/pkg-info.mk DEB_BUILD_OPTION_PARALLEL ?= 1 # Some GCC sources use non-string literals as format strings, # for example to define their own wrapper functions. export DEB_BUILD_MAINT_OPTIONS = hardening=+all,-format gnu_type = sh-elf gcc-version-major != sed -En 's/.*gcc-(.*)-source.*/\1/p' debian/control # Version of the GCC source Debian package. gcc-version != dpkg-query -Wf'$${source:Version}' gcc-$(gcc-version-major)-source gdb-version != dpkg-query -Wf'$${source:Version}' gdb-source newlib-upstream-version != dpkg-query -Wf'$${source:Upstream-Version}' newlib-source newlib-source-version != dpkg-query -Wf'$${source:Version}' newlib-source # https://gcc.gnu.org/install/configure.html recommends out-of-tree builds. %: dh $@ execute_before_dh_update_autotools_config: src src: tar -xf /usr/src/gcc-$(gcc-version-major)/gcc-*.tar.xz mv gcc-* $@ rm -rf $@/zlib # This first patch may be empty. patch -p1 -i /usr/src/gcc-$(gcc-version-major)/patches/git-updates.diff || true; patch -p1 -i /usr/src/gcc-$(gcc-version-major)/patches/gcc-gfdl-build.diff tar -xf /usr/src/newlib/newlib-*.tar.xz tar -xf /usr/src/gdb.tar.xz rm -rf gdb*/readline gdb*/zlib # Symbolically link directories from GDB and Newlib into the GCC tree. cd $@ && for i in ../gdb*/* ../newlib*/*; \ do \ if [ ! -e `basename "$$i"` -a -d "$$i" ]; \ then ln -s "$$i" . || exit 1; \ fi; \ done # gcc's configure script is too old to build GDB right. cd $@ && rm -f Makefile.def Makefile.in configure cd $@ && cp ../gdb*/Makefile.def ../gdb*/Makefile.in ../gdb*/configure . # Avoid dh_auto_*, see # https://gcc.gnu.org/legacy-ml/gcc/2013-04/msg00171.html. # gcc-major-version: for consistency with native gcc CONFIG_OPTS = \ --build=$(DEB_BUILD_GNU_TYPE) \ --host=$(DEB_HOST_GNU_TYPE) \ --target=$(gnu_type) \ SED=/bin/sed \ SHELL=/bin/sh \ BASH=/bin/bash \ CONFIG_SHELL=/bin/bash \ --prefix=/usr \ --disable-gdb \ --disable-libcc1 \ --enable-languages=c \ --with-gcc-major-version-only \ --without-included-gettext \ --with-pkgversion='GCC $(gcc-version) Debian $(DEB_VERSION)' \ --with-bugurl="https://www.debian.org/Bugs/" \ --with-system-zlib \ --with-newlib override_dh_auto_configure bld: mkdir -p bld if echo $(DEB_BUILD_OPTIONS) | grep -q terse; \ then QUIET_OPTS='--quiet --enable-silent-rules'; \ fi; \ cd bld && ../src/configure $(CONFIG_OPTS) $$QUIET_OPTS override_dh_auto_build: $(MAKE) -C bld -j$(DEB_BUILD_OPTION_PARALLEL) override_dh_auto_test: # With GCC, it is normal and expected that some of the tests will fail. # Running the tests allows checking for regressions by comparing build logs. $(MAKE) -C bld -j$(DEB_BUILD_OPTION_PARALLEL) check-gcc RUNTESTFLAGS="--target_board sh-sim" override_dh_auto_install: $(MAKE) -C bld install DESTDIR=`pwd`/debian/gcc-$(gnu_type) # The documentation is empty due to being licensed GFDL with invariant sections, # and the localization files are provided by gcc-*-locales rm -r debian/gcc-$(gnu_type)/usr/share/info debian/gcc-$(gnu_type)/usr/share/man debian/gcc-$(gnu_type)/usr/share/locale # The *.la files are unnecessary and strongly discouraged from being distributed in Debian. find debian/gcc-$(gnu_type) -name '*.la' -type f -exec rm {} \; $(MAKE) -C bld install-target-newlib DESTDIR=`pwd`/debian/libnewlib-$(gnu_type)-dev # We installed everything into gcc-sh-elf and now prune out Newlib. cd debian/libnewlib-$(gnu_type)-dev && find * -type f -exec rm -rf ../gcc-$(gnu_type)/{} \; find debian/gcc-$(gnu_type) debian/libnewlib-$(gnu_type)-dev -type d -empty -delete if ! echo $(DEB_BUILD_OPTIONS) | grep -q nostrip; \ then find debian/libnewlib-$(gnu_type)-dev/ -name '*.a' -exec \ $(gnu_type)-strip --strip-unneeded --remove-section=.comment --remove-section=.note {} + ; \ fi # Shipping copyright information applicable to the binaries is required by Debian Policy. execute_before_dh_installdocs: debian/gcc-$(gnu_type).copyright debian/libnewlib-$(gnu_type)-dev.copyright debian/gcc-$(gnu_type).copyright: debian/copyright /usr/share/doc/gcc-$(gcc-version-major)-source/copyright /usr/share/doc/gdb-source/copyright cp debian/copyright $@ printf -- "\n-----BEGIN GCC-$(gcc-version-major)-SOURCE COPYRIGHT INFORMATION-----\n" >> $@ cat /usr/share/doc/gcc-$(gcc-version-major)-source/copyright >> $@ printf -- "-----END GCC-$(gcc-version-major)-SOURCE COPYRIGHT INFORMATION-----\n" \ "\n-----BEGIN GDB-SOURCE COPYRIGHT INFORMATION-----\n" >> $@ cat /usr/share/doc/gdb-source/copyright >> $@ printf -- "-----END GDB-SOURCE COPYRIGHT INFORMATION-----\n" >> $@ debian/libnewlib-$(gnu_type)-dev.copyright: debian/copyright /usr/share/doc/newlib-source/copyright cp debian/copyright $@ printf -- "\n-----BEGIN NEWLIB-SOURCE COPYRIGHT INFORMATION-----\n" >> $@ cat /usr/share/doc/newlib-source/copyright >> $@ printf -- "-----END NEWLIB-SOURCE COPYRIGHT INFORMATION-----\n" >> $@ # The private shared library does not need ldconfig triggers. override_dh_makeshlibs: dh_makeshlibs --no-scripts override_dh_gencontrol: dh_gencontrol -p gcc-$(gnu_type) -- -v$(gcc-version)+$(DEB_VERSION) \ -Vgcc-version=$(gcc-version) \ -Vgcc-version-major=$(gcc-version-major) \ -Vgdb-version=$(gdb-version) dh_gencontrol -p libnewlib-$(gnu_type)-dev -- -v$(newlib-upstream-version)+$(DEB_VERSION) \ -Vnewlib-source-version=$(newlib-source-version)