Skip to content

Commit 82c3d65

Browse files
authored
Merge pull request #1368 from Incarnation-p-lee/master
Extend semantic for option '--with-extra-multilib-test'
2 parents 9b2ad26 + 47cd201 commit 82c3d65

File tree

3 files changed

+92
-3
lines changed

3 files changed

+92
-3
lines changed

Makefile.in

Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -93,12 +93,25 @@ GDB_NATIVE_FLAGS := $(GDB_NATIVE_FLAGS_EXTRA)
9393
GLIBC_TARGET_FLAGS := $(GLIBC_TARGET_FLAGS_EXTRA)
9494
GLIBC_CC_FOR_TARGET ?= $(LINUX_TUPLE)-gcc
9595
GLIBC_CXX_FOR_TARGET ?= $(LINUX_TUPLE)-g++
96-
GLIBC_TARGET_BOARDS ?= $(shell echo "$(GLIBC_MULTILIB_NAMES) $(EXTRA_MULTILIB_TEST)" | sed 's!\([_a-z0-9]*\)-\([_a-z0-9]*\)!riscv-sim/-march=\1/-mabi=\2/@cmodel@!g')
96+
GLIBC_TARGET_BOARDS ?= $(shell $(srcdir)/scripts/generate_target_board \
97+
--sim-name riscv-sim \
98+
--cmodel $(shell echo @cmodel@ | cut -d '=' -f2) \
99+
--build-arch-abi $(GLIBC_MULTILIB_NAMES) \
100+
--extra-test-arch-abi-flags-list "$(subst ;,\;,$(EXTRA_MULTILIB_TEST))")
97101

98102
NEWLIB_CC_FOR_TARGET ?= $(NEWLIB_TUPLE)-gcc
99103
NEWLIB_CXX_FOR_TARGET ?= $(NEWLIB_TUPLE)-g++
100-
NEWLIB_TARGET_BOARDS ?= $(shell echo "$(NEWLIB_MULTILIB_NAMES) $(EXTRA_MULTILIB_TEST)" | sed 's!\([_a-z0-9]*\)-\([_a-z0-9]*\)!riscv-sim/-march=\1/-mabi=\2/@cmodel@!g')
101-
NEWLIB_NANO_TARGET_BOARDS ?= $(shell echo "$(NEWLIB_MULTILIB_NAMES) $(EXTRA_MULTILIB_TEST)" | sed 's!\([_a-z0-9]*\)-\([_a-z0-9]*\)!riscv-sim-nano/-march=\1/-mabi=\2/@cmodel@!g')
104+
NEWLIB_TARGET_BOARDS ?= $(shell $(srcdir)/scripts/generate_target_board \
105+
--sim-name riscv-sim \
106+
--cmodel $(shell echo @cmodel@ | cut -d '=' -f2) \
107+
--build-arch-abi $(NEWLIB_MULTILIB_NAMES) \
108+
--extra-test-arch-abi-flags-list "$(subst ;,\;,$(EXTRA_MULTILIB_TEST))")
109+
110+
NEWLIB_NANO_TARGET_BOARDS ?= $(shell $(srcdir)/scripts/generate_target_board \
111+
--sim-name riscv-sim-nano \
112+
--cmodel $(shell echo @cmodel@ | cut -d '=' -f2) \
113+
--build-arch-abi $(NEWLIB_MULTILIB_NAMES) \
114+
--extra-test-arch-abi-flags-list "$(subst ;,\;,$(EXTRA_MULTILIB_TEST))")
102115
NEWLIB_CC_FOR_MULTILIB_INFO := $(NEWLIB_CC_FOR_TARGET)
103116

104117
MUSL_TARGET_FLAGS := $(MUSL_TARGET_FLAGS_EXTRA)

README.md

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -261,6 +261,15 @@ even multilib is disable, but the user must ensure extra multilib test
261261
configuration can be work with existing lib/multilib, e.g. rv32gcv/ilp32 test
262262
can't work if multilib didn't have any rv32 multilib.
263263

