Results 1 to 9 of 9

Thread: Hoe maak ik een zo klein mogelijke executable met FPC?

  1. #1
    Counting your refs Paul-Jan's Avatar
    Join Date
    Feb 2002
    Location
    Lage Zwaluwe
    Posts
    2,160

    Hoe maak ik een zo klein mogelijke executable met FPC?

    Omdat het inmiddels meer dan 20 jaar geleden is dat ik voor het laatst iets serieus heb gereleased in de demoscene, heb ik zin om weer wat op te pikken. Om precies te zijn de 64k categorie, waar executable (inclusief meeverpakte data, zowel graphics als muziek) niet groter mag zijn dan 64k. Ter referentie, je krijgt dan b.v. https://www.youtube.com/watch?v=QhqT0DhV9yE als resultaat (maar zo goed wordt mijn knutsel natuurlijk niet ).

    De standaard keuze is C++, omdat er in die hoek een hele stapel tooling en kant- en klare broncode beschikbaar is, maar ik wil zeker m'n oude liefde Pascal niet zomaar passeren hier.

    Ik heb netjes https://wiki.freepascal.org/Size_Matters doorgelezen, maar daar ligt de focus toch wel op een iets andere orde van grootte. Bij het bouwen van 64k intro's ligt de lat wat hoger (lager?). De standaard packer was vroeger kkrunchy, die veel (veel!) beter presteert dan UPX in deze categorie, maar helaas nooit TLS support had en dus niet bruikbaar was voor Delphi & co. Tegenwoordig is er BeRoEXEPAcker, ik heb goede hoop dat dit met een freepascal executable goed is aan te slingeren.

    Maar voordat ik zelf de diepte in duik: hoe krijg ik een FPC applicatie zo klein mogelijk? Ik heb letterlijk -niets- nodig aan libraries, die paar windows calls om een window + loop in de lucht te brengen schrijf ik zelf wel uit. En daarna gaan we toch de OpenGL/DirectX in, er is verder geen interactie.
    Last edited by Paul-Jan; 20-Apr-20 at 23:05.

  2. #2
    mov rax,marcov; push rax marcov's Avatar
    Join Date
    Apr 2004
    Location
    Ehv, Nl
    Posts
    10,357
    Gebruik antieke versies, smartlink, strip, gebruik geen sysutils , veel meer is er niet. Misschien de RTL uitkleden.

    Maar, zoals de wiki al uitlegt, FPC is hier niet voor ontworpen.

  3. #3
    Senior Member Wok's Avatar
    Join Date
    Dec 2002
    Location
    Alkmaar
    Posts
    2,085
    Vroeger met bp7 of tp5.5 kon je console applicatie's maken van een paar Kb
    Maar ja dat was vroeger....
    10.4.2, Delphi2010, of Lazarus 2.2.0

  4. #4
    mov rax,marcov; push rax marcov's Avatar
    Join Date
    Apr 2004
    Location
    Ehv, Nl
    Posts
    10,357
    Nee hoor, met 16-bit FPC kan dat ook, en kan je zoals TP3 en 4 zelfs COM files maken en wat op de exe header bezuinigen.

    Maar ja, uit een van die oplossingen OpenGL/DirectX doen, zou een tikje lastig kunnen zijn natuurlijk. Sommige Voodoo (3DFX Monster 3D) games hadden opengl support. Indien nodig, kan ik de kaart wel leveren denk ik, maar dat wordt toch weer 32-bit.

    Weer in de gewone wereld, de winhello van FPC is 32-35kb afhankelijk van versie. Je zou met de MAP file kunnen kijken waar dat aan ligt. Hmm, in ieder geval deels aan $mode delphi/objfpc want dat laadt expliciet de objpas unit met delphi system unit uitbreidingen. Import tabellen zijn ook best groot (2kb) etc.
    Last edited by marcov; 21-Apr-20 at 12:34.

  5. #5
    Counting your refs Paul-Jan's Avatar
    Join Date
    Feb 2002
    Location
    Lage Zwaluwe
    Posts
    2,160
    Dank je voor het meedenken, het ziet er niet super veelbelovend uit. Enige indicatie wat potentieel een geschikte oude versie van Freepascal zou kunnen zijn?

  6. #6
    mov rax,marcov; push rax marcov's Avatar
    Join Date
    Apr 2004
    Location
    Ehv, Nl
    Posts
    10,357
    Een 2.2.4 of 2.4.4. Altijd de laatste van de series, die zijn het stabielst. Maar vlak het RTL afvijlen niet uit. Het kan zo simpel zijn als simpelweg voor functionaliteit die je niet gebruikt de function bodies commentariëren.

    En bij het TP dialect blijven dus. Delphi is bloat.

    Een andere fun manier is alles compileren naar assembler (-a), en die na bewerken.

    Zoals Size matters al aangeeft, er zijn mogelijkheden zat als je een tikje wilt werken.

    Een begin zou de winhello demo kunnen zijn (in fpc\<versie>\demo\win32). Die converteren, naar TP dialect vertalen en er zoveel mogelijk uitslopen.

    En dan moet je iets vinden (UPX, of Bero's ding, Bero gebruikt overigens van tijd tot tijd FPC al is ie geloof ik meer een D7 fetishist) dat het PE formaat tot het minimum sloopt.

  7. #7
    mov rax,marcov; push rax marcov's Avatar
    Join Date
    Apr 2004
    Location
    Ehv, Nl
    Posts
    10,357
    En de map file gebruiken om te kijken wat in gesmartlinked wordt.

  8. #8
    Counting your refs Paul-Jan's Avatar
    Join Date
    Feb 2002
    Location
    Lage Zwaluwe
    Posts
    2,160
    Super info, dank je!

  9. #9
    mov rax,marcov; push rax marcov's Avatar
    Join Date
    Apr 2004
    Location
    Ehv, Nl
    Posts
    10,357
    Als je vorderingen maakt (of zelfs maar een assessment), hou me even op de hoogte. Ik heb die "Size Matters" geschreven ooit :-)

Thread Information

Users Browsing this Thread

There are currently 1 users browsing this thread. (0 members and 1 guests)

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •