Skip to content

Commit 3aee555

Browse files
committed
Add support for picolibc
This allows the creation of an embedded toolchain which uses picolibc as the C library instead of newlib. Signed-off-by: Keith Packard <[email protected]>
1 parent d395aaf commit 3aee555

File tree

6 files changed

+313
-8
lines changed

6 files changed

+313
-8
lines changed

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ build
33
config.log
44
config.status
55
Makefile
6+
picolibc-cross.txt
67
.DS_Store
78
!/regression/Makefile
89
/build-*/

Makefile.in

Lines changed: 206 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ INSTALL_DIR := @prefix@
55
GCC_SRCDIR := @with_gcc_src@
66
BINUTILS_SRCDIR := @with_binutils_src@
77
NEWLIB_SRCDIR := @with_newlib_src@
8+
PICOLIBC_SRCDIR := @with_picolibc_src@
89
GLIBC_SRCDIR := @with_glibc_src@
910
MUSL_SRCDIR := @with_musl_src@
1011
LINUX_HEADERS_SRCDIR := @with_linux_headers_src@
@@ -59,9 +60,11 @@ MULTILIB_FLAGS := @multilib_flags@
5960
MULTILIB_GEN := @multilib_gen@
6061
ifeq ($(MULTILIB_GEN),)
6162
NEWLIB_MULTILIB_NAMES := @newlib_multilib_names@
63+
PICOLIBC_MULTILIB_NAMES := @picolibc_multilib_names@
6264
GCC_MULTILIB_FLAGS := $(MULTILIB_FLAGS)
6365
else
6466
NEWLIB_MULTILIB_NAMES := $(shell echo "$(MULTILIB_GEN)" | $(SED) 's/;/\n/g'| $(AWK) '{split($$0,a,"-"); printf "%s-%s ", a[1],a[2]}')
67+
PICOLIBC_MULTILIB_NAMES := $(shell echo "$(MULTILIB_GEN)" | $(SED) 's/;/\n/g'| $(AWK) '{split($$0,a,"-"); printf "%s-%s ", a[1],a[2]}')
6568
GCC_MULTILIB_FLAGS := $(MULTILIB_FLAGS) --with-multilib-generator="$(MULTILIB_GEN)"
6669
endif
6770
GLIBC_MULTILIB_NAMES := @glibc_multilib_names@
@@ -75,6 +78,7 @@ endif
7578
make_tuple = riscv$(1)-unknown-$(2)
7679
LINUX_TUPLE ?= $(call make_tuple,$(XLEN),linux-gnu)
7780
NEWLIB_TUPLE ?= $(call make_tuple,$(XLEN),elf)
81+
PICOLIBC_TUPLE ?= $(call make_tuple,$(XLEN),elf)
7882
MUSL_TUPLE ?= $(call make_tuple,$(XLEN),linux-musl)
7983

8084
CFLAGS_FOR_TARGET := $(CFLAGS_FOR_TARGET_EXTRA) @target_cflags@ @cmodel@
@@ -96,6 +100,10 @@ NEWLIB_CXX_FOR_TARGET ?= $(NEWLIB_TUPLE)-g++
96100
NEWLIB_TARGET_BOARDS ?= $(shell echo "$(NEWLIB_MULTILIB_NAMES)" | sed 's!\([_a-z0-9]*\)-\([_a-z0-9]*\)!riscv-sim/-march=\1/-mabi=\2/@cmodel@!g')
97101
NEWLIB_NANO_TARGET_BOARDS ?= $(shell echo "$(NEWLIB_MULTILIB_NAMES)" | sed 's!\([_a-z0-9]*\)-\([_a-z0-9]*\)!riscv-sim-nano/-march=\1/-mabi=\2/@cmodel@!g')
98102

103+
PICOLIBC_CC_FOR_TARGET ?= $(PICOLIBC_TUPLE)-gcc
104+
PICOLIBC_CXX_FOR_TARGET ?= $(PICOLIBC_TUPLE)-g++
105+
PICOLIBC_TARGET_BOARDS ?= $(shell echo "$(PICOLIBC_MULTILIB_NAMES)" | sed 's!\([_a-z0-9]*\)-\([_a-z0-9]*\)!riscv-sim/-march=\1/-mabi=\2/@cmodel@!g')
106+
99107
MUSL_TARGET_FLAGS := $(MUSL_TARGET_FLAGS_EXTRA)
100108
MUSL_CC_FOR_TARGET ?= $(MUSL_TUPLE)-gcc
101109
MUSL_CXX_FOR_TARGET ?= $(MUSL_TUPLE)-g++
@@ -104,6 +112,7 @@ CONFIGURE_HOST = @configure_host@
104112

105113
all: @default_target@
106114
newlib: stamps/build-gcc-newlib-stage2
115+
picolibc: stamps/build-gcc-picolibc-stage2
107116
linux: stamps/build-gcc-linux-stage2
108117
ifneq (,$(findstring riscv32,$(MUSL_TUPLE)))
109118
.PHONY: musl
@@ -114,6 +123,7 @@ musl: stamps/build-gcc-musl-stage2
114123
endif
115124
ifeq (@enable_gdb@,--enable-gdb)
116125
newlib: stamps/build-gdb-newlib
126+
picolibc: stamps/build-gdb-picolibc
117127
linux: stamps/build-gdb-linux
118128
endif
119129
linux-native: stamps/build-gcc-linux-native
@@ -125,45 +135,54 @@ build-gcc%: stamps/build-gcc-@default_target@-stage%
125135
ifeq (@default_target@,linux)
126136
build-libc: $(addprefix stamps/build-glibc-linux-,$(GLIBC_MULTILIB_NAMES))
127137
else
138+
ifeq (@default_target@,picolibc)
139+
build-libc: stamps/build-picolibc
140+
else
128141
build-libc: stamps/build-newlib stamps/build-newlib-nano \
129142
stamps/merge-newlib-nano
130143
endif
144+
endif
131145
build-qemu: stamps/build-qemu
132146

133147
REGRESSION_TEST_LIST = gcc
134148

135149
.PHONY: check
136150
check: check-@default_target@
137-
.PHONY: check-linux check-newlib
151+
.PHONY: check-linux check-newlib check-picolibc
138152
check-linux: $(patsubst %,check-%-linux,$(REGRESSION_TEST_LIST))
139153
check-newlib: $(patsubst %,check-%-newlib,$(REGRESSION_TEST_LIST))
140154
check-newlib-nano: $(patsubst %,check-%-newlib-nano,$(REGRESSION_TEST_LIST))
141-
.PHONY: check-gcc check-gcc-linux check-gcc-newlib check-gcc-newlib-nano
155+
check-picolibc: $(patsubst %,check-%-picolibc,$(REGRESSION_TEST_LIST))
156+
.PHONY: check-gcc check-gcc-linux check-gcc-newlib check-gcc-newlib-nano check-gcc-picolibc
142157
check-gcc: check-gcc-@default_target@
143158
check-gcc-linux: stamps/check-gcc-linux
144159
check-gcc-newlib: stamps/check-gcc-newlib
145160
check-gcc-newlib-nano: stamps/check-gcc-newlib-nano
161+
check-gcc-picolibc: stamps/check-gcc-picolibc
146162
.PHONY: check-glibc-linux
147163
check-glibc-linux: $(addprefix stamps/check-glibc-linux-,$(GLIBC_MULTILIB_NAMES))
148-
.PHONY: check-dhrystone check-dhrystone-linux check-dhrystone-newlib
164+
.PHONY: check-dhrystone check-dhrystone-linux check-dhrystone-newlib check-dhrystone-picolibc
149165
check-dhrystone: check-dhrystone-@default_target@
150-
.PHONY: check-binutils check-binutils-linux check-binutils-newlib
166+
.PHONY: check-binutils check-binutils-linux check-binutils-newlib check-binutils-picolibc
151167
check-binutils: check-binutils-@default_target@
152168
check-binutils-linux: stamps/check-binutils-linux
153169
check-binutils-newlib: stamps/check-binutils-newlib
154170
check-binutils-newlib-nano: stamps/check-binutils-newlib-nano
155-
.PHONY: check-gdb check-gdb-linux check-gdb-newlib
171+
check-binutils-picolibc: stamps/check-binutils-picolibc
172+
.PHONY: check-gdb check-gdb-linux check-gdb-newlib check-gdb-picolibc
156173
check-gdb: check-gdb-@default_target@
157174
check-gdb-linux: stamps/check-gdb-linux
158175
check-gdb-newlib: stamps/check-gdb-newlib
159176
check-gdb-newlib-nano: stamps/check-gdb-newlib-nano
177+
check-gdb-picolibc: stamps/check-gdb-picolibc
160178

