Commit graph

27 commits

Author SHA1 Message Date
Alan Wu
1a20765074 DRY up CARGO_VERBOSE for JITs 2025-07-16 19:50:30 -04:00
Alan Wu
92b218fbc3 YJIT: ZJIT: Allow both JITs in the same build
This commit allows building YJIT and ZJIT simultaneously, a "combo
build". Previously, `./configure --enable-yjit --enable-zjit` failed. At
runtime, though, only one of the two can be enabled at a time.

Add a root Cargo workspace that contains both the yjit and zjit crate.
The common Rust build integration mechanisms are factored out into
defs/jit.mk.

Combo YJIT+ZJIT dev builds are supported; if either JIT uses
`--enable-*=dev`, both of them are built in dev mode.

The combo build requires Cargo, but building one JIT at a time with only
rustc in release build remains supported.
2025-05-15 00:39:03 +09:00
Alan Wu
41251fdd30 YJIT: Fix linker warnings on macOS for Cargo (development) builds 2025-02-13 17:27:28 -05:00
Nobuyoshi Nakada
78e12beb6d
Propagate jobserver FDs to cargo and rustc [ci skip]
https://doc.rust-lang.org/cargo/reference/build-scripts.html#jobserver
> Cargo and `rustc` use the jobserver protocol, developed for GNU
> make, to coordinate concurrency across processes.

Older GNU make used FDs to connect to the jobserver, and needs an
explicit use of `$(MAKE)` variable or `+` prefix to pass the FDs.
2024-03-22 22:05:58 +09:00
Alan Wu
8cb906d706 YJIT: Simplify linker flavor check
By not allowlisting every OS that could have a GNU flavor linker,
it's also a bigger tent
2023-10-05 17:31:54 -04:00
Nobuyoshi Nakada
cf1223348a
Remove unmatch parenthesis
```
yjit/yjit.mk:48: Extraneous text after `ifneq' directive
```
2023-10-06 03:39:33 +09:00
Thomas Hurst
fd22d5debb
YJIT: Build on BSD platforms with GNU make (#8591) 2023-10-05 13:23:51 -04:00
Takashi Kokubun
5ff1c00e17
YJIT: Let local yjit-bindgen exit successfully (#8156) 2023-08-01 14:46:14 -07:00
Takashi Kokubun
8286eed20b Allow testing a different version 2023-04-13 17:53:41 -07:00
Nobuyoshi Nakada
08324ab9eb
Include --no-llvm-bc option in NM macro only if usable 2023-04-08 12:47:27 +09:00
Alan Wu
3e1e09b2b7 YJIT: Smoke test on Rust 1.58.0
Since warnings might show up on older version but not newer ones.
2023-04-05 09:49:31 -04:00
Takashi Kokubun
116c0f92ef Resurrect yjit-smoke-test before #7651 2023-04-04 11:07:57 -07:00
Takashi Kokubun
b7717fc390
YJIT: Stack temp register allocation (#7651)
Co-authored-by: Maxime Chevalier-Boisvert <maximechevalierb@gmail.com>
2023-04-04 10:58:11 -07:00
Alan Wu
c3cd191092 YJIT: Add make yjit-smoke-test [ci skip]
I have this as a shell command and Maxime told me that she finds it
useful, too. I tested this on a release build and a dev build.

Note I intentional didn't put `$(Q)` in front of everything so `make`
echos the command it runs.
2023-02-23 12:12:57 -05:00
Nobuyoshi Nakada
be81495c16
Silence dozens of useless warnings from nm on macOS 2023-01-31 19:42:01 +09:00
Alan Wu
7d4395cb69 YJIT: Fix shared/static library symbol leaks
Rust 1.58.0 unfortunately doesn't provide facilities to control symbol
visibility/presence, but we care about controlling the list of
symbols exported from libruby-static.a and libruby.so.

This commit uses `ld -r` to make a single object out of rustc's
staticlib output, libyjit.a. This moves libyjit.a out of MAINLIBS and adds
libyjit.o into COMMONOBJS, which obviates the code for merging libyjit.a
into libruby-static.a. The odd appearance of libyjit.a in SOLIBS is also
gone.

To filter out symbols we do not want to export on ELF platforms, we use
objcopy after the partial link. On darwin, we supply a symbol list to
the linker which takes care of hiding unprefixed symbols.

[Bug #19255]

Co-authored-by: Nobuyoshi Nakada <nobu@ruby-lang.org>
2023-01-27 12:28:09 -05:00
Takashi Kokubun
65dfe2eea8
Suppress the output of if [ 'xyes' = xyes ]; code
itself
2022-12-13 22:26:24 -08:00
Alan Wu
47a5b34aba YJIT: Fold check-yjit-bindings into yjit-bindgen
So it's shorter on CI and the hint about how the fix the failure shows
up. It's going to print a diff locally too, but that should be fine.
2022-12-08 15:58:00 -05:00
Alan Wu
a8dc49b4d5 YJIT: Support MAKE=bmake for release build
This add support for bmake, which should allow building with
`configure --enable-yjit` for the BSDs. Tested on FreeBSD 13 and
on macOS with `configure MAKE=bmake` on a case-sensitive file system.

It works by including a fragment into the Makefile through the configure
script, similar to common.mk. It uses the always rebuild approach to
keep build system changes minimal.
2022-09-20 14:17:27 -04:00
Takashi Kokubun
f8dad616c2
YJIT: Show --yjit-stats of railsbench on CI (#6403)
* YJIT: Show --yjit-stats of railsbench on CI

* YJIT: Use --enable-yjit=dev to see ratio_in_yjit

* YJIT: Show master GitHub URL for quick comparison

* YJIT: Avoid making CI red by a yjit-bench failure
2022-09-20 06:07:28 +09:00
Nobuyoshi Nakada
075df960c9 Add comments to touch libyjit 2022-09-14 21:24:40 +09:00
Nobuyoshi Nakada
e1a9d88494 Touch libyjit.a which may be still old due to the cache 2022-09-14 21:24:40 +09:00
Nobuyoshi Nakada
f2429f0af5 Expand dependency for $(YJIT_LIBS)
Currently, miniruby is rebuild **always** when yjit is enabled, even
if nothing is changed.
2022-09-14 21:24:40 +09:00
John Hawthorn
0e85586ecc Add --enable-yjit=dev_nodebug configure option 2022-07-29 16:32:14 -07:00
John Hawthorn
fbd24793cb Add --enable-yjit=stats configure option 2022-07-29 16:32:14 -07:00
Noah Gibbs
118e3edc32
Add a check-yjit-bindgen-unused target. Add to CI. (#6066)
This fails if there are any unused rust-bindgen "allow" entries. For
that target we turn on Rust warnings (there are a lot) and grep for the
ones that correspond to unused allow entries.

I've added check-yjit-bindgen-unused as a dependency of
check-yjit-bindings, so unused allow entries will now fail CI.

This change also removes our single unused allow entry (VM_CALL.*) which
was known to be bad.
2022-06-29 12:49:46 -04:00
Nobuyoshi Nakada
689b5ae752
Split YJIT rules for CODEOWNERS 2022-06-02 10:12:34 +09:00