From c2d4bd4226770da03c4796c7de77bee28ec79319 Mon Sep 17 00:00:00 2001 From: Mohammad Akhlaghi Date: Thu, 29 Nov 2018 02:38:40 +0000 Subject: GCC is now installed by the pipeline The pipeline now installs GCC and all its necessary prerequisites. --- reproduce/config/pipeline/dependency-versions.mk | 6 + reproduce/src/make/dependencies-basic.mk | 159 +++++++++++++++++------ reproduce/src/make/dependencies-build-rules.mk | 7 +- reproduce/src/make/dependencies.mk | 61 +++++---- 4 files changed, 160 insertions(+), 73 deletions(-) (limited to 'reproduce') diff --git a/reproduce/config/pipeline/dependency-versions.mk b/reproduce/config/pipeline/dependency-versions.mk index ca18f8b..261b35b 100644 --- a/reproduce/config/pipeline/dependency-versions.mk +++ b/reproduce/config/pipeline/dependency-versions.mk @@ -2,6 +2,7 @@ # Programs bash-version = 4.4.18 +binutils-version = 2.31.1 bzip2-version = 1.0.6 cmake-version = 3.12.4 coreutils-version = 8.30 @@ -9,14 +10,19 @@ diffutils-version = 3.6 findutils-version = 4.6.0.199-e3fc flock-version = 0.2.3 gawk-version = 4.2.1 +gcc-version = 8.2.0 ghostscript-version = 9.26 git-version = 2.19.1 +gmp-version = 6.1.2 gnuastro-version = 0.7.66-0ad3 grep-version = 3.1 gzip-version = 1.9.10-051e +isl-version = 0.18 libtool-version = 2.4.6 lzip-version = 1.20 make-version = 4.2.90 +mpfr-version = 4.0.1 +mpc-version = 1.1.0 pkgconfig-version = 0.29.2 sed-version = 4.5 tar-version = 1.30 diff --git a/reproduce/src/make/dependencies-basic.mk b/reproduce/src/make/dependencies-basic.mk index c1e227b..6bd389e 100644 --- a/reproduce/src/make/dependencies-basic.mk +++ b/reproduce/src/make/dependencies-basic.mk @@ -48,6 +48,7 @@ tdir = $(BDIR)/dependencies/tarballs idir = $(BDIR)/dependencies/installed ibdir = $(BDIR)/dependencies/installed/bin ildir = $(BDIR)/dependencies/installed/lib +ilidir = $(BDIR)/dependencies/installed/lib/built # We'll need the system's PATH for making links to low-level programs we # won't be building ourselves. @@ -62,7 +63,7 @@ export LDFLAGS := -L$(ildir) $(LDFLAGS) export CPPFLAGS := -I$(idir)/include $(CPPFLAGS) export LD_LIBRARY_PATH := $(ildir):$(LD_LIBRARY_PATH) -top-level-programs = bash which ls sed gawk grep diff find pkg-config +top-level-programs = gcc pkg-config all: $(foreach p, $(top-level-programs), $(ibdir)/$(p)) @@ -92,15 +93,21 @@ all: $(foreach p, $(top-level-programs), $(ibdir)/$(p)) # However, downloading from this link is slow (because its just a link). So # its easier to just keep a with the others. tarballs = $(foreach t, bash-$(bash-version).tar.gz \ + binutils-$(binutils-version).tar.lz \ bzip2-$(bzip2-version).tar.gz \ coreutils-$(coreutils-version).tar.xz \ diffutils-$(diffutils-version).tar.xz \ findutils-$(findutils-version).tar.lz \ gawk-$(gawk-version).tar.lz \ + gcc-$(gcc-version).tar.xz \ + gmp-$(gmp-version).tar.lz \ grep-$(grep-version).tar.xz \ gzip-$(gzip-version).tar.gz \ + isl-$(isl-version).tar.bz2 \ lzip-$(lzip-version).tar.gz \ make-$(make-version).tar.lz \ + mpfr-$(mpfr-version).tar.xz \ + mpc-$(mpc-version).tar.gz \ pkg-config-$(pkgconfig-version).tar.gz \ sed-$(sed-version).tar.xz \ tar-$(tar-version).tar.gz \ @@ -116,20 +123,26 @@ $(tarballs): $(tdir)/%: | awk '{print $$1}' ); \ \ mergenames=1; \ - if [ $$n = bash ]; then w=http://ftp.gnu.org/gnu/bash; \ + if [ $$n = bash ]; then w=http://ftpmirror.gnu.org/gnu/bash; \ + elif [ $$n = binutils ]; then w=http://ftpmirror.gnu.org/gnu/binutils; \ elif [ $$n = bzip ]; then w=http://akhlaghi.org/src; \ - elif [ $$n = coreutils ]; then w=http://ftp.gnu.org/gnu/coreutils;\ - elif [ $$n = diffutils ]; then w=http://ftp.gnu.org/gnu/diffutils;\ + elif [ $$n = coreutils ]; then w=http://ftpmirror.gnu.org/gnu/coreutils;\ + elif [ $$n = diffutils ]; then w=http://ftpmirror.gnu.org/gnu/diffutils;\ elif [ $$n = findutils ]; then w=http://akhlaghi.org/src; \ - elif [ $$n = gawk ]; then w=http://ftp.gnu.org/gnu/gawk; \ - elif [ $$n = grep ]; then w=http://ftp.gnu.org/gnu/grep; \ + elif [ $$n = gawk ]; then w=http://ftpmirror.gnu.org/gnu/gawk; \ + elif [ $$n = gcc ]; then w=http://ftpmirror.gnu.org/gcc/gcc-$(gcc-version); \ + elif [ $$n = gmp ]; then w=https://gmplib.org/download/gmp; \ + elif [ $$n = grep ]; then w=http://ftpmirror.gnu.org/gnu/grep; \ elif [ $$n = gzip ]; then w=http://akhlaghi.org/src; \ + elif [ $$n = isl ]; then w=ftp://gcc.gnu.org/pub/gcc/infrastructure; \ elif [ $$n = lzip ]; then w=http://download.savannah.gnu.org/releases/lzip; \ elif [ $$n = make ]; then w=http://akhlaghi.org/src; \ - elif [ $$n = pkg ]; then w=https://pkg-config.freedesktop.org/releases; \ - elif [ $$n = sed ]; then w=http://ftp.gnu.org/gnu/sed; \ - elif [ $$n = tar ]; then w=http://ftp.gnu.org/gnu/tar; \ - elif [ $$n = which ]; then w=http://ftp.gnu.org/gnu/which; \ + elif [ $$n = mpfr ]; then w=http://www.mpfr.org/mpfr-current;\ + elif [ $$n = mpc ]; then w=http://ftpmirror.gnu.org/gnu/mpc;\ + elif [ $$n = pkg ]; then w=http://pkg-config.freedesktop.org/releases; \ + elif [ $$n = sed ]; then w=http://ftpmirror.gnu.org/gnu/sed;\ + elif [ $$n = tar ]; then w=http://ftpmirror.gnu.org/gnu/tar;\ + elif [ $$n = which ]; then w=http://ftpmirror.gnu.org/gnu/which;\ elif [ $$n = xz ]; then w=http://tukaani.org/xz; \ else \ echo; echo; echo; \ @@ -145,11 +158,6 @@ $(tarballs): $(tdir)/%: $(DOWNLOADER) $@ $$tarballurl; \ fi -# C compiler and linker -# --------------------- -# -# --disable-multilib: ignore 32-bit installation for 64-bit systems. - @@ -168,26 +176,6 @@ $(ibdir)/low-level: | $(ibdir) # thus just use what the host operating system has available. PATH=$(syspath) - # The Assembler - $(call makelink,as) - - # The compiler - $(call makelink,clang) - $(call makelink,gcc) - $(call makelink,g++) - $(call makelink,cc) - - # The linker - $(call makelink,ar) - $(call makelink,ld) - $(call makelink,nm) - $(call makelink,ps) - - # On Mac OS, libtool is different compared to GNU Libtool. The - # libtool we'll build in the high-level dependencies has the - # executable name `glibtool'. - $(call makelink,libtool) - # GNU Gettext (translate messages) $(call makelink,msgfmt) @@ -211,7 +199,7 @@ $(ibdir)/low-level: | $(ibdir) # the source code tarballs of each program. First, we'll build the # necessary programs, then we'll build GNU Tar. $(ibdir)/gzip: $(tdir)/gzip-$(gzip-version).tar.gz \ - $(ibdir)/low-level + $(ibdir)/low-level $(call gbuild, $<, gzip-$(gzip-version), static) # GNU Lzip: For a static build, the `-static' flag should be given to @@ -229,7 +217,7 @@ $(ibdir)/xz: $(tdir)/xz-$(xz-version).tar.gz \ $(call gbuild, $<, xz-$(xz-version), static) $(ibdir)/bzip2: $(tdir)/bzip2-$(bzip2-version).tar.gz \ - $(ibdir)/low-level + $(ibdir)/low-level tdir=bzip2-$(bzip2-version); \ if [ $(static_build) = yes ]; then \ makecommand="make LDFLAGS=-static"; \ @@ -305,7 +293,7 @@ $(ibdir)/sed: $(tdir)/sed-$(sed-version).tar.xz \ $(call gbuild, $<, sed-$(sed-version), static) $(ibdir)/which: $(tdir)/which-$(which-version).tar.gz \ - $(ibdir)/make + $(ibdir)/make $(call gbuild, $<, which-$(which-version), static) @@ -314,7 +302,7 @@ $(ibdir)/which: $(tdir)/which-$(which-version).tar.gz \ # GNU Bash $(ibdir)/bash: $(tdir)/bash-$(bash-version).tar.gz \ - $(ibdir)/make + $(ibdir)/make # Delete any possibly existing output if [ -f $@ ]; then rm $@; fi; @@ -335,3 +323,96 @@ endif # before making the link, we'll see if the file actually exists # there. if [ -f $@ ]; then ln -s $@ $(ibdir)/sh; fi + + + + + +# GCC prerequisites +# ----------------- +$(ildir): | $(idir); mkdir $@ +$(ilidir): | $(ildir); mkdir $@ +$(ilidir)/gmp: $(tdir)/gmp-$(gmp-version).tar.lz \ + $(ibdir)/make | $(ilidir) + $(call gbuild, $<, gmp-$(gmp-version), static, , , make check) \ + && echo "GNU multiple precision arithmetic library is built" > $@ + +$(ilidir)/mpfr: $(tdir)/mpfr-$(mpfr-version).tar.xz \ + $(ilidir)/gmp + $(call gbuild, $<, mpfr-$(mpfr-version), static, , , make check) \ + && echo "GNU MPFR library is built" > $@ + +$(ilidir)/mpc: $(tdir)/mpc-$(mpc-version).tar.gz \ + $(ilidir)/mpfr + $(call gbuild, $<, mpc-$(mpc-version), static, , , make check) \ + && echo "GNU MPC library is built" > $@ + +$(ilidir)/isl: $(tdir)/isl-$(isl-version).tar.bz2 \ + $(ilidir)/gmp + $(call gbuild, $<, isl-$(isl-version), static) \ + && echo "GCC's ISL library is built" > $@ + +# On non-GNU systems, the default linker is different and we don't want our +# new linker to be mixed with that during the building of libraries and +# programs before GCC. +$(ibdir)/ld: $(tdir)/binutils-$(binutils-version).tar.lz \ + $(ibdir)/ls \ + $(ibdir)/sed \ + $(ilidir)/isl \ + $(ilidir)/mpc \ + $(ibdir)/gawk \ + $(ibdir)/grep \ + $(ibdir)/diff \ + $(ibdir)/find \ + $(ibdir)/bash \ + $(ibdir)/which + $(call gbuild, $<, binutils-$(binutils-version), static) + + + + + +# Build GCC +# --------- +# +# We want to build GCC after building all the basic tools that are often +# used in a configure script to enable GCC's configure script to work as +# smoothly/robustly as possible. +$(ibdir)/gcc: $(tdir)/gcc-$(gcc-version).tar.xz \ + $(ibdir)/ld + + # Un-pack all the necessary tools in the top building directory + cd $(ddir); \ + rm -rf gcc-build gcc-$(gcc-version); \ + tar xf $< && \ + mkdir $(ddir)/gcc-build && \ + cd $(ddir)/gcc-build && \ + ../gcc-$(gcc-version)/configure SHELL=$(ibdir)/bash \ + --prefix=$(idir) \ + --with-mpc=$(idir) \ + --with-mpfr=$(idir) \ + --with-gmp=$(idir) \ + --with-isl=$(idir) \ + --with-build-time-tools=$(idir) \ + --enable-shared \ + --disable-multilib \ + --disable-multiarch \ + --enable-threads=posix \ + --enable-libmpx \ + --with-local-prefix=$(idir) \ + --enable-linker-build-id \ + --with-gnu-as \ + --with-gnu-ld \ + --enable-lto \ + --with-linker-hash-style=gnu \ + --enable-languages=c,c++ \ + --disable-libada \ + --disable-nls \ + --enable-default-pie \ + --enable-default-ssp \ + --enable-cet=auto \ + --enable-decimal-float && \ + make SHELL=$(ibdir)/bash -j$$(nproc) && \ + make SHELL=$(ibdir)/bash install && \ + cd .. && \ + rm -rf gcc-build gcc-$(gcc-version) diff --git a/reproduce/src/make/dependencies-build-rules.mk b/reproduce/src/make/dependencies-build-rules.mk index c0561a7..9ff3463 100644 --- a/reproduce/src/make/dependencies-build-rules.mk +++ b/reproduce/src/make/dependencies-build-rules.mk @@ -53,11 +53,12 @@ gbuild = if [ x$(static_build) = xyes ] && [ $(3)x = staticx ]; then \ fi; \ check="$(6)"; \ if [ x"$$check" = x ]; then check="echo Skipping-check"; fi; \ + if [ -f $(ibdir)/bash ]; then shellop="SHELL=$(ibdir)/bash"; fi; \ cd $(ddir) && rm -rf $(2) && tar xf $(1) && cd $(2) && \ - ./configure $(4) --prefix=$(idir) && \ - make $(5) && \ + ./configure $(4) "$$shellop" --prefix=$(idir) && \ + make "$$shellop" $(5) && \ $$check && \ - make install&& \ + make "$$shellop" install && \ cd .. && rm -rf $(2) diff --git a/reproduce/src/make/dependencies.mk b/reproduce/src/make/dependencies.mk index 396060b..6acfdf9 100644 --- a/reproduce/src/make/dependencies.mk +++ b/reproduce/src/make/dependencies.mk @@ -164,44 +164,43 @@ $(tarballs): $(tdir)/%: # for us here. So, we'll make an `$(ildir)/built' directory and make a # simple plain text file in it with the basic library name (an no prefix) # and create/write into it when the library is successfully built. -$(ilidir): | $(ildir); mkdir -p $@ -$(ilidir)/cfitsio: $(tdir)/cfitsio-$(cfitsio-version).tar.gz \ - $(ibdir)/curl | $(ilidir) +$(ilidir)/cfitsio: $(tdir)/cfitsio-$(cfitsio-version).tar.gz \ + $(ibdir)/curl $(call gbuild, $<,cfitsio, static, --enable-sse2 --enable-reentrant) \ && echo "CFITSIO is built" > $@ -$(ilidir)/libgit2: $(tdir)/libgit2-$(libgit2-version).tar.gz \ - $(ibdir)/cmake \ - $(ibdir)/curl | $(ilidir) - $(call cbuild, $<, libgit2-$(libgit2-version), static, \ - -DUSE_SSH=OFF -DUSE_OPENSSL=OFF -DBUILD_CLAR=OFF \ - -DTHREADSAFE=ON) \ +$(ilidir)/libgit2: $(tdir)/libgit2-$(libgit2-version).tar.gz \ + $(ibdir)/cmake \ + $(ibdir)/curl + $(call cbuild, $<, libgit2-$(libgit2-version), static, \ + -DUSE_SSH=OFF -DUSE_OPENSSL=OFF -DBUILD_CLAR=OFF \ + -DTHREADSAFE=ON) \ && echo "Libgit2 is built" > $@ -$(ilidir)/gsl: $(tdir)/gsl-$(gsl-version).tar.gz | $(ilidir) - $(call gbuild, $<, gsl-$(gsl-version), static) \ +$(ilidir)/gsl: $(tdir)/gsl-$(gsl-version).tar.gz + $(call gbuild, $<, gsl-$(gsl-version), static) \ && echo "GNU Scientific Library is built" > $@ -$(ilidir)/libjpeg: $(tdir)/jpegsrc.$(libjpeg-version).tar.gz | $(ilidir) +$(ilidir)/libjpeg: $(tdir)/jpegsrc.$(libjpeg-version).tar.gz $(call gbuild, $<, jpeg-9b, static) && echo "Libjpeg is built" > $@ $(ilidir)/libtiff: $(tdir)/tiff-$(libtiff-version).tar.gz \ - $(ilidir)/libjpeg | $(ilidir) - $(call gbuild, $<, tiff-$(libtiff-version), static) \ + $(ilidir)/libjpeg + $(call gbuild, $<, tiff-$(libtiff-version), static) \ && echo "Libtiff is built" > $@ -$(ilidir)/wcslib: $(tdir)/wcslib-$(wcslib-version).tar.bz2 \ - $(ilidir)/cfitsio | $(ilidir) +$(ilidir)/wcslib: $(tdir)/wcslib-$(wcslib-version).tar.bz2 \ + $(ilidir)/cfitsio # Unfortunately WCSLIB forces the building of shared libraries. - $(call gbuild, $<, wcslib-$(wcslib-version), , \ - LIBS="-pthread -lcurl -lm" --without-pgplot \ - --disable-fortran) \ + $(call gbuild, $<, wcslib-$(wcslib-version), , \ + LIBS="-pthread -lcurl -lm" --without-pgplot \ + --disable-fortran) \ && echo "WCSLIB is built" > $@ # Zlib: its `./configure' doesn't use Autoconf's configure script, it just # accepts a direct `--static' option. -$(ilidir)/zlib: $(tdir)/zlib-$(zlib-version).tar.gz | $(ilidir) +$(ilidir)/zlib: $(tdir)/zlib-$(zlib-version).tar.gz ifeq ($(static_build),yes) $(call gbuild, $<, zlib-$(zlib-version), , --static) \ && echo "Zlib is built" > $@ @@ -218,12 +217,12 @@ endif # # CMake can be built with its custom `./bootstrap' script. $(ibdir)/cmake: $(tdir)/cmake-$(cmake-version).tar.gz - cd $(ddir) && rm -rf cmake-$(cmake-version) && \ - tar xf $< && cd cmake-$(cmake-version) && \ - ./bootstrap --prefix=$(idir) && make && make install && \ + cd $(ddir) && rm -rf cmake-$(cmake-version) && \ + tar xf $< && cd cmake-$(cmake-version) && \ + ./bootstrap --prefix=$(idir) && make && make install && \ cd ..&& rm -rf cmake-$(cmake-version) -$(ibdir)/curl: $(tdir)/curl-$(curl-version).tar.gz \ +$(ibdir)/curl: $(tdir)/curl-$(curl-version).tar.gz \ $(ilidir)/zlib $(call gbuild, $<, curl-$(curl-version), static, --without-brotli) @@ -245,13 +244,13 @@ $(ibdir)/git: $(tdir)/git-$(git-version).tar.xz \ --without-tcltk --with-shell=$(ibdir)/bash) $(ibdir)/astnoisechisel: $(tdir)/gnuastro-$(gnuastro-version).tar.lz \ - $(ibdir)/gs \ - $(ilidir)/gsl \ - $(ilidir)/wcslib \ - $(ibdir)/glibtool \ - $(ilidir)/libjpeg \ - $(ilidir)/libtiff \ - $(ilidir)/libgit2 + $(ibdir)/glibtool \ + $(ilidir)/libjpeg \ + $(ilidir)/libtiff \ + $(ilidir)/libgit2 \ + $(ilidir)/wcslib \ + $(ilidir)/gsl \ + $(ibdir)/gs ifeq ($(static_build),yes) $(call gbuild, $<, gnuastro-$(gnuastro-version), static, \ --enable-static=yes --enable-shared=no, -j8, \ -- cgit v1.2.1