161179
.PHONY: report
162180
report: report-@default_target@
163-
.PHONY: report-linux report-newlib report-newlib-nano
181+
.PHONY: report-linux report-newlib report-newlib-nano report-picolibc
164182
report-linux: $(patsubst %,report-%-linux,$(REGRESSION_TEST_LIST))
165183
report-newlib: $(patsubst %,report-%-newlib,$(REGRESSION_TEST_LIST))
166184
report-newlib-nano: $(patsubst %,report-%-newlib-nano,$(REGRESSION_TEST_LIST))
185+
report-picolibc: $(patsubst %,report-%-picolibc,$(REGRESSION_TEST_LIST))
167186
.PHONY: report-gcc
168187
report-gcc: report-gcc-@default_target@
169188
.PHONY: report-dhrystone
@@ -688,6 +707,141 @@ stamps/build-gcc-newlib-stage2: $(GCC_SRCDIR) $(GCC_SRC_GIT) stamps/build-newlib
688707
$(MAKE) -C $(notdir $@) install
689708
mkdir -p $(dir $@) && touch $@
690709

710+
#
711+
# PICOLIBC
712+
#
713+
714+
stamps/build-binutils-picolibc: $(BINUTILS_SRCDIR) $(BINUTILS_SRC_GIT) stamps/check-write-permission
715+
rm -rf $@ $(notdir $@)
716+
mkdir $(notdir $@)
717+
# CC_FOR_TARGET is required for the ld testsuite.
718+
cd $(notdir $@) && CC_FOR_TARGET=$(PICOLIBC_CC_FOR_TARGET) $</configure \
719+
--target=$(PICOLIBC_TUPLE) \
720+
$(CONFIGURE_HOST) \
721+
--prefix=$(INSTALL_DIR) \
722+
@with_guile@ \
723+
--disable-werror \
724+
$(BINUTILS_TARGET_FLAGS) \
725+
--disable-gdb \
726+
--disable-sim \
727+
--disable-libdecnumber \
728+
--disable-readline \
729+
$(WITH_ISA_SPEC)
730+
$(MAKE) -C $(notdir $@)
731+
$(MAKE) -C $(notdir $@) install
732+
mkdir -p $(dir $@) && touch $@
733+
734+
stamps/build-gdb-picolibc: $(GDB_SRCDIR) $(GDB_SRC_GIT)
735+
rm -rf $@ $(notdir $@)
736+
mkdir $(notdir $@)
737+
# CC_FOR_TARGET is required for the ld testsuite.
738+
cd $(notdir $@) && CC_FOR_TARGET=$(PICOLIBC_CC_FOR_TARGET) $</configure \
739+
--target=$(PICOLIBC_TUPLE) \
740+
$(CONFIGURE_HOST) \
741+
--prefix=$(INSTALL_DIR) \
742+
@with_guile@ \
743+
--disable-werror \
744+
$(GDB_TARGET_FLAGS) \
745+
--enable-gdb \
746+
--disable-gas \
747+
--disable-binutils \
748+
--disable-ld \
749+
--disable-gold \
750+
--disable-gprof
751+
$(MAKE) -C $(notdir $@)
752+
$(MAKE) -C $(notdir $@) install
753+
mkdir -p $(dir $@) && touch $@
754+
755+
stamps/build-gcc-picolibc-stage1: $(GCC_SRCDIR) $(GCC_SRC_GIT) stamps/build-binutils-picolibc
756+
if test -f $</contrib/download_prerequisites && test "@NEED_GCC_EXTERNAL_LIBRARIES@" = "true"; then cd $< && ./contrib/download_prerequisites; fi
757+
rm -rf $@ $(notdir $@)
758+
mkdir $(notdir $@)
759+
cd $(notdir $@) && $</configure \
760+
--target=$(PICOLIBC_TUPLE) \
761+
$(CONFIGURE_HOST) \
762+
--prefix=$(INSTALL_DIR) \
763+
--disable-shared \
764+
--disable-threads \
765+
--disable-tls \
766+
--enable-languages=c,c++ \
767+
@with_system_zlib@ \
768+
--with-newlib \
769+
--with-sysroot=$(INSTALL_DIR)/$(PICOLIBC_TUPLE) \
770+
--disable-libmudflap \
771+
--disable-libssp \
772+
--disable-libquadmath \
773+
--disable-libgomp \
774+
--disable-nls \
775+
--disable-tm-clone-registry \
776+
--src=$(gccsrcdir) \
777+
$(GCC_CHECKING_FLAGS) \
778+
$(GCC_MULTILIB_FLAGS) \
779+
$(WITH_ABI) \
780+
$(WITH_ARCH) \
781+
$(WITH_TUNE) \
782+
$(WITH_ISA_SPEC) \
783+
CFLAGS_FOR_TARGET="-Os $(CFLAGS_FOR_TARGET)" \
784+
CXXFLAGS_FOR_TARGET="-Os $(CXXFLAGS_FOR_TARGET)"
785+
$(MAKE) -C $(notdir $@) all-gcc
786+
$(MAKE) -C $(notdir $@) install-gcc
787+
mkdir -p $(dir $@) && touch $@
788+
789+
stamps/build-picolibc: $(PICOLIBC_SRCDIR) $(PICOLIBC_SRC_GIT) stamps/build-gcc-picolibc-stage1 picolibc-cross.txt
790+
rm -rf $@ $(notdir $@)
791+
mkdir $(notdir $@)
792+
meson setup --cross-file picolibc-cross.txt \
793+
--prefix=$(INSTALL_DIR)/$(PICOLIBC_TUPLE) \
794+
-Dincludedir=include \
795+
-Dlibdir=lib \
796+
-Dsysroot-install=true \
797+
-Dsystem-libc=true \
798+
$(PICOLIBC_SRCDIR) \
799+
$(notdir $@)
800+
ninja -C $(notdir $@) install
801+
mkdir -p $(dir $@) && touch $@
802+
803+
picolibc-cross.txt: make-picolibc-cross Makefile
804+
sh ./make-picolibc-cross $(PICOLIBC_TUPLE) -Os $(CFLAGS_FOR_TARGET) > $@
805+
806+
stamps/build-gcc-picolibc-stage2: $(GCC_SRCDIR) $(GCC_SRC_GIT) stamps/build-picolibc
807+
rm -rf $@ $(notdir $@)
808+
mkdir $(notdir $@)
809+
cd $(notdir $@) && $</configure \
810+
--target=$(PICOLIBC_TUPLE) \
811+
$(CONFIGURE_HOST) \
812+
--enable-stdio=stdio_pure \
813+
--with-default-libc=picolibc \
814+
--disable-wchar_t \
815+
--prefix=$(INSTALL_DIR) \
816+
--disable-shared \
817+
--disable-threads \
818+
--enable-languages=c,c++ \
819+
--with-pkgversion="$(GCCPKGVER)" \
820+
@with_system_zlib@ \
821+
--enable-tls \
822+
--with-newlib \
823+
--with-sysroot=$(INSTALL_DIR)/$(PICOLIBC_TUPLE) \
824+
--with-native-system-header-dir=/include \
825+
--disable-libmudflap \
826+
--disable-libssp \
827+
--disable-libquadmath \
828+
--disable-libgomp \
829+
--disable-nls \
830+
--disable-tm-clone-registry \
831+
--src=$(gccsrcdir) \
832+
$(GCC_CHECKING_FLAGS) \
833+
$(GCC_MULTILIB_FLAGS) \
834+
$(WITH_ABI) \
835+
$(WITH_ARCH) \
836+
$(WITH_TUNE) \
837+
$(WITH_ISA_SPEC) \
838+
CFLAGS_FOR_TARGET="-Os $(CFLAGS_FOR_TARGET)" \
839+
CXXFLAGS_FOR_TARGET="-Os $(CXXFLAGS_FOR_TARGET)"
840+
$(MAKE) -C $(notdir $@)
841+
$(MAKE) -C $(notdir $@) install
842+
mkdir -p $(dir $@) && touch $@
843+
844+
691845
#
692846
# MUSL
693847
#
@@ -887,6 +1041,11 @@ stamps/check-gcc-newlib-nano: stamps/build-gcc-newlib-stage2 $(SIM_STAMP) stamps
8871041
mkdir -p $(dir $@)
8881042
date > $@
8891043

