1

Temat: gcc dla ST

Czy używanie takiego potwora jak gcc dla docelowej platformy 512KB ST ma sens?
Póki co to właśnie sobie zmontowałem libcmini i zwykła linijka kodu "printf("Hello world\n") kompiluje się zamiast do 125KB (jak przy domyślnej bibliotece standardowej mintlib) do 2,7KB.
Ale czy kojarzy ktoś czy są jeszcze inne rzeczy które trzeba by zrobić czy może fakczynie używanie gcc dla ST to bezsens jak strzelanie do muchy z armaty i lepiej użyć PureC?

(o matko, jakakolwiek operacja na forum {typu wyświetl "aktywne tematy", wejdź w jakiś wątek, dodaj nowy wpis ...} trwa jakieś pół minuty)

Ostatnio edytowany przez jury (2023-05-15 12:23:58)

2

Odp: gcc dla ST

Stripping zrobiłeś?

Pamięć studenta ma charakter kwantowy - student wie wszystko, ale jednocześnie nic nie pamięta.
- Kilka(naście?) pudełek z klawiszami i światełkami. I jeden Vectrex, żeby nimi wszystkimi rządzić.

3

Odp: gcc dla ST

Stripping akurat nie ma tutaj nic do rzeczy. To, że printf("hello world\n") kompiluje się do ponad 100KB, to "normalka", bo "nasza" standardowa biblioteka dla gcc zawsze dodaje bojową gotowość POSIX'a, więc to dlatego. I dlatego właśnie @mfro wytworzył  libcmini aby nie było takiego bezsensu jak ktoś chce tworzyć "zwykłe" rzeczy.
Ale właśnie pytanko mam czy coś jeszcze warto zrobić z gcc żeby to co wypluwa miało jakiś sens dla ST

4

Odp: gcc dla ST

Kiedyś trochę z tym walczyłem, ale nie mam cierpliwości na szarpanie się z dopieszczeniem ustawień. Ostatecznie odpuściłem GCC na rzecz AHCC. Ma swoje wady, ale generuje znacznie mniejszy kod.

5

Odp: gcc dla ST

AHCC to prymitywny kompilator. Jakość kodu będzie gorsza niż GCC.

Uiptool i moje dema na Falcona są napisane w GCC.

What can be asserted without proof can be dismissed without proof.

6

Odp: gcc dla ST

AHCC niestety nie jest już rozwijany.
Oprócz GCC jest jeszcze VBCC: http://sun.hasenbraten.de/vbcc/index.php
Miał może ktoś z tym styczność?

https://bumbershootsoft.wordpress.com/2 … -atari-st/

Ostatnio edytowany przez Cyprian (2023-05-15 15:05:29)

Lynx I / Mega ST 1 / 7800 / Portfolio / Lynx II / Jaguar / TT030 / Mega STe / 800 XL / 1040 STe / Falcon030 / 65 XE / 520 STm / SM124 / SC1435
DDD HDD / AT Speed C16 / TF536 / SDrive / PAK68/3 / Lynx Multi Card / LDW Super 2000 / XCA12 / SkunkBoard / CosmosEx / SatanDisk / UltraSatan / USB Floppy Drive Emulator / Eiffel / SIO2PC / Crazy Dots / PAM Net
http://260ste.atari.org

Odp: gcc dla ST

printf to jest wbrew pozorom całkiem skomplikowana funkcja, 125kb to nie jest dużo w tym kontekście.

Jak nie potrzebujesz wszystkiego co daje printf to lepsze może być poszukanie jakiejś lżejszej ale nikonieczenie w pełni implementującej standard implementacji.

Gcc samo z siebie generuja bardzo dobry i zwarty kod - problemem są biblioteki. Ale jeśli twój projekt jest duży (bo raczej na printf sie nie skończy?) to się to 'amortyzuje'.

Atari: FireBee, (Falcon030 CT60e SuperVidel SvEthlana CTPCI), TT, (520ST Pak030 Frak PuPla Panther), (520ST 4MB ST RAM 8MB TT RAM CosmosEx SC1435), (1040STFM UltraSatan SM124), (1040STE 4MB ST RAM 8MB TT RAM CosmosEx NetUSBee SM144 SC1224), 260ST, 520 ST+, (MEGA ST SM125), (65XE Rapidus U1MB VBXE SIDE2 SIO2PC), (Jaguar SkunkBoard), Lynx II, 2x Portfolio

