Latest revision |
Your text |
Line 1: |
Line 1: |
| {{Warning|This page is outdated (October 2019). For a simpler approach on building GNU Octave using a separate toolchain, see [[MXE]].}}
| |
|
| |
| Building of octave together with a separate toolchain (custom built gcc/binutils/...). | | Building of octave together with a separate toolchain (custom built gcc/binutils/...). |
|
| |
|
| This is required mainly when the base linux distribution ships too old a version of gcc. | | This is required mainly when the base linux distribution ships too old a version of gcc. |
| Unexperienced users should upgrade their distribution, though. Or use [[MXE]]. | | Unexperienced users should upgrade their distribution, though. |
|
| |
|
| The main build directory will be called {{Path|/usr/local/build}}. | | The main build directory will be called {{Path|/usr/local/build}}. |
Line 89: |
Line 87: |
| # do not use threads | | # do not use threads |
| # (because I use pararrayfun from the parallel package) | | # (because I use pararrayfun from the parallel package) |
| make USE_THREAD=0 CPPFLAGS="-I/usr/local/gcc-6.2.0_binutils-2.27_isl/include" CFLAGS="-O2 -march=native" CXXFLAGS="-O2 -march=native" FFLAGS="-O2 -march=native" LDFLAGS="-L/usr/local/gcc-6.2.0_binutils-2.27_isl/lib64 -Wl,-rpath,/usr/local/gcc-6.2.0_binutils-2.27_isl/lib64" | | make USE_THREAD=0 CPPFLAGS="-I/usr/local/gcc-6.2.0_binutils-2.27_isl/include" CFLAGS="-O2 -march=native -L/usr/local/gcc-6.2.0_binutils-2.27_isl/lib64" CXXFLAGS="-O2 -march=native -L/usr/local/gcc-6.2.0_binutils-2.27_isl/lib64" FFLAGS="-O2 -march=native -L/usr/local/gcc-6.2.0_binutils-2.27_isl/lib64" LDFLAGS=-Wl,-rpath,/usr/local/gcc-6.2.0_binutils-2.27_isl/lib64 |
|
| |
|
| One should get | | One should get |
Line 118: |
Line 116: |
| sudo ln -s libopenblas_haswell-r0.2.19.so libopenblas.so.0 | | sudo ln -s libopenblas_haswell-r0.2.19.so libopenblas.so.0 |
| sudo ln -s libopenblas.so.0 libopenblas.so | | sudo ln -s libopenblas.so.0 libopenblas.so |
|
| |
| == qrupdate ==
| |
| download the latest version (1.1.2 as of this writing) to $downloads
| |
|
| |
| https://sourceforge.net/projects/qrupdate/files/latest/download?source=typ_redirect
| |
|
| |
| Start from a clean state
| |
|
| |
| exit
| |
| bash
| |
| export PATH=/usr/local/gcc-6.2.0_binutils-2.27_isl/bin:$PATH
| |
| which gfortran
| |
| # should be /usr/local/gcc-6.2.0_binutils-2.27_isl/bin/gfortran
| |
|
| |
| cd $buildroot
| |
| tar --no-same-owner -xvf $downloads/qrupdate-1.1.2.tar.gz
| |
| cd qrupdate-1.1.2/
| |
|
| |
| Save the following to $downloads/qrupdate-1.1.2_Makeconf.patch
| |
|
| |
| {{Code|qrupdate-1.1.2_Makeconf.patch|<pre>
| |
| --- Makeconf.orig 2016-09-20 16:33:23.061756020 +0200
| |
| +++ Makeconf 2016-09-20 16:39:47.385547117 +0200
| |
| @@ -1,26 +1,26 @@
| |
| # set this to your compiler's executable name (e.g. gfortran, g77)
| |
| FC=gfortran
| |
| # requested flags
| |
| -FFLAGS=-fimplicit-none -O3 -funroll-loops
| |
| +FFLAGS=-fimplicit-none -march=native -O3 -funroll-loops -lgfortran
| |
| # set if you need shared library
| |
| FPICFLAGS=-fPIC
| |
|
| |
| # BLAS library (only required for tests)
| |
| -BLAS=-lblas
| |
| +BLAS=-lopenblas
| |
| # LAPACK library (only required for tests)
| |
| -LAPACK=-llapack
| |
| +LAPACK=
| |
|
| |
| # Library version
| |
| VERSION=1.1
| |
| MAJOR=1
| |
|
| |
| # The default library dir
| |
| -LIBDIR=lib
| |
| +LIBDIR=lib64
| |
|
| |
| # Destination installation offset
| |
| DESTDIR=
| |
|
| |
| # set default prefix to /usr/local
| |
| ifeq ($(strip $(PREFIX)),)
| |
| - PREFIX=/usr/local
| |
| + PREFIX=/usr/local/gcc-6.2.0_binutils-2.27_isl
| |
| endif
| |
| </pre>
| |
| }}
| |
|
| |
| patch -p0 < $downloads/qrupdate-1.1.2_Makeconf.patch
| |
| make solib
| |
|
| |
| as root ({{codeline|su}}, not {{codeline|sudo}}, because we want PATH to contain {{Path|/usr/local/gcc-6.2.0_binutils-2.27_isl/bin}})
| |
| make install-shlib
| |
|
| |
| {{codeline|exit}} root session, then {{codeline|exit}} current bash, to return to a clean state
| |
|
| |
|
| == arpack-ng == | | == arpack-ng == |
Line 203: |
Line 136: |
| cd arpack-ng-3.4.0 | | cd arpack-ng-3.4.0 |
| ./bootstrap | | ./bootstrap |
| ./configure CPPFLAGS="-I/usr/local/gcc-6.2.0_binutils-2.27_isl/include" CFLAGS="-O2 -march=native" CXXFLAGS="-O2 -march=native" FFLAGS="-O2 -march=native" LDFLAGS="-L/usr/local/gcc-6.2.0_binutils-2.27_isl/lib64 -Wl,-rpath,/usr/local/gcc-6.2.0_binutils-2.27_isl/lib64" --prefix=/usr/local/gcc-6.2.0_binutils-2.27_isl | | ./configure CPPFLAGS="-I/usr/local/gcc-6.2.0_binutils-2.27_isl/include" CFLAGS="-O2 -march=native -L/usr/local/gcc-6.2.0_binutils-2.27_isl/lib64" CXXFLAGS="-O2 -march=native -L/usr/local/gcc-6.2.0_binutils-2.27_isl/lib64" FFLAGS="-O2 -march=native -L/usr/local/gcc-6.2.0_binutils-2.27_isl/lib64" LDFLAGS=-Wl,-rpath,/usr/local/gcc-6.2.0_binutils-2.27_isl/lib64 --prefix=/usr/local/gcc-6.2.0_binutils-2.27_isl |
| | | |
| make -j 6 | | make -j 6 |
Line 224: |
Line 157: |
| make install | | make install |
|
| |
|
| {{codeline|exit}} root session, then {{codeline|exit}} current bash, to return to a clean state
| |
|
| |
|
| == SuiteSparse == | | == SuiteSparse == |
Line 233: |
Line 165: |
| wget http://faculty.cse.tamu.edu/davis/SuiteSparse/SuiteSparse-4.5.3.tar.gz | | wget http://faculty.cse.tamu.edu/davis/SuiteSparse/SuiteSparse-4.5.3.tar.gz |
|
| |
|
| Save the code below to $downloads/UMFPACK_Demo_Makefile-4.5.3.patch
| | To be continued... |
| | |
| {{Code|UMFPACK_Demo_Makefile-4.5.3.patch|<pre>
| |
| --- UMFPACK/Demo/Makefile.orig 2016-09-19 16:20:46.317044240 +0200
| |
| +++ UMFPACK/Demo/Makefile 2016-09-19 16:30:15.079302070 +0200
| |
| @@ -27,9 +27,9 @@
| |
| C = $(CC) $(CF) $(UMFPACK_CONFIG) $(CONFIG_PARTITION) \
| |
| -I../../include
| |
|
| |
| -LIBS = $(LDLIBS) -L../../lib -lumfpack -lamd -lsuitesparseconfig \
| |
| +LIBS = $(LDFLAGS) $(LDLIBS) -L../../lib -lumfpack -lamd -lsuitesparseconfig \
| |
| $(LIB_WITH_CHOLMOD) $(LAPACK) $(BLAS)
| |
|
| |
| libs: metis
| |
| ( cd ../../SuiteSparse_config ; $(MAKE) )
| |
| ( cd ../../AMD ; $(MAKE) library )
| |
| | |
| </pre>
| |
| }}
| |
| | |
| | |
| cd $buildroot
| |
| tar --no-same-owner -xvf $downloads/SuiteSparse-4.5.3.tar.gz
| |
| mv SuiteSparse SuiteSparse-4.5.3
| |
| cd SuiteSparse-4.5.3/
| |
|
| |
| patch -p0 < $downloads/UMFPACK_Demo_Makefile-4.5.3.patch
| |
| # should get: "patching file UMFPACK/Demo/Makefile"
| |
| | |
| If the following command
| |
| | |
| find . -name Makefile -exec grep "LDLIBS +=" {} \; -print
| |
| | |
| yields {{codeline|LDLIBS}} lines not starting with {{codeline|override}},
| |
| then the patch sent upstream has not been applied,
| |
| and we should do it here:
| |
| | |
| find . -name Makefile -exec sed -i 's/LDLIBS +=/override LDLIBS +=/g' {} \;
| |
| | |
| Now we are ready to build SuiteSparse
| |
| | |
| make -j6 LAPACK= CF="-march=native -O3 -fexceptions -fPIC -fopenmp" F77FLAGS="-march=native -O3" LDFLAGS="-L/usr/local/build/SuiteSparse-4.5.3/lib -L/usr/local/gcc-6.2.0_binutils-2.27_isl/lib64" LDLIBS="-lm -lrt -Wl,-rpath=/usr/local/build/SuiteSparse-4.5.3/lib:/usr/local/gcc-6.2.0_binutils-2.27_isl/lib64"
| |
| | |
| fix RUN_PATH and install
| |
| | |
| cp -Rdp lib lib_chrpath
| |
| patchelf --set-rpath /usr/local/gcc-6.2.0_binutils-2.27_isl/lib64 lib_chrpath/*
| |
| sudo cp lib_chrpath/* /usr/local/gcc-6.2.0_binutils-2.27_isl/lib64/
| |
| sudo mkdir /usr/local/gcc-6.2.0_binutils-2.27_isl/include/suitesparse/
| |
| sudo cp include/* /usr/local/gcc-6.2.0_binutils-2.27_isl/include/suitesparse/
| |
| | |
| | |
| | |
| == FFTW ==
| |
| | |
| http://www.fftw.org/
| |
| | |
| cd $downloads
| |
| wget http://www.fftw.org/fftw-3.3.5.tar.gz
| |
| | |
| Start from a clean state
| |
| | |
| exit
| |
| bash
| |
| export PATH=/usr/local/gcc-6.2.0_binutils-2.27_isl/bin:$PATH
| |
| which gfortran
| |
| # should be /usr/local/gcc-6.2.0_binutils-2.27_isl/bin/gfortran
| |
| | |
| cd $buildroot
| |
| tar --no-same-owner -xvf $downloads/fftw-3.3.5.tar.gz
| |
| cd fftw-3.3.5/
| |
| | |
| === Single precision ===
| |
| ./configure --enable-shared --enable-sse2 --enable-avx --enable-openmp --enable-threads --enable-float CPPFLAGS="-I/usr/local/gcc-6.2.0_binutils-2.27_isl/include" CFLAGS="-O2 -march=native" CXXFLAGS="-O2 -march=native" FFLAGS="-O2 -march=native" LDFLAGS="-L/usr/local/gcc-6.2.0_binutils-2.27_isl/lib64 -Wl,-rpath,/usr/local/gcc-6.2.0_binutils-2.27_isl/lib64" PKG_CONFIG_PATH=/usr/local/gcc-6.2.0_binutils-2.27_isl/lib64/pkgconfig --prefix=/usr/local/gcc-6.2.0_binutils-2.27_isl
| |
| make -j6
| |
| make check
| |
| | |
| as root ({{codeline|su}}, not {{codeline|sudo}}, because we want PATH to contain {{Path|/usr/local/gcc-6.2.0_binutils-2.27_isl/bin}})
| |
| | |
| make install
| |
| exit
| |
| | |
| === Double precision ===
| |
| | |
| ./configure --enable-shared --enable-sse2 --enable-avx --enable-openmp --enable-threads CPPFLAGS="-I/usr/local/gcc-6.2.0_binutils-2.27_isl/include" CFLAGS="-O2 -march=native" CXXFLAGS="-O2 -march=native" FFLAGS="-O2 -march=native" LDFLAGS="-L/usr/local/gcc-6.2.0_binutils-2.27_isl/lib64 -Wl,-rpath,/usr/local/gcc-6.2.0_binutils-2.27_isl/lib64" PKG_CONFIG_PATH=/usr/local/gcc-6.2.0_binutils-2.27_isl/lib64/pkgconfig --prefix=/usr/local/gcc-6.2.0_binutils-2.27_isl
| |
| make -j6
| |
| make check
| |
| | |
| as root ({{codeline|su}}, not {{codeline|sudo}}, because we want PATH to contain {{Path|/usr/local/gcc-6.2.0_binutils-2.27_isl/bin}})
| |
| | |
| make install
| |
| exit
| |
| | |
| == GraphicsMagick ==
| |
| | |
| download GraphicsMagick (here, GraphicsMagick-1.3.25.tar.xz) to $downloads
| |
| | |
| https://sourceforge.net/projects/graphicsmagick/files/graphicsmagick/
| |
| | |
| Start from a clean state
| |
| | |
| exit
| |
| bash
| |
| export PATH=/usr/local/gcc-6.2.0_binutils-2.27_isl/bin:$PATH
| |
| which gfortran
| |
| # should be /usr/local/gcc-6.2.0_binutils-2.27_isl/bin/gfortran
| |
| | |
| cd $buildroot
| |
| tar --no-same-owner -xvf $downloads/GraphicsMagick-1.3.25.tar.xz
| |
| cd GraphicsMagick-1.3.25
| |
| | |
| Disable ''webp'' and ''jbig'' that fail tests with gcc-6.2.0
| |
| | |
| ./configure --without-webp --without-jbig --enable-static=no --enable-shared=yes --with-quantum-depth=16 CPPFLAGS="-I/usr/local/gcc-6.2.0_binutils-2.27_isl/include" CFLAGS="-O2 -march=native" CXXFLAGS="-O2 -march=native" FFLAGS="-O2 -march=native" LDFLAGS="-L/usr/local/gcc-6.2.0_binutils-2.27_isl/lib64 -Wl,-rpath,/usr/local/gcc-6.2.0_binutils-2.27_isl/lib64" PKG_CONFIG_PATH=/usr/local/gcc-6.2.0_binutils-2.27_isl/lib64/pkgconfig --prefix=/usr/local/gcc-6.2.0_binutils-2.27_isl
| |
| | |
| The summary should be fine. As comparison and source of relevant informations: [[GraphicsMagick]]
| |
| | |
| make -j 6
| |
| | |
| make -j6 check
| |
| ============================================================================
| |
| Testsuite summary for GraphicsMagick 1.3.25
| |
| ============================================================================
| |
| # TOTAL: 1215
| |
| # PASS: 1169
| |
| # SKIP: 46
| |
| # XFAIL: 0
| |
| # FAIL: 0
| |
| # XPASS: 0
| |
| # ERROR: 0
| |
| | |
| | |
| as root ({{codeline|su}}, not {{codeline|sudo}}, because we want PATH to contain {{Path|/usr/local/gcc-6.2.0_binutils-2.27_isl/bin}})
| |
| | |
| make install
| |
| | |
| {{codeline|exit}} root session, then {{codeline|exit}} current bash, to return to a clean state
| |
| | |
| == Octave itself ==
| |
| | |
| The following - facultative - command avoids warnings like {{codeline|libtool: warning: '/usr/local/gcc-6.2.0_binutils-2.27_isl/lib64/libgomp.la' seems to be moved}}
| |
| | |
| sudo find /usr/local/gcc-6.2.0_binutils-2.27_isl -name "*.la" -exec sed -i 's:/lib64/../lib64:/lib64:g' {} \; -print
| |
| | |
| which will replace all unnecessary {{codeline|/lib64/../lib64}} by {{codeline|/lib64}}.
| |
| | |
| cd $downloads
| |
| wget ftp://ftp.gnu.org/gnu/octave/octave-4.2.0.tar.lz
| |
| | |
| Start from a clean state
| |
| | |
| exit
| |
| bash
| |
| export PATH=/usr/local/gcc-6.2.0_binutils-2.27_isl/bin:$PATH
| |
| which gfortran
| |
| # should be /usr/local/gcc-6.2.0_binutils-2.27_isl/bin/gfortran
| |
| | |
| cd $buildroot
| |
| tar --no-same-owner -xvf $downloads/octave-4.2.0.tar.lz
| |
| cd octave-4.2.0
| |
| | |
| mkdir build-; cd $_
| |
| ../configure --with-blas="/usr/local/gcc-6.2.0_binutils-2.27_isl/lib64/libopenblas.so" CPPFLAGS="-I/usr/local/gcc-6.2.0_binutils-2.27_isl/include" CFLAGS="-O2 -march=native" CXXFLAGS="-O2 -march=native" FFLAGS="-O2 -march=native" LDFLAGS="-L/usr/local/gcc-6.2.0_binutils-2.27_isl/lib64 -Wl,-rpath,/usr/local/gcc-6.2.0_binutils-2.27_isl/lib64" PKG_CONFIG_PATH=/usr/local/gcc-6.2.0_binutils-2.27_isl/lib64/pkgconfig JAVA_HOME=/usr/lib64/jvm/java-1.8.0-openjdk-1.8.0/ --prefix=/usr/local/gcc-6.2.0_binutils-2.27_isl
| |
|
| |
| make -j 6
| |
| | |
| make check
| |
| # or, for nvidia users,
| |
| xvfb-run -s "-screen 0 640x480x24" make check LD_PRELOAD=/usr/lib64/libGL.so
| |
| | |
| as root ({{codeline|su}}, not {{codeline|sudo}}, because we want PATH to contain {{Path|/usr/local/gcc-6.2.0_binutils-2.27_isl/bin}})
| |
| make install
| |
| | |
| {{codeline|exit}} root session, then {{codeline|exit}} current bash, to return to a clean state
| |
|
| |
|
| Done.
| |
|
| |
|
| [[Category:Outdated pages]]
| | To be continued... |