Browse Source

riscv: add specific ISA / ABI working for glibc

Waldemar Brodkorb 6 years ago
parent
commit
1c7ad1a115
3 changed files with 62 additions and 32 deletions
  1. 32 28
      target/config/Config.in.abi
  2. 26 4
      target/config/Config.in.cpu
  3. 4 0
      toolchain/gcc/Makefile

+ 32 - 28
target/config/Config.in.abi

@@ -18,46 +18,40 @@ endchoice
 
 choice
 prompt "ABI"
-depends on ADK_TARGET_ARCH_RISCV32
+depends on ADK_TARGET_ARCH_X86_64 && \
+	(ADK_TARGET_LIB_GLIBC || ADK_TARGET_LIB_MUSL)
+
+config ADK_TARGET_ABI_64
+	bool "64 Bit ABI"
+
+config ADK_TARGET_ABI_X32
+	bool "x32 ABI"
+
+endchoice
 
 config ADK_TARGET_ABI_ILP32
-	bool "ilp32 ABI"
+	bool
+	depends on ADK_TARGET_ARCH_RISCV32
 
 config ADK_TARGET_ABI_ILP32F
-	bool "ilp32f ABI"
+	bool
+	depends on ADK_TARGET_ARCH_RISCV32
 
 config ADK_TARGET_ABI_ILP32D
-	bool "ilp32d ABI"
-
-endchoice
-
-choice
-prompt "ABI"
-depends on ADK_TARGET_ARCH_RISCV64
+	bool
+	depends on ADK_TARGET_ARCH_RISCV32
 
 config ADK_TARGET_ABI_LP64
-	bool "lp64 ABI"
+	bool
+	depends on ADK_TARGET_ARCH_RISCV64
 
 config ADK_TARGET_ABI_LP64F
-	bool "lp64f ABI"
+	bool
+	depends on ADK_TARGET_ARCH_RISCV64
 
 config ADK_TARGET_ABI_LP64D
-	bool "lp64d ABI"
-
-endchoice
-
-choice
-prompt "ABI"
-depends on ADK_TARGET_ARCH_X86_64 && \
-	(ADK_TARGET_LIB_GLIBC || ADK_TARGET_LIB_MUSL)
-
-config ADK_TARGET_ABI_64
-	bool "64 Bit ABI"
-
-config ADK_TARGET_ABI_X32
-	bool "x32 ABI"
-
-endchoice
+	bool
+	depends on ADK_TARGET_ARCH_RISCV64
 
 config ADK_TARGET_ABI
 	string
@@ -69,6 +63,16 @@ config ADK_TARGET_ABI
 	default "eabihf" if ADK_TARGET_ARCH_ARM && ADK_TARGET_HARD_FLOAT
 	default "eabi" if ADK_TARGET_ARCH_ARM
 
+config ADK_TARGET_ABI_RISCV
+	depends on ADK_TARGET_ARCH_RISCV32 || ADK_TARGET_ARCH_RISCV64
+	string
+	default "lp64" if ADK_TARGET_ABI_LP64
+	default "lp64d" if ADK_TARGET_ABI_LP64D
+	default "lp64f" if ADK_TARGET_ABI_LP64F
+	default "ilp32" if ADK_TARGET_ABI_ILP64
+	default "ilp32d" if ADK_TARGET_ABI_ILP64D
+	default "ilp32f" if ADK_TARGET_ABI_ILP64F
+
 config ADK_TARGET_MIPS_ABI
 	depends on ADK_TARGET_ARCH_MIPS64
 	string

+ 26 - 4
target/config/Config.in.cpu

@@ -1178,18 +1178,36 @@ config ADK_TARGET_CPU_PPC64_POWER8
 	depends on ADK_TARGET_ARCH_PPC64
 
 # riscv 
-config ADK_TARGET_CPU_RISCV32
-	bool "riscv32"
+config ADK_TARGET_CPU_RISCV32_RV32IMAFDC
+	bool "rv32imafdc"
 	select ADK_TARGET_SUPPORTS_THREADS
 	select ADK_TARGET_SUPPORTS_NPTL
 	select ADK_TARGET_WITH_MMU
+	select ADK_TARGET_ABI_ILP32D
 	depends on ADK_TARGET_ARCH_RISCV32
 
-config ADK_TARGET_CPU_RISCV64
-	bool "riscv64"
+config ADK_TARGET_CPU_RISCV32_RV32IMAC
+	bool "rv32imac"
 	select ADK_TARGET_SUPPORTS_THREADS
 	select ADK_TARGET_SUPPORTS_NPTL
 	select ADK_TARGET_WITH_MMU
+	select ADK_TARGET_ABI_ILP32
+	depends on ADK_TARGET_ARCH_RISCV32
+
+config ADK_TARGET_CPU_RISCV64_RV64IMAFDC
+	bool "rv64imafdc"
+	select ADK_TARGET_SUPPORTS_THREADS
+	select ADK_TARGET_SUPPORTS_NPTL
+	select ADK_TARGET_WITH_MMU
+	select ADK_TARGET_ABI_LP64D
+	depends on ADK_TARGET_ARCH_RISCV64
+
+config ADK_TARGET_CPU_RISCV64_RV64IMAC
+	bool "rv64imac"
+	select ADK_TARGET_SUPPORTS_THREADS
+	select ADK_TARGET_SUPPORTS_NPTL
+	select ADK_TARGET_WITH_MMU
+	select ADK_TARGET_ABI_LP64
 	depends on ADK_TARGET_ARCH_RISCV64
 
 # rx
@@ -2041,6 +2059,10 @@ config ADK_TARGET_GCC_ARCH
 	default "x86-64" if ADK_TARGET_CPU_X86_64
 	default "z900" if ADK_TARGET_CPU_S390_Z900
 	default "c674x" if ADK_TARGET_CPU_C6X
+	default "rv32imafdc" if ADK_TARGET_CPU_RISCV32_RV32IMAFDC
+	default "rv32imac" if ADK_TARGET_CPU_RISCV32_RV32IMAC
+	default "rv64imafdc" if ADK_TARGET_CPU_RISCV64_RV64IMAFDC
+	default "rv64imac" if ADK_TARGET_CPU_RISCV64_RV64IMAC
 
 # for CFLAGS/CXXFLAGS if gcc does not support --with-cpu
 config ADK_TARGET_CPU_FLAGS

+ 4 - 0
toolchain/gcc/Makefile

@@ -215,6 +215,10 @@ ifneq ($(ADK_TARGET_MIPS_ABI),)
 GCC_CONFOPTS+=		--with-abi=${ADK_TARGET_MIPS_ABI}
 endif
 
+ifneq ($(ADK_TARGET_ABI_RISCV),)
+GCC_CONFOPTS+=		--with-abi=${ADK_TARGET_ABI_RISCV}
+endif
+
 ifeq (${ADK_MAKE_PARALLEL},y)
 GCC_MAKEOPTS+=		-j${ADK_MAKE_JOBS}
 endif