Unverified Commit 5be41831 authored by Georg Koppen's avatar Georg Koppen
Browse files

Bug 25481: Enable rust support in Linux nightlies

We enable Rust support for tor in our Linux nightly builds as a first
step to enabling it on all supported platforms.
parent 36cfa493
# vim: filetype=yaml sw=2
version: 2.8.12.2
version: 3.4.3
git_url: https://cmake.org/cmake.git
git_hash: 'v[% c("version") %]'
tag_gpg_id: 1
......
From 820f26810baf35c1961763f6b0013e4f7e7380da Mon Sep 17 00:00:00 2001
From: Georg Koppen <gk@torproject.org>
Date: Thu, 12 Apr 2018 13:10:13 +0000
Subject: [PATCH] Use our gcc/c++
diff --git a/src/librustc_binaryen/build.rs b/src/librustc_binaryen/build.rs
index f23ff3cee5..2496dd1be9 100644
--- a/src/librustc_binaryen/build.rs
+++ b/src/librustc_binaryen/build.rs
@@ -26,6 +26,8 @@ fn main() {
Config::new("../binaryen")
.define("BUILD_STATIC_LIB", "ON")
+ .define("CMAKE_C_COMPILER", "gcc")
+ .define("CMAKE_CXX_COMPILER", "c++")
.build_target("binaryen")
.build();
--
2.16.3
#!/bin/bash
[% c('var/setarch') %]
[% 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') %]
export PATH="/var/tmp/dist/cmake/bin:$PATH"
tar -C /var/tmp/dist -xf [% c('input_files_by_name/prev_rust') %]
cd /var/tmp/dist/rust-[% c('var/prev_version') %]-[% c('arch') %]-unknown-linux-gnu
./install.sh --prefix=$distdir-rust-old
export PATH="$distdir-rust-old/bin:$PATH"
[% IF c("var/linux") %]
[% pc('gcc', 'var/setup', { compiler_tarfile => c('input_files_by_name/gcc') }) %]
[% END -%]
cd $rootdir
mkdir /var/tmp/build
tar -C /var/tmp/build -xf [% c('input_files_by_name/rust') %]
cd /var/tmp/build/rustc-[% c('version') %]-src
[% IF c("var/linux") %]
# binaryen hardcodes /usr/bin/cc and /usr/bin/c++ as the C and C++ compiler.
# But that is too old on Debian Wheezy which is why we need to patch it, so
# we can use our own GCC instead.
patch -p1 < $rootdir/binaryen.patch
[% END %]
mkdir build
cd build
../configure --prefix=$distdir [% c("var/configure_opt") %]
make -j[% c("buildconf/num_procs") %]
make install
cd /var/tmp/dist
[% c('tar', {
tar_src => [ project ],
tar_args => '-czf ' _ dest_dir _ '/' _ c('filename'),
}) %]
# vim: filetype=yaml sw=2
filename: '[% project %]-[% c("version") %]-[% c("var/osname") %]-[% c("var/build_id") %].tar.gz'
version: 1.25.0
var:
prev_version: 1.24.1
container:
use_container: 1
targets:
linux:
var:
arch_deps:
- hardening-wrapper
- libssl-dev
- pkg-config
# We use
# `--enable-local-rust` to avoid downloading the required compiler during
# build time
#
# `--enable-vendor` to avoid downloading crates during build time and just
# use the ones which are shipped with the source
#
# `--enable-extended` to build not only rustc but cargo as well
#
# `--release-channel=stable` to just include stable features in the
# compiler
#
# `--sysconfdir=etc` to avoid install failures as |make install| wants to
# write to /etc otherwise
#
# the `target` triple to explicitly specify the architecture and platform
# for the compiler/std lib. Ideally, it should not be needed unless one is
# cross-compiling, but compiling `alloc_jemalloc` fails without that in a
# 32bit container. "--host=x86_64-unknown-linux-gnu" is used in its
# configure script in this case.
# `--set=` to explicitly specify the C compiler. We need to compile the
# bundled LLVM and it wants to use `cc`. However, we don't have that in
# our compiled GCC resulting in weird errors due to C and C++ compiler
# version mismatch. We avoid that with this configure option. We need to
# build our own GCC in the first place as 4.7.2 is too old to get all the
# Rust pieces compiled.
configure_opt: --enable-local-rust --enable-vendor --enable-extended --release-channel=stable --sysconfdir=etc --target=[% c("arch") %]-unknown-linux-gnu --set=target.[% c("arch") %]-unknown-linux-gnu.cc=gcc
input_files:
- project: container-image
- project: cmake
name: cmake
- project: gcc
name: gcc
enable: '[% c("var/linux") %]'
- URL: 'https://static.rust-lang.org/dist/rustc-[% c("version") %]-src.tar.gz'
name: rust
sig_ext: asc
file_gpg_id: 1
gpg_keyring: rust.gpg
- URL: 'https://static.rust-lang.org/dist/rust-[% c("var/prev_version") %]-[% c("arch") %]-unknown-linux-gnu.tar.xz'
name: prev_rust
sig_ext: asc
file_gpg_id: 1
gpg_keyring: rust.gpg
- filename: binaryen.patch
enable: '[% c("var/linux") %]'
......@@ -20,6 +20,10 @@ mkdir -p /var/tmp/build
tar -C /var/tmp/dist -xf [% c('input_files_by_name/openssl') %]
tar -C /var/tmp/dist -xf [% c('input_files_by_name/libevent') %]
[% IF c("var/linux") && c("var/nightly") %]
tar -C /var/tmp/dist -xf [% c('input_files_by_name/rust') %]
export PATH=/var/tmp/dist/rust/bin:$PATH
[% END %]
tar -C /var/tmp/build -xf [% project %]-[% c('version') %].tar.gz
libeventdir=/var/tmp/dist/libevent
openssldir=/var/tmp/dist/openssl
......@@ -31,7 +35,6 @@ openssldir=/var/tmp/dist/openssl
$gcclibs/*.dll $distdir/Tor/
[% END %]
[% IF c("var/linux") %]
mkdir -p "$distdir/Debug/Tor"
cp $openssldir/lib/libssl.so.1.0.0 "$distdir/Tor/"
......@@ -62,10 +65,11 @@ cd /var/tmp/build/[% project %]-[% c('version') %]
echo '"[% c("abbrev", { abbrev_length => 16 }) %]"' > micro-revision.i
./autogen.sh
find -type f -print0 | xargs -0 [% c("var/touch") %]
./configure --disable-asciidoc --with-libevent-dir="$libeventdir" --with-openssl-dir="$openssldir" \
[% IF c("var/linux") && c("var/nightly") %]TOR_RUST_DEPENDENCIES=`pwd`/src/ext/rust/crates[% END %] ./configure --disable-asciidoc --with-libevent-dir="$libeventdir" --with-openssl-dir="$openssldir" \
[% IF c("var/asan") %]--enable-fragile-hardening[% END %] \
[% IF c("var/windows") %]--with-zlib-dir="$zlibdir"[% END %] \
[% IF c("var/osx") %]--enable-static-openssl[% END %] \
[% IF c("var/linux") && c("var/nightly") %]--enable-rust[% END %] \
--prefix="$distdir" [% c("var/configure_opt") %]
[% IF c("var/osx") || c("var/windows") -%]
export LD_PRELOAD=[% c("var/faketime_path") %]
......
......@@ -3,6 +3,7 @@ filename: '[% project %]-[% c("version") %]-[% c("var/osname") %]-[% c("var/buil
version: 0.3.3.3-alpha
git_hash: 'tor-[% c("version") %]'
git_url: https://git.torproject.org/tor.git
git_submodule: 1
gpg_keyring: tor.gpg
tag_gpg_id: 1
......@@ -57,3 +58,6 @@ input_files:
enable: '[% c("var/windows") %]'
- name: '[% c("var/compiler") %]'
project: '[% c("var/compiler") %]'
- name: rust
project: rust
enable: '[% c("var/linux") && c("var/nightly") %]'
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment