diff --git a/.github/workflows/compilers.yml b/.github/workflows/compilers.yml index 6ddfba05db..e6ad9db6e2 100644 --- a/.github/workflows/compilers.yml +++ b/.github/workflows/compilers.yml @@ -167,6 +167,7 @@ jobs: # - { key: cppflags, name: VM_DEBUG_VERIFY_METHOD_CACHE, value: '-DVM_DEBUG_VERIFY_METHOD_CACHE' } - { key: cppflags, name: MJIT_FORCE_ENABLE, value: '-DMJIT_FORCE_ENABLE' } + - { key: cppflags, name: YJIT_FORCE_ENABLE, value: '-DYJIT_FORCE_ENABLE' } name: ${{ matrix.entry.name }} runs-on: ubuntu-latest diff --git a/.github/workflows/yjit-macos.yml b/.github/workflows/yjit-macos.yml new file mode 100644 index 0000000000..be0f3c8986 --- /dev/null +++ b/.github/workflows/yjit-macos.yml @@ -0,0 +1,69 @@ +name: YJIT MacOS +on: [push, pull_request] +jobs: + make: + runs-on: macos-latest + strategy: + matrix: + test_task: [ "check", "test-bundler-parallel" ] #, "test-bundled-gems" ] + yjit_opts: [ + "--yjit", + "--yjit --yjit-call-threshold=1 --yjit-max-versions=1", + "--yjit --yjit-call-threshold=1", + "--yjit --yjit-call-threshold=2" + ] + fail-fast: false + env: + TESTOPTS: '-q --tty=no' + RUN_OPTS: '--disable-gems ${{ matrix.yjit_opts }}' + GITPULLOPTIONS: --no-tags origin ${{github.ref}} + steps: + - run: mkdir build + working-directory: + - name: git config + run: | + git config --global advice.detachedHead 0 + git config --global init.defaultBranch garbage + - uses: actions/checkout@v2 + with: + path: src + - name: Install libraries + run: | + brew upgrade + brew install gmp libffi openssl@1.1 zlib autoconf automake libtool readline + working-directory: src + - name: Set ENV + run: | + echo "JOBS=-j$((1 + $(sysctl -n hw.activecpu)))" >> $GITHUB_ENV + - run: ./autogen.sh + working-directory: src + - name: Run configure + run: ../src/configure -C --disable-install-doc --with-openssl-dir=$(brew --prefix openssl@1.1) --with-readline-dir=$(brew --prefix readline) + - run: make $JOBS incs + - run: make $JOBS +# - run: make leaked-globals +# if: matrix.test_task == 'check' + - run: make prepare-gems + if: ${{ matrix.test_task == 'check' }} + - run: make $JOBS -s ${{ matrix.test_task }} + timeout-minutes: 60 + env: + RUBY_TESTOPTS: "-q --tty=no" + TEST_BUNDLED_GEMS_ALLOW_FAILURES: "rexml" + - uses: k0kubun/action-slack@v2.0.0 + with: + payload: | + { + "ci": "GitHub Actions", + "env": "${{ github.workflow }} / ${{ matrix.test_task }}", + "url": "https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}", + "commit": "${{ github.sha }}", + "branch": "${{ github.ref }}".split('/').reverse()[0] + } + env: + SLACK_WEBHOOK_URL: ${{ secrets.SIMPLER_ALERTS_URL }} # ruby-lang slack: ruby/simpler-alerts-bot + if: ${{ failure() && github.event_name == 'push' }} + +defaults: + run: + working-directory: build diff --git a/.github/workflows/yjit-ubuntu.yml b/.github/workflows/yjit-ubuntu.yml new file mode 100644 index 0000000000..93e12b725f --- /dev/null +++ b/.github/workflows/yjit-ubuntu.yml @@ -0,0 +1,86 @@ +name: Ubuntu +on: [push, pull_request] +jobs: + make: + strategy: + matrix: + test_task: ["check", "test-bundler-parallel", "test-bundled-gems", "test-all", "test-spec"] + os: + - ubuntu-20.04 +# - ubuntu-18.04 + yjit_opts: [ + "--yjit", + "--yjit --yjit-call-threshold=1 --yjit-max-versions=1", + "--yjit --yjit-call-threshold=1", + "--yjit --yjit-call-threshold=2" + ] + configure: ["", "cppflags=-DRUBY_DEBUG"] + include: + - test_task: "test-all TESTS=--repeat-count=2" + os: ubuntu-20.04 + configure: "" + fail-fast: false + env: + GITPULLOPTIONS: --no-tags origin ${{github.ref}} + RUN_OPTS: ${{ matrix.yjit_opts }} + RUBY_DEBUG: ci + runs-on: ${{ matrix.os }} + steps: + - run: mkdir build + working-directory: + - name: Install libraries + run: | + set -x + sudo apt-get update -q || : + sudo apt-get install --no-install-recommends -q -y build-essential libssl-dev libyaml-dev libreadline6-dev zlib1g-dev libncurses5-dev libffi-dev bison autoconf ruby + - name: git config + run: | + git config --global advice.detachedHead 0 + git config --global init.defaultBranch garbage + - uses: actions/checkout@v2 + with: + path: src + - name: Fixed world writable dirs + run: | + chmod -v go-w $HOME $HOME/.config + sudo chmod -R go-w /usr/share + sudo bash -c 'IFS=:; for d in '"$PATH"'; do chmod -v go-w $d; done' || : + - name: Set ENV + run: | + echo "JOBS=-j$((1 + $(nproc --all)))" >> $GITHUB_ENV + - run: ./autogen.sh + working-directory: src + - name: Run configure + run: ../src/configure -C --disable-install-doc ${{ matrix.configure }} + - run: make $JOBS incs + - run: make $JOBS +# - run: make leaked-globals +# if: matrix.test_task == 'check' + - run: make prepare-gems + if: ${{ matrix.test_task == 'check' }} + - name: Create dummy files in build dir + run: | + ./miniruby -e '(("a".."z").to_a+("A".."Z").to_a+("0".."9").to_a+%w[foo bar test zzz]).each{|basename|File.write("#{basename}.rb", "raise %(do not load #{basename}.rb)")}' + if: ${{ matrix.test_task == 'check' }} + - run: make $JOBS -s ${{ matrix.test_task }} RUN_OPTS="$RUN_OPTS" + timeout-minutes: 60 + env: + RUBY_TESTOPTS: "-q --tty=no" + TEST_BUNDLED_GEMS_ALLOW_FAILURES: "" + - uses: k0kubun/action-slack@v2.0.0 + with: + payload: | + { + "ci": "GitHub Actions", + "env": "${{ matrix.os }} / ${{ matrix.test_task }}${{ matrix.configure }}", + "url": "https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}", + "commit": "${{ github.sha }}", + "branch": "${{ github.ref }}".split('/').reverse()[0] + } + env: + SLACK_WEBHOOK_URL: ${{ secrets.SIMPLER_ALERTS_URL }} # ruby-lang slack: ruby/simpler-alerts-bot + if: ${{ failure() && github.event_name == 'push' }} + +defaults: + run: + working-directory: build diff --git a/.github/workflows/yjit.yml b/.github/workflows/yjit.yml deleted file mode 100644 index 6263e7c533..0000000000 --- a/.github/workflows/yjit.yml +++ /dev/null @@ -1,70 +0,0 @@ -name: YJIT options -on: [push, pull_request] -jobs: - make: - strategy: - matrix: - # To make job names consistent - test_task: [ "check" ] - # Run with multiple thresholds and params to surface more bugs - yjit_opts: [ - "--yjit-call-threshold=1 --yjit-max-versions=1", - "--yjit-call-threshold=1", - "--yjit-call-threshold=2" - ] - fail-fast: false - runs-on: ubuntu-latest - env: - TESTOPTS: '-q --tty=no' - RUN_OPTS: '--disable-gems ${{ matrix.yjit_opts }}' - GITPULLOPTIONS: --no-tags origin ${{ github.ref }} - steps: - - run: mkdir build - working-directory: - - name: Install libraries - run: | - set -x - sudo apt-get update -q || : - sudo apt-get install --no-install-recommends -q -y build-essential libssl-dev libyaml-dev libreadline6-dev zlib1g-dev libncurses5-dev libffi-dev libgdbm-dev bison autoconf ruby - - name: git config - run: | - git config --global advice.detachedHead 0 - git config --global init.defaultBranch garbage - - uses: actions/checkout@v2 - with: - path: src - - name: Fixed world writable dirs - run: | - chmod -v go-w $HOME $HOME/.config - sudo chmod -R go-w /usr/share - sudo bash -c 'IFS=:; for d in '"$PATH"'; do chmod -v go-w $d; done' || : - - name: Set ENV - run: | - echo "JOBS=-j$((1 + $(nproc --all)))" >> $GITHUB_ENV - - run: ./autogen.sh - working-directory: src - - name: Run configure - run: ../src/configure -C --disable-install-doc - - run: make $JOBS incs - - run: make $JOBS - - run: sudo make $JOBS -s install - - run: sudo apt-get install gdb # used by test / test-all failure - - name: Run test - run: | - ulimit -c unlimited - make $JOBS -s test RUN_OPTS="$RUN_OPTS" - timeout-minutes: 60 - - name: Run test-all - run: | - ulimit -c unlimited - make $JOBS -s test-all RUN_OPTS="$RUN_OPTS" - timeout-minutes: 60 - - name: Run test-spec - run: | - ulimit -c unlimited - make $JOBS -s test-spec RUN_OPTS="$RUN_OPTS" - timeout-minutes: 60 - -defaults: - run: - working-directory: build diff --git a/ruby.c b/ruby.c index 6895838f5e..0476135d34 100644 --- a/ruby.c +++ b/ruby.c @@ -234,9 +234,14 @@ cmdline_options_init(ruby_cmdline_options_t *opt) opt->features.set = DEFAULT_FEATURES; #ifdef MJIT_FORCE_ENABLE /* to use with: ./configure cppflags="-DMJIT_FORCE_ENABLE" */ opt->features.set |= FEATURE_BIT(jit); -#else +#elif defined(YJIT_FORCE_ENABLE) opt->features.set |= FEATURE_BIT(yjit); #endif + + if(getenv("RUBY_YJIT_ENABLE")) { + opt->features.set |= FEATURE_BIT(yjit); + } + return opt; } diff --git a/yjit_iface.c b/yjit_iface.c index afeb9178e6..73b51fd50d 100644 --- a/yjit_iface.c +++ b/yjit_iface.c @@ -1092,7 +1092,7 @@ rb_yjit_init(struct rb_yjit_options *options) rb_yjit_opts = *options; rb_yjit_opts.yjit_enabled = true; - rb_yjit_opts.gen_stats |= !!getenv("YJIT_STATS"); + rb_yjit_opts.gen_stats = rb_yjit_opts.gen_stats || getenv("RUBY_YJIT_STATS"); #if !YJIT_STATS if(rb_yjit_opts.gen_stats) {