diff mbox series

[v2] buildroot: Add basic support for LoongArch architecture (toolchain only)

Message ID 7ac3c7b8-7110-eaef-a070-d321611e8238@loongson.cn
State Superseded
Headers show
Series [v2] buildroot: Add basic support for LoongArch architecture (toolchain only) | expand

Commit Message

Zhiwei Duan Dec. 5, 2022, 9:37 a.m. UTC
From: Zhiwei Duan <duanzhiwei@loongson.cn>


With this patch, the buildroot can compile the rootfs of the loongarch 
architecture.

Both external toolchain and buildroot toolchain can compile rootfs.

Signed-off-by: Zhiwei Duan <duanzhiwei@loongson.cn>
---
  arch/Config.in               | 16 +++++++++++
  arch/Config.in.loongarch     | 52 ++++++++++++++++++++++++++++++++++++
  package/glibc/Config.in      |  1 +
  support/gnuconfig/config.sub | 11 ++++++--
  toolchain/Config.in          |  2 +-
  5 files changed, 79 insertions(+), 3 deletions(-)
  create mode 100644 arch/Config.in.loongarch

  config BR2_TOOLCHAIN_USES_MUSL

Comments

Thomas Petazzoni Dec. 5, 2022, 12:39 p.m. UTC | #1
Hello,

On Mon, 5 Dec 2022 17:37:46 +0800
duan <duanzhiwei@loongson.cn> wrote:

> From: Zhiwei Duan <duanzhiwei@loongson.cn>
> 
> 
> With this patch, the buildroot can compile the rootfs of the loongarch 
> architecture.
> 
> Both external toolchain and buildroot toolchain can compile rootfs.
> 
> Signed-off-by: Zhiwei Duan <duanzhiwei@loongson.cn>

Thanks for this patch, glad to see your work on this new architecture.

Could you resend your patch with "git send-email"? Indeed your patch
has been badly damaged by your e-mail client.

Also, could you comment on which gcc, binutils, gdb and uclibc versions
have support for LoongArch?

Thanks a lot!

Thomas
diff mbox series

Patch

diff --git a/arch/Config.in b/arch/Config.in
index 1c0c400a98..88f805bb1e 100644
--- a/arch/Config.in
+++ b/arch/Config.in
@@ -251,6 +251,17 @@  config BR2_xtensa
        http://en.wikipedia.org/wiki/Xtensa
        http://www.tensilica.com/

+config BR2_loongarch64
+    bool "LOONGARCH64 (little endian)"
+    select BR2_ARCH_IS_64
+    select BR2_USE_MMU
+    help
+      LOONGARCH is a RISC microprocessor from LOONGARCH Technologies. 
Little
+      endian.
+      https://www.loongson.cn/
+      #http://en.wikipedia.org/wiki/MIPS_Technologies
+
+
  endchoice

  # For some architectures or specific cores, our internal toolchain
@@ -414,6 +425,11 @@  if BR2_xtensa
  source "arch/Config.in.xtensa"
  endif

+if BR2_loongarch64
+source "arch/Config.in.loongarch"
+endif
+
+
  # Set up target binary format
  choice
      prompt "Target Binary Format"
