View previous topic :: View next topic |
Author |
Message |
alex.blackbit Advocate
Joined: 26 Jul 2005 Posts: 2397
|
Posted: Sat Oct 25, 2008 1:14 pm Post subject: multilib-overlay |
|
|
i have a Code: | 05:00.0 VGA compatible controller: ATI Technologies Inc RV530LE [Radeon X1600/X1650 PRO] |
and use a up-to-date ~ system on a amd64 installation. that means: gentoo-sources-2.6.27-r1, xorg-server-1.5.2, xf86-video-ati-6.9.0 and mesa-7.2.
i get "direct rendering: Yes", nice glxgears counts (yes, i know that means nothing) and games like tuxracer work.
but most programs claim on start: Code: | unknown chip id 0x71c6, can't guess.
libGL warning: 3D driver returned no fbconfigs.
libGL error: InitDriver failed
libGL error: reverting to (slow) indirect rendering |
now i searched on the interwebs and found a hint saying i could add my card in "src/mesa/drivers/dri/radeon/radeon_chipset.h" and recompile to get it working.
i opened the file and found out that my card is already there Code: | % grep -i "0x71c6" radeon_chipset.h
#define PCI_CHIP_RV530_71C6 0x71C6
% |
now, what is the problem? a bug? upper-lower-case?
any hints welcome,
thanks in advance.
Last edited by alex.blackbit on Fri Mar 06, 2009 10:59 pm; edited 1 time in total |
|
Back to top |
|
|
notHerbert Advocate
Joined: 11 Mar 2008 Posts: 2228 Location: 45N 73W
|
Posted: Sat Oct 25, 2008 11:16 pm Post subject: |
|
|
It could be a bug in the driver. I've seen some workarounds by symlinking the driver to /usr/lib/dri/
Code: | ln -s /usr/lib/xorg/modules/dri/<whatever>.so /usr/lib/dri/<whatever>.so |
Maybe, |
|
Back to top |
|
|
alex.blackbit Advocate
Joined: 26 Jul 2005 Posts: 2397
|
Posted: Sun Oct 26, 2008 10:16 am Post subject: |
|
|
thanks for your reply, notHerbert.
i am not sure what exactly your idea is. here is the content of my dri directories: Code: | % ls -l /usr/lib/xorg/modules/drivers
total 1.3M
-rwxr-xr-x 1 root root 10K Oct 25 13:37 ati_drv.so
-rwxr-xr-x 1 root root 567K Oct 25 13:37 radeon_drv.so
-rwxr-xr-x 1 root root 417K Oct 25 13:40 radeonhd_drv.so
-rwxr-xr-x 1 root root 27K Oct 25 13:40 vesa_drv.so
-rwxr-xr-x 1 root root 221K Oct 25 13:42 xgi_drv.so
% ls -l /usr/lib/dri
total 8.6M
-rwxr-xr-x 1 root root 2.3M Oct 25 13:27 r200_dri.so
-rwxr-xr-x 1 root root 2.2M Oct 25 13:27 r300_dri.so
-rwxr-xr-x 1 root root 2.2M Oct 25 13:27 radeon_dri.so
-rwxr-xr-x 1 root root 2.0M Oct 25 13:27 swrast_dri.so
% |
actually i do not think that anything is wrong here, but i could be wrong.
any other ideas? |
|
Back to top |
|
|
notHerbert Advocate
Joined: 11 Mar 2008 Posts: 2228 Location: 45N 73W
|
Posted: Sun Oct 26, 2008 1:59 pm Post subject: |
|
|
Well, I too am not exactly certain. Doing a quick search in the forum, some report the same problem and posted the above workaround and also this one, though I don't think that these are solutions.
I assume that *_dri.so refers to whatever driver is in xorg.conf cp or ln -s: | cp /usr/lib/xorg/modules/dri/*_dri.so /usr/lib/modules/dri/*_dri.so
cp /usr/lib/xorg/modules/dri/*_dri.so /usr/lib/dri/*_dri.so |
So I was thinking that some programs must looking for the *_dri.so in /usr/lib/dri or in /usr/lib/modules/dri.
On my nvidia box I have these *dri.so files Code: | /usr/lib/libxcb-xf86dri.so
/usr/lib/dri/swrast_dri.so
/usr/lib/xorg/modules/extensions/libdri.s0 |
What does eselect opengl list report?
And do you have a Section "DRI" in xorg.conf? |
|
Back to top |
|
|
alex.blackbit Advocate
Joined: 26 Jul 2005 Posts: 2397
|
Posted: Sun Oct 26, 2008 2:43 pm Post subject: |
|
|
notHerbert wrote: | What does eselect opengl list report? |
Code: | % eselect opengl list
Available OpenGL implementations:
[1] xorg-x11 *
% |
notHerbert wrote: | And do you have a Section "DRI" in xorg.conf? |
i have Load "dri" in the "Module" section and Code: | Section "dri"
Mode 0666
EndSection |
|
|
Back to top |
|
|
notHerbert Advocate
Joined: 11 Mar 2008 Posts: 2228 Location: 45N 73W
|
Posted: Sun Oct 26, 2008 4:29 pm Post subject: |
|
|
Hmmm, shouldn't eselect opengl list your ati opengl?
Mine is Code: | eselect opengl list
Available OpenGL implementations:
[1] nvidia *
[2] xorg-x11
|
Maybe the drivers need to be re-emerged after emerging xorg-server Code: | emerge -av $(qlist -IC x11-drivers | awk -F/ '{ print $2 }') |
|
|
Back to top |
|
|
alex.blackbit Advocate
Joined: 26 Jul 2005 Posts: 2397
|
Posted: Sun Oct 26, 2008 5:08 pm Post subject: |
|
|
i do not think that i should have an ati entry, since i am using the xorg ati driver, not fglrx.
imo this bug applies to my situation.
it seems like the applications that do not work are all 32-bit. i haven't fully verified that, but it seems possible.
the drivers in /usr/lib32/dri are _VERY_ outdated. they are provided by emul-linux-x86-xlibs which was apparently built with x86 and not x86, so the drivers are old, since mesa-6.5.2-r1 is stable.
the ebuild from the bug should solve the problem, but unfortunately i am currently not able to emerge it.
http://xx.vu/~ahuemer/build.log |
|
Back to top |
|
|
notHerbert Advocate
Joined: 11 Mar 2008 Posts: 2228 Location: 45N 73W
|
Posted: Sun Oct 26, 2008 5:21 pm Post subject: |
|
|
I have mesa-7.2 and it works fine. The mesa-9999 build log says it can't stat libGL.so.1.2, but that lib is from mesa. So I would try mesa-7.2.
Code: | ls -l /usr/lib/opengl/xorg-x11/lib/
total 384
-rw-r--r-- 1 root root 743 2008-10-23 15:11 libGL.la
lrwxrwxrwx 1 root root 12 2008-10-23 15:12 libGL.so -> libGL.so.1.2
lrwxrwxrwx 1 root root 12 2008-10-23 15:12 libGL.so.1 -> libGL.so.1.2
-rwxr-xr-x 1 root root 385980 2008-10-23 15:12 libGL.so.1.2 |
Code: | qfile libGL.so.1.2
media-libs/mesa (/usr/lib/opengl/xorg-x11/lib/libGL.so.1.2) |
I don't know anything about emul-linux-x86-xlibs though. |
|
Back to top |
|
|
alex.blackbit Advocate
Joined: 26 Jul 2005 Posts: 2397
|
Posted: Sun Oct 26, 2008 6:01 pm Post subject: |
|
|
i do not doubt that it works for you. you use the proprietary nvidia driver, right? i believe that both "fglrx" and "nvidia-drivers" work on both x86 and x86_64 systems, but it looks like mesa does only provide drivers for the actual arch, in my case x86_64. 32 bit applications are served by the emul-linux-x86-xlibs ebuild.
the ebuild i was trying to use should be modified to build the drivers for both 64 and 32 bit (the -9999 version is not the point).
that is the reason why the standard mesa ebuild does not work for me. |
|
Back to top |
|
|
alex.blackbit Advocate
Joined: 26 Jul 2005 Posts: 2397
|
Posted: Sun Oct 26, 2008 7:17 pm Post subject: |
|
|
i just noticed that the ebuild can be used with fixed versions too. nonetheless it produces the same error. |
|
Back to top |
|
|
code_raptor n00b
Joined: 24 Jun 2005 Posts: 47
|
Posted: Thu Oct 30, 2008 1:22 am Post subject: |
|
|
I created an ebuild of libX11 with multilib using the libdrm and mesa ebuilds posted in the bug as examples,
Code: |
# Copyright 1999-2008 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
# $Header: $
# Must be before x-modular eclass is inherited
#SNAPSHOT="yes"
inherit x-modular multilib toolchain-funcs flag-o-matic
DESCRIPTION="X.Org X11 library"
KEYWORDS="~alpha ~amd64 ~arm ~hppa ~ia64 ~m68k ~mips ~ppc ~ppc64 ~s390 ~sh ~sparc ~x86 ~x86-fbsd"
IUSE="ipv6 xcb"
RDEPEND=">=x11-libs/xtrans-1.0.1
x11-libs/libXau
x11-libs/libXdmcp
x11-proto/kbproto
>=x11-proto/xproto-7.0.6
xcb? ( >=x11-libs/libxcb-1.0 )"
DEPEND="${RDEPEND}
x11-proto/xf86bigfontproto
x11-proto/bigreqsproto
x11-proto/inputproto
x11-proto/xextproto
x11-proto/xcmiscproto
>=x11-misc/util-macros-0.99.0_p20051007"
EMULTILIB_PKG="true"
# xorg really doesn't like xlocale disabled.
# $(use_enable nls xlocale)
libX11_src_compile() {
local myconf
local OCFLAGS=""
local OCXXFLAGS=""
local OCHOST=""
CC="$(tc-getCC)"
CXX="$(tc-getCXX)"
if has_multilib_profile ; then
OCFLAGS="${CFLAGS}"
OCXXFLAGS="${CXXFLAGS}"
OCHOST="${CHOST}"
if use amd64 || use ppc64 ; then
case ${ABI} in
x86) CHOST="i686-${OCHOST#*-}"
CFLAGS="${OCFLAGS} -m32"
CXXFLAGS="${OCXXFLAGS} -m32"
;;
amd64) CHOST="x86_64-${OCHOST#*-}"
CFLAGS="${OCFLAGS} -m64"
CXXFLAGS="${CXXFLAGS} -m64"
;;
ppc) CHOST="powerpc-${OCHOST#*-}"
CFLAGS="${OCFLAGS} -m32"
CXXFLAGS="${OCXXFLAGS} -m32"
;;
ppc64) CHOST="powerpc64-${OCHOST#*-}"
CFLAGS="${OCFLAGS} -m64"
CXXFLAGS="${OCXXFLAGS} -m64"
;;
*) die "Unknown ABI"
;;
esac
fi
fi
mkdir "${S}/objdir-${ABI}"
cd "${S}/objdir-${ABI}"
myconf="${myconf} $(use_enable ipv6)"
# xcb is not yet used for the binary 32bit compatibility libs
if is_final_abi ; then
myconf="${myconf} --with-xcb"
else
myconf="${myconf} --without-xcb"
fi
# disable configure test who fail while cross-compiling
myconf="${myconf} --enable-malloc0returnsnull=yes"
ECONF_SOURCE=".."
CONFIGURE_OPTIONS="${myconf}"
x-modular_src_configure
# [Cross-Compile Love] Disable {C,LD}FLAGS and redefine CC= for 'makekeys'
( filter-flags -m* ; cd src/util && make CC=$(tc-getBUILD_CC) CFLAGS="${CFLAGS}" LDFLAGS="" clean all)
x-modular_src_make
if has_multilib_profile; then
CFLAGS="${OCFLAGS}"
CXXFLAGS="${OCXXFLAGS}"
CHOST="${OCHOST}"
fi
}
libX11_src_install() {
einfo "Installing ${PN} ${ABI} ..."
cd "${S}/objdir-${ABI}"
x-modular_src_install
}
x-modular_src_compile() {
if [[ -z ${OABI} ]] ; then
local abilist=""
if has_multilib_profile ; then
abilist=$(get_install_abis)
einfo "Building multilib ${PN} for ABIs: ${abilist}"
elif is_crosscompile || tc-is-cross-compiler ; then
abilist=${DEFAULT_ABI}
fi
if [[ -n ${abilist} ]] ; then
OABI=${ABI}
for ABI in ${abilist} ; do
export ABI
x-modular_src_compile
done
ABI=${OABI}
unset OABI
return 0
fi
fi
libX11_src_compile
}
x-modular_src_install() {
if [[ -z ${OABI} ]] ; then
local abilist=""
if has_multilib_profile ; then
abilist=$(get_install_abis)
einfo "Installing multilib ${PN} for ABIs: ${abilist}"
elif is_crosscompile || tc-is-cross-compiler ; then
abilist=${DEFAULT_ABI}
fi
if [[ -n ${abilist} ]] ; then
OABI=${ABI}
for ABI in ${abilist} ; do
export ABI
src_install
done
ABI=${OABI}
unset OABI
return 0
fi
fi
libX11_src_install
}
|
it starts to compile until encounter a error because libxcb is not found, i say ok and remove the dep in the configure step (libxcb isnt included in emul-linux-x86-xlibs anyway). Now i get a error because libXau is not found *SIGH*. (and looking at the packages used by emul-linux-x86-xlibs looks like it needs 10+ more modified ebuilds with multilib support to sastify the deps ). I guess that is better to drop the multilib approach and build a emul-linux-x86-xlibs with updated packages via a tiny chroot or another method. _________________ just feel the code...
Last edited by code_raptor on Thu Oct 30, 2008 4:16 pm; edited 1 time in total |
|
Back to top |
|
|
alex.blackbit Advocate
Joined: 26 Jul 2005 Posts: 2397
|
Posted: Thu Oct 30, 2008 1:19 pm Post subject: |
|
|
hello code_raptor.
thanks for your efforts. i will take a look at that in some hours, when i come home.
you say you get an error Quote: | because libXau is not found |
what does "not found" mean exactly? ... i will find out myself when i try to compile it.
i agree that it seems to be hard work to make all the necessary ebuilds multilib-capable,
but although having an up-to-date emul-linux-x86-xlibs is fine at the moment, it always has to be re-made when a new version of mesa comes out.
additionally it is, at least to my understanding, not possible to have a emul-linux-x86-xlibs ebuild for both stable and ~ versions of mesa, unless you create something like "emul-linux-x86-xlibs-stable" and "emul-linux-x86-xlibs-testing", which is ugly IMHO.
again, i agree that mulilib-ing all these ebuilds is a lot of work, but i don't see a good workaround.
once the work is done, version upgrades in any of these ebuild require only the normal modifications, no additional work.
i hope you agree.
i will try to understand what modifications you have made to the libX11 ebuild and will try to do the same for the next one needed.
and... building stuff on the local machine is the gentoo-way, you know |
|
Back to top |
|
|
code_raptor n00b
Joined: 24 Jun 2005 Posts: 47
|
Posted: Thu Oct 30, 2008 4:10 pm Post subject: |
|
|
alex.blackbit wrote: | Quote: | because libXau is not found |
what does "not found" mean exactly? |
Means that it cant find the 32bit dep of libXau, so it needs a multilib version of libXau (and probably of the rest of the deps involved)
Yep, u right, maintaining the mesa libs (and its deps) in sync is better than building the emul package everytime that a new version of a dep is needed.
What i did is using the src_compile and src_install functions of libdrm then calling the original src_compile/install (or x-modular*, if that the case). In other words:
1) Add multilib to the list of "inherit"
2) Add EMULTILIB_PKG="true" in the ebuild
3) rename the src_compile and src_install
4) add the custom src_compile and src_install of the multilib examples then call the renamed src_compile/install from there.
Code: |
src_compile() {
if [[ -z ${OABI} ]] ; then
local abilist=""
if has_multilib_profile ; then
abilist=$(get_install_abis)
einfo "Building multilib ${PN} for ABIs: ${abilist}"
elif is_crosscompile || tc-is-cross-compiler ; then
abilist=${DEFAULT_ABI}
fi
if [[ -n ${abilist} ]] ; then
OABI=${ABI}
for ABI in ${abilist} ; do
export ABI
src_compile
done
ABI=${OABI}
unset OABI
return 0
fi
fi
ORIGINAL_src_compile #here calls to the original src_compile funcion used in the ebuild (if defined)
#(if the ebuild inherits x-modular and the funcions isnt defined then call x-modular_src_compile)
}
|
Code: |
src_install() {
if [[ -z ${OABI} ]] ; then
local abilist=""
if has_multilib_profile ; then
abilist=$(get_install_abis)
einfo "Installing multilib ${PN} for ABIs: ${abilist}"
elif is_crosscompile || tc-is-cross-compiler ; then
abilist=${DEFAULT_ABI}
fi
if [[ -n ${abilist} ]] ; then
OABI=${ABI}
for ABI in ${abilist} ; do
export ABI
src_install
done
ABI=${OABI}
unset OABI
return 0
fi
fi
ORIGINAL_src_install #here calls to the original src_install funcion used in the ebuild (if defined)
#(if the ebuild inherits x-modular and the funcions isnt defined then call x-modular_src_install)
}
|
Code: |
ORIGINAL_src_compile() {
local myconf
local OCFLAGS=""
local OCXXFLAGS=""
local OCHOST=""
CC="$(tc-getCC)"
CXX="$(tc-getCXX)"
if has_multilib_profile ; then
OCFLAGS="${CFLAGS}"
OCXXFLAGS="${CXXFLAGS}"
OCHOST="${CHOST}"
if use amd64 || use ppc64 ; then
case ${ABI} in
x86) CHOST="i686-${OCHOST#*-}"
CFLAGS="${OCFLAGS} -m32"
CXXFLAGS="${OCXXFLAGS} -m32"
;;
amd64) CHOST="x86_64-${OCHOST#*-}"
CFLAGS="${OCFLAGS} -m64"
CXXFLAGS="${CXXFLAGS} -m64"
;;
ppc) CHOST="powerpc-${OCHOST#*-}"
CFLAGS="${OCFLAGS} -m32"
CXXFLAGS="${OCXXFLAGS} -m32"
;;
ppc64) CHOST="powerpc64-${OCHOST#*-}"
CFLAGS="${OCFLAGS} -m64"
CXXFLAGS="${OCXXFLAGS} -m64"
;;
*) die "Unknown ABI"
;;
esac
fi
fi
mkdir "${S}/objdir-${ABI}"
cd "${S}/objdir-${ABI}"
ECONF_SOURCE=".."
#here one can call the [x-modular_]src_configure of the ebuild or make the configure step directly via "econf || die"
#P.S.: if u need to pass more parameters to a configure function via use the CONFIGURE_OPTIONS variable.
econf || die
#here one can call the [x-modular_]src_compile of the ebuild or make the configure step directly via "emake || die"
emake || die
if has_multilib_profile; then
CFLAGS="${OCFLAGS}"
CXXFLAGS="${OCXXFLAGS}"
CHOST="${OCHOST}"
fi
}
|
Code: |
ORIGINAL_src_install() {
einfo "Installing ${PN} ${ABI} ..."
cd "${S}/objdir-${ABI}"
......
....... #rest of the function (if a src_install func is not there then call the default [x-modular_]src_install
|
Well i am gonna continue messing with the rest of the ebuilds until i get (i hope) the multilib mesa package. Probably the next step (if all this work works) is to remove this bloat of ebuild code and putting it in a custom eclass (great, now to learn how to write a eclass )
P.S: i modified the libX11 ebuild up there (i pasted the install func of libdrm by mistake)
UPDATE: i managed to create a eclass so now only requires modifying 3 lines in the ebuilds (less work for maintain updates ). I am currently testing it (libdrm, libX11, libXau, libxcb and libXext created both 32 and 64 bit libs without problems). I have a problem with libXxf86vm right now (libtool is trying to use 64bit libraries in the 32bit phrase ) so when i solve that i ll post the eclass. _________________ just feel the code... |
|
Back to top |
|
|
code_raptor n00b
Joined: 24 Jun 2005 Posts: 47
|
Posted: Fri Oct 31, 2008 3:15 am Post subject: finally |
|
|
Finally i managed to make a multilib mesa package
multilib-xlibs.eclass
Code: |
# Copyright 1999-2008 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
# $Header: $
#
# @ECLASS: multilib-xlibs.eclass
IUSE="${IUSE} lib32"
if use lib32; then
EMULTILIB_PKG="true"
fi
inherit multilib
# @ECLASS-VARIABLE: XMODULAR_MULTILIB
# @DESCRIPTION:
# If set to 'yes' the eclass uses the x-modular_src_compile and x-modular_src_install functions of the x-modular eclass
# Set before inheriting this eclass and use only if you are inheriting the x-modular eclass (i dont find a way to check this yet
# to make it automatic)
# @ECLASS-VARIABLE: MULTILIB_SPLITTREE
# @DESCRIPTION:
# Set to 'yes' if the package dont support building of both trees on the same dir (currently only needed with mesa package)
# Set before inheriting this eclass.
# @ECLASS-VARIABLE: XMODULAR_SUPRESS_TESTS
# @DESCRIPTION:
# If set to 'yes' the malloc test on the configure phrase is skipped (only needed with some x-modular packages)
# Set before inheriting this eclass.
# @FUNCTION: multilib-xlibs_src_compile
# @USAGE:
# @DESCRIPTION:
multilib-xlibs_src_compile() {
if [[ -z ${OABI} ]] ; then
local abilist=""
if has_multilib_profile ; then
abilist=$(get_install_abis)
einfo "Building multilib ${PN} for ABIs: ${abilist}"
elif is_crosscompile || tc-is-cross-compiler ; then
abilist=${DEFAULT_ABI}
fi
if [[ -n ${abilist} ]] ; then
OABI=${ABI}
for ABI in ${abilist} ; do
export ABI
multilib-xlibs_src_compile
done
ABI=${OABI}
unset OABI
return 0
fi
fi
multilib-xlibs_src_compile_sub
}
# @FUNCTION: multilib-xlibs_src_install
# @USAGE:
# @DESCRIPTION:
multilib-xlibs_src_install() {
if [[ -z ${OABI} ]] ; then
local abilist=""
if has_multilib_profile ; then
abilist=$(get_install_abis)
einfo "Installing multilib ${PN} for ABIs: ${abilist}"
elif is_crosscompile || tc-is-cross-compiler ; then
abilist=${DEFAULT_ABI}
fi
if [[ -n ${abilist} ]] ; then
OABI=${ABI}
for ABI in ${abilist} ; do
export ABI
multilib-xlibs_src_install
done
ABI=${OABI}
unset OABI
return 0
fi
fi
einfo "Installing ${PN} ${ABI} ..."
if [[ -n ${MULTILIB_SPLITTREE} ]]; then
cd ${WORKDIR}/builddir.${ABI}
else
cd "${S}/objdir-${ABI}"
fi
if [[ -n ${XMODULAR_MULTILIB} ]]; then
x-modular_src_install
else
multilib-xlibs_src_install_internal
fi
}
# @FUNCTION: multilib-xlibs_src_compile_sub
# @USAGE:
# @DESCRIPTION:
multilib-xlibs_src_compile_sub() {
local myconf
local OCFLAGS=""
local OCXXFLAGS=""
local OCHOST=""
CC="$(tc-getCC)"
CXX="$(tc-getCXX)"
if has_multilib_profile ; then
OCFLAGS="${CFLAGS}"
OCXXFLAGS="${CXXFLAGS}"
OCHOST="${CHOST}"
if use amd64 || use ppc64 ; then
case ${ABI} in
x86) CHOST="i686-${OCHOST#*-}"
CFLAGS="${OCFLAGS} -m32"
CXXFLAGS="${OCXXFLAGS} -m32"
;;
amd64) CHOST="x86_64-${OCHOST#*-}"
CFLAGS="${OCFLAGS} -m64"
CXXFLAGS="${CXXFLAGS} -m64"
;;
ppc) CHOST="powerpc-${OCHOST#*-}"
CFLAGS="${OCFLAGS} -m32"
CXXFLAGS="${OCXXFLAGS} -m32"
;;
ppc64) CHOST="powerpc64-${OCHOST#*-}"
CFLAGS="${OCFLAGS} -m64"
CXXFLAGS="${OCXXFLAGS} -m64"
;;
*) die "Unknown ABI"
;;
esac
fi
fi
if [[ -n ${MULTILIB_SPLITTREE} ]]; then
cp -al ${S} ${WORKDIR}/builddir.${ABI}
cd ${WORKDIR}/builddir.${ABI}
else
mkdir "${S}/objdir-${ABI}"
cd "${S}/objdir-${ABI}"
ECONF_SOURCE=".."
fi
if [[ -n ${XMODULAR_SUPRESS_TESTS} ]]; then
CONFIGURE_OPTIONS="${CONFIGURE_OPTIONS} --enable-malloc0returnsnull=yes"
fi
PKG_CONFIG_PATH="/usr/$(get_libdir)/pkgconfig"
if [[ -n ${XMODULAR_MULTILIB} ]]; then
x-modular_src_compile
else
multilib-xlibs_src_compile_internal
fi
if has_multilib_profile; then
CFLAGS="${OCFLAGS}"
CXXFLAGS="${OCXXFLAGS}"
CHOST="${OCHOST}"
fi
}
# @FUNCTION: multilib-xlibs_src_compile_internal
# @USAGE: override this function if you arent using x-modules eclass and want to use a custom src_compile.
# @DESCRIPTION:
multilib-xlibs_src_compile_internal() {
src_compile
}
# @FUNCTION: multilib-xlibs_src_install_internal
# @USAGE: override this function if you arent using x-modules eclass and want to use a custom src_install
# @DESCRIPTION:
multilib-xlibs_src_install_internal() {
src_install
}
EXPORT_FUNCTIONS src_compile src_install
|
And the modifications in the ebuilds is very simple. First an example with libX11
Code: |
--- /usr/portage/x11-libs/libX11/libX11-1.1.5.ebuild 2008-09-06 02:26:34.000000000 -0430
+++ /var/portage/local/x11-libs/libX11/libX11-1.1.5.ebuild 2008-10-30 22:27:51.000000000 -0430
@@ -5,7 +5,10 @@
# Must be before x-modular eclass is inherited
#SNAPSHOT="yes"
-inherit x-modular toolchain-funcs flag-o-matic
+XMODULAR_MULTILIB="yes"
+XMODULAR_SUPRESS_TESTS="yes"
+#EMULTILIB_PKG="true"
+inherit x-modular toolchain-funcs flag-o-matic multilib-xlibs
DESCRIPTION="X.Org X11 library"
|
another one with libdrm
Code: |
--- /usr/portage/x11-libs/libdrm/libdrm-2.4.0.ebuild 2008-10-19 17:06:06.000000000 -0430
+++ /var/portage/local/x11-libs/libdrm/libdrm-2.4.0.ebuild 2008-10-30 22:29:59.000000000 -0430
@@ -5,7 +5,8 @@
# Must be before x-modular eclass is inherited
#SNAPSHOT="yes"
-inherit x-modular
+XMODULAR_MULTILIB="yes"
+inherit x-modular multilib-xlibs
DESCRIPTION="X.Org libdrm library"
HOMEPAGE="http://dri.freedesktop.org/"
|
For the non x-modular ebuilds (like mesa and freetype) the changes are minimal too (only implies a src_compile and src_install rename)
mesa ebuild
Code: |
--- /usr/portage/media-libs/mesa/mesa-7.2.ebuild 2008-10-22 11:39:02.000000000 -0430
+++ /var/portage/local/media-libs/mesa/mesa-7.2.ebuild 2008-10-30 22:33:08.000000000 -0430
@@ -8,7 +8,9 @@
GIT="git"
fi
-inherit autotools multilib flag-o-matic ${GIT} portability
+EMULTILIB_PKG="true"
+MULTILIB_SPLITTREE="true"
+inherit autotools multilib flag-o-matic ${GIT} portability multilib-xlibs
OPENGL_DIR="xorg-x11"
@@ -115,7 +117,7 @@
fi
}
-src_compile() {
+multilib-xlibs_src_compile_internal() {
local myconf
# This is where we might later change to build xlib/osmesa
@@ -169,7 +171,7 @@
emake || die
}
-src_install() {
+multilib-xlibs_src_install_internal() {
dodir /usr
emake \
DESTDIR="${D}" \
|
freetype ebuild
Code: |
--- /usr/portage/media-libs/freetype/freetype-2.3.7.ebuild 2008-08-20 13:06:06.000000000 -0430
+++ /var/portage/local/media-libs/freetype/freetype-2.3.7.ebuild 2008-10-30 22:34:17.000000000 -0430
@@ -2,7 +2,7 @@
# Distributed under the terms of the GNU General Public License v2
# $Header: /var/cvsroot/gentoo-x86/media-libs/freetype/freetype-2.3.7.ebuild,v 1.8 2008/08/20 17:26:51 vapier Exp $
-inherit eutils flag-o-matic libtool
+inherit eutils flag-o-matic libtool multilib-xlibs
DESCRIPTION="A high-quality and portable font engine"
HOMEPAGE="http://www.freetype.org/"
@@ -75,7 +75,7 @@
epunt_cxx
}
-src_compile() {
+multilib-xlibs_src_compile_internal() {
append-flags -fno-strict-aliasing
type -P gmake &> /dev/null && export GNUMAKE=gmake
@@ -88,7 +88,7 @@
fi
}
-src_install() {
+multilib-xlibs_src_install_internal() {
emake DESTDIR="${D}" install || die "emake install failed"
dodoc ChangeLog README
|
I am happy now , no more "unknown chip id " errors and can use 32bits opengl apps with direct rendering using the open source radeon driver.
I hope that this can help you too.
P.S: Yeah, the variable names sucks but at least it compiles and works without errors (i ll try to give more "standarized" names in the next revision )
UPDATE: now the eclass uses the lib32 USE flag _________________ just feel the code...
Last edited by code_raptor on Sat Nov 01, 2008 12:41 am; edited 2 times in total |
|
Back to top |
|
|
alex.blackbit Advocate
Joined: 26 Jul 2005 Posts: 2397
|
Posted: Fri Oct 31, 2008 9:41 am Post subject: |
|
|
very impressive!
when i come home from work today, i will give it a try.
i think you should contact the gentoo developers and ask them what they think about that, i had a quick conversation with Donnie Berkholz about this topic.
if that works as you say, it should definitely be placed in the x11 overlay at the first place and after a testing phase in the testing tree.
again, very good work! |
|
Back to top |
|
|
alex.blackbit Advocate
Joined: 26 Jul 2005 Posts: 2397
|
Posted: Fri Oct 31, 2008 10:43 am Post subject: |
|
|
i couldn't wait and played a bit over ssh.
libX11, libXau, libdrm, libxcb emerged fine, but i had to figure out the order myself.
portage-2.2 has a feature to require packages to be installed with certain use-flags enabled, can't remember the name.
that way this could be done automatically, i guess. then all the needed packages should be pulled in as dependencies by portage.
libXext failed, http://xx.vu/~ahuemer/libXext-build.log.
do you have an idea what i should do against that?
thanks.
EDIT: freetype works too, forgot that before.
the complete list of successfully emerged multilib packages is now: freetype-2.3.7, libX11-1.1.5, libXau-1.0.4, libdrm-2.4.0, libxcb-1.1.90.1
not successful:libXext-1.0.4
is anything else needed?
emerging multilib mesa-7.2 fails as expected, because libXext is not available in a suitable (32bit) version.
Last edited by alex.blackbit on Fri Oct 31, 2008 2:39 pm; edited 1 time in total |
|
Back to top |
|
|
code_raptor n00b
Joined: 24 Jun 2005 Posts: 47
|
Posted: Fri Oct 31, 2008 2:32 pm Post subject: |
|
|
Add XMODULAR_SUPRESS_TESTS="yes" variable before the inherit line so the eclass force the configure step to skip that test (i need a better name like SKIP_MALLOC_TEST or something like that )
That configure error was one of my bigger headaches, after the libtool one :/
Btw i was thinking the same about the use flags. Something like converting the emul package xlibs to a meta package, define IUSE=lib32 in the eclass then include all the packages needed in there with a USE flag dependancy like x11-libs/libX11[lib32].
EDIT: changed x86 for lib32 (looks like x86 USE flag is masked somewhere) _________________ just feel the code...
Last edited by code_raptor on Fri Oct 31, 2008 4:51 pm; edited 1 time in total |
|
Back to top |
|
|
alex.blackbit Advocate
Joined: 26 Jul 2005 Posts: 2397
|
Posted: Fri Oct 31, 2008 3:08 pm Post subject: |
|
|
now it works.
here is the list of ebuilds that needed modification:
libX11, libXau, libXdamage, libXext, libXfixes, libXxf96vm, libdrm, libxcb, freetype, mesa, libSM, libICE, libXi, libXrender
i guess this is the list of packages that are contained in emul-linux-x86-xlibs, right?
ebuilds that need XMODULAR_SUPRESS_TESTS="yes":
libX11, libXext, libXxf86vm, libXi
mesa emerged normally, resulting in Code: | % ls -l /usr/lib32/dri
total 8.0M
-rwxr-xr-x 1 root root 2.1M Oct 31 15:56 r200_dri.so
-rwxr-xr-x 1 root root 2.1M Oct 31 15:56 r300_dri.so
-rwxr-xr-x 1 root root 2.1M Oct 31 15:56 radeon_dri.so
-rwxr-xr-x 1 root root 1.9M Oct 31 15:56 swrast_dri.so
% |
when i come home i will fire up some 32-bit applications.
EDIT: added libSM libICE, libXi, libXrender. these are not dependencies of mesa, but seem to be necessary for e.g. googleearth.
this list is still incomplete. libXrender fails to compile at the moment, because of an infinite loop Code: | >>> Compiling source in /var/tmp/portage/x11-libs/libXrender-0.9.4/work/libXrender-0.9.4 ...
* Building multilib libXrender for ABIs: x86 amd64
mkdir: cannot create directory `/var/tmp/portage/x11-libs/libXrender-0.9.4/work/libXrender-0.9.4/objdir-x86': File exists
mkdir: cannot create directory `/var/tmp/portage/x11-libs/libXrender-0.9.4/work/libXrender-0.9.4/objdir-x86': File exists
mkdir: cannot create directory `/var/tmp/portage/x11-libs/libXrender-0.9.4/work/libXrender-0.9.4/objdir-x86': File exists
mkdir: cannot create directory `/var/tmp/portage/x11-libs/libXrender-0.9.4/work/libXrender-0.9.4/objdir-x86': File exists |
code_raptor, does this happen in your environment too? |
|
Back to top |
|
|
code_raptor n00b
Joined: 24 Jun 2005 Posts: 47
|
Posted: Fri Oct 31, 2008 4:07 pm Post subject: |
|
|
I think that it happened me once with another package (libXrender compiles fine here) but was before i create the eclass, try wiping /var/tmp/portage contents.
i added libXcomposite, libXinerama, libXt, libXcursor, libXrandr, libXScrnSaver and libXv (needed for skype)
Making a comparation between the libs installed by the emul packge and my actual libs, i am missing those:
Code: |
/usr/lib32/libGLw.so
/usr/lib32/libMrm.so
/usr/lib32/libUil.so
/usr/lib32/libXaw.so
/usr/lib32/libXaw6.so
/usr/lib32/libXaw7.so
/usr/lib32/libXdmcp.so
/usr/lib32/libXft.so
/usr/lib32/libXm.so
/usr/lib32/libXmu.so
/usr/lib32/libXmuu.so
/usr/lib32/libXp.so
/usr/lib32/libXpm.so
/usr/lib32/libXtst.so
/usr/lib32/libXvMC.so
/usr/lib32/libXvMCW.so
/usr/lib32/libXxf86dga.so
/usr/lib32/libglut.so
/usr/lib32/libpixman-1.so
|
I ll check to what packages correspond those in a while.
EDIT: i found them:
Code: |
x11-libs/libXaw
x11-libs/libXdmcp
x11-libs/libXft
x11-libs/libXmu
x11-libs/libXp
x11-libs/libXpm
x11-libs/libXtst
x11-libs/libXvMC
x11-libs/libXxf86dga
media-libs/freeglut
x11-libs/pixman
|
But i have no idea from what packages those libs come (or if those are needed for anything)
Code: |
/usr/lib32/libXm.so
/usr/lib32/libUil.so
/usr/lib32/libMrm.so
/usr/lib32/libGLw.so
|
P.S.: you added xproto to multilib too? i had a problem with that in a package, but after i fixed the libtool error i forgot the package and if it was neccesary, tell me if u dont touched it so i can delete it from my overlay. _________________ just feel the code... |
|
Back to top |
|
|
alex.blackbit Advocate
Joined: 26 Jul 2005 Posts: 2397
|
Posted: Fri Oct 31, 2008 6:15 pm Post subject: |
|
|
xproto wasn't necessary until now.
my current list: Code: | libICE
libSM
libX11
libXScrnSaver
libXau
libXcomposite
libXcursor
libXdamage
libXext
libXfixes
libXi
libXinerama
libXrender
libXt
libXv
libXxf86dga
libXxf86vm
libdrm
libxcb
libdrm
libxcb
freetype
mesa |
i wiped /var/tmp/portage, but libXrender still won't compile. any other ideas?
skype and googleearth depend on this lib, so i can't try them.
doom3 won't start either, but i think this is a different problem. |
|
Back to top |
|
|
code_raptor n00b
Joined: 24 Jun 2005 Posts: 47
|
Posted: Fri Oct 31, 2008 6:38 pm Post subject: |
|
|
i found your problem, add XMODULAR_MULTILIB="yes" to the ebuild.
UPDATE: i modified the eclass to use the lib32 USE flag so the multilib build is optional and made a emul-linux-x86-xlibs metapackage who use that use flag.
emul-linux-x86-xlibs-99999999.ebuild
Code: |
# Copyright 1999-2008 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
# $Header: $
EAPI="2"
DESCRIPTION="Metapackage to provide 32bit libraries via multilib"
HOMEPAGE="http://www.gentoo.org/"
LICENSE="GPL-2"
KEYWORDS="-* amd64"
SLOT="0"
IUSE="opengl"
DEPEND="opengl? ( app-admin/eselect-opengl )"
RDEPEND=">=app-emulation/emul-linux-x86-baselibs-20071114
media-libs/fontconfig[lib32]
media-libs/freetype[lib32]
opengl? ( media-libs/mesa[lib32]
media-libs/freeglut[lib32] )
x11-libs/libdrm[lib32]
x11-libs/libICE[lib32]
x11-libs/libSM[lib32]
x11-libs/libX11[lib32]
x11-libs/libXau[lib32]
x11-libs/libXaw[lib32]
x11-libs/libxcb[lib32]
x11-libs/libXcomposite[lib32]
x11-libs/libXcursor[lib32]
x11-libs/libXdamage[lib32]
x11-libs/libXdmcp[lib32]
x11-libs/libXext[lib32]
x11-libs/libXfixes[lib32]
x11-libs/libXft[lib32]
x11-libs/libXi[lib32]
x11-libs/libXinerama[lib32]
x11-libs/libXmu[lib32]
x11-libs/libXp[lib32]
x11-libs/libXpm[lib32]
x11-libs/libXrandr[lib32]
x11-libs/libXrender[lib32]
x11-libs/libXScrnSaver[lib32]
x11-libs/libXt[lib32]
x11-libs/libXtst[lib32]
x11-libs/libXv[lib32]
x11-libs/libXvMC[lib32]
x11-libs/libXxf86dga[lib32]
x11-libs/libXxf86vm[lib32]
x11-libs/pixman[lib32]"
pkg_postinst() {
#update GL symlinks
use opengl && eselect opengl set --use-old
}
|
All the packages compiles fine (except freeglut, checking why)
UPDATE: found the problem: mesa dont provides a libGLU.la file so the ebuild uses one from ${FILESDIR}/lib and installs in /usr/lib. And now because the multilib setup it installs in /usr/lib32 too, causing problems with anything who needs that file (like freeglut) because it points to /usr/lib. So the solution is edit that file who resides in media-libs/mesa/files/lib/libGLU.la and change libdir='/usr/lib' to libdir='/usr/${libdir}'.
Sadly this isnt enough to make freeglut compile because it uses an ancient configure script who have problems with multilib so i made a patch:
freeglut-2.4.0-multilib-fix.patch
Code: |
--- configure.old 2008-10-31 16:25:39.000000000 -0430
+++ configure 2008-10-31 16:24:39.000000000 -0430
@@ -6526,7 +6526,7 @@
# Find out which ABI we are using (multilib Linux x86_64 hack).
libsuff=
case "$host_cpu" in
- x86_64*)
+ x86_64* | i*86)
echo '#line 6525 "configure"' > conftest.$ac_ext
if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
(eval $ac_compile) 2>&5
@@ -6537,6 +6537,9 @@
*64-bit*)
libsuff=64
;;
+ *32-bit*)
+ libsuff=32
+ ;;
esac
fi
rm -rf conftest*
|
After this, freeglut compiles without problems.
P.S.: after this i ended hating .la files and configure scripts (reading a 10.000+ lines configure script isnt fun )
UPDATE: adding media-libs/fontconfig to the ebuild list
UPDATE: posted freeglut patch again (personal note: never paste from console again, whitespace are bad) _________________ just feel the code...
Last edited by code_raptor on Sat Nov 01, 2008 11:47 am; edited 4 times in total |
|
Back to top |
|
|
alex.blackbit Advocate
Joined: 26 Jul 2005 Posts: 2397
|
Posted: Sat Nov 01, 2008 12:06 am Post subject: |
|
|
what changes have you made to media-libs/fontconfig? |
|
Back to top |
|
|
code_raptor n00b
Joined: 24 Jun 2005 Posts: 47
|
Posted: Sat Nov 01, 2008 12:35 am Post subject: |
|
|
alex.blackbit wrote: | what changes have you made to media-libs/fontconfig? |
I was forgotting that
Code: |
--- /usr/portage/media-libs/fontconfig/fontconfig-2.6.0-r2.ebuild 2008-10-02 12:36:18.000000000 -0430
+++ /var/portage/local/media-libs/fontconfig/fontconfig-2.6.0-r2.ebuild 2008-10-30 23:39:01.000000000 -0430
@@ -4,7 +4,7 @@
WANT_AUTOMAKE=1.9
-inherit eutils autotools libtool toolchain-funcs flag-o-matic
+inherit eutils autotools libtool toolchain-funcs flag-o-matic multilib-xlibs
DESCRIPTION="A library for configuring and customizing font access"
HOMEPAGE="http://fontconfig.org/"
@@ -54,7 +54,7 @@
elibtoolize
}
-src_compile() {
+multilib-xlibs_src_compile_internal() {
if tc-is-cross-compiler; then
myconf="--with-arch=${ARCH}"
replace-flags -mtune=* -DMTUNE_CENSORED
@@ -70,7 +70,7 @@
emake || die
}
-src_install() {
+multilib-xlibs_src_install_internal() {
emake DESTDIR="${D}" install || die
#fc-lang directory contains language coverage datafiles
|
_________________ just feel the code... |
|
Back to top |
|
|
alex.blackbit Advocate
Joined: 26 Jul 2005 Posts: 2397
|
Posted: Sat Nov 01, 2008 7:49 am Post subject: |
|
|
skype & googleearth are running
that's the first time i saw googleearth with a open source driver. it works quite well.
left of the "earth" is a little white rectangle that shouldn't be there, but that's fine.
code_raptor, is it possible that the patch against freeglut you posted is not a diff from the original file?
it does not work for me at the moment. Code: | # emerge -av1 freeglut
These are the packages that would be merged, in order:
Calculating dependencies... done!
[ebuild R ] media-libs/freeglut-2.4.0-r1 0 kB [0=>1]
Total: 1 package (1 reinstall), Size of downloads: 0 kB
Portage tree and overlays:
[0] /usr/portage
[1] /usr/portage/local/blackbit
Would you like to merge these packages? [Yes/No]
>>> Verifying ebuild manifests
>>> Emerging (1 of 1) media-libs/freeglut-2.4.0-r1
* freeglut-2.4.0.tar.gz RMD160 SHA1 SHA256 size ;-) ... [ ok ]
* checking ebuild checksums ;-) ... [ ok ]
* checking auxfile checksums ;-) ... [ ok ]
* checking miscfile checksums ;-) ... [ ok ]
>>> Unpacking source...
>>> Unpacking freeglut-2.4.0.tar.gz to /var/tmp/portage/media-libs/freeglut-2.4.0-r1/work
* Applying freeglut-2.4.0-macos.patch ... [ ok ]
* Applying freeglut-gcc42.patch ... [ ok ]
* Applying 2.4.0-cursor.patch ... [ ok ]
* Applying freeglut-2.4.0-bsd-usb-joystick.patch ... [ ok ]
* Applying freeglut-2.4.0-multilib-fix.patch ...
* Failed Patch: freeglut-2.4.0-multilib-fix.patch !
* ( /usr/portage/local/blackbit/media-libs/freeglut/files/freeglut-2.4.0-multilib-fix.patch )
*
* Include in your bugreport the contents of:
*
* /var/tmp/portage/media-libs/freeglut-2.4.0-r1/temp/freeglut-2.4.0-multilib-fix.patch-11062.out
*
* ERROR: media-libs/freeglut-2.4.0-r1 failed.
* Call stack:
* ebuild.sh, line 49: Called src_unpack
* environment, line 2863: Called epatch '/usr/portage/local/blackbit/media-libs/freeglut/files/freeglut-2.4.0-multilib-fix.patch
'
* environment, line 1532: Called die
* The specific snippet of code:
* die "Failed Patch: ${patchname}!";
* The die message:
* Failed Patch: freeglut-2.4.0-multilib-fix.patch!
*
* If you need support, post the topmost build error, and the call stack if relevant.
* A complete build log is located at '/var/tmp/portage/media-libs/freeglut-2.4.0-r1/temp/build.log'.
* The ebuild environment file is located at '/var/tmp/portage/media-libs/freeglut-2.4.0-r1/temp/environment'.
*
>>> Failed to emerge media-libs/freeglut-2.4.0-r1, Log file:
>>> '/var/tmp/portage/media-libs/freeglut-2.4.0-r1/temp/build.log'
* Messages for package media-libs/freeglut-2.4.0-r1:
* Failed Patch: freeglut-2.4.0-multilib-fix.patch !
* ( /usr/portage/local/blackbit/media-libs/freeglut/files/freeglut-2.4.0-multilib-fix.patch )
*
* Include in your bugreport the contents of:
*
* /var/tmp/portage/media-libs/freeglut-2.4.0-r1/temp/freeglut-2.4.0-multilib-fix.patch-11062.out
*
* ERROR: media-libs/freeglut-2.4.0-r1 failed.
* Call stack:
* ebuild.sh, line 49: Called src_unpack
* environment, line 2863: Called epatch '/usr/portage/local/blackbit/media-libs/freeglut/files/freeglut-2.4.0-multilib-fix.patch
'
* environment, line 1532: Called die
* The specific snippet of code:
* die "Failed Patch: ${patchname}!";
* The die message:
* Failed Patch: freeglut-2.4.0-multilib-fix.patch!
*
* If you need support, post the topmost build error, and the call stack if relevant.
* A complete build log is located at '/var/tmp/portage/media-libs/freeglut-2.4.0-r1/temp/build.log'.
* The ebuild environment file is located at '/var/tmp/portage/media-libs/freeglut-2.4.0-r1/temp/environment'.
*
* GNU info directory index is up-to-date.
# |
http://xx.vu/~ahuemer/freeglut-2.4.0-multilib-fix.patch-11062.out
unfortunately i will not be at home over the weekend. i will hack over ssh, so i will complete creating modified ebuilds in my overlay and emerge them, but of course i cannot try out 3d apps.
code_raptor, what graphics adapter do you have? did you try doom3?
i think freeglut is what keeps it from running on my machine. |
|
Back to top |
|
|
code_raptor n00b
Joined: 24 Jun 2005 Posts: 47
|
Posted: Sat Nov 01, 2008 11:55 am Post subject: |
|
|
Sorry, i looked at the forums from another monitor and the patch was all messed up with lots of whitespaces, anyway my post is fixed now (personal note: never do copy&paste from a terminal to a browser ).
My graphics adapter is a ATI Mobility X1400. I gonna try doom3 in a few hours to see how it goes. _________________ just feel the code... |
|
Back to top |
|
|
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
|