octave-maintainers
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Octave build on windows using octave binary itself


From: Tatsuro MATSUOKA
Subject: Octave build on windows using octave binary itself
Date: Mon, 2 May 2016 08:58:48 +0900 (JST)

Hello

I have tried to build octave from source on native windows 
using development toolkits and external libraries on octave binary distribution
and today I have gotten successful results. I will report here.

Purpose

Currently octave for windows is mainly build on Unix using mxe-octave system.
The mxe-octave system is very powerful and useful because everything required
is built on batch process.

However, it in principle requires Unix [1] so that users those who use only 
windows 
cannot build octave for windows on windows.
Of course, octave for windows binary is provided on official web site (32 bit) 
and
unofficial web site (by me for 64bit).

However, for those who want to try the development branch of octave and 
to make modification of octave code to implement new feature,
or to fix bugs,

the building environments on native windows is strongly desirable.

This is why I have tried to build octave using octave binary distribution.

Procedure

1. Prepare Octave build and install directory
  Prepare octave build directory for build like 
  e.g.
   D:\usr\Tatsu\program\Octave\octaveBuild\4.0.2
    |--octave-4.0.2     source extract directory
    |--build            build directory

  Prepare octave install directory like 
   D:\usr\Tatsu\program\Octave\octaveBuild\4.0.2\usr\local

2. Prepare some missing tools and libraries for build into msys2 [2]
  Octave binary have msys and its related developments tools 
  (gcc, make, ) and so on.
  Some tools are missing for octave build.
  I used the msys2 for missing tools 
  (I do know what is missing in detail because 
  my msys2 system have complete sets of unixy development tools.)

  Msys2 is newer system and has improved performance and various toolkits.
  Therefore I recommend to used msys2 rather than msys to prepare missing tools.

  For octave binary distribution prepare almost all external libraries for build
  I found an exception. That is the JDK (Java Development Kit).
  To install the JDK, goto the Oracle site and install the latest JDK.

3. Preparation and build on Octave
 (>> is octave prompt. $ is bash prompt)
  Build is executed on msys environments on octave distribution
  
  Start octave (either CLI or GUI )  then execute the msys bash

   >> more off  # I just prefer to use more off
   >> cd D:\usr\Tatsu\program\Octave\octaveBuild\4.0.2\build   #build directory

   >> system bash   #launch bash

  On bash 
   # set path
   # /c/msys64_gcc530/usr/bin        is for using msys2 toolkits
   # /c/Program\ Files\ \(x86\)/Java/jdk1.8.0_91/bin  is for JDK
  
   $ export PATH=$PATH:/c/msys64_gcc530/usr/bin:/c/Program\ Files\ 
\(x86\)/Java/jdk1.8.0_91/bin
    
     # configure
     $ ../octave-4.0.2/configure 
--prefix=/c/usr/Tatsu/program/Octave/octaveBuild/4.0.2/usr/local \
     $  --with-java-homedir=/c/Program\ Files\ \(x86\)/Java/jdk1.8.0_91/bin \
     $  --with-java-includedir=/c/Program\ Files\ 
\(x86\)/Java/jdk1.8.0_91/include \
     $ --with-java-libdir=/c/Program\ Files\ \(x86\)/Java/jdk1.8.0_91/lib 

    Please see carefully the configure goes well 
     Confirm the last configure output to see there are not something missing|
      Example
      See [2]
     If something is wrong please see config.log in the build tree.
    
    # make : just execute make and wait for a (?) while
     $ make
     (do not use parallel make like make -j4 on msys.)

    #make check
     After make is executed successfully the execute "make check" to see the 
make go well
     
     $ make check

     A lot of tests and results. Finally one can see: 
          Summary:

           PASS     13021
           FAIL         0
           XFAIL       28
           SKIPPED     54

If you encounter FAILs please follow the below message (output make check)
 Please help improve Octave by contributing tests for these files
(see the list in the file 
d:\usr\Tatsu\program\Octave\octaveBuild\4.0.2\build\test\fntests.l
og).

The same test can be carried out __run_test_suite__ on octave prompt.
 
  # execution test : execute below on build directory
   $ ./run-octave

  # execution with debug information

   $ ./run-ctave -g
 This is sometimes useful for debugging.

4. Install
  If one want install octave in the directory execute 
   $ make install           # install with debug symbols
   or
   $ make install-strip   # strip debug symbols and unused information for 
usual use.       


Further work
  Transfer build process to that on the msys2.
  Msys2 is far powerful than the original msys  For exapme, one can use 
parallel build and reduce build time half if 
  you have multi-threaded PC. I also found that performance of the recent msys2 
is improved and thus 
  in even single jog make the msys2 system reduces build time.)

# I propose that mxe-octave for windows builds msys2 but not msys for better 
performance.

