Probleme de compilation dans un chroot 32bit

Salut.

Bon, j’ai fait mon chroot comme indique sur cette page la :
http://forum.debian-fr.org/viewtopic.php?f=8&t=14673

Ok, pas de problemes semble t-il, j’ai installe les bibliotheques necessaire a la compilation de ardour avec le support des vst. Compilation que j’ai deja reussie sans probleme sur des OS 32bits : Ubuntu et 64studio.

Pour mon chroot j’ai d’ailleurs mis les depots de Etch et de 64studio avec le fichier de preferences adapte.

Seulement voila, j’ai ce message d’erreur :

[quote]libs/pbd/fpu.cc: In constructor ’PBD::FPU::FPU()’:
libs/pbd/fpu.cc:66: warning: dereferencing type-punned pointer will break strict-aliasing rules
{standard input}: Assembler messages:
{standard input}:117: Error: bad register name ‘%rbx’
{standard input}:118: Error: bad register name ‘%rax’
{standard input}:120: Error: bad register name ‘%rdx’
{standard input}:121: Error: bad register name ‘%rbx’
{standard input}:212: Error: bad register name ‘%rbx’
{standard input}:213: Error: bad register name ‘%rax’
{standard input}:215: Error: bad register name ‘%rdx’
{standard input}:216: Error: bad register name ‘%rbx’
scons: *** [libs/pbd/fpu.os] Error 1
scons: building terminated because of errors. [/quote]

et Paul (qui est le devellopeur principal d’Ardour) me reponds ceci sur le forum d’Ardour :

[quote]I have no idea. I can tell you that is much more likely that its a problem with your build setup, since I build ardour on an amd64 platform all the time. It may be that the build system for arodur is not able to correctly identify your chroot-ed environment as a 32 bit one, and thus attempts to use the 64 bit branch of the FPU-management code. I am not sure that chroot can alter the way that the processor type will be perceived (its determined by reading /proc/cpuinfo)
[/quote]
Premier probleme, je suis pas une bete en anglais, je suis pas sur de comprendre tout ce qu’il repond. Mais j’ai l’impression qu’il dit qu’il y aurait un probleme dans la construction du chroot 32bit ou un truc du genre nan?
Si c’est ca, quel pourrait etre le bleme?

Merci de votre aide.

Non, il dit que lors de la compilation, le type de cpu est lu dans /proc/cpuinfo et donc que le cpu est vu comme un 64 bits. Il essaye donc de compiler une version 32 bits avec un CPU détecté comme 64 bits et semble dire que cela est sans doute la causde des pbms. C’est idiot de sa part de détecter l’architecture via /proc/cpuinfo, cela interdit de fait la cross compilation et également la compilation en chroot mais aussi sur une machine 32 bits ayant un cpu 64 bits. Il semble se fier à cpuinfo car il n’aurait pas réussi à trouver l’architecture avant. Il faudrait regarder comment il cherche cette architecture voire carrement l’informer de la dite architecture. Bref, il faudrait le Makefile ou le configure

Voila le Makefile que j’ai trouve :

[code]# Makefile.in generated by automake 1.10 from Makefile.am.

scripts/Makefile. Generated from Makefile.in by configure.

Copyright © 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,

2003, 2004, 2005, 2006 Free Software Foundation, Inc.

This Makefile.in is free software; the Free Software Foundation

gives unlimited permission to copy and/or distribute it,

with or without modifications, as long as this notice is preserved.

This program is distributed in the hope that it will be useful,

but WITHOUT ANY WARRANTY, to the extent permitted by law; without

even the implied warranty of MERCHANTABILITY or FITNESS FOR A

PARTICULAR PURPOSE.