1044+
stamps/check-gcc-picolibc: stamps/build-gcc-picolibc-stage2 $(SIM_STAMP) stamps/build-dejagnu
1045+
$(SIM_PREPARE) $(MAKE) -C build-gcc-picolibc-stage2 check-gcc "RUNTESTFLAGS=--target_board='$(PICOLIBC_TARGET_BOARDS)'"
1046+
mkdir -p $(dir $@)
1047+
date > $@
1048+
8901049
stamps/check-gcc-linux: stamps/build-gcc-linux-stage2 $(SIM_STAMP) stamps/build-dejagnu
8911050
$(SIM_PREPARE) $(MAKE) -C build-gcc-linux-stage2 check-gcc "RUNTESTFLAGS=$(RUNTESTFLAGS) --target_board='$(GLIBC_TARGET_BOARDS)'"
8921051
mkdir -p $(dir $@)
@@ -921,6 +1080,17 @@ stamps/check-dhrystone-newlib-nano-%: \
9211080
$(eval $@_XLEN := $(patsubst rv32%,32,$(patsubst rv64%,64,$($@_ARCH))))
9221081
$(SIM_PREPARE) $(srcdir)/test/benchmarks/dhrystone/check -march=$($@_ARCH) -mabi=$($@_ABI) -specs=nano.specs -cc=riscv$(XLEN)-unknown-elf-gcc -objdump=riscv$(XLEN)-unknown-elf-objdump -sim=riscv$($@_XLEN)-unknown-elf-run -out=$@ $(filter %.c,$^) || true
9231082

