diff --git a/doc/mjit.md b/doc/mjit.md index 2ca1ce5d4f..9622a3bc26 100644 --- a/doc/mjit.md +++ b/doc/mjit.md @@ -14,7 +14,7 @@ The following platforms are either tested on CI or assumed to work. The MJIT support for the following platforms is no longer maintained. * OS: Windows (mswin, MinGW), Solaris -* Arch: SPARC +* Arch: SPARC, s390x ### Architectures diff --git a/test/lib/jit_support.rb b/test/lib/jit_support.rb index 3846749016..1ea8da094e 100644 --- a/test/lib/jit_support.rb +++ b/test/lib/jit_support.rb @@ -9,6 +9,10 @@ module JITSupport %r[\A.*/bin/intel64/icc\b], %r[\A/opt/developerstudio\d+\.\d+/bin/cc\z], ] + UNSUPPORTED_ARCHITECTURES = [ + 's390x', + 'sparc', + ] # debian-riscv64: "gcc: internal compiler error: Segmentation fault signal terminated program cc1" https://rubyci.org/logs/rubyci.s3.amazonaws.com/debian-riscv64/ruby-master/log/20200420T083601Z.fail.html.gz # freebsd12: cc1 internal failure https://rubyci.org/logs/rubyci.s3.amazonaws.com/freebsd12/ruby-master/log/20200306T103003Z.fail.html.gz # rhel8: one or more PCH files were found, but they were invalid https://rubyci.org/logs/rubyci.s3.amazonaws.com/rhel8/ruby-master/log/20200306T153003Z.fail.html.gz @@ -55,11 +59,13 @@ module JITSupport ) end + # For MJIT def supported? return @supported if defined?(@supported) - @supported = RbConfig::CONFIG["MJIT_SUPPORT"] != 'no' && UNSUPPORTED_COMPILERS.all? do |regexp| - !regexp.match?(RbConfig::CONFIG['MJIT_CC']) - end && !appveyor_pdb_corrupted? && !PENDING_RUBYCI_NICKNAMES.include?(ENV['RUBYCI_NICKNAME']) + @supported = RbConfig::CONFIG["MJIT_SUPPORT"] != 'no' && + UNSUPPORTED_COMPILERS.all? { |regexp| !regexp.match?(RbConfig::CONFIG['MJIT_CC']) } && + !PENDING_RUBYCI_NICKNAMES.include?(ENV['RUBYCI_NICKNAME']) && + !UNSUPPORTED_ARCHITECTURES.include?(RUBY_PLATFORM.split('-', 2).first) end def yjit_supported? @@ -67,18 +73,6 @@ module JITSupport RUBY_PLATFORM.match?(/^(x86_64|x64|arm64|aarch64)-/) end - # AppVeyor's Visual Studio 2013 / 2015 are known to spuriously generate broken pch / pdb, like: - # error C2859: c:\projects\ruby\x64-mswin_120\include\ruby-2.8.0\x64-mswin64_120\rb_mjit_header-2.8.0.pdb - # is not the pdb file that was used when this precompiled header was created, recreate the precompiled header. - # https://ci.appveyor.com/project/ruby/ruby/builds/32159878/job/l2p38snw8yxxpp8h - # - # Until we figure out why, this allows us to skip testing JIT when it happens. - def appveyor_pdb_corrupted? - return false unless ENV.key?('APPVEYOR') - stdout, _stderr, _status = eval_with_jit_without_retry('proc {}.call', verbose: 2, min_calls: 1) - stdout.include?('.pdb is not the pdb file that was used when this precompiled header was created, recreate the precompiled header.') - end - def remove_mjit_logs(stderr) if defined?(RubyVM::MJIT) && RubyVM::MJIT.enabled? # utility for -DFORCE_MJIT_ENABLE stderr.gsub(/^MJIT warning: Skipped to compile unsupported instruction: \w+\n/m, '')