diff mbox series

[v2,2/4] package/arm-gnu-a-toolchain: new package

Message ID 1581590685-31680-3-git-send-email-sunil@amarulasolutions.com
State Superseded
Headers show
Series Fix ATF v2.2 build for rk3399, add roc-rk3399-pc board | expand

Commit Message

Suniel Mahesh Feb. 13, 2020, 10:44 a.m. UTC
From: Suniel Mahesh <sunil@amarulasolutions.com>

arm trusted firmware requires a bare metal toolchain to build Rockchip rk3399
platform and rk3399 has a cortex-m0 core. Add pre-built cross-compilation
ARM-A bare metal toolchain for Arm Cortex-A family processors to avoid the
following build error.

make[3]: arm-none-eabi-gcc: Command not found

pre-built bate metal ARM GNU-A toolchain installs into the host file system folder
/opt/gcc-arm-none-eabi.

https://developer.arm.com/-/media/Files/downloads/gnu-a/9.2-2019.12/binrel/gcc-arm-9.2-2019.12-x86_64-arm-none-eabi.tar.xz

Signed-off-by: Suniel Mahesh <sunil@amarulasolutions.com>
---
Changes for v2:
- Added lines in description regarding why bare metal toolchain is required,
  as suggested by Jagan and pointed out by Sergey
---
 .../arm-gnu-a-toolchain/arm-gnu-a-toolchain.hash   |  3 +++
 package/arm-gnu-a-toolchain/arm-gnu-a-toolchain.mk | 27 ++++++++++++++++++++++
 2 files changed, 30 insertions(+)
 create mode 100644 package/arm-gnu-a-toolchain/arm-gnu-a-toolchain.hash
 create mode 100644 package/arm-gnu-a-toolchain/arm-gnu-a-toolchain.mk

Comments

Michael Walle Feb. 14, 2020, 12:32 p.m. UTC | #1
Am 2020-02-13 11:44, schrieb sunil@amarulasolutions.com:
> From: Suniel Mahesh <sunil@amarulasolutions.com>
> 
> arm trusted firmware requires a bare metal toolchain to build Rockchip 
> rk3399
> platform and rk3399 has a cortex-m0 core. Add pre-built 
> cross-compilation
> ARM-A bare metal toolchain for Arm Cortex-A family processors to avoid 
> the
> following build error.
> 
> make[3]: arm-none-eabi-gcc: Command not found
> 
> pre-built bate metal ARM GNU-A toolchain installs into the host file
> system folder
> /opt/gcc-arm-none-eabi.
> 
> https://developer.arm.com/-/media/Files/downloads/gnu-a/9.2-2019.12/binrel/gcc-arm-9.2-2019.12-x86_64-arm-none-eabi.tar.xz

Can this be some kind of virtual package? What if I don't like a 
prebuild
binary, if I don't have a x86_64 buildhost or want to have another gcc 
version.

-michael

