Mercurial > octave
view .github/workflows/make.yaml @ 29949:f254c302bb9c
remove JIT compiler from Octave sources
As stated in the NEWS file entry added with this changeset, no one
has ever seriously taken on further development of the JIT compiler in
Octave since it was first added as part of a Google Summer of Code
project in 2012 and it still does nothing significant. It is out of
date with the default interpreter that walks the parse tree. Even
though we have fixed the configure script to disable it by default,
people still ask questions about how to build it, but it doesn’t seem
that they are doing that to work on it but because they think it will
make Octave code run faster (it never did, except for some extremely
simple bits of code as examples for demonstration purposes only).
* NEWS: Note change.
* configure.ac, acinclude.m4: Eliminate checks and macros related to
the JIT compiler and LLVM.
* basics.txi, install.txi, octave.texi, vectorize.txi: Remove mention
of JIT compiler and LLVM.
* jit-ir.cc, jit-ir.h, jit-typeinfo.cc, jit-typeinfo.h, jit-util.cc,
jit-util.h, pt-jit.cc, pt-jit.h: Delete.
* libinterp/parse-tree/module.mk: Update.
* Array-jit.cc: Delete.
* libinterp/template-inst/module.mk: Update.
* test/jit.tst: Delete.
* test/module.mk: Update.
* interpreter.cc (interpreter::interpreter): Don't check options for
debug_jit or jit_compiler.
* toplev.cc (F__octave_config_info__): Remove JIT compiler and LLVM
info from struct.
* ov-base.h (octave_base_value::grab, octave_base_value::release):
Delete.
* ov-builtin.h, ov-builtin.cc (octave_builtin::to_jit,
octave_builtin::stash_jit): Delete.
(octave_builtin::m_jtype): Delete data member and all uses.
* ov-usr-fcn.h, ov-usr-fcn.cc (octave_user_function::m_jit_info):
Delete data member and all uses.
(octave_user_function::get_info, octave_user_function::stash_info): Delete.
* options.h (DEBUG_JIT_OPTION, JIT_COMPILER_OPTION): Delete macro
definitions and all uses.
* octave.h, octave.cc (cmdline_options::cmdline_options): Don't handle
DEBUG_JIT_OPTION, JIT_COMPILER_OPTION): Delete.
(cmdline_options::debug_jit, cmdline_options::jit_compiler): Delete
functions and all uses.
(cmdline_options::m_debug_jit, cmdline_options::m_jit_compiler): Delete
data members and all uses.
(octave_getopt_options long_opts): Remove "debug-jit" and
"jit-compiler" from the list.
* pt-eval.cc (tree_evaluator::visit_simple_for_command,
tree_evaluator::visit_complex_for_command,
tree_evaluator::visit_while_command,
tree_evaluator::execute_user_function): Eliminate JIT compiler code.
* pt-loop.h, pt-loop.cc (tree_while_command::get_info,
tree_while_command::stash_info, tree_simple_for_command::get_info,
tree_simple_for_command::stash_info): Delete functions and all uses.
(tree_while_command::m_compiled, tree_simple_for_command::m_compiled):
Delete member variable and all uses.
* usage.h (usage_string, octave_print_verbose_usage_and_exit): Remove
[--debug-jit] and [--jit-compiler] from the message.
* Array.h (Array<T>::Array): Remove constructor that was only intended
to be used by the JIT compiler.
(Array<T>::jit_ref_count, Array<T>::jit_slice_data,
Array<T>::jit_dimensions, Array<T>::jit_array_rep): Delete.
* Marray.h (MArray<T>::MArray): Remove constructor that was only
intended to be used by the JIT compiler.
* NDArray.h (NDArray::NDarray): Remove constructor that was only
intended to be used by the JIT compiler.
* dim-vector.h (dim_vector::to_jit): Delete.
(dim_vector::dim_vector): Remove constructor that was only intended to
be used by the JIT compiler.
* codeql-analysis.yaml, make.yaml: Don't require llvm-dev.
* subst-config-vals.in.sh, subst-cross-config-vals.in.sh: Don't
substitute OCTAVE_CONF_LLVM_CPPFLAGS, OCTAVE_CONF_LLVM_LDFLAGS, or
OCTAVE_CONF_LLVM_LIBS.
* Doxyfile.in: Don't define HAVE_LLVM.
* aspell-octave.en.pws: Eliminate jit, JIT, and LLVM from the list of
spelling exceptions.
* build-env.h, build-env.in.cc (LLVM_CPPFLAGS, LLVM_LDFLAGS,
LLVM_LIBS): Delete variables and all uses.
* libinterp/corefcn/module.mk (%canon_reldir%_libcorefcn_la_CPPFLAGS):
Remove $(LLVM_CPPFLAGS) from the list.
* libinterp/parse-tree/module.mk (%canon_reldir%_libparse_tree_la_CPPFLAGS):
Remove $(LLVM_CPPFLAGS) from the list.
author | John W. Eaton <jwe@octave.org> |
---|---|
date | Tue, 10 Aug 2021 16:42:29 -0400 |
parents | 53de043ea532 |
children | 2362fbd42c17 |
line wrap: on
line source
name: make on: [push] concurrency: ci-${{ github.ref }} jobs: ubuntu: runs-on: ${{ matrix.os }} strategy: # Allow other runners in the matrix to continue if some fail fail-fast: false matrix: # For available GitHub-hosted runners, see: # https://docs.github.com/en/actions/using-github-hosted-runners/about-github-hosted-runners os: [ubuntu-20.04, ubuntu-18.04] compiler: [gcc, clang] include: - compiler: gcc compiler-pkgs: "g++ gcc" cc: "gcc" cxx: "g++" - compiler: clang compiler-pkgs: "clang" cc: "clang" cxx: "clang++" # "ccache" on Ubuntu 20.04 with gcc seems to require much more cache # storage than on the other runners to work effectively. - ccache-max: 3G - os: ubuntu-20.04 compiler: gcc ccache-max: 6G steps: - name: checkout repository uses: actions/checkout@v2 - name: install dependencies env: COMPILER_PKGS: ${{ matrix.compiler-pkgs }} run: | sudo apt -qq update sudo apt install -y $COMPILER_PKGS autoconf automake bison ccache \ dvipng epstool fig2dev flex gfortran gnuplot-x11 gperf gzip \ icoutils libarpack2-dev libblas-dev libcurl4-gnutls-dev \ libfftw3-dev libfltk1.3-dev libfontconfig1-dev libfreetype6-dev \ libgl1-mesa-dev libgl2ps-dev libglpk-dev libgraphicsmagick++1-dev \ libhdf5-dev liblapack-dev libosmesa6-dev libpcre3-dev \ libqhull-dev libqscintilla2-qt5-dev libqrupdate-dev \ libreadline-dev librsvg2-bin libsndfile1-dev libsuitesparse-dev \ libsundials-dev libtool libxft-dev make openjdk-8-jdk \ perl portaudio19-dev pstoedit qtbase5-dev qttools5-dev \ qttools5-dev-tools rapidjson-dev rsync tar texinfo \ texlive-latex-extra xvfb zlib1g-dev - name: prepare ccache # create human readable timestamp id: ccache_cache_timestamp run: | echo "::set-output name=TIMESTAMP::$(date +"%Y-%m-%d_%H-%M-%S")" - name: setup ccache # setup the github cache used to maintain the ccache from one job to the next # uses: actions/cache@v2 # The original action doesn't upload on error. Use this fork instead. # FIXME: Consider reverting to the original action when it allows uploading on error. # See: https://github.com/actions/cache/issues/92 uses: pat-s/always-upload-cache@v2 with: path: ~/.ccache key: ccache:${{ matrix.os }}:${{ matrix.compiler }}:${{ github.ref }}:${{ steps.ccache_cache_timestamp.outputs.timestamp }}:${{ github.sha }} restore-keys: | ccache:${{ matrix.os }}:${{ matrix.compiler }}:${{ github.ref }} ccache:${{ matrix.os }}:${{ matrix.compiler }} - name: configure ccache env: CCACHE_MAX: ${{ matrix.ccache-max }} run: | test -d ~/.ccache || mkdir ~/.ccache echo "max_size = $CCACHE_MAX" >> ~/.ccache/ccache.conf ccache -s - name: bootstrap run: ./bootstrap - name: configure timeout-minutes: 30 env: MY_CC: ${{ matrix.cc }} MY_CXX: ${{ matrix.cxx }} run: | echo $MY_CC --version $MY_CC --version echo $MY_CXX --version $MY_CXX --version mkdir .build cd .build && ../configure \ CC="ccache $MY_CC" \ CXX="ccache $MY_CXX" \ F77="ccache gfortran" \ CPPFLAGS="-I/usr/include/hdf5/serial -I/usr/include/suitesparse" \ LDFLAGS="-L/usr/lib/$(dpkg-architecture -qDEB_HOST_MULTIARCH)/hdf5/serial" - name: build # Parallel make seems to fail intermittently when creating the figures # for the manual. The error message says it fails to connect to a # display. Maybe an xvfb issue? # Use single job make for now which seems to work more reliably. run: XDG_RUNTIME_DIR=$RUNNER_TEMP xvfb-run -a make -C ./.build all V=1 - name: ccache status run: ccache -s - name: check timeout-minutes: 60 run: XDG_RUNTIME_DIR=$RUNNER_TEMP xvfb-run -a make -C ./.build check | tee ./test-suite.log - name: display test log continue-on-error: true # Displaying the log shouldn't take long. Cancel the step if it does. timeout-minutes: 5 run: cat ./.build/test/fntests.log - name: analyze test suite results # Make sure the test summary lists 0 "FAIL"s and no "REGRESSION" run: | [ -n "$(grep -e "FAIL\s*0" ./test-suite.log)" ] || exit 1 [ -z "$(grep -e "REGRESSION" ./test-suite.log)" ] || exit 1 echo No unknown failing tests. macos: runs-on: ${{ matrix.os }} strategy: matrix: # For available GitHub-hosted runners, see: https://docs.github.com/en/actions/using-github-hosted-runners/about-github-hosted-runners os: [macos-10.15] # Most (or all) homebrew packages are compiled with clang and link # against libc++. So we also use clang to avoid issues with symbols # that don't match. # compiler: [real-gcc, clang] compiler: [clang] include: # - compiler: real-gcc # cc: "/usr/local/bin/gcc-10" # cxx: "/usr/local/bin/g++-10" # cppflags: "-I/usr/local/opt/hdf5/include -I/usr/local/opt/gl2ps/include -I/usr/local/opt/glpk/include -I/usr/local/opt/pcre/include -I/usr/local/opt/qscintilla2/include -I/usr/local/opt/suite-sparse/include -I/usr/local/opt/sundials/include" # ldflags: "-L/usr/local/opt/hdf5/lib -L/usr/local/opt/gl2ps/lib -L/usr/local/opt/glpk/lib -L/usr/local/opt/pcre/lib -L/usr/local/opt/qscintilla2/lib -L/usr/local/opt/suite-sparse/lib -L/usr/local/opt/sundials/lib" - compiler: clang cc: "clang" cxx: "clang++" env: MY_PATH: "/usr/local/opt/gnu-sed/libexec/gnubin:/usr/local/opt/bison/bin:/usr/local/opt/texinfo/bin:/usr/local/opt/qt@5/bin:/Library/TeX/texbin" steps: - name: checkout repository uses: actions/checkout@v2 - name: install dependencies # This step sometimes takes long and still recovers. But sometimes it # seems to hang indefinitely. # Use a pretty long timeout (but still less than the default 6 hours). timeout-minutes: 75 # It looks like "gfortran" isn't working correctly unless "gcc" is # re-installed. # See also: https://formulae.brew.sh/formula/octave#default # The packages are listed in (alphabetically sorted) blocks: # The first block is for "direct" dependencies. # The second block is for additional dependencies needed when building from a release tarball. # The third block is for additional dependencies needed when building from a repository checkout. run: | brew update brew reinstall gcc brew install arpack epstool fftw fig2dev fltk fontconfig freetype \ ghostscript gl2ps glpk gnuplot graphicsmagick hdf5 libsndfile \ libtool openblas pcre portaudio pstoedit qhull qrupdate \ qscintilla2 qt@5 rapidjson readline suite-sparse sundials texinfo \ ccache gnu-sed openjdk pkg-config \ automake autoconf bison gettext icoutils librsvg mactex-no-gui eval "$(/usr/libexec/path_helper)" - name: prepare ccache # create human readable timestamp id: ccache_cache_timestamp run: | echo "::set-output name=TIMESTAMP::$(date +"%Y-%m-%d_%H-%M-%S")" - name: setup ccache # setup the github cache used to maintain the ccache from one job to the next uses: actions/cache@v2 with: path: /Users/runner/Library/Caches/ccache key: ccache:${{ matrix.os }}:${{ matrix.compiler }}:${{ github.ref }}:${{ steps.ccache_cache_timestamp.outputs.timestamp }}:${{ github.sha }} restore-keys: | ccache:${{ matrix.os }}:${{ matrix.compiler }}:${{ github.ref }} ccache:${{ matrix.os }}:${{ matrix.compiler }} - name: configure ccache # The cache doesn't seem to compress well on macOS. Is it already compressed? # Limit the maximum size to avoid exceeding the total cache limits. run: | test -d /Users/runner/Library/Preferences/ccache || mkdir /Users/runner/Library/Preferences/ccache echo "max_size = 1.5G" >> /Users/runner/Library/Preferences/ccache/ccache.conf ccache -s - name: bootstrap run: | export PATH="$MY_PATH:$PATH" ./bootstrap - name: configure timeout-minutes: 30 env: MY_CC: ${{ matrix.cc }} MY_CXX: ${{ matrix.cxx }} MY_CPPFLAGS: ${{ matrix.cppflags }} MY_LDFLAGS: ${{ matrix.ldflags }} # This is a hodgepodge of configure flags put together from the # buildbot rules: # https://hg.octave.org/octave-buildbot/file/tip/master.cfg#l543 # And the homebrew formula: # https://github.com/Homebrew/homebrew-core/blob/HEAD/Formula/octave.rb # Amended with additional flags that seem to be needed. # Not all of those might be needed or be correct. run: | export PATH="$MY_PATH:$PATH" echo $PATH echo $MY_CC --version $MY_CC --version echo $MY_CXX --version $MY_CXX --version mkdir .build cd .build && ../configure \ CC="ccache $MY_CC" \ CXX="ccache $MY_CXX" \ F77="ccache gfortran" \ CPPFLAGS="-I/usr/local/opt/gettext/include -I/usr/local/opt/icu4c/include -I/usr/local/opt/qt@5/include -I/usr/local/opt/readline/include -I/usr/local/opt/sqlite/include $MY_CPPFLAGS" \ CXXFLAGS="-O2 -g -std=c++11" \ LDFLAGS="-L/usr/local/lib -L/usr/local/opt/bison/lib -L/usr/local/opt/gettext/lib -L/usr/local/opt/icu4c/lib -L/usr/local/opt/readline/lib -L/usr/local/opt/sqlite/lib $MY_LDFLAGS" \ PKG_CONFIG_PATH="/usr/local/opt/openblas/lib/pkgconfig:/usr/local/opt/icu4c/lib/pkgconfig:/usr/local/opt/qt@5/lib/pkgconfig" \ QCOLLECTIONGENERATOR="qhelpgenerator" \ --with-x=no \ --with-blas="-L/usr/local/opt/openblas/lib -lopenblas" \ --with-java-homedir="/usr/local/opt/openjdk" \ --prefix="${HOME}/usr" - name: build run: | export PATH="$MY_PATH:$PATH" make -C ./.build all -j3 V=1 - name: ccache status run: ccache -s - name: check # Continuing on error in this step means that jobs will be "green" even # if the test suite crashes. But if we don't continue, we'll loose the # ccache and other jobs will be cancelled, too. # It would be nice if we could mark the job as "yellow" (and continue) # in that case. # It would also be nice if we could analyze the test suite results # automatically. continue-on-error: true timeout-minutes: 60 run: make -C ./.build check - name: display test log continue-on-error: true # Displaying the log shouldn't take long. Cancel the step if it does. timeout-minutes: 5 run: cat ./.build/test/fntests.log windows: runs-on: ${{ matrix.os }} defaults: run: # Use pre-installed MSYS2 as default shell shell: C:/msys64/usr/bin/bash.exe --login -eo pipefail "{0}" strategy: # Allow other runners in the matrix to continue if some fail fail-fast: false matrix: # For available GitHub-hosted runners, see: https://docs.github.com/en/actions/using-github-hosted-runners/about-github-hosted-runners os: [windows-2019] compiler: [gcc] target: [x86_64, i686] include: - compiler: gcc target: x86_64 target-triplet: x86_64-w64-mingw32 target-prefix: mingw-w64-x86_64 msystem: MINGW64 mingw-prefix: mingw64 cc: x86_64-w64-mingw32-gcc cxx: x86_64-w64-mingw32-g++ f77: x86_64-w64-mingw32-gfortran - compiler: gcc target: i686 target-triplet: i686-w64-mingw32 target-prefix: mingw-w64-i686 msystem: MINGW32 mingw-prefix: mingw32 cc: i686-w64-mingw32-gcc cxx: i686-w64-mingw32-g++ f77: i686-w64-mingw32-gfortran env: MSYSTEM: ${{ matrix.msystem }} CHERE_INVOKING: 1 CC: ${{ matrix.cc }} CXX: ${{ matrix.cxx }} F77: ${{ matrix.f77 }} TARGET_TRIPLET: ${{ matrix.target-triplet }} TARGET_PREFIX: ${{ matrix.target-prefix }} # perl uses cmd shell by default PERL5SHELL: bash -l -c steps: - name: update MSYS2 # This step might update the runtime which requires a console restart # In this case, it will kill the console which shouldn't count as an error. continue-on-error: true run: pacman --noconfirm -Syu - name: install dependencies # The packages are listed in (alphabetically sorted) blocks: # The first block is for mandatory dependencies. # The second block is for optional dependencies needed when building from a release tarball. # The third block is for additional dependencies needed when building from a repository checkout. # The fourth block is for additional run-time dependencies that aren't needed to build (to run test suite) run: | pacman --noconfirm -Syu pacman --noconfirm -S --needed --overwrite * \ base-devel ${TARGET_PREFIX}-toolchain ${TARGET_PREFIX}-lapack ${TARGET_PREFIX}-openblas ${TARGET_PREFIX}-pcre \ ${TARGET_PREFIX}-arpack ${TARGET_PREFIX}-curl ${TARGET_PREFIX}-fftw ${TARGET_PREFIX}-fltk ${TARGET_PREFIX}-gl2ps ${TARGET_PREFIX}-glpk ${TARGET_PREFIX}-ghostscript ${TARGET_PREFIX}-gnuplot ${TARGET_PREFIX}-graphicsmagick ${TARGET_PREFIX}-hdf5 ${TARGET_PREFIX}-libsndfile ${TARGET_PREFIX}-portaudio ${TARGET_PREFIX}-qhull ${TARGET_PREFIX}-qrupdate ${TARGET_PREFIX}-qscintilla ${TARGET_PREFIX}-qt5 ${TARGET_PREFIX}-rapidjson ${TARGET_PREFIX}-suitesparse ${TARGET_PREFIX}-sundials \ git ${TARGET_PREFIX}-ccache ${TARGET_PREFIX}-icoutils ${TARGET_PREFIX}-librsvg texinfo \ unzip zip - name: checkout repository uses: actions/checkout@v2 - name: prepare ccache # Create human readable timestamp id: ccache_cache_timestamp run: | echo "::set-output name=TIMESTAMP::$(date +"%Y-%m-%d_%H-%M-%S")" - name: setup ccache # Setup the github cache used to maintain the ccache from one job to the next uses: actions/cache@v2 with: path: C:/msys64/home/runneradmin/.ccache key: ccache:${{ matrix.os }}:${{ matrix.compiler }}:${{ matrix.target }}:${{ github.ref }}:${{ steps.ccache_cache_timestamp.outputs.timestamp }}:${{ github.sha }} restore-keys: | ccache:${{ matrix.os }}:${{ matrix.compiler }}:${{ matrix.target }}:${{ github.ref }} ccache:${{ matrix.os }}:${{ matrix.compiler }}:${{ matrix.target }} - name: configure ccache # Limit the maximum size and switch on compression to avoid exceeding the total disk or cache quota. run: | which ccache test -d ~/.ccache || mkdir -p ~/.ccache echo "max_size = 1.2G" > ~/.ccache/ccache.conf echo "compression = true" >> ~/.ccache/ccache.conf ccache -s # create ccache helper script for Fortran compiler echo -e '#!/bin/bash\nccache '$MINGW_PREFIX'/bin/'$F77' "$@"' > $MINGW_PREFIX/lib/ccache/bin/$F77 # prepend path to ccache helper scripts to PATH echo 'export PATH="$MINGW_PREFIX/lib/ccache/bin:$PATH"' >> ~/.bash_profile - name: bootstrap run: | ./bootstrap - name: configure # configure sometimes hangs while compiling 32bit Fortran. # It should take much less than 30 minutes. Cancel the step if it takes longer. timeout-minutes: 30 # FIXME: Fix building with Java support. Override JAVA_HOME for now. # FIXME: How do we get a working TeX environment in MSYS2? Disable building the documentation for now. # Linking with ncurses fails. Use termcap library instead. run: | which $CC echo $CC --version $CC --version which $CXX echo $CXX --version $CXX --version which $F77 echo $F77 --version $F77 --version mkdir .build cd .build && ../configure \ JAVA_HOME="" \ --disable-docs \ ac_cv_search_tputs=-ltermcap - name: build # Spawning processes seems to have a big overhead on this platform. Use a somewhat larger number of parallel processes to compensate for that. run: | make -C ./.build all -j8 V=1 - name: ccache status continue-on-error: true run: ccache -s - name: install # Install Octave # Create symlinks to the libexec binaries in bin (or they won't find their libraries?) run: | make -C ./.build install V=1 ln -sf ${MINGW_PREFIX}/libexec/octave/7.0.0/exec/${TARGET_TRIPLET}/octave-gui.exe ${MINGW_PREFIX}/bin/octave-gui.exe ln -sf ${MINGW_PREFIX}/libexec/octave/7.0.0/exec/${TARGET_TRIPLET}/octave-svgconvert.exe ${MINGW_PREFIX}/bin/octave-svgconvert.exe - name: check # Continuing on error in this step means that jobs will be "green" even # if the test suite crashes. But if we don't continue, we'll loose the # ccache and other jobs will be cancelled, too. # It would be nice if we could mark the job as "yellow" (and continue) # in that case. # It would also be nice if we could analyze the test suite results # automatically. continue-on-error: true timeout-minutes: 60 # We cannot run "make check" in the MSYS2 shell because it will fail with backslash as a file separator. # Instead, use the CMD shell and set up the environment to pick up what we just built. shell: cmd env: MSYS_PATH: C:\msys64\${{ matrix.mingw-prefix }}\bin;C:\msys64\usr\bin MSYSTEM: ${{ matrix.msystem }} TERM: cygwin GNUTERM: wxt GS: gs.exe # Also, install .bat file for "makeinfo" so that it can be called from that shell. run: | set PATH=%MSYS_PATH%;%PATH% echo @echo off > C:/msys64/usr/bin/makeinfo.bat echo %%~d0 >> C:/msys64/usr/bin/makeinfo.bat echo cd "%%~dp0" >> C:/msys64/usr/bin/makeinfo.bat echo perl "%%~n0" %%* >> C:/msys64/usr/bin/makeinfo.bat rem Start Octave and run test suite octave-gui --eval "__run_test_suite__" - name: display test log continue-on-error: true # Displaying the log shouldn't take long. Cancel the step if it does. timeout-minutes: 5 run: cat fntests.log