264+
`--with-extra-multilib-test` also allow you append additional build flags after
265+
the arch/ABI, for example: built a linux toolchain with `rv64gc/lp64d`, and you
266+
can test more configuration like `rv64gcv/lp64d` with one additional build config
267+
`--param=riscv-autovec-lmul=dynamic`, then you can use --with-extra-multilib-test
268+
to specify that via
269+
`--with-extra-multilib-test="rv64gcv-lp64d:--param=riscv-autovec-lmul=dynamic"`.
270+
Then the testing will build the run test with option `--param=riscv-autovec-lmul=dynamic`
271+
before run the `rv64gcv-lp64d` test.
272+
264273
### LLVM / clang
265274

266275
LLVM can be used in combination with the RISC-V GNU Compiler Toolchain

scripts/generate_target_board

Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
#!/usr/bin/env python3
2+
3+
import argparse
4+
import sys
5+
6+
def parse_options(argv):
7+
parser = argparse.ArgumentParser()
8+
9+
parser.add_argument('--sim-name', type = str, required = True,
10+
help = 'The sim name of target board, like riscv-sim.')
11+
parser.add_argument('--build-arch-abi', type = str, required = True,
12+
help = 'The arch and abi when build, like ' +
13+
'--with-arch=rv64gcv --with-abi=lp64d' +
14+
'in riscv-gnu-toolchain configure, ' +
15+
'within format rv64gcv-lp64d.')
16+
parser.add_argument('--extra-test-arch-abi-flags-list', type=str,
17+
help = 'The arch, abi and flags list for extra test,' +
18+
'like =rv64gcv_zvl256b-lp64d:' +
19+
'--param=riscv-autovec-lmul=dynamic:' +
20+
'--param=riscv-autovec-preference=fixed-vlmax.',
21+
default = '')
22+
parser.add_argument('--cmodel', type = str, default = 'medlow',
23+
help = 'The name of the cmodel, like medlow.')
24+
25+
options = parser.parse_args()
26+
return options
27+
28+
# Generate only one target board like below:
29+
# riscv-sim/-march=rv64gcv_zvl256b/-mabi=lp64d/-mcmodel=medlow
30+
# From the config_string like below, --param is optional
31+
# rv64gcv_zvl128b-lp64d:--param=riscv-autovec-lmul=m1
32+
def generate_one_target_board(config_string, options):
33+
configs = config_string.split(":")
34+
arch_and_abi = configs[0].split("-")
35+
arch = arch_and_abi[0]
36+
abi = arch_and_abi[1]
37+
38+
if len (configs) == 1:
39+
return "{0}/-march={1}/-mabi={2}/-mcmodel={3}".format(
40+
options.sim_name, arch, abi, options.cmodel)
41+
42+
flags = '/'.join(configs[1:])
43+
44+
return "{0}/-march={1}/-mabi={2}/-mcmodel={3}/{4}".format(
45+
options.sim_name, arch, abi, options.cmodel, flags)
46+
47+
def main(argv):
48+
options = parse_options(argv)
49+
50+
if not options.sim_name or not options.build_arch_abi:
51+
print ("The --sim-name and/or --build-arch-abi cannot be empty or null.")
52+
return
53+
54+
target_board_list = [
55+
generate_one_target_board(options.build_arch_abi, options)
56+
]
57+
58+
if options.extra_test_arch_abi_flags_list:
59+
extra_test_list = options.extra_test_arch_abi_flags_list.split (";")
60+
61+
for extra_test in extra_test_list:
62+
target_board_list.append(generate_one_target_board(extra_test, options))
63+
64+
print(' '.join(target_board_list))
65+
66+
if __name__ == '__main__':
67+
sys.exit(main(sys.argv))

0 commit comments

Comments
 (0)