diff options
-rw-r--r-- | Makefile.in | 40 | ||||
-rw-r--r-- | README.md | 10 | ||||
-rwxr-xr-x | configure | 17 | ||||
-rw-r--r-- | configure.ac | 10 |
4 files changed, 67 insertions, 10 deletions
diff --git a/Makefile.in b/Makefile.in index c849d77..daab494 100644 --- a/Makefile.in +++ b/Makefile.in @@ -119,8 +119,14 @@ MUSL_CC_FOR_TARGET ?= $(MUSL_TUPLE)-gcc MUSL_CXX_FOR_TARGET ?= $(MUSL_TUPLE)-g++ CONFIGURE_HOST = @configure_host@ +PREPARATION_STAMP:=stamps/check-write-permission all: @default_target@ +ifeq (@enable_host_gcc@,--enable-host-gcc) +PREPARATION_STAMP+= stamps/install-host-gcc +PATH := $(builddir)/install-host-gcc/bin:$(PATH) +GCC_CHECKING_FLAGS := $(GCC_CHECKING_FLAGS) --enable-werror-always +endif newlib: stamps/build-gcc-newlib-stage2 linux: stamps/build-gcc-linux-stage2 ifneq (,$(findstring riscv32,$(MUSL_TUPLE))) @@ -324,11 +330,25 @@ $(srcdir)/%/.git: flock `git rev-parse --git-dir`/config git submodule init $(dir $@) && \ flock `git rev-parse --git-dir`/config git submodule update $(dir $@) +stamps/install-host-gcc: $(GCC_SRCDIR) $(GCC_SRC_GIT) + if test -f $</contrib/download_prerequisites && test "@NEED_GCC_EXTERNAL_LIBRARIES@" = "true"; then cd $< && ./contrib/download_prerequisites; fi + rm -rf $@ $(notdir $@) + mkdir $(notdir $@) + cd $(notdir $@) && $</configure \ + --prefix=$(builddir)/install-host-gcc \ + @with_system_zlib@ \ + --enable-languages=c,c++ \ + --disable-bootstrap \ + --disable-multilib + $(MAKE) -C $(notdir $@) + $(MAKE) -C $(notdir $@) install + mkdir -p $(dir $@) && touch $@ + # # GLIBC # -stamps/build-binutils-linux: $(BINUTILS_SRCDIR) $(BINUTILS_SRC_GIT) stamps/check-write-permission +stamps/build-binutils-linux: $(BINUTILS_SRCDIR) $(BINUTILS_SRC_GIT) $(PREPARATION_STAMP) rm -rf $@ $(notdir $@) mkdir $(notdir $@) # CC_FOR_TARGET is required for the ld testsuite. @@ -351,7 +371,7 @@ stamps/build-binutils-linux: $(BINUTILS_SRCDIR) $(BINUTILS_SRC_GIT) stamps/check $(MAKE) -C $(notdir $@) install mkdir -p $(dir $@) && touch $@ -stamps/build-gdb-linux: $(GDB_SRCDIR) $(GDB_SRC_GIT) +stamps/build-gdb-linux: $(GDB_SRCDIR) $(GDB_SRC_GIT) $(PREPARATION_STAMP) rm -rf $@ $(notdir $@) mkdir $(notdir $@) # CC_FOR_TARGET is required for the ld testsuite. @@ -498,7 +518,7 @@ stamps/build-gcc-linux-stage2: $(GCC_SRCDIR) $(GCC_SRC_GIT) $(addprefix stamps/b cp -a $(INSTALL_DIR)/$(LINUX_TUPLE)/lib* $(SYSROOT) mkdir -p $(dir $@) && touch $@ -stamps/build-binutils-linux-native: $(BINUTILS_SRCDIR) $(BINUTILS_SRC_GIT) stamps/build-gcc-linux-stage2 stamps/check-write-permission +stamps/build-binutils-linux-native: $(BINUTILS_SRCDIR) $(BINUTILS_SRC_GIT) stamps/build-gcc-linux-stage2 $(PREPARATION_STAMP) rm -rf $@ $(notdir $@) mkdir $(notdir $@) cd $(notdir $@) && $</configure \ @@ -555,7 +575,7 @@ stamps/build-gcc-linux-native: $(GCC_SRCDIR) $(GCC_SRC_GIT) stamps/build-gcc-lin # NEWLIB # -stamps/build-binutils-newlib: $(BINUTILS_SRCDIR) $(BINUTILS_SRC_GIT) stamps/check-write-permission +stamps/build-binutils-newlib: $(BINUTILS_SRCDIR) $(BINUTILS_SRC_GIT) $(PREPARATION_STAMP) rm -rf $@ $(notdir $@) mkdir $(notdir $@) # CC_FOR_TARGET is required for the ld testsuite. @@ -575,7 +595,7 @@ stamps/build-binutils-newlib: $(BINUTILS_SRCDIR) $(BINUTILS_SRC_GIT) stamps/chec $(MAKE) -C $(notdir $@) install mkdir -p $(dir $@) && touch $@ -stamps/build-gdb-newlib: $(GDB_SRCDIR) $(GDB_SRC_GIT) +stamps/build-gdb-newlib: $(GDB_SRCDIR) $(GDB_SRC_GIT) $(PREPARATION_STAMP) rm -rf $@ $(notdir $@) mkdir $(notdir $@) # CC_FOR_TARGET is required for the ld testsuite. @@ -741,7 +761,7 @@ stamps/build-gcc-newlib-stage2: $(GCC_SRCDIR) $(GCC_SRC_GIT) stamps/build-newlib # MUSL # -stamps/build-binutils-musl: $(BINUTILS_SRCDIR) $(BINUTILS_SRC_GIT) stamps/check-write-permission +stamps/build-binutils-musl: $(BINUTILS_SRCDIR) $(BINUTILS_SRC_GIT) $(PREPARATION_STAMP) rm -rf $@ $(notdir $@) mkdir $(notdir $@) # CC_FOR_TARGET is required for the ld testsuite. @@ -870,7 +890,7 @@ stamps/build-gcc-musl-stage2: $(GCC_SRCDIR) $(GCC_SRC_GIT) stamps/build-musl-lin cp -a $(INSTALL_DIR)/$(MUSL_TUPLE)/lib* $(SYSROOT) mkdir -p $(dir $@) && touch $@ -stamps/build-spike: $(SPIKE_SRCDIR) $(SPIKE_SRC_GIT) +stamps/build-spike: $(SPIKE_SRCDIR) $(SPIKE_SRC_GIT) $(PREPARATION_STAMP) rm -rf $@ $(notdir $@) mkdir $(notdir $@) cd $(notdir $@) && $</configure \ @@ -906,7 +926,7 @@ stamps/build-pk64: $(PK_SRCDIR) $(PK_SRC_GIT) stamps/build-gcc-newlib-stage2 mkdir -p $(dir $@) date > $@ -stamps/build-qemu: $(QEMU_SRCDIR) $(QEMU_SRC_GIT) +stamps/build-qemu: $(QEMU_SRCDIR) $(QEMU_SRC_GIT) $(PREPARATION_STAMP) rm -rf $@ $(notdir $@) mkdir $(notdir $@) cd $(notdir $@) && $</configure \ @@ -971,7 +991,7 @@ stamps/build-llvm-newlib: $(LLVM_SRCDIR) $(LLVM_SRC_GIT) stamps/build-gcc-newlib ln -s -f clang++ $(NEWLIB_TUPLE)-clang++ mkdir -p $(dir $@) && touch $@ -stamps/build-dejagnu: $(DEJAGNU_SRCDIR) $(DEJAGNU_SRC_GIT) +stamps/build-dejagnu: $(DEJAGNU_SRCDIR) $(DEJAGNU_SRC_GIT) $(PREPARATION_STAMP) rm -rf $@ $(notdir $@) mkdir $(notdir $@) cd $(notdir $@) && $</configure \ @@ -1101,7 +1121,7 @@ report-binutils-linux: stamps/check-binutils-linux `find build-binutils-linux/ -name *.sum |paste -sd "," -` clean: - rm -rf build-* stamps install-newlib-nano + rm -rf build-* install-* stamps install-newlib-nano .PHONY: report-gdb-newlib report-gdb-newlib-nano report-gdb-newlib: stamps/check-gdb-newlib @@ -447,3 +447,13 @@ Here is the list of configure option for specify source tree: --with-pk-src --with-qemu-src --with-spike-src + +#### Build host GCC to check for compiler warnings + +GCC contributions have to meet several requirements to qualify for upstream +inclusion. Warning free compilation with a compiler build from the same +sources is among them. The flag `--enable-host-gcc` does exaclty that: + +* Initially a host GCC will be built +* This host GCC is then used to build the cross compiler +* The cross compiler will be built with `-Werror` to identify code issues @@ -598,6 +598,7 @@ with_glibc_src with_newlib_src with_binutils_src with_gcc_src +enable_host_gcc enable_llvm enable_gdb with_guile @@ -697,6 +698,7 @@ with_system_zlib with_guile enable_gdb enable_llvm +enable_host_gcc with_gcc_src with_binutils_src with_newlib_src @@ -1340,6 +1342,7 @@ Optional Features: [--disable-gcc-checking] --disable-gdb Don't build GDB, as it's not upstream --enable-llvm Build LLVM (clang) + --enable-host-gcc Build host GCC to build cross toolchain --enable-libsanitizer Build libsanitizer, which only supports rv64 --enable-qemu-system Build qemu with system-mode emulation @@ -3623,6 +3626,20 @@ else fi +# Check whether --enable-host-gcc was given. +if test "${enable_host_gcc+set}" = set; then : + enableval=$enable_host_gcc; enable_host_gcc=yes +fi + + +if test "x$enable_host_gcc" != xyes; then : + enable_host_gcc=--disable-host-gcc + +else + enable_host_gcc=--enable-host-gcc + +fi + { diff --git a/configure.ac b/configure.ac index 1756fde..68b6b31 100644 --- a/configure.ac +++ b/configure.ac @@ -259,6 +259,16 @@ AS_IF([test "x$enable_llvm" != xyes], [AC_SUBST(enable_llvm, --disable-llvm)], [AC_SUBST(enable_llvm, --enable-llvm)]) +AC_ARG_ENABLE(host_gcc, + [AS_HELP_STRING([--enable-host-gcc], + [Build host GCC to build cross toolchain])], + [enable_host_gcc=yes], + []) + +AS_IF([test "x$enable_host_gcc" != xyes], + [AC_SUBST(enable_host_gcc, --disable-host-gcc)], + [AC_SUBST(enable_host_gcc, --enable-host-gcc)]) + AC_DEFUN([AX_ARG_WITH_SRC], [{m4_pushdef([opt_name], with_$1_src) AC_ARG_WITH($1-src, |