Issue #14445 has been updated by k0kubun (Takashi Kokubun).


lars / greiz-reinsdorf.de wrote (but seems not posted to redmine):

> Thank you Vladimir for this hint! I also think that profiling gcc makes sense, to find the root cause of this slowness, before adding iseq batching. Anyhow with the RTL-MJIT branch the compile time was similar slow on Windows, even with it's optimized header file in addition to precompiled headers.

Hmm, it's surprising for me because giving up the transformation increases the minimum compilation time from about 50ms to about 600ms on Linux, and MinGW's compilation is taking about 900ms on the same machine. 

Probably we can verify it with current trunk by manually transforming header to have "static" for functions that don't have. I'll try that later.

Note of implementation background: RTL-MJIT branch was succeeding to transform header because it removes many unused declarations. I removed the removal because it makes building header too slow, and current Ruby's trunk is failing to transform header because it doesn't remove them and they're bad for the transformation. But the failure should be bug and we should fix it without removing unused declarations.

----------------------------------------
Bug #14445: MJIT: Determine path of mjit header and libruby at runtime
https://bugs.ruby-lang.org/issues/14445#change-70278

* Author: larskanis (Lars Kanis)
* Status: Closed
* Priority: Normal
* Assignee: 
* Target version: 
* ruby -v: ruby 2.6.0dev (2018-02-05 trunk 62211) [x64-mingw32]
* Backport: 2.3: UNKNOWN, 2.4: UNKNOWN, 2.5: UNKNOWN
----------------------------------------
I'm pleased to see that the MJIT pull request has been merged and that my [initial Windows port](https://github.com/vnmakarov/ruby/pull/4) has been integrated as well! One part of this patch was to avoid builtin absolute paths in the binary. This part was not merged.

The current MJIT implementation uses the install prefix at build time as part of the include and library paths for gcc/clang at runtime. If ruby is distributed as pre-compiled binary, these paths can differ between build and runtime. This applies in particular to the Windows RubyInstaller, where a user defined directory is used to store the binaries.

So for RubyInstaller I'm using [this patch](https://github.com/oneclick/rubyinstaller2-packages/blob/master/mingw-w64-ruby-head/0001-MJIT-Determine-path-of-mjit-header-and-libruby-at-ru.patch) to determine the paths based on the ruby top directory and to compile only relative paths into the binary. There's probably a cleaner approach to do this, but since ruby has always been fully path-relocatable, I think this should be fixed for MJIT as well.


---Files--------------------------------
0001-MJIT-Determine-path-of-mjit-header-and-libruby-at-ru.patch (6.29 KB)


-- 
https://bugs.ruby-lang.org/

Unsubscribe: <mailto:ruby-core-request / ruby-lang.org?subject=unsubscribe>
<http://lists.ruby-lang.org/cgi-bin/mailman/options/ruby-core>