tor

The Tor anonymity network
git clone https://git.dasho.dev/tor.git
Log | Files | Refs | README | LICENSE

commit 614a78ddaa8e28919cab79156b43cb16e5fb9f04
parent c08102ea777ddaaa8404021a1c8b84082f5eff8b
Author: Alex Xu (Hello71) <alex_y_xu@yahoo.ca>
Date:   Wed, 16 May 2018 19:35:12 -0400

Fix Rust cross compilation.

Diffstat:
MMakefile.am | 5+++--
Achanges/rust_cross | 2++
Mconfigure.ac | 25++++++++++++++++++++++---
Msrc/rust/.cargo/config.in | 6+++---
Msrc/rust/tor_rust/include.am | 4++--
5 files changed, 32 insertions(+), 10 deletions(-)

diff --git a/Makefile.am b/Makefile.am @@ -26,8 +26,9 @@ TESTING_TOR_BINARY=$(top_builddir)/src/or/tor$(EXEEXT) endif 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 rust_ldadd= endif diff --git a/changes/rust_cross b/changes/rust_cross @@ -0,0 +1,2 @@ + o Minor feature (Rust, portability): + - Rust cross-compilation is now supported. Closes ticket 25895. diff --git a/configure.ac b/configure.ac @@ -453,6 +453,8 @@ fi 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 AC_ARG_VAR([RUSTC], [path to the rustc binary]) AC_CHECK_PROG([RUSTC], [rustc], [rustc],[no]) @@ -518,12 +520,29 @@ if test "x$enable_rust" = "xyes"; then dnl For now both MSVC and MinGW rust libraries will output static libs with dnl the MSVC naming convention. if test "$bwin32" = "true"; then - TOR_RUST_STATIC_NAME=tor_rust.lib + tor_rust_static_name=tor_rust.lib 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 - AC_SUBST(TOR_RUST_STATIC_NAME) + AC_SUBST(RUST_TARGET_PROP) + AC_SUBST(TOR_RUST_LIB_PATH) AC_SUBST(CARGO_ONLINE) AC_SUBST(RUST_WARN) AC_SUBST(RUST_DL) diff --git a/src/rust/.cargo/config.in b/src/rust/.cargo/config.in @@ -7,5 +7,6 @@ @RUST_DL@ [source.vendored-sources] @RUST_DL@ directory = '@TOR_RUST_DEPENDENCIES@' -@RUST_WARN@ [build] -@RUST_WARN@ rustflags = [ "-D", "warnings" ] -\ No newline at end of file +[build] +@RUST_WARN@ rustflags = [ "-D", "warnings" ] +@RUST_TARGET_PROP@ diff --git a/src/rust/tor_rust/include.am b/src/rust/tor_rust/include.am @@ -4,7 +4,7 @@ EXTRA_DIST +=\ EXTRA_CARGO_OPTIONS= -src/rust/target/release/@TOR_RUST_STATIC_NAME@: FORCE +@TOR_RUST_LIB_PATH@: FORCE ( cd "$(abs_top_builddir)/src/rust" ; \ CARGO_TARGET_DIR="$(abs_top_builddir)/src/rust/target" \ CARGO_HOME="$(abs_top_builddir)/src/rust" \ @@ -22,7 +22,7 @@ distclean-rust: rm -rf "$(abs_top_builddir)/src/rust/registry" if USE_RUST -build-rust: src/rust/target/release/@TOR_RUST_STATIC_NAME@ +build-rust: @TOR_RUST_LIB_PATH@ else build-rust: endif