diff --git a/arch/Config.in.loongarch b/arch/Config.in.loongarch
new file mode 100644
index 0000000000..bf86490cff
--- /dev/null
+++ b/arch/Config.in.loongarch
@@ -0,0 +1,52 @@ 
+# loongarch config
+config BR2_LOONGARCH_CPU_LOONGARCH64
+    bool
+    select BR2_LOONGARCH_NAN_LEGACY
+
+choice
+    prompt "Target Architecture Variant"
+    default BR2_loongarch_64 if BR2_loongarch64
+    depends on BR2_loongarch64
+    help
+      Specific CPU variant to use
+
+config BR2_loongarch_64
+    bool "Generic LOONGARCH64"
+    depends on BR2_ARCH_IS_64
+    select BR2_LOONGARCH_CPU_LOONGARCH64
+endchoice
+
+config BR2_LOONGARCH_NAN_LEGACY
+    bool
+
+#config BR2_GCC_TARGET_NAN
+#    default "legacy"    if BR2_LOONGARCH_NAN_LEGACY
+
+config BR2_ARCH
+    default "loongarch64"    if BR2_loongarch64
+
+config BR2_NORMALIZED_ARCH
+    default "loongarch"
+
+config BR2_ENDIAN
+    default "LITTLE"    if BR2_loongarch64
+
+config BR2_GCC_TARGET_ARCH
+    default "loongarch64"    if BR2_loongarch_64
+
+config BR2_READELF_ARCH_NAME
+    default "LoongArch"
+
+config BR2_LOONGARCH_SOFT_FLOAT
+        bool "Use soft-float"
+        #default y
+        select BR2_SOFT_FLOAT
+        help
+          If your target CPU does not have a Floating Point Unit (FPU)
+          or a kernel FPU emulator, but you still wish to support
+          floating point functions, then everything will need to be
+          compiled with soft floating point support (-msoft-float).
+
+
+# vim: ft=kconfig
+# -*- mode:kconfig; -*-
diff --git a/package/glibc/Config.in b/package/glibc/Config.in
index 71c50504ac..d8325610f5 100644
--- a/package/glibc/Config.in
+++ b/package/glibc/Config.in
@@ -21,6 +21,7 @@  config BR2_PACKAGE_GLIBC_ARCH_SUPPORTS
      default y if BR2_microblaze
      default y if BR2_nios2
      default y if BR2_arc && BR2_ARC_ATOMIC_EXT
+    default y if BR2_loongarch64
      depends on !BR2_powerpc_SPE
      depends on BR2_RISCV_ISA_RVA || !BR2_riscv
      depends on BR2_USE_MMU
diff --git a/support/gnuconfig/config.sub b/support/gnuconfig/config.sub
index 9bc49a7e92..c751ddf15a 100755
--- a/support/gnuconfig/config.sub
+++ b/support/gnuconfig/config.sub
@@ -164,7 +164,7 @@  case $1 in
                          basic_os=$field2
                          ;;
                      # Manufacturers
-                    dec* | mips* | sequent* | encore* | pc533* | sgi* | 
sony* \
+                    dec* | mips* | loongarch* | sequent* | encore* | 
pc533* | sgi* | sony* \
                      | att* | 7300* | 3300* | delta* | motorola* | 
sun[234]* \
                      | unicom* | ibm* | next | hp | isi* | apollo | 
altos* \
                      | convergent* | ncr* | news | 32* | 3600* | 3100* \
@@ -632,6 +632,11 @@  case $1 in
                  basic_machine=ymp-cray
                  basic_os=unicos
                  ;;
+            loongarch)
+                basic_machine=loongarch-loongson
+                basic_os=
+                ;;
+
              *)
                  basic_machine=$1
                  basic_os=
@@ -1211,6 +1216,7 @@  case $cpu-$vendor in
              | mipsisa64sr71k | mipsisa64sr71kel \
              | mipsr5900 | mipsr5900el \
              | mipstx39 | mipstx39el \
+            | loongarch | loongarch64 \
              | mmix \
              | mn10200 | mn10300 \
              | moxie \
@@ -1253,7 +1259,8 @@  case $cpu-$vendor in
              | x86 | x86_64 | xc16x | xgate | xps100 \
              | xstormy16 | xtensa* \
              | ymp \
-            | z8k | z80)
+            | z8k | z80 \
+            | loongarch | loongarch64)
                  ;;

              *)
diff --git a/toolchain/Config.in b/toolchain/Config.in
index 4947ab3aae..a4939af6fb 100644
--- a/toolchain/Config.in
+++ b/toolchain/Config.in
@@ -24,7 +24,7 @@  config BR2_TOOLCHAIN_USES_UCLIBC
      # architectures
      select BR2_TOOLCHAIN_HAS_UCONTEXT if BR2_ARM_CPU_HAS_ARM || BR2_i386 \
          || BR2_mips || BR2_mipsel || BR2_mips64 || BR2_mips64el \
-        || BR2_sparc || BR2_x86_64
+        || BR2_sparc || BR2_x86_64 || BR2_loongarch64
      select BR2_TOOLCHAIN_SUPPORTS_PIE if !BR2_m68k && !BR2_microblaze 
&& !BR2_STATIC_LIBS