[tor-commits] [tor-browser-build/master] Bug 25894: Get a Rust cross-compiler for Windows

boklm at torproject.org boklm at torproject.org
Mon Jun 4 10:43:15 UTC 2018


commit 4d5e3d2ba5422b931a2e32a9498feabec6ecc23e
Author: Georg Koppen <gk at torproject.org>
Date:   Mon Apr 30 21:58:41 2018 +0000

    Bug 25894: Get a Rust cross-compiler for Windows
---
 projects/rust/build             | 14 +++++++++++---
 projects/rust/config            |  9 +++++++++
 projects/rust/panic-abort.patch | 36 ++++++++++++++++++++++++++++++++++++
 3 files changed, 56 insertions(+), 3 deletions(-)

diff --git a/projects/rust/build b/projects/rust/build
index 4c81ad8..69bc3a7 100644
--- a/projects/rust/build
+++ b/projects/rust/build
@@ -10,9 +10,7 @@ cd /var/tmp/dist/rust-[% c('var/prev_version') %]-[% c('arch') %]-unknown-linux-
 ./install.sh --prefix=$distdir-rust-old
 export PATH="$distdir-rust-old/bin:$PATH"
 
-[% IF ! c("var/windows") %]
-  [% pc(c('var/compiler'), 'var/setup', { compiler_tarfile => c('input_files_by_name/' _ c('var/compiler')) }) %]
-[% END -%]
+[% pc(c('var/compiler'), 'var/setup', { compiler_tarfile => c('input_files_by_name/' _ c('var/compiler')) }) %]
 
 [% IF c("var/osx") %]
   # We need to clear `CC` and `LDFLAGS` as they are used for the host platform
@@ -61,6 +59,16 @@ cd /var/tmp/build/rustc-[% c('version') %]-src
   patch -p1 < $rootdir/binaryen.patch
 [% END %]
 
+[% IF c("var/windows-i686") %]
+  # Cross-compiling for Windows 32bit is currently not possible without any
+  # patches. The reason for that is libstd expecting DWARF unwinding while most
+  # toolchains on Linux, targeting Windows 32bit, use SjLj unwinding.
+  # See: https://github.com/rust-lang/rust/issues/12859 for discussion about
+  # that and https://github.com/rust-lang/rust/pull/49633 for a newer attempt to
+  # fix this problem.
+  patch -p1 < $rootdir/panic-abort.patch
+[% END %]
+
 mkdir build
 cd build
 ../configure --prefix=$distdir [% c("var/configure_opt") %]
diff --git a/projects/rust/config b/projects/rust/config
index ae2290b..9d3030d 100644
--- a/projects/rust/config
+++ b/projects/rust/config
@@ -48,6 +48,13 @@ targets:
         - pkg-config
       configure_opt: --enable-local-rust --enable-vendor --enable-extended --release-channel=stable --sysconfdir=etc --target=x86_64-apple-darwin --set=target.x86_64-apple-darwin.cc=x86_64-apple-darwin-clang
 
+  windows:
+    var:
+      arch_deps:
+        - libssl-dev
+        - pkg-config
+      configure_opt: --enable-local-rust --enable-vendor --enable-extended --release-channel=stable --sysconfdir=etc --target=[% c("arch") %]-pc-windows-gnu
+
 input_files:
   - project: container-image
   - project: cmake
@@ -66,3 +73,5 @@ input_files:
     gpg_keyring: rust.gpg
   - filename: binaryen.patch
     enable: '[% c("var/linux") %]'
+  - filename: panic-abort.patch
+    enable: '[% c("var/windows-i686") %]'
diff --git a/projects/rust/panic-abort.patch b/projects/rust/panic-abort.patch
new file mode 100644
index 0000000..1711ff7
--- /dev/null
+++ b/projects/rust/panic-abort.patch
@@ -0,0 +1,36 @@
+From 2fe471643721f3967f1bdf28907b0a7247fdb705 Mon Sep 17 00:00:00 2001
+From: Georg Koppen <gk at torproject.org>
+Date: Thu, 26 Apr 2018 13:18:27 +0000
+Subject: [PATCH] Avoid cross-compilation breakage due to unwinding
+ incompatibilities
+
+
+diff --git a/src/bootstrap/bin/rustc.rs b/src/bootstrap/bin/rustc.rs
+index 55d104b182..85330f973b 100644
+--- a/src/bootstrap/bin/rustc.rs
++++ b/src/bootstrap/bin/rustc.rs
+@@ -143,7 +143,8 @@ fn main() {
+         // workaround undefined references to `rust_eh_unwind_resume` generated
+         // otherwise, see issue https://github.com/rust-lang/rust/issues/43095.
+         if crate_name == "panic_abort" ||
+-           crate_name == "compiler_builtins" && stage != "0" {
++           crate_name == "compiler_builtins" && stage != "0" ||
++           target == "i686-pc-windows-gnu" {
+             cmd.arg("-C").arg("panic=abort");
+         }
+ 
+diff --git a/src/libtest/lib.rs b/src/libtest/lib.rs
+index 9ea5f39b71..bb689120af 100644
+--- a/src/libtest/lib.rs
++++ b/src/libtest/lib.rs
+@@ -45,7 +45,6 @@ extern crate getopts;
+ extern crate term;
+ #[cfg(any(unix, target_os = "cloudabi"))]
+ extern crate libc;
+-extern crate panic_unwind;
+ 
+ pub use self::TestFn::*;
+ pub use self::ColorConfig::*;
+-- 
+2.17.0
+



More information about the tor-commits mailing list