Browse Source

Merge branch 'maint-0.3.4'

Nick Mathewson 5 years ago
parent
commit
028523c801
5 changed files with 32 additions and 9 deletions
  1. 3 2
      Makefile.am
  2. 2 0
      changes/rust_cross
  3. 22 3
      configure.ac
  4. 3 2
      src/rust/.cargo/config.in
  5. 2 2
      src/rust/tor_rust/include.am

+ 3 - 2
Makefile.am

@@ -31,8 +31,9 @@ TESTING_TOR_BINARY=$(top_builddir)/src/or/tor$(EXEEXT)
 endif
 endif
 
 
 if USE_RUST
 if USE_RUST
-rust_ldadd=$(top_builddir)/src/rust/target/release/@TOR_RUST_STATIC_NAME@ \
-	@TOR_RUST_EXTRA_LIBS@
+## this MUST be $(), otherwise am__DEPENDENCIES will not track it
+rust_ldadd=$(top_builddir)/$(TOR_RUST_LIB_PATH) \
+	$(TOR_RUST_EXTRA_LIBS)
 else
 else
 rust_ldadd=
 rust_ldadd=
 endif
 endif

+ 2 - 0
changes/rust_cross

@@ -0,0 +1,2 @@
+  o Minor feature (Rust, portability):
+    - Rust cross-compilation is now supported. Closes ticket 25895.

+ 22 - 3
configure.ac

@@ -443,6 +443,8 @@ fi
 
 
 AC_C_BIGENDIAN
 AC_C_BIGENDIAN
 
 
+AC_ARG_VAR([TOR_RUST_TARGET], [Rust target, must be specified when cross-compiling (HOST != BUILD). example: i686-pc-windows-gnu])
+
 if test "x$enable_rust" = "xyes"; then
 if test "x$enable_rust" = "xyes"; then
   AC_ARG_VAR([RUSTC], [path to the rustc binary])
   AC_ARG_VAR([RUSTC], [path to the rustc binary])
   AC_CHECK_PROG([RUSTC], [rustc], [rustc],[no])
   AC_CHECK_PROG([RUSTC], [rustc], [rustc],[no])
@@ -508,12 +510,29 @@ if test "x$enable_rust" = "xyes"; then
   dnl For now both MSVC and MinGW rust libraries will output static libs with
   dnl For now both MSVC and MinGW rust libraries will output static libs with
   dnl the MSVC naming convention.
   dnl the MSVC naming convention.
   if test "$bwin32" = "true"; then
   if test "$bwin32" = "true"; then
-    TOR_RUST_STATIC_NAME=tor_rust.lib
+    tor_rust_static_name=tor_rust.lib
   else
   else
-    TOR_RUST_STATIC_NAME=libtor_rust.a
+    tor_rust_static_name=libtor_rust.a
+  fi
+
+  AC_CANONICAL_BUILD
+
+  if test -n "$TOR_RUST_TARGET"; then
+    if test "$host" = "$build"; then
+      AC_MSG_ERROR([HOST = BUILD is invalid if TOR_RUST_TARGET is specified, see configure --help for more information.])
+    fi
+    RUST_TARGET_PROP="target = '$TOR_RUST_TARGET'"
+    TOR_RUST_LIB_PATH="src/rust/target/$TOR_RUST_TARGET/release/$tor_rust_static_name"
+  else
+    if test "$host" != "$build"; then
+      AC_MSG_ERROR([TOR_RUST_TARGET must be specified when cross-compiling with Rust enabled.])
+    fi
+    RUST_TARGET_PROP=
+    TOR_RUST_LIB_PATH="src/rust/target/release/$tor_rust_static_name"
   fi
   fi
 
 
-  AC_SUBST(TOR_RUST_STATIC_NAME)
+  AC_SUBST(RUST_TARGET_PROP)
+  AC_SUBST(TOR_RUST_LIB_PATH)
   AC_SUBST(CARGO_ONLINE)
   AC_SUBST(CARGO_ONLINE)
   AC_SUBST(RUST_WARN)
   AC_SUBST(RUST_WARN)
   AC_SUBST(RUST_DL)
   AC_SUBST(RUST_DL)

+ 3 - 2
src/rust/.cargo/config.in

@@ -7,5 +7,6 @@
 @RUST_DL@ [source.vendored-sources]
 @RUST_DL@ [source.vendored-sources]
 @RUST_DL@ directory = '@TOR_RUST_DEPENDENCIES@'
 @RUST_DL@ directory = '@TOR_RUST_DEPENDENCIES@'
 
 
-@RUST_WARN@ [build]
-@RUST_WARN@ rustflags = [ "-D", "warnings" ]
+[build]
+@RUST_WARN@ rustflags = [ "-D", "warnings" ]
+@RUST_TARGET_PROP@

+ 2 - 2
src/rust/tor_rust/include.am

@@ -4,7 +4,7 @@ EXTRA_DIST +=\
 
 
 EXTRA_CARGO_OPTIONS=
 EXTRA_CARGO_OPTIONS=
 
 
-src/rust/target/release/@TOR_RUST_STATIC_NAME@: FORCE
+@TOR_RUST_LIB_PATH@: FORCE
 	( cd "$(abs_top_builddir)/src/rust" ; \
 	( cd "$(abs_top_builddir)/src/rust" ; \
 		CARGO_TARGET_DIR="$(abs_top_builddir)/src/rust/target" \
 		CARGO_TARGET_DIR="$(abs_top_builddir)/src/rust/target" \
 		CARGO_HOME="$(abs_top_builddir)/src/rust" \
 		CARGO_HOME="$(abs_top_builddir)/src/rust" \
@@ -22,7 +22,7 @@ distclean-rust:
 	rm -rf "$(abs_top_builddir)/src/rust/registry"
 	rm -rf "$(abs_top_builddir)/src/rust/registry"
 
 
 if USE_RUST
 if USE_RUST
-build-rust: src/rust/target/release/@TOR_RUST_STATIC_NAME@
+build-rust: @TOR_RUST_LIB_PATH@
 else
 else
 build-rust:
 build-rust:
 endif
 endif