From 1c7ad1a115614a32ac299a9ad5341a9b4157e47b Mon Sep 17 00:00:00 2001 From: Waldemar Brodkorb Date: Sun, 31 Dec 2017 10:16:16 +0100 Subject: riscv: add specific ISA / ABI working for glibc --- target/config/Config.in.abi | 60 ++++++++++++++++++++++++--------------------- target/config/Config.in.cpu | 30 ++++++++++++++++++++--- toolchain/gcc/Makefile | 4 +++ 3 files changed, 62 insertions(+), 32 deletions(-) diff --git a/target/config/Config.in.abi b/target/config/Config.in.abi index 1871728f5..67eacf274 100644 --- a/target/config/Config.in.abi +++ b/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 diff --git a/target/config/Config.in.cpu b/target/config/Config.in.cpu index 5f453bc90..41e45d2bd 100644 --- a/target/config/Config.in.cpu +++ b/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 diff --git a/toolchain/gcc/Makefile b/toolchain/gcc/Makefile index 68a1edff8..edd301297 100644 --- a/toolchain/gcc/Makefile +++ b/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 -- cgit v1.2.3