From defdbb450577b32399b780a94ebbdf2221e23583 Mon Sep 17 00:00:00 2001 From: Rich Felker Date: Mon, 26 Feb 2018 21:02:16 +0000 Subject: [PATCH] litecross: separate binutils and gcc build trees putting them together in one tree only works if they're "sufficiently close" in version, due to each needing (approximately) its own version of libiberty and possibly the top-level configure infrastructure. eventually, I want to stage the installs of binutils and gcc under the build directory, so that the new binutils can be used from their staged install paths. leave that refactorization for later; for now, give gcc the binutils it needs directly out of the binutils build directories. --- litecross/Makefile | 97 +++++++++++++++++++++++++++++++--------------- 1 file changed, 66 insertions(+), 31 deletions(-) diff --git a/litecross/Makefile b/litecross/Makefile index 46584fd..c0dce0a 100644 --- a/litecross/Makefile +++ b/litecross/Makefile @@ -10,7 +10,7 @@ COMMON_CONFIG = GCC_CONFIG = TOOLCHAIN_CONFIG = -XGCC_DIR = ../obj_toolchain/gcc +XGCC_DIR = ../obj_gcc/gcc XGCC = $(XGCC_DIR)/xgcc -B $(XGCC_DIR) -include config.mak @@ -49,7 +49,14 @@ MAKE += INFO_DEPS= infodir= MAKE += ac_cv_prog_lex_root=lex.yy.c MAKE += MAKEINFO=false -FULL_TOOLCHAIN_CONFIG = --enable-languages=c,c++ \ +FULL_BINUTILS_CONFIG = \ + $(COMMON_CONFIG) $(BINUTILS_CONFIG) $(TOOLCHAIN_CONFIG) \ + --disable-werror \ + --target=$(TARGET) --prefix= \ + --libdir=/lib --disable-multilib \ + --with-sysroot=$(SYSROOT) + +FULL_GCC_CONFIG = --enable-languages=c,c++ \ $(GCC_CONFIG_FOR_TARGET) \ $(COMMON_CONFIG) $(GCC_CONFIG) $(TOOLCHAIN_CONFIG) \ --disable-werror \ @@ -72,16 +79,28 @@ endif ifeq ($(HOST),) SYSROOT = /$(TARGET) -FULL_TOOLCHAIN_CONFIG += --with-build-sysroot=$(CURDIR)/obj_sysroot -FULL_MUSL_CONFIG += CC="$(XGCC)" LIBCC="../obj_toolchain/$(TARGET)/libgcc/libgcc.a" -MUSL_VARS = AR=../obj_toolchain/binutils/ar RANLIB=../obj_toolchain/binutils/ranlib -obj_musl/.lc_configured: | obj_toolchain/gcc/.lc_built -obj_musl/.lc_built: | obj_toolchain/$(TARGET)/libgcc/libgcc.a -obj_toolchain/gcc/.lc_built: | obj_sysroot/usr obj_sysroot/lib32 obj_sysroot/lib64 obj_sysroot/include -obj_toolchain/.lc_built: | obj_sysroot/.lc_libs obj_sysroot/.lc_headers +FULL_GCC_CONFIG += --with-build-sysroot=$(CURDIR)/obj_sysroot \ + AR_FOR_TARGET=$(PWD)/obj_binutils/binutils/ar \ + AS_FOR_TARGET=$(PWD)/obj_binutils/gas/as-new \ + LD_FOR_TARGET=$(PWD)/obj_binutils/ld/ld-new \ + NM_FOR_TARGET=$(PWD)/obj_binutils/binutils/nm-new \ + OBJCOPY_FOR_TARGET=$(PWD)/obj_binutils/binutils/objcopy \ + OBJDUMP_FOR_TARGET=$(PWD)/obj_binutils/binutils/objdump \ + RANLIB_FOR_TARGET=$(PWD)/obj_binutils/binutils/ranlib \ + READELF_FOR_TARGET=$(PWD)/obj_binutils/binutils/readelf \ + STRIP_FOR_TARGET=$(PWD)/obj_binutils/binutils/strip-new \ + # end +FULL_MUSL_CONFIG += CC="$(XGCC)" LIBCC="../obj_gcc/$(TARGET)/libgcc/libgcc.a" +MUSL_VARS = AR=../obj_binutils/binutils/ar RANLIB=../obj_binutils/binutils/ranlib +obj_musl/.lc_configured: | obj_gcc/gcc/.lc_built +obj_musl/.lc_built: | obj_gcc/$(TARGET)/libgcc/libgcc.a +obj_gcc/gcc/.lc_built: | obj_sysroot/usr obj_sysroot/lib32 obj_sysroot/lib64 obj_sysroot/include +obj_gcc/.lc_built: | obj_sysroot/.lc_libs obj_sysroot/.lc_headers +obj_gcc/.lc_configured: obj_binutils/.lc_built else SYSROOT = / -FULL_TOOLCHAIN_CONFIG += --host=$(HOST) +FULL_BINUTILS_CONFIG += --host=$(HOST) +FULL_GCC_CONFIG += --host=$(HOST) MUSL_VARS = endif @@ -95,54 +114,59 @@ install: all else -all: musl toolchain +all: musl gcc binutils -install: install-musl install-toolchain +install: install-musl install-gcc install-binutils musl: obj_musl/.lc_built -toolchain: obj_toolchain/.lc_built +toolchain: gcc binutils + +install-toolchain: install-gcc install-binutils + +gcc: obj_gcc/.lc_built + +binutils: obj_binutils/.lc_built .PHONY: all musl toolchain install-musl install-toolchain clean src_binutils: | $(BINUTILS_SRCDIR) ln -sf $(BINUTILS_SRCDIR) $@ -src_gcc: | $(GCC_SRCDIR) +src_gcc_base: | $(GCC_SRCDIR) ln -sf $(GCC_SRCDIR) $@ src_musl: | $(MUSL_SRCDIR) ln -sf $(MUSL_SRCDIR) $@ ifneq ($(GMP_SRCDIR),) -src_toolchain: src_gmp +src_gcc: src_gmp src_gmp: | $(GMP_SRCDIR) ln -sf "$(GMP_SRCDIR)" $@ endif ifneq ($(MPC_SRCDIR),) -src_toolchain: src_mpc +src_gcc: src_mpc src_mpc: | $(MPC_SRCDIR) ln -sf "$(MPC_SRCDIR)" $@ endif ifneq ($(MPFR_SRCDIR),) -src_toolchain: src_mpfr +src_gcc: src_mpfr src_mpfr: | $(MPFR_SRCDIR) ln -sf "$(MPFR_SRCDIR)" $@ endif ifneq ($(ISL_SRCDIR),) -src_toolchain: src_isl +src_gcc: src_isl src_isl: | $(ISL_SRCDIR) ln -sf "$(ISL_SRCDIR)" $@ endif -src_toolchain: src_binutils src_gcc +src_gcc: src_gcc_base rm -rf $@ $@.tmp mkdir $@.tmp - cd $@.tmp && ln -sf ../src_binutils/* . - cd $@.tmp && ln -sf ../src_gcc/* . + cd $@.tmp && ln -sf ../src_gcc_base/* . $(if $(GMP_SRCDIR),cd $@.tmp && ln -sf ../src_gmp gmp) $(if $(MPC_SRCDIR),cd $@.tmp && ln -sf ../src_mpc mpc) $(if $(MPFR_SRCDIR),cd $@.tmp && ln -sf ../src_mpfr mpfr) @@ -164,12 +188,20 @@ obj_sysroot/lib32: | obj_sysroot obj_sysroot/lib64: | obj_sysroot ln -sf lib $@ -obj_toolchain/.lc_configured: | obj_toolchain src_toolchain - cd obj_toolchain && ../src_toolchain/configure $(FULL_TOOLCHAIN_CONFIG) +obj_binutils/.lc_configured: | obj_binutils src_binutils + cd obj_binutils && ../src_binutils/configure $(FULL_BINUTILS_CONFIG) touch $@ -obj_toolchain/gcc/.lc_built: | obj_toolchain/.lc_configured - cd obj_toolchain && $(MAKE) MAKE="$(MAKE)" all-gcc +obj_binutils/.lc_built: | obj_binutils/.lc_configured + cd obj_binutils && $(MAKE) MAKE="$(MAKE)" all + touch $@ + +obj_gcc/.lc_configured: | obj_gcc src_gcc + cd obj_gcc && ../src_gcc/configure $(FULL_GCC_CONFIG) + touch $@ + +obj_gcc/gcc/.lc_built: | obj_gcc/.lc_configured + cd obj_gcc && $(MAKE) MAKE="$(MAKE)" all-gcc touch $@ obj_musl/.lc_configured: | obj_musl src_musl @@ -180,8 +212,8 @@ obj_sysroot/.lc_headers: | obj_musl/.lc_configured obj_sysroot cd obj_musl && $(MAKE) DESTDIR=$(CURDIR)/obj_sysroot install-headers touch $@ -obj_toolchain/$(TARGET)/libgcc/libgcc.a: | obj_sysroot/.lc_headers - cd obj_toolchain && $(MAKE) MAKE="$(MAKE) enable_shared=no" all-target-libgcc +obj_gcc/$(TARGET)/libgcc/libgcc.a: | obj_sysroot/.lc_headers + cd obj_gcc && $(MAKE) MAKE="$(MAKE) enable_shared=no" all-target-libgcc obj_musl/.lc_built: | obj_musl/.lc_configured cd obj_musl && $(MAKE) $(MUSL_VARS) @@ -191,15 +223,18 @@ obj_sysroot/.lc_libs: | obj_musl/.lc_built cd obj_musl && $(MAKE) $(MUSL_VARS) DESTDIR=$(CURDIR)/obj_sysroot install touch $@ -obj_toolchain/.lc_built: | obj_toolchain/.lc_configured obj_toolchain/gcc/.lc_built - cd obj_toolchain && $(MAKE) MAKE="$(MAKE)" +obj_gcc/.lc_built: | obj_gcc/.lc_configured obj_gcc/gcc/.lc_built + cd obj_gcc && $(MAKE) MAKE="$(MAKE)" touch $@ install-musl: | obj_musl/.lc_built cd obj_musl && $(MAKE) $(MUSL_VARS) DESTDIR=$(DESTDIR)$(OUTPUT)$(SYSROOT) install -install-toolchain: | obj_toolchain/.lc_built - cd obj_toolchain && $(MAKE) MAKE="$(MAKE)" DESTDIR=$(DESTDIR)$(OUTPUT) install +install-binutils: | obj_binutils/.lc_built + cd obj_binutils && $(MAKE) MAKE="$(MAKE)" DESTDIR=$(DESTDIR)$(OUTPUT) install + +install-gcc: | obj_gcc/.lc_built + cd obj_gcc && $(MAKE) MAKE="$(MAKE)" DESTDIR=$(DESTDIR)$(OUTPUT) install ln -sf $(TARGET)-gcc $(DESTDIR)$(OUTPUT)/bin/$(TARGET)-cc ifneq ($(LINUX_SRCDIR),)