8

Odp: gcc dla ST

gcc + opcja nostdlib / mshort + customowy startup + kilka funkcji i da się żyć (ewentualnie libcmini).. do printfa od jakiegoś czasu używam nanoprintf, ale to jest pod c99/11> ...

saulot / [nokturnal]
==================================
wiki Atari 16/32 bit: https://bus-error.nokturnal.pl

9

Odp: gcc dla ST

Btw PureC to też niezła opcja ze względu na ide / debugger, ale dialekt stary dialekt c może teraz trochę odstraszać... ale działa..

saulot / [nokturnal]
==================================
wiki Atari 16/32 bit: https://bus-error.nokturnal.pl

10

Odp: gcc dla ST

Adam Klobukowski napisał/a:

printf to jest wbrew pozorom całkiem skomplikowana funkcja, 125kb to nie jest dużo w tym kontekście.

To nie printf jest "problemem". Zamieniłem printf'a na "return 0" i to się skompilowało o 0,3KB mniej, czyli nie 125 a 124,7.
Chodzi o to, że mintlib niezależnie co masz w kodzie i tak dodaje cały inwentarz POSIX'owy. I to on zapycha bezsensownie (no bo i tak nie jest używany) binarkę. Po to Marcus stworzył właśnie libcmini, żeby ktoś kto nie potrzebuje POSIXa nie miał nic z niego w binarce.

Adam Klobukowski napisał/a:

Gcc samo z siebie generuja bardzo dobry i zwarty kod - problemem są biblioteki. Ale jeśli twój projekt jest duży (bo raczej na printf sie nie skończy?) to się to 'amortyzuje'

Projekt raczej duży, a printfa (ani nic w podobie) nie będzie najpewnie nawet jednego :) Tak tylko dałem jako przykład klasycznego hello worlda do kompilacji z mintlibem i libcmini, bo potrzebowałem jakiś cyferek.

saulot napisał/a:

gcc + opcja nostdlib / mshort + customowy startup + kilka funkcji i da się żyć (ewentualnie libcmini).. do printfa od jakiegoś czasu używam nanoprintf, ale to jest pod c99/11> ...

Dzięki (o tym mshort dzisiaj gdzieś coś już czytałem, jeszcze nie wiem co to, ale się zagłębię, bo podobno też to warto dodawać)

saulot napisał/a:

Btw PureC to też niezła opcja ze względu na ide / debugger, ale dialekt stary dialekt c może teraz trochę odstraszać... ale działa..

No właśnie to chyba była by najodpowiedniejsza opcja dla 512KB ST, ale właśnie ten stary dialekt ...

Odp: gcc dla ST

jury napisał/a:
Adam Klobukowski napisał/a:

printf to jest wbrew pozorom całkiem skomplikowana funkcja, 125kb to nie jest dużo w tym kontekście.

To nie printf jest "problemem". Zamieniłem printf'a na "return 0" i to się skompilowało o 0,3KB mniej, czyli nie 125 a 124,7.
Chodzi o to, że mintlib niezależnie co masz w kodzie i tak dodaje cały inwentarz POSIX'owy. I to on zapycha bezsensownie (no bo i tak nie jest używany) binarkę. Po to Marcus stworzył właśnie libcmini, żeby ktoś kto nie potrzebuje POSIXa nie miał nic z niego w binarce.

libcmini to nie MiNTLib, nie mieszajmy. Narzut jest zapewne spowodowany kodem do obsługi standardu ARGV i startowej inicjalizacji i nic to nie ma akurat wspólnego z POSIXem.

Atari: FireBee, (Falcon030 CT60e SuperVidel SvEthlana CTPCI), TT, (520ST Pak030 Frak PuPla Panther), (520ST 4MB ST RAM 8MB TT RAM CosmosEx SC1435), (1040STFM UltraSatan SM124), (1040STE 4MB ST RAM 8MB TT RAM CosmosEx NetUSBee SM144 SC1224), 260ST, 520 ST+, (MEGA ST SM125), (65XE Rapidus U1MB VBXE SIDE2 SIO2PC), (Jaguar SkunkBoard), Lynx II, 2x Portfolio

