diff mbox series

[v3] README: Update toolchain information

Message ID 20210712012016.29362-1-bmeng.cn@gmail.com
State Accepted
Headers show
Series [v3] README: Update toolchain information | expand

Commit Message

Bin Meng July 12, 2021, 1:20 a.m. UTC
Recent FW_PIC=y changes actually require toolchains with PIE support
and it is on by default. Existing doc uses a GNU bare-metal toolchain
as examples but it does not support PIE.

Replace references of bare-metal toolchain prefix with Linux toolchain
prefix everywhere in documentation.

Also indicate that "riscv64-unknown-freebsd-" as an alternative to
"riscv64-linux-" GNU toolchain.

Signed-off-by: Bin Meng <bmeng.cn@gmail.com>

---

Changes in v3:
- Use "riscv*-linux-gnu-" intead of "riscv*-linux"

Changes in v2:
- Include "riscv64-unknown-freebsd-" as an alternative

 README.md | 18 +++++++++++++-----
 1 file changed, 13 insertions(+), 5 deletions(-)

Comments

Anup Patel July 17, 2021, 1:09 p.m. UTC | #1
On Mon, Jul 12, 2021 at 6:50 AM Bin Meng <bmeng.cn@gmail.com> wrote:
>
> Recent FW_PIC=y changes actually require toolchains with PIE support
> and it is on by default. Existing doc uses a GNU bare-metal toolchain
> as examples but it does not support PIE.
>
> Replace references of bare-metal toolchain prefix with Linux toolchain
> prefix everywhere in documentation.
>
> Also indicate that "riscv64-unknown-freebsd-" as an alternative to
> "riscv64-linux-" GNU toolchain.
>
> Signed-off-by: Bin Meng <bmeng.cn@gmail.com>

Overall looks good but in future we will have to again update this
when GCC bare-metal toolchain starts supporting PIE. Also, we might
to clarify that GCC multilib toolchain also work perfectly fine for both
RV32 and RV64.

Reviewed-by: Anup Patel <anup.patel@wdc.com>

Applied this patch to the riscv/opensbi repo.

Thanks,
Anup

