MorphOS.pl – Polska strona użytkowników MorphOS-a
MorphOS.pl – Polska strona użytkowników MorphOS-a

Strona główna Forums Dla programistów x86 Cross compiler GCC 4.5.4+ –target MorphOS

Widok 9 wpisów - 1 z 9 (of 9 wszystkich)
  • Autor
    Wpisy
  • #389
    edeede
    Participant

    Otóż w związku z eksperymentem przeportowania pewnego programu na MorphOS (działającego w linii poleceń), zapragnąłem posiadania kompilatora GCC nowszego niż 4.4.5. Temu kod nie bardzo pasuje i zabawa kończy się error-em. Mogę dokonać kompilacji portowanego programu za pomocą GCC 2.95.3 (po wyłączeniu podczas konfigu części kodu w C++) jednak podczas kompilacji często przewija się kilka warnig-ów z którymi nie bardzo mogę sobie poradzić. Prawdobnie dlatego przeportowany program działa mocno niestabilnie.

    Sprawdzonym kompilatorem w tej dziedzinie jest GCC 4.6.4 (przynajmniej na Linux-ie). Na początek zbudowałem kroskompilator GCC w wersji 4.4.5, na bazie aktualnego sdk-source dla MorphOS i z pomocą skryptu Bigfoot-a. Praktycznie kompilator ten działa identycznie jak pod MorphOS-em.

    Następnie podjąłem się próby wprowadzenia do mosowego SDK źródeł GCC w wersji 4.6.4. Szybko okazało się że brakuje jednego pakietu z infrastruktury GCC. Po wielu próbach i błędach udało mi się dojść do etapu kompilacji GCC z możliwością linkowania z dołączonym, brakującym wcześniej pakietem (mpc-0.8.1). Niefortunnie (w prawdzie spodziewałem się czegoś takiego) konfiguracja jednego z wewnętrznych składników GCC kończy się błędem.

    Problem w tym, że jak dotąd potrafiłem sobie wyprowadzić dodatkowe interesujące mnie dane (oprócz tych ze standardowego logu) i "posklejać" co nieco, tak przy tym błędzie nie wiem gdzie szukać. Wiem, że w źródłach GCC 4.4.5 z SDK MOSa znajdują się morphosowe patche Marka Szyprowskiego. Patch-y z GCC 4.4.5 nie użyłem. Z tego co wyczytałem domyślam się, że wymagane są głównie do budowy kompilatora pod MorphOS, a nie koniecznie kroskompilatora, choć jako co najwyżej progr-amator mogę się mylić rzecz jasna .

    Dobra daję ten błąd tak poglądowo chociaż, może ktoś mnie nakieruje.

    #2041
    edeede
    Participant

    Wstęp – konfiguracja intl :

    mkdir -p -- ./intl
    Configuring in ./intl
    configure: creating cache ./config.cache
    checking whether make sets $(MAKE)... yes
    checking for a BSD-compatible install... /usr/bin/install -c
    checking whether NLS is requested... yes
    checking for msgfmt... no
    checking for gmsgfmt... :
    checking for xgettext... no
    checking for msgmerge... no
    checking for i686-pc-linux-gnu-gcc... gcc
    checking for C compiler default output file name... a.out
    checking whether the C compiler works... yes
    checking whether we are cross compiling... no
    checking for suffix of executables...
    checking for suffix of object files... o
    checking whether we are using the GNU C compiler... yes
    checking whether gcc accepts -g... yes
    checking for gcc option to accept ISO C89... none needed
    checking build system type... i686-pc-linux-gnu
    checking host system type... i686-pc-linux-gnu
    checking for i686-pc-linux-gnu-ranlib... ranlib
    checking for library containing strerror... none required
    checking how to run the C preprocessor... gcc -E
    checking for grep that handles long lines and -e... /bin/grep
    checking for egrep... /bin/grep -E
    checking for ANSI C header files... yes
    checking for an ANSI C-conforming const... yes
    checking for inline... inline
    checking for sys/types.h... yes
    checking for sys/stat.h... yes
    checking for stdlib.h... yes
    checking for string.h... yes
    checking for memory.h... yes
    checking for strings.h... yes
    checking for inttypes.h... yes
    checking for stdint.h... yes
    checking for unistd.h... yes
    checking for off_t... yes
    checking for size_t... yes
    checking for working alloca.h... yes
    checking for alloca... yes
    checking for stdlib.h... (cached) yes
    checking for unistd.h... (cached) yes
    checking for getpagesize... yes
    checking for working mmap... yes
    checking whether we are using the GNU C Library 2.1 or newer... yes
    checking whether integer division by zero raises SIGFPE... yes
    checking for inttypes.h... yes
    checking for stdint.h... yes
    checking for unsigned long long... yes
    checking for inttypes.h... yes
    checking whether the inttypes.h PRIxNN macros are broken... no
    checking for ld used by GCC... ld
    checking if the linker (ld) is GNU ld... yes
    checking for shared library run path origin... done
    checking argz.h usability... yes
    checking argz.h presence... yes
    checking for argz.h... yes
    checking limits.h usability... yes
    checking limits.h presence... yes
    checking for limits.h... yes
    checking locale.h usability... yes
    checking locale.h presence... yes
    checking for locale.h... yes
    checking nl_types.h usability... yes
    checking nl_types.h presence... yes
    checking for nl_types.h... yes
    checking malloc.h usability... yes
    checking malloc.h presence... yes
    checking for malloc.h... yes
    checking stddef.h usability... yes
    checking stddef.h presence... yes
    checking for stddef.h... yes
    checking for stdlib.h... (cached) yes
    checking for string.h... (cached) yes
    checking for unistd.h... (cached) yes
    checking sys/param.h usability... yes
    checking sys/param.h presence... yes
    checking for sys/param.h... yes
    checking for feof_unlocked... yes
    checking for fgets_unlocked... yes
    checking for getc_unlocked... yes
    checking for getcwd... yes
    checking for getegid... yes
    checking for geteuid... yes
    checking for getgid... yes
    checking for getuid... yes
    checking for mempcpy... yes
    checking for munmap... yes
    checking for putenv... yes
    checking for setenv... yes
    checking for setlocale... yes
    checking for stpcpy... yes
    checking for strcasecmp... yes
    checking for strdup... yes
    checking for strtoul... yes
    checking for tsearch... yes
    checking for __argz_count... yes
    checking for __argz_stringify... yes
    checking for __argz_next... yes
    checking for __fsetlocking... yes
    checking for iconv... yes
    checking for iconv declaration... install-shextern size_t
    iconv (iconv_t cd, char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft);
    char * *outbuf, size_t *outbytesleft);
    checking for nl_langinfo and CODESET... yes
    checking for LC_MESSAGES... yes
    checking for bison... bison
    checking version of bison... 2.5, ok
    checking whether NLS is requested... yes
    checking whether included gettext is requested... no
    checking for GNU gettext in libc... yes
    checking whether to use NLS... yes
    checking where the gettext function comes from... libc
    checking for aclocal... no
    checking for autoconf... no
    checking for autoheader... no
    configure: updating cache ./config.cache
    configure: creating ./config.status
    config.status: creating Makefile
    config.status: creating config.intl
    config.status: creating config.h
    config.status: executing default-1 commands
    Configuring in ./gcc
    configure: creating cache ./config.cache
    checking build system type... i686-pc-linux-gnu
    checking host system type... i686-pc-linux-gnu
    checking target system type... powerpc-unknown-morphos
    checking LIBRARY_PATH variable... ok
    checking GCC_EXEC_PREFIX variable... ok
    checking whether to place generated files in the source directory... no
    checking whether a default linker was specified... yes (/gg/ppc-morphos/bin/ld - GNU ld)
    checking whether a default assembler was specified... yes (/gg/ppc-morphos/bin/as - GNU as)
    checking for i686-pc-linux-gnu-gcc... gcc
    checking for C compiler default output file name... a.out
    checking whether the C compiler works... yes

    Finał:

    checking whether getrusage is declared... yes
    checking whether ldgetname is declared... no
    checking whether times is declared... yes
    checking whether sigaltstack is declared... yes
    checking for struct tms... yes
    checking for clock_t... yes
    checking for .preinit_array/.init_array/.fini_array support... yes
    checking if mkdir takes one argument... no
    *** Configuration powerpc-unknown-morphos not supported
    make[2]: *** [configure-gcc] Error 1
    make[2]: Leaving directory `/tmp/tmp.sXoYHomyZp/gcc4/gcc-4.4.5/build'
    make[1]: *** [all] Error 2
    make[1]: Leaving directory `/tmp/tmp.sXoYHomyZp/gcc4/gcc-4.4.5/build'
    make: *** [gcc4_make] Error 2

    Ewentualnie jestem w stanie na privie oddać stery przez ssh jakby co 😉 z małym info.

    Ps. Fakt że katalog z gcc jest jako gcc-4.4.5 teoretycznie nie gra roli, nie zmieniłem tego aby uniknąć niepotrzebnych błędów już na początku. Rzeczywiście jest tam kod 4.6.4.
    Coś jakby wydaje mi się, że można przełączać się między wersjami kompilowanego GCC przy pomocy jednej opcji w configu, trzeba sprawdzić.

    #2042
    edeede
    Participant
    Coś jakby wydaje mi się, że można przełączać się między wersjami kompilowanego GCC przy pomocy jednej opcji w configu, trzeba sprawdzić.

    No nie jedną ale da się to zrobić elegankco . Na chwilę obecną 4.4.7 z z mosowym sdk kompiluje się i działa bez problemu. Teraz walczę z 4.5.0, jak przebrnę to następne podejście 4.5.4.

    #2048
    Avatarkrashan
    Participant

    Tak na marginesie, zastanawiam się co to za genialny kod, że kompiluje się pod 4.6.4 a pod 4.4.5 nie…

    #2049
    edeede
    Participant
    Tak na marginesie, zastanawiam się co to za genialny kod, że kompiluje się pod 4.6.4 a pod 4.4.5 nie…

    Tak dla ścisłości, ten "genialny kod" kompiluje się na 4.6.4 dla Linuxa i docelowo na Linuxa (wersji GCC w dół na Linux nie sprawdzałem). Pod 4.4.5 nie kompiluje się na MorphOS, a na tym mi najbardziej zależy. Sprawdzałem z aktualnym SDK MorphOS-a i na kroskompilatorze pod Linuxem (z tym samym SDK).

    Nawiasem mówiąc port tego genialnego programu jest na MOS-a, leży sobie na Aminecie (itix sportował)
    ale niestety działa niestabilnie, a o zgrozo wersja dla OS4 pod OS4 Emu "działa jak fabryka chciała".

    #2050
    AvatarKaczus
    Participant
    Tak na marginesie, zastanawiam się co to za genialny kod, że kompiluje się pod 4.6.4 a pod 4.4.5 nie…

    Tak dla ścisłości, ten "genialny kod" kompiluje się na 4.6.4 dla Linuxa i docelowo na Linuxa (wersji GCC w dół na Linux nie sprawdzałem). Pod 4.4.5 nie kompiluje się na MorphOS, a na tym mi najbardziej zależy. Sprawdzałem z aktualnym SDK MorphOS-a i na kroskompilatorze pod Linuxem (z tym samym SDK).

    Nawiasem mówiąc port tego genialnego programu jest na MOS-a, leży sobie na Aminecie (itix sportował)
    ale niestety działa niestabilnie, a o zgrozo wersja dla OS4 pod OS4 Emu "działa jak fabryka chciała".

    wielkość stosu możesz na pewno ustawić w programie. Niestety jestem po za domem (jeszcze przez kilka dni) i nie powiem Ci dokładnie w jaki sposób, ale pytaj Kiera – powinien gdzieś błakac się po kanałach ircowych na freenode. On mi kilka lat temu zwrócił na to uwagę, gdy coś portowalem dla lubmilli.

    #2051
    edeede
    Participant
    wielkość stosu możesz na pewno ustawić w programie. Niestety jestem po za domem (jeszcze przez kilka dni) i nie powiem Ci dokładnie w jaki sposób, ale pytaj Kiera – powinien gdzieś błakac się po kanałach ircowych na freenode. On mi kilka lat temu zwrócił na to uwagę, gdy coś portowalem dla lubmilli.

    @Kaczuś: No i fajnie, że można coś z tym stosem robić – już się cieszę chociaż nie wiem jeszcze jak tego dokonać 😉

    @Kraszan: Stestowałem dbm2wav na 4.4.7 pod mosa i gitarka 🙂 Trochę cichy łejwik wyszedł ale MD5 się zgadza co najważniejsze.

    Zauważyłem, że w mosowym sdk brak jest robodoc. Co więcej, zdaje się chochlik porwał jedną linijkę z makefile – ale pewnie już poprawione. Ja dorobiłem sobie tak:

    dbminfo.o: dbminfo.c libdigibooster3.h musicmodule.h dsp.h lists.h

    i zadziałało

    #2056
    AvatarKaczus
    Participant

    @Kaczuś: No i fajnie, że można coś z tym stosem robić – już się cieszę chociaż nie wiem jeszcze jak tego dokonać 😉

    Na razie znalazlem zrodlowke pod libniksa:
    dajesz w jednym z plikow twojego programu:
    __stack = wielkość_stosu;
    na razie nie mogę znaleźć jak to jest wprzypadku ixemul, alemożliwe, że podobnie

    #2059
    edeede
    Participant
    @Kaczuś: No i fajnie, że można coś z tym stosem robić – już się cieszę chociaż nie wiem jeszcze jak tego dokonać 😉

    Na razie znalazlem zrodlowke pod libniksa:
    dajesz w jednym z plikow twojego programu:
    __stack = wielkość_stosu;
    na razie nie mogę znaleźć jak to jest wprzypadku ixemul, alemożliwe, że podobnie

    Możliwe że będzie podobnie dla ixemul. Tak mi się wydaje, bo ogólnie w binarkach na dysku można znaleźć ciąg znaków "__stack " a coś takiego z ixstack to już nie bardzo. No ale to tylko pochopne domysły z mojej strony , w każdym razie dzięki za info.

Widok 9 wpisów - 1 z 9 (of 9 wszystkich)
  • Musisz być zalogowany aby odpowiedzieć na ten temat.