pkgdatadir = $(datadir)/libsigc++
pkglibdir = $(libdir)/libsigc++
pkgincludedir = $(includedir)/libsigc++
am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
install_sh_DATA = $(install_sh) -c -m 644
install_sh_PROGRAM = $(install_sh) -c
install_sh_SCRIPT = $(install_sh) -c
INSTALL_HEADER = $(INSTALL_DATA)
transform = $(program_transform_name)
NORMAL_INSTALL = :
PRE_INSTALL = :
POST_INSTALL = :
NORMAL_UNINSTALL = :
PRE_UNINSTALL = :
POST_UNINSTALL = :
build_triplet = x86_64-unknown-linux-gnu
host_triplet = x86_64-unknown-linux-gnu
subdir = scripts
DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/scripts/cxx.m4
$(top_srcdir)/scripts/cxx_std.m4 $(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES)
$(ACLOCAL_M4)
mkinstalldirs = $(install_sh) -d
CONFIG_HEADER = $(top_builddir)/sigc++config.h
CONFIG_CLEAN_FILES =
SOURCES =
DIST_SOURCES =
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
ACLOCAL = ${SHELL} /usr/local/music/src/ardour/2.0-ongoing/libs/sigc++2/missing --run aclocal-1.10
AMTAR = ${SHELL} /usr/local/music/src/ardour/2.0-ongoing/libs/sigc++2/missing --run tar
AR = ar
AS = as
AUTOCONF = ${SHELL} /usr/local/music/src/ardour/2.0-ongoing/libs/sigc++2/missing --run autoconf
AUTOHEADER = :
AUTOMAKE = ${SHELL} /usr/local/music/src/ardour/2.0-ongoing/libs/sigc++2/missing --run automake-1.10
AWK = gawk
CC = gcc
CCDEPMODE = depmode=gcc3
CFLAGS = -g -O2
CPP = gcc -E
CPPFLAGS =
CXX = g++
CXXCPP = g++ -E
CXXDEPMODE = depmode=gcc3
CXXFLAGS = -g -O2
CYGPATH_W = echo
DEFS = -DHAVE_CONFIG_H
DEPDIR = .deps
DLLTOOL = dlltool
ECHO = echo
ECHO_C =
ECHO_N = -n
ECHO_T =
EGREP = /bin/grep -E
EXEEXT =
F77 = gfortran
FFLAGS = -g -O2
FP_MAJOR_VERSION = 2
FP_MICRO_VERSION = 2
FP_MINOR_VERSION = 2
FP_RELEASE = 2.2
FP_VERSION = 2.2.2
GREP = /bin/grep
INSTALL = /usr/bin/install -c
INSTALL_DATA = ${INSTALL} -m 644
INSTALL_PROGRAM = ${INSTALL}
INSTALL_SCRIPT = ${INSTALL}
INSTALL_STRIP_PROGRAM = $(install_sh) -c -s
LDFLAGS =
LIBOBJS =
LIBS =
LIBTOOL = $(SHELL) $(top_builddir)/libtool
LN_S = ln -s
LTLIBOBJS =
M4 = m4
MAINT =
MAKEINFO = ${SHELL} /usr/local/music/src/ardour/2.0-ongoing/libs/sigc++2/missing --run makeinfo
MKDIR_P = /bin/mkdir -p
OBJDUMP = objdump
OBJEXT = o
PACKAGE = libsigc++
PACKAGE_BUGREPORT = libsigc-list@gnome.org
PACKAGE_NAME = libsigc++
PACKAGE_STRING = libsigc++ 2.2.2
PACKAGE_TARNAME = libsigc++
PACKAGE_VERSION = 2.2.2
PATH_SEPARATOR = :
PERL_PATH = /usr/bin/perl
RANLIB = ranlib
SED = /bin/sed
SET_MAKE =
SHELL = /bin/sh
STRIP = strip
VERSION = 2.2.2
abs_builddir = /usr/local/music/src/ardour/2.0-ongoing/libs/sigc++2/scripts
abs_srcdir = /usr/local/music/src/ardour/2.0-ongoing/libs/sigc++2/scripts
abs_top_builddir = /usr/local/music/src/ardour/2.0-ongoing/libs/sigc++2
abs_top_srcdir = /usr/local/music/src/ardour/2.0-ongoing/libs/sigc++2
ac_ct_CC = gcc
ac_ct_CXX = g++
ac_ct_F77 = gfortran
am__include = include
am__leading_dot = .
am__quote =
am__tar = tar --format=ustar -chf - "$$tardir"
am__untar = tar -xf -
bindir = ${exec_prefix}/bin
build = x86_64-unknown-linux-gnu
build_alias =
build_cpu = x86_64
build_os = linux-gnu
build_vendor = unknown
builddir = .
datadir = ${datarootdir}
datarootdir = ${prefix}/share
docdir = ${datarootdir}/doc/${PACKAGE_TARNAME}
dvidir = ${docdir}
exec_prefix = ${prefix}
host = x86_64-unknown-linux-gnu
host_alias =
host_cpu = x86_64
host_os = linux-gnu
host_vendor = unknown
htmldir = ${docdir}
includedir = ${prefix}/include
infodir = ${datarootdir}/info
install_sh = $(SHELL) /usr/local/music/src/ardour/2.0-ongoing/libs/sigc++2/install-sh
libdir = ${exec_prefix}/lib
libexecdir = ${exec_prefix}/libexec
localedir = ${datarootdir}/locale
localstatedir = ${prefix}/var
mandir = ${datarootdir}/man
mkdir_p = /bin/mkdir -p
oldincludedir = /usr/include
pdfdir = ${docdir}
prefix = /usr/local
program_transform_name = s,x,x,
psdir = ${docdir}
sbindir = ${exec_prefix}/sbin
sharedstatedir = ${prefix}/com
srcdir = .
sysconfdir = ${prefix}/etc
target_alias =
top_builddir = …
top_srcdir = …
EXTRA_DIST = cxx.m4 cxx_std.m4
all: all-am

