summaryrefslogtreecommitdiff
path: root/common.mk
AgeCommit message (Collapse)Author
2022-09-04Ignore fake.rb for snapshotNobuyoshi Nakada
2022-09-04fake.rb needs id.hNobuyoshi Nakada
2022-09-03Fix potential target type confliction [ci skip]Nobuyoshi Nakada
2022-09-03Make sources by BASERUBY if available instead of minirubyNobuyoshi Nakada
2022-09-03Generate the prelude sources by common-srcsNobuyoshi Nakada
2022-09-03Exclude LIBPATHENV wrapper from PREPNobuyoshi Nakada
2022-09-03builtin.c includes mini_builtin.c when cross-compilingNobuyoshi Nakada
2022-09-03Move duplicate dependenciesNobuyoshi Nakada
2022-09-01New constant caching insn: opt_getconstant_pathJohn Hawthorn
Previously YARV bytecode implemented constant caching by having a pair of instructions, opt_getinlinecache and opt_setinlinecache, wrapping a series of getconstant calls (with putobject providing supporting arguments). This commit replaces that pattern with a new instruction, opt_getconstant_path, handling both getting/setting the inline cache and fetching the constant on a cache miss. This is implemented by storing the full constant path as a null-terminated array of IDs inside of the IC structure. idNULL is used to signal an absolute constant reference. $ ./miniruby --dump=insns -e '::Foo::Bar::Baz' == disasm: #<ISeq:<main>@-e:1 (1,0)-(1,13)> (catch: FALSE) 0000 opt_getconstant_path <ic:0 ::Foo::Bar::Baz> ( 1)[Li] 0002 leave The motivation for this is that we had increasingly found the need to disassemble the instructions between the opt_getinlinecache and opt_setinlinecache in order to determine the constant we are fetching, or otherwise store metadata. This disassembly was done: * In opt_setinlinecache, to register the IC against the constant names it is using for granular invalidation. * In rb_iseq_free, to unregister the IC from the invalidation table. * In YJIT to find the position of a opt_getinlinecache instruction to invalidate it when the cache is populated * In YJIT to register the constant names being used for invalidation. With this change we no longe need disassemly for these (in fact rb_iseq_each is now unused), as the list of constant names being referenced is held in the IC. This should also make it possible to make more optimizations in the future. This may also reduce the size of iseqs, as previously each segment required 32 bytes (on 64-bit platforms) for each constant segment. This implementation only stores one ID per-segment. There should be no significant performance change between this and the previous implementation. Previously opt_getinlinecache was a "leaf" instruction, but it included a jump (almost always to a separate cache line). Now opt_getconstant_path is a non-leaf (it may raise/autoload/call const_missing) but it does not jump. These seem to even out. Notes: Merged: https://github.com/ruby/ruby/pull/6187
2022-08-26Fixed typoHiroshi SHIBATA
Notes: Merged: https://github.com/ruby/ruby/pull/6287
2022-08-26ruby-prof is now optionalHiroshi SHIBATA
Notes: Merged: https://github.com/ruby/ruby/pull/6287
2022-08-26added test-syntax-suggest and prepare tasksHiroshi SHIBATA
Notes: Merged: https://github.com/ruby/ruby/pull/6287
2022-08-22Added help entry for test-bundler-parallelHiroshi SHIBATA
2022-08-21Rename mjit_compile.c to mjit_compiler.cTakashi Kokubun
I'm planning to introduce mjit_compiler.rb, and I want to make this consistent with it. Consistency with compile.c doesn't seem important for MJIT anyway.
2022-08-21Use `rb_fork` to suppress deprecated-declarations warningsNobuyoshi Nakada
2022-08-17Update dependenciesNobuyoshi Nakada
Notes: Merged: https://github.com/ruby/ruby/pull/6239
2022-08-15Optimize Marshal dump/load for large (> 31-bit) FIXNUM (#6229)John Hawthorn
* Optimize Marshal dump of large fixnum Marshal's FIXNUM type only supports 31-bit fixnums, so on 64-bit platforms the 63-bit fixnums need to be represented in Marshal's BIGNUM. Previously this was done by converting to a bugnum and serializing the bignum object. This commit avoids allocating the intermediate bignum object, instead outputting the T_FIXNUM directly to a Marshal bignum. This maintains the same representation as the previous implementation, including not using LINKs for these large fixnums (an artifact of the previous implementation always allocating a new BIGNUM). This commit also avoids unnecessary st_lookups on immediate values, which we know will not be in that table. * Fastpath for loading FIXNUM from Marshal bignum * Run update-deps Notes: Merged-By: jhawthorn <john@hawthorn.email>
2022-08-14Update dependenciesNobuyoshi Nakada
2022-08-11The "gems" build directory was rename as ".bundle"Nobuyoshi Nakada
2022-08-05Move to tool/lib/bundled_gem.rbNobuyoshi Nakada
Notes: Merged: https://github.com/ruby/ruby/pull/6203
2022-08-05Extract bundled gems by BASERUBYNobuyoshi Nakada
Notes: Merged: https://github.com/ruby/ruby/pull/6203
2022-08-05Copy from bundled gem source for testNobuyoshi Nakada
Notes: Merged: https://github.com/ruby/ruby/pull/6203
2022-08-05Use configured GITNobuyoshi Nakada
2022-08-02Implement Queue#pop(timeout: sec)Jean Boussier
[Feature #18774] As well as `SizedQueue#pop(timeout: sec)` If both `non_block=true` and `timeout:` are supplied, ArgumentError is raised. Notes: Merged: https://github.com/ruby/ruby/pull/6185
2022-07-24Kill bundled gem tests when interruptedNobuyoshi Nakada
Notes: Merged: https://github.com/ruby/ruby/pull/6173
2022-07-21Update common sources including id.h after updateNobuyoshi Nakada
Notes: Merged: https://github.com/ruby/ruby/pull/6159
2022-07-21Refactor macros of array.cPeter Zhu
Move some macros in array.c to internal/array.h so that other files can also access these macros. Notes: Merged: https://github.com/ruby/ruby/pull/6157
2022-07-18Extract vm_ic_entry API to mimic vm_cc behaviorJemma Issroff
Notes: Merged: https://github.com/ruby/ruby/pull/5978
2022-07-17`Gem.unpack` extracts gems so able to executeNobuyoshi Nakada
Creates simple bin stubs to load the extracted executable files. After only extracted under `gems` directory, the gems are considered installed but the executable scripts are not found. Also the second argument is now the parent of the previous second and third arguments. Notes: Merged: https://github.com/ruby/ruby/pull/6145
2022-07-16Disable parallel built in test-bundled-gemsNobuyoshi Nakada
2022-07-16test-bundled-gems.rb needs `+` with GNU makeNobuyoshi Nakada
This script runs `make` internally, and sub-`make`s need the environment variable for the job server when compiling in parallel.
2022-07-14MJIT: Share rb_mjit_unit through mjit_unit.hTakashi Kokubun
mjit_compile.c should be able to access this more easily. Notes: Merged: https://github.com/ruby/ruby/pull/6140
2022-07-14MJIT: Merge mjit_worker.c back to mjit.c (#6138)Takashi Kokubun
Since #6006, we no longer avoid executing GC on mjit_worker.c and thus there's no need to carefully change how we write code whether you're in mjit.c or mjit_worker.c anymore. Notes: Merged-By: k0kubun <takashikkbn@gmail.com>
2022-07-12Fix some UBSAN false positives (#6115)Kevin Backhouse
* Fix some UBSAN false positives. * ruby tool/update-deps --fix Notes: Merged-By: jhawthorn <john@hawthorn.email>
2022-06-20Warn suspicious flag to `Regexp.new`Nobuyoshi Nakada
Now second argument should be `true`, `false`, `nil` or Integer. This flag is confused with third argument some times. Notes: Merged: https://github.com/ruby/ruby/pull/6039
2022-06-15Restore rb_exec_recursive_outerJohn Hawthorn
This was a public method, so we should probably keep it. Notes: Merged: https://github.com/ruby/ruby/pull/6027
2022-06-15Move RubyVM::MJIT to builtin RubyTakashi Kokubun
just less C code to maintain
2022-06-15Remove MJIT worker thread (#6006)Takashi Kokubun
[Misc #18830] Notes: Merged-By: k0kubun <takashikkbn@gmail.com>
2022-06-13Enable "make annocheck" on platforms other than Linux.Jun Aruga
The annocheck supports ELF format binaries compiled for any OS and for any architecture. It can work in not only Linux but also FreeBSD and Solaris. It is designed to be independent of the host OS and the architecture. Even in Mac, as the binaries are Mach-O foramt, the annocheck fails correctly with the message. e.g. Test binaries compiled for Mac OSX 10.13.6 (target_os: darwin17) in Fedora 35. ``` $ cat /etc/fedora-release Fedora release 35 (Thirty Five) $ file ruby ruby: Mach-O 64-bit x86_64 executable, flags:<NOUNDEFS|DYLDLINK|TWOLEVEL|WEAK_DEFINES|BINDS_TO_WEAK|PIE> $ annocheck ruby annocheck: Version 10.66. annocheck: Warning: ruby: is not an ELF format file. ``` See <https://sourceware.org/bugzilla/show_bug.cgi?id=29173> for details. Notes: Merged: https://github.com/ruby/ruby/pull/5916
2022-06-07Update the help message on /benchmarkTakashi Kokubun
I wanted to point out there's --output=all.
2022-05-16`annobin` works only when targeting FedoraNobuyoshi Nakada
And hopefully for other Linux. Since it is not run on the build os, `TEST_RUNNABLE` is not suitable for this case.
2022-05-16Add `make test-annocheck` to detect security issues.Jun Aruga
* Note that as the annocheck binary package is not available on Ubuntu, and it is working in progress in Debian, the script uses Fedora container, and it requires docker or podman command. https://www.debian.org/devel/wnpp/itp.en.html https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=926470 * .github/workflows/compilers.yml: Add "gcc-11 annocheck" case. To pass the CI, set `TEST_ANNOCHECK_OPTS: "--skip-pie --skip-notes"` for now. See <https://bugs.ruby-lang.org/issues/18061>. * Skip MJIT tests in case of annocheck case. The MJIT tests fail in the annocheck case. See <https://bugs.ruby-lang.org/issues/18781>. Notes: Merged: https://github.com/ruby/ruby/pull/5900
2022-04-27Rust YJITAlan Wu
In December 2021, we opened an [issue] to solicit feedback regarding the porting of the YJIT codebase from C99 to Rust. There were some reservations, but this project was given the go ahead by Ruby core developers and Matz. Since then, we have successfully completed the port of YJIT to Rust. The new Rust version of YJIT has reached parity with the C version, in that it passes all the CRuby tests, is able to run all of the YJIT benchmarks, and performs similarly to the C version (because it works the same way and largely generates the same machine code). We've even incorporated some design improvements, such as a more fine-grained constant invalidation mechanism which we expect will make a big difference in Ruby on Rails applications. Because we want to be careful, YJIT is guarded behind a configure option: ```shell ./configure --enable-yjit # Build YJIT in release mode ./configure --enable-yjit=dev # Build YJIT in dev/debug mode ``` By default, YJIT does not get compiled and cargo/rustc is not required. If YJIT is built in dev mode, then `cargo` is used to fetch development dependencies, but when building in release, `cargo` is not required, only `rustc`. At the moment YJIT requires Rust 1.60.0 or newer. The YJIT command-line options remain mostly unchanged, and more details about the build process are documented in `doc/yjit/yjit.md`. The CI tests have been updated and do not take any more resources than before. The development history of the Rust port is available at the following commit for interested parties: https://github.com/Shopify/ruby/commit/1fd9573d8b4b65219f1c2407f30a0a60e537f8be Our hope is that Rust YJIT will be compiled and included as a part of system packages and compiled binaries of the Ruby 3.2 release. We do not anticipate any major problems as Rust is well supported on every platform which YJIT supports, but to make sure that this process works smoothly, we would like to reach out to those who take care of building systems packages before the 3.2 release is shipped and resolve any issues that may come up. [issue]: https://bugs.ruby-lang.org/issues/18481 Co-authored-by: Maxime Chevalier-Boisvert <maximechevalierb@gmail.com> Co-authored-by: Noah Gibbs <the.codefolio.guy@gmail.com> Co-authored-by: Kevin Newton <kddnewton@gmail.com> Notes: Merged: https://github.com/ruby/ruby/pull/5826
2022-04-07Obey spec file locations to rubygemsNobuyoshi Nakada
Notes: Merged: https://github.com/ruby/ruby/pull/5774
2022-04-05Load fake.rb at `BTESTRUBY`Nobuyoshi Nakada
So that `mkmf` checks work from `make run`, and also remove duplicate `$(MINIRUBYOPT)` which is used in `$(MINIRUBY)`. Notes: Merged: https://github.com/ruby/ruby/pull/5747
2022-03-31Remove github and git related files from extracted bundled gemsNobuyoshi Nakada
2022-03-30Update dependenciesYusuke Endoh
Notes: Merged: https://github.com/ruby/ruby/pull/5703
2022-03-16add Unicode auxiliary files and Unicode UCD emoji files download for ↵Martin Dürst
ALWAYS_UPDATE_UNICODE
2022-03-13switch UNICODE_BETA back to NOMartin Dürst
2022-03-13update Unicode Version to 14.0.0 and Emoji version to 14.0Martin Dürst