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

Reply via email to