.SUFFIXES:
$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
@for dep in $?; do
case ‘$(am__configure_deps)’ in
$$dep)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am–refresh
&& exit 0;
exit 1;;
esac;
done;
echo ’ cd $(top_srcdir) && $(AUTOMAKE) --gnu scripts/Makefile’;
cd $(top_srcdir) &&
$(AUTOMAKE) --gnu scripts/Makefile
.PRECIOUS: Makefile
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
@case ‘$?’ in
config.status)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am–refresh;;
*)
echo ’ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)’;
cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);;
esac;

$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am–refresh

$(top_srcdir)/configure: $(am__configure_deps)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am–refresh
$(ACLOCAL_M4): $(am__aclocal_m4_deps)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am–refresh

mostlyclean-libtool:
-rm -f *.lo

clean-libtool:
-rm -rf .libs _libs
tags: TAGS
TAGS:

ctags: CTAGS
CTAGS:

distdir: $(DISTFILES)
@srcdirstrip=echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g';
topsrcdirstrip=echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g';
list=’$(DISTFILES)’;
dist_files=for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t";
case $$dist_files in
/) $(MKDIR_P) echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u ;;
esac;
for file in $$dist_files; do
if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi;
if test -d $$d/$$file; then
dir=echo "/$$file" | sed -e 's,/[^/]*$$,,';
if test -d $(srcdir)/$$file && test $$d != $(srcdir); then
cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1;
fi;
cp -pR $$d/$$file $(distdir)$$dir || exit 1;
else
test -f $(distdir)/$$file
|| cp -p $$d/$$file $(distdir)/$$file
|| exit 1;
fi;
done
check-am: all-am
check: check-am
all-am: Makefile
installdirs:
install: install-am
install-exec: install-exec-am
install-data: install-data-am
uninstall: uninstall-am

install-am: all-am
@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am

installcheck: installcheck-am
install-strip:
$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)"
install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s
test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install
mostlyclean-generic:

clean-generic:

distclean-generic:
-test -z “$(CONFIG_CLEAN_FILES)” || rm -f $(CONFIG_CLEAN_FILES)

maintainer-clean-generic:
@echo “This command is intended for maintainers to use”
@echo "it deletes files that may require special tools to rebuild."
clean: clean-am

clean-am: clean-generic clean-libtool mostlyclean-am

distclean: distclean-am
-rm -f Makefile
distclean-am: clean-am distclean-generic

dvi: dvi-am

dvi-am:

html: html-am

info: info-am

info-am:

install-data-am:

install-dvi: install-dvi-am

install-exec-am:

install-html: install-html-am

install-info: install-info-am

install-man:

install-pdf: install-pdf-am

install-ps: install-ps-am

installcheck-am:

maintainer-clean: maintainer-clean-am
-rm -f Makefile
maintainer-clean-am: distclean-am maintainer-clean-generic

mostlyclean: mostlyclean-am

mostlyclean-am: mostlyclean-generic mostlyclean-libtool

pdf: pdf-am

pdf-am:

ps: ps-am

ps-am:

uninstall-am:

.MAKE: install-am install-strip

.PHONY: all all-am check check-am clean clean-generic clean-libtool
distclean distclean-generic distclean-libtool distdir dvi
dvi-am html html-am info info-am install install-am
install-data install-data-am install-dvi install-dvi-am
install-exec install-exec-am install-html install-html-am
install-info install-info-am install-man install-pdf
install-pdf-am install-ps install-ps-am install-strip
installcheck installcheck-am installdirs maintainer-clean
maintainer-clean-generic mostlyclean mostlyclean-generic
mostlyclean-libtool pdf pdf-am ps ps-am uninstall uninstall-am

Tell versions [3.59,3.63) of GNU make to not export all variables.

Otherwise a system limit (for SysV at least) may be exceeded.

.NOEXPORT:
[/code]

Il y a aussi divers Makefile.in et Makefile.am a divers endroits, mais je suppose que ce ne sont pas ceux la qu’il faut poster.

Sinon j’ai trouve 3 configure differents :
Un dans ardour-2.5/libs/sigc++2
Un dans ardour-2.5/libs/libsndfile
Un dans ardour-2.5/libs/glibmm2

Je n’ai regarde que le premier, il est tres long. Faut-il que j’en poste un, plusieurs ou pas du tout?

(edit) j’ai pourtant mis les balises “code”, je pensais que ca allait mettre le fichier dans une fenetre…

Tu lis

[quote]# Makefile.in generated by automake 1.10 from Makefile.am.

scripts/Makefile. Generated from Makefile.in by configure.

