Hi,
I would like to propose a change in the rpm provides/requires handling of
libs and binaries.
Right now, we use on arm the architecture to distinguish between hard and
soft fp abi.
This results to the fact that armv7l is complete incompatible to armv7hl
due to the rpm architecture compatibility list (is this true everywhere?)
This is IMHO technical wrong. For example an rpm with a static build soft-fp
binary should be installable on a hard-fp system. The kernel and the
hardware does support it and it would just run.
But furthermore this will make it also impossible later to have mixed systems.
What I like to do on openSUSE-ARM is to go the same way as i686 vs. x86_64
world did go. Declare i686 backward compatible from x86_64, but to
extent the provides and requires with an extension. So a hf binary will
still require a hf lib.
A patch for rpm which should do this is attached, but I have not tested
it, I have to admit. The reason is that want to discuss it here first,
because this has a big impact: It would suddenly make the old armv7hl rpms
not compatible anymore with the new ones.
So, I would like to here if you share my POV here in general. And secondly,
if you see a chance at all to do this switch.
I promise to take care to push such a patch to rpm upstream, if you want it.
thanks
adrian
PS: I have not evaluated how the NEON VFP world fits in here.
--
Adrian Schroeter
SUSE Linux Products GmbH
email: [email protected]
--- autodeps/linux.req
+++ autodeps/linux.req
@@ -39,7 +39,8 @@
# --- Alpha does not mark 64bit dependencies
case `uname -m` in
alpha*) mark64="" ;;
- *) mark64="()(64bit)" ;;
+ arm*) markhf=true ;;
+ *) mark64="()(64bit)" markhf= ;;
esac
if [ "$needed" -eq 0 ]; then
@@ -49,6 +50,9 @@
[ -r "$f" -a -x "$f" ] || continue
lib64=`if file -L "$f" 2>/dev/null | \
grep "ELF 64-bit" >/dev/null; then echo "$mark64"; fi`
+ if $markhf && readelf -A "$f" 2>/dev/null | grep "Tag_ABI_VFP_args: VFP registers" >/dev/null; then
+ lib64="()(hf)$lib64"
+ fi
ldd "$f" | awk '/=>/ {
if ($1 !~ /libNoVersion.so/ && $1 !~ /4[um]lib.so/ && $1 !~ /linux-gate.so/) {
gsub(/'\''"/,"\\&",$1);
@@ -63,6 +67,9 @@
[ -r "$f" ] || continue
lib64=`if file -L "$f" 2>/dev/null | \
grep "ELF 64-bit" >/dev/null; then echo "$mark64"; fi`
+ if $markhf && readelf -A "$f" 2>/dev/null | grep "Tag_ABI_VFP_args: VFP registers" >/dev/null; then
+ lib64="()(hf)$lib64"
+ fi
ldd "$f" | awk '/=>/ {
if ($1 !~ /libNoVersion.so/ && $1 !~ /4[um]lib.so/ && $1 !~ /linux-gate.so/) {
gsub(/'\''"/,"\\&",$1);
@@ -97,6 +104,9 @@
[ -r "$f" ] || continue
lib64=`if file -L "$f" 2>/dev/null | \
grep "ELF 64-bit" >/dev/null; then echo "$mark64"; fi`
+ if $markhf && readelf -A "$f" 2>/dev/null | grep "Tag_ABI_VFP_args: VFP registers" >/dev/null; then
+ lib64="()(hf)$lib64"
+ fi
objdump -p "$f" | awk 'BEGIN { START=0; LIBNAME=""; needed='$needed'; }
/^$/ { START=0; }
/^Dynamic Section:$/ { START=1; }
--- autodeps/linux.prov
+++ autodeps/linux.prov
@@ -22,7 +22,8 @@
# --- Alpha does not mark 64bit dependencies
case `uname -m` in
alpha*) mark64=false ;;
- *) mark64=true ;;
+ arm*) markhf=true ;;
+ *) mark64=true markhf=false ;;
esac
#
@@ -37,6 +38,9 @@
else
lib64= slib64=
fi
+ if $markhf && readelf -A "$f" 2>/dev/null | grep "Tag_ABI_VFP_args: VFP registers" >/dev/null; then
+ lib64="()(hf)$lib64" slib64="(hf)$slib64"
+ fi
echo "$soname$lib64"
objdump -p "$f" | awk '
BEGIN { START=0 ; }
_______________________________________________
cross-distro mailing list
[email protected]
http://lists.linaro.org/mailman/listinfo/cross-distro