Skip to content

Commit a504f73

Browse files
authored
Merge pull request #1475 from CARV-ICS-FORTH/uclibc
Add uClibc-ng support for NOMMU Linux builds
2 parents dada8f1 + 7a5cb7f commit a504f73

File tree

5 files changed

+1731
-858
lines changed

5 files changed

+1731
-858
lines changed

.gitmodules

+3
Original file line numberDiff line numberDiff line change
@@ -40,3 +40,6 @@
4040
path = llvm
4141
url = https://github.com/llvm/llvm-project.git
4242
branch = release/17.x
43+
[submodule "uclibc-ng"]
44+
path = uclibc-ng
45+
url = https://git.uclibc-ng.org/git/uclibc-ng.git

Makefile.in

+148-2
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ BINUTILS_SRCDIR := @with_binutils_src@
77
NEWLIB_SRCDIR := @with_newlib_src@
88
GLIBC_SRCDIR := @with_glibc_src@
99
MUSL_SRCDIR := @with_musl_src@
10+
UCLIBC_SRCDIR := @with_uclibc_src@
1011
LINUX_HEADERS_SRCDIR := @with_linux_headers_src@
1112
GDB_SRCDIR := @with_gdb_src@
1213
QEMU_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)
5859
endif
59-
ifneq (@GAWK@,/usr/bin/gawk)
60+
ifneq (@GAWK@, $(shell realpath $(shell which awk)))
6061
PATH := $(builddir)/scripts/wrapper/awk:$(PATH)
6162
endif
6263

@@ -85,6 +86,7 @@ make_tuple = riscv$(1)-unknown-$(2)
8586
LINUX_TUPLE ?= $(call make_tuple,$(XLEN),linux-gnu)
8687
NEWLIB_TUPLE ?= $(call make_tuple,$(XLEN),elf)
8788
MUSL_TUPLE ?= $(call make_tuple,$(XLEN),linux-musl)
89+
UCLIBC_TUPLE ?= $(call make_tuple,$(XLEN),linux-uclibc)
8890

8991
CFLAGS_FOR_TARGET := $(CFLAGS_FOR_TARGET_EXTRA) $(DEBUG_INFO) @target_cflags@ @cmodel@
9092
CXXFLAGS_FOR_TARGET := $(CXXFLAGS_FOR_TARGET_EXTRA) $(DEBUG_INFO) @target_cxxflags@ @cmodel@
@@ -124,6 +126,10 @@ MUSL_TARGET_FLAGS := $(MUSL_TARGET_FLAGS_EXTRA)
124126
MUSL_CC_FOR_TARGET ?= $(MUSL_TUPLE)-gcc
125127
MUSL_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+
127133
CONFIGURE_HOST = @configure_host@
128134
PREPARATION_STAMP:=stamps/check-write-permission
129135

@@ -142,6 +148,7 @@ musl:
142148
else
143149
musl: stamps/build-gcc-musl-stage2
144150
endif
151+
uclibc: stamps/build-gcc-uclibc-stage2
145152
ifeq (@enable_gdb@,--enable-gdb)
146153
newlib: stamps/build-gdb-newlib
147154
linux: stamps/build-gdb-linux
@@ -301,6 +308,12 @@ else
301308
MUSL_SRC_GIT :=
302309
endif
303310

311+
ifeq ($(findstring $(srcdir),$(UCLIBC_SRCDIR)),$(srcdir))
312+
UCLIBC_SRC_GIT := $(UCLIBC_SRCDIR)/.git
313+
else
314+
UCLIBC_SRC_GIT :=
315+
endif
316+
304317
ifeq ($(findstring $(srcdir),$(QEMU_SRCDIR)),$(srcdir))
305318
QEMU_SRC_GIT := $(QEMU_SRCDIR)/.git
306319
else
@@ -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+
9341080
stamps/build-spike: $(SPIKE_SRCDIR) $(SPIKE_SRC_GIT) $(PREPARATION_STAMP)
9351081
rm -rf $@ $(notdir $@)
9361082
mkdir $(notdir $@)

0 commit comments

Comments
 (0)