12

Odp: gcc dla ST

EmuTOS (również wersja .PRG i jego Desktop) jest kompilowany GCC i maje odpowiednie rozmiary do ilości pamięci ST. Ciekawe jak to ogarnęli.

Lynx I / Mega ST 1 / 7800 / Portfolio / Lynx II / Jaguar / TT030 / Mega STe / 800 XL / 1040 STe / Falcon030 / 65 XE / 520 STm / SM124 / SC1435
DDD HDD / AT Speed C16 / TF536 / SDrive / PAK68/3 / Lynx Multi Card / LDW Super 2000 / XCA12 / SkunkBoard / CosmosEx / SatanDisk / UltraSatan / USB Floppy Drive Emulator / Eiffel / SIO2PC / Crazy Dots / PAM Net
http://260ste.atari.org

Odp: gcc dla ST

Nie używają żadnych zewnętrznych bibliotek.

Atari: FireBee, (Falcon030 CT60e SuperVidel SvEthlana CTPCI), TT, (520ST Pak030 Frak PuPla Panther), (520ST 4MB ST RAM 8MB TT RAM CosmosEx SC1435), (1040STFM UltraSatan SM124), (1040STE 4MB ST RAM 8MB TT RAM CosmosEx NetUSBee SM144 SC1224), 260ST, 520 ST+, (MEGA ST SM125), (65XE Rapidus U1MB VBXE SIDE2 SIO2PC), (Jaguar SkunkBoard), Lynx II, 2x Portfolio

14

Odp: gcc dla ST

Adam Klobukowski napisał/a:

libcmini to nie MiNTLib, nie mieszajmy. Narzut jest zapewne spowodowany kodem do obsługi standardu ARGV i startowej inicjalizacji i nic to nie ma akurat wspólnego z POSIXem.

Z githuba libcmini:

"libcmini aims to be a small-footprint C library for the m68k-atari-mint (cross) toolchain, similar to the C library Pure-C came with. Many GEM programs do not need full MiNT support and only a handful of C library functions.

By default, gcc compiled programs on the Atari ST platform link to mintlib. Mintlib aims to implement all POSIX functionality to make porting Unix/Linux programs easier (which is a very good thing to have). For small GEM-based programs, this comes with a drawback, however: program size gets huge due to the underlying UNIX compatibility layer."

Ostatnio edytowany przez jury (2023-05-16 13:04:00)

Odp: gcc dla ST

@jury i w czym to jest niezgodne z tym co napisałem?

Atari: FireBee, (Falcon030 CT60e SuperVidel SvEthlana CTPCI), TT, (520ST Pak030 Frak PuPla Panther), (520ST 4MB ST RAM 8MB TT RAM CosmosEx SC1435), (1040STFM UltraSatan SM124), (1040STE 4MB ST RAM 8MB TT RAM CosmosEx NetUSBee SM144 SC1224), 260ST, 520 ST+, (MEGA ST SM125), (65XE Rapidus U1MB VBXE SIDE2 SIO2PC), (Jaguar SkunkBoard), Lynx II, 2x Portfolio

16

Odp: gcc dla ST

No napisałeś, ze ten narzut nie ma nic wspólnego z POSIX'em

Adam Klobukowski napisał/a:

Narzut jest zapewne spowodowany kodem do obsługi standardu ARGV i startowej inicjalizacji i nic to nie ma akurat wspólnego z POSIXem.

Więc zalinkowałem źródło libcmini które twierdzi, że ten narzut (jak został nazwany "huge") jest związany tylko i wyłącznie z dorzucaną warstwą POSIX'ową

Ostatnio edytowany przez jury (2023-05-17 07:41:31)

Odp: gcc dla ST

@jury, ale tam nic nie ma o zgodności libcmini w POSIXem. Jest o zgodności MiNTlib z POSIXem, którego libcmini w pełnie nie zapewnia. W swoim początkowym pości pisałeś o narzucie libcmini i do tego ja się odnosiłem w swoim poście. Protokół ARGV o któym wspomniałem jest hackiem wymyślonym przez Atari który umożliwia obejście ograniczonej długości linii komend w TOSie poprzez użycie zmiennych środowiskowych i nie ma nic wspólnego z POSIXem (i zapewne jego implementacja polega na string.h, z czego wynika narzut, ale to gdybanie nie sprawdzałem tego).

