aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKirill K. Smirnov <kirill.k.smirnov@gmail.com>2023-07-09 23:06:17 +0300
committerChris Packham <judge.packham@gmail.com>2023-07-14 14:01:08 +1200
commitada71ff2a078b5de3c42f5b5a7c00e89fd2f708d (patch)
tree28cd707f243d94f084a8b9d71b0a7bfba23bff97
parent11d286dbc9e045cd5c7c6d809a679d77db123cae (diff)
downloadcrosstool-ng-ada71ff2a078b5de3c42f5b5a7c00e89fd2f708d.tar.gz
crosstool-ng-ada71ff2a078b5de3c42f5b5a7c00e89fd2f708d.tar.bz2
crosstool-ng-ada71ff2a078b5de3c42f5b5a7c00e89fd2f708d.zip
Properly build multilib bare-metal RISC-V
To build multilib RISC-V toolchain one should use --with-multilib-generator option instead of --with-multilib-list. Add corresponding example configuration file. Signed-off-by: Kirill K. Smirnov <kirill.k.smirnov@gmail.com>
-rw-r--r--config/cc/gcc.in13
-rw-r--r--samples/riscv64-multilib-elf/crosstool.config10
-rw-r--r--samples/riscv64-multilib-elf/reported.by3
-rw-r--r--scripts/build/cc/gcc.sh6
4 files changed, 32 insertions, 0 deletions
diff --git a/config/cc/gcc.in b/config/cc/gcc.in
index 6d2e0e38..1f50460a 100644
--- a/config/cc/gcc.in
+++ b/config/cc/gcc.in
@@ -81,6 +81,7 @@ config CC_GCC_EXTRA_CONFIG_ARRAY
config CC_GCC_MULTILIB_LIST
string "List of multilib variants"
depends on MULTILIB
+ depends on ! (ARCH_RISCV && BARE_METAL)
default "m2,m2e,m4,m4-single,m4-single-only,m2a,m2a-single" if GCC_11_or_later && ARCH_SH
default "aprofile,rmprofile" if ARCH_ARM && ARCH_32
help
@@ -89,6 +90,18 @@ config CC_GCC_MULTILIB_LIST
for the format of this option for a particular architecture.
Leave empty to use the default list for this architecture.
+config CC_GCC_MULTILIB_GENERATOR
+ string "Generator of RISC-V multilib variants"
+ depends on MULTILIB
+ depends on (ARCH_RISCV && BARE_METAL)
+ default ""
+ help
+ Multilib generator for RISC-V architecture.
+
+ For more information please refer to gcc manual
+
+ If unsure, leave empty.
+
config STATIC_TOOLCHAIN
bool
select CC_GCC_STATIC_LIBSTDCXX
diff --git a/samples/riscv64-multilib-elf/crosstool.config b/samples/riscv64-multilib-elf/crosstool.config
new file mode 100644
index 00000000..99795791
--- /dev/null
+++ b/samples/riscv64-multilib-elf/crosstool.config
@@ -0,0 +1,10 @@
+CT_CONFIG_VERSION="4"
+CT_EXPERIMENTAL=y
+CT_ARCH_RISCV=y
+CT_MULTILIB=y
+CT_ARCH_USE_MMU=y
+CT_ARCH_64=y
+CT_ARCH_ARCH="rv64gc"
+CT_TARGET_VENDOR="multilib"
+CT_CC_GCC_MULTILIB_GENERATOR="rv32e-ilp32e--;rv32ea-ilp32e--;rv32em-ilp32e--;rv32eac-ilp32e--;rv32emac-ilp32e--;rv32i-ilp32--;rv32ia-ilp32--;rv32im-ilp32--;rv32if-ilp32f--;rv32ifd-ilp32d--;rv32iaf-ilp32f--;rv32iafd-ilp32d--;rv32imf-ilp32f--;rv32imfd-ilp32d--;rv32iac-ilp32--;rv32imac-ilp32--;rv32imafc-ilp32f--;rv32imafdc-ilp32d--;rv64i-lp64--;rv64ia-lp64--;rv64im-lp64--;rv64if-lp64f--;rv64ifd-lp64d--;rv64iaf-lp64f--;rv64iafd-lp64d--;rv64imf-lp64f--;rv64imaf-lp64f--;rv64iac-lp64--;rv64imac-lp64--;rv64imafc-lp64f--;rv64imafdc-lp64d--"
+CT_CC_LANG_CXX=y
diff --git a/samples/riscv64-multilib-elf/reported.by b/samples/riscv64-multilib-elf/reported.by
new file mode 100644
index 00000000..1b486ece
--- /dev/null
+++ b/samples/riscv64-multilib-elf/reported.by
@@ -0,0 +1,3 @@
+reporter_name="Kirill K. Smirnov"
+reporter_url=""
+reporter_comment="Example of multilib bare-metal RISC-V"
diff --git a/scripts/build/cc/gcc.sh b/scripts/build/cc/gcc.sh
index 35ac96e1..f14f31da 100644
--- a/scripts/build/cc/gcc.sh
+++ b/scripts/build/cc/gcc.sh
@@ -541,6 +541,9 @@ do_gcc_core_backend() {
if [ -n "${CT_CC_GCC_MULTILIB_LIST}" ]; then
extra_config+=("--with-multilib-list=${CT_CC_GCC_MULTILIB_LIST}")
fi
+ if [ -n "${CT_CC_GCC_MULTILIB_GENERATOR}" ]; then
+ extra_config+=("--with-multilib-generator=${CT_CC_GCC_MULTILIB_GENERATOR}")
+ fi
fi
CT_DoLog DEBUG "Extra config passed: '${extra_config[*]}'"
@@ -1202,6 +1205,9 @@ do_gcc_backend() {
if [ -n "${CT_CC_GCC_MULTILIB_LIST}" ]; then
extra_config+=("--with-multilib-list=${CT_CC_GCC_MULTILIB_LIST}")
fi
+ if [ -n "${CT_CC_GCC_MULTILIB_GENERATOR}" ]; then
+ extra_config+=("--with-multilib-generator=${CT_CC_GCC_MULTILIB_GENERATOR}")
+ fi
fi
CT_DoLog DEBUG "Extra config passed: '${extra_config[*]}'"