[/quote]
donc ce makefile a été fait par automake à partir du Makefile.in.
On lit ici

[quote]build_triplet = x86_64-unknown-linux-gnu
host_triplet = x86_64-unknown-linux-gnu
[/quote]
donc il compile pour du 64bits sur un 64bits. L’explication est donc bonne.

Sur le site:

[quote]This section applies only to people building Ardour 2.0 (not 0.99.X) and only for Linux/x86 platforms. At this time, you cannot run VST plugins in Ardour on OS X or Linux x86_64 platforms. Note that if you use your x86_64 system in 32 bit mode, that counts as x86, and things will work as expected.

[/quote]donc ça se confirme.

J’ai chargé les sources et vu qu’il utilisait la variable d’environnement DIST_TARGET

Essaye de recompiler en faisant au préalable

$ export DIST_TARGET=i686 $ <...ta compil...>

Je viens d’essayer, meme probleme.
Comme j’ai fait gaffe j’ai vu des le debut une ligne passer avec un truc genre

J’avais fait ca exactement :

[quote]$ mv vst_sdk2_3.zip ardour-2.5/libs/fst/
$ cd ardour-2.5/
$ export DIST_TARGET=i686
$ scons VST=1[/quote]

(edit) Sinon y’a moyen de changer le Makefile a la main ou pas?

Edite le fichier SConstruct et remplace la ligne 684

env['DIST_TARGET'] = 'x86_64' par env['DIST_TARGET'] = 'i684'

[quote=“fran.b”]Edite le fichier SConstruct et remplace la ligne 684

env['DIST_TARGET'] = 'x86_64' par env['DIST_TARGET'] = 'i684' [/quote]

J’ai suppose qu’il fallait lire :

[quote][code] env[‘DIST_TARGET’] = 'x86_64’
par
env[‘DIST_TARGET’] = ‘i686’[/quote]

mais apres un moment (plus long qu’auparavent) j’ai cette erreur :

[quote]libs/ardour/globals.cc: In function ‘ARDOUR::microseconds_t ARDOUR::get_microseconds()’:
libs/ardour/globals.cc:386: error: ‘jack_get_time’ was not declared in this scope
scons: *** [libs/ardour/globals.os] Error 1
scons: building terminated because of errors.[/quote]

Ça c’est une autre erreur, il te manque un fichier dev ou il te faut une nouvelle version:
http://tracker.ardour.org/view.php?id=2274par exemple

Ah ben desole, j’aurais pu faire l’effort de le trouver tout seul celui-la.

Ben en mettant les depots de 64studio je pensais pas avoir de problemes pourtant a ce niveau, du coup j’ai mis le meme sources.list et preferences que mon 64bits et je suis en train de dist-upgrader.

Je reessayes la compilation quand ce sera fini.

Cela dit, c’est bon signe, ça veut dire que ça compile correctement…

Ok, c’est compile et installe en 32bits.

Maintenant faut que je configure le tout pour que jackd puisse fonctionner dans le 32bits, que je teste les vst, etc… Bref, c’est pas fini. Mais presque. Enfin j’espere.

Merci fran.b de ton aide.

Bon ben je reviens a la charge.

Pour fonctionner Ardour a besoin de jack.

Donc je fais :

Ca lance bien Ardour. La je choisis mes parametres pour jack, je choisi la session a ouvrir et :

[quote]JACK COMMAND: /usr/bin/jackd -p 128 -T -d alsa -n 2 -r 96000 -p 128 -d hw:0,0
jackd 0.109.2
Copyright 2001-2005 Paul Davis and others.
jackd comes with ABSOLUTELY NO WARRANTY
This is free software, and you are welcome to redistribute it
under certain conditions; see the file COPYING for details

JACK compiled with System V SHM support.
cannot create /dev/shm/jack-1000 directory (Permission denied)

cannot create server sockets
cannot create engine[/quote]

[quote]There are several possible reasons:

  1. You requested audio parameters that are not supported…
  2. JACK is running as another user.

Please consider the possibilities, and perhaps try different parameters.
[/quote]

Comme c’est pas la solution 1) ca ne peut etre que la solution 2)

J’avais pourtant fait :

[quote]# grep “^[^:]*:x:[0-9][0-9][0-9][0-9]:” /etc/passwd >> /32bits/etc/passwd

grep “^[^:]*:x:[0-9][0-9][0-9][0-9]:” /etc/group >> /32bits/etc/group[/quote]

Comme indique dans le tuto, qu’est-ce que j’ai oublie?

Ok, resolu en changeant les droits sur /dev/shm du chroot.

Ca ne fonctionne toujours pas mais pour d’autres raisons. Mais la ce n’est plus du domaine de thread, donc je vais chercher une solution. Encore merci. (si, si, j’insiste…)