Discussion:
05/06: gnu: rust: Don't build for "native" arch on ARM.
Mark H Weaver
2018-04-16 20:05:04 UTC
Permalink
Hi Efraim and Danny,
dannym pushed a commit to branch master
in repository guix.
commit 67ca98ec7818f5b63fe041bfee4ef10826635685
Date: Thu Mar 22 09:14:53 2018 +0200
gnu: rust: Don't build for "native" arch on ARM.
* gnu/packages/rust.scm (rust-1.23)<#:phases>[dont-build-native]: New phase.
---
gnu/packages/rust.scm | 6 ++++++
1 file changed, 6 insertions(+)
diff --git a/gnu/packages/rust.scm b/gnu/packages/rust.scm
index 8c5abfc..0df649c 100644
--- a/gnu/packages/rust.scm
+++ b/gnu/packages/rust.scm
@@ -351,6 +351,12 @@ safety and thread safety guarantees.")
(substitute-keyword-arguments (package-arguments rust-1.19)
((#:phases phases)
`(modify-phases ,phases
+ (add-after 'unpack 'dont-build-native
+ (lambda _
+ ;; XXX: Revisit this when we use gcc 6.
+ (substitute* "src/binaryen/CMakeLists.txt"
+ (("ADD_COMPILE_FLAG\\(\\\"-march=native\\\"\\)") ""))
+ #t))
(add-after 'patch-tests 'patch-cargo-tests
(lambda _
(substitute* "src/tools/cargo/tests/build.rs"
If it would be beneficial, you might consider using gcc-7 to compile
'rust', by adding 'gcc-7' to native-inputs. We're already using gcc-7
to compile a few other packages, including linux-libre on x86_64.

Mark
Danny Milosavljevic
2018-04-17 07:17:12 UTC
Permalink
Hi Mark,

On Mon, 16 Apr 2018 16:05:04 -0400
Post by Mark H Weaver
If it would be beneficial, you might consider using gcc-7 to compile
'rust', by adding 'gcc-7' to native-inputs. We're already using gcc-7
to compile a few other packages, including linux-libre on x86_64.
Yeah, it would be possible.

Rust right now has only limited C++ FFI - so I guess the risk of having
a gcc-7 Rust dlopen'ing a gcc-4 library with incompatible C++ classes/
templates in it is low. (that stuff has been a nightmare to debug in
my working life and I'd rather not repeat it)

I had no compatibility problems with C FFI - so we are covered here.

So all in all we can do it - and let's do it. But I've just pushed
a large update for Rust. Let's have it built and see what else
breaks on other architectures first - before we change more.

Also, AFAIK "-march=native" autodetects the CPU in the build machine
and then optimizes for exactly that CPU. Arguably that's not what
we want in general.
Efraim Flashner
2018-04-17 07:45:33 UTC
Permalink
Post by Danny Milosavljevic
Hi Mark,
On Mon, 16 Apr 2018 16:05:04 -0400
Post by Mark H Weaver
If it would be beneficial, you might consider using gcc-7 to compile
'rust', by adding 'gcc-7' to native-inputs. We're already using gcc-7
to compile a few other packages, including linux-libre on x86_64.
Yeah, it would be possible.
<snip>
Post by Danny Milosavljevic
Also, AFAIK "-march=native" autodetects the CPU in the build machine
and then optimizes for exactly that CPU. Arguably that's not what
we want in general.
This was my original intent with commenting out the '-march=native', it
just seemed that it cropped up as a build error more often with arm*
processors.

As far as aarch64 goes, it doesn't build fully in either case, but the
error I experienced with '-march=native' is gone when I add gcc-7 as a
native-input.
--
Efraim Flashner <***@flashner.co.il> א׀ךים ׀לשנך
GPG key = A28B F40C 3E55 1372 662D 14F7 41AA E7DC CA3D 8351
Confidentiality cannot be guaranteed on emails sent or received unencrypted
Joshua Branson
2018-04-17 20:49:24 UTC
Permalink
Post by Mark H Weaver
Hi Efraim and Danny,
dannym pushed a commit to branch master
in repository guix.
commit 67ca98ec7818f5b63fe041bfee4ef10826635685
Date: Thu Mar 22 09:14:53 2018 +0200
gnu: rust: Don't build for "native" arch on ARM.
* gnu/packages/rust.scm (rust-1.23)<#:phases>[dont-build-native]: New phase.
---
gnu/packages/rust.scm | 6 ++++++
1 file changed, 6 insertions(+)
diff --git a/gnu/packages/rust.scm b/gnu/packages/rust.scm
index 8c5abfc..0df649c 100644
--- a/gnu/packages/rust.scm
+++ b/gnu/packages/rust.scm
@@ -351,6 +351,12 @@ safety and thread safety guarantees.")
(substitute-keyword-arguments (package-arguments rust-1.19)
((#:phases phases)
`(modify-phases ,phases
+ (add-after 'unpack 'dont-build-native
+ (lambda _
+ ;; XXX: Revisit this when we use gcc 6.
+ (substitute* "src/binaryen/CMakeLists.txt"
+ (("ADD_COMPILE_FLAG\\(\\\"-march=native\\\"\\)") ""))
+ #t))
(add-after 'patch-tests 'patch-cargo-tests
(lambda _
(substitute* "src/tools/cargo/tests/build.rs"
If it would be beneficial, you might consider using gcc-7 to compile
'rust', by adding 'gcc-7' to native-inputs. We're already using gcc-7
to compile a few other packages, including linux-libre on x86_64.
Maybe this is a silly question, but I thought that gcc couldn't compile
rust code? I thought LLVM was the only compiler that could compile rust?
Post by Mark H Weaver
Mark
Loading...