[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Bug#683447: Acknowledgement (gcc-defaults: provide fully qualified compiler names for dpkg multi-arch cross)



sans typo 

>From 8cac76fb8c00fb3429e651994d001ca6c9ad02f5 Mon Sep 17 00:00:00 2001
From: Shawn Landden <shawnlandden@gmail.com>
Date: Sat, 21 Jul 2012 15:55:58 -0700
Subject: [PATCH] provide fully qualified compiler names in the multilib
infrastructure

This means that you can use dpkg's multi-arch cross-compile features
with multilib, like so: (on i386)

apt-get install gcc-multilib build-essential
apt-get build-dep -aamd64 iceweasel
apt-get source iceweasel
cd iceweasel-*
dpkg-buildpackage -aamd64
---
debian/rules |   42 +++++++++++++++++++++++++++++++++++++++++-
gcc-32       |   19 +++++++++++++++++++
gcc-64       |   19 +++++++++++++++++++
3 files changed, 79 insertions(+), 1 deletion(-)
create mode 100755 gcc-32
create mode 100755 gcc-64

diff --git a/debian/rules b/debian/rules
index 9a14d93..385402f 100755
--- a/debian/rules
+++ b/debian/rules
@@ -352,6 +352,25 @@ PV_GIJ     := $(shell echo $(V_GIJ)   | awk -F.
'{printf "%d.%d", $$1, $$2}')
PV_GPC := $(shell echo $(V_GPC)   | awk -F. '{printf "%d.%d", $$1,
$$2}')
PV_SPU := $(shell echo $(V_SPU)   | awk -F. '{printf "%d.%d", $$1,
$$2}')

+# multilib_archs = amd64 i386 kfreebsd-amd64 mips mipsel powerpc ppc64
s390 s390x sparc
+# multilib variables
+MULTILIB_amd64 := i386
+MULTILIB_i386 := amd64
+MULTILIB_kfreebsd-amd64 := kfreebsd-i386
+MULTILIB_mips := i386
+MULTILIB_powerpc := ppc64
+MULTILIB_ppc64 := powerpc
+MULTILIB_s390 := s390x
+MULTILIB_s390x := s390
+MULTILIB_sparc := sparc64
+#MULTILIB_mips := mips64 # need to add mips64/mips64el to dpkg
+#MULTILIB_mipsel := mips64el
+#MULTILIB_mips_gnu := mips64-linux-gnuabi64 # does not work well with
d-a -t, because dpkg does not know bitness
+#MULTILIB_mipsel_gnu := mips64el-linux-gnuabi64
+multilib_arch := ${MULTILIB_${DEB_HOST_ARCH}}
+multilib_gnu_type := $(shell dpkg-architecture -f -a${multilib_arch}
-qDEB_HOST_GNU_TYPE)
+multilib_bits := $(shell dpkg-architecture -f -a${multilib_arch}
-qDEB_HOST_ARCH_BITS)
+
README:
        m4 -DPACKAGES="$(packages)" \
           -DOS_NAME=$(OS_NAME) \
@@ -552,7 +571,28 @@ ifeq ($(with_multiarch_lib),yes)
        # have separate asm headers installed for our non-default
targets.
        dh_link -pgcc-multilib \
          /usr/include/$(DEB_HOST_MULTIARCH)/asm /usr/include/asm
-  endif  
+
+  ifdef MULTILIB_${DEB_HOST_ARCH}
+       # wrapper so that gcc-multilib can be called by its
fully-qualified name
+       # as a first-class compiler
+       mkdir -p debian/gcc-multilib/usr/lib/gcc/
+       install -m 755 -p gcc-32 debian/gcc-multilib/usr/lib/gcc/gcc-32
+       install -m 755 -p gcc-64 debian/gcc-multilib/usr/lib/gcc/gcc-64
+
+       dh_link -pgcc-multilib \
+         /usr/lib/gcc/gcc-${multilib_bits} /usr/bin/${multilib_gnu_type}-gcc
+       dh_link -pg++-multilib \
+         /usr/lib/gcc/gcc-${multilib_bits} /usr/bin/${multilib_gnu_type}-g++
+       dh_link -pgccgo-multilib \
+         /usr/lib/gcc/gcc-${multilib_bits} /usr/bin/${multilib_gnu_type}-gccgo
+       dh_link -pgfortran-multilib \
+         /usr/lib/gcc/gcc-${multilib_bits} /usr/bin/${multilib_gnu_type}-gfortran
+       dh_link -pgobjc-multilib \
+         /usr/lib/gcc/gcc-${multilib_bits} /usr/bin/${multilib_gnu_type}-gobjc
+       dh_link -pgobjc++-multilib \
+         /usr/lib/gcc/gcc-${multilib_bits} /usr/bin/${multilib_gnu_type}-gobjc++
+  endif
+  endif
endif  

ifneq (,$(filter gdc, $(packages)))
diff --git a/gcc-32 b/gcc-32
new file mode 100755
index 0000000..19d6f5b
--- /dev/null
+++ b/gcc-32
@@ -0,0 +1,19 @@
+#! /bin/sh
+
+# Call the appropriate compiler or preprocessor with options to build
for 32-bit multilib
+
+extra_flag=-m32
+
+for i; do
+    case "$i" in
+       -m32)
+           extra_flag=
+           ;;
+       -m64)
+           echo >&2 "`basename $0` called with non 32-bit multilib
option $i"
+           exit 1
+           ;;
+    esac
+done
+
+exec ${0##*-} $extra_flag ${1+"$@"}
diff --git a/gcc-64 b/gcc-64
new file mode 100755
index 0000000..c31ea5c
--- /dev/null
+++ b/gcc-64
@@ -0,0 +1,19 @@
+#! /bin/sh
+
+# Call the appropriate compiler or preprocessor with options to build
for 64-bit multilib
+
+extra_flag=-m64
+
+for i; do
+    case "$i" in
+       -m64)
+           extra_flag=
+           ;;
+       -m32)
+           echo >&2 "`basename $0` called with non 64-bit multilib
option $i"
+           exit 1
+           ;;
+    esac
+done
+
+exec ${0##*-} $extra_flag ${1+"$@"}
-- 
1.7.9.5

-- 
-Shawn Landden


Reply to: