kategoria: ANSI C
[#1] GCC-Pack
Jako fan pisania programów na Amigę na Amidze przygotowałem paczkę z natywnym kompilatorem GCC 2.95.3. To bardzo stara wersja, ale ostatnia, która posiada dobry amigowy port (były próby przeportowania wersji 3 na Amigę, ale nie działało to za dobrze). Pozbierałem trochę pakietów z GeekGadgets, wybrałem zestaw przydatnych narzędzi (np. make, diff i parę innych) i zaopatrzyłem w skrypt Installera. Skrypt wykonuje kilka dodatkowych czynności:
  • instaluje odpowiednią do procesora wersję ixemul.library
  • do User-Startup dopisuje niezbędne 2 assigny i wywołuje komendę Path
  • po wskazaniu archiwum z NDK3.2R4 wypakowuje inkludy systemowe, patchuje je i instaluje gdzie trzeba.

Minimalna sensowna konfiguracja sprzętowa, to 32 MB fast RAM i jakieś 020. Ja używam z 020@28 MHz i 64 MB fast. W zasadzie 020 nie jest wymagany przez programy z pakietu, ale mając nawet dobrze dokręcony 68000 trudno mieć 32 MB pamięci.

Po instalacji można kompilować programy używające jako biblioteki standardowej ixemul.library, używające statycznej biblioteki libnix, oraz nie używające biblioteki standardowej w ogóle.

W przyszłości planuję dodanie możliwości opcjonalnego zainstalowania dodatkowych pakietów deweloperskich (np. MUI, XPK, AHI i tym podobne).

Tak jak sam kompilator i narzędzia, GCC-Pack jest na licencji GPL.

Paczkę można pobrać stąd: GCC-Pack

Ostatnia aktualizacja: 27.01.2024 16:24:11 przez Krashan
11
[#2] Re: GCC-Pack

@Krashan, post #1

Coś takiego chyba już jest. ADE
[#3] Re: GCC-Pack

@Wankowicz, post #2

Cóż, nie wiedziałem i zrobiłem swój. Trochę lżejszy i bardziej dopasowany do moich potrzeb. BTW nie wiem czemu redakcja zrobiła z tego newsa.
1
[#4] Re: GCC-Pack

@Krashan, post #3

w dodatku niedbale kopiując: "Grzegorz Kraszewski przygotowałem (...)". 😒
a z ADE samemu korzystałem do robienia Super Turra na Amidze.
[#5] Re: GCC-Pack

@Krashan, post #3

Bo warto. Ponieważ jak się zdarzy problem z instalacją lub kompilacją to łatwiej Cię spytać bezpośrednio
2
[#6] Re: GCC-Pack

@Krashan, post #1

Nowa wersja GCC-Pack 0.3, pod tym samym adresem. Tym razem tylko aktualizacja samego kompilatora do wersji 2.95.3-4 (oraz towarzyszącej mu biblioteki 'libgcc'). Kompilator z packa 0.2 kompilował błędny kod, gdy spotkały się opcje '-fbaserel' i '-fomit-frame-pointer', a tak się składa, że obie pozytywnie wpływają na wielkość generowanego kodu.

Poza tym, nadchodzi w GCC-Packu C++. Często język ten jest kojarzony ze "spuchniętymi binarkami" i ogólnie bloatware. Niesłusznie, a winę ponosi tu głównie obszerna biblioteka standardowa. Czy można w C++ na Amidze bez niej? Otóż tak! Trzeba za to zapłacić dwoma elementami języka: wyjątkami i informacji o typach w czasie wykonania ('dynamic_cast'). Po prostu ich implementacja w GCC istotnie polega na bibliotece standardowej. Niemniej esencja C++, czyli klasy, dziedziczenie i wzorce, pozostaje do naszej dyspozycji, a generowany kod jest zwarty i efektywny.

W następnej wersji packa dodam gotowe szkielety aplikacji bez biblioteki standardowej w C i C++. Mam też przygotowane wrappery skłaniające GCC do użycia systemowych bibliotek "mathieee" do arytmetyki zmiennoprzecinkowej pojedynczej i podwójnej precyzji.
8
[#7] Re: GCC-Pack

@Krashan, post #6

Poza tym, nadchodzi w GCC-Packu C++.

Brawo!

Trzeba za to zapłacić dwoma elementami języka: wyjątkami i informacji o typach w czasie wykonania ('dynamic_cast').

Spokojnie można sobie bez tego dać radę. Mi te braki nie zrobiłyby różnicy.

W następnej wersji packa dodam gotowe szkielety aplikacji bez biblioteki standardowej w C i C++.

Dla mnie zawsze będziesz (niemal wymarłym niestety) gatunkiem rycerza walczącego o tworzenie programów dla AmigaOS bez użycia biblioteki standardowej. Oczywiście jeżeli się da, bo nie zawsze jest to możliwe. Jednak jeżeli tylko się da to zawsze starasz się pokazać, że warto tak pisać. I to mi się bardzo podoba. Twoje programy nie "ważą" dosłownie nic, a ze źródeł można się uczyć, bo są wręcz wzorcem tworzenia z zachowaniem wytycznych Commodore.
3
[#8] Re: GCC-Pack

@MDW, post #7

Jeśli tworzy się coś rezydentnego (biblioteke/device/etc) to nieraz warto zrobić bez biblioteki standardowej/standardowego startupu. W innym wypadku to bezsens. W MorphOSie libnix ogarnia zwalnianie zasobów wiec jak o czyms zapomnisz i wyłączysz program to libnix podczas uruchamiania kodu zwalniajacego odda pamięc, bedzie sie starał zamknąć pliki, etc, jak olejesz domyslny kod startowy to ci nic nie zwolni a i pewnie nie przygotuje wbstartupmessage.

Ostatnia aktualizacja: 29.03.2024 13:13:16 przez michal_zukowski
1
[#9] Re: GCC-Pack

@michal_zukowski, post #8

W MorphOSie libnix ogarnia zwalnianie zasobów
To doskonale. Ale chyba umknął Twej uwadze fakt. że ta paczka nie jest dla MorphOS-a.

Byłbym ostrożny z używaniem zwrotu "bez sensu" w rozmowach o [około]amigowych hobby. Ja przecież nikomu nic nie każę, a instalując GCC-Pack można sobie zażyczyć bibliotekę standardową, inkludować 'stdio.h' albo 'iostream' i cieszyć się życiem. Albo zainstalować kroskompilator Bebbo czy Bartmana, odpalić VSCode i pisać jak biały człowiek. Albo też nie tracić czasu na grzebanie się w muzeum informatyki, orać w korpo jako programista 20k i śmiać się z tych biedaamigowców i innych użytkowników komputerów wyjętych z kontenera na elektrośmieci.

Pisanie małych zwartych programów szeroko korzystających z API AmigaOS i robienie tego na rzeczywistej Amidze po prostu daje mi umysłową satysfakcję, podobnie jak innym rozwiązanie wszystkich krzyżówek z kolejnego numeru dwutygodnika "Rozrywka", ogranie kolegów w brydża, czy sesyjka w CounterStrike.

Wyposażyłem sobie do tego skrzynkę narzędziową. Jeżeli ktoś chce, może skorzystać. Jeżeli nikt nie chce, to przecież mi od tego nie ubędzie. GCC-Pack ułatwia mi szybkie "postawienie" środowiska na kolejnej Amidze czy UAE na kolejnym pececie. Czy na karcie SD z taką czy inną wersją systemu do testów.

Życzenia świąteczne dla tych, którzy robią rzeczy bez sensu: życzę Wam, żebyście wolny świąteczny czas spędzili równie bez sensu jak ja.
4
[#10] Re: GCC-Pack

@MDW, post #7

Jednak jeżeli tylko się da to zawsze starasz się pokazać, że warto tak pisać.
Nie upieram się i nie sieję propagandy, że warto tak pisać. Po prostu ja lubię tak pisać. Jeżeli ktoś też lubi, to cieszę się i zapraszam do GCC-Packa i paru artykułów, które o tym powoli piszę. Ale w żadnym nie będzie ideologicznego wstępu pod tytułem "Dlaczego warto zrezygnować z biblioteki standardowej?". Na to pytanie każdy odpowiada sobie sam, a odpowiedź "nie warto" też jest dobra.
2
[#11] Re: GCC-Pack

@Krashan, post #6

Czy jako bibliotekę standardową języka C++ rozumiesz STL, czyli "Standard Template Library"?

Otóż ta biblioteka zawiera szablony (wzorce) w języku C++. Jako, że są to wzorce, ich kod źródłowy musi być w pliku nagłówkowym. Oznacza to, ze kompilacja programu wymaga za każdym razem ponownej kompilacji tych nagłówków.

W teorii niektóre nagłówki mogą być skompilowane tylko raz, jeżeli nie obieramy nowych argumentów szablonu.

Rozmiar kodu rośnie, bo trzeba zawrzeć w programie wszystkie potrzebne instancje szablonu.

Trzeba za to zapłacić dwoma elementami języka: wyjątkami i informacji o typach w czasie wykonania ('dynamic_cast').

Z tego co wiem, wyjątki są wbudowanym elementem języka C++ i nie potrzebują zewnętrznego kodu.

W języku C dalekie skoki rzeczywiście wymagają biblioteki z nagłówkiem setjmp.h.

P.S. Nie przepadam za wyjątkami, choć mogą być one użyte bardzo dobrze czego przykładem kod interpretera Adventure Definition Language, gdzie setjmp() ustala punkty w głównym algorytmie działania programu i można łatwo pominąć lub powtórzyć punkt, albo przejść do dowolnego innego punktu.

Ostatnia aktualizacja: 29.03.2024 15:37:25 przez Hexmage960
[#12] Re: GCC-Pack

@Hexmage960, post #11

Czy jako bibliotekę standardową języka C++ rozumiesz STL, czyli "Standard Template Library"?
No nie tylko. Przede wszystkim to co znajduje się w pliku libstdc++.a, o rozmiarze, bagatela 1,5 MB.
Z tego co wiem, wyjątki są wbudowanym elementem języka C++ i nie potrzebują zewnętrznego kodu.
I tak i nie. Z punktu widzenia programisty aplikacji, który nie wnika w detale, jest tak jak piszesz. Podobnie jak np. arytmetyka zmiennoprzecinkowa też jest elementem języka. W kompilatorze GCC te dwa wyżej wspomniane elementy języka wymagają funkcji umieszczonych w statycznej bibliotece libgcc, swego rodzaju "bibliotece wsparcia kompilatora". Nie jest więc prawdą, że elementy takie jak wyjątki i RTTI nie potrzebują zewnętrznego kodu. W standardowej konfiguracji kompilatora linkowanie z libgcc odbywa się "po cichu" za plecami programisty, więc na pierwszy rzut oka nie zauważasz tego zewnętrznego kodu. Ale to nie koniec, bo wsparcie obsługi wyjątków w tejże bibliotece korzysta z... funkcji biblioteki standardowej C. I kółeczko sie zamyka.

Jeżeli chodzi o arytmetykę zmiennoprzecinkową, sytuacja jest podobna. Jeżeli nie chcemy generować kodu dla koprocesora, to wyrażenia arytmetyczne są zamienianie przez kompilator na szereg funkcji o nazwach w stylu ___addsf3(), branych z libgcc, te z kolei wywołują funkcje zmiennoprzecinkowe z kolejnej biblioteki lm, a ta, a jakże, używa również standardowej biblioteki C.

Z tym sobie poradziłem bardzo prosto, napisałem dwa wrappery (biblioteki statyczne), które dostarczają tych wszystkich funkcji z trzema podkreśleniami przekierowując je wprost do mathieeesingbas.library i mathieeedoubbas.library i działa to elegancko.
1
[#13] Re: GCC-Pack

@Krashan, post #12

Dzięki za szczegółowe wyjaśnienie. Ja kodowałem w C++ przy użyciu GCC na Amidze ale nie używałem wyjątków. Z tego co pamiętam wyjątki trzeba było włączyć opcją kompilatora (ale pamięć może mnie mylić).

Jako, że wyjątki są zawarte w gramatyce języka C++ (słowa kluczowe try, throw i catch) stąd takie moje przypuszczenie, że nie wymagają dodatkowych funkcji.

Co do STL to przydaje się on, gdy mamy do zaprogramowania np. słownik, choć oczywiście możemy napisać własną implementację.
[#14] Re: GCC-Pack

@Krashan, post #12

a robiles testy co jest szybsze do zmiennoprzecinwkowych - libstd/libm czy math#?.library?
[#15] Re: GCC-Pack

@michal_zukowski, post #14

a robiles testy co jest szybsze do zmiennoprzecinwkowych - libstd/libm czy math#?.library?
Wczoraj dopiero zrobiłem te wrappery, więc nie miałem kiedy... Napiszę przykład, jakieś liczenie pi, albo coś w tym rodzaju, to się zbenchmarkuje.

Natomiast wrapper na mathieee ma jedną dużą zaletę. Jeżeli odpalisz program na maszynie z FPU, to będzie dużo szybciej, bo te biblioteki wykrywają koproca. Nie tak szybko jak FPU hardcoded, ale na pewno szybciej niż libm.
Na stronie www.PPA.pl, podobnie jak na wielu innych stronach internetowych, wykorzystywane są tzw. cookies (ciasteczka). Służą ona m.in. do tego, aby zalogować się na swoje konto, czy brać udział w ankietach. Ze względu na nowe regulacje prawne jesteśmy zobowiązani do poinformowania Cię o tym w wyraźniejszy niż dotychczas sposób. Dalsze korzystanie z naszej strony bez zmiany ustawień przeglądarki internetowej będzie oznaczać, że zgadzasz się na ich wykorzystywanie.
OK, rozumiem