diff options
Diffstat (limited to 'meta/classes-recipe/rust-target-config.bbclass')
-rw-r--r-- | meta/classes-recipe/rust-target-config.bbclass | 100 |
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 |
83 | llvm_features_from_tune[vardepvalue] = "${@llvm_features_from_tune(d)}" | 108 | llvm_features_from_tune[vardepvalue] = "${@llvm_features_from_tune(d)}" |
84 | 109 | ||
@@ -130,7 +155,7 @@ def llvm_features(d): | |||
130 | llvm_features[vardepvalue] = "${@llvm_features(d)}" | 155 | llvm_features[vardepvalue] = "${@llvm_features(d)}" |
131 | 156 | ||
132 | ## arm-unknown-linux-gnueabihf | 157 | ## arm-unknown-linux-gnueabihf |
133 | DATA_LAYOUT[arm-eabi] = "e-m:e-p:32:32-i64:64-v128:64:128-a:0:32-n32-S64" | 158 | DATA_LAYOUT[arm-eabi] = "e-m:e-p:32:32-Fi8-i64:64-v128:64:128-a:0:32-n32-S64" |
134 | TARGET_ENDIAN[arm-eabi] = "little" | 159 | TARGET_ENDIAN[arm-eabi] = "little" |
135 | TARGET_POINTER_WIDTH[arm-eabi] = "32" | 160 | TARGET_POINTER_WIDTH[arm-eabi] = "32" |
136 | TARGET_C_INT_WIDTH[arm-eabi] = "32" | 161 | TARGET_C_INT_WIDTH[arm-eabi] = "32" |
@@ -138,7 +163,7 @@ MAX_ATOMIC_WIDTH[arm-eabi] = "64" | |||
138 | FEATURES[arm-eabi] = "+v6,+vfp2" | 163 | FEATURES[arm-eabi] = "+v6,+vfp2" |
139 | 164 | ||
140 | ## armv7-unknown-linux-gnueabihf | 165 | ## armv7-unknown-linux-gnueabihf |
141 | DATA_LAYOUT[armv7-eabi] = "e-m:e-p:32:32-i64:64-v128:64:128-a:0:32-n32-S64" | 166 | DATA_LAYOUT[armv7-eabi] = "e-m:e-p:32:32-Fi8-i64:64-v128:64:128-a:0:32-n32-S64" |
142 | TARGET_ENDIAN[armv7-eabi] = "little" | 167 | TARGET_ENDIAN[armv7-eabi] = "little" |
143 | TARGET_POINTER_WIDTH[armv7-eabi] = "32" | 168 | TARGET_POINTER_WIDTH[armv7-eabi] = "32" |
144 | TARGET_C_INT_WIDTH[armv7-eabi] = "32" | 169 | TARGET_C_INT_WIDTH[armv7-eabi] = "32" |
@@ -146,35 +171,35 @@ MAX_ATOMIC_WIDTH[armv7-eabi] = "64" | |||
146 | FEATURES[armv7-eabi] = "+v7,+vfp2,+thumb2" | 171 | FEATURES[armv7-eabi] = "+v7,+vfp2,+thumb2" |
147 | 172 | ||
148 | ## aarch64-unknown-linux-{gnu, musl} | 173 | ## aarch64-unknown-linux-{gnu, musl} |
149 | DATA_LAYOUT[aarch64] = "e-m:e-i8:8:32-i16:16:32-i64:64-i128:128-n32:64-S128" | 174 | DATA_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" |
150 | TARGET_ENDIAN[aarch64] = "little" | 175 | TARGET_ENDIAN[aarch64] = "little" |
151 | TARGET_POINTER_WIDTH[aarch64] = "64" | 176 | TARGET_POINTER_WIDTH[aarch64] = "64" |
152 | TARGET_C_INT_WIDTH[aarch64] = "32" | 177 | TARGET_C_INT_WIDTH[aarch64] = "32" |
153 | MAX_ATOMIC_WIDTH[aarch64] = "128" | 178 | MAX_ATOMIC_WIDTH[aarch64] = "128" |
154 | 179 | ||
155 | ## x86_64-unknown-linux-{gnu, musl} | 180 | ## x86_64-unknown-linux-{gnu, musl} |
156 | DATA_LAYOUT[x86_64] = "e-m:e-i64:64-f80:128-n8:16:32:64-S128" | 181 | DATA_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" |
157 | TARGET_ENDIAN[x86_64] = "little" | 182 | TARGET_ENDIAN[x86_64] = "little" |
158 | TARGET_POINTER_WIDTH[x86_64] = "64" | 183 | TARGET_POINTER_WIDTH[x86_64] = "64" |
159 | TARGET_C_INT_WIDTH[x86_64] = "32" | 184 | TARGET_C_INT_WIDTH[x86_64] = "32" |
160 | MAX_ATOMIC_WIDTH[x86_64] = "64" | 185 | MAX_ATOMIC_WIDTH[x86_64] = "64" |
161 | 186 | ||
162 | ## x86_64-unknown-linux-gnux32 | 187 | ## x86_64-unknown-linux-gnux32 |
163 | DATA_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" | 188 | DATA_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" |
164 | TARGET_ENDIAN[x86_64-x32] = "little" | 189 | TARGET_ENDIAN[x86_64-x32] = "little" |
165 | TARGET_POINTER_WIDTH[x86_64-x32] = "32" | 190 | TARGET_POINTER_WIDTH[x86_64-x32] = "32" |
166 | TARGET_C_INT_WIDTH[x86_64-x32] = "32" | 191 | TARGET_C_INT_WIDTH[x86_64-x32] = "32" |
167 | MAX_ATOMIC_WIDTH[x86_64-x32] = "64" | 192 | MAX_ATOMIC_WIDTH[x86_64-x32] = "64" |
168 | 193 | ||
169 | ## i686-unknown-linux-{gnu, musl} | 194 | ## i686-unknown-linux-{gnu, musl} |
170 | DATA_LAYOUT[i686] = "e-m:e-p:32:32-f64:32:64-f80:32-n8:16:32-S128" | 195 | DATA_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" |
171 | TARGET_ENDIAN[i686] = "little" | 196 | TARGET_ENDIAN[i686] = "little" |
172 | TARGET_POINTER_WIDTH[i686] = "32" | 197 | TARGET_POINTER_WIDTH[i686] = "32" |
173 | TARGET_C_INT_WIDTH[i686] = "32" | 198 | TARGET_C_INT_WIDTH[i686] = "32" |
174 | MAX_ATOMIC_WIDTH[i686] = "64" | 199 | MAX_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 |
177 | DATA_LAYOUT[i586] = "e-m:e-p:32:32-f64:32:64-f80:32-n8:16:32-S128" | 202 | DATA_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" |
178 | TARGET_ENDIAN[i586] = "little" | 203 | TARGET_ENDIAN[i586] = "little" |
179 | TARGET_POINTER_WIDTH[i586] = "32" | 204 | TARGET_POINTER_WIDTH[i586] = "32" |
180 | TARGET_C_INT_WIDTH[i586] = "32" | 205 | TARGET_C_INT_WIDTH[i586] = "32" |
@@ -198,7 +223,7 @@ MAX_ATOMIC_WIDTH[mipsel] = "32" | |||
198 | DATA_LAYOUT[mips64] = "E-m:e-i8:8:32-i16:16:32-i64:64-n32:64-S128" | 223 | DATA_LAYOUT[mips64] = "E-m:e-i8:8:32-i16:16:32-i64:64-n32:64-S128" |
199 | TARGET_ENDIAN[mips64] = "big" | 224 | TARGET_ENDIAN[mips64] = "big" |
200 | TARGET_POINTER_WIDTH[mips64] = "64" | 225 | TARGET_POINTER_WIDTH[mips64] = "64" |
201 | TARGET_C_INT_WIDTH[mips64] = "64" | 226 | TARGET_C_INT_WIDTH[mips64] = "32" |
202 | MAX_ATOMIC_WIDTH[mips64] = "64" | 227 | MAX_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" | |||
212 | DATA_LAYOUT[mips64el] = "e-m:e-i8:8:32-i16:16:32-i64:64-n32:64-S128" | 237 | DATA_LAYOUT[mips64el] = "e-m:e-i8:8:32-i16:16:32-i64:64-n32:64-S128" |
213 | TARGET_ENDIAN[mips64el] = "little" | 238 | TARGET_ENDIAN[mips64el] = "little" |
214 | TARGET_POINTER_WIDTH[mips64el] = "64" | 239 | TARGET_POINTER_WIDTH[mips64el] = "64" |
215 | TARGET_C_INT_WIDTH[mips64el] = "64" | 240 | TARGET_C_INT_WIDTH[mips64el] = "32" |
216 | MAX_ATOMIC_WIDTH[mips64el] = "64" | 241 | MAX_ATOMIC_WIDTH[mips64el] = "64" |
217 | 242 | ||
218 | ## powerpc-unknown-linux-{gnu, musl} | 243 | ## powerpc-unknown-linux-{gnu, musl} |
219 | DATA_LAYOUT[powerpc] = "E-m:e-p:32:32-i64:64-n32" | 244 | DATA_LAYOUT[powerpc] = "E-m:e-p:32:32-Fn32-i64:64-n32" |
220 | TARGET_ENDIAN[powerpc] = "big" | 245 | TARGET_ENDIAN[powerpc] = "big" |
221 | TARGET_POINTER_WIDTH[powerpc] = "32" | 246 | TARGET_POINTER_WIDTH[powerpc] = "32" |
222 | TARGET_C_INT_WIDTH[powerpc] = "32" | 247 | TARGET_C_INT_WIDTH[powerpc] = "32" |
223 | MAX_ATOMIC_WIDTH[powerpc] = "32" | 248 | MAX_ATOMIC_WIDTH[powerpc] = "32" |
224 | 249 | ||
225 | ## powerpc64-unknown-linux-{gnu, musl} | 250 | ## powerpc64-unknown-linux-{gnu, musl} |
226 | DATA_LAYOUT[powerpc64] = "E-m:e-i64:64-n32:64-S128-v256:256:256-v512:512:512" | 251 | DATA_LAYOUT[powerpc64] = "E-m:e-Fi64-i64:64-n32:64-S128-v256:256:256-v512:512:512" |
227 | TARGET_ENDIAN[powerpc64] = "big" | 252 | TARGET_ENDIAN[powerpc64] = "big" |
228 | TARGET_POINTER_WIDTH[powerpc64] = "64" | 253 | TARGET_POINTER_WIDTH[powerpc64] = "64" |
229 | TARGET_C_INT_WIDTH[powerpc64] = "64" | 254 | TARGET_C_INT_WIDTH[powerpc64] = "32" |
230 | MAX_ATOMIC_WIDTH[powerpc64] = "64" | 255 | MAX_ATOMIC_WIDTH[powerpc64] = "64" |
231 | 256 | ||
232 | ## powerpc64le-unknown-linux-{gnu, musl} | 257 | ## powerpc64le-unknown-linux-{gnu, musl} |
233 | DATA_LAYOUT[powerpc64le] = "e-m:e-i64:64-n32:64-v256:256:256-v512:512:512" | 258 | DATA_LAYOUT[powerpc64le] = "e-m:e-Fn32-i64:64-n32:64-S128-v256:256:256-v512:512:512" |
234 | TARGET_ENDIAN[powerpc64le] = "little" | 259 | TARGET_ENDIAN[powerpc64le] = "little" |
235 | TARGET_POINTER_WIDTH[powerpc64le] = "64" | 260 | TARGET_POINTER_WIDTH[powerpc64le] = "64" |
236 | TARGET_C_INT_WIDTH[powerpc64le] = "64" | 261 | TARGET_C_INT_WIDTH[powerpc64le] = "32" |
237 | MAX_ATOMIC_WIDTH[powerpc64le] = "64" | 262 | MAX_ATOMIC_WIDTH[powerpc64le] = "64" |
238 | 263 | ||
239 | ## riscv32gc-unknown-linux-{gnu, musl} | 264 | ## riscv32-unknown-linux-{gnu, musl} |
240 | DATA_LAYOUT[riscv32gc] = "e-m:e-p:32:32-i64:64-n32-S128" | 265 | DATA_LAYOUT[riscv32] = "e-m:e-p:32:32-i64:64-n32-S128" |
241 | TARGET_ENDIAN[riscv32gc] = "little" | 266 | TARGET_ENDIAN[riscv32] = "little" |
242 | TARGET_POINTER_WIDTH[riscv32gc] = "32" | 267 | TARGET_POINTER_WIDTH[riscv32] = "32" |
243 | TARGET_C_INT_WIDTH[riscv32gc] = "32" | 268 | TARGET_C_INT_WIDTH[riscv32] = "32" |
244 | MAX_ATOMIC_WIDTH[riscv32gc] = "32" | 269 | MAX_ATOMIC_WIDTH[riscv32] = "32" |
245 | 270 | ||
246 | ## riscv64gc-unknown-linux-{gnu, musl} | 271 | ## riscv64-unknown-linux-{gnu, musl} |
247 | DATA_LAYOUT[riscv64gc] = "e-m:e-p:64:64-i64:64-i128:128-n64-S128" | 272 | DATA_LAYOUT[riscv64] = "e-m:e-p:64:64-i64:64-i128:128-n32:64-S128" |
248 | TARGET_ENDIAN[riscv64gc] = "little" | 273 | TARGET_ENDIAN[riscv64] = "little" |
249 | TARGET_POINTER_WIDTH[riscv64gc] = "64" | 274 | TARGET_POINTER_WIDTH[riscv64] = "64" |
250 | TARGET_C_INT_WIDTH[riscv64gc] = "64" | 275 | TARGET_C_INT_WIDTH[riscv64] = "32" |
251 | MAX_ATOMIC_WIDTH[riscv64gc] = "64" | 276 | MAX_ATOMIC_WIDTH[riscv64] = "64" |
252 | 277 | ||
253 | ## loongarch64-unknown-linux-{gnu, musl} | 278 | ## loongarch64-unknown-linux-{gnu, musl} |
254 | DATA_LAYOUT[loongarch64] = "e-m:e-i8:8:32-i16:16:32-i64:64-n32:64-S128" | 279 | DATA_LAYOUT[loongarch64] = "e-m:e-p:64:64-i64:64-i128:128-n32:64-S128" |
255 | TARGET_ENDIAN[loongarch64] = "little" | 280 | TARGET_ENDIAN[loongarch64] = "little" |
256 | TARGET_POINTER_WIDTH[loongarch64] = "64" | 281 | TARGET_POINTER_WIDTH[loongarch64] = "64" |
257 | TARGET_C_INT_WIDTH[loongarch64] = "32" | 282 | TARGET_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 |
282 | def rust_sys_to_llvm_target(sys): | 303 | def 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 |