On 10/27/2011 12:00 AM, Dennis Gilmore wrote:
[...big snip...]
its not sufficient. it evaluates to armv7l on a hardware floating
point system. we would need it to be armv7hl or armv7hnl to give yum
the info it needs
maybe _target_cpu could be used
though it would need a dict of compatiable arches
[dennis@panda02 ~]$ rpm --showrc |grep arm
build arch : armv7hnl
compatible build archs: armv7hnl armv7hl noarch
install arch : armv7hnl
compatible archs : armv7hnl armv7hl noarch
optflags : -O2 -g -march=armv7-a -mfloat-abi=hard
-mfpu=neon -mthumb gpg --batch --no-verbose --no-armor
--passphrase-fd 3
- -14: __isa_name armv7hnl
- -14: _arch arm
- -14: _build_arch arm
- -14: _host armv7l-unknown-linux-gnueabi
- -14: _host_cpu armv7l
- -11: _target armv7hnl-linux
- -11= _target_cpu armv7hnl
- -14: arm armv3l armv4b armv4l armv4tl armv5tel armv5tejl
armv6l armv7l armv7hl armv7nhl
- -11: optflags -O2 -g -march=armv7-a -mfloat-abi=hard
-mfpu=neon -mthumb
[root@trimslice01 ~]# rpm --showrc |grep arm
build arch : armv7hl
compatible build archs: armv7hl noarch
install arch : armv7hl
compatible archs : armv7hl noarch
optflags : -O2 -g -march=armv7-a -mfloat-abi=hard
-mfpu=vfpv3-d16 -mthumb gpg --batch --no-verbose --no-armor
--passphrase-fd 3
- -14: __isa_name armv7hl
- -14: _arch arm
- -14: _build_arch arm
- -14: _host armv7l-unknown-linux-gnueabi
- -14: _host_cpu armv7l
- -11: _target armv7hl-linux
- -11= _target_cpu armv7hl
- -14: arm armv3l armv4b armv4l armv4tl armv5tel armv5tejl
armv6l armv7l armv7hl armv7nhl
- -11: optflags -O2 -g -march=armv7-a -mfloat-abi=hard
-mfpu=vfpv3-d16 -mthumb
the first output is a system that has a neon simd unit and the second
is without it. any software that can run on the second can also run on
the first. __isa_name really should be the same on both.
long term maybe we can do something better. right now im looking for a
way to enable yum to detect the arches correctly without it resorting
to things like running readelf to determine the abi of the running
system. since its noarch we cant just patch things in conditionally.
Dennis
ok since i have a ton of the oddball hardware here
is there someway to get whats setting "compatible archs" in --showrc?
i ask because
rpm --showrc |grep armv7
build arch : armv7hnl
compatible build archs: armv7hnl armv7hl noarch
install arch : armv7hnl
compatible archs : armv7hnl armv7hl noarch
optflags : -O2 -g -march=armv7-a -mfloat-abi=hard
-mfpu=neon -mthumb -14: __isa_name armv7hnl
- -14: _host armv7l-unknown-linux-gnueabi
- -14: _host_cpu armv7l
- -11: _target armv7hnl-linux
- -11= _target_cpu armv7hnl
- -14: arm armv3l armv4b armv4l armv4tl armv5tel armv5tejl armv6l
armv7l armv7hl armv7nhl -11: optflags -O2 -g -march=armv7-a
-mfloat-abi=hard -mfpu=neon -mthumb
rpm --showrc |grep sparc
build arch : sparc64
compatible build archs: sparc64v sparc64 sparcv9v sparcv9 sparcv8 sparc
noarch install arch : sparc64v
compatible archs : sparc64v sparc64 sparcv9v sparcv9 sparcv8 sparc
noarch -14: _arch sparc
- -14: _build_arch sparc
- -14: _host sparc-unknown-linux-gnu
- -14: _host_cpu sparc
- -11: _target sparc64-linux
- -11= _target_cpu sparc64
- -11: optflags %{__global_cflags} -m64 -mcpu=ultrasparc
- -14: sparc sparc sparcv8 sparcv9 sparcv9v sparc64 sparc64v
_host_cpu and _target_cpu on sparc doesnt give me a way to work out
that im on a niagara box but in both cases i could work out whats
needed by the info thats in "compatible archs" looking at rpmrc.c
RPM_MACHTABLE_INSTARCH is whats used internal. is that available at all?
on a niagara box
In [2]: rpm.expandMacro('%{_target_cpu}')
Out[2]: 'sparc64'
on a trimslice running hardfp but without a neon simd
In [9]: rpm.expandMacro('%{_target_cpu}')
Out[9]: 'armv7hl'
Yup, my bad - neither macro ends up containing the "install arch" in the
end. The target gets set for "install arch" during initialization (to
read the correct platform file) but is then reset in the bowels of rpmrc.
The arch (compat and other) tables aren't really exported anywhere at
all. In python the only thing is rpm.archscore() which returns non-zero
values for arch strings that are compatible with the system architecture
according to rpm's internal knowledge (configuration & detected stuff).
But then yum doesn't use even that, it does its own hardware detection
by reading /proc/cpuinfo and all (see rpmUtils/arch.py) and uses its own
hardcoded compatibility tables.
Maybe rpm should export more of selected bits of its internal hw info.
But even if it did, yum is unlikely to rely on that info being available
anytime soon. So you'll end up (re)writing the ARM detection in yum
anyway, might as well just add it there now and move on to other issues
- reworking the entire way yum vs rpm arch detection is just not going
to happen in the current stable releases (talking of the rpm/yum
versions included in F15-16 and probably F17 too)
- Panu -
_______________________________________________
Rpm-maint mailing list
Rpm-maint@lists.rpm.org
http://lists.rpm.org/mailman/listinfo/rpm-maint