@@ -7,6 +7,7 @@ BINUTILS_SRCDIR := @with_binutils_src@
7
7
NEWLIB_SRCDIR := @with_newlib_src@
8
8
GLIBC_SRCDIR := @with_glibc_src@
9
9
MUSL_SRCDIR := @with_musl_src@
10
+ UCLIBC_SRCDIR := @with_uclibc_src@
10
11
LINUX_HEADERS_SRCDIR := @with_linux_headers_src@
11
12
GDB_SRCDIR := @with_gdb_src@
12
13
QEMU_SRCDIR := @with_qemu_src@
@@ -53,10 +54,10 @@ PATH := $(INSTALL_DIR)/bin:$(PATH)
53
54
# Check to see if we need wrapper scripts for awk/sed (which point to
54
55
# gawk/gsed on platforms where these aren't the default), otherwise
55
56
# don't override these as the wrappers don't always work.
56
- ifneq (@GSED@,/bin/ sed)
57
+ ifneq (@GSED@, $( shell realpath $( shell which sed) ) )
57
58
PATH := $(builddir)/scripts/wrapper/sed:$(PATH)
58
59
endif
59
- ifneq (@GAWK@,/usr/bin/gawk )
60
+ ifneq (@GAWK@, $( shell realpath $( shell which awk) ) )
60
61
PATH := $(builddir)/scripts/wrapper/awk:$(PATH)
61
62
endif
62
63
@@ -85,6 +86,7 @@ make_tuple = riscv$(1)-unknown-$(2)
85
86
LINUX_TUPLE ?= $(call make_tuple,$(XLEN ) ,linux-gnu)
86
87
NEWLIB_TUPLE ?= $(call make_tuple,$(XLEN ) ,elf)
87
88
MUSL_TUPLE ?= $(call make_tuple,$(XLEN ) ,linux-musl)
89
+ UCLIBC_TUPLE ?= $(call make_tuple,$(XLEN ) ,linux-uclibc)
88
90
89
91
CFLAGS_FOR_TARGET := $(CFLAGS_FOR_TARGET_EXTRA ) $(DEBUG_INFO ) @target_cflags@ @cmodel@
90
92
CXXFLAGS_FOR_TARGET := $(CXXFLAGS_FOR_TARGET_EXTRA ) $(DEBUG_INFO ) @target_cxxflags@ @cmodel@
@@ -124,6 +126,10 @@ MUSL_TARGET_FLAGS := $(MUSL_TARGET_FLAGS_EXTRA)
124
126
MUSL_CC_FOR_TARGET ?= $(MUSL_TUPLE ) -gcc
125
127
MUSL_CXX_FOR_TARGET ?= $(MUSL_TUPLE ) -g++
126
128
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
+
127
133
CONFIGURE_HOST = @configure_host@
128
134
PREPARATION_STAMP: =stamps/check-write-permission
129
135
@@ -142,6 +148,7 @@ musl:
142
148
else
143
149
musl : stamps/build-gcc-musl-stage2
144
150
endif
151
+ uclibc : stamps/build-gcc-uclibc-stage2
145
152
ifeq (@enable_gdb@,--enable-gdb)
146
153
newlib : stamps/build-gdb-newlib
147
154
linux : stamps/build-gdb-linux
@@ -301,6 +308,12 @@ else
301
308
MUSL_SRC_GIT :=
302
309
endif
303
310
311
+ ifeq ($(findstring $(srcdir ) ,$(UCLIBC_SRCDIR ) ) ,$(srcdir ) )
312
+ UCLIBC_SRC_GIT := $(UCLIBC_SRCDIR ) /.git
313
+ else
314
+ UCLIBC_SRC_GIT :=
315
+ endif
316
+
304
317
ifeq ($(findstring $(srcdir ) ,$(QEMU_SRCDIR ) ) ,$(srcdir ) )
305
318
QEMU_SRC_GIT := $(QEMU_SRCDIR ) /.git
306
319
else
@@ -931,6 +944,139 @@ stamps/build-gcc-musl-stage2: $(GCC_SRCDIR) $(GCC_SRC_GIT) stamps/build-musl-lin
931
944
cp -a $(INSTALL_DIR)/$(MUSL_TUPLE)/lib* $(SYSROOT)
932
945
mkdir -p $(dir $@) && touch $@
933
946
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
+
934
1080
stamps/build-spike : $(SPIKE_SRCDIR ) $(SPIKE_SRC_GIT ) $(PREPARATION_STAMP )
935
1081
rm -rf $@ $(notdir $@ )
936
1082
mkdir $(notdir $@ )
0 commit comments