Tatsuro


[1] JohnD tried to build octave for windows on Msys2+MinGW w64 (native windows 
tool)
using the mxe-octave. He reported the successful results for native windows 
build.
But I have never reproduce it.

[2] https://msys2.github.io/
    https://sourceforge.net/projects/msys2/

[3]  Example for configure output
     Octave is now configured for i686-pc-mingw32


  Source directory:            ../octave-4.0.2
  Installation prefix:         
/c/usr/Tatsu/program/Octave/octaveBuild/4.0.2/usr/local
  C compiler:                  gcc  -pthread -fopenmp -mieee-fp  -Wall -W 
-Wshadow -Wformat -
Wpointer-arith -Wmissing-prototypes -Wstrict-prototypes -Wwrite-strings 
-Wcast-align -Wcast-q
ual -g -O2
  C++ compiler:                g++  -pthread -fopenmp -mieee-fp  -Wall -W 
-Wshadow -Wold-styl
e-cast -Wformat -Wpointer-arith -Wwrite-strings -Wcast-align -Wcast-qual -g -O2
  Fortran compiler:            gfortran -O -mieee-fp
  Fortran libraries:            
-Lc:/octave/octave-4.0.2/bin/../lib/gcc/i686-w64-mingw32/4.9.
3 -Lc:/octave/octave-4.0.2/bin/../lib/gcc 
-Lc:/octave/octave-4.0.2/bin/../lib/gcc/i686-w64-mi
ngw32/4.9.3/../../../../i686-w64-mingw32/lib/../lib 
-Lc:/octave/octave-4.0.2/bin/../lib/gcc/i
686-w64-mingw32/4.9.3/../../../../lib 
-Lc:/octave/octave-4.0.2/bin/../lib/gcc/i686-w64-mingw3
2/4.9.3/../../../../i686-w64-mingw32/lib 
-Lc:/octave/octave-4.0.2/bin/../lib/gcc/i686-w64-min
gw32/4.9.3/../../.. -lm -lgfortran -lmingw32 -lmoldname -lmingwex -lmsvcrt 
-lquadmath -ladvap
i32 -lshell32 -luser32 -lkernel32
  Lex libraries:
  LIBS:                        -lm   -lgdi32 -lws2_32 -luser32 -lkernel32 
-lgdi32 -lws2_32 -l
user32 -lkernel32

  AMD CPPFLAGS:
  AMD LDFLAGS:
  AMD libraries:               -lamd
  ARPACK CPPFLAGS:
  ARPACK LDFLAGS:
  ARPACK libraries:            -larpack
  BLAS libraries:              -lopenblas
  CAMD CPPFLAGS:
  CAMD LDFLAGS:
  CAMD libraries:              -lcamd
  CARBON libraries:
  CCOLAMD CPPFLAGS:
  CCOLAMD LDFLAGS:
  CCOLAMD libraries:           -lccolamd
  CHOLMOD CPPFLAGS:
  CHOLMOD LDFLAGS:
  CHOLMOD libraries:           -lcholmod
  COLAMD CPPFLAGS:
  COLAMD LDFLAGS:
  COLAMD libraries:            -lcolamd
  CURL CPPFLAGS:
  CURL LDFLAGS:
  CURL libraries:              -lcurl
  CXSPARSE CPPFLAGS:
  CXSPARSE LDFLAGS:
  CXSPARSE libraries:          -lcxsparse
  DL libraries:
  FFTW3 CPPFLAGS:
  FFTW3 LDFLAGS:
  FFTW3 libraries:             -lfftw3
  FFTW3F CPPFLAGS:
  FFTW3F LDFLAGS:
  FFTW3F libraries:            -lfftw3f
  FLTK CPPFLAGS:               
-I/scratch/jwe/mxe-octave/usr/i686-w64-mingw32/include -mwindo
ws -DWIN32 -DUSE_OPENGL32 -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE 
-D_FILE_OFFSET_BITS=64
  FLTK LDFLAGS:                
-L/scratch/jwe/mxe-octave/usr/i686-w64-mingw32/lib  -Wl,--enab
le-auto-import -Wl,--enable-runtime-pseudo-reloc -lfltk_gl -lglu32 -lopengl32 
-lfltk -lole32
-lcomctl32
  FLTK libraries:
  fontconfig CPPFLAGS:         -IC:/octave/Octave-4.0.2/include 
-I/usr/include/freetype2 -IC:
/octave/Octave-4.0.2/include/freetype2 -IC:/octave/Octave-4.0.2/include 
-IC:/octave/Octave-4.
0.2/include/libpng16
  fontconfig libraries:        -LC:/octave/Octave-4.0.2/lib -lfontconfig 
