summaryrefslogtreecommitdiffhomepage
path: root/tasks/toolchains
AgeCommit message (Collapse)Author
2021-03-07chore: fix spellingJohn Bampton
2021-01-31Change `.o.d` back to `.d` because `.pi.d` is no longer createdKOBAYASHI Shuji
2021-01-28Refine `preprocess_options`; ref d95ffb036KOBAYASHI Shuji
If we modify an option that may have been specified by users, we may make unintended changes, so it is better not to modify it as much as possible, IMO.
2020-12-13Improve source scanning for presymKOBAYASHI Shuji
The accuracy is greatly improved by using the C preprocessor to scan C sources for presym. C preprocessor can perfectly interpret all comments and preprocessor directives, so it can detect all symbols defined, for example `mrbgems/mruby-socket/src/const.cstub`. Also, as described later, this change will greatly improve the accuracy of presym detection from Ruby sources. ## Result The number of lines in the `presym` file for all gems is as follows: ```console Previous: 999 (false positive = 89, undetected = 297) New: 1207 ``` ## Build process The new build process (with presym) is as follows: 1. Build `mrbc` without presym (more on building without presym later). 2. Compile Ruby sources to C struct format with the `mrbc` created in step 1, and create` mrblib.c` and `gem_init.c`. Note that the symbols in the created files are output as `MRB_SYM` family macros or `mrb_intern_lit` instead of IDs (details will be described later). 3. C preprocessor processes C sources including the created files of step 2 and outputs them as `.i` files. In these files, for example, `MRB_IVSYM(foo)` is converted to `<@! "@" "foo" !@>` and `mrb_define_module(mrb, "Foo")` is converted to `<@! "Foo" !@>`. 4. Scan the files created in step 3 and create `presym` and` presym.inc` files. The files created in step 2 should output all static symbols defined in Ruby sources, including local variables, so we can detect all presyms by just scanning C sources without scanning Ruby sources directly. Further, by this process, the files to be scanned becomes the same as the files to be compiled, so that there is no excess or deficiency. ## Related changes The following changes have been made in relation to realizing this feature. ### Allow build without presym It enables build without presym to achieve the "Build process: 1". This incorporates #5202, see its issue for details. Note that when presym is enabled, even adding a local variable to a Ruby source may change contents of presym and require recompilation of almost all C sources. This is inconvenient, especially during trial and error in development, but this feature is also useful because it does not cause this problem if presym is disabled. ### Automatically create build target for `mrbc` without presym The `mrbc` used in the "Build process: 1" will be built by automatically creating a build target for it. The build name is `SOURCE_BUILD_NAME/mrbc`. ### Constantize output of C struct format by `mrbc` To realizing the "Build process: 2", as mentioned above, symbol IDs are not output directly in C struct format output by `mrbc`. As a result, the output becomes constant regardless of the state of presym at the time of `mrbc` build, and it is possible to detect symbols of Ruby sources in the same way as other C sources. Note that `mrb_intern_lit` is used for symbols that do not become presym, but in this state, the corresponding element in the symbol array cannot be statically initialized, so it is initialized at run time (therefore, in this case, the `const` qualifier is not added to the symbol array). ### Specify arbitrary `mrbc` file To realizing the "Build process: 2", enabled to specify `mrbc` created by another build target or pre-built` mrbc`. Use `MRuby::Build#mrbcfile =` to specify it explicitly. You can omit the "Build process: 1" by specifying pre-built `mrbc`, and you can always use an optimized build to compile Ruby sources faster. I think changes that affect the output of `mrbc` are rare, so in many cases it helps to improve efficiency. With presym, the build will be a little slower due to more build steps, but this feature will improve it a bit. ### Create presym files for each build target This feature was proposed at #5194 and merged once, but was reverted in 5c205e6e due to problems especially with cross-compilation. It has been introduced again because this change solves the problem. The presym files will be created below. * `build/NAME/presym` * `build/NAME/include/mruby/presym.inc` ### Other changes * Because presym detection accuracy is greatly improved as mentioned above, `MRuby::Gem::Specification#cdump?` is set to true by default, and `disable_cdump` is added instead of `enable_cdump`. Also, support for gem specific presym files has been discontinued (https://github.com/mruby/mruby/issues/5151#issuecomment-730967232). * Previously, `mrbc` was automatically created for the `host` build, but it will not be created if the build target for `mrbc` mentioned above is automatically created. At this time, `mrbc` file of the `mrbc` build is copied to` bin/`. * Two types of `.d` files will be created, `.o.d` and `.i.d`. oThis is because if `.i` depends on `presym.inc`, the dependency will circulate, so the `.d` file cannot be shared. * Changed file created with `enable_cxx_exception` to `X-cxx.cxx` from `X.cxx` to use the mruby standard Rake rule. ### Note Almost all C sources will need to be recompiled if there are any changes to `persym.inc` (if not recompiled properly, it will often result in run-time error). If `gcc` toolchain is used, dependencies are resolved by the `.d` file, so it become automatically recompile target, but if not (e.g. MSVC), it is necessary to manually make it recompile target. Also, even if `gcc` toolchain is used, it may not become recompile target if external gems does not use the mruby standard Rake rule. In particular, if the standard rule is overwritten, such as https://github.com/mruby/mruby/pull/5112/files, `.d` file will not be read, so be careful.
2020-11-21Remove `-Wdeclaration-after-statement` from gcc options; #5159Yukihiro "Matz" Matsumoto
2020-11-21Improve determining C++ compiler in `tasks/toolchains/gcc.rake`KOBAYASHI Shuji
* Consider CC envvar as C compiler on which to make the decision. * Consider the case where C compiler is `ccache gcc`, etc.
2020-11-14Remove redundant command execution in `header_search_paths`KOBAYASHI Shuji
There is no need to execute command in duplicate for the same reason as #5128.
2020-04-01fix for quoting visualcppdsisnero
2020-04-01build when directories and files have spacesDominic Sisneros
Modified the build to quote filenames so that it builds when files have spaces
2020-03-08Increase flexibility of CrossBuildReckordp
2019-12-23Use GNU extension in C++ for cygwintake-cheeze
2019-12-21Fix "undefined method `Pathname'"; fix #4895KOBAYASHI Shuji
2019-10-04Remove unused code to old Visual Studio in `tasks/toolchains/visualcpp.rake`KOBAYASHI Shuji
2019-09-13Revert part of "Refine `tasks/toolchains/(gcc|clang).rake`" (07c6b7f0)KOBAYASHI Shuji
`-Wzero-length-array` is not a mandatory option, so the original is better.
2019-09-13Fix warnings for invalid C++ option with `enable_cxx_abi`; ref #3618, #4703KOBAYASHI Shuji
2019-09-12Refine `tasks/toolchains/(gcc|clang).rake`KOBAYASHI Shuji
- Make sure to specify `-std=gnu99` for C compiler flag. - Make sure to specify `-Wzero-length-array` for C/C++ compiler flag (Clang). - Extract similar codes.
2019-08-05Use new specifiers/modifiers of `mrb_vfromat()`KOBAYASHI Shuji
The binary sizes (gems are only `mruby-bin-mruby`) are reduced slightly in my environment than before the introduction of new specifiers/modifiers (5116789a) with this change. ------------+-------------------+-------------------+-------- BINARY | BEFORE (5116789a) | AFTER (This PR) | RATIO ------------+-------------------+-------------------+-------- mruby | 593416 bytes | 593208 bytes | -0.04% libmruby.a | 769048 bytes | 767264 bytes | -0.23% ------------+-------------------+-------------------+-------- BTW, I accidentally changed `tasks/toolchains/visualcpp.rake` at #4613, so I put it back.
2019-08-03Change second argument to `%l` of `mrb_vformat()` to `size_t` from `mrb_int`KOBAYASHI Shuji
- `size_t` is more commonly used. - `len` argument of `mrb_str_new()` is `size_t`. NOTE: The test for `%l` is temporarily disabled because adding a new type to `mrbgems/mruby-test/vformat.c` causes an error (memory error?) on Visual Studio 2017 in AppVeyor.
2019-04-16Avoid potential zero size array declaration; fix #4382KOBAYASHI Shuji
2019-03-06Refer also CXX and CC env vars as linker command in gcc and clang toolchainKOBAYASHI Shuji
ref #4292
2019-02-23Remove explicit set of `DISABLE_GEMS`KOBAYASHI Shuji
`DISABLE_GEMS` is automatically set (or unset); ref #790
2018-12-22Append cflags for undefined macrodearblue
2018-09-07Clear terminated spacedearblue
2018-07-04Add ~/Android/Sdk/ndk-bundle as default NDK homeduangsuse
2017-12-24Removed the Visual Studio Version Check because it does notLothar Scholz
work with internationalized versions of Visual Studio. It will capture the returned string in the local codepage encoding and make ruby exits with an invalid UTF8 error message. Also "Version" might be translated and not appear in the output.
2017-12-11Add `enable_sanitizer` method for clang and gcc.Yukihiro "Matz" Matsumoto
The patch is created by @take_cheese in #3872
2017-06-28Remove redundant use of `Object#to_s` in interpolation.Yukihiro "Matz" Matsumoto
2017-02-28Compile C files by C compiler when C++ files mixed.Yukihiro "Matz" Matsumoto
ref #3267 #3470 By this commit, mruby do not use C++ ABI mode unless you specify explicitly. It compiles C files by C compilers, with C++ exception enabled when it sees C++ files in your configured mrbgems. I haven't tried visualcpp, so please submit an issue if you see any problem with C++ gems on Windows.
2017-02-16Android toolchain separated target architecture compile flags (ctarget) from ↵Felix Jones
shared compile flags (cflags). Added support for custom mfpu and float-abi switches for the armeabi-v7a target.
2017-02-15Modify default cflags.crimsonwoods
2017-02-15Add '-Wl,--fix-cortex-a8' linker option for 'armeabi-v7a' architecture.crimsonwoods
2017-02-15Set default linker 'flags' and 'flags_before_libraries'.crimsonwoods
2016-11-24Fixed language standard mode for GCC (cannot use gnu99 with C++, c++03 used ↵Tomasz Dąbrowski
instead)
2016-11-24Fix for compiling mruby as C++ on Visual Studio toolchainTomasz Dąbrowski
2016-10-08Removed GCC TODOFelix Jones
2016-10-08Android GCC support re-addedFelix Jones
2016-10-08Fixed mips and mips64: GCC Toolchain now points to GCC.Felix Jones
2016-10-07Android task: NDK default search paths now favour ndk-bundle. Added macOS ↵Felix Jones
NDK search paths.
2016-09-15Fixed regex order falling early in arch cases, causing x86_64 and arm-v7a to ↵Felix Jones
use wrong target.
2016-09-15Re-written android.rake task for latest Android NDK clang. Currently loses ↵Felix Jones
support for GCC and mips, mips64. Addresses issue #3208
2016-04-16Avoid Syntax Error on CRuby v1.8ksss
CRuby v1.8 dose not support named capture
2016-03-22deprecate Visual Studio 2010 and 2012cremno
2016-03-22remove unnecessary array/eachcremno
2016-02-11Add toolchain support for OpenWRTDaniel Bovensiepen
2016-01-13Fix build error in ruby 1.8.asatou
Apply change of #2978 to :clang, :gcc, :visualcpp toolchains
2015-10-15Merge branch 'fix_androidndk_rake' of https://github.com/crimsonwoods/mruby ↵Yukihiro "Matz" Matsumoto
into crimsonwoods-fix_androidndk_rake
2015-10-12Rename androidndk tolchain to just androidSeba Gamboa
2015-10-13delete tasks/toolchains/androideabi.rake; ref #2983 #2988Yukihiro "Matz" Matsumoto
use androidndk.rake which is better and 64bit aware
2015-10-12Fix issue: LDFLAGS is not applied correctly.crimsonwoods
2015-10-11Accoding to the implementation of 'cflags', '-no-canonical-prefixes' is ↵crimsonwoods
isolated.