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