summaryrefslogtreecommitdiffstats
path: root/meta/classes-recipe/rust-target-config.bbclass
diff options
context:
space:
mode:
Diffstat (limited to 'meta/classes-recipe/rust-target-config.bbclass')
-rw-r--r--meta/classes-recipe/rust-target-config.bbclass103
1 files changed, 64 insertions, 39 deletions
diff --git a/meta/classes-recipe/rust-target-config.bbclass b/meta/classes-recipe/rust-target-config.bbclass
index 926b0630b1..cac6e90a9e 100644
--- a/meta/classes-recipe/rust-target-config.bbclass
+++ b/meta/classes-recipe/rust-target-config.bbclass
@@ -21,6 +21,9 @@ def llvm_features_from_tune(d):
21 21
22 if 'vfpv4' in feat: 22 if 'vfpv4' in feat:
23 f.append("+vfp4") 23 f.append("+vfp4")
24 elif 'vfpv4d16' in feat:
25 f.append("+vfp4")
26 f.append("-d32")
24 elif 'vfpv3' in feat: 27 elif 'vfpv3' in feat:
25 f.append("+vfp3") 28 f.append("+vfp3")
26 elif 'vfpv3d16' in feat: 29 elif 'vfpv3d16' in feat:
@@ -74,8 +77,33 @@ def llvm_features_from_tune(d):
74 f.append("+a15") 77 f.append("+a15")
75 if 'cortexa17' in feat: 78 if 'cortexa17' in feat:
76 f.append("+a17") 79 f.append("+a17")
77 if ('riscv64' in feat) or ('riscv32' in feat): 80 if 'rv' in feat:
78 f.append("+a,+c,+d,+f,+m") 81 if 'm' in feat:
82 f.append("+m")
83 if 'a' in feat:
84 f.append("+a")
85 if 'f' in feat:
86 f.append("+f")
87 if 'd' in feat:
88 f.append("+d")
89 if 'c' in feat:
90 f.append("+c")
91 if 'v' in feat:
92 f.append("+v")
93 if 'zicbom' in feat:
94 f.append("+zicbom")
95 if 'zicsr' in feat:
96 f.append("+zicsr")
97 if 'zifencei' in feat:
98 f.append("+zifencei")
99 if 'zba' in feat:
100 f.append("+zba")
101 if 'zbb' in feat:
102 f.append("+zbb")
103 if 'zbc' in feat:
104 f.append("+zbc")
105 if 'zbs' in feat:
106 f.append("+zbs")
79 return f 107 return f
80llvm_features_from_tune[vardepvalue] = "${@llvm_features_from_tune(d)}" 108llvm_features_from_tune[vardepvalue] = "${@llvm_features_from_tune(d)}"
81 109
@@ -127,7 +155,7 @@ def llvm_features(d):
127llvm_features[vardepvalue] = "${@llvm_features(d)}" 155llvm_features[vardepvalue] = "${@llvm_features(d)}"
128 156
129## arm-unknown-linux-gnueabihf 157## arm-unknown-linux-gnueabihf
130DATA_LAYOUT[arm-eabi] = "e-m:e-p:32:32-i64:64-v128:64:128-a:0:32-n32-S64" 158DATA_LAYOUT[arm-eabi] = "e-m:e-p:32:32-Fi8-i64:64-v128:64:128-a:0:32-n32-S64"
131TARGET_ENDIAN[arm-eabi] = "little" 159TARGET_ENDIAN[arm-eabi] = "little"
132TARGET_POINTER_WIDTH[arm-eabi] = "32" 160TARGET_POINTER_WIDTH[arm-eabi] = "32"
133TARGET_C_INT_WIDTH[arm-eabi] = "32" 161TARGET_C_INT_WIDTH[arm-eabi] = "32"
@@ -135,7 +163,7 @@ MAX_ATOMIC_WIDTH[arm-eabi] = "64"
135FEATURES[arm-eabi] = "+v6,+vfp2" 163FEATURES[arm-eabi] = "+v6,+vfp2"
136 164
137## armv7-unknown-linux-gnueabihf 165## armv7-unknown-linux-gnueabihf
138DATA_LAYOUT[armv7-eabi] = "e-m:e-p:32:32-i64:64-v128:64:128-a:0:32-n32-S64" 166DATA_LAYOUT[armv7-eabi] = "e-m:e-p:32:32-Fi8-i64:64-v128:64:128-a:0:32-n32-S64"
139TARGET_ENDIAN[armv7-eabi] = "little" 167TARGET_ENDIAN[armv7-eabi] = "little"
140TARGET_POINTER_WIDTH[armv7-eabi] = "32" 168TARGET_POINTER_WIDTH[armv7-eabi] = "32"
141TARGET_C_INT_WIDTH[armv7-eabi] = "32" 169TARGET_C_INT_WIDTH[armv7-eabi] = "32"
@@ -143,35 +171,35 @@ MAX_ATOMIC_WIDTH[armv7-eabi] = "64"
143FEATURES[armv7-eabi] = "+v7,+vfp2,+thumb2" 171FEATURES[armv7-eabi] = "+v7,+vfp2,+thumb2"
144 172
145## aarch64-unknown-linux-{gnu, musl} 173## aarch64-unknown-linux-{gnu, musl}
146DATA_LAYOUT[aarch64] = "e-m:e-i8:8:32-i16:16:32-i64:64-i128:128-n32:64-S128" 174DATA_LAYOUT[aarch64] = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i8:8:32-i16:16:32-i64:64-i128:128-n32:64-S128-Fn32"
147TARGET_ENDIAN[aarch64] = "little" 175TARGET_ENDIAN[aarch64] = "little"
148TARGET_POINTER_WIDTH[aarch64] = "64" 176TARGET_POINTER_WIDTH[aarch64] = "64"
149TARGET_C_INT_WIDTH[aarch64] = "32" 177TARGET_C_INT_WIDTH[aarch64] = "32"
150MAX_ATOMIC_WIDTH[aarch64] = "128" 178MAX_ATOMIC_WIDTH[aarch64] = "128"
151 179
152## x86_64-unknown-linux-{gnu, musl} 180## x86_64-unknown-linux-{gnu, musl}
153DATA_LAYOUT[x86_64] = "e-m:e-i64:64-f80:128-n8:16:32:64-S128" 181DATA_LAYOUT[x86_64] = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128"
154TARGET_ENDIAN[x86_64] = "little" 182TARGET_ENDIAN[x86_64] = "little"
155TARGET_POINTER_WIDTH[x86_64] = "64" 183TARGET_POINTER_WIDTH[x86_64] = "64"
156TARGET_C_INT_WIDTH[x86_64] = "32" 184TARGET_C_INT_WIDTH[x86_64] = "32"
157MAX_ATOMIC_WIDTH[x86_64] = "64" 185MAX_ATOMIC_WIDTH[x86_64] = "64"
158 186
159## x86_64-unknown-linux-gnux32 187## x86_64-unknown-linux-gnux32
160DATA_LAYOUT[x86_64-x32] = "e-m:e-p:32:32-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128" 188DATA_LAYOUT[x86_64-x32] = "e-m:e-p:32:32-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128"
161TARGET_ENDIAN[x86_64-x32] = "little" 189TARGET_ENDIAN[x86_64-x32] = "little"
162TARGET_POINTER_WIDTH[x86_64-x32] = "32" 190TARGET_POINTER_WIDTH[x86_64-x32] = "32"
163TARGET_C_INT_WIDTH[x86_64-x32] = "32" 191TARGET_C_INT_WIDTH[x86_64-x32] = "32"
164MAX_ATOMIC_WIDTH[x86_64-x32] = "64" 192MAX_ATOMIC_WIDTH[x86_64-x32] = "64"
165 193
166## i686-unknown-linux-{gnu, musl} 194## i686-unknown-linux-{gnu, musl}
167DATA_LAYOUT[i686] = "e-m:e-p:32:32-f64:32:64-f80:32-n8:16:32-S128" 195DATA_LAYOUT[i686] = "e-m:e-p:32:32-p270:32:32-p271:32:32-p272:64:64-i128:128-f64:32:64-f80:32-n8:16:32-S128"
168TARGET_ENDIAN[i686] = "little" 196TARGET_ENDIAN[i686] = "little"
169TARGET_POINTER_WIDTH[i686] = "32" 197TARGET_POINTER_WIDTH[i686] = "32"
170TARGET_C_INT_WIDTH[i686] = "32" 198TARGET_C_INT_WIDTH[i686] = "32"
171MAX_ATOMIC_WIDTH[i686] = "64" 199MAX_ATOMIC_WIDTH[i686] = "64"
172 200
173## XXX: a bit of a hack so qemux86 builds, clone of i686-unknown-linux-{gnu, musl} above 201## XXX: a bit of a hack so qemux86 builds, clone of i686-unknown-linux-{gnu, musl} above
174DATA_LAYOUT[i586] = "e-m:e-p:32:32-f64:32:64-f80:32-n8:16:32-S128" 202DATA_LAYOUT[i586] = "e-m:e-p:32:32-p270:32:32-p271:32:32-p272:64:64-i128:128-f64:32:64-f80:32-n8:16:32-S128"
175TARGET_ENDIAN[i586] = "little" 203TARGET_ENDIAN[i586] = "little"
176TARGET_POINTER_WIDTH[i586] = "32" 204TARGET_POINTER_WIDTH[i586] = "32"
177TARGET_C_INT_WIDTH[i586] = "32" 205TARGET_C_INT_WIDTH[i586] = "32"
@@ -195,7 +223,7 @@ MAX_ATOMIC_WIDTH[mipsel] = "32"
195DATA_LAYOUT[mips64] = "E-m:e-i8:8:32-i16:16:32-i64:64-n32:64-S128" 223DATA_LAYOUT[mips64] = "E-m:e-i8:8:32-i16:16:32-i64:64-n32:64-S128"
196TARGET_ENDIAN[mips64] = "big" 224TARGET_ENDIAN[mips64] = "big"
197TARGET_POINTER_WIDTH[mips64] = "64" 225TARGET_POINTER_WIDTH[mips64] = "64"
198TARGET_C_INT_WIDTH[mips64] = "64" 226TARGET_C_INT_WIDTH[mips64] = "32"
199MAX_ATOMIC_WIDTH[mips64] = "64" 227MAX_ATOMIC_WIDTH[mips64] = "64"
200 228
201## mips64-n32-unknown-linux-{gnu, musl} 229## mips64-n32-unknown-linux-{gnu, musl}
@@ -209,46 +237,46 @@ MAX_ATOMIC_WIDTH[mips64-n32] = "64"
209DATA_LAYOUT[mips64el] = "e-m:e-i8:8:32-i16:16:32-i64:64-n32:64-S128" 237DATA_LAYOUT[mips64el] = "e-m:e-i8:8:32-i16:16:32-i64:64-n32:64-S128"
210TARGET_ENDIAN[mips64el] = "little" 238TARGET_ENDIAN[mips64el] = "little"
211TARGET_POINTER_WIDTH[mips64el] = "64" 239TARGET_POINTER_WIDTH[mips64el] = "64"
212TARGET_C_INT_WIDTH[mips64el] = "64" 240TARGET_C_INT_WIDTH[mips64el] = "32"
213MAX_ATOMIC_WIDTH[mips64el] = "64" 241MAX_ATOMIC_WIDTH[mips64el] = "64"
214 242
215## powerpc-unknown-linux-{gnu, musl} 243## powerpc-unknown-linux-{gnu, musl}
216DATA_LAYOUT[powerpc] = "E-m:e-p:32:32-i64:64-n32" 244DATA_LAYOUT[powerpc] = "E-m:e-p:32:32-Fn32-i64:64-n32"
217TARGET_ENDIAN[powerpc] = "big" 245TARGET_ENDIAN[powerpc] = "big"
218TARGET_POINTER_WIDTH[powerpc] = "32" 246TARGET_POINTER_WIDTH[powerpc] = "32"
219TARGET_C_INT_WIDTH[powerpc] = "32" 247TARGET_C_INT_WIDTH[powerpc] = "32"
220MAX_ATOMIC_WIDTH[powerpc] = "32" 248MAX_ATOMIC_WIDTH[powerpc] = "32"
221 249
222## powerpc64-unknown-linux-{gnu, musl} 250## powerpc64-unknown-linux-{gnu, musl}
223DATA_LAYOUT[powerpc64] = "E-m:e-i64:64-n32:64-S128-v256:256:256-v512:512:512" 251DATA_LAYOUT[powerpc64] = "E-m:e-Fi64-i64:64-n32:64-S128-v256:256:256-v512:512:512"
224TARGET_ENDIAN[powerpc64] = "big" 252TARGET_ENDIAN[powerpc64] = "big"
225TARGET_POINTER_WIDTH[powerpc64] = "64" 253TARGET_POINTER_WIDTH[powerpc64] = "64"
226TARGET_C_INT_WIDTH[powerpc64] = "64" 254TARGET_C_INT_WIDTH[powerpc64] = "32"
227MAX_ATOMIC_WIDTH[powerpc64] = "64" 255MAX_ATOMIC_WIDTH[powerpc64] = "64"
228 256
229## powerpc64le-unknown-linux-{gnu, musl} 257## powerpc64le-unknown-linux-{gnu, musl}
230DATA_LAYOUT[powerpc64le] = "e-m:e-i64:64-n32:64-v256:256:256-v512:512:512" 258DATA_LAYOUT[powerpc64le] = "e-m:e-Fn32-i64:64-n32:64-S128-v256:256:256-v512:512:512"
231TARGET_ENDIAN[powerpc64le] = "little" 259TARGET_ENDIAN[powerpc64le] = "little"
232TARGET_POINTER_WIDTH[powerpc64le] = "64" 260TARGET_POINTER_WIDTH[powerpc64le] = "64"
233TARGET_C_INT_WIDTH[powerpc64le] = "64" 261TARGET_C_INT_WIDTH[powerpc64le] = "32"
234MAX_ATOMIC_WIDTH[powerpc64le] = "64" 262MAX_ATOMIC_WIDTH[powerpc64le] = "64"
235 263
236## riscv32gc-unknown-linux-{gnu, musl} 264## riscv32-unknown-linux-{gnu, musl}
237DATA_LAYOUT[riscv32gc] = "e-m:e-p:32:32-i64:64-n32-S128" 265DATA_LAYOUT[riscv32] = "e-m:e-p:32:32-i64:64-n32-S128"
238TARGET_ENDIAN[riscv32gc] = "little" 266TARGET_ENDIAN[riscv32] = "little"
239TARGET_POINTER_WIDTH[riscv32gc] = "32" 267TARGET_POINTER_WIDTH[riscv32] = "32"
240TARGET_C_INT_WIDTH[riscv32gc] = "32" 268TARGET_C_INT_WIDTH[riscv32] = "32"
241MAX_ATOMIC_WIDTH[riscv32gc] = "32" 269MAX_ATOMIC_WIDTH[riscv32] = "32"
242 270
243## riscv64gc-unknown-linux-{gnu, musl} 271## riscv64-unknown-linux-{gnu, musl}
244DATA_LAYOUT[riscv64gc] = "e-m:e-p:64:64-i64:64-i128:128-n64-S128" 272DATA_LAYOUT[riscv64] = "e-m:e-p:64:64-i64:64-i128:128-n32:64-S128"
245TARGET_ENDIAN[riscv64gc] = "little" 273TARGET_ENDIAN[riscv64] = "little"
246TARGET_POINTER_WIDTH[riscv64gc] = "64" 274TARGET_POINTER_WIDTH[riscv64] = "64"
247TARGET_C_INT_WIDTH[riscv64gc] = "64" 275TARGET_C_INT_WIDTH[riscv64] = "32"
248MAX_ATOMIC_WIDTH[riscv64gc] = "64" 276MAX_ATOMIC_WIDTH[riscv64] = "64"
249 277
250## loongarch64-unknown-linux-{gnu, musl} 278## loongarch64-unknown-linux-{gnu, musl}
251DATA_LAYOUT[loongarch64] = "e-m:e-i8:8:32-i16:16:32-i64:64-n32:64-S128" 279DATA_LAYOUT[loongarch64] = "e-m:e-p:64:64-i64:64-i128:128-n32:64-S128"
252TARGET_ENDIAN[loongarch64] = "little" 280TARGET_ENDIAN[loongarch64] = "little"
253TARGET_POINTER_WIDTH[loongarch64] = "64" 281TARGET_POINTER_WIDTH[loongarch64] = "64"
254TARGET_C_INT_WIDTH[loongarch64] = "32" 282TARGET_C_INT_WIDTH[loongarch64] = "32"
@@ -268,19 +296,11 @@ def arch_to_rust_target_arch(arch):
268 return "arm" 296 return "arm"
269 elif arch == "powerpc64le": 297 elif arch == "powerpc64le":
270 return "powerpc64" 298 return "powerpc64"
271 elif arch == "riscv32gc":
272 return "riscv32"
273 elif arch == "riscv64gc":
274 return "riscv64"
275 else: 299 else:
276 return arch 300 return arch
277 301
278# Convert a rust target string to a llvm-compatible triplet 302# Convert a rust target string to a llvm-compatible triplet
279def rust_sys_to_llvm_target(sys): 303def rust_sys_to_llvm_target(sys):
280 if sys.startswith('riscv32gc-'):
281 return sys.replace('riscv32gc-', 'riscv32-', 1)
282 if sys.startswith('riscv64gc-'):
283 return sys.replace('riscv64gc-', 'riscv64-', 1)
284 return sys 304 return sys
285 305
286# generates our target CPU value 306# generates our target CPU value
@@ -377,9 +397,9 @@ def rust_gen_target(d, thing, wd, arch):
377 else: 397 else:
378 tspec['env'] = "gnu" 398 tspec['env'] = "gnu"
379 if "riscv64" in tspec['llvm-target']: 399 if "riscv64" in tspec['llvm-target']:
380 tspec['llvm-abiname'] = "lp64d" 400 tspec['llvm-abiname'] = d.getVar('TUNE_RISCV_ABI')
381 if "riscv32" in tspec['llvm-target']: 401 if "riscv32" in tspec['llvm-target']:
382 tspec['llvm-abiname'] = "ilp32d" 402 tspec['llvm-abiname'] = d.getVar('TUNE_RISCV_ABI')
383 if "loongarch64" in tspec['llvm-target']: 403 if "loongarch64" in tspec['llvm-target']:
384 tspec['llvm-abiname'] = "lp64d" 404 tspec['llvm-abiname'] = "lp64d"
385 tspec['vendor'] = "unknown" 405 tspec['vendor'] = "unknown"
@@ -388,6 +408,11 @@ def rust_gen_target(d, thing, wd, arch):
388 tspec['cpu'] = cpu 408 tspec['cpu'] = cpu
389 if features != "": 409 if features != "":
390 tspec['features'] = features 410 tspec['features'] = features
411 fpu = d.getVar('TARGET_FPU')
412 if fpu == "soft":
413 tspec['llvm-floatabi'] = "soft"
414 elif fpu == "hard":
415 tspec['llvm-floatabi'] = "hard"
391 tspec['dynamic-linking'] = True 416 tspec['dynamic-linking'] = True
392 tspec['executables'] = True 417 tspec['executables'] = True
393 tspec['linker-is-gnu'] = True 418 tspec['linker-is-gnu'] = True