Pier Angelo Vendrame pushed to branch main at The Tor Project / Applications / tor-browser-build

Commits:

16 changed files:

Changes:

  • projects/binutils/build
    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
             }) %]

  • projects/binutils/config
    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'
    

  • projects/container-image/config
    ... ... @@ -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
    

  • projects/gcc-cross/build
    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
    +        }) %]

  • projects/gcc-cross/config
    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") -%]'

  • projects/gcc-cross/gcc-cross.patch
    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>

  • projects/gcc-cross/glibc-cross-linux-aarch64-2.patch
    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
    +

  • projects/gcc-cross/glibc-cross-linux-aarch64.patch
    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

  • projects/gcc/build
    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
    

  • projects/gcc/config
    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") -%]'

  • projects/go-bootstrap/config
    ... ... @@ -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'
    

  • projects/go/config
    ... ... @@ -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
    

  • projects/openssl/config
    ... ... @@ -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
    

  • projects/tor/build
    ... ... @@ -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 %]
    

  • projects/tor/config
    ... ... @@ -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'
    

  • rbm.conf
    ... ... @@ -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