1083+
.PHONY: check-dhrystone-picolibc
1084+
check-dhrystone-picolibc: $(patsubst %,stamps/check-dhrystone-picolibc-%,$(PICOLIBC_MULTILIB_NAMES))
1085+
stamps/check-dhrystone-picolibc-%: \
1086+
stamps/build-gcc-picolibc-stage2 \
1087+
$(SIM_STAMP) \
1088+
$(wildcard $(srcdir)/test/benchmarks/dhrystone/*)
1089+
$(eval $@_ARCH := $(word 4,$(subst -, ,$@)))
1090+
$(eval $@_ABI := $(word 5,$(subst -, ,$@)))
1091+
$(eval $@_XLEN := $(patsubst rv32%,32,$(patsubst rv64%,64,$($@_ARCH))))
1092+
$(SIM_PREPARE) $(srcdir)/test/benchmarks/dhrystone/check -march=$($@_ARCH) -mabi=$($@_ABI) -cc=riscv$(XLEN)-unknown-elf-gcc -objdump=riscv$(XLEN)-unknown-elf-objdump -sim=riscv$($@_XLEN)-unknown-elf-run -out=$@ $(filter %.c,$^) || true
1093+
9241094
.PHONY: check-dhrystone-linux
9251095
check-dhrystone-linux: $(patsubst %,stamps/check-dhrystone-linux-%,$(GLIBC_MULTILIB_NAMES))
9261096

@@ -941,6 +1111,10 @@ stamps/check-binutils-newlib-nano: stamps/build-gcc-newlib-stage2 $(SIM_STAMP) s
9411111
$(SIM_PREPARE) $(MAKE) -C build-binutils-newlib check-binutils check-gas check-ld -k "RUNTESTFLAGS=--target_board='$(NEWLIB_NANO_TARGET_BOARDS)'" || true
9421112
date > $@
9431113

1114+
stamps/check-binutils-picolibc: stamps/build-gcc-picolibc-stage2 $(SIM_STAMP) stamps/build-dejagnu
1115+
$(SIM_PREPARE) $(MAKE) -C build-binutils-picolibc check-binutils check-gas check-ld -k "RUNTESTFLAGS=--target_board='$(PICOLIBC_TARGET_BOARDS)'" || true
1116+
date > $@
1117+
9441118
stamps/check-binutils-linux: stamps/build-gcc-linux-stage2 $(SIM_STAMP) stamps/build-dejagnu
9451119
$(SIM_PREPARE) $(MAKE) -C build-binutils-linux check-binutils check-gas check-ld -k "RUNTESTFLAGS=--target_board='$(GLIBC_TARGET_BOARDS)'" || true
9461120
date > $@
@@ -953,6 +1127,10 @@ stamps/check-gdb-newlib-nano: stamps/build-gcc-newlib-stage2 stamps/build-gdb-ne
9531127
$(SIM_PREPARE) $(MAKE) -C build-gdb-newlib check-gdb -k "RUNTESTFLAGS=--target_board='$(NEWLIB_NANO_TARGET_BOARDS)'" || true
9541128
date > $@
9551129

1130+
stamps/check-gdb-picolibc: stamps/build-gcc-picolibc-stage2 stamps/build-gdb-picolibc $(SIM_STAMP) stamps/build-dejagnu
1131+
$(SIM_PREPARE) $(MAKE) -C build-gdb-picolibc check-gdb -k "RUNTESTFLAGS=--target_board='$(PICOLIBC_TARGET_BOARDS)'" || true
1132+
date > $@
1133+
9561134
stamps/check-gdb-linux: stamps/build-gcc-linux-stage2 stamps/build-gdb-linux $(SIM_STAMP) stamps/build-dejagnu
9571135
$(SIM_PREPARE) $(MAKE) -C build-gdb-linux check-gdb -k "RUNTESTFLAGS=--target_board='$(GLIBC_TARGET_BOARDS)'" || true
9581136
date > $@
@@ -964,6 +1142,10 @@ report-gcc-newlib: stamps/check-gcc-newlib
9641142
report-gcc-newlib-nano: stamps/check-gcc-newlib-nano
9651143
$(srcdir)/scripts/testsuite-filter gcc newlib-nano $(srcdir)/test/allowlist `find build-gcc-newlib-stage2/gcc/testsuite/ -name *.sum |paste -sd "," -`
9661144

1145+
.PHONY: report-gcc-picolibc
1146+
report-gcc-picolibc: stamps/check-gcc-picolibc
1147+
$(srcdir)/scripts/testsuite-filter gcc picolibc $(srcdir)/test/allowlist `find build-gcc-picolibc-stage2/gcc/testsuite/ -name *.sum |paste -sd "," -`
1148+
9671149
.PHONY: report-gcc-linux
9681150
report-gcc-linux: stamps/check-gcc-linux
9691151
$(srcdir)/scripts/testsuite-filter gcc glibc $(srcdir)/test/allowlist `find build-gcc-linux-stage2/gcc/testsuite/ -name *.sum |paste -sd "," -`
@@ -974,6 +1156,10 @@ report-dhrystone-newlib: $(patsubst %,stamps/check-dhrystone-newlib-%,$(NEWLIB_M
9741156
report-dhrystone-newlib-nano: $(patsubst %,stamps/check-dhrystone-newlib-nano-%,$(NEWLIB_MULTILIB_NAMES))
9751157
if cat $^ | grep -v '^PASS'; then false; else true; fi
9761158

1159+
.PHONY: report-dhrystone-picolibc
1160+
report-dhrystone-picolibc: $(patsubst %,stamps/check-dhrystone-picolibc-%,$(PICOLIBC_MULTILIB_NAMES))
1161+
if cat $^ | grep -v '^PASS'; then false; else true; fi
1162+
9771163
.PHONY: report-dhrystone-linux
9781164
report-dhrystone-linux: $(patsubst %,stamps/check-dhrystone-linux-%,$(GLIBC_MULTILIB_NAMES))
9791165
if cat $^ | grep -v '^PASS'; then false; else true; fi
@@ -989,14 +1175,20 @@ report-binutils-newlib-nano: stamps/check-binutils-newlib-nano
9891175
$(srcdir)/test/allowlist \
9901176
`find build-binutils-newlib/ -name *.sum |paste -sd "," -`
9911177

1178+
.PHONY: report-binutils-picolibc
1179+
report-binutils-picolibc: stamps/check-binutils-picolibc
1180+
$(srcdir)/scripts/testsuite-filter binutils picolibc \
1181+
$(srcdir)/test/allowlist \
1182+
`find build-binutils-picolibc/ -name *.sum |paste -sd "," -`
1183+
9921184
.PHONY: report-binutils-linux
9931185
report-binutils-linux: stamps/check-binutils-linux
9941186
$(srcdir)/scripts/testsuite-filter binutils glibc \
9951187
$(srcdir)/test/allowlist \
9961188
`find build-binutils-linux/ -name *.sum |paste -sd "," -`
9971189

9981190
clean:
999-
rm -rf build-* stamps install-newlib-nano
1191+
rm -rf build-* stamps install-newlib-nano picolibc-cross.txt
10001192

10011193
.PHONY: report-gdb-newlib report-gdb-newlib-nano
10021194
report-gdb-newlib: stamps/check-gdb-newlib
@@ -1011,6 +1203,13 @@ report-gdb-newlib-nano: stamps/check-gdb-newlib-nano
10111203
if grep '^$$' $(patsubst %,$(srcdir)/test/gdb-newlib/%.log,$(NEWLIB_MULTILIB_NAMES)); then exit 1; fi
10121204
if find build-gdb-newlib -iname '*.sum' | xargs grep ^FAIL | sort | grep -F -v $(patsubst %,--file=$(srcdir)/test/gdb-newlib/%.log,$(NEWLIB_MULTILIB_NAMES)); then false; else true; fi
10131205

1206+
.PHONY: report-gdb-picolibc
1207+
report-gdb-picolibc: stamps/check-gdb-picolibc
1208+
stat $(patsubst %,$(srcdir)/test/gdb-picolibc/%.log,$(PICOLIBC_MULTILIB_NAMES)) || exit 1
1209+
# Fail if there are blank lines in the log file used as input for grep below.
1210+
if grep '^$$' $(patsubst %,$(srcdir)/test/gdb-picolibc/%.log,$(PICOLIBC_MULTILIB_NAMES)); then exit 1; fi
1211+
if find build-gdb-picolibc -iname '*.sum' | xargs grep ^FAIL | sort | grep -F -v $(patsubst %,--file=$(srcdir)/test/gdb-picolibc/%.log,$(PICOLIBC_MULTILIB_NAMES)); then false; else true; fi
1212+
10141213
.PHONY: report-gdb-linux
10151214
report-gdb-linux: stamps/check-gdb-linux
10161215
stat $(patsubst %,$(srcdir)/test/gdb-linux/%.log,$(GLIBC_MULTILIB_NAMES)) || exit 1

README.md

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,17 @@ run the following command:
5959

6060
You should now be able to use riscv64-unknown-elf-gcc and its cousins.
6161

62+
### Installation (Picolibc multilib)
63+
64+
To build the Picolibc cross-compiler, pick an install path. If you choose,
65+
say, `/opt/riscv`, then add `/opt/riscv/bin` to your `PATH` now. Then, simply
66+
run the following command:
67+
68+
./configure --prefix=/opt/riscv --enable-picolibc --enable-multilib
69+
make
70+
71+
You should now be able to use riscv64-unknown-elf-gcc and its cousins.
72+
6273
### Installation (Linux)
6374

6475
To build the Linux cross-compiler, pick an install path (that is writeable.)

0 commit comments

Comments
 (0)