A.M. Hoornweg 144 Posted January 7, 2019 Hello all, I would like to re-build Delphi's RTL/VCL without RTTI for a certain project in which the compiled size of the DLL's and executables is important. I'd be very grateful if someone could supply some insight or maybe a script to accomplish it. I have no problem doing so using Delphi XE but Delphi Rio is giving me a hard time. Share this post Link to post
Rollo62 536 Posted January 7, 2019 Not 100% sure if there is some unclean code somewhere, but if you don't bind Rtti-Units it won't be linked to the project. Since I have to use Rtti I'm not aware of any wrong linking, please keep me updated where this happens exactly. Share this post Link to post
Dalija Prasnikar 1396 Posted January 8, 2019 @Rollo62 @Kryvich {$RTTI} directive has local scope. That means you cannot set it for whole project and have it applied on everything. If you want to remove advanced RTTI from RTL/VCL, you have to recompile RTL/VCL, which is what OP wants. As far as recompiling Rio RTL/VCL is concerned, I haven't tried to do it... so I don't know what are the problems and even less what would be solution. Share this post Link to post
Arnaud Bouchez 407 Posted January 8, 2019 (edited) Use a Delphi version < 2010 (where the enhanced RTTI has been introduced) or FPC/Lazarus, and to something even smaller, https://github.com/rofl0r/KOL or our https://github.com/synopse/LVCL Edited January 8, 2019 by Arnaud Bouchez Share this post Link to post
Rollo62 536 Posted January 8, 2019 (edited) If you want to remove advanced RTTI from RTL/VCL, you have to recompile RTL/VCL, which is what OP wants. @Dalija Interesting. How much MB would we gain from removing Rtti in system libs ? I've never considered to remove anything from there, as I think its probably not worth to consider memory space in 21th century. Maybe this is another story with mobile devices still. Anyway, I use Rtti, so maybe I have to consider this in my next project. Edited January 8, 2019 by Rollo62 Share this post Link to post
A.M. Hoornweg 144 Posted January 8, 2019 1 hour ago, Rollo62 said: If you want to remove advanced RTTI from RTL/VCL, you have to recompile RTL/VCL, which is what OP wants. I've never considered to remove anything from there, as I think its probably not worth to consider memory space in 21th century. Maybe this is another story with mobile devices still. It may not be a problem with single-executable applications, but RTTI overhead really becomes an issue if we're talking about a modular application suite consisting of dozens of DLL's (mostly COM servers). If each and every one of these DLL's carries the RTTI overhead of much of the RTL and/or VCL, it simply adds up. Which is totally tragic if the project doesn' even use any of it. And before you ask, no, runtime packages aren't an option here. But apart from that, from an intellectual property point of view we simply think it is undesirable that our competitors could inspect the objects in our compiled executables. 1 hour ago, Rollo62 said: 7 hours ago, Kryvich said: Perhaps this will help: Hello, that's pretty much how I do it using Delphi XE. I copy all RTL/VCL units into a temporary subdirectory, then reference all these units in a small dummy console program (having the RTTI directives mentioned in the link above) and then perform a full build of this dummy project. The resulting bunch of DCUS can then be used instead of the regular RTL/VCL (just set a project's search path to the directory containing the dcus) and it will produce vastly smaller executables. Unfortunately, in newer Delphi versions these RTTI settings can no longer be specified per-project, they must be set per-unit, requiring a manual change of every unit and that's many hundreds of them. I was hoping there would be a way around that. Share this post Link to post
Kryvich 165 Posted January 8, 2019 (edited) @A.M. Hoornweg In newer Delphi versions you must put the $RTTI directive on each library unit. This is the main difference from XE. @Rollo62 I brought some statistics for my applications here: Edited January 8, 2019 by Kryvich Share this post Link to post
Rollo62 536 Posted January 8, 2019 (edited) 2 hours ago, Kryvich said: @Rollo62 I brought some statistics for my applications here: Yes, thanks. Seems I missed this interesting post before. I didn't expect that much influence, also very intersting ist the LVCL project from Arnoud. 7 hours ago, Arnaud Bouchez said: https://github.com/rofl0r/KOL or our https://github.com/synopse/LVCL Thanks god I'm not pushing towards smallest memory footprint on VCL, but maybe a LFMX project will be interesting one day Edited January 8, 2019 by Rollo62 Share this post Link to post