hc
2023-11-22 f743a7adbd6e230d66a6206fa115b59fec2d88eb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
From 2817f07563070d71b624b4397af32d820efec244 Mon Sep 17 00:00:00 2001
From: Takuro Ashie <ashie@clear-code.com>
Date: Thu, 18 Apr 2019 23:15:16 +0900
Subject: [PATCH] Bug 1545437 - Add options to specify Rust target name
 
 r?glandium
 
Certain build systems such as Yocto know more suitable Rust target name, so it
would be better that there is a way to pass it to Mozilla's build system.
 
Differential Revision: https://phabricator.services.mozilla.com/D28069
 
---
 build/moz.configure/rust.configure | 37 ++++++++++++++++++++++++++----
 1 file changed, 33 insertions(+), 4 deletions(-)
 
diff --git a/build/moz.configure/rust.configure b/build/moz.configure/rust.configure
index dc23355253..e2d9a8552f 100644
--- a/build/moz.configure/rust.configure
+++ b/build/moz.configure/rust.configure
@@ -211,6 +211,28 @@ def rust_supported_targets(rustc):
     return data
 
 
+option(env='RUST_HOST',
+       nargs=1,
+       help='Define the system type for Rust performing the build')
+
+@depends('RUST_HOST')
+@checking('rust host', lambda host: host)
+def rust_host_env(value):
+    if value:
+        return value[0]
+
+
+option(env='RUST_TARGET',
+       nargs=1,
+       help='Define the system type for Rust where the resulting executables will be used')
+
+@depends('RUST_TARGET')
+@checking('rust target', lambda target: target)
+def rust_target_env(value):
+    if value:
+        return value[0]
+
+
 @template
 def rust_triple_alias(host_or_target):
     """Template defining the alias used for rustc's --target flag.
@@ -221,8 +243,9 @@ def rust_triple_alias(host_or_target):
 
     host_or_target_str = {host: 'host', target: 'target'}[host_or_target]
 
-    @depends(rustc, host_or_target, c_compiler, rust_supported_targets,
-             arm_target, when=rust_compiler)
+    @depends(rustc, host_or_target, rust_host_env, rust_target_env,
+             c_compiler, rust_supported_targets, arm_target,
+             when=rust_compiler)
     @checking('for rust %s triplet' % host_or_target_str)
     @imports('os')
     @imports('subprocess')
@@ -230,8 +253,14 @@ def rust_triple_alias(host_or_target):
     @imports(_from='mozbuild.shellutil', _import='quote')
     @imports(_from='tempfile', _import='mkstemp')
     @imports(_from='textwrap', _import='dedent')
-    def rust_target(rustc, host_or_target, compiler_info,
-                    rust_supported_targets, arm_target):
+    def rust_target(rustc, host_or_target, rust_host_env, rust_target_env,
+                    compiler_info, rust_supported_targets, arm_target):
+
+        specified_targets = {"host": rust_host_env, "target": rust_target_env}
+        specified_target = specified_targets[host_or_target_str]
+        if (specified_target):
+            return specified_target
+
         # Rust's --target options are similar to, but not exactly the same
         # as, the autoconf-derived targets we use.  An example would be that
         # Rust uses distinct target triples for targetting the GNU C++ ABI