-lfreetype
  FreeType2 CPPFLAGS:          -IC:/octave/Octave-4.0.2/include/freetype2 
-IC:/octave/Octave-
4.0.2/include -IC:/octave/Octave-4.0.2/include/libpng16
  FreeType2 libraries:         -LC:/octave/Octave-4.0.2/lib -lfreetype
  GLPK CPPFLAGS:
  GLPK LDFLAGS:
  GLPK libraries:              -lglpk
  HDF5 CPPFLAGS:
  HDF5 LDFLAGS:
  HDF5 libraries:              -lhdf5
  Java home:                   /c/Program Files (x86)/Java/jdk1.8.0_91/bin
  Java JVM path:               /c/Program Files (x86)/Java/jdk1.8.0_91/lib
  Java CPPFLAGS:               -I"/c/Program Files 
(x86)/Java/jdk1.8.0_91/include" -I"/c/Prog
ram Files (x86)/Java/jdk1.8.0_91/include/win32"
  Java libraries:              -ladvapi32
  LAPACK libraries:            -llapack
  LLVM CPPFLAGS:
  LLVM LDFLAGS:
  LLVM libraries:
  Magick++ CPPFLAGS:           -IC:/octave/Octave-4.0.2/include/GraphicsMagick 
-IC:/octave/Oc
tave-4.0.2/include/libxml2 -IC:/octave/Octave-4.0.2/include
  Magick++ LDFLAGS:            -LC:/octave/Octave-4.0.2/lib
  Magick++ libraries:          -lGraphicsMagick++ -lGraphicsMagick
  OPENGL libraries:            -LC:/octave/Octave-4.0.2/lib -lfontconfig 
-lfreetype  -lopengl
32 -lglu32
  OSMesa CPPFLAGS:
  OSMesa LDFLAGS:
  OSMesa libraries:            -lOSMesa
  PCRE CPPFLAGS:               
-I/scratch/jwe/mxe-octave/usr/i686-w64-mingw32/include
  PCRE libraries:              
-L/scratch/jwe/mxe-octave/usr/i686-w64-mingw32/lib -lpcre
  PortAudio CPPFLAGS:          -IC:/octave/Octave-4.0.2/include
  PortAudio LDFLAGS:           -LC:/octave/Octave-4.0.2/lib
  PortAudio libraries:         -lportaudio
  PTHREAD flags:               -pthread
  PTHREAD libraries:
  QHULL CPPFLAGS:
  QHULL LDFLAGS:
  QHULL libraries:             -lqhull
  QRUPDATE CPPFLAGS:
  QRUPDATE LDFLAGS:
  QRUPDATE libraries:          -lqrupdate
  Qt CPPFLAGS:                 -IC:/octave/Octave-4.0.2/include/QtNetwork 
-IC:/octave/Octave-
4.0.2/include/QtOpenGL -IC:/octave/Octave-4.0.2/include/QtGui 
-IC:/octave/Octave-4.0.2/includ
e/QtCore
  Qt LDFLAGS:                  -LC:/octave/Octave-4.0.2/lib
  Qt libraries:                -lQtNetwork4 -lQtOpenGL4 -lQtGui4 -lQtCore4  
-lqscintilla2
  READLINE libraries:          -lreadline
  Sndfile CPPFLAGS:            -IC:/octave/Octave-4.0.2/include
  Sndfile LDFLAGS:             -LC:/octave/Octave-4.0.2/lib
  Sndfile libraries:           -lsndfile
  TERM libraries:              -ltermcap
  UMFPACK CPPFLAGS:
  UMFPACK LDFLAGS:
  UMFPACK libraries:           -lumfpack
  X11 include flags:
  X11 libraries:
  Z CPPFLAGS:
  Z LDFLAGS:
  Z libraries:                 -lz

  Default pager:               less
  gnuplot:                     gnuplot

  Build Octave GUI:                   yes
  JIT compiler for loops:             no
  Build Java interface:               yes
  Do internal array bounds checking:  no
  Build static libraries:             no
  Build shared libraries:             yes
  Dynamic Linking:                    yes (LoadLibrary)
  Include support for GNU readline:   yes
  64-bit array dims and indexing:     no
  OpenMP SMP multithreading:          yes
  Build cross tools:                  no

configure: WARNING:

I didn't find icotool, but it's only a problem if you need to
reconstruct octave-logo.ico, which is the case if you're building from
VCS sources.

configure: WARNING:

I didn't find rsvg-convert, but it's only a problem if you need to
reconstruct octave-logo-*.png, which is the case if you're building
from VCS sources.

configure:
configure: NOTE: Libraries or auxiliary programs may be skipped if they are
configure: NOTE: not found OR if they are missing required features on your
configure: NOTE: system.



reply via email to

[Prev in Thread] Current Thread [Next in Thread]