Pier Angelo Vendrame pushed to branch main at The Tor Project / Applications / tor-browser-build
Commits:
-
08c95509
by NoisyCoil at 2024-05-08T15:40:26+02:00
-
9c8ed4d1
by NoisyCoil at 2024-05-08T15:43:49+02:00
-
e53ab0d3
by NoisyCoil at 2024-05-08T15:44:51+02:00
-
af937966
by NoisyCoil at 2024-05-08T15:46:09+02:00
-
db06f569
by NoisyCoil at 2024-05-08T15:49:12+02:00
-
da1663bd
by NoisyCoil at 2024-05-09T11:17:19+02:00
-
06de89a5
by NoisyCoil at 2024-05-09T11:17:19+02:00
16 changed files:
- projects/binutils/build
- projects/binutils/config
- projects/container-image/config
- + projects/gcc-cross/build
- + projects/gcc-cross/config
- + projects/gcc-cross/gcc-cross.patch
- + projects/gcc-cross/glibc-cross-linux-aarch64-2.patch
- + projects/gcc-cross/glibc-cross-linux-aarch64.patch
- projects/gcc/build
- projects/gcc/config
- projects/go-bootstrap/config
- projects/go/config
- projects/openssl/config
- projects/tor/build
- projects/tor/config
- rbm.conf
Changes:
| 1 | 1 | #!/bin/bash
|
| 2 | 2 | [% c("var/set_default_env") -%]
|
| 3 | 3 | mkdir /var/tmp/dist
|
| 4 | -distdir=/var/tmp/dist/binutils
|
|
| 4 | +distdir=/var/tmp/dist/[% c("var/distdir") %]
|
|
| 5 | 5 | [% IF c("var/linux"); GET c("var/set_hardened_build_flags"); END %]
|
| 6 | 6 | |
| 7 | 7 | tar xf [% project %]-[% c("version") %].tar.xz
|
| ... | ... | @@ -15,6 +15,6 @@ make install MAKEINFO=true |
| 15 | 15 | |
| 16 | 16 | cd /var/tmp/dist
|
| 17 | 17 | [% c('tar', {
|
| 18 | - tar_src => [ project ],
|
|
| 18 | + tar_src => [ c('var/distdir') ],
|
|
| 19 | 19 | tar_args => '-caf ' _ dest_dir _ '/' _ c('filename'),
|
| 20 | 20 | }) %] |
| 1 | 1 | # vim: filetype=yaml sw=2
|
| 2 | 2 | version: 2.39
|
| 3 | -filename: '[% project %]-[% c("version") %]-[% c("var/build_id") %].tar.[% c("compress_tar") %]'
|
|
| 3 | +filename: '[% project %]-[% c("version") %]-[% IF c("var/linux-cross") %]cross-[% c("arch") %]-[% END %][% c("var/build_id") %].tar.[% c("compress_tar") %]'
|
|
| 4 | 4 | container:
|
| 5 | 5 | use_container: 1
|
| 6 | 6 | var:
|
| 7 | + distdir: binutils
|
|
| 7 | 8 | configure_opt: '--disable-multilib --enable-gold --enable-deterministic-archives --enable-plugins'
|
| 8 | 9 | |
| 9 | 10 | targets:
|
| ... | ... | @@ -12,6 +13,7 @@ targets: |
| 12 | 13 | configure_opt: '--target=[% c("arch") %]-w64-mingw32 --disable-multilib --enable-deterministic-archives'
|
| 13 | 14 | linux-cross:
|
| 14 | 15 | var:
|
| 16 | + distdir: 'binutils-cross-[% c("arch") %]'
|
|
| 15 | 17 | # gold is disabled on cross-compiles until we upgrade to glibc 2.26 and
|
| 16 | 18 | # binutils 2.28
|
| 17 | 19 | configure_opt: '--target=[% c("var/crosstarget") %] --disable-multilib --enable-deterministic-archives --enable-plugins'
|
| ... | ... | @@ -34,7 +34,7 @@ pre: | |
| 34 | 34 | apt-get update -y -q
|
| 35 | 35 | [% IF pc(c('origin_project'), 'var/pre_pkginst', { step => c('origin_step') }) -%]
|
| 36 | 36 | [% pc(c('origin_project'), 'var/pre_pkginst', { step => c('origin_step') }) %]
|
| 37 | - [% IF c("var/linux-cross") -%]
|
|
| 37 | + [% IF c("var/linux-cross") && ! pc(c('origin_project'), 'var/no_crosscompile', { step => c('origin_step') }) -%]
|
|
| 38 | 38 | dpkg --add-architecture [% c("var/arch_debian") %]
|
| 39 | 39 | [% END -%]
|
| 40 | 40 | # Update the package cache again because `pre_pkginst` may change the
|
| 1 | +#!/bin/sh
|
|
| 2 | +[% c("var/set_default_env") -%]
|
|
| 3 | +mkdir -p /var/tmp/build
|
|
| 4 | +distdir=/var/tmp/dist/[% c("var/distdir") %]
|
|
| 5 | + |
|
| 6 | +# Install native gcc
|
|
| 7 | +mkdir /var/tmp/dist
|
|
| 8 | +cd /var/tmp/dist
|
|
| 9 | +tar xf $rootdir/[% c('input_files_by_name/gcc-native') %]
|
|
| 10 | +export PATH="$distdir/bin:$PATH"
|
|
| 11 | + |
|
| 12 | +# Install cross binutils (needed for cross-compiling)
|
|
| 13 | +cd /var/tmp/dist
|
|
| 14 | +tar xf $rootdir/[% c('input_files_by_name/binutils') %]
|
|
| 15 | +rsync -a binutils-cross-[% c("arch") %]/* $distdir
|
|
| 16 | +rm -rf binutils-cross-[% c("arch") %]
|
|
| 17 | + |
|
| 18 | +# Install Linux headers, see Step 2 of
|
|
| 19 | +# https://preshing.com/20141119/how-to-build-a-gcc-cross-compiler/
|
|
| 20 | +# Doing this before gcc configure is intended to solve a limits.h issue
|
|
| 21 | +cd /var/tmp/build
|
|
| 22 | +mkdir linux
|
|
| 23 | +cd linux
|
|
| 24 | +tar -xJf $rootdir/linux-[% c("var/linux_version") %].tar.xz
|
|
| 25 | +cd linux-[% c("var/linux_version") %]
|
|
| 26 | +make ARCH=[% IF c("arch") == "aarch64" %]arm64[% ELSE %][% c("arch") %][% END %] INSTALL_HDR_PATH=$distdir/[% c("var/crosstarget") %] headers_install
|
|
| 27 | + |
|
| 28 | +cd /var/tmp/build
|
|
| 29 | +mkdir gcc-cross
|
|
| 30 | +cd gcc-cross
|
|
| 31 | +tar -xJf $rootdir/[% c('input_files_by_name/gcc') %]
|
|
| 32 | +cd gcc-[% c("version") %]
|
|
| 33 | +patch -p1 <$rootdir/gcc-cross.patch
|
|
| 34 | + |
|
| 35 | +cd /var/tmp/build/gcc-cross
|
|
| 36 | +gcc-[% c("version") %]/configure --prefix=$distdir --includedir=$distdir/[% c("var/crosstarget") %]/include [% c("var/configure_opt") %]
|
|
| 37 | + |
|
| 38 | +# For cross-compiling to work, we need to partially build GCC, then build
|
|
| 39 | +# glibc, then come back to finish GCC.
|
|
| 40 | + |
|
| 41 | +# Build only the components of GCC that don't need glibc, see Step 3 of
|
|
| 42 | +# https://preshing.com/20141119/how-to-build-a-gcc-cross-compiler/
|
|
| 43 | +cd /var/tmp/build/gcc-cross
|
|
| 44 | +make -j[% c("num_procs") %] all-gcc
|
|
| 45 | +make install-gcc
|
|
| 46 | + |
|
| 47 | +# Build glibc headers and startup files, see Step 4 of
|
|
| 48 | +# https://preshing.com/20141119/how-to-build-a-gcc-cross-compiler/
|
|
| 49 | +cd /var/tmp/build
|
|
| 50 | +mkdir glibc
|
|
| 51 | +cd glibc
|
|
| 52 | +tar -xJf $rootdir/glibc-[% c("var/glibc_version") %].tar.xz
|
|
| 53 | +[% IF c("var/linux-aarch64") -%]
|
|
| 54 | + # Avoid linking issues by backporting glibc patches
|
|
| 55 | + cd glibc-[% c("var/glibc_version") %]
|
|
| 56 | + patch -p1 <$rootdir/glibc-cross-linux-aarch64.patch
|
|
| 57 | + patch -p1 <$rootdir/glibc-cross-linux-aarch64-2.patch
|
|
| 58 | + cd /var/tmp/build/glibc
|
|
| 59 | +[% END -%]
|
|
| 60 | + |
|
| 61 | +# TODO: Remove --disable-werror once glibc is upgraded to a version that's
|
|
| 62 | +# designed to work with the GCC version we're using.
|
|
| 63 | +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
|
|
| 64 | +make install-bootstrap-headers=yes install-headers
|
|
| 65 | +make -j[% c("num_procs") %] csu/subdir_lib
|
|
| 66 | +install csu/crt1.o csu/crti.o csu/crtn.o $distdir/[% c("var/crosstarget") %]/lib
|
|
| 67 | +[% c("var/crosstarget") %]-gcc -nostdlib -nostartfiles -shared -x c /dev/null -o $distdir/[% c("var/crosstarget") %]/lib/libc.so
|
|
| 68 | +# stdio_lim.h is intended to solve a limits.h issue
|
|
| 69 | +touch $distdir/[% c("var/crosstarget") %]/include/gnu/stubs.h $distdir/[% c("var/crosstarget") %]/include/bits/stdio_lim.h
|
|
| 70 | + |
|
| 71 | +# Build compiler support library, see Step 5 of
|
|
| 72 | +# https://preshing.com/20141119/how-to-build-a-gcc-cross-compiler/
|
|
| 73 | +cd /var/tmp/build/gcc-cross
|
|
| 74 | +make -j[% c("num_procs") %] all-target-libgcc
|
|
| 75 | +make install-target-libgcc
|
|
| 76 | + |
|
| 77 | +# finish building glibc, see Step 6 of
|
|
| 78 | +# https://preshing.com/20141119/how-to-build-a-gcc-cross-compiler/
|
|
| 79 | +cd /var/tmp/build/glibc
|
|
| 80 | +make -j[% c("num_procs") %]
|
|
| 81 | +make install
|
|
| 82 | + |
|
| 83 | +# We're done with glibc, we can now finish building gcc...
|
|
| 84 | +cd /var/tmp/build/gcc-cross
|
|
| 85 | +make -j[% c("num_procs") %]
|
|
| 86 | +make install
|
|
| 87 | + |
|
| 88 | +# Include a working version of limits.h
|
|
| 89 | +cd gcc-[% c("version") %]
|
|
| 90 | +cat gcc/limitx.h gcc/glimits.h gcc/limity.h >$distdir/lib/gcc/[% c("var/crosstarget") %]/[% c("version") %]/include/limits.h
|
|
| 91 | + |
|
| 92 | +cd /var/tmp/dist
|
|
| 93 | +[% c('tar', {
|
|
| 94 | + tar_src => [ c('var/distdir') ],
|
|
| 95 | + tar_args => '-caf ' _ dest_dir _ '/' _ c('filename'),
|
|
| 96 | + }) %] |
| 1 | +# vim: filetype=yaml sw=2
|
|
| 2 | +filename: '[% project %]-[% c("version") %]-[% c("arch") %]-[% c("var/build_id") %].tar.[% c("compress_tar") %]'
|
|
| 3 | +# Note: When updating the gcc version, if this includes a libstdc++
|
|
| 4 | +# ABI change we should also update projects/firefox/abicheck.cc to
|
|
| 5 | +# require the new version.
|
|
| 6 | +version: '[% pc("gcc-source", "version") %]'
|
|
| 7 | +container:
|
|
| 8 | + use_container: 1
|
|
| 9 | +hardened_gcc: 1
|
|
| 10 | +var:
|
|
| 11 | + distdir: gcc
|
|
| 12 | + deps:
|
|
| 13 | + - build-essential
|
|
| 14 | + - libmpc-dev
|
|
| 15 | + setup: |
|
|
| 16 | + mkdir -p /var/tmp/dist
|
|
| 17 | + tar -C /var/tmp/dist -xf $rootdir/[% c("compiler_tarfile") %]
|
|
| 18 | + export PATH="/var/tmp/dist/[% c("var/distdir") %]/bin:$PATH"
|
|
| 19 | + export LD_LIBRARY_PATH=/var/tmp/dist/[% c("var/distdir") %]/lib64:/var/tmp/dist/[% c("var/distdir") %]/lib32
|
|
| 20 | + [% IF c("hardened_gcc"); GET c("var/set_hardened_build_flags"); END %]
|
|
| 21 | + configure_opt: '--target=[% c("var/crosstarget") %] --disable-multilib --enable-languages=c,c++ --with-glibc-version=[% c("var/glibc_version") %]'
|
|
| 22 | + # Use stretch's glibc and stretch-security's linux
|
|
| 23 | + glibc_version: 2.24
|
|
| 24 | + linux_version: 4.19.232
|
|
| 25 | + arch_deps:
|
|
| 26 | + - libc6-dev-i386
|
|
| 27 | + - gawk
|
|
| 28 | + - rsync
|
|
| 29 | + |
|
| 30 | +targets:
|
|
| 31 | + linux-arm:
|
|
| 32 | + var:
|
|
| 33 | + configure_opt: '--target=[% c("var/crosstarget") %] --disable-multilib --enable-languages=c,c++ --with-glibc-version=[% c("var/glibc_version") %] --with-arch=armv7-a --with-fpu=vfpv3-d16 --with-float=hard --with-mode=thumb'
|
|
| 34 | + |
|
| 35 | +input_files:
|
|
| 36 | + - project: container-image
|
|
| 37 | + - project: gcc-source
|
|
| 38 | + name: gcc
|
|
| 39 | + - name: binutils
|
|
| 40 | + project: binutils
|
|
| 41 | + target_prepend:
|
|
| 42 | + - linux-cross
|
|
| 43 | + - name: gcc-native
|
|
| 44 | + project: gcc
|
|
| 45 | + - URL: 'https://ftp.gnu.org/gnu/glibc/glibc-[% c("var/glibc_version") %].tar.xz'
|
|
| 46 | + sha256sum: 99d4a3e8efd144d71488e478f62587578c0f4e1fa0b4eed47ee3d4975ebeb5d3
|
|
| 47 | + - URL: 'https://www.kernel.org/pub/linux/kernel/v4.x/linux-[% c("var/linux_version") %].tar.xz'
|
|
| 48 | + sha256sum: 4fcfe814780d63dc56e907bf41596ff162e9601978bdc1a60eab64cc3903a22c
|
|
| 49 | + - filename: 'gcc-cross.patch'
|
|
| 50 | + - filename: 'glibc-cross-linux-aarch64.patch'
|
|
| 51 | + enable: '[% c("var/linux-aarch64") -%]'
|
|
| 52 | + - filename: 'glibc-cross-linux-aarch64-2.patch'
|
|
| 53 | + enable: '[% c("var/linux-aarch64") -%]' |
| 1 | +Avoids "../../../gcc-10.3.0/libsanitizer/asan/asan_linux.cpp:217:21: error:
|
|
| 2 | +'PATH_MAX' was not declared in this scope". PATH_MAX is in /include/linux/limits.h,
|
|
| 3 | +which is usually included by /include/limits.h (indirectly, through posix headers,
|
|
| 4 | +etc.). For some reason, when cross-compiling, this inclusion chain is broken and
|
|
| 5 | +we must include <linux/limits.h> by hand.
|
|
| 6 | + |
|
| 7 | +Index: gcc-10.3.0/libsanitizer/asan/asan_linux.cpp
|
|
| 8 | +===================================================================
|
|
| 9 | +--- gcc-10.3.0.orig/libsanitizer/asan/asan_linux.cpp
|
|
| 10 | ++++ gcc-10.3.0/libsanitizer/asan/asan_linux.cpp
|
|
| 11 | +@@ -32,6 +32,7 @@
|
|
| 12 | + #include <dlfcn.h>
|
|
| 13 | + #include <fcntl.h>
|
|
| 14 | + #include <limits.h>
|
|
| 15 | ++#include <linux/limits.h>
|
|
| 16 | + #include <pthread.h>
|
|
| 17 | + #include <stdio.h>
|
|
| 18 | + #include <unistd.h> |
| 1 | +From e9177fba13549a8e2a6232f46080e5c6d3e467b1 Mon Sep 17 00:00:00 2001
|
|
| 2 | +From: Szabolcs Nagy <szabolcs.nagy@arm.com>
|
|
| 3 | +Date: Wed, 21 Jun 2017 13:47:07 +0100
|
|
| 4 | +Subject: [PATCH] [AArch64] Use hidden __GI__dl_argv in rtld startup code
|
|
| 5 | + |
|
| 6 | +We rely on the symbol being locally defined so using extern symbol
|
|
| 7 | +is not correct and the linker may complain about the relocations.
|
|
| 8 | +---
|
|
| 9 | + ChangeLog | 5 +++++
|
|
| 10 | + sysdeps/aarch64/dl-machine.h | 4 ++--
|
|
| 11 | + 2 files changed, 7 insertions(+), 2 deletions(-)
|
|
| 12 | + |
|
| 13 | +Index: glibc/sysdeps/aarch64/dl-machine.h
|
|
| 14 | +===================================================================
|
|
| 15 | +--- glibc.orig/sysdeps/aarch64/dl-machine.h
|
|
| 16 | ++++ glibc/sysdeps/aarch64/dl-machine.h
|
|
| 17 | +@@ -172,8 +172,8 @@ _dl_start_user: \n\
|
|
| 18 | + cmp x0, #0 \n\
|
|
| 19 | + bne 1b \n\
|
|
| 20 | + // Update _dl_argv \n\
|
|
| 21 | +- adrp x3, _dl_argv \n\
|
|
| 22 | +- str x2, [x3, #:lo12:_dl_argv] \n\
|
|
| 23 | ++ adrp x3, __GI__dl_argv \n\
|
|
| 24 | ++ str x2, [x3, #:lo12:__GI__dl_argv] \n\
|
|
| 25 | + .L_done_stack_adjust: \n\
|
|
| 26 | + // compute envp \n\
|
|
| 27 | + add x3, x2, x1, lsl #3 \n\
|
|
| 28 | +--
|
|
| 29 | +2.43.2
|
|
| 30 | + |
| 1 | +From a68ba2f3cd3cbe32c1f31e13c20ed13487727b32 Mon Sep 17 00:00:00 2001
|
|
| 2 | +From: Szabolcs Nagy <szabolcs.nagy@arm.com>
|
|
| 3 | +Date: Wed, 18 Oct 2017 17:26:23 +0100
|
|
| 4 | +Subject: [PATCH] [AARCH64] Rewrite elf_machine_load_address using _DYNAMIC
|
|
| 5 | + symbol
|
|
| 6 | + |
|
| 7 | +This patch rewrites aarch64 elf_machine_load_address to use special _DYNAMIC
|
|
| 8 | +symbol instead of _dl_start.
|
|
| 9 | + |
|
| 10 | +The static address of _DYNAMIC symbol is stored in the first GOT entry.
|
|
| 11 | +Here is the change which makes this solution work (part of binutils 2.24):
|
|
| 12 | +https://sourceware.org/ml/binutils/2013-06/msg00248.html
|
|
| 13 | + |
|
| 14 | +i386, x86_64 targets use the same method to do this as well.
|
|
| 15 | + |
|
| 16 | +The original implementation relies on a trick that R_AARCH64_ABS32 relocation
|
|
| 17 | +being resolved at link time and the static address fits in the 32bits.
|
|
| 18 | +However, in LP64, normally, the address is defined to be 64 bit.
|
|
| 19 | + |
|
| 20 | +Here is the C version one which should be portable in all cases.
|
|
| 21 | + |
|
| 22 | + * sysdeps/aarch64/dl-machine.h (elf_machine_load_address): Use
|
|
| 23 | + _DYNAMIC symbol to calculate load address.
|
|
| 24 | +---
|
|
| 25 | + ChangeLog | 5 +++++
|
|
| 26 | + sysdeps/aarch64/dl-machine.h | 39 +++++-------------------------------
|
|
| 27 | + 2 files changed, 10 insertions(+), 34 deletions(-)
|
|
| 28 | + |
|
| 29 | +Index: glibc-2.26/sysdeps/aarch64/dl-machine.h
|
|
| 30 | +===================================================================
|
|
| 31 | +--- glibc-2.26.orig/sysdeps/aarch64/dl-machine.h
|
|
| 32 | ++++ glibc-2.26/sysdeps/aarch64/dl-machine.h
|
|
| 33 | +@@ -51,26 +51,11 @@ elf_machine_load_address (void)
|
|
| 34 | + /* To figure out the load address we use the definition that for any symbol:
|
|
| 35 | + dynamic_addr(symbol) = static_addr(symbol) + load_addr
|
|
| 36 | +
|
|
| 37 | +- The choice of symbol is arbitrary. The static address we obtain
|
|
| 38 | +- by constructing a non GOT reference to the symbol, the dynamic
|
|
| 39 | +- address of the symbol we compute using adrp/add to compute the
|
|
| 40 | +- symbol's address relative to the PC.
|
|
| 41 | +- This depends on 32bit relocations being resolved at link time
|
|
| 42 | +- and that the static address fits in the 32bits. */
|
|
| 43 | ++ _DYNAMIC sysmbol is used here as its link-time address stored in
|
|
| 44 | ++ the special unrelocated first GOT entry. */
|
|
| 45 | +
|
|
| 46 | +- ElfW(Addr) static_addr;
|
|
| 47 | +- ElfW(Addr) dynamic_addr;
|
|
| 48 | +-
|
|
| 49 | +- asm (" \n"
|
|
| 50 | +-" adrp %1, _dl_start; \n"
|
|
| 51 | +-" add %1, %1, #:lo12:_dl_start \n"
|
|
| 52 | +-" ldr %w0, 1f \n"
|
|
| 53 | +-" b 2f \n"
|
|
| 54 | +-"1: \n"
|
|
| 55 | +-" .word _dl_start \n"
|
|
| 56 | +-"2: \n"
|
|
| 57 | +- : "=r" (static_addr), "=r" (dynamic_addr));
|
|
| 58 | +- return dynamic_addr - static_addr;
|
|
| 59 | ++ extern ElfW(Dyn) _DYNAMIC[] attribute_hidden;
|
|
| 60 | ++ return (ElfW(Addr)) &_DYNAMIC - elf_machine_dynamic ();
|
|
| 61 | + }
|
|
| 62 | +
|
|
| 63 | + /* Set up the loaded object described by L so its unrelocated PLT |
| 1 | 1 | #!/bin/sh
|
| 2 | 2 | [% c("var/set_default_env") -%]
|
| 3 | 3 | mkdir -p /var/tmp/build
|
| 4 | -[% IF c("var/linux") && ! c("var/linux-cross") -%]
|
|
| 4 | + |
|
| 5 | +[% IF c("var/linux") -%]
|
|
| 5 | 6 | # Config options for hardening
|
| 6 | 7 | export DEB_BUILD_HARDENING=1
|
| 7 | 8 | # Since r223796 landed on GCC master enforcing PIE breaks GCC compilation.
|
| ... | ... | @@ -19,81 +20,9 @@ mkdir -p /var/tmp/build |
| 19 | 20 | [% END -%]
|
| 20 | 21 | distdir=/var/tmp/dist/[% c("var/distdir") %]
|
| 21 | 22 | |
| 22 | -[% IF c("var/linux-cross") -%]
|
|
| 23 | - |
|
| 24 | - # Install binutils (needed for cross-compiling)
|
|
| 25 | - mkdir /var/tmp/dist
|
|
| 26 | - cd /var/tmp/dist
|
|
| 27 | - tar xf $rootdir/[% c('input_files_by_name/binutils') %]
|
|
| 28 | - mv binutils $distdir
|
|
| 29 | - export PATH="$distdir/bin:$PATH"
|
|
| 30 | - |
|
| 31 | - # Install Linux headers, see Step 2 of
|
|
| 32 | - # https://preshing.com/20141119/how-to-build-a-gcc-cross-compiler/
|
|
| 33 | - # Doing this before gcc configure is intended to solve a limits.h issue
|
|
| 34 | - cd /var/tmp/build
|
|
| 35 | - mkdir linux
|
|
| 36 | - cd linux
|
|
| 37 | - tar -xJf $rootdir/linux-[% c("var/linux_version") %].tar.xz
|
|
| 38 | - cd linux-[% c("var/linux_version") %]
|
|
| 39 | - make ARCH=[% c("arch") %] INSTALL_HDR_PATH=$distdir/[% c("var/crosstarget") %] headers_install
|
|
| 40 | - |
|
| 41 | - cd /var/tmp/build
|
|
| 42 | - mkdir gcc
|
|
| 43 | - cd gcc
|
|
| 44 | - tar -xJf $rootdir/[% c('input_files_by_name/gcc') %]
|
|
| 45 | - # --with-headers is intended to solve a limits.h issue
|
|
| 46 | - [% project %]-[% c("version") %]/configure --prefix=$distdir --with-headers=$distdir/[% c("var/crosstarget") %]/include/linux [% c("var/configure_opt") %]
|
|
| 47 | - |
|
| 48 | - # For cross-compiling to work, we need to partially build GCC, then build
|
|
| 49 | - # glibc, then come back to finish GCC.
|
|
| 50 | - |
|
| 51 | - # Build only the components of GCC that don't need glibc, see Step 3 of
|
|
| 52 | - # https://preshing.com/20141119/how-to-build-a-gcc-cross-compiler/
|
|
| 53 | - cd /var/tmp/build/gcc
|
|
| 54 | - make -j[% c("num_procs") %] all-gcc
|
|
| 55 | - make install-gcc
|
|
| 56 | - # Removing sys-include is intended to solve a limits.h issue
|
|
| 57 | - rm --recursive --force $distdir/[% c("var/crosstarget") %]/sys-include
|
|
| 58 | - |
|
| 59 | - # Build glibc headers and startup files, see Step 4 of
|
|
| 60 | - # https://preshing.com/20141119/how-to-build-a-gcc-cross-compiler/
|
|
| 61 | - cd /var/tmp/build
|
|
| 62 | - mkdir glibc
|
|
| 63 | - cd glibc
|
|
| 64 | - tar -xJf $rootdir/glibc-[% c("var/glibc_version") %].tar.xz
|
|
| 65 | - # TODO: Remove --disable-werror once glibc is upgraded to a version that's
|
|
| 66 | - # designed to work with the GCC version we're using.
|
|
| 67 | - 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
|
|
| 68 | - make install-bootstrap-headers=yes install-headers
|
|
| 69 | - make -j[% c("num_procs") %] csu/subdir_lib
|
|
| 70 | - install csu/crt1.o csu/crti.o csu/crtn.o $distdir/[% c("var/crosstarget") %]/lib
|
|
| 71 | - [% c("var/crosstarget") %]-gcc -nostdlib -nostartfiles -shared -x c /dev/null -o $distdir/[% c("var/crosstarget") %]/lib/libc.so
|
|
| 72 | - # stdio_lim.h is intended to solve a limits.h issue
|
|
| 73 | - touch $distdir/[% c("var/crosstarget") %]/include/gnu/stubs.h $distdir/[% c("var/crosstarget") %]/include/bits/stdio_lim.h
|
|
| 74 | - |
|
| 75 | - # Build compiler support library, see Step 5 of
|
|
| 76 | - # https://preshing.com/20141119/how-to-build-a-gcc-cross-compiler/
|
|
| 77 | - cd /var/tmp/build/gcc
|
|
| 78 | - make -j[% c("num_procs") %] all-target-libgcc
|
|
| 79 | - make install-target-libgcc
|
|
| 80 | - |
|
| 81 | - # finish building glibc, see Step 6 of
|
|
| 82 | - # https://preshing.com/20141119/how-to-build-a-gcc-cross-compiler/
|
|
| 83 | - cd /var/tmp/build/glibc
|
|
| 84 | - make -j[% c("num_procs") %]
|
|
| 85 | - make install
|
|
| 86 | - |
|
| 87 | - # We're done with glibc, we can now finish building gcc...
|
|
| 88 | - cd /var/tmp/build/gcc
|
|
| 89 | - |
|
| 90 | -[% ELSE -%]
|
|
| 91 | - |
|
| 92 | - tar -C /var/tmp/build -xf $rootdir/[% c('input_files_by_name/gcc') %]
|
|
| 93 | - cd /var/tmp/build/[% project %]-[% c("version") %]
|
|
| 94 | - ./configure --prefix=$distdir [% c("var/configure_opt") %]
|
|
| 95 | - |
|
| 96 | -[% END -%]
|
|
| 23 | +tar -C /var/tmp/build -xf $rootdir/[% c('input_files_by_name/gcc') %]
|
|
| 24 | +cd /var/tmp/build/[% project %]-[% c("version") %]
|
|
| 25 | +./configure --prefix=$distdir [% c("var/configure_opt") %]
|
|
| 97 | 26 | |
| 98 | 27 | make -j[% c("num_procs") %]
|
| 99 | 28 | make install
|
| 1 | 1 | # vim: filetype=yaml sw=2
|
| 2 | -filename: '[% project %]-[% c("version") %]-[% IF c("var/linux-cross") %][% c("var/osname") %][% ELSE %]x86[% END %]-[% c("var/build_id") %].tar.[% c("compress_tar") %]'
|
|
| 2 | +filename: '[% project %]-[% c("version") %]-[% c("var/build_id") %].tar.[% c("compress_tar") %]'
|
|
| 3 | 3 | # Note: When updating the gcc version, if this includes a libstdc++
|
| 4 | 4 | # ABI change we should also update projects/firefox/abicheck.cc to
|
| 5 | 5 | # require the new version.
|
| ... | ... | @@ -7,6 +7,7 @@ version: '[% pc("gcc-source", "version") %]' |
| 7 | 7 | container:
|
| 8 | 8 | use_container: 1
|
| 9 | 9 | var:
|
| 10 | + no_crosscompile: 1
|
|
| 10 | 11 | distdir: gcc
|
| 11 | 12 | deps:
|
| 12 | 13 | - build-essential
|
| ... | ... | @@ -15,9 +16,7 @@ var: |
| 15 | 16 | mkdir -p /var/tmp/dist
|
| 16 | 17 | tar -C /var/tmp/dist -xf $rootdir/[% c("compiler_tarfile") %]
|
| 17 | 18 | export PATH="/var/tmp/dist/[% c("var/distdir") %]/bin:$PATH"
|
| 18 | - [% IF ! c("var/linux-cross") -%]
|
|
| 19 | - export LD_LIBRARY_PATH=/var/tmp/dist/[% c("var/distdir") %]/lib64:/var/tmp/dist/[% c("var/distdir") %]/lib32
|
|
| 20 | - [% END -%]
|
|
| 19 | + export LD_LIBRARY_PATH=/var/tmp/dist/[% c("var/distdir") %]/lib64:/var/tmp/dist/[% c("var/distdir") %]/lib32
|
|
| 21 | 20 | [% IF c("hardened_gcc"); GET c("var/set_hardened_build_flags"); END %]
|
| 22 | 21 | |
| 23 | 22 | targets:
|
| ... | ... | @@ -33,33 +32,8 @@ targets: |
| 33 | 32 | configure_opt: --enable-multilib --enable-languages=c,c++ --with-arch_32=i686
|
| 34 | 33 | arch_deps:
|
| 35 | 34 | - libc6-dev-i386
|
| 36 | - linux-cross:
|
|
| 37 | - var:
|
|
| 38 | - target_prefix: '[% c("var/crosstarget") %]-'
|
|
| 39 | - distdir: gcc-cross
|
|
| 40 | - # TODO: Consider upgrading to a glibc that works out of the box with the
|
|
| 41 | - # GCC version we use. However, removing our glibc version workarounds may
|
|
| 42 | - # not be desirable since we want to be able to easily bump the GCC
|
|
| 43 | - # version without worrying about linux-cross breakage.
|
|
| 44 | - glibc_version: 2.26
|
|
| 45 | - linux_version: 4.10.1
|
|
| 46 | - arch_deps:
|
|
| 47 | - - libc6-dev-i386
|
|
| 48 | - - gawk
|
|
| 49 | - linux-arm:
|
|
| 50 | - var:
|
|
| 51 | - 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
|
|
| 52 | 35 | |
| 53 | 36 | input_files:
|
| 54 | 37 | - project: container-image
|
| 55 | 38 | - project: gcc-source
|
| 56 | 39 | name: gcc |
| 57 | - - name: binutils
|
|
| 58 | - project: binutils
|
|
| 59 | - enable: '[% c("var/linux-cross") -%]'
|
|
| 60 | - - URL: 'https://ftp.gnu.org/gnu/glibc/glibc-[% c("var/glibc_version") %].tar.xz'
|
|
| 61 | - sha256sum: e54e0a934cd2bc94429be79da5e9385898d2306b9eaf3c92d5a77af96190f6bd
|
|
| 62 | - enable: '[% c("var/linux-cross") -%]'
|
|
| 63 | - - URL: 'https://www.kernel.org/pub/linux/kernel/v4.x/linux-[% c("var/linux_version") %].tar.xz'
|
|
| 64 | - sha256sum: 6ca06bb5faf5f83600d7388bb623dae41df2a257de85ad5d1792e03302bc3543
|
|
| 65 | - enable: '[% c("var/linux-cross") -%]' |
| ... | ... | @@ -4,6 +4,9 @@ filename: '[% project %]-[% c("version") %]-[% c("var/build_id") %].tar.[% c("co |
| 4 | 4 | container:
|
| 5 | 5 | use_container: 1
|
| 6 | 6 | |
| 7 | +var:
|
|
| 8 | + no_crosscompile: 1
|
|
| 9 | + |
|
| 7 | 10 | input_files:
|
| 8 | 11 | - project: container-image
|
| 9 | 12 | - URL: 'https://golang.org/dl/go[% c("version") %].src.tar.gz'
|
| ... | ... | @@ -9,6 +9,7 @@ var: |
| 9 | 9 | use_go_1_20: 0
|
| 10 | 10 | go_1_21: 1.21.9
|
| 11 | 11 | go_1_20: 1.20.14
|
| 12 | + no_crosscompile: 1
|
|
| 12 | 13 | setup: |
|
| 13 | 14 | mkdir -p /var/tmp/dist
|
| 14 | 15 | tar -C /var/tmp/dist -xf $rootdir/[% c("go_tarfile") %]
|
| ... | ... | @@ -101,6 +102,12 @@ targets: |
| 101 | 102 | linux-i686:
|
| 102 | 103 | var:
|
| 103 | 104 | GOARCH: 386
|
| 105 | + linux-aarch64:
|
|
| 106 | + var:
|
|
| 107 | + GOARCH: arm64
|
|
| 108 | + linux-arm:
|
|
| 109 | + var:
|
|
| 110 | + GOARCH: arm
|
|
| 104 | 111 | android:
|
| 105 | 112 | var:
|
| 106 | 113 | GOOS: android
|
| ... | ... | @@ -14,6 +14,9 @@ targets: |
| 14 | 14 | linux-i686:
|
| 15 | 15 | var:
|
| 16 | 16 | configure_opts: -shared linux-x86
|
| 17 | + linux-aarch64:
|
|
| 18 | + var:
|
|
| 19 | + configure_opts: -shared --cross-compile-prefix=[% c("var/crosstarget") %]- enable-ec_nistp_64_gcc_128 linux-aarch64
|
|
| 17 | 20 | linux-arm:
|
| 18 | 21 | var:
|
| 19 | 22 | configure_opts: -shared --cross-compile-prefix=[% c("var/crosstarget") %]- linux-armv4
|
| ... | ... | @@ -21,6 +21,20 @@ mkdir $TORBINDIR |
| 21 | 21 | [% IF c("var/windows") || c("var/android") %]
|
| 22 | 22 | tar -C /var/tmp/dist -xf [% c('input_files_by_name/zlib') %]
|
| 23 | 23 | zlibdir=/var/tmp/dist/zlib
|
| 24 | +[% ELSIF c("var/linux-cross") %]
|
|
| 25 | + # Since 1. we are using Debian's zlib1g-dev:$arch_debian, 2. our
|
|
| 26 | + # cross-toolchain's default paths (i.e. -I and -L) are not the same
|
|
| 27 | + # as those of Debian's cross-toolchain, and 3. tor's configure does
|
|
| 28 | + # not support separate header and library directories for zlib, we
|
|
| 29 | + # need to make the headers and $arch_debian library available to
|
|
| 30 | + # configure manually.
|
|
| 31 | + # DO NOT use CPPFLAGS="-I/usr/include" to include the headers, the
|
|
| 32 | + # build will fail (probably because some of our cross-$arch_debian
|
|
| 33 | + # headers get masked by the native ones).
|
|
| 34 | + CROSS_INCLUDEDIR=/var/tmp/dist/gcc/[% c("var/crosstarget") %]/include
|
|
| 35 | + ln -s /usr/include/zconf.h $CROSS_INCLUDEDIR
|
|
| 36 | + ln -s /usr/include/zlib.h $CROSS_INCLUDEDIR
|
|
| 37 | + export LDFLAGS="-L/usr/lib/[% c("var/crosstarget") %] $LDFLAGS"
|
|
| 24 | 38 | [% END %]
|
| 25 | 39 | [% IF c("var/android") %]
|
| 26 | 40 | tar -C /var/tmp/dist -xf [% c('input_files_by_name/zstd') %]
|
| ... | ... | @@ -44,10 +58,14 @@ openssldir=/var/tmp/dist/openssl |
| 44 | 58 | # LD_LIBRARY_PATH value to the Tor Browser with the newer one. Thus, we copy
|
| 45 | 59 | # the libstdc++ into the directory with the libs tor depends on, too. See bug
|
| 46 | 60 | # 13359 for further details.
|
| 47 | - cp /var/tmp/dist/gcc/[% c("var/libdir") %]/libstdc++.so.6 "$TORBINDIR"
|
|
| 61 | + libdir=[% c("var/libdir") %]
|
|
| 62 | + [% IF c("var/linux-cross") -%]
|
|
| 63 | + libdir="[% c("var/crosstarget") %]/$libdir"
|
|
| 64 | + [% END -%]
|
|
| 65 | + cp "/var/tmp/dist/gcc/$libdir/libstdc++.so.6" "$TORBINDIR"
|
|
| 48 | 66 | [% IF c("var/asan") -%]
|
| 49 | - cp /var/tmp/dist/gcc/[% c("var/libdir") %]/libasan.so.6 "$TORBINDIR"
|
|
| 50 | - cp /var/tmp/dist/gcc/[% c("var/libdir") %]/libubsan.so.1 "$TORBINDIR"
|
|
| 67 | + cp "/var/tmp/dist/gcc/$libdir/libasan.so.6" "$TORBINDIR"
|
|
| 68 | + cp "/var/tmp/dist/gcc/$libdir/libubsan.so.1" "$TORBINDIR"
|
|
| 51 | 69 | [% END -%]
|
| 52 | 70 | chmod 700 "$TORBINDIR"/*.so*
|
| 53 | 71 | # This is needed to make RPATH unavailable. See bug 9150.
|
| ... | ... | @@ -73,6 +91,7 @@ find -type f -print0 | xargs -0 [% c("touch") %] |
| 73 | 91 | [% IF c("var/windows") || c("var/android") %]--with-zlib-dir="$zlibdir"[% END %] \
|
| 74 | 92 | [% IF c("var/macos") %]--enable-static-openssl[% END %] \
|
| 75 | 93 | [% IF c("var/windows") %]--enable-static-libevent --enable-static-openssl --enable-static-zlib[% END %] \
|
| 94 | + [% IF c("var/linux-cross") %]--build=x86_64-linux-gnu[% END %] \
|
|
| 76 | 95 | --enable-gpl --prefix="$distdir" [% c("var/configure_opt") %]
|
| 77 | 96 | [% IF c("var/macos") -%]
|
| 78 | 97 | export LD_PRELOAD=[% c("var/faketime_path") %]
|
| ... | ... | @@ -103,10 +122,17 @@ cd $distdir |
| 103 | 122 | [% END %]
|
| 104 | 123 | |
| 105 | 124 | [% IF c("var/linux") %]
|
| 125 | + [% IF c("var/linux-cross") -%]
|
|
| 126 | + CROSS_PREFIX=[% c("var/crosstarget") %]-
|
|
| 127 | + [% END -%]
|
|
| 128 | + |
|
| 129 | + OBJCOPY="${CROSS_PREFIX}objcopy"
|
|
| 130 | + STRIP="${CROSS_PREFIX}strip"
|
|
| 131 | + |
|
| 106 | 132 | # Strip and generate debuginfo for libs
|
| 107 | - objcopy --only-keep-debug $distdir/bin/tor "$TORDEBUGDIR/tor"
|
|
| 108 | - install -s $distdir/bin/tor "$TORBINDIR"
|
|
| 109 | - objcopy --add-gnu-debuglink="$TORDEBUGDIR/tor" "$TORBINDIR/tor"
|
|
| 133 | + "$OBJCOPY" --only-keep-debug $distdir/bin/tor "$TORDEBUGDIR/tor"
|
|
| 134 | + install -s --strip-program="$STRIP" $distdir/bin/tor "$TORBINDIR"
|
|
| 135 | + "$OBJCOPY" --add-gnu-debuglink="$TORDEBUGDIR/tor" "$TORBINDIR/tor"
|
|
| 110 | 136 | for i in "$TORBINDIR"/*so*
|
| 111 | 137 | do
|
| 112 | 138 | LIB=`basename $i`
|
| ... | ... | @@ -116,11 +142,11 @@ cd $distdir |
| 116 | 142 | # treat this the same as the rest (though it seems libstdc++ doesn't come with
|
| 117 | 143 | # any useful debug symbols since we don't build it, so maybe we should figure
|
| 118 | 144 | # out how to package them
|
| 119 | - strip "$TORBINDIR/$LIB"
|
|
| 145 | + "$STRIP" "$TORBINDIR/$LIB"
|
|
| 120 | 146 | else
|
| 121 | - objcopy --only-keep-debug "$TORBINDIR/$LIB" "$TORDEBUGDIR/$LIB"
|
|
| 122 | - strip "$TORBINDIR/$LIB"
|
|
| 123 | - objcopy --add-gnu-debuglink="$TORDEBUGDIR/$LIB" "$TORBINDIR/$LIB"
|
|
| 147 | + "$OBJCOPY" --only-keep-debug "$TORBINDIR/$LIB" "$TORDEBUGDIR/$LIB"
|
|
| 148 | + "$STRIP" "$TORBINDIR/$LIB"
|
|
| 149 | + "$OBJCOPY" --add-gnu-debuglink="$TORDEBUGDIR/$LIB" "$TORBINDIR/$LIB"
|
|
| 124 | 150 | fi
|
| 125 | 151 | done
|
| 126 | 152 | [% END %]
|
| ... | ... | @@ -30,6 +30,17 @@ targets: |
| 30 | 30 | libdir: lib64
|
| 31 | 31 | arch_deps:
|
| 32 | 32 | - zlib1g-dev
|
| 33 | + linux-aarch64:
|
|
| 34 | + var:
|
|
| 35 | + libdir: lib64
|
|
| 36 | + arch_deps:
|
|
| 37 | + - zlib1g-dev:arm64
|
|
| 38 | + linux-arm:
|
|
| 39 | + var:
|
|
| 40 | + libdir: lib
|
|
| 41 | + arch_deps:
|
|
| 42 | + - zlib1g-dev:armhf
|
|
| 43 | + |
|
| 33 | 44 | android:
|
| 34 | 45 | var:
|
| 35 | 46 | configure_opt_project: '--enable-android --enable-static-openssl --enable-static-libevent --enable-zstd --disable-tool-name-check --disable-system-torrc'
|
| ... | ... | @@ -468,14 +468,29 @@ targets: |
| 468 | 468 | - linux-i686
|
| 469 | 469 | - linux
|
| 470 | 470 | - basebrowser
|
| 471 | + torbrowser-linux-aarch64:
|
|
| 472 | + - linux-cross
|
|
| 473 | + - linux-aarch64
|
|
| 474 | + - linux
|
|
| 475 | + - torbrowser
|
|
| 476 | + basebrowser-linux-aarch64:
|
|
| 477 | + - linux-cross
|
|
| 478 | + - linux-aarch64
|
|
| 479 | + - linux
|
|
| 480 | + - basebrowser
|
|
| 481 | + mullvadbrowser-linux-aarch64:
|
|
| 482 | + - linux-cross
|
|
| 483 | + - linux-aarch64
|
|
| 484 | + - linux
|
|
| 485 | + - mullvadbrowser
|
|
| 471 | 486 | torbrowser-linux-arm:
|
| 472 | - - linux-arm
|
|
| 473 | 487 | - linux-cross
|
| 488 | + - linux-arm
|
|
| 474 | 489 | - linux
|
| 475 | 490 | - torbrowser
|
| 476 | 491 | basebrowser-linux-arm:
|
| 477 | - - linux-arm
|
|
| 478 | 492 | - linux-cross
|
| 493 | + - linux-arm
|
|
| 479 | 494 | - linux
|
| 480 | 495 | - basebrowser
|
| 481 | 496 | linux-x86_64:
|
| ... | ... | @@ -493,18 +508,26 @@ targets: |
| 493 | 508 | linux-cross: 0
|
| 494 | 509 | configure_opt: '--host=i686-linux-gnu CFLAGS=-m32 CXXFLAGS=-m32 LDFLAGS=-m32 [% c("var/configure_opt_project") %]'
|
| 495 | 510 | arch_debian: i386
|
| 511 | + linux-aarch64:
|
|
| 512 | + arch: aarch64
|
|
| 513 | + var:
|
|
| 514 | + linux-aarch64: 1
|
|
| 515 | + osname: linux-aarch64
|
|
| 516 | + linux-cross: 1
|
|
| 517 | + arch_debian: arm64
|
|
| 518 | + crosstarget: aarch64-linux-gnu
|
|
| 496 | 519 | linux-arm:
|
| 497 | 520 | arch: arm
|
| 498 | 521 | var:
|
| 499 | 522 | linux-arm: 1
|
| 500 | 523 | osname: linux-arm
|
| 501 | - crosstarget: arm-linux-gnueabihf
|
|
| 524 | + linux-cross: 1
|
|
| 502 | 525 | arch_debian: armhf
|
| 526 | + crosstarget: arm-linux-gnueabihf
|
|
| 503 | 527 | linux-cross:
|
| 504 | 528 | var:
|
| 505 | 529 | linux-cross: 1
|
| 506 | - container:
|
|
| 507 | - arch: amd64
|
|
| 530 | + compiler: 'gcc[% IF ! c("var/no_crosscompile") %]-cross[% END %]'
|
|
| 508 | 531 | configure_opt: '--host=[% c("var/crosstarget") %] [% c("var/configure_opt_project") %]'
|
| 509 | 532 | linux:
|
| 510 | 533 | # tar in strech does not know how to extract tar.zst files
|