>
> ---
>
> Changes in v3:
> - Use "riscv*-linux-gnu-" intead of "riscv*-linux"
>
> Changes in v2:
> - Include "riscv64-unknown-freebsd-" as an alternative
>
>  README.md | 18 +++++++++++++-----
>  1 file changed, 13 insertions(+), 5 deletions(-)
>
> diff --git a/README.md b/README.md
> index b296f00..9fdf097 100644
> --- a/README.md
> +++ b/README.md
> @@ -104,6 +104,14 @@ LLVM/Clang toolchain due to LLVM's ability to support multiple backends in the
>  same binary, so is often an easy way to obtain a working cross-compilation
>  toolchain.
>
> +Basically, we prefer toolchains with Position Independent Executable (PIE)
> +support like *riscv64-linux-gnu-gcc*, *riscv64-unknown-freebsd-gcc*, or
> +*Clang/LLVM* as they generate PIE firmware images that can run at arbitrary
> +address with appropriate alignment. If a bare-metal GNU toolchain (e.g.
> +*riscv64-unknown-elf-gcc*) is used, static linked firmware images are
> +generated instead. *Clang/LLVM* can still generate PIE images if a bare-metal
> +triple is used (e.g. *-target riscv64-unknown-elf*).
> +
>  Please note that only a 64-bit version of the toolchain is available in
>  the Bootlin toolchain repository for now.
>
> @@ -116,7 +124,7 @@ architecture than RISC-V.
>
>  For cross-compiling, the environment variable *CROSS_COMPILE* must be defined
>  to specify the name prefix of the RISC-V compiler toolchain executables, e.g.
> -*riscv64-unknown-elf-* if the gcc executable used is *riscv64-unknown-elf-gcc*.
> +*riscv64-linux-gnu-* if the gcc executable used is *riscv64-linux-gnu-gcc*.
>
>  To build *libsbi.a* simply execute:
>  ```
> @@ -192,16 +200,16 @@ Building 32-bit / 64-bit OpenSBI Images
>  ---------------------------------------
>  By default, building OpenSBI generates 32-bit or 64-bit images based on the
>  supplied RISC-V cross-compile toolchain. For example if *CROSS_COMPILE* is set
> -to *riscv64-unknown-elf-*, 64-bit OpenSBI images will be generated. If building
> +to *riscv64-linux-gnu-*, 64-bit OpenSBI images will be generated. If building
>  32-bit OpenSBI images, *CROSS_COMPILE* should be set to a toolchain that is
> -pre-configured to generate 32-bit RISC-V codes, like *riscv32-unknown-elf-*.
> +pre-configured to generate 32-bit RISC-V codes, like *riscv32-linux-gnu-*.
>
>  However it's possible to explicitly specify the image bits we want to build with
>  a given RISC-V toolchain. This can be done by setting the environment variable
>  *PLATFORM_RISCV_XLEN* to the desired width, for example:
>
>  ```
> -export CROSS_COMPILE=riscv64-unknown-elf-
> +export CROSS_COMPILE=riscv64-linux-gnu-
>  export PLATFORM_RISCV_XLEN=32
>  ```
>
> @@ -235,7 +243,7 @@ valid triple.
>  These can also be mixed; for example using a GCC cross-compiler but LLVM
>  binutils would be:
>  ```
> -make CC=riscv64-unknown-elf-gcc LLVM=1
> +make CC=riscv64-linux-gnu-gcc LLVM=1
>  ```
>
>  These variables must be passed for all the make invocations described in this
> --
> 2.25.1
>
>
> --
> opensbi mailing list
> opensbi@lists.infradead.org
> http://lists.infradead.org/mailman/listinfo/opensbi
diff mbox series

Patch

diff --git a/README.md b/README.md
index b296f00..9fdf097 100644
--- a/README.md
+++ b/README.md
@@ -104,6 +104,14 @@  LLVM/Clang toolchain due to LLVM's ability to support multiple backends in the
 same binary, so is often an easy way to obtain a working cross-compilation
 toolchain.
 
+Basically, we prefer toolchains with Position Independent Executable (PIE)
+support like *riscv64-linux-gnu-gcc*, *riscv64-unknown-freebsd-gcc*, or
+*Clang/LLVM* as they generate PIE firmware images that can run at arbitrary
+address with appropriate alignment. If a bare-metal GNU toolchain (e.g.
+*riscv64-unknown-elf-gcc*) is used, static linked firmware images are
+generated instead. *Clang/LLVM* can still generate PIE images if a bare-metal
+triple is used (e.g. *-target riscv64-unknown-elf*).
+
 Please note that only a 64-bit version of the toolchain is available in
 the Bootlin toolchain repository for now.
 
@@ -116,7 +124,7 @@  architecture than RISC-V.
 
 For cross-compiling, the environment variable *CROSS_COMPILE* must be defined
 to specify the name prefix of the RISC-V compiler toolchain executables, e.g.
-*riscv64-unknown-elf-* if the gcc executable used is *riscv64-unknown-elf-gcc*.
+*riscv64-linux-gnu-* if the gcc executable used is *riscv64-linux-gnu-gcc*.
 
 To build *libsbi.a* simply execute:
 ```
@@ -192,16 +200,16 @@  Building 32-bit / 64-bit OpenSBI Images
 ---------------------------------------
 By default, building OpenSBI generates 32-bit or 64-bit images based on the
 supplied RISC-V cross-compile toolchain. For example if *CROSS_COMPILE* is set
-to *riscv64-unknown-elf-*, 64-bit OpenSBI images will be generated. If building
+to *riscv64-linux-gnu-*, 64-bit OpenSBI images will be generated. If building
 32-bit OpenSBI images, *CROSS_COMPILE* should be set to a toolchain that is
-pre-configured to generate 32-bit RISC-V codes, like *riscv32-unknown-elf-*.
+pre-configured to generate 32-bit RISC-V codes, like *riscv32-linux-gnu-*.
 
 However it's possible to explicitly specify the image bits we want to build with
 a given RISC-V toolchain. This can be done by setting the environment variable
 *PLATFORM_RISCV_XLEN* to the desired width, for example:
 
 ```
-export CROSS_COMPILE=riscv64-unknown-elf-
+export CROSS_COMPILE=riscv64-linux-gnu-
 export PLATFORM_RISCV_XLEN=32
 ```
 
@@ -235,7 +243,7 @@  valid triple.
 These can also be mixed; for example using a GCC cross-compiler but LLVM
 binutils would be:
 ```
-make CC=riscv64-unknown-elf-gcc LLVM=1
+make CC=riscv64-linux-gnu-gcc LLVM=1
 ```
 
 These variables must be passed for all the make invocations described in this