Leśli chodzi o narzut MiNTLiba, to kiedy ostatnio kompilowałem Hello World, to binarka miałą coś koło 600KB - znacznie więcej niż libcmini.

Atari: FireBee, (Falcon030 CT60e SuperVidel SvEthlana CTPCI), TT, (520ST Pak030 Frak PuPla Panther), (520ST 4MB ST RAM 8MB TT RAM CosmosEx SC1435), (1040STFM UltraSatan SM124), (1040STE 4MB ST RAM 8MB TT RAM CosmosEx NetUSBee SM144 SC1224), 260ST, 520 ST+, (MEGA ST SM125), (65XE Rapidus U1MB VBXE SIDE2 SIO2PC), (Jaguar SkunkBoard), Lynx II, 2x Portfolio

18

Odp: gcc dla ST

Adam Klobukowski napisał/a:

@jury, ale tam nic nie ma o zgodności libcmini w POSIXem. Jest o zgodności MiNTlib z POSIXem, którego libcmini w pełnie nie zapewnia. W swoim początkowym pości pisałeś o narzucie libcmini i do tego ja się odnosiłem w swoim poście.

O widzisz, to się nie zrozumieliśmy. Ja nie pisałem o narzucie libcmini, tylko dowrotenie o kosmicznym narzucie mintlib'a, i, że właśnie libcmini niesamowicie pomaga w zbiciu tego narzutu.

jury napisał/a:

Póki co to właśnie sobie zmontowałem libcmini i zwykła linijka kodu "printf("Hello world\n") kompiluje się zamiast do 125KB (jak przy domyślnej bibliotece standardowej mintlib) do 2,7KB.


Adam Klobukowski napisał/a:

Leśli hodzi o narzut MiNTLiba, to kiedy ostatnio kompilowałem Hello World, to binarka miałą coś koło 600KB

Tak, też pamiętam, że kawał czasu temu hello world kompilował się coś pod sześćset kilo, czyli obecnie ze swoimi 125 kilo to mocno go poprawili :)

Odp: gcc dla ST

@jury zupełnie błędnie przeczytałem twój pierwszy post, mea culpa.

Atari: FireBee, (Falcon030 CT60e SuperVidel SvEthlana CTPCI), TT, (520ST Pak030 Frak PuPla Panther), (520ST 4MB ST RAM 8MB TT RAM CosmosEx SC1435), (1040STFM UltraSatan SM124), (1040STE 4MB ST RAM 8MB TT RAM CosmosEx NetUSBee SM144 SC1224), 260ST, 520 ST+, (MEGA ST SM125), (65XE Rapidus U1MB VBXE SIDE2 SIO2PC), (Jaguar SkunkBoard), Lynx II, 2x Portfolio

20

Odp: gcc dla ST

Podczepię się tukej, co by nie mnożyć wątków.
Chciałbym skompilować to archiwum:
https://github.com/pmandin/cleancode

"You need gcc, binutils, mintlib, gemlib (recent versions recommended). To compile, just 'configure ; make ; make install'."

rozumiem, że można to zrobić pod MiNT, czy się mylę ? 

Może konieczne jest zapoznanie się z tym tematem:
http://vincent.riviere.free.fr/soft/m68k-atari-mint/

proszę o rozjaśnienie moich wątpliwości :)

Było miło :) Do widzenia.

21

Odp: gcc dla ST

Jak masz kompilator z wszystkimi libkami to możesz pod FreeMintem, możesz też użyć kompilacji skrośnej i skompilować pod Windowsem/Linuxem. Można to zrobić albo z linka Vincenta lub Thorstena: http://tho-otto.de/crossmint.php. Możliwe że w tym wypadku będzie trzeba do configure dołożyć dodatkowe switche jak prefix, żeby wskazać gdzie jest toolchain i ścieżka instalacyjna..

Ostatnio edytowany przez saulot (2023-07-03 19:51:49)

saulot / [nokturnal]
==================================
wiki Atari 16/32 bit: https://bus-error.nokturnal.pl

22

Odp: gcc dla ST

Spróbuję pod MiNT. Dzięki za info.

Było miło :) Do widzenia.