summaryrefslogtreecommitdiff
path: root/win32/mkexports.rb
AgeCommit message (Collapse)Author
2025-11-08Use `IO.popen` instead of `IO.foreach` with pipeNobuyoshi Nakada
2025-11-08Revert to shell execution when invoking nm toolLars Kanis
This reverts a change of commit b3598cf2a355497693bb66097edc156af3152e9b . On Windows on ARM64 with LLVM the "NM" tool is called with a parameter like so: ``` RbConfig::CONFIG["NM"] # => "llvm-nm --no-llvm-bc" ``` Therefore the command must be called with a shell string.
2025-11-08Win: Strip CRs from `cpp` and `nm` outputNobuyoshi Nakada
The combination of mingw tools and cygin/msys2 ruby leaves CRs.
2025-11-08Win32: Remove unreferenced COMDAT from object filesNobuyoshi Nakada
Windows 11 SDK Version 10.0.26100.0 introduced a new internal inline function in ucrt/corecrt_math.h. Even it appears in object files and will be included in the DEF file, it will be removed from the DLL and result in a linker error.
2025-11-08Workaround for VC 19.42.34433 againNobuyoshi Nakada
Prefix underscore is already removed here.
2025-11-08Workaround for VC 19.42.34433Nobuyoshi Nakada
Suddenly it began to add `_ucrt_int_to_float` by the recent version.
2025-11-08mkexports.rb: Revert removed flip-flopNobuyoshi Nakada
This reverts commit 63ae1e3cb5d302e5229143c00152328166d26780.
2025-06-14merge revision(s) 72bda0f981c7136f50254c433bbfb97a953f634b: [Backport #21255]nagachika
[Bug #21255] Win32: Do not export `__declspec(selectany)` symbols ``` x64-vcruntime140-ruby350.def : error LNK2001: unresolved external symbol Avx2WmemEnabledWeakValue ```
2023-11-23windows-arm64 support (#8995)Pierrick Bouvier
* [win32] fix compilation for windows-arm64 Credits to MSYS2 Ruby package using this patch. * [win32] nm use full options Fix compilation error when using MSYS2 environment. Credits to MSYS2 Ruby package using this patch. * [win32] detect llvm-windres (used for windows-arm64) When adding preprocessor option for llvm-windres (using clang as parameter), it fails. Thus, do not add this. It's needed to be able to compile windows-arm64 version, because MSYS2 toolchain is LLVM based (instead of GCC/binutils). * [win32] pioinfo detection for windows-arm64 This fixes "unexpected ucrtbase.dll" for native windows-arm64 ruby binary. It does not solve issue with x64 version emulated on this platform. Value of pioinfo pointer can be found in ucrtbase.dll at latest adrp/add sequence before return of _isatty function. This works for both release and debug ucrt. Due to the nature of aarch64 ISA (vs x86 or x64), it's needed to disassemble instructions to retrieve offset value, which is a bit more complicated than matching specific string patterns. Details about adrp/add usage can be found in this blog post: https://devblogs.microsoft.com/oldnewthing/20220809-00/?p=106955 For instruction decoding, the Arm documentation was used as a reference.
2023-02-27Prefer to use File.foreach instead of IO.foreachHiroshi SHIBATA
Notes: Merged: https://github.com/ruby/ruby/pull/7387
2022-11-21Use class methods of `File` over `Kernel.open` and `IO.read`Nobuyoshi Nakada
Notes: Merged: https://github.com/ruby/ruby/pull/6777
2022-09-08[MSWin] Fix for non-Windows (cygwin/msys) BASERUBYNobuyoshi Nakada
Notes: Merged: https://github.com/ruby/ruby/pull/6331
2021-02-22Search subclasses from constantsNobuyoshi Nakada
Notes: Merged: https://github.com/ruby/ruby/pull/4209
2021-02-20MSys is a variant of CygwinNobuyoshi Nakada
2020-05-12win32/mkexports.rb: do not export internal symbolsNobuyoshi Nakada
Functions using `rb_thread_t` and `rb_execution_context_t` are internal use only.
2019-05-17Do not export InitVM functionsNobuyoshi Nakada
2018-07-29mkexports.rb: flip-flopnobu
* win32/mkexports.rb (Exports::Mswin#each_export): get rid of flip-flop warning. [ruby-core:88147] [Bug #14946] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@64095 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2018-02-04mjit_compile.c: merge initial JIT compilerk0kubun
which has been developed by Takashi Kokubun <takashikkbn@gmail> as YARV-MJIT. Many of its bugs are fixed by wanabe <s.wanabe@gmail.com>. This JIT compiler is designed to be a safe migration path to introduce JIT compiler to MRI. So this commit does not include any bytecode changes or dynamic instruction modifications, which are done in original MJIT. This commit even strips off some aggressive optimizations from YARV-MJIT, and thus it's slower than YARV-MJIT too. But it's still fairly faster than Ruby 2.5 in some benchmarks (attached below). Note that this JIT compiler passes `make test`, `make test-all`, `make test-spec` without JIT, and even with JIT. Not only it's perfectly safe with JIT disabled because it does not replace VM instructions unlike MJIT, but also with JIT enabled it stably runs Ruby applications including Rails applications. I'm expecting this version as just "initial" JIT compiler. I have many optimization ideas which are skipped for initial merging, and you may easily replace this JIT compiler with a faster one by just replacing mjit_compile.c. `mjit_compile` interface is designed for the purpose. common.mk: update dependencies for mjit_compile.c. internal.h: declare `rb_vm_insn_addr2insn` for MJIT. vm.c: exclude some definitions if `-DMJIT_HEADER` is provided to compiler. This avoids to include some functions which take a long time to compile, e.g. vm_exec_core. Some of the purpose is achieved in transform_mjit_header.rb (see `IGNORED_FUNCTIONS`) but others are manually resolved for now. Load mjit_helper.h for MJIT header. mjit_helper.h: New. This is a file used only by JIT-ed code. I'll refactor `mjit_call_cfunc` later. vm_eval.c: add some #ifdef switches to skip compiling some functions like Init_vm_eval. win32/mkexports.rb: export thread/ec functions, which are used by MJIT. include/ruby/defines.h: add MJIT_FUNC_EXPORTED macro alis to clarify that a function is exported only for MJIT. array.c: export a function used by MJIT. bignum.c: ditto. class.c: ditto. compile.c: ditto. error.c: ditto. gc.c: ditto. hash.c: ditto. iseq.c: ditto. numeric.c: ditto. object.c: ditto. proc.c: ditto. re.c: ditto. st.c: ditto. string.c: ditto. thread.c: ditto. variable.c: ditto. vm_backtrace.c: ditto. vm_insnhelper.c: ditto. vm_method.c: ditto. I would like to improve maintainability of function exports, but I believe this way is acceptable as initial merging if we clarify the new exports are for MJIT (so that we can use them as TODO list to fix) and add unit tests to detect unresolved symbols. I'll add unit tests of JIT compilations in succeeding commits. Author: Takashi Kokubun <takashikkbn@gmail.com> Contributor: wanabe <s.wanabe@gmail.com> Part of [Feature #14235] --- * Known issues * Code generated by gcc is faster than clang. The benchmark may be worse in macOS. Following benchmark result is provided by gcc w/ Linux. * Performance is decreased when Google Chrome is running * JIT can work on MinGW, but it doesn't improve performance at least in short running benchmark. * Currently it doesn't perform well with Rails. We'll try to fix this before release. --- * Benchmark reslts Benchmarked with: Intel 4.0GHz i7-4790K with 16GB memory under x86-64 Ubuntu 8 Cores - 2.0.0-p0: Ruby 2.0.0-p0 - r62186: Ruby trunk (early 2.6.0), before MJIT changes - JIT off: On this commit, but without `--jit` option - JIT on: On this commit, and with `--jit` option ** Optcarrot fps Benchmark: https://github.com/mame/optcarrot | |2.0.0-p0 |r62186 |JIT off |JIT on | |:--------|:--------|:--------|:--------|:--------| |fps |37.32 |51.46 |51.31 |58.88 | |vs 2.0.0 |1.00x |1.38x |1.37x |1.58x | ** MJIT benchmarks Benchmark: https://github.com/benchmark-driver/mjit-benchmarks (Original: https://github.com/vnmakarov/ruby/tree/rtl_mjit_branch/MJIT-benchmarks) | |2.0.0-p0 |r62186 |JIT off |JIT on | |:----------|:--------|:--------|:--------|:--------| |aread |1.00 |1.09 |1.07 |2.19 | |aref |1.00 |1.13 |1.11 |2.22 | |aset |1.00 |1.50 |1.45 |2.64 | |awrite |1.00 |1.17 |1.13 |2.20 | |call |1.00 |1.29 |1.26 |2.02 | |const2 |1.00 |1.10 |1.10 |2.19 | |const |1.00 |1.11 |1.10 |2.19 | |fannk |1.00 |1.04 |1.02 |1.00 | |fib |1.00 |1.32 |1.31 |1.84 | |ivread |1.00 |1.13 |1.12 |2.43 | |ivwrite |1.00 |1.23 |1.21 |2.40 | |mandelbrot |1.00 |1.13 |1.16 |1.28 | |meteor |1.00 |2.97 |2.92 |3.17 | |nbody |1.00 |1.17 |1.15 |1.49 | |nest-ntimes|1.00 |1.22 |1.20 |1.39 | |nest-while |1.00 |1.10 |1.10 |1.37 | |norm |1.00 |1.18 |1.16 |1.24 | |nsvb |1.00 |1.16 |1.16 |1.17 | |red-black |1.00 |1.02 |0.99 |1.12 | |sieve |1.00 |1.30 |1.28 |1.62 | |trees |1.00 |1.14 |1.13 |1.19 | |while |1.00 |1.12 |1.11 |2.41 | ** Discourse's script/bench.rb Benchmark: https://github.com/discourse/discourse/blob/v1.8.7/script/bench.rb NOTE: Rails performance was somehow a little degraded with JIT for now. We should fix this. (At least I know opt_aref is performing badly in JIT and I have an idea to fix it. Please wait for the fix.) *** JIT off Your Results: (note for timings- percentile is first, duration is second in millisecs) categories_admin: 50: 17 75: 18 90: 22 99: 29 home_admin: 50: 21 75: 21 90: 27 99: 40 topic_admin: 50: 17 75: 18 90: 22 99: 32 categories: 50: 35 75: 41 90: 43 99: 77 home: 50: 39 75: 46 90: 49 99: 95 topic: 50: 46 75: 52 90: 56 99: 101 *** JIT on Your Results: (note for timings- percentile is first, duration is second in millisecs) categories_admin: 50: 19 75: 21 90: 25 99: 33 home_admin: 50: 24 75: 26 90: 30 99: 35 topic_admin: 50: 19 75: 20 90: 25 99: 30 categories: 50: 40 75: 44 90: 48 99: 76 home: 50: 42 75: 48 90: 51 99: 89 topic: 50: 49 75: 55 90: 58 99: 99 git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@62197 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2017-10-28Localize EC functionsnobu
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@60533 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2016-12-14Fixed link error with VC14.usa
* win32/mkexports.rb (Exports::Mswin#each_exports): should ignore `vsprintf_s_l` and the like just like `vsprintf_l`. [ruby-dev:49899] [Bug #13033] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@57079 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2016-04-23Support MSVC14 and 15 [Bug #11118]naruse
Search _pioinfo which is not exported after MSVC14. [Bug #12014] [GH-884] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@54737 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2015-02-23Makefile.in: make static IDs symbols localnobu
* Makefile.in (LIBRUBY_SO): make symbols for static IDs which begin with ruby_static_id_ local too. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@49699 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2012-11-12* win32/mkexports.rb (each_export): skip garbages generated by VS2012'susa
nmake. reported and patched by Yoshida Masato at [Bug #7333] [ruby-dev:46484] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@37625 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2012-07-27* win32/mkexports.rb: should not export DllMain().usa
reported by luis at [ruby-core:46743] [Bug #6790], solved by Heesob Park, and confirmed by nobu. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@36544 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2011-11-28* win32/mkexports.rb (Exports#initialize): remove old symbol name.usa
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@33880 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2011-11-28* win32/mkexports.rb (Exports#read_substitution): need to readnobu
from subst.h too. [Bug #5675] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@33879 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2011-08-16* win32/mkexports.rb (Exports::Mswin#each_export): exclude Init_nobu
and _threadptr_ functions, as well as mingw. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@32985 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2010-11-11* configure.in (SYMBOL_PREFIX): separate from EXPORT_PREFIX.nobu
* win32/mkexports.rb (Exports#each_export): use SYMBOL_PREFIX. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@29739 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2010-11-09* cygwin/GNUmakefile.in (scriptbin): make executable file fromnobu
scripts with stub. * ruby.c (load_file_internal): assume xflag for exe file as well as no-shebang file. * tool/rbinstall.rb: install script programs. * win32/mkexports.rb (Exports#initialize): alias ruby_sysinit for stub. * win32/stub.c: stub for scripts. [EXPERIMENTAL] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@29738 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2010-10-05* win32/mkexports.rb: revert r29320 and r29402.wanabe
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@29411 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2010-10-03* tool/config.sub: revert r29320, r29324, r29347, r29354, r29365wanabe
to automake-1.11.1. [ruby-core:32634] * win32/mkexports.rb: no longer use 'mingw64'. a patch from Luis Lavena at [ruby-core:32678]. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@29402 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2010-09-23* tool/config.sub: add mingw64.wanabe
* win32/mkexports.rb (Exports::Mingw64): added. * win32/mkexports.rb (Exports::Mingw32): renamed from Exports::Mingw. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@29320 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2010-04-05* win32/mkexports.rb (each_export): VC10 support.usa
a patch from Charlie Savage in [ruby-core:29254] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@27220 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2010-04-04* include/ruby/ruby.h: replace snprintf and vsnprintf bynaruse
ruby_snprintf and ruby_vsnprintf. [ruby-dev:40909] * configure.in: don't check snprintf(3) and vsnprintf(3). * include/ruby/missing.h: don't delare snprintf and vsnprintf. * include/ruby/ruby.h: include stdarg.h. * sprintf.c: include vsnprintf.c * vsnprintf.c: renamed from missing/vsnprintf.c. * vsnprintf.c: remove useless ifdefs. * win32/mkexports.rb: use ruby_snprintf and ruby_vsnprintf. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@27214 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2010-02-08* common.mk (COMPILE_PRELUDE): rbconfig is loaded on demand.nobu
* tool/eval.rb, win32/{mkexports,resource}.rb: miniruby no longer contains "." in $:. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@26618 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2009-10-10* configure.in, Makefile.in (LIBRUBY_SO), common.mk (ruby.imp),nobu
win32/mkexports.rb (each_export): exclude _threadptr_ functions. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@25284 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2009-06-24 * win32/mkexports.rb: rbconfig.rb exists on ".".usa
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@23838 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2009-02-04 * win32/mkexports.rb: shouldn't export DllMain.usa
reported at http://pc11.2ch.net/test/read.cgi/tech/1233686068/21 git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@22025 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2009-02-02* cygwin/GNUmakefile.in (RUBYDEF): uses mkexports.rb on cygwin too.nobu
* win32/mkexports.rb (Exports::Cygwin): added. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@21989 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2009-01-27* cygwin/GNUmakefile.in (RUBYDEF): needs DATA marks to exportnobu
non-function symbols. [ruby-core:21582] * win32/mkexports.rb (Exports::Mingw#each_export): ditto. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@21795 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2009-01-20* Makefile.in (miniruby): renames and then removes, to get rid ofnobu
EPERM on cygwin and mingw. * Makefile.in ($(LIBRUBY_SO)): use wildcard option of objcopy. * configure.in (DLDFLAGS): do not export all symbols. * cygwin/GNUmakefile.in (RUBYDEF): rejects symbols prefixex with Init_. * win32/mkexports.rb (Exports::Mingw): includes all symbols except for prefixed with Init_ as well as mswin32. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@21685 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2008-12-22* cygwin/GNUmakefile.in (rubydll.def), win32/mkexports.rbnobu
(Exports#exports): added VERSION. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@20912 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2008-12-22* configure.in (mingw): no longer uses snprintf and vsnprintf ofnobu
msvcrt. * win32/win32.c (rb_w32_vsnprintf, rb_w32_snprintf): removed. * win32/Makefile.sub (config.h): vsnprintf exists in VC7 or later. * win32/mkexports.rb (Exports#initialize): aliases rb_w32_vsnprintf and rb_w32_snprintf for binary compatibility. * sprintf.c (rb_str_format): uses snprintf instead of sprintf. * numeric.c (flo_to_s, rb_num2long, rb_num2ll): ditto. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@20909 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2008-05-28* win32/mkexports.rb (Exports#objdump, Exports#each_line): extracted.nobu
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@16669 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2008-05-28 * win32/mkexports.rb (Exports::Mswin#each_export): speed up.usa
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@16667 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2007-10-13* win32/mkexports.rb: deal with __fastcall name decorations.nobu
[ruby-list:44111] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@13694 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2007-10-13* {bcc,win}32/mkexports.rb: explicit data. [ruby-list:44108]nobu
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@13688 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2007-09-29* main.c (main): use platform-independent per-process initialization.nobu
[ruby-dev:31900] * ruby.c (ruby_sysinit): new function for per-process initialization. * include/ruby/ruby.h (RUBY_GLOBAL_SETUP): toplevel setup declaration. * include/ruby/win32.h, win32/mkexports.rb: alias NtInitialize ruby_sysinit. * win32/win32.c (rb_w32_sysinit): renamed from NtInitialize. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@13569 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2007-06-27 * include/ruby/win32.h, win32/Makefile.sub, win32/configure.bat,usa
win32/mkexports.rb, win32/setup.mak, win32/win32.c: import x64-mswin64 port. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@12635 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2007-06-10* include/ruby: moved public headers.nobu
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@12501 b2dd03c8-39d4-4d8f-98ff-823fe69b080e