@@ -7,6 +7,7 @@ BINUTILS_SRCDIR := @with_binutils_src@
77NEWLIB_SRCDIR := @with_newlib_src@
88GLIBC_SRCDIR := @with_glibc_src@
99MUSL_SRCDIR := @with_musl_src@
10+ UCLIBC_SRCDIR := @with_uclibc_src@
1011LINUX_HEADERS_SRCDIR := @with_linux_headers_src@
1112GDB_SRCDIR := @with_gdb_src@
1213QEMU_SRCDIR := @with_qemu_src@
@@ -53,10 +54,10 @@ PATH := $(INSTALL_DIR)/bin:$(PATH)
5354# Check to see if we need wrapper scripts for awk/sed (which point to
5455# gawk/gsed on platforms where these aren't the default), otherwise
5556# don't override these as the wrappers don't always work.
56- ifneq (@GSED@,/bin/ sed)
57+ ifneq (@GSED@, $( shell realpath $( shell which sed) ) )
5758 PATH := $(builddir)/scripts/wrapper/sed:$(PATH)
5859endif
59- ifneq (@GAWK@,/usr/bin/gawk )
60+ ifneq (@GAWK@, $( shell realpath $( shell which awk) ) )
6061 PATH := $(builddir)/scripts/wrapper/awk:$(PATH)
6162endif
6263
@@ -85,6 +86,7 @@ make_tuple = riscv$(1)-unknown-$(2)
8586LINUX_TUPLE ?= $(call make_tuple,$(XLEN ) ,linux-gnu)
8687NEWLIB_TUPLE ?= $(call make_tuple,$(XLEN ) ,elf)
8788MUSL_TUPLE ?= $(call make_tuple,$(XLEN ) ,linux-musl)
89+ UCLIBC_TUPLE ?= $(call make_tuple,$(XLEN ) ,linux-uclibc)
8890
8991CFLAGS_FOR_TARGET := $(CFLAGS_FOR_TARGET_EXTRA ) $(DEBUG_INFO ) @target_cflags@ @cmodel@
9092CXXFLAGS_FOR_TARGET := $(CXXFLAGS_FOR_TARGET_EXTRA ) $(DEBUG_INFO ) @target_cxxflags@ @cmodel@
@@ -124,6 +126,10 @@ MUSL_TARGET_FLAGS := $(MUSL_TARGET_FLAGS_EXTRA)
124126MUSL_CC_FOR_TARGET ?= $(MUSL_TUPLE ) -gcc
125127MUSL_CXX_FOR_TARGET ?= $(MUSL_TUPLE ) -g++
126128
129+ UCLIBC_TARGET_FLAGS := $(UCLIBC_TARGET_FLAGS_EXTRA )
130+ UCLIBC_CC_FOR_TARGET ?= $(UCLIBC_TUPLE ) -gcc
131+ UCLIBC_CXX_FOR_TARGET ?= $(UCLIBC_TUPLE ) -g++
132+
127133CONFIGURE_HOST = @configure_host@
128134PREPARATION_STAMP: =stamps/check-write-permission
129135
@@ -142,6 +148,7 @@ musl:
142148else
143149musl : stamps/build-gcc-musl-stage2
144150endif
151+ uclibc : stamps/build-gcc-uclibc-stage2
145152ifeq (@enable_gdb@,--enable-gdb)
146153newlib : stamps/build-gdb-newlib
147154linux : stamps/build-gdb-linux
@@ -301,6 +308,12 @@ else
301308MUSL_SRC_GIT :=
302309endif
303310
311+ ifeq ($(findstring $(srcdir ) ,$(UCLIBC_SRCDIR ) ) ,$(srcdir ) )
312+ UCLIBC_SRC_GIT := $(UCLIBC_SRCDIR ) /.git
313+ else
314+ UCLIBC_SRC_GIT :=
315+ endif
316+
304317ifeq ($(findstring $(srcdir ) ,$(QEMU_SRCDIR ) ) ,$(srcdir ) )
305318QEMU_SRC_GIT := $(QEMU_SRCDIR ) /.git
306319else
@@ -931,6 +944,139 @@ stamps/build-gcc-musl-stage2: $(GCC_SRCDIR) $(GCC_SRC_GIT) stamps/build-musl-lin
931944 cp -a $(INSTALL_DIR)/$(MUSL_TUPLE)/lib* $(SYSROOT)
932945 mkdir -p $(dir $@) && touch $@
933946
947+ #
948+ # UCLIBC
949+ #
950+
951+ stamps/build-binutils-uclibc : $(BINUTILS_SRCDIR ) $(BINUTILS_SRC_GIT ) $(PREPARATION_STAMP )
952+ rm -rf $@ $(notdir $@ )
953+ mkdir $(notdir $@ )
954+ # CC_FOR_TARGET is required for the ld testsuite.
955+ cd $(notdir $@) && CC_FOR_TARGET=$(UCLIBC_CC_FOR_TARGET) $</configure \
956+ --target=$(UCLIBC_TUPLE) \
957+ $(CONFIGURE_HOST) \
958+ --prefix=$(INSTALL_DIR) \
959+ --with-sysroot=$(SYSROOT) \
960+ --enable-plugins \
961+ $(MULTILIB_FLAGS) \
962+ @with_guile@ \
963+ --disable-werror \
964+ --disable-nls \
965+ $(BINUTILS_TARGET_FLAGS) \
966+ --disable-gdb \
967+ --disable-sim \
968+ --disable-libdecnumber \
969+ --disable-readline \
970+ $(WITH_ISA_SPEC)
971+ $(MAKE) -C $(notdir $@)
972+ $(MAKE) -C $(notdir $@) install
973+ mkdir -p $(dir $@) && touch $@
974+
975+ stamps/build-gcc-uclibc-stage1 : $(GCC_SRCDIR ) $(GCC_SRC_GIT ) stamps/build-binutils-uclibc \
976+ stamps/build-linux-headers
977+ if test -f $</contrib/download_prerequisites && test "@NEED_GCC_EXTERNAL_LIBRARIES@" = "true"; then cd $< && ./contrib/download_prerequisites; fi
978+ rm -rf $@ $(notdir $@)
979+ mkdir $(notdir $@)
980+ cd $(notdir $@) && $</configure \
981+ --target=$(UCLIBC_TUPLE) \
982+ $(CONFIGURE_HOST) \
983+ --prefix=$(INSTALL_DIR) \
984+ --without-headers \
985+ --disable-shared \
986+ --disable-threads \
987+ @with_system_zlib@ \
988+ --enable-tls \
989+ --enable-languages=c \
990+ --disable-libatomic \
991+ --disable-libmudflap \
992+ --disable-libssp \
993+ --disable-libquadmath \
994+ --disable-libgomp \
995+ --disable-nls \
996+ --disable-bootstrap \
997+ --src=$(gccsrcdir) \
998+ $(GCC_CHECKING_FLAGS) \
999+ --disable-multilib \
1000+ $(WITH_ABI) \
1001+ $(WITH_ARCH) \
1002+ $(WITH_TUNE) \
1003+ $(WITH_ISA_SPEC) \
1004+ $(GCC_EXTRA_CONFIGURE_FLAGS) \
1005+ CFLAGS_FOR_TARGET="-O2 $(CFLAGS_FOR_TARGET)" \
1006+ CXXFLAGS_FOR_TARGET="-O2 $(CXXFLAGS_FOR_TARGET)"
1007+ $(MAKE) -C $(notdir $@) inhibit-libc=true all-gcc
1008+ $(MAKE) -C $(notdir $@) inhibit-libc=true install-gcc
1009+ $(MAKE) -C $(notdir $@) inhibit-libc=true all-target-libgcc
1010+ $(MAKE) -C $(notdir $@) inhibit-libc=true install-target-libgcc
1011+ mkdir -p $(dir $@) && touch $@
1012+
1013+ stamps/build-uclibc-linux : $(UCLIBC_SRCDIR ) $(UCLIBC_SRC_GIT ) stamps/build-gcc-uclibc-stage1
1014+ rm -rf $@ $(notdir $@ )
1015+ mkdir $(notdir $@ )
1016+
1017+ echo "# ARCH_USE_MMU is not set" > $(notdir $@)/.config && \
1018+ echo "UCLIBC_HAS_LINUXTHREADS=y" >> $(notdir $@)/.config && \
1019+ echo "DO_C99_MATH=y" >> $(notdir $@)/.config && \
1020+ echo "UCLIBC_HAS_UTMPX=y" >> $(notdir $@)/.config && \
1021+ echo "UCLIBC_SUSV3_LEGACY=y" >> $(notdir $@)/.config && \
1022+ echo "UCLIBC_SUSV3_LEGACY_MACROS=y" >> $(notdir $@)/.config && \
1023+ echo "UCLIBC_SUSV4_LEGACY=y" >> $(notdir $@)/.config && \
1024+ echo "UCLIBC_HAS_RESOLVER_SUPPORT=y" >> $(notdir $@)/.config && \
1025+ echo "KERNEL_HEADERS=\"$(LINUX_HEADERS_SRCDIR)\"" >> $(notdir $@)/.config && \
1026+ echo "RUNTIME_PREFIX=\"/\"" >> $(notdir $@)/.config && \
1027+ echo "DEVEL_PREFIX=\"/usr\"" >> $(notdir $@)/.config && \
1028+ O="$$(realpath $(notdir $@))" \
1029+ ARCH=riscv$(XLEN) \
1030+ CROSS_COMPILE=$(UCLIBC_TUPLE)- \
1031+ $(MAKE) -C $< olddefconfig
1032+
1033+ O="$$(realpath $(notdir $@))" \
1034+ ARCH=riscv$(XLEN) \
1035+ PREFIX=$(SYSROOT) \
1036+ CROSS_COMPILE=$(UCLIBC_TUPLE)- \
1037+ UCLIBC_EXTRA_CFLAGS="$(CFLAGS_FOR_TARGET)" \
1038+ UCLIBC_EXTRA_CPPFLAGS="$(CXXFLAGS_FOR_TARGET)" \
1039+ $(MAKE) -C $< install
1040+ cp -a $(notdir $@)/lib/*\.so $(SYSROOT)/usr/lib/
1041+ cp -a $(notdir $@)/lib/*\.so.* $(SYSROOT)/usr/lib/
1042+ ln -f $(SYSROOT)/usr/lib/crt1.o $(SYSROOT)/usr/lib/Scrt1.o
1043+
1044+ mkdir -p $(dir $@) && touch $@
1045+
1046+ stamps/build-gcc-uclibc-stage2 : $(GCC_SRCDIR ) $(GCC_SRC_GIT ) stamps/build-uclibc-linux
1047+ rm -rf $@ $(notdir $@ )
1048+ mkdir $(notdir $@ )
1049+ cd $(notdir $@ ) && $< /configure \
1050+ --target=$(UCLIBC_TUPLE ) \
1051+ $(CONFIGURE_HOST ) \
1052+ --prefix=$(INSTALL_DIR ) \
1053+ --with-sysroot=$(SYSROOT ) \
1054+ @with_system_zlib@ \
1055+ --enable-tls \
1056+ --enable-languages=c,c++ \
1057+ --disable-shared \
1058+ --disable-libmudflap \
1059+ --disable-libssp \
1060+ --disable-libquadmath \
1061+ --disable-libsanitizer \
1062+ --disable-nls \
1063+ --disable-bootstrap \
1064+ --src=$(gccsrcdir ) \
1065+ $(GCC_CHECKING_FLAGS ) \
1066+ --disable-multilib \
1067+ $(WITH_ABI ) \
1068+ $(WITH_ARCH ) \
1069+ $(WITH_TUNE ) \
1070+ $(WITH_ISA_SPEC ) \
1071+ $(GCC_EXTRA_CONFIGURE_FLAGS ) \
1072+ CFLAGS_FOR_TARGET=" -O2 $( CFLAGS_FOR_TARGET) " \
1073+ CXXFLAGS_FOR_TARGET=" -O2 $( CXXFLAGS_FOR_TARGET) "
1074+ $(MAKE ) -C $(notdir $@ )
1075+ $(MAKE ) -C $(notdir $@ ) install
1076+ cp -a $(INSTALL_DIR ) /$(UCLIBC_TUPLE ) /lib* $(SYSROOT )
1077+ mkdir -p $(dir $@ ) && touch $@
1078+
1079+
9341080stamps/build-spike : $(SPIKE_SRCDIR ) $(SPIKE_SRC_GIT ) $(PREPARATION_STAMP )
9351081 rm -rf $@ $(notdir $@ )
9361082 mkdir $(notdir $@ )
0 commit comments