123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109 |
- #!/bin/sh
- [% c("var/set_default_env") -%]
- [% c("var/setarch") -%]
- [% IF c("var/linux") -%]
- # Config options for hardening-wrapper
- export DEB_BUILD_HARDENING=1
- export DEB_BUILD_HARDENING_STACKPROTECTOR=1
- export DEB_BUILD_HARDENING_FORTIFY=1
- # Since r223796 landed on GCC master enforcing PIE breaks GCC compilation.
- # The compiler gets built with `-fno-PIE` and linked with `-no-pie` as not
- # doing so would make precompiled headers (PCH) fail.
- # It is okay for us to omit this right now as it does not change any hardening
- # flags in the resulting bundles.
- export DEB_BUILD_HARDENING_PIE=0
- # We need to disable `-Werror=format-security` as GCC does not build with it
- # anymore. It seems it got audited for those problems already:
- # https://gcc.gnu.org/bugzilla/show_bug.cgi?id=48817.
- export DEB_BUILD_HARDENING_FORMAT=0
- [% END -%]
- distdir=/var/tmp/dist/[% c("var/distdir") %]
- mkdir /var/tmp/build
- [% IF c("var/linux-cross") -%]
- # Install binutils (needed for cross-compiling)
- mkdir /var/tmp/dist
- cd /var/tmp/dist
- tar xf $rootdir/[% c('input_files_by_name/binutils') %]
- mv binutils $distdir
- export PATH="$distdir/bin:$PATH"
- # Install Linux headers, see Step 2 of
- # https://preshing.com/20141119/how-to-build-a-gcc-cross-compiler/
- # Doing this before gcc configure is intended to solve a limits.h issue
- cd /var/tmp/build
- mkdir linux
- cd linux
- tar -xJf $rootdir/linux-[% c("var/linux_version") %].tar.xz
- cd linux-[% c("var/linux_version") %]
- make ARCH=[% c("arch") %] INSTALL_HDR_PATH=$distdir/[% c("var/crosstarget") %] headers_install
- cd /var/tmp/build
- mkdir gcc
- cd gcc
- tar -xJf $rootdir/gcc-[% c("version") %].tar.xz
- # --with-headers is intended to solve a limits.h issue
- gcc-[% c("version") %]/configure --prefix=$distdir --with-headers=$distdir/[% c("var/crosstarget") %]/include/linux [% c("var/configure_opt") %]
- # For cross-compiling to work, we need to partially build GCC, then build
- # glibc, then come back to finish GCC.
- # Build only the components of GCC that don't need glibc, see Step 3 of
- # https://preshing.com/20141119/how-to-build-a-gcc-cross-compiler/
- cd /var/tmp/build/gcc
- make -j[% c("buildconf/num_procs") %] all-gcc
- make install-gcc
- # Removing sys-include is intended to solve a limits.h issue
- rm --recursive --force $distdir/[% c("var/crosstarget") %]/sys-include
- # Build glibc headers and startup files, see Step 4 of
- # https://preshing.com/20141119/how-to-build-a-gcc-cross-compiler/
- # TODO: this part is untested
- cd /var/tmp/build
- mkdir glibc
- cd glibc
- tar -xJf $rootdir/glibc-[% c("var/glibc_version") %].tar.xz
- # TODO: Remove --disable-werror once glibc is upgraded to a version that's
- # designed to work with the GCC version we're using.
- glibc-[% c("var/glibc_version") %]/configure --prefix=$distdir/[% c("var/crosstarget") %] --build=$MACHTYPE --host=[% c("var/crosstarget") %] --target=[% c("var/crosstarget") %] --with-headers=$distdir/[% c("var/crosstarget") %]/include --disable-multilib --disable-werror libc_cv_forced_unwind=yes
- make install-bootstrap-headers=yes install-headers
- make -j[% c("buildconf/num_procs") %] csu/subdir_lib
- install csu/crt1.o csu/crti.o csu/crtn.o $distdir/[% c("var/crosstarget") %]/lib
- [% c("var/crosstarget") %]-gcc -nostdlib -nostartfiles -shared -x c /dev/null -o $distdir/[% c("var/crosstarget") %]/lib/libc.so
- # stdio_lim.h is intended to solve a limits.h issue
- touch $distdir/[% c("var/crosstarget") %]/include/gnu/stubs.h $distdir/[% c("var/crosstarget") %]/include/bits/stdio_lim.h
- # Build compiler support library, see Step 5 of
- # https://preshing.com/20141119/how-to-build-a-gcc-cross-compiler/
- # TODO: this part is untested
- cd /var/tmp/build/gcc
- make -j[% c("buildconf/num_procs") %] all-target-libgcc
- make install-target-libgcc
- # finish building glibc, see Step 6 of
- # https://preshing.com/20141119/how-to-build-a-gcc-cross-compiler/
- # TODO: this part is untested
- cd /var/tmp/build/glibc
- make -j[% c("buildconf/num_procs") %]
- make install
- # We're done with glibc, we can now finish building gcc...
- cd /var/tmp/build/gcc
- [% ELSE -%]
- tar -C /var/tmp/build -xf [% project %]-[% c("version") %].tar.xz
- cd /var/tmp/build/[% project %]-[% c("version") %]
- ./configure --prefix=$distdir [% c("var/configure_opt") %]
- [% END -%]
- make -j[% c("buildconf/num_procs") %]
- make install
- cd /var/tmp/dist
- [% c('tar', {
- tar_src => [ c('distdir') ],
- tar_args => '-czf ' _ dest_dir _ '/' _ c('filename'),
- }) %]
|