about summary refs log tree commit diff
path: root/src/doc/rustc
AgeCommit message (Collapse)AuthorLines
2023-07-17Rollup merge of #113535 - jonathanpallant:sparc-bare-metal, r=jackh726Matthias Krüger-0/+166
Add a sparc-unknown-none-elf target. # `sparc-unknown-none-elf` **Tier: 3** Rust for bare-metal 32-bit SPARC V7 and V8 systems, e.g. the Gaisler LEON3. ## Target maintainers - Jonathan Pallant, `jonathan.pallant@ferrous-systems.com`, https://ferrous-systems.com ## Requirements > Does the target support host tools, or only cross-compilation? Only cross-compilation. > Does the target support std, or alloc (either with a default allocator, or if the user supplies an allocator)? Only tested with `libcore` but I see no reason why you couldn't also support `liballoc`. > Document the expectations of binaries built for the target. Do they assume specific minimum features beyond the baseline of the CPU/environment/etc? What version of the OS or environment do they expect? Tested by linking with a standard SPARC bare-metal toolchain - specifically I used the [BCC2] toolchain from Gaisler (both GCC and clang variants, both pre-compiled for x64 Linux and compiling my own SPARC GCC from source to run on `aarch64-apple-darwin`). The target is set to use the lowest-common-denominator `SPARC V7` architecture (yes, they started at V7 - see [Wikipedia](https://en.wikipedia.org/wiki/SPARC#History)). [BCC2]: https://www.gaisler.com/index.php/downloads/compilers > Are there notable `#[target_feature(...)]` or `-C target-feature=` values that programs may wish to use? `-Ctarget-cpu=v8` adds the instructions added in V8. `-Ctarget-cpu=leon3` adds the V8 instructions and sets up scheduling to suit the Gaisler LEON3. > What calling convention does `extern "C"` use on the target? I believe this is defined by the SPARC architecture reference manuals and V7, V8 and V9 are all compatible. > What format do binaries use by default? ELF, PE, something else? ELF ## Building the target > If Rust doesn't build the target by default, how can users build it? Can users just add it to the `target` list in `config.toml`? Yes. I did: ```toml target = ["aarch64-apple-darwin", "sparc-unknown-none-elf"] ``` ## Building Rust programs > Rust does not yet ship pre-compiled artifacts for this target. To compile for this target, you will either need to build Rust with the target enabled (see "Building the target" above), or build your own copy of `core` by using `build-std` or similar. Correct. ## Testing > Does the target support running binaries, or do binaries have varying expectations that prevent having a standard way to run them? No - it's a bare metal platform. > If users can run binaries, can they do so in some common emulator, or do they need native hardware? But if you use [BCC2] as the linker, you get default memory map suitable for the LEON3, and a default BSP for the LEON3, and so you can run the binaries in the `tsim-leon3` simulator from Gaisler. ```console $ cat .cargo/config.toml | grep runner runner = "tsim-leon3 -c sim-commands.txt" $ cat sim-commands.txt run quit $ cargo +sparcrust run --targe=sparc-unknown-none-elf Compiling sparc-demo-rust v0.1.0 (/work/sparc-demo-rust) Finished dev [unoptimized + debuginfo] target(s) in 3.44s Running `tsim-leon3 -c sim-commands.txt target/sparc-unknown-none-elf/debug/sparc-demo-rust` TSIM3 LEON3 SPARC simulator, version 3.1.9 (evaluation version) Copyright (C) 2023, Frontgrade Gaisler - all rights reserved. This software may only be used with a valid license. For latest updates, go to https://www.gaisler.com/ Comments or bug-reports to support@gaisler.com This TSIM evaluation version will expire 2023-11-28 Number of CPUs: 2 system frequency: 50.000 MHz icache: 1 * 4 KiB, 16 bytes/line (4 KiB total) dcache: 1 * 4 KiB, 16 bytes/line (4 KiB total) Allocated 8192 KiB SRAM memory, in 1 bank at 0x40000000 Allocated 32 MiB SDRAM memory, in 1 bank at 0x60000000 Allocated 8192 KiB ROM memory at 0x00000000 section: .text, addr: 0x40000000, size: 104400 bytes section: .rodata, addr: 0x400197d0, size: 15616 bytes section: .data, addr: 0x4001d4d0, size: 1176 bytes read 1006 symbols Initializing and starting from 0x40000000 Hello, this is Rust! PANIC: PanicInfo { payload: Any { .. }, message: Some(I am a panic), location: Location { file: "src/main.rs", line: 33, col: 5 }, can_unwind: true } Program exited normally on CPU 0. ``` > Does the target support running the Rust testsuite? I don't think so, the testsuite requires `libstd` IIRC. ## Cross-compilation toolchains and C code > Does the target support C code? Yes. > If so, what toolchain target should users use to build compatible C code? (This may match the target triple, or it may be a toolchain for a different target triple, potentially with specific options or caveats.) I suggest [BCC2] from Gaisler. It comes in both GCC and Clang variants.
2023-07-17Rollup merge of #113614 - he32:netbsd-riscv64-more, r=JohnTitorMatthias Krüger-1/+1
platform-support.md: It's now verified that NetBSD/riscv64 can self-h… …ost.
2023-07-17Rollup merge of #113042 - Cyanoxygen:add-mipsr6-target-docs, r=JohnTitorMatthias Krüger-4/+186
Add Platform Support documentation for MIPS Release 6 targets This is a follow-up to our to-announce MCP, rust-lang/compiler-team#638, where we proposed to assign several maintainers for MIPS R6 targets and was told to explain that this set of targets are experimental in nature. This documentation describes Rust support for `mipsisa*r6*-unknown-linux-gnu*` targets (mainly `mipsisa64r6el-unknown-linux-gnuabi64`), including toolchain setup, building, and testing procedures.
2023-07-12platform-support.md: It's now verified that NetBSD/riscv64 can self-host.Havard Eidnes-1/+1
2023-07-11Add platform support information.Jonathan Pallant (Ferrous Systems)-1/+166
2023-07-11Add a sparc-unknown-none-elf target.Jonathan Pallant (Ferrous Systems)-0/+1
Tested with the Gaisler bcc2 toolchain (both gcc and clang) and the Leon3 simulator.
2023-07-05Add support for NetBSD/riscv64 aka. riscv64gc-unknown-netbsd.Havard Eidnes-0/+2
2023-07-03Update platform-support.mdJonathan Pallant (Ferrous Systems)-32/+32
Updates the descriptions of the various ARM targets in platform-support.md so they are a little more consistent. For example, all instances of ARMv7 changed to ARMv7-A (as opposed to ARMv7-R and ARMv7-M).
2023-06-26Add x86_64-unknown-linux-ohos targetAmanieu d'Antras-0/+34
This complements the existing `aarch64-unknown-linux-ohos` and `armv7-unknown-linux-ohos` targets.
2023-06-26Rollup merge of #112840 - loongarch-rs:update-docs, r=GuillaumeGomezMatthias Krüger-1/+1
doc: loongarch: Update maintainers My colleague, `@zhaixiaojuan,` has been completely occupied with other matters and is no longer in charge of Rust. Consequently, I intend to update the maintainers in the platform documentation to avoid causing any disruptions for her and to ensure that relevant notifications regarding LoongArch are promptly directed to the appropriate developers. Thanks your for contributions!
2023-06-26Rollup merge of #112559 - SergioGasquez:master, r=JohnTitorMatthias Krüger-4/+6
Add esp-idf missing targets Adds some esp-idf missing targets to the table
2023-06-26Rollup merge of #111326 - he32:netbsd-aarch64-be, r=oli-obkMatthias Krüger-6/+115
Add support for NetBSD/aarch64-be (big-endian arm64).
2023-06-26Add target documentation for MIPS Release 6 targetsCyan-4/+186
- This documentation describes the Rust support for Linux MIPS Release 6 targets. - Also update the status of mipsisa64r6el-unknown-linux-gnuabi64i in SUMMARY, as we have successfully built the native toolchain. - Also fill out the description of MIPS R6 targets in SUMMARY.
2023-06-25platform-support.md: remove references to not-yet upstreamed targets.Havard Eidnes-2/+0
2023-06-25SUMMARY.md: add entry for NetBSD.Havard Eidnes-0/+1
2023-06-22Remove extra trailing newlineWesley Wiser-1/+0
2023-06-21Note that posix_spawnp probably still does not work the way people may wantThom Chiovoloni-3/+5
2023-06-21Note the incomplete Command support in the apple-tvos.md documentThom Chiovoloni-3/+16
2023-06-21Apply suggestions from code reviewThom Chiovoloni-7/+7
Co-authored-by: Jubilee <46493976+workingjubilee@users.noreply.github.com>
2023-06-21Fix missing link in SUMMARY.mdThom Chiovoloni-0/+1
2023-06-21Add a tvOS entry to the platform-support documentationThom Chiovoloni-2/+72
2023-06-20doc: loongarch: Update maintainersWANG Rui-1/+1
2023-06-16Fix edit failTyler Mandry-1/+0
2023-06-16Fix --rust-build flag in docsTyler Mandry-1/+2
2023-06-16Replace fvdl with ffx, allow test without installDavid Koloski-11/+8
Along with replacing fvdl uses with the equivalent ffx commands, this also switches from using the install path for libstd-*.so and libtest-*.so to using the build directory (now passed on the command line). The user no longer needs to run x.py install before running tests now, and the correct libstd and libtest are detected on run instead of startup so the test runner can handle recompilations after starting the testing environment.
2023-06-14Introduce a minimum CGU size in non-incremental builds.Nicholas Nethercote-2/+2
Because tiny CGUs make compilation less efficient *and* result in worse generated code. We don't do this when the number of CGUs is explicitly given, because there are times when the requested number is very important, as described in some comments within the commit. So the commit also introduces a `CodegenUnits` type that distinguishes between default values and user-specified values. This change has a roughly neutral effect on walltimes across the rustc-perf benchmarks; there are some speedups and some slowdowns. But it has significant wins for most other metrics on numerous benchmarks, including instruction counts, cycles, binary size, and max-rss. It also reduces parallelism, which is good for reducing jobserver competition when multiple rustc processes are running at the same time. It's smaller benchmarks that benefit the most; larger benchmarks already have CGUs that are all larger than the minimum size. Here are some example before/after CGU sizes for opt builds. - html5ever - CGUs: 16, mean size: 1196.1, sizes: [3908, 2992, 1706, 1652, 1572, 1136, 1045, 948, 946, 938, 579, 471, 443, 327, 286, 189] - CGUs: 4, mean size: 4396.0, sizes: [6706, 3908, 3490, 3480] - libc - CGUs: 12, mean size: 35.3, sizes: [163, 93, 58, 53, 37, 8, 2 (x6)] - CGUs: 1, mean size: 424.0, sizes: [424] - tt-muncher - CGUs: 5, mean size: 1819.4, sizes: [8508, 350, 198, 34, 7] - CGUs: 1, mean size: 9075.0, sizes: [9075] Note that CGUs of size 100,000+ aren't unusual in larger programs.
2023-06-12docs: 📝 Add missing targetsSergio Gasquez-4/+6
2023-06-09Auto merge of #111626 - pjhades:output, r=b-naberbors-0/+6
Write to stdout if `-` is given as output file With this PR, if `-o -` or `--emit KIND=-` is provided, output will be written to stdout instead. Binary output (those of type `obj`, `llvm-bc`, `link` and `metadata`) being written this way will result in an error unless stdout is not a tty. Multiple output types going to stdout will trigger an error too, as they will all be mixded together. This implements https://github.com/rust-lang/compiler-team/issues/431 The idea behind the changes is to introduce an `OutFileName` enum that represents the output - be it a real path or stdout - and to use this enum along the code paths that handle different output types.
2023-06-07Auto merge of #111698 - Amanieu:force-static-lib, r=petrochenkovbors-2/+2
Force all native libraries to be statically linked when linking a static binary Previously, `#[link]` without an explicit `kind = "static"` would confuse the linker and end up producing a dynamically linked library because of the `-Bdynamic` flag. However this binary would not work correctly anyways since it was linked with startup code for a static binary. This PR solves this by forcing all native libraries to be statically linked when the output is a static binary that cannot link to dynamic libraries anyways. Fixes #108878 Fixes #102993
2023-06-07Force all native libraries to be statically linked when linking a static binaryAmanieu d'Antras-2/+2
2023-06-07Auto merge of #111819 - nikarh:vita-improved, r=Amanieubors-60/+15
Improved std support for ps vita target Fixed a couple of things in std support for ps vita via Vita SDK newlib oss implementation: - Added missing hardware features to target spec - Compile in thumb by default (newlib is also compiled in thumb) - Fixed fs calls. Vita newlib has a not-very-posix dirent. Also vita does not expose inodes, it's stubbed as 0 in stat, and I'm stubbing it here for dirent (because vita newlibs's dirent doesn't even have that field) - Enabled signal handlers for panic unwinding - Dropped static link requirement from the platform support md. Also, rearranged sections to better stick with the template.
2023-06-06Write to stdout if `-` is given as output fileJing Peng-0/+6
If `-o -` or `--emit KIND=-` is provided, output will be written to stdout instead. Binary output (`obj`, `llvm-bc`, `link` and `metadata`) being written this way will result in an error unless stdout is not a tty. Multiple output types going to stdout will trigger an error too, as they will all be mixded together.
2023-06-06Auto merge of #112361 - matthiaskrgr:rollup-39zxrw1, r=matthiaskrgrbors-0/+82
Rollup of 8 pull requests Successful merges: - #111250 (Add Terminator conversion from MIR to SMIR, part #2) - #112310 (Add new Tier-3 targets: `loongarch64-unknown-none*`) - #112334 (Add myself to highfive rotation) - #112340 (remove `TyCtxt::has_error_field` helper method) - #112343 (Prevent emitting `missing_docs` for `pub extern crate`) - #112350 (Avoid duplicate type sanitization of local decls in borrowck) - #112356 (Fix comment for `get_region_var_origins`) - #112358 (Remove default visitor impl in region constraint generation) r? `@ghost` `@rustbot` modify labels: rollup
2023-06-06Add new Tier-3 targets: `loongarch64-unknown-none*`WANG Rui-0/+82
MCP: https://github.com/rust-lang/compiler-team/issues/628
2023-06-05Add description of forwards-compatible behavior.Eric Huss-0/+8
2023-06-05Add missing word "the".Eric Huss-1/+1
2023-06-05Add an example of placeholders.Eric Huss-2/+34
2023-06-05Rewrite recommended demangling for lifetimes using "De Bruijn level".Eric Huss-5/+5
2023-06-05Clarify grammar for decimal-number cannot have leading zeroes.Eric Huss-4/+11
2023-06-05Clarify missing tick.Eric Huss-1/+1
2023-06-05Update from review from michaelwoerister.Eric Huss-9/+12
2023-06-05Remove 64-bit limit for base-62-numbers.Eric Huss-1/+1
Demanglers should be prepared for any arbitrary length number.
2023-06-05Rearrange symbol-mangling chapter out of codegen-options.Eric Huss-81/+81
2023-06-05Add documentation on v0 symbol mangling.Eric Huss-2/+1233
2023-06-05Std support improvement for ps vita targetNikolay Arhipov-60/+15
2023-06-04Added custom risc32-imac for esp-espidf targetVictor Gil-4/+6
2023-06-02Remove "one thread in tests" limitation in nto-qnx.mdFlorian Bartels-7/+1
2023-05-26platform-support.md: document the various NetBSD targets.Havard Eidnes-6/+117
This is slightly patterned after what OpenBSD has done. This is a step along the path to reduce the number and amount of diffs that pkgsrc carries around for rust, and this documents also some parts which have not yet been upstreamed (mipsel-*).
2023-05-26Add SafeStack support to rustcWesley Wiser-7/+20
Adds support for LLVM [SafeStack] which provides backward edge control flow protection by separating the stack into two parts: data which is only accessed in provable safe ways is allocated on the normal stack (the "safe stack") and all other data is placed in a separate allocation (the "unsafe stack"). SafeStack support is enabled by passing `-Zsanitizer=safestack`. [SafeStack]: https://clang.llvm.org/docs/SafeStack.html
2023-05-26Convert html table to markdownWesley Wiser-82/+12