> Signed-off-by: Suniel Mahesh <sunil@amarulasolutions.com>
> ---
> Changes for v2:
> - Added lines in description regarding why bare metal toolchain is 
> required,
>   as suggested by Jagan and pointed out by Sergey
> ---
>  .../arm-gnu-a-toolchain/arm-gnu-a-toolchain.hash   |  3 +++
>  package/arm-gnu-a-toolchain/arm-gnu-a-toolchain.mk | 27 
> ++++++++++++++++++++++
>  2 files changed, 30 insertions(+)
>  create mode 100644 
> package/arm-gnu-a-toolchain/arm-gnu-a-toolchain.hash
>  create mode 100644 package/arm-gnu-a-toolchain/arm-gnu-a-toolchain.mk
> 
> diff --git a/package/arm-gnu-a-toolchain/arm-gnu-a-toolchain.hash
> b/package/arm-gnu-a-toolchain/arm-gnu-a-toolchain.hash
> new file mode 100644
> index 0000000..aa0a23a
> --- /dev/null
> +++ b/package/arm-gnu-a-toolchain/arm-gnu-a-toolchain.hash
> @@ -0,0 +1,3 @@
> +# Locally calculated
> +#sha256
> bb17109f0ee697254a5d4ae6e5e01440e3ea8f0277f2e8169bf95d07c7d5fe69
> gcc-arm-none-eabi-7-2018-q2-update-linux.tar.bz2
> +sha256
> ac952d89ae0fc3543e81099e7d34917efc621f5def112eee843fd1ce755eca8c
> gcc-arm-9.2-2019.12-x86_64-arm-none-eabi.tar.xz
> diff --git a/package/arm-gnu-a-toolchain/arm-gnu-a-toolchain.mk
> b/package/arm-gnu-a-toolchain/arm-gnu-a-toolchain.mk
> new file mode 100644
> index 0000000..55dce4d
> --- /dev/null
> +++ b/package/arm-gnu-a-toolchain/arm-gnu-a-toolchain.mk
> @@ -0,0 +1,27 @@
> +################################################################################
> +#
> +# arm-gnu-a-toolchain
> +#
> +################################################################################
> +
> +ARM_GNU_A_TOOLCHAIN_SITE =
> https://developer.arm.com/-/media/Files/downloads/gnu-a/9.2-2019.12/binrel
> +ARM_GNU_A_TOOLCHAIN_VERSION = 9.2-2019.12
> +ARM_GNU_A_TOOLCHAIN_SOURCE =
> gcc-arm-$(ARM_GNU_A_TOOLCHAIN_VERSION)-x86_64-arm-none-eabi.tar.xz
> +ARM_GNU_A_TOOLCHAIN_LICENSE = GPL-3.0+
> +ARM_GNU_A_TOOLCHAIN_LICENSE_FILES =
> +
> +HOST_ARM_GNU_A_TOOLCHAIN_INSTALL_DIR = 
> $(HOST_DIR)/opt/gcc-arm-none-eabi
> +
> +define HOST_ARM_GNU_A_TOOLCHAIN_INSTALL_CMDS
> +    rm -rf $(HOST_ARM_GNU_A_TOOLCHAIN_INSTALL_DIR)
> +    mkdir -p $(HOST_ARM_GNU_A_TOOLCHAIN_INSTALL_DIR)
> +    cp -rf $(@D)/* $(HOST_ARM_GNU_A_TOOLCHAIN_INSTALL_DIR)
> +
> +    cd $(HOST_DIR)/bin && \
> +	for i in $(HOST_DIR)/opt/gcc-arm-none-eabi/bin/*; do \
> +	ln -sf $$(echo $$i | sed 's%^$(HOST_DIR)%..%') .; \
> +    done
> +
> +endef
> +
> +$(eval $(host-generic-package))
Thomas Petazzoni Feb. 16, 2020, 11:28 p.m. UTC | #2
Hello,

On Fri, 14 Feb 2020 13:32:46 +0100
Michael Walle <michael@walle.cc> wrote:

> > pre-built bate metal ARM GNU-A toolchain installs into the host file
> > system folder
> > /opt/gcc-arm-none-eabi.
> > 
> > https://developer.arm.com/-/media/Files/downloads/gnu-a/9.2-2019.12/binrel/gcc-arm-9.2-2019.12-x86_64-arm-none-eabi.tar.xz  
> 
> Can this be some kind of virtual package? What if I don't like a 
> prebuild
> binary, if I don't have a x86_64 buildhost or want to have another gcc 
> version.

We can only support a pre-built toolchain for this: our toolchain
infrastructure only supports building a single toolchain, which is the
toolchain targetting Linux. Here, it's only for the case where the
target architecture is ARM64, *but* some firmware needs to be built for
ARM32 that we need a secondary toolchain.

To solve this, in the context of Buildroot, there is not much choice
besides using a pre-built toolchain for this secondary toolchain.

If you need another toolchain for some other firmware, then just create
a different package for it, and use it when building your firmware.

Creating a virtual package would make things more complicated here: one
can only "depends on" a virtual package, so the user would have to know
that he needs to enable this toolchain package in order to be able to
build ATF.

I believe what is being proposed here is the most reasonable solution
we can do while keeping things simple.

Best regards,

Thomas
diff mbox series

Patch

diff --git a/package/arm-gnu-a-toolchain/arm-gnu-a-toolchain.hash b/package/arm-gnu-a-toolchain/arm-gnu-a-toolchain.hash
new file mode 100644
index 0000000..aa0a23a
--- /dev/null
+++ b/package/arm-gnu-a-toolchain/arm-gnu-a-toolchain.hash
@@ -0,0 +1,3 @@ 
+# Locally calculated
+#sha256 bb17109f0ee697254a5d4ae6e5e01440e3ea8f0277f2e8169bf95d07c7d5fe69 gcc-arm-none-eabi-7-2018-q2-update-linux.tar.bz2
+sha256 ac952d89ae0fc3543e81099e7d34917efc621f5def112eee843fd1ce755eca8c  gcc-arm-9.2-2019.12-x86_64-arm-none-eabi.tar.xz
diff --git a/package/arm-gnu-a-toolchain/arm-gnu-a-toolchain.mk b/package/arm-gnu-a-toolchain/arm-gnu-a-toolchain.mk
new file mode 100644
index 0000000..55dce4d
--- /dev/null
+++ b/package/arm-gnu-a-toolchain/arm-gnu-a-toolchain.mk
@@ -0,0 +1,27 @@ 
+################################################################################
+#
+# arm-gnu-a-toolchain
+#
+################################################################################
+
+ARM_GNU_A_TOOLCHAIN_SITE = https://developer.arm.com/-/media/Files/downloads/gnu-a/9.2-2019.12/binrel
+ARM_GNU_A_TOOLCHAIN_VERSION = 9.2-2019.12
+ARM_GNU_A_TOOLCHAIN_SOURCE = gcc-arm-$(ARM_GNU_A_TOOLCHAIN_VERSION)-x86_64-arm-none-eabi.tar.xz
+ARM_GNU_A_TOOLCHAIN_LICENSE = GPL-3.0+
+ARM_GNU_A_TOOLCHAIN_LICENSE_FILES =
+
+HOST_ARM_GNU_A_TOOLCHAIN_INSTALL_DIR = $(HOST_DIR)/opt/gcc-arm-none-eabi
+
+define HOST_ARM_GNU_A_TOOLCHAIN_INSTALL_CMDS
+    rm -rf $(HOST_ARM_GNU_A_TOOLCHAIN_INSTALL_DIR)
+    mkdir -p $(HOST_ARM_GNU_A_TOOLCHAIN_INSTALL_DIR)
+    cp -rf $(@D)/* $(HOST_ARM_GNU_A_TOOLCHAIN_INSTALL_DIR)
+
+    cd $(HOST_DIR)/bin && \
+	for i in $(HOST_DIR)/opt/gcc-arm-none-eabi/bin/*; do \
+	ln -sf $$(echo $$i | sed 's%^$(HOST_DIR)%..%') .; \
+    done
+
+endef
+
+$(eval $(host-generic-package))