Skip to content
Snippets Groups Projects
Verified Commit a65bfce8 authored by Pier Angelo Vendrame's avatar Pier Angelo Vendrame :jack_o_lantern:
Browse files

Bug 40855: Update toolchains for Firefox 115 (Android part)

Android-only toolchain updates.
parent d6d756ac
Branches
No related tags found
1 merge request!762Bug 40855&40867: Android part of the 115 migration
Showing
with 1184 additions and 1123 deletions
#!/bin/bash
[% c("var/set_default_env") -%]
export PROJECT_PATH=/var/tmp/dist/[% project %]
export SDK_HOME=$PROJECT_PATH/android-sdk-linux
export NDK_HOME=$SDK_HOME/ndk
distdir=/var/tmp/dist/[% project %]
export ANDROID_HOME=$distdir/android-sdk-linux
export NDK_HOME=$ANDROID_HOME/ndk
# Make directories
mkdir -p $NDK_HOME $SDK_HOME
mkdir -p $NDK_HOME $ANDROID_HOME
# Compiler Archives
unzip -qq [% c("input_files_by_name/android_sdk_tools") %] -d $SDK_HOME
mkdir -p $SDK_HOME/cmdline-tools
unzip -qq [% c("input_files_by_name/android_commandlinetools") %] -d $SDK_HOME/cmdline-tools
mv $SDK_HOME/cmdline-tools/cmdline-tools $SDK_HOME/cmdline-tools/[% c("var/commandlinetools_version_string") %]
unzip -qq [% c("input_files_by_name/android_sdk_tools") %] -d $ANDROID_HOME
mkdir -p $ANDROID_HOME/cmdline-tools
unzip -qq [% c("input_files_by_name/android_commandlinetools") %] -d $ANDROID_HOME/cmdline-tools
mv $ANDROID_HOME/cmdline-tools/cmdline-tools $ANDROID_HOME/cmdline-tools/[% c("var/commandlinetools_version_string") %]
unzip -qq [% c("input_files_by_name/android_ndk_compiler")%] -d $NDK_HOME
ln -s $NDK_HOME/android-ndk-r[% c("var/android_ndk_version") %][% c("var/android_ndk_revision") %] $NDK_HOME/[% c("var/android_ndk_version_build") %]
......@@ -25,40 +25,50 @@ for f in `ls arm-linux-androideabi-*`; do
done
# Tool Archives
cd $SDK_HOME
unzip -qq $HOME/[% c("input_files_by_name/build_tools") %] -d $SDK_HOME
cd $ANDROID_HOME
unzip -qq $rootdir/[% c("input_files_by_name/build_tools_33") %] -d $ANDROID_HOME
mkdir -p build-tools/[% c("var/version_33") %]
mv [% c("var/android_release_dir_33") %]/* build-tools/[% c("var/version_33") %]
unzip -qq $rootdir/[% c("input_files_by_name/build_tools_31") %] -d $ANDROID_HOME
mkdir -p build-tools/[% c("var/version_31") %]
mv [% c("var/android_release_dir") %]/* build-tools/[% c("var/version_31") %]
mv [% c("var/android_release_dir_31") %]/* build-tools/[% c("var/version_31") %]
unzip -qq $HOME/[% c("input_files_by_name/platform") %] -d $SDK_HOME
mkdir -p platforms/android-[% c("var/android_api_level") %]
mv [% c("var/android_release_dir") %]/* platforms/android-[% c("var/android_api_level") %]
# Application Services needed build tools 30.0.2 for 99.
# TODO: verify for 115.
unzip -qq $rootdir/[% c("input_files_by_name/build_tools_30") %] -d $ANDROID_HOME
mkdir -p build-tools/[% c("var/version_30") %]
mv [% c("var/android_release_dir_30") %]/* build-tools/[% c("var/version_30") %]
unzip -qq $rootdir/[% c("input_files_by_name/build_tools_29") %] -d $ANDROID_HOME
mkdir -p build-tools/[% c("var/version_29") %]
mv [% c("var/android_release_dir_29") %]/* build-tools/[% c("var/version_29") %]
# Apart from GeckoView all other projects do still need build-tools 28.0.3 as
# they are using the Gradle plugin 3.2.1 - 3.6.0 without specifying
# `buildToolsVersion`.
unzip -qq $HOME/[% c("input_files_by_name/build_tools_28") %] -d $SDK_HOME
unzip -qq $rootdir/[% c("input_files_by_name/build_tools_28") %] -d $ANDROID_HOME
mkdir -p build-tools/[% c("var/version_28") %]
mv [% c("var/android_release_dir_28") %]/* build-tools/[% c("var/version_28") %]
# Application Services currently needs build tools 30.0.2
unzip -qq $HOME/[% c("input_files_by_name/build_tools_30") %] -d $SDK_HOME
mkdir -p build-tools/[% c("var/version_30") %]
mv [% c("var/android_release_dir_30") %]/* build-tools/[% c("var/version_30") %]
unzip -qq $rootdir/[% c("input_files_by_name/platform_33") %] -d $ANDROID_HOME
mkdir -p platforms/android-[% c("var/android_api_level_33") %]
mv [% c("var/android_release_dir_33") %]/* platforms/android-[% c("var/android_api_level_33") %]
unzip -qq $HOME/[% c("input_files_by_name/build_tools_29") %] -d $SDK_HOME
mkdir -p build-tools/[% c("var/version_29") %]
mv [% c("var/android_release_dir_29") %]/* build-tools/[% c("var/version_29") %]
unzip -qq $rootdir/[% c("input_files_by_name/platform_31") %] -d $ANDROID_HOME
mkdir -p platforms/android-[% c("var/android_api_level_31") %]
mv [% c("var/android_release_dir_31") %]/* platforms/android-[% c("var/android_api_level_31") %]
unzip -qq $HOME/[% c("input_files_by_name/platform_30") %] -d $SDK_HOME
unzip -qq $rootdir/[% c("input_files_by_name/platform_30") %] -d $ANDROID_HOME
mkdir -p platforms/android-[% c("var/android_api_level_30") %]
mv [% c("var/android_release_dir_30") %]/* platforms/android-[% c("var/android_api_level_30") %]
unzip -qq $HOME/[% c("input_files_by_name/platform_29") %] -d $SDK_HOME
unzip -qq $rootdir/[% c("input_files_by_name/platform_29") %] -d $ANDROID_HOME
mkdir -p platforms/android-[% c("var/android_api_level_29") %]
mv [% c("var/android_release_dir_29") %]/* platforms/android-[% c("var/android_api_level_29") %]
unzip -qq $HOME/[% c("input_files_by_name/platform_tools") %] -d $SDK_HOME
unzip -qq $rootdir/[% c("input_files_by_name/platform_tools") %] -d $ANDROID_HOME
# That's a quirk required by GeckoView but let's have it here instead of in the
# project's build script
......@@ -69,5 +79,5 @@ cp tools/emulator emulator/
cd /var/tmp/dist
[% c('tar', {
tar_src => [ project ],
tar_args => '-czf ' _ dest_dir _ '/' _ c('filename'),
tar_args => '-caf ' _ dest_dir _ '/' _ c('filename'),
}) %]
# vim: filetype=yaml sw=2
filename: '[% project %]-[% c("version") %]-[% c("var/build_id") %].tar.gz'
version: '[% c("var/version_28") %]+[% c("var/version_29") %]+[% c("var/version_30") %]+[% c("var/version_31") %]'
# FIXME: Rework this whole mess
filename: '[% project %]-[% c("version") %]-[% c("var/build_id") %].tar.[% c("compress_tar") %]'
version: '[% c("var/version_28") %]+[% c("var/version_29") %]+[% c("var/version_30") %]+[% c("var/version_31") %]+[% c("var/version_33") %]'
container:
use_container: 1
var:
version_33: 33.0.1
version_31: 31.0.0
version_30: 30.0.2
version_30: 30.0.3
version_29: 29.0.2
version_28: 28.0.3
setup: |
mkdir -p /var/tmp/dist
tar -C /var/tmp/dist -xf $rootdir/[% c("compiler_tarfile") %]
export ANDROID_HOME=/var/tmp/dist/[% project %]/android-sdk-linux
export PATH=$PATH:$ANDROID_HOME/build-tools/[% c("var/version_33") %]
# By default we use the old NDK which is the one GeckoView is using.
# However, we can overwrite that per project if needed (e.g.
# application-services is currently on a newer NDK).
export ANDROID_NDK_HOME=$ANDROID_HOME/ndk/android-ndk-r[% c("var/android_ndk_version") %][% c("var/android_ndk_revision") %]
# But an NDK is more than 1.5GB, so it does not make sense to copy one that
# is not even used in all containers. Instead, we download the additional
# NDK only in application-services, and adjust the other variables here.
[% IF c("ndk_version") -%]
export ANDROID_NDK_HOME=$ANDROID_HOME/ndk/android-ndk-r[% c("ndk_version") %]
[% ELSE -%]
export ANDROID_NDK_HOME=$ANDROID_HOME/ndk/android-ndk-r[% c("var/android_ndk_version") %][% c('var/android_ndk_revision') %]
[% END -%]
export ANDROID_NDK_ROOT=$ANDROID_NDK_HOME
export ANDROID_NDK_API_VERSION=[% c("var/android_ndk_version") %][% c('var/android_ndk_revision') %]
export NDK_HOST_TAG=linux-x86_64
export PATH=$PATH:$ANDROID_HOME/build-tools/[% c("var/version_31") %]:$ANDROID_NDK_HOME/toolchains/llvm/prebuilt/linux-x86_64/bin
export PATH=$PATH:$ANDROID_NDK_HOME/toolchains/llvm/prebuilt/linux-x86_64/bin
[% IF c("gradle_tarfile") -%]
tar -C /var/tmp/dist/[% project %] -xf $rootdir/[% c("gradle_tarfile") %]
export GRADLE_HOME=/var/tmp/dist/[% project %]/gradle
......@@ -27,9 +36,12 @@ var:
export PATH=$PATH:$GRADLE_HOME/bin
[% END -%]
google_repo: https://dl.google.com/android/repository
android_api_level: 31
android_platform_revision: 01
android_release_dir: android-12
android_api_level_33: 33
android_platform_revision_33: 02
android_release_dir_33: android-13
android_api_level_31: 31
android_platform_revision_31: 01
android_release_dir_31: android-12
android_api_level_30: 30
android_platform_revision_30: 03
android_release_dir_30: android-11
......@@ -37,26 +49,33 @@ var:
android_platform_revision_29: 04
android_release_dir_29: android-10
android_release_dir_28: android-9
android_ndk_version: 21
android_ndk_revision: d
android_ndk_version_build: 21.3.6528147
android_ndk_version: 23
android_ndk_revision: c
android_ndk_version_build: 23.2.8568313
# We need the following two variables for get_build_tools, used by signing
# scripts.
build_tools_33_filename: 'build-tools_r[% c("var/version_33") %]-linux.zip'
build_tools_33_sha256sum: 0fdf2746200ee21d50a837451350e14cb11a544cbb40be5e539a89164cf3b8e5
# XXX: In commit 83fffa1198c3cbeffec45028971896876e2133a5 mozilla
# replaced sdk-tools with commandlinetools. We try to do the same here,
# but it seems sdk-tools is still being used in the build, so we can't
# remove sdk-tools yet.
sdk_tools_version: 4333796
commandlinetools_version: 7583922
commandlinetools_version_string: 5.0
build_tools_filename: build-tools_r31-linux.zip
build_tools_sha256sum: f90c22f5562638a2e00762e1711eebd55e7f0a05232b65200d387307d057bfe8
commandlinetools_version: 9477386
commandlinetools_version_string: 9.0
input_files:
- project: container-image
- URL: '[% c("var/google_repo") %]/[% c("var/build_tools_filename") %]'
name: build_tools
sha256sum: '[% c("var/build_tools_sha256sum") %]'
- URL: '[% c("var/google_repo") %]/[% c("var/build_tools_33_filename") %]'
name: build_tools_33
sha256sum: '[% c("var/build_tools_33_sha256sum") %]'
# Special: Google wasn't consistent with 31.0.0 and 31 between build tools and
# platform.
- URL: '[% c("var/google_repo") %]/build-tools_r31-linux.zip'
name: build_tools_31
sha256sum: f90c22f5562638a2e00762e1711eebd55e7f0a05232b65200d387307d057bfe8
- URL: '[% c("var/google_repo") %]/build-tools_r[% c("var/version_30") %]-linux.zip'
name: build_tools_30
sha256sum: 565af786dc0cc1941002174fb945122eabd080b222cd4c7c3d9a2ae0fabf5dc4
sha256sum: 24593500aa95d2f99fb4f10658aae7e65cb519be6cd33fa164f15f27f3c4a2d6
- URL: '[% c("var/google_repo") %]/build-tools_r[% c("var/version_29") %]-linux.zip'
name: build_tools_29
sha256sum: 1e9393cbfd4a4b82e30e7f55ab38db4a5a3259db93d5821c63597bc74522fa08
......@@ -69,28 +88,31 @@ input_files:
- URL: '[% c("var/google_repo") %]/platform-[% c("var/android_api_level_30") %]_r[% c("var/android_platform_revision_30") %].zip'
name: platform_30
sha256sum: f3f5b75744dbf6ee6ed3e8174a71e513bfee502d0bc3463ea97e517bff68d84e
- URL: '[% c("var/google_repo") %]/platform-[% c("var/android_api_level") %]_r[% c("var/android_platform_revision") %].zip'
name: platform
- URL: '[% c("var/google_repo") %]/platform-[% c("var/android_api_level_31") %]_r[% c("var/android_platform_revision_31") %].zip'
name: platform_31
sha256sum: 1d69fe1d7f9788d82ff3a374faf4f6ccc9d1d372aa84a86b5bcfb517523b0b3f
- URL: '[% c("var/google_repo") %]/platform-[% c("var/android_api_level_33") %]_r[% c("var/android_platform_revision_33") %].zip'
name: platform_33
sha256sum: f851b13fe89f8510a1250df5e8593e86176b2428f4f3cbe0e304a85818c07bc8
# ./mach bootstrap is fetching the latest version, so it does not seem to
# matter which particular version we are using. Pin to the one fitting best to
# SDK version/build-tools version.
- URL: '[% c("var/google_repo") %]/platform-tools_r[% c("var/version_30") %]-linux.zip'
- URL: '[% c("var/google_repo") %]/platform-tools_r[% c("var/version_33") %]-linux.zip'
name: platform_tools
sha256sum: f7306a7c66d8149c4430aff270d6ed644c720ea29ef799dc613d3dc537485c6e
sha256sum: a339548918c3ab31c4d88416c21cee753bd942040540216c06e640f4b6db3ae2
- URL: '[% c("var/google_repo") %]/sdk-tools-linux-[% c("var/sdk_tools_version") %].zip'
name: android_sdk_tools
sha256sum: 92ffee5a1d98d856634e8b71132e8a95d96c83a63fde1099be3d86df3106def9
- URL: '[% c("var/google_repo") %]/commandlinetools-linux-[% c("var/commandlinetools_version") %]_latest.zip'
name: android_commandlinetools
sha256sum: 124f2d5115eee365df6cf3228ffbca6fc3911d16f8025bebd5b1c6e2fcfa7faf
- URL: '[% c("var/google_repo") %]/android-ndk-r[% c("var/android_ndk_version") %][% c("var/android_ndk_revision") %]-linux-x86_64.zip'
sha256sum: bd1aa17c7ef10066949c88dc6c9c8d536be27f992a1f3b5a584f9bd2ba5646a0
- URL: '[% c("var/google_repo") %]/android-ndk-r[% c("var/android_ndk_version") %][% c("var/android_ndk_revision") %]-linux.zip'
name: android_ndk_compiler
sha256sum: dd6dc090b6e2580206c64bcee499bc16509a5d017c6952dcd2bed9072af67cbd
sha256sum: 6ce94604b77d28113ecd588d425363624a5228d9662450c48d2e4053f8039242
steps:
# The get_build_tools step is used by tools/signing/android-signing
get_build_tools:
filename: 'android-[% c("var/build_tools_filename") %]'
filename: 'android-[% c("var/build_tools_33_filename") %]'
get_build_tools: |
#!/bin/bash
set -e
......@@ -98,6 +120,6 @@ steps:
container:
use_container: 0
input_files:
- URL: '[% c("var/google_repo") %]/[% c("var/build_tools_filename") %]'
- URL: '[% c("var/google_repo") %]/[% c("var/build_tools_33_filename") %]'
name: build_tools
sha256sum: '[% c("var/build_tools_sha256sum") %]'
sha256sum: '[% c("var/build_tools_33_sha256sum") %]'
#!/bin/bash
# rust
[% IF c("var/linux") || c("var/android");
SET toolchain_alias='linux64-rust';
ELSIF c("var/windows");
SET toolchain_alias='mingw32-rust';
ELSIF c("var/macos");
SET toolchain_alias='linux64-rust-macos';
END; %]
read -d '' p << 'EOF' || true
sub as_array {
ref $_[0] eq 'ARRAY' ? $_[0] : [ $_[0] ];
}
my $d = YAML::XS::LoadFile('taskcluster/ci/toolchain/rust.yml');
foreach my $t (keys %$d) {
my $talias = as_array($d->{$t}{run}{'toolchain-alias'});
if (grep { $_ eq '[% toolchain_alias %]' } @$talias) {
my $channel;
foreach my $arg (@{$d->{$t}{run}{arguments}}) {
if ($arg eq '--channel') {
$channel = 1;
next;
}
if ($channel) {
print $arg;
exit;
}
}
}
}
EOF
needed=$(perl -MYAML::XS -e "$p")
current='[% pc("rust", "version") %]'
check_update_needed rust "$needed" "$current"
# clang
[% IF c("var/linux") || c("var/android");
SET toolchain_alias='linux64-clang';
ELSIF c("var/windows");
SET toolchain_alias='linux64-clang-mingw-x64';
ELSIF c("var/macos");
SET toolchain_alias='macosx64-clang';
END; %]
read -d '' p << 'EOF' || true
sub as_array {
ref $_[0] eq 'ARRAY' ? $_[0] : [ $_[0] ];
}
my $d = YAML::XS::LoadFile('taskcluster/ci/toolchain/clang.yml');
my $clang_toolchain;
my $clang_fetch;
TOOLCHAIN: foreach my $t (keys %$d) {
my $aliases = as_array($d->{$t}{run}{'toolchain-alias'}{'by-project'}{default});
foreach my $alias (@$aliases) {
if ($alias eq '[% toolchain_alias %]') {
foreach my $fetch (@{$d->{$t}{fetches}{toolchain}}) {
$clang_toolchain = $fetch if $fetch =~ m/^.*-clang-.*/;
}
foreach my $fetch (@{$d->{$t}{fetches}{fetch}}) {
$clang_fetch = $fetch if $fetch =~ m/^clang-.*/;
}
last TOOLCHAIN;
}
}
}
if (!$clang_toolchain && !$clang_fetch) {
print STDERR "Error: could not find clang toolchain\\n";
exit 1;
}
if (!$clang_fetch) {
foreach my $fetch (@{$d->{$clang_toolchain}{fetches}{fetch}}) {
$clang_fetch = $fetch if $fetch =~ m/^clang-.*/;
}
}
if (!$clang_fetch) {
print STDERR "Error: could not find clang fetch\\n";
exit 1;
}
my $fetch = YAML::XS::LoadFile('taskcluster/ci/fetch/toolchains.yml');
print $fetch->{$clang_fetch}{fetch}{revision};
EOF
needed=$(perl -MYAML::XS -e "$p")
current='[% pc("llvm-project", "git_hash") %]'
check_update_needed clang "$needed" "$current"
# cbindgen
read -d '' p << 'EOF' || true
if (m/^\\s*cbindgen_min_version\\s*=\\s*Version\\("([^"]+)"\\)/) {
print $1;
exit;
}
EOF
needed=$(cat build/moz.configure/bindgen.configure | perl -ne "$p")
current='[% pc("cbindgen", "version") %]'
check_update_needed cbindgen "$needed" "$current"
# nasm
read -d '' p << 'EOF' || true
my $nasm = YAML::XS::LoadFile('taskcluster/ci/toolchain/nasm.yml');
my $linux64 = 'linux64-nasm';
print substr $nasm->{$linux64}{'fetches'}{'fetch'}[0], 5;
EOF
needed=$(perl -MYAML::XS -e "$p")
current='2.15.05'
check_update_needed nasm "$needed" "$current"
# node
read -d '' p << 'EOF' || true
sub l {
ref $_[0] eq 'ARRAY' ? $_[0] : [ $_[0] ];
}
my $d = YAML::XS::LoadFile('taskcluster/ci/toolchain/node.yml');
my $node_toolchain;
T: foreach my $t (keys %$d) {
foreach my $alias (@{l($d->{$t}{run}{'toolchain-alias'})}) {
if ($alias eq 'linux64-node') {
foreach my $fetch (@{$d->{$t}{fetches}{fetch}}) {
if ($fetch =~ m/^nodejs-.*/) {
$node_toolchain = $fetch;
last T;
}
}
}
}
}
exit 1 unless $node_toolchain;
my $fetch = YAML::XS::LoadFile('taskcluster/ci/fetch/toolchains.yml');
my ($version) = $fetch->{$node_toolchain}{fetch}{url} =~ m|^https://nodejs.org/dist/v([^/]+)/|;
print "$version\\n";
EOF
needed=$(perl -MYAML::XS -e "$p")
current='[% pc("node", "version") %]'
check_update_needed node "$needed" "$current"
# Python
read -d '' p << 'EOF' || true
if (m/^\\s*"Bootstrap currently only runs on Python ([^"]+)\\."/) {
print $1;
exit;
}
EOF
needed=$(cat python/mozboot/bin/bootstrap.py | perl -ne "$p")
current="3.6+" # 3.6.0
check_update_needed python "$needed" "$current"
#!/bin/bash
[% c("var/set_default_env") -%]
distdir=/var/tmp/dist/[% project %]
mkdir -p /var/tmp/dist
tar -C /var/tmp/dist -xf [% c('input_files_by_name/cmake') %]
tar -C /var/tmp/dist -xf [% c('input_files_by_name/ninja') %]
export PATH="/var/tmp/dist/ninja:/var/tmp/dist/cmake/bin:$PATH"
[% pc(c('var/compiler'), 'var/setup', { compiler_tarfile => c('input_files_by_name/' _ c('var/compiler')) }) %]
tar -C /var/tmp/dist -xf [% c('input_files_by_name/binutils') %]
export PATH="/var/tmp/dist/binutils/bin:$PATH"
mkdir -p /var/tmp/build
cd /var/tmp/build
tar -xf $rootdir/[% c('input_files_by_name/clang-source') %]
cd clang-source
export LLVM_HOME=$(pwd)
mkdir build
cd build
installdir=/var/tmp/build/install
mkdir -p $installdir
cmake ../compiler-rt/ -GNinja \
-DCMAKE_INSTALL_PREFIX=$installdir \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_SYSTEM_NAME=Android \
-DCMAKE_ANDROID_ARCH_ABI="[% c('var/abi') %]" \
-DCMAKE_ANDROID_NDK="$ANDROID_NDK_HOME" \
-DCMAKE_C_FLAGS="-fuse-ld=lld --rtlib=compiler-rt $defines" \
-DCMAKE_CXX_FLAGS="-fuse-ld=lld --rtlib=compiler-rt $defines" \
-DCMAKE_EXE_LINKER_FLAGS="-L$ANDROID_NDK_HOME/toolchains/llvm/prebuilt/linux-x86_64/[% c('var/libdir') %]" \
-DCOMPILER_RT_BUILD_BUILTINS=ON \
-DCOMPILER_RT_BUILD_LIBFUZZER=OFF \
-DCOMPILER_RT_BUILD_MEMPROF=OFF \
-DCOMPILER_RT_BUILD_ORC=OFF \
-DCOMPILER_RT_BUILD_PROFILE=OFF \
-DCOMPILER_RT_BUILD_SANITIZERS=OFF \
-DCOMPILER_RT_BUILD_XRAY=OFF
ninja -j[% c("num_procs") %] -v install
mkdir -p $distdir/lib/clang/[% c("var/llvm_version") %]/lib/linux/
mv $installdir/lib/linux/libclang_rt.builtins-*-android.a $distdir/lib/clang/[% c("var/llvm_version") %]/lib/linux/
cd /var/tmp/dist
[% c('tar', {
tar_src => [ project ],
tar_args => '-caf ' _ dest_dir _ '/' _ c('filename'),
}) %]
#!/bin/bash
# rust
[% IF c("var/linux");
SET toolchain_alias='linux64-rust';
ELSIF c("var/windows");
SET toolchain_alias='mingw32-rust';
ELSIF c("var/macos");
SET toolchain_alias='linux64-rust-macos';
END; %]
read -d '' p << 'EOF' || true
sub as_array {
ref $_[0] eq 'ARRAY' ? $_[0] : [ $_[0] ];
}
my $d = YAML::XS::LoadFile('taskcluster/ci/toolchain/rust.yml');
foreach my $t (keys %$d) {
my $talias = as_array($d->{$t}{run}{'toolchain-alias'});
if (grep { $_ eq '[% toolchain_alias %]' } @$talias) {
my $channel;
foreach my $arg (@{$d->{$t}{run}{arguments}}) {
if ($arg eq '--channel') {
$channel = 1;
next;
}
if ($channel) {
print $arg;
exit;
}
}
}
}
EOF
needed=$(perl -MYAML::XS -e "$p")
current='[% pc("rust", "version") %]'
check_update_needed rust "$needed" "$current"
# cbindgen
read -d '' p << 'EOF' || true
if (m/^\\s*cbindgen_min_version\\s*=\\s*Version\\("([^"]+)"\\)/) {
print $1;
exit;
}
EOF
needed=$(cat build/moz.configure/bindgen.configure | perl -ne "$p")
current='[% pc("cbindgen", "version") %]'
check_update_needed cbindgen "$needed" "$current"
# nasm
read -d '' p << 'EOF' || true
my $nasm = YAML::XS::LoadFile('taskcluster/ci/toolchain/nasm.yml');
my $linux64 = 'linux64-nasm';
print substr $nasm->{$linux64}{'fetches'}{'fetch'}[0], 5;
EOF
needed=$(perl -MYAML::XS -e "$p")
current='2.15.05'
check_update_needed nasm "$needed" "$current"
# clang
[% IF c("var/linux");
SET toolchain_alias='linux64-clang';
ELSIF c("var/windows");
SET toolchain_alias='linux64-clang-mingw-x64';
ELSIF c("var/macos");
SET toolchain_alias='macosx64-clang';
END; %]
read -d '' p << 'EOF' || true
sub as_array {
ref $_[0] eq 'ARRAY' ? $_[0] : [ $_[0] ];
}
my $d = YAML::XS::LoadFile('taskcluster/ci/toolchain/clang.yml');
my $clang_toolchain;
my $clang_fetch;
TOOLCHAIN: foreach my $t (keys %$d) {
my $aliases = as_array($d->{$t}{run}{'toolchain-alias'}{'by-project'}{default});
foreach my $alias (@$aliases) {
if ($alias eq '[% toolchain_alias %]') {
foreach my $fetch (@{$d->{$t}{fetches}{toolchain}}) {
$clang_toolchain = $fetch if $fetch =~ m/^.*-clang-.*/;
}
foreach my $fetch (@{$d->{$t}{fetches}{fetch}}) {
$clang_fetch = $fetch if $fetch =~ m/^clang-.*/;
}
last TOOLCHAIN;
}
}
}
if (!$clang_toolchain && !$clang_fetch) {
print STDERR "Error: could not find clang toolchain\\n";
exit 1;
}
if (!$clang_fetch) {
foreach my $fetch (@{$d->{$clang_toolchain}{fetches}{fetch}}) {
$clang_fetch = $fetch if $fetch =~ m/^clang-.*/;
}
}
if (!$clang_fetch) {
print STDERR "Error: could not find clang fetch\\n";
exit 1;
}
my $fetch = YAML::XS::LoadFile('taskcluster/ci/fetch/toolchains.yml');
print $fetch->{$clang_fetch}{fetch}{revision};
EOF
needed=$(perl -MYAML::XS -e "$p")
current='[% pc("llvm-project", "git_hash") %]'
check_update_needed clang "$needed" "$current"
# node
read -d '' p << 'EOF' || true
sub l {
ref $_[0] eq 'ARRAY' ? $_[0] : [ $_[0] ];
}
my $d = YAML::XS::LoadFile('taskcluster/ci/toolchain/node.yml');
my $node_toolchain;
T: foreach my $t (keys %$d) {
foreach my $alias (@{l($d->{$t}{run}{'toolchain-alias'})}) {
if ($alias eq 'linux64-node') {
foreach my $fetch (@{$d->{$t}{fetches}{fetch}}) {
if ($fetch =~ m/^nodejs-.*/) {
$node_toolchain = $fetch;
last T;
}
}
}
}
}
exit 1 unless $node_toolchain;
my $fetch = YAML::XS::LoadFile('taskcluster/ci/fetch/toolchains.yml');
my ($version) = $fetch->{$node_toolchain}{fetch}{url} =~ m|^https://nodejs.org/dist/v([^/]+)/|;
print "$version\\n";
EOF
needed=$(perl -MYAML::XS -e "$p")
current='[% pc("node", "version") %]'
check_update_needed node "$needed" "$current"
# Python
read -d '' p << 'EOF' || true
if (m/^\\s*"Bootstrap currently only runs on Python ([^"]+)\\."/) {
print $1;
exit;
}
EOF
needed=$(cat python/mozboot/bin/bootstrap.py | perl -ne "$p")
current="3.6+" # 3.6.0
check_update_needed python "$needed" "$current"
[% INCLUDE 'list_toolchain_updates-common-firefox-geckoview' %]
[% IF c("var/macos") %]
# macosx-sdk
......
......
......@@ -6,7 +6,7 @@
}) %]
distdir=/var/tmp/dist
mkdir -p /var/tmp/build
mkdir -p $distdir/[% project %]
mkdir -p $distdir
tar -C /var/tmp/dist -xf [% c('input_files_by_name/rust') %]
tar -C /var/tmp/dist -xf [% c('input_files_by_name/cbindgen') %]
......@@ -14,8 +14,8 @@ tar -C /var/tmp/dist -xf [% c('input_files_by_name/nasm') %]
tar -C /var/tmp/dist -xf [% c('input_files_by_name/node') %]
tar -C /var/tmp/dist -xf [% c('input_files_by_name/clang') %]
export LLVM_CONFIG="/var/tmp/dist/clang/bin/llvm-config"
tar -C /var/tmp/dist -xf [% c('input_files_by_name/compiler-rt') %]
cp -r /var/tmp/dist/compiler-rt/* /var/tmp/dist/clang/
tar -C /var/tmp/dist -xf [% c('input_files_by_name/llvm-runtimes') %]
cp -r /var/tmp/dist/llvm-runtimes/* /var/tmp/dist/clang/
tar -C /var/tmp/dist -xf [% c('input_files_by_name/binutils') %]
export PATH="/var/tmp/dist/rust/bin:/var/tmp/dist/cbindgen:/var/tmp/dist/nasm/bin:/var/tmp/dist/node/bin:/var/tmp/dist/clang/bin:/var/tmp/dist/binutils/bin:$PATH"
......@@ -25,9 +25,9 @@ export PATH="/var/tmp/dist/rust/bin:/var/tmp/dist/cbindgen:/var/tmp/dist/nasm/bi
# Copy it over.
# https://searchfox.org/mozilla-central/source/build/build-clang/build-clang.py#890,
# include it directly in our clang
rtdir=/var/tmp/dist/clang/lib/clang/[% pc("clang", "version") %]/lib/wasi
mkdir -p $rtdir
cp /var/tmp/dist/wasi-sysroot/lib/clang/*/lib/wasi/libclang_rt.builtins-wasm32.a $rtdir
rtdir="/var/tmp/dist/clang/lib/clang/[% pc('llvm-project', 'var/llvm_major') %]/lib/wasi"
mkdir -p "$rtdir"
cp /var/tmp/dist/wasi-sysroot/lib/clang/*/lib/wasi/libclang_rt.builtins-wasm32.a "$rtdir/"
export WASI_SYSROOT=/var/tmp/dist/wasi-sysroot/share/wasi-sysroot
[% END -%]
......@@ -40,6 +40,8 @@ cat > .mozconfig << 'MOZCONFIG_EOF'
export MOZ_INCLUDE_SOURCE_INFO=1
export MOZ_SOURCE_REPO="[% c('var/gitlab_project') %]"
export MOZ_SOURCE_CHANGESET=[% c("var/git_commit") %]
ac_add_options --enable-update-channel=[% c("var/variant") %]
MOZCONFIG_EOF
[% c("var/set_MOZ_BUILD_DATE") %]
......@@ -47,15 +49,16 @@ MOZCONFIG_EOF
export JAVA_HOME=/usr/lib/jvm/java-1.11.0-openjdk-amd64
gradle_repo=/var/tmp/dist/gradle-dependencies
export GRADLE_MAVEN_REPOSITORIES="file://$gradle_repo","file://$gradle_repo/maven2"
export GRADLE_FLAGS="--no-daemon --offline"
# Set the Maven local repository because Gradle ignores our overriding of $HOME.
# It is only used for the local pubblication of single-arch AARs.
export GRADLE_FLAGS="--no-daemon --offline -Dmaven.repo.local=$distdir/[% project %]"
# Move the Gradle repo to a hard-coded location. The location is embedded in
# the file chrome/toolkit/content/global/buildconfig.html so it needs to be
# standardized for reproducibility.
mv $rootdir/[% c('input_files_by_name/gradle-dependencies') %] $gradle_repo
cp -r $gradle_repo/m2/* $gradle_repo
rm -f configure
rm -f js/src/configure
cp -rl $gradle_repo/dl/android/maven2/* $gradle_repo || true
cp -rl $gradle_repo/m2/* $gradle_repo || true
cp -rl $gradle_repo/maven2/* $gradle_repo || true
# We unbreak mach, see: https://bugzilla.mozilla.org/show_bug.cgi?id=1656993 and https://bugzilla.mozilla.org/show_bug.cgi?id=1755516
export MACH_BUILD_PYTHON_NATIVE_PACKAGE_SOURCE=system
......@@ -67,8 +70,25 @@ mkdir "$HOME/.mozbuild"
./mach build --verbose
[% IF !c("var/android_single_arch") -%]
mkdir "$distdir/[% project %]"
# We don't want the debug or "exoplayer" .aars, but the .aar that has `omni` in its name.
find obj-* -type f -name geckoview*omni*.aar -exec cp {} $distdir/[% project %] \;
[% ELSE -%]
# For single-arch builds, we want to fake a fat aar anyway, to avoid having
# arch suffixes in filenames, or having to rename files.
cat >> mozconfig-android-all << 'MOZCONFIG_EOF'
ac_add_options --enable-update-channel=[% c("var/channel") %]
ac_add_options --with-base-browser-version=[% c("var/torbrowser_version") %]
MOZCONFIG_EOF
pushd tools/torbrowser
make fat-aar ARCHS="[% c('arch') %]"
popd
MOZCONFIG=mozconfig-android-all ./mach gradle \
geckoview:publishWithGeckoBinariesDebugPublicationToMavenLocal \
exoplayer2:publishDebugPublicationToMavenLocal
[% END -%]
cd $distdir
[% c('tar', {
......
......
......@@ -14,15 +14,15 @@ container:
use_container: 1
var:
geckoview_version: 102.12.0esr
browser_branch: 12.5-1
geckoview_version: 115.1.0esr
browser_branch: 13.0-1
browser_build: 2
copyright_year: '[% exec("git show -s --format=%ci").remove("-.*") %]'
gitlab_project: https://gitlab.torproject.org/tpo/applications/tor-browser
git_commit: '[% exec("git rev-parse HEAD") %]'
deps:
- build-essential
- autoconf2.13
- autoconf
- yasm
- python3
- python3-distutils
......@@ -30,74 +30,25 @@ var:
- openjdk-11-jdk-headless
# this should be updated when the list of gradle dependencies is changed
# see doc/how-to-create-gradle-dependencies-list.txt
gradle_dependencies_version: 11
gradle_version: 7.3
gradle_dependencies_version: 12
gradle_version: 7.5.1
variant: beta
targets:
release:
var:
variant: release
nightly:
git_hash: 'tor-browser-[% c("var/geckoview_version") %]-[% c("var/browser_branch") %]'
tag_gpg_id: 0
var:
variant: nightly
steps:
merge_aars:
filename: 'geckoview-[% c("version") %]-[% c("var/build_id") %].tar.[% c("compress_tar") %]'
version: '[% c("abbrev") %]'
merge_aars: |
#!/bin/bash
[% c("var/set_default_env") -%]
[% pc(c('var/compiler'), 'var/setup', {
compiler_tarfile => c('input_files_by_name/' _ c('var/compiler')),
gradle_tarfile => c("input_files_by_name/gradle"),
}) %]
distdir=/var/tmp/dist
builddir=/var/tmp/build
mkdir -p /var/tmp/build
mkdir -p $distdir/[% project %]
tar -C $distdir -xf [% c('input_files_by_name/node') %]
export PATH="/var/tmp/dist/node/bin:$PATH"
tar -C $builddir -xf [% c('input_files_by_name/geckoview_armv7') %]
tar -C $builddir -xf [% c('input_files_by_name/geckoview_aarch64') %]
tar -C $builddir -xf [% c('input_files_by_name/geckoview_x86') %]
tar -C $builddir -xf [% c('input_files_by_name/geckoview_x86_64') %]
tar -C $builddir -xf [% project %]-[% c('version') %].tar.[% c('compress_tar') %]
# Specify the architectures we want to merge
export MOZ_ANDROID_FAT_AAR_ARCHITECTURES=armeabi-v7a,arm64-v8a,x86,x86_64
export MOZ_ANDROID_FAT_AAR_ARMEABI_V7A=$builddir/geckoview/*armeabi-v7a*.aar
export MOZ_ANDROID_FAT_AAR_ARM64_V8A=$builddir/geckoview/*arm64-v8a*.aar
# Specifying just "x86" is not differentiating enough
export MOZ_ANDROID_FAT_AAR_X86=$builddir/geckoview/*x86-*.aar
export MOZ_ANDROID_FAT_AAR_X86_64=$builddir/geckoview/*x86_64*.aar
cd $builddir/[% project %]-[% c("version") %]
ln -s mozconfig-android-all .mozconfig
echo 'mk_add_options MOZ_PARALLEL_BUILD=[% c("num_procs") %]' >> .mozconfig
[% c("var/set_MOZ_BUILD_DATE") %]
export JAVA_HOME=/usr/lib/jvm/java-1.11.0-openjdk-amd64
gradle_repo=/var/tmp/dist/gradle-dependencies
export GRADLE_MAVEN_REPOSITORIES="file://$gradle_repo","file://$gradle_repo/maven2"
export GRADLE_FLAGS="--no-daemon --offline"
mv $rootdir/[% c('input_files_by_name/gradle-dependencies') %] $gradle_repo
cp -r $gradle_repo/m2/* $gradle_repo
# We unbreak mach, see: https://bugzilla.mozilla.org/show_bug.cgi?id=1656993.
export MACH_BUILD_PYTHON_NATIVE_PACKAGE_SOURCE=system
# Create .mozbuild to avoid interactive prompt in configure
mkdir "$HOME/.mozbuild"
# We still need to specify --tor-browser-version due to bug 34005.
./mach configure \
--with-base-browser-version=[% c("var/torbrowser_version") %] \
[% IF !c("var/rlbox") -%]--without-wasm-sandboxed-libraries[% END %]
./mach build --verbose
find obj-* -regex '.*geckoview.*omni.*\(aar\|pom\)' -exec cp {} $distdir/[% project %] \;
cd $distdir/
[% c('tar', {
tar_src => [ project ],
tar_args => '-caf ' _ dest_dir _ '/' _ c('filename'),
}) %]
merge_aars: '[% INCLUDE merge_aars %]'
input_files:
- project: container-image
pkg_type: build
......@@ -136,17 +87,12 @@ steps:
list_toolchain_updates:
git_url: https://github.com/mozilla/gecko-dev.git
git_hash: esr102
git_hash: esr115
tag_gpg_id: 0
input_files: []
container:
use_container: 0
targets:
nightly:
git_hash: 'tor-browser-[% c("var/geckoview_version") %]-[% c("var/browser_branch") %]'
tag_gpg_id: 0
input_files:
- project: container-image
- name: '[% c("var/compiler") %]'
......@@ -165,8 +111,8 @@ input_files:
name: nasm
- project: clang
name: clang
- project: 'compiler-rt'
name: 'compiler-rt'
- project: llvm-runtimes
name: llvm-runtimes
- project: wasi-sysroot
name: wasi-sysroot
enable: '[% c("var/rlbox") %]'
......
......
Source diff could not be displayed: it is too large. Options to address this: view the blob.
#!/bin/bash
[% INCLUDE 'list_toolchain_updates-common-firefox-geckoview' %]
# ndk version
read -d '' p << 'EOF' || true
if (m/^\\s*NDK_VERSION\\s*=\\s*"(.+)"/) {
......@@ -12,30 +14,6 @@ current='r[% pc("android-toolchain", "var/android_ndk_version") %][% pc("android
check_update_needed ndk_version "$needed" "$current"
# rust
read -d '' p << 'EOF' || true
my $d = YAML::XS::LoadFile('taskcluster/ci/toolchain/rust.yml');
foreach my $t (keys %$d) {
if ($d->{$t}{run}{'toolchain-alias'} eq 'linux64-rust-android') {
my $channel;
foreach my $arg (@{$d->{$t}{run}{arguments}}) {
if ($arg eq '--channel') {
$channel = 1;
next;
}
if ($channel) {
print $arg;
exit;
}
}
}
}
EOF
needed=$(perl -MYAML::XS -e "$p")
current='[% pc("rust", "version") %]'
check_update_needed rust "$needed" "$current"
# build_tools
read -d '' p << 'EOF' || true
if (m/build_tools_version\\s*=\\s*"([^"]+)"/) {
......@@ -44,7 +22,7 @@ if (m/build_tools_version\\s*=\\s*"([^"]+)"/) {
}
EOF
needed=$(cat build/moz.configure/android-sdk.configure | perl -ne "$p")
current='[% pc("android-toolchain", "var/version_31") %]'
current='[% pc("android-toolchain", "var/version_33") %]'
check_update_needed build_tools "$needed" "$current"
......@@ -56,7 +34,7 @@ if (m/target_sdk_version\\s*=\\s*"(.+)"/) {
}
EOF
needed=$(cat build/moz.configure/android-sdk.configure | perl -ne "$p")
current='[% pc("android-toolchain", "var/android_api_level") %]'
current='[% pc("android-toolchain", "var/android_api_level_33") %]'
check_update_needed target_sdk "$needed" "$current"
......@@ -127,7 +105,7 @@ check_update_needed min_sdk "$needed" "$current"
# gradle
read -d '' p << 'EOF' || true
if (m|distributionUrl=https\\\\://services.gradle.org/distributions/gradle-(.*)-all.zip|) {
if (m{distributionUrl=https\\\\://services.gradle.org/distributions/gradle-(.*)-(bin|all).zip}) {
print $1;
exit;
}
......@@ -135,108 +113,3 @@ EOF
needed=$(cat gradle/wrapper/gradle-wrapper.properties | perl -ne "$p")
current='[% c("var/gradle_version") %]'
check_update_needed gradle "$needed" "$current"
# cbindgen
read -d '' p << 'EOF' || true
if (m/^\\s*cbindgen_min_version\\s*=\\s*Version\\("([^"]+)"\\)/) {
print $1;
exit;
}
EOF
needed=$(cat build/moz.configure/bindgen.configure | perl -ne "$p")
current='[% pc("cbindgen", "version") %]'
check_update_needed cbindgen "$needed" "$current"
# nasm
read -d '' p << 'EOF' || true
my $nasm = YAML::XS::LoadFile('taskcluster/ci/toolchain/nasm.yml');
my $linux64 = 'linux64-nasm';
print substr $nasm->{$linux64}{'fetches'}{'fetch'}[0], 5;
EOF
needed=$(perl -MYAML::XS -e "$p")
current='2.15.05'
check_update_needed nasm "$needed" "$current"
# clang
read -d '' p << 'EOF' || true
my $d = YAML::XS::LoadFile('taskcluster/ci/toolchain/clang.yml');
my $clang_toolchain;
TOOLCHAIN: foreach my $t (keys %$d) {
foreach my $alias (@{$d->{$t}{run}{'toolchain-alias'}}) {
if ($alias eq 'linux64-clang') {
foreach my $fetch (@{$d->{$t}{fetches}{toolchain}}) {
$clang_toolchain = $fetch if $fetch =~ m/^.*-clang-.*/;
}
last TOOLCHAIN;
}
}
}
if (!$clang_toolchain) {
print STDERR "Error: could not find clang toolchain\\n";
exit 1;
}
my $clang_fetch;
foreach my $fetch (@{$d->{$clang_toolchain}{fetches}{fetch}}) {
$clang_fetch = $fetch if $fetch =~ m/^clang-.*/;
}
if (!$clang_fetch) {
print STDERR "Error: could not find clang fetch\\n";
exit 1;
}
my $fetch = YAML::XS::LoadFile('taskcluster/ci/fetch/toolchains.yml');
print $fetch->{$clang_fetch}{fetch}{revision};
EOF
needed=$(perl -MYAML::XS -e "$p")
current='[% pc("llvm-project", "git_hash") %]'
check_update_needed clang "$needed" "$current"
# node
read -d '' p << 'EOF' || true
sub l {
ref $_[0] eq 'ARRAY' ? $_[0] : [ $_[0] ];
}
my $d = YAML::XS::LoadFile('taskcluster/ci/toolchain/node.yml');
my $node_toolchain;
T: foreach my $t (keys %$d) {
foreach my $alias (@{l($d->{$t}{run}{'toolchain-alias'})}) {
if ($alias eq 'linux64-node') {
foreach my $fetch (@{$d->{$t}{fetches}{fetch}}) {
if ($fetch =~ m/^nodejs-.*/) {
$node_toolchain = $fetch;
last T;
}
}
}
}
}
exit 1 unless $node_toolchain;
my $fetch = YAML::XS::LoadFile('taskcluster/ci/fetch/toolchains.yml');
my ($version) = $fetch->{$node_toolchain}{fetch}{url} =~ m|^https://nodejs.org/dist/v([^/]+)/|;
print "$version\\n";
EOF
needed=$(perl -MYAML::XS -e "$p")
current='[% pc("node", "version") %]'
check_update_needed node "$needed" "$current"
# python
read -d '' p << 'EOF' || true
if (m/^\\s*"Bootstrap currently only runs on Python ([^"]+)\\."/) {
print $1;
exit;
}
EOF
needed=$(cat python/mozboot/bin/bootstrap.py | perl -ne "$p")
current="3.5+"
check_update_needed python "$needed" "$current"
#!/bin/bash
[% c("var/set_default_env") -%]
[% pc(c('var/compiler'), 'var/setup', {
compiler_tarfile => c('input_files_by_name/' _ c('var/compiler')),
gradle_tarfile => c("input_files_by_name/gradle"),
}) %]
distdir=/var/tmp/dist
builddir=/var/tmp/build
mkdir -p $builddir $distdir
tar -C $distdir -xf [% c('input_files_by_name/node') %]
export PATH="/var/tmp/dist/node/bin:$PATH"
tar -C $builddir -xf [% c('input_files_by_name/geckoview_armv7') %]
tar -C $builddir -xf [% c('input_files_by_name/geckoview_aarch64') %]
tar -C $builddir -xf [% c('input_files_by_name/geckoview_x86') %]
tar -C $builddir -xf [% c('input_files_by_name/geckoview_x86_64') %]
tar -C $builddir -xf [% project %]-[% c('version') %].tar.[% c('compress_tar') %]
# Specify the architectures we want to merge
export MOZ_ANDROID_FAT_AAR_ARCHITECTURES=armeabi-v7a,arm64-v8a,x86,x86_64
export MOZ_ANDROID_FAT_AAR_ARMEABI_V7A=$builddir/geckoview/*armeabi-v7a*.aar
export MOZ_ANDROID_FAT_AAR_ARM64_V8A=$builddir/geckoview/*arm64-v8a*.aar
# Specifying just "x86" is not differentiating enough
export MOZ_ANDROID_FAT_AAR_X86=$builddir/geckoview/*x86-*.aar
export MOZ_ANDROID_FAT_AAR_X86_64=$builddir/geckoview/*x86_64*.aar
cd $builddir/[% project %]-[% c("version") %]
ln -s mozconfig-android-all .mozconfig
echo 'mk_add_options MOZ_PARALLEL_BUILD=[% c("num_procs") %]' >> .mozconfig
[% c("var/set_MOZ_BUILD_DATE") %]
export JAVA_HOME=/usr/lib/jvm/java-1.11.0-openjdk-amd64
gradle_repo=/var/tmp/dist/gradle-dependencies
export GRADLE_MAVEN_REPOSITORIES="file://$gradle_repo","file://$gradle_repo/maven2"
export GRADLE_FLAGS="--no-daemon --offline -Dmaven.repo.local=$distdir/[% project %]"
mv $rootdir/[% c('input_files_by_name/gradle-dependencies') %] $gradle_repo
cp -rl $gradle_repo/dl/android/maven2/* $gradle_repo || true
cp -rl $gradle_repo/m2/* $gradle_repo || true
cp -rl $gradle_repo/maven2/* $gradle_repo || true
# We unbreak mach, see: https://bugzilla.mozilla.org/show_bug.cgi?id=1656993.
export MACH_BUILD_PYTHON_NATIVE_PACKAGE_SOURCE=system
# Create .mozbuild to avoid interactive prompt in configure
mkdir "$HOME/.mozbuild"
# We still need to specify --tor-browser-version due to bug 34005.
./mach configure \
--with-base-browser-version=[% c("var/torbrowser_version") %] \
--enable-update-channel=[% c("var/variant") %] \
[% IF !c("var/rlbox") -%]--without-wasm-sandboxed-libraries[% END %]
./mach build --verbose
# We prepare an archive to then extract it as we were using a local Maven
# repository.
# See also https://github.com/mozilla-mobile/firefox-android/blob/main/fenix/docs/substituting-local-gv.md
./mach gradle \
geckoview:publishWithGeckoBinariesDebugPublicationToMavenLocal \
exoplayer2:publishDebugPublicationToMavenLocal
cd $distdir/
[% c('tar', {
tar_src => [ project ],
tar_args => '-caf ' _ dest_dir _ '/' _ c('filename'),
}) %]
......@@ -18,17 +18,11 @@ var:
- python3-pip
- torsocks
glean_wheels_sha256sum:
3.4.0: 6bbf3a9ffa939ca87e00b486f2020ab5cf9dea772f1d37b048f666fed38f98c1
4.0.0: c974113bd8671364c592fea9b64bac660b59d4f03a7dcecd4dd4e0c355431db8
4.2.0: 09cda9fb155e4987bdc03b702219960e9729c448146f023f8c93de57836edf31
4.4.0: afc0eb6497413eab8e5cf95cf9bbfe4dc1cc53a208b9b66572cfde752f3023e9
5.0.1: 289b843af3d0f4bd5fbdc77c94c7e1b2830bcbbf7e43786d30b2bd02f85b4a1a
7.1.0: ff216b274f7f251e5c241bbb4b1ed82e7c6554b518ca17d282da417441bbd30a
glean_wheels_url:
3.4.0: https://people.torproject.org/~boklm/mirrors/sources/glean-wheels-3.4.0-build2.tar.xz
4.0.0: https://people.torproject.org/~boklm/mirrors/sources/glean-wheels-4.0.0.tar.xz
4.2.0: https://people.torproject.org/~pierov/tbb_files/glean-wheels-4.2.0.tar.xz
4.4.0: https://people.torproject.org/~boklm/mirrors/sources/glean-wheels-4.4.0.tar.xz
5.0.1: https://people.torproject.org/~richard/mirrors/sources/glean-wheels-5.0.1.tar.xz
7.1.0: https://build-sources.tbb.torproject.org/glean-wheels-7.1.0.tar.xz
steps:
create_glean_deps_tarball:
......
......
......@@ -6,18 +6,13 @@ container:
var:
gradle_sha256sum:
5.1.1: 4953323605c5d7b89e97d0dc7779e275bccedefcdac090aec123375eae0cc798
5.6.4: 1f3067073041bc44554d0efe5d402a33bc3d3c93cc39ab684f308586d732a80d
6.5: 23e7d37e9bb4f8dabb8a3ea7fdee9dd0428b9b1a71d298aefd65b11dccea220f
6.5.1: 50a7d30529fa939721fe9268a0205142f3f2302bcac5fb45b27a3902e58db54a
6.6.1: 7873ed5287f47ca03549ab8dcb6dc877ac7f0e3d7b1eb12685161d10080910ac
6.7.1: 3239b5ed86c3838a37d983ac100573f64c1f3fd8e1eb6c89fa5f9529b5ec091d
6.9.1: 8c12154228a502b784f451179846e518733cf856efc7d45b2e6691012977b2fe
7.0.2: 0e46229820205440b48a5501122002842b82886e76af35f0f3a069243dca4b3c
7.3: de8f52ad49bdc759164f72439a3bf56ddb1589c4cde802d3cec7d6ad0e0ee410
7.5.1: f6b8596b10cce501591e92f229816aa4046424f3b24d771751b06779d58c8ec4
7.6.1: 6147605a23b4eff6c334927a86ff3508cb5d6722cd624c97ded4c2e8640f1f87
input_files:
- project: container-image
- URL: https://services.gradle.org/distributions/gradle-[% c("version") %]-bin.zip
- URL: https://downloads.gradle.org/distributions/gradle-[% c("version") %]-bin.zip
name: gradle
sha256sum: '[% c("var/gradle_sha256sum/" _ c("version"), { error_if_undef => 1 }) %]'
#!/bin/bash
[% c("var/set_default_env") -%]
distdir=/var/tmp/dist/[% project %]
mkdir -p /var/tmp/dist
tar -C /var/tmp/dist -xf [% c('input_files_by_name/clang') %]
tar -C /var/tmp/dist -xf [% c('input_files_by_name/cmake') %]
tar -C /var/tmp/dist -xf [% c('input_files_by_name/ninja') %]
export PATH="/var/tmp/dist/clang/bin:/var/tmp/dist/ninja:/var/tmp/dist/cmake/bin:$PATH"
[% pc(c('var/compiler'), 'var/setup', { compiler_tarfile => c('input_files_by_name/' _ c('var/compiler')) }) %]
tar -C /var/tmp/dist -xf [% c('input_files_by_name/binutils') %]
export PATH="/var/tmp/dist/binutils/bin:$PATH"
mkdir -p /var/tmp/build
cd /var/tmp/build
tar -xf $rootdir/[% c('input_files_by_name/clang-source') %]
cd clang-source
export LLVM_HOME=$(pwd)
llvm_major="[% pc('llvm-project', 'var/llvm_major') %]"
mkdir -p $distdir/lib/clang/$llvm_major/lib/linux/
# Same trick as Mozilla: use an empty runtime because it is used only for tests
mkdir /var/tmp/build/rt
touch /var/tmp/build/rt/libgcc.a
installdir=/var/tmp/build/install
build_runtimes() {
mkdir -p "$installdir"
cd $LLVM_HOME
arch=$1
if [[ "$arch" == "armv7" ]]; then
arch="arm"
fi
target="$1-linux-android$2"
api_level=$2
libdir=$arch
if [[ "$arch" == "i686" ]]; then
libdir="i386"
fi
## Common flags (from taskcluster/scripts/misc/build-llvm-common.sh)
COMMON_CMAKE_FLAGS="
-DCMAKE_INSTALL_PREFIX=$installdir
-DCMAKE_C_COMPILER_TARGET=$target
-DCMAKE_CXX_COMPILER_TARGET=$target
-DCMAKE_ASM_COMPILER_TARGET=$target
-DCMAKE_BUILD_TYPE=Release
-DLLVM_ENABLE_ASSERTIONS=OFF
-DLLVM_CONFIG_PATH=/var/tmp/dist/clang/bin/llvm-config
-DCMAKE_SYSROOT=$ANDROID_NDK_HOME/toolchains/llvm/prebuilt/linux-x86_64/sysroot
-DCMAKE_LINKER=/var/tmp/dist/clang/bin/ld.lld
-DCMAKE_SHARED_LINKER_FLAGS=-fuse-ld=lld
-DANDROID=1
-DANDROID_NATIVE_API_LEVEL=$api_level
-DSANITIZER_ALLOW_CXXABI=OFF
-DLLVM_DEFAULT_TARGET_TRIPLE=$arch-unknown-linux-android
-DCMAKE_C_COMPILER=/var/tmp/dist/clang/bin/clang
-DCMAKE_CXX_COMPILER=/var/tmp/dist/clang/bin/clang++
-DCMAKE_AR=/var/tmp/dist/clang/bin/llvm-ar
-DCMAKE_RANLIB=/var/tmp/dist/clang/bin/llvm-ranlib
"
## compiler-rt
mkdir "build-compiler-rt-$arch"
cd "build-compiler-rt-$arch"
cmake ../compiler-rt/ -GNinja \
-DCMAKE_EXE_LINKER_FLAGS='-fuse-ld=lld --rtlib=libgcc -L /var/tmp/build/rt' \
-DCOMPILER_RT_BUILD_BUILTINS=ON \
-DCOMPILER_RT_BUILD_LIBFUZZER=OFF \
-DCOMPILER_RT_BUILD_MEMPROF=OFF \
-DCOMPILER_RT_BUILD_ORC=OFF \
-DCOMPILER_RT_BUILD_PROFILE=OFF \
-DCOMPILER_RT_BUILD_SANITIZERS=OFF \
-DCOMPILER_RT_BUILD_XRAY=OFF \
$COMMON_CMAKE_FLAGS
ninja -j[% c("num_procs") %] -v install
## libunwind
cd /var/tmp/build/clang-source
mkdir "build-runtimes-$arch"
cmake -G Ninja -S runtimes -B "build-runtimes-$arch" \
-DLLVM_ENABLE_PER_TARGET_RUNTIME_DIR=ON \
-DCMAKE_C_COMPILER_WORKS=1 \
-DCMAKE_CXX_COMPILER_WORKS=1 \
-DLLVM_ENABLE_RUNTIMES=libunwind \
-DLIBUNWIND_ENABLE_SHARED=OFF \
$COMMON_CMAKE_FLAGS
cd "build-runtimes-$arch"
ninja -j[% c("num_procs") %] -v install
mv $installdir/lib/linux/* $distdir/lib/clang/$llvm_major/lib/linux/
# We are not copying libunwind's headers, but they should not be needed.
libunwind=$(find $installdir/lib -name libunwind.a)
mkdir $distdir/lib/clang/$llvm_major/lib/linux/$libdir/
mv $libunwind $distdir/lib/clang/$llvm_major/lib/linux/$libdir/
rm -rf "$installdir"
}
build_runtimes armv7 [% c('var/api_level_32') %]
build_runtimes aarch64 [% c('var/api_level_64') %]
build_runtimes i686 [% c('var/api_level_32') %]
build_runtimes x86_64 [% c('var/api_level_64') %]
cd /var/tmp/dist
[% c('tar', {
tar_src => [ project ],
tar_args => '-czf ' _ dest_dir _ '/' _ c('filename'),
}) %]
# vim: filetype=yaml sw=2
version: '[% c("var/llvm_version") %]'
version: '[% pc("llvm-project", "version") %]'
filename: '[% project %]-[% c("version") %]-[% c("var/build_id") %].tar.[% c("compress_tar") %]'
container:
use_container: 1
var:
llvm_version: '[% pc("llvm-project", "version") %]'
targets:
android-armv7:
var:
libdir: 'arm-linux-androideabi/lib'
android-aarch64:
var:
libdir: 'aarch64-linux-android/lib64'
android-x86:
var:
libdir: 'i686-linux-android/lib'
android-x86_64:
var:
libdir: 'x86_64-linux-android/lib64'
# API level for armv7 and x86
api_level_32: 16
# API level for aarch64 and x86_64
api_level_64: 21
input_files:
- project: container-image
......@@ -31,6 +20,8 @@ input_files:
name: cmake
- project: llvm-project
name: clang-source
- project: clang
name: clang
- project: ninja
name: ninja
- project: python
......
......
......@@ -13,6 +13,18 @@ mkdir -p /var/tmp/build $output_dir
compiler_tarfile => c('input_files_by_name/' _ c('var/compiler')),
gradle_tarfile => c("input_files_by_name/gradle"),
}) %]
# "Something" still uses this old binary name. Create a link as a workaround.
# The correct fix would involve updating the source and/or using a newer
# version of gradle.
pushd $ANDROID_NDK_HOME/toolchains/llvm/prebuilt/linux-x86_64/bin
for arch in arm armv7a; do
ln -s llvm-strip "$arch-linux-androideabi-strip"
done
for arch in aarch64 i686 x86_64; do
ln -s llvm-strip "$arch-linux-android-strip"
done
popd
tar -C /var/tmp/build -xf [% project %]-[% c('version') %].tar.[% c('compress_tar') %]
unzip -d $rootdir $rootdir/[% c('input_files_by_name/jetifier') %]
......
......
......@@ -15,6 +15,18 @@ mkdir -p /var/tmp/build $output_dir
compiler_tarfile => c('input_files_by_name/' _ c('var/compiler')),
gradle_tarfile => c("input_files_by_name/gradle"),
}) %]
# "Something" still uses this old binary name. Create a link as a workaround.
# The correct fix would involve updating the source and/or using a newer
# version of gradle.
pushd $ANDROID_NDK_HOME/toolchains/llvm/prebuilt/linux-x86_64/bin
for arch in arm armv7a; do
ln -s llvm-strip "$arch-linux-androideabi-strip"
done
for arch in aarch64 i686 x86_64; do
ln -s llvm-strip "$arch-linux-android-strip"
done
popd
tar -C /var/tmp/build -xf [% project %]-[% c('version') %].tar.[% c('compress_tar') %]
# Patch projects
......
......
......@@ -64,12 +64,6 @@ openssldir=/var/tmp/dist/openssl
cd /var/tmp/build/[% project %]-[% c('version') %]
[% IF c("var/android") -%]
# Remove reference to OpenSSL 1.1.1b. See https://gitlab.torproject.org/tpo/core/tor/-/issues/40759
sed -i 's/ A fix is expected to appear in OpenSSL //g' src/lib/tls/tortls_openssl.c
sed -i 's/1.1.1b.//g' src/lib/tls/tortls_openssl.c
[% END -%]
# add git hash to micro-revision.i for #24995
echo '"[% c("abbrev", { abbrev_length => 16 }) %]"' > micro-revision.i
./autogen.sh
......@@ -131,7 +125,7 @@ cd $distdir
[% END %]
[% IF c("var/android") %]
install -s --strip-program=[% c("var/cross_prefix") %]-strip "$distdir/bin/tor" "$TORBINDIR/libTor.so"
install -s --strip-program=llvm-strip "$distdir/bin/tor" "$TORBINDIR/libTor.so"
[% END %]
[%
......
......
......@@ -32,7 +32,7 @@ targets:
- zlib1g-dev
android:
var:
configure_opt_project: '--enable-android --enable-static-openssl --enable-static-libevent --enable-zstd --disable-tool-name-check --disable-system-torrc --disable-system-torrc'
configure_opt_project: '--enable-android --enable-static-openssl --enable-static-libevent --enable-zstd --disable-tool-name-check --disable-system-torrc'
input_files:
- project: container-image
......
......
......@@ -390,6 +390,7 @@ targets:
arch: amd64
deps:
- build-essential
- openjdk-11-jdk-headless
- bison
- ca-certificates
- python3
......@@ -403,16 +404,6 @@ targets:
- zlib1g-dev
configure_opt: '--host=[% c("var/cross_prefix") %] CC=[% c("var/CC") %] [% c("var/configure_opt_project") %]'
pre_pkginst: |
SNAPSHOT_VERSION=20191201T212855Z
OPENJDK_URL=https://snapshot.debian.org/archive/debian/$SNAPSHOT_VERSION/pool/main/o/openjdk-8
JDK_VERSION=8u232-b09-1~deb9u1_amd64
apt-get install -y -q wget ca-certificates-java
wget $OPENJDK_URL/openjdk-8-jdk-headless_$JDK_VERSION.deb
wget $OPENJDK_URL/openjdk-8-jre-headless_$JDK_VERSION.deb
echo 92b4f8fb77d793a86e0b03b3b0750592b40a26a5d75956d10dd984a7b3aad4c9 openjdk-8-jdk-headless_$JDK_VERSION.deb | sha256sum -c
echo 84bf52b6cce20ead08b0d5b9fd9b81b4aa3da385ca951b313fe11d5cb1aa4d17 openjdk-8-jre-headless_$JDK_VERSION.deb | sha256sum -c
apt-get install -y -q ./openjdk-8-jre-headless_$JDK_VERSION.deb ./openjdk-8-jdk-headless_$JDK_VERSION.deb
torbrowser-linux-x86_64:
- linux-x86_64
- linux
......
......
#!/usr/bin/env python3
import hashlib
from pathlib import Path
import os
import re
import shutil
import sys
from urllib.parse import urlparse
from urllib.request import urlretrieve
if len(sys.argv) < 3:
print(
f"Usage: {sys.argv[0]} project-name gradle-dep-num"
)
sys.exit(1)
target = sys.argv[1]
target_num = int(sys.argv[2])
# We assume the script is in tor-browser-build/tools
tbbuild = Path(__file__).parent.parent
java_projects = sorted([
txt.parent.name for txt in tbbuild.glob("projects/**/gradle-dependencies-list.txt")
])
existing = {}
for p in java_projects:
p = tbbuild / "out" / p
for gd in p.glob("gradle-dependencies-*"):
for fname in gd.glob("**/*"):
if fname.is_file():
existing[fname.relative_to(gd)] = fname
parser = re.compile(r"^([0-9a-fA-F]+)\s+\|\s+(\S+)\s*$")
pairs = []
with open(tbbuild / "projects" / target / "gradle-dependencies-list.txt") as f:
for line in f.readlines():
line = line.strip()
if line[0] == '#' or line == 'sha256sum | url':
continue
m = parser.match(line)
pairs.append((m.group(2), m.group(1)))
dest_dir = tbbuild / "out" / target / f"gradle-dependencies-{target_num}"
dest_dir.mkdir(parents=True, exist_ok=True)
os.chdir(str(dest_dir))
hashes = {}
poms = set()
for u, h in pairs:
p = Path(urlparse(u).path[1:])
if not p.exists():
p.parent.mkdir(parents=True, exist_ok=True)
if p in existing:
print(f"Copying {p} from {existing[p]}")
shutil.copyfile(existing[p], p)
else:
print(f"Downloading {u}")
urlretrieve(u, p)
if p.suffix != ".pom":
m = hashlib.sha256()
with p.open("rb") as f:
m.update(f.read())
if m.hexdigest() != h:
print("Hash mismatch!", u)
elif h in hashes:
print("Duplicated item!", h, hashes[h].name, p)
else:
hashes[h] = p
else:
if p in poms:
print(f"Duplicated pom: {p}")
else:
poms.add(p)
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please to comment