Skip to content
Snippets Groups Projects
Commit eb83bb70 authored by Jeremy Rand's avatar Jeremy Rand Committed by boklm
Browse files

Bug 32355: gcc: Add linux-arm target

parent 1f881995
No related branches found
No related tags found
No related merge requests found
......@@ -16,11 +16,85 @@
# https://gcc.gnu.org/bugzilla/show_bug.cgi?id=48817.
export DEB_BUILD_HARDENING_FORMAT=0
[% END -%]
distdir=/var/tmp/dist/[% project %]
distdir=/var/tmp/dist/[% c("var/distdir") %]
mkdir /var/tmp/build
tar -C /var/tmp/build -xf $rootdir/[% c('input_files_by_name/gcc') %]
cd /var/tmp/build/[% project %]-[% c("version") %]
./configure --prefix=$distdir [% c("var/configure_opt") %]
[% 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/[% c('input_files_by_name/gcc') %]
# --with-headers is intended to solve a limits.h issue
[% project %]-[% 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("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/
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("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/
cd /var/tmp/build/gcc
make -j[% c("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/
cd /var/tmp/build/glibc
make -j[% c("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 $rootdir/[% c('input_files_by_name/gcc') %]
cd /var/tmp/build/[% project %]-[% c("version") %]
./configure --prefix=$distdir [% c("var/configure_opt") %]
[% END -%]
make -j[% c("num_procs") %]
make install
# tor-browser-build#31321: we need a link to our GCC, to prevent some projects
......@@ -28,6 +102,6 @@ make install
ln -s gcc $distdir/bin/cc
cd /var/tmp/dist
[% c('tar', {
tar_src => [ project ],
tar_src => [ c('var/distdir') ],
tar_args => '-czf ' _ dest_dir _ '/' _ c('filename'),
}) %]
......@@ -7,14 +7,17 @@ version: '[% pc("gcc-source", "version") %]'
container:
use_container: 1
var:
distdir: gcc
deps:
- build-essential
- libmpc-dev
setup: |
mkdir -p /var/tmp/dist
tar -C /var/tmp/dist -xf $rootdir/[% c("compiler_tarfile") %]
export PATH="/var/tmp/dist/gcc/bin:$PATH"
export LD_LIBRARY_PATH=/var/tmp/dist/gcc/lib64:/var/tmp/dist/gcc/lib32
export PATH="/var/tmp/dist/[% c("var/distdir") %]/bin:$PATH"
[% IF ! c("var/linux-cross") -%]
export LD_LIBRARY_PATH=/var/tmp/dist/[% c("var/distdir") %]/lib64:/var/tmp/dist/[% c("var/distdir") %]/lib32
[% END -%]
[% IF c("hardened_gcc") -%]
# Config options for hardening-wrapper
......@@ -25,14 +28,14 @@ var:
export DEB_BUILD_HARDENING_PIE=1
# Make sure we use the hardening wrapper
pushd /var/tmp/dist/gcc/bin
pushd /var/tmp/dist/[% c("var/distdir") %]/bin
cp /usr/bin/hardened-cc ./
mv gcc gcc.real
mv c++ c++.real
mv g++ g++.real
ln -sf hardened-cc gcc
ln -sf hardened-cc c++
ln -sf hardened-cc g++
mv [% c("var/target_prefix") %]gcc [% c("var/target_prefix") %]gcc.real
mv [% c("var/target_prefix") %]c++ [% c("var/target_prefix") %]c++.real
mv [% c("var/target_prefix") %]g++ [% c("var/target_prefix") %]g++.real
ln -sf hardened-cc [% c("var/target_prefix") %]gcc
ln -sf hardened-cc [% c("var/target_prefix") %]c++
ln -sf hardened-cc [% c("var/target_prefix") %]g++
popd
[% END -%]
......@@ -50,8 +53,34 @@ targets:
arch_deps:
- hardening-wrapper
- libc6-dev-i386
linux-cross:
var:
target_prefix: '[% c("var/crosstarget") %]-'
distdir: gcc-cross
# TODO: Consider upgrading to a glibc that works out of the box with the
# GCC version we use. However, removing our glibc version workarounds may
# not be desirable since we want to be able to easily bump the GCC
# version without worrying about linux-cross breakage.
glibc_version: 2.26
linux_version: 4.10.1
arch_deps:
- hardening-wrapper
- libc6-dev-i386
- gawk
linux-arm:
var:
configure_opt: --disable-multilib --enable-languages=c,c++ --target=arm-linux-gnueabihf --with-arch=armv7-a --with-fpu=vfpv3-d16 --with-float=hard --with-mode=thumb
input_files:
- project: container-image
- project: gcc-source
name: gcc
- name: binutils
project: binutils
enable: '[% c("var/linux-cross") -%]'
- URL: 'https://ftp.gnu.org/gnu/glibc/glibc-[% c("var/glibc_version") %].tar.xz'
sha256sum: e54e0a934cd2bc94429be79da5e9385898d2306b9eaf3c92d5a77af96190f6bd
enable: '[% c("var/linux-cross") -%]'
- URL: 'https://www.kernel.org/pub/linux/kernel/v4.x/linux-[% c("var/linux_version") %].tar.xz'
sha256sum: 6ca06bb5faf5f83600d7388bb623dae41df2a257de85ad5d1792e03302bc3543
enable: '[% c("var/linux-cross") -%]'
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment