pld embedded - port pld dla arm9

Radosław Kintzi radek w rakin.eu.org
Pią, 12 Sie 2005, 09:13:42 CEST


Patrys :: Patryk Zawadzki napisał(a):

>Dnia 11-08-2005, czw o godzinie 16:43 +0200, Radosław Kintzi napisał(a):
>
>>Mam już skrośny kompilator generujący kod dla arm-linux-uclibc. Całość 
>>zamyka się w trzech spacach: arm-binutils.spec, arm-gcc.spec 
>>(--with[out] bootstrap), arm-uClibc.spec. Załączam je do wglądu. Gdzie 
>>mogę je wrzucić do CVSa? - jakie nazwy im nadać? - a może jakaś 
>>specjalna gałąź?
>>
>
>crossarm-*, podobnie jak inne skrośne narzędzia.
>
Tyle, że crossarm-gcc.spec i crossarm-binutils.spect już istnieją. 
Różnią się od moich wersjami i zestawem łat. Może dodać brancha 
ARM-LINUX-UCLIBC?

>
>>Teraz takie pytanie. Jak zmusić rpma, żeby używał narzędzi 
>>arm-linux-uclibc-{gcc,g++,as,ar,itp} zamiast i686-... Kiedy daję np:
>>rpmbuild -bb --target arm-linux-uclibc zlib.spec
>>
>
>rpmbuild --target też nie działa? sprawdź makra rpm
>
Ano nie działa. Wogóle to myślę, że średnio działa ten nasz rpm. Z manuala:

       --target PLATFORMA
              Podczas  budowania pakietu interpretuje PLATFORMĘ jako 
arch-ven-
              dor-os i ustawia odpowiednio makra %_target,  
%_target_cpu  oraz
              %_target_os.

$  rpmbuild  --eval "%{_target} %{_target_cpu} %{_target_os}"
i686-linux i686 linux
$ rpmbuild  --target arm-linux-uclibc --eval "%{_target} %{_target_cpu} 
%{_target_os}"
i686-linux i686 linux
$ rpmbuild  --target arm --eval "%{_target} %{_target_cpu} %{_target_os}"
i686-linux i686 linux
$ rpmbuild  --target arm-linux --eval "%{_target} %{_target_cpu} 
%{_target_os}"
i686-linux i686 linux
$ rpmbuild  --target i386-linux --eval "%{_target} %{_target_cpu} 
%{_target_os}"
i686-linux i686 linux

Makro %{_target_base_arch} (używane w %configure) też nie jest podmieniane.

A może PLATFORMĘ specyfikuje się inaczej? Jak?

Co do samych makr rpma - co konkretnie mam sprawdzić. Widzę w 
/usr/lib/rpm/macros:

#==============================================================================
# ---- Build system path macros.
#
%__ar                   ar
%__as                   as
%__cc                   i686-pld-linux-gcc
%__cpp                  i686-pld-linux-gcc -E
%__cxx                  i686-pld-linux-g++
%__ld                   /usr/bin/ld
%__nm                   /usr/bin/nm
%__objcopy              /usr/bin/objcopy
%__objdump              /usr/bin/objdump
%__ranlib               ranlib
%__remsh                %{__rsh}
%__strip                /usr/bin/strip

oraz:

#==============================================================================
# ---- config.guess platform macros.
#       Macro(s) similar to the tokens used by configure.
#
%_build                 %{_host}
%_build_alias           %{_host_alias}
%_build_cpu             %{_host_cpu}
%_build_vendor          %{_host_vendor}
%_build_os              %{_host_os}
%_host                  i686-pld-linux-gnu
%_host_alias            %{nil}
%_host_cpu              i686
%_host_vendor           pld
%_host_os               linux-gnu
%_target                %{_host}
%_target_alias          %{_host_alias}
%_target_cpu            %{_host_cpu}
%_target_vendor         %{_host_vendor}
%_target_os             %{_host_os}


Te pierwsze jak widać nie zależą od tych drugich. Gdyb np. było:

%__ar                   %{_target_cpu}-%{target_os}-ar
%__as                   %{_target_cpu}-%{target_os}-as
%__cc                   %{_target_cpu}-%{target_os}-gcc
%__cpp                  %{_target_cpu}-%{target_os}-gcc -E
%__cxx                  %{_target_cpu}-%{target_os}-g++
%__ld                   %{_target_cpu}-%{target_os}-ld
%__nm                   /usr/bin/%{_target_cpu}-%{target_os}-nm
%__objcopy              /usr/bin/%{_target_cpu}-%{target_os}-objcopy
%__objdump              /usr/bin/%{_target_cpu}-%{target_os}-objdump
%__ranlib               %{_target_cpu}-%{target_os}-ranlib
%__remsh                %{__rsh}
%__strip                /usr/bin/%{_target_cpu}-%{target_os}-strip

(+ ew. %{_target_vendor}) i gdyby --target działało poprawnie (tj. 
modyfikowało makra %_target*), to ...

Zresztą nie wiem, czy to jest dobra droga?

Na razię myślę, żeby dodać do specy kilka warunków, np:

%configure \
   ... \
%ifarch arm
   --target=arm-linux-uclibc
%endif

Albo w przypadku zlib.spec:

%ifnarch arm
CFLAGS="-D_REENTRANT -fPIC %{rpmcflags} %{?with_asmopt:-DASMV}" \
CC="%{__cc}" \
%else
CFLAGS= \
CC="arm-linux-uclibc-gcc" \
%endif
./configure \
        --prefix=%{_prefix} \
        --shared

To nie załatwia sprawy, Mejkfajla, który używa ar do tworzenia 
bibliotek. Konieczna będzie jeszcze łata.

Teraz pytanie do deweloperów, czy jak zaczne poprawiać spece w podobny 
sposób, to będą bardzo źli?

Radek




Więcej informacji o liście dyskusyjnej pld-devel-pl