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.bbclass100
1 files changed, 61 insertions, 39 deletions
diff --git a/meta/classes-recipe/rust-target-config.bbclass b/meta/classes-recipe/rust-target-config.bbclass
index 330ad8a3f5..cac6e90a9e 100644
--- a/meta/classes-recipe/rust-target-config.bbclass
+++ b/meta/classes-recipe/rust-target-config.bbclass
@@ -77,8 +77,33 @@ def llvm_features_from_tune(d):
77 f.append("+a15") 77 f.append("+a15")
78 if 'cortexa17' in feat: 78 if 'cortexa17' in feat:
79 f.append("+a17") 79 f.append("+a17")
80 if ('riscv64' in feat) or ('riscv32' in feat): 80 if 'rv' in feat:
81 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")
82 return f 107 return f
83llvm_features_from_tune[vardepvalue] = "${@llvm_features_from_tune(d)}" 108llvm_features_from_tune[vardepvalue] = "${@llvm_features_from_tune(d)}"
84 109
@@ -130,7 +155,7 @@ def llvm_features(d):
130llvm_features[vardepvalue] = "${@llvm_features(d)}" 155llvm_features[vardepvalue] = "${@llvm_features(d)}"
131 156
132## arm-unknown-linux-gnueabihf 157## arm-unknown-linux-gnueabihf
133DATA_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"
134TARGET_ENDIAN[arm-eabi] = "little" 159TARGET_ENDIAN[arm-eabi] = "little"
135TARGET_POINTER_WIDTH[arm-eabi] = "32" 160TARGET_POINTER_WIDTH[arm-eabi] = "32"
136TARGET_C_INT_WIDTH[arm-eabi] = "32" 161TARGET_C_INT_WIDTH[arm-eabi] = "32"
@@ -138,7 +163,7 @@ MAX_ATOMIC_WIDTH[arm-eabi] = "64"
138FEATURES[arm-eabi] = "+v6,+vfp2" 163FEATURES[arm-eabi] = "+v6,+vfp2"
139 164
140## armv7-unknown-linux-gnueabihf 165## armv7-unknown-linux-gnueabihf
141DATA_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"
142TARGET_ENDIAN[armv7-eabi] = "little" 167TARGET_ENDIAN[armv7-eabi] = "little"
143TARGET_POINTER_WIDTH[armv7-eabi] = "32" 168TARGET_POINTER_WIDTH[armv7-eabi] = "32"
144TARGET_C_INT_WIDTH[armv7-eabi] = "32" 169TARGET_C_INT_WIDTH[armv7-eabi] = "32"
@@ -146,35 +171,35 @@ MAX_ATOMIC_WIDTH[armv7-eabi] = "64"
146FEATURES[armv7-eabi] = "+v7,+vfp2,+thumb2" 171FEATURES[armv7-eabi] = "+v7,+vfp2,+thumb2"
147 172
148## aarch64-unknown-linux-{gnu, musl} 173## aarch64-unknown-linux-{gnu, musl}
149DATA_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"
150TARGET_ENDIAN[aarch64] = "little" 175TARGET_ENDIAN[aarch64] = "little"
151TARGET_POINTER_WIDTH[aarch64] = "64" 176TARGET_POINTER_WIDTH[aarch64] = "64"
152TARGET_C_INT_WIDTH[aarch64] = "32" 177TARGET_C_INT_WIDTH[aarch64] = "32"
153MAX_ATOMIC_WIDTH[aarch64] = "128" 178MAX_ATOMIC_WIDTH[aarch64] = "128"
154 179
155## x86_64-unknown-linux-{gnu, musl} 180## x86_64-unknown-linux-{gnu, musl}
156DATA_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"
157TARGET_ENDIAN[x86_64] = "little" 182TARGET_ENDIAN[x86_64] = "little"
158TARGET_POINTER_WIDTH[x86_64] = "64" 183TARGET_POINTER_WIDTH[x86_64] = "64"
159TARGET_C_INT_WIDTH[x86_64] = "32" 184TARGET_C_INT_WIDTH[x86_64] = "32"
160MAX_ATOMIC_WIDTH[x86_64] = "64" 185MAX_ATOMIC_WIDTH[x86_64] = "64"
161 186
162## x86_64-unknown-linux-gnux32 187## x86_64-unknown-linux-gnux32
163DATA_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"
164TARGET_ENDIAN[x86_64-x32] = "little" 189TARGET_ENDIAN[x86_64-x32] = "little"
165TARGET_POINTER_WIDTH[x86_64-x32] = "32" 190TARGET_POINTER_WIDTH[x86_64-x32] = "32"
166TARGET_C_INT_WIDTH[x86_64-x32] = "32" 191TARGET_C_INT_WIDTH[x86_64-x32] = "32"
167MAX_ATOMIC_WIDTH[x86_64-x32] = "64" 192MAX_ATOMIC_WIDTH[x86_64-x32] = "64"
168 193
169## i686-unknown-linux-{gnu, musl} 194## i686-unknown-linux-{gnu, musl}
170DATA_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"
171TARGET_ENDIAN[i686] = "little" 196TARGET_ENDIAN[i686] = "little"
172TARGET_POINTER_WIDTH[i686] = "32" 197TARGET_POINTER_WIDTH[i686] = "32"
173TARGET_C_INT_WIDTH[i686] = "32" 198TARGET_C_INT_WIDTH[i686] = "32"
174MAX_ATOMIC_WIDTH[i686] = "64" 199MAX_ATOMIC_WIDTH[i686] = "64"
175 200
176## 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
177DATA_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"
178TARGET_ENDIAN[i586] = "little" 203TARGET_ENDIAN[i586] = "little"
179TARGET_POINTER_WIDTH[i586] = "32" 204TARGET_POINTER_WIDTH[i586] = "32"
180TARGET_C_INT_WIDTH[i586] = "32" 205TARGET_C_INT_WIDTH[i586] = "32"
@@ -198,7 +223,7 @@ MAX_ATOMIC_WIDTH[mipsel] = "32"
198DATA_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"
199TARGET_ENDIAN[mips64] = "big" 224TARGET_ENDIAN[mips64] = "big"
200TARGET_POINTER_WIDTH[mips64] = "64" 225TARGET_POINTER_WIDTH[mips64] = "64"
201TARGET_C_INT_WIDTH[mips64] = "64" 226TARGET_C_INT_WIDTH[mips64] = "32"
202MAX_ATOMIC_WIDTH[mips64] = "64" 227MAX_ATOMIC_WIDTH[mips64] = "64"
203 228
204## mips64-n32-unknown-linux-{gnu, musl} 229## mips64-n32-unknown-linux-{gnu, musl}
@@ -212,46 +237,46 @@ MAX_ATOMIC_WIDTH[mips64-n32] = "64"
212DATA_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"
213TARGET_ENDIAN[mips64el] = "little" 238TARGET_ENDIAN[mips64el] = "little"
214TARGET_POINTER_WIDTH[mips64el] = "64" 239TARGET_POINTER_WIDTH[mips64el] = "64"
215TARGET_C_INT_WIDTH[mips64el] = "64" 240TARGET_C_INT_WIDTH[mips64el] = "32"
216MAX_ATOMIC_WIDTH[mips64el] = "64" 241MAX_ATOMIC_WIDTH[mips64el] = "64"
217 242
218## powerpc-unknown-linux-{gnu, musl} 243## powerpc-unknown-linux-{gnu, musl}
219DATA_LAYOUT[powerpc] = "E-m:e-p:32:32-i64:64-n32" 244DATA_LAYOUT[powerpc] = "E-m:e-p:32:32-Fn32-i64:64-n32"
220TARGET_ENDIAN[powerpc] = "big" 245TARGET_ENDIAN[powerpc] = "big"
221TARGET_POINTER_WIDTH[powerpc] = "32" 246TARGET_POINTER_WIDTH[powerpc] = "32"
222TARGET_C_INT_WIDTH[powerpc] = "32" 247TARGET_C_INT_WIDTH[powerpc] = "32"
223MAX_ATOMIC_WIDTH[powerpc] = "32" 248MAX_ATOMIC_WIDTH[powerpc] = "32"
224 249
225## powerpc64-unknown-linux-{gnu, musl} 250## powerpc64-unknown-linux-{gnu, musl}
226DATA_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"
227TARGET_ENDIAN[powerpc64] = "big" 252TARGET_ENDIAN[powerpc64] = "big"
228TARGET_POINTER_WIDTH[powerpc64] = "64" 253TARGET_POINTER_WIDTH[powerpc64] = "64"
229TARGET_C_INT_WIDTH[powerpc64] = "64" 254TARGET_C_INT_WIDTH[powerpc64] = "32"
230MAX_ATOMIC_WIDTH[powerpc64] = "64" 255MAX_ATOMIC_WIDTH[powerpc64] = "64"
231 256
232## powerpc64le-unknown-linux-{gnu, musl} 257## powerpc64le-unknown-linux-{gnu, musl}
233DATA_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"
234TARGET_ENDIAN[powerpc64le] = "little" 259TARGET_ENDIAN[powerpc64le] = "little"
235TARGET_POINTER_WIDTH[powerpc64le] = "64" 260TARGET_POINTER_WIDTH[powerpc64le] = "64"
236TARGET_C_INT_WIDTH[powerpc64le] = "64" 261TARGET_C_INT_WIDTH[powerpc64le] = "32"
237MAX_ATOMIC_WIDTH[powerpc64le] = "64" 262MAX_ATOMIC_WIDTH[powerpc64le] = "64"
238 263
239## riscv32gc-unknown-linux-{gnu, musl} 264## riscv32-unknown-linux-{gnu, musl}
240DATA_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"
241TARGET_ENDIAN[riscv32gc] = "little" 266TARGET_ENDIAN[riscv32] = "little"
242TARGET_POINTER_WIDTH[riscv32gc] = "32" 267TARGET_POINTER_WIDTH[riscv32] = "32"
243TARGET_C_INT_WIDTH[riscv32gc] = "32" 268TARGET_C_INT_WIDTH[riscv32] = "32"
244MAX_ATOMIC_WIDTH[riscv32gc] = "32" 269MAX_ATOMIC_WIDTH[riscv32] = "32"
245 270
246## riscv64gc-unknown-linux-{gnu, musl} 271## riscv64-unknown-linux-{gnu, musl}
247DATA_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"
248TARGET_ENDIAN[riscv64gc] = "little" 273TARGET_ENDIAN[riscv64] = "little"
249TARGET_POINTER_WIDTH[riscv64gc] = "64" 274TARGET_POINTER_WIDTH[riscv64] = "64"
250TARGET_C_INT_WIDTH[riscv64gc] = "64" 275TARGET_C_INT_WIDTH[riscv64] = "32"
251MAX_ATOMIC_WIDTH[riscv64gc] = "64" 276MAX_ATOMIC_WIDTH[riscv64] = "64"
252 277
253## loongarch64-unknown-linux-{gnu, musl} 278## loongarch64-unknown-linux-{gnu, musl}
254DATA_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"
255TARGET_ENDIAN[loongarch64] = "little" 280TARGET_ENDIAN[loongarch64] = "little"
256TARGET_POINTER_WIDTH[loongarch64] = "64" 281TARGET_POINTER_WIDTH[loongarch64] = "64"
257TARGET_C_INT_WIDTH[loongarch64] = "32" 282TARGET_C_INT_WIDTH[loongarch64] = "32"
@@ -271,19 +296,11 @@ def arch_to_rust_target_arch(arch):
271 return "arm" 296 return "arm"
272 elif arch == "powerpc64le": 297 elif arch == "powerpc64le":
273 return "powerpc64" 298 return "powerpc64"
274 elif arch == "riscv32gc":
275 return "riscv32"
276 elif arch == "riscv64gc":
277 return "riscv64"
278 else: 299 else:
279 return arch 300 return arch
280 301
281# Convert a rust target string to a llvm-compatible triplet 302# Convert a rust target string to a llvm-compatible triplet
282def rust_sys_to_llvm_target(sys): 303def rust_sys_to_llvm_target(sys):
283 if sys.startswith('riscv32gc-'):
284 return sys.replace('riscv32gc-', 'riscv32-', 1)
285 if sys.startswith('riscv64gc-'):
286 return sys.replace('riscv64gc-', 'riscv64-', 1)
287 return sys 304 return sys
288 305
289# generates our target CPU value 306# generates our target CPU value
@@ -380,9 +397,9 @@ def rust_gen_target(d, thing, wd, arch):
380 else: 397 else:
381 tspec['env'] = "gnu" 398 tspec['env'] = "gnu"
382 if "riscv64" in tspec['llvm-target']: 399 if "riscv64" in tspec['llvm-target']:
383 tspec['llvm-abiname'] = "lp64d" 400 tspec['llvm-abiname'] = d.getVar('TUNE_RISCV_ABI')
384 if "riscv32" in tspec['llvm-target']: 401 if "riscv32" in tspec['llvm-target']:
385 tspec['llvm-abiname'] = "ilp32d" 402 tspec['llvm-abiname'] = d.getVar('TUNE_RISCV_ABI')
386 if "loongarch64" in tspec['llvm-target']: 403 if "loongarch64" in tspec['llvm-target']:
387 tspec['llvm-abiname'] = "lp64d" 404 tspec['llvm-abiname'] = "lp64d"
388 tspec['vendor'] = "unknown" 405 tspec['vendor'] = "unknown"
@@ -391,6 +408,11 @@ def rust_gen_target(d, thing, wd, arch):
391 tspec['cpu'] = cpu 408 tspec['cpu'] = cpu
392 if features != "": 409 if features != "":
393 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"
394 tspec['dynamic-linking'] = True 416 tspec['dynamic-linking'] = True
395 tspec['executables'] = True 417 tspec['executables'] = True
396 tspec['linker-is-gnu'] = True 418 tspec['linker-is-gnu'] = True