Amsonia Posté(e) le 25 mai 2012 Posté(e) le 25 mai 2012 (modifié) Comme certains le savent je me lance dans la génération de spk et, comme me l'a fait remarquer Diaoul, commençons par générer un binaire propre… Donc je cherche à compiler Darkstat. Ça demande libpcap, j'ai compilé libpcap. (j'ai encore du installer quelques paquets à mon Debian et ai été bluffé par l'efficacité et la simplicité de la chose…!) Bref après quelques galères de débutant ça me génère le Makefile, le config.h et passe à la compilation. Sauf qu'à un moment ça dit : HOSTCC c-ify C-IFY stylecss.h ./c-ify: 5: Syntax error: ")" unexpected make[1]: ***[stylecss.h] Erreur 2 make[1]: quittant le répertoire "blablabla" make: *** [compile_target] Erreur 2 J'ai jeté un œil au fichier c-ify.c et je n'ai rien trouvé de bizarre. Une idée ? Modifié le 25 mai 2012 par Amsonia 0 Citer
Diaoul Posté(e) le 25 mai 2012 Posté(e) le 25 mai 2012 Si je résume : Tu as cross/libcap avec un Makefile adapté et la description de ce qu'il faut Quand dans cross/libcap tu tapes "make ARCH=88f6281" tout se passe bien ? Tu as bien le répertoire cross/libcap/work-88f6281/install/ avec toute l'arborescence qui va bien et les binaires dedans ? (lib+bin) Et les headers ? (include) Si ça c'est bon, tu fais pareil avec Darkstat : Répertoire cross/darkstat avec un Makefile adapté avec bien sur "DEPENDS = cross/libcap" Ensuite dans cross/darkstat tu tapes "make ARCH=88f6281" et là ça merdouille ? Le make de SPKSRC passe par plusieurs étapes pour un binaire : depends download extract patch configure build install Je te conseille donc d'essayer d'identifier à quelle étape ça merde, en tapant successivement "make ARCH=88f6281 {etape}" dans le répertoire cross/darkstat après avoir nettoyé le tout avec "make clean". Il faut vraiment plus de logs aussi, met sur pastebin et envoie la totale. Saches que dans spksrc on ne touche jamais au code des binaires, si ça merde c'est un problème de configuration (étape configure) ou build (étape de compilation). Peu utile donc d'aller voir le code du programme, je ne suis même pas sûr que ça puisse te donner des pistes. Quels paquets as tu installé sur Debian pour pouvoir cross compiler libcap ? 0 Citer
Amsonia Posté(e) le 25 mai 2012 Auteur Posté(e) le 25 mai 2012 (modifié) J'avais tout fait avec l'archi de mon DS410 (ppc853x), j'ai tout refait avec la tienne : ça bloque au même endroit (build) mais pas exactement la même erreur. Voici le log complet : http://pastebin.com/U8EQXujn Et voici l'erreur finale : ./c-ify: 1: Syntax error: word unexpected (expecting ")") make[1]: *** [stylecss.h] Erreur 2 make: *** [compile_target] Erreur 2 Pour compiler libpcap, ça me disait que mon 'lex' était insuffisant et aussi qu'il y avait 'flex' qui est mieux que lex. J'ai donc installé 'flex' et un autre truc (kimwitu) parce que j'ai vu les mots 'lex' et 'compilateur' dans sa description Modifié le 25 mai 2012 par Amsonia 0 Citer
Diaoul Posté(e) le 25 mai 2012 Posté(e) le 25 mai 2012 Peut être que tu devrais rajouter cross/flex dans DEPENDS. 0 Citer
Amsonia Posté(e) le 25 mai 2012 Auteur Posté(e) le 25 mai 2012 Peut être que tu devrais rajouter cross/flex dans DEPENDS. Je ne comprends pas… c'est au Debian qu'il manquait flex, pas une dépendance de darkstat. Flex était nécessaire pour compiler libpcap. 0 Citer
Diaoul Posté(e) le 25 mai 2012 Posté(e) le 25 mai 2012 Ce qu'il y a c'est que il utilise un autre GCC pour compiler ça : HOSTCC au lieu de CC. Donc je pense que HOSTCC pointe vers ton gcc à toi et pas le cross. Ce qui fait que GCC il utilise un truc illisible produit par le GCC de cross. D'ou l'erreur. Essaye de faire "cross/darkstat/work-88f6281/darkstat-3.0.715/configure --help" pour voir les options qu'il te propose et s'il y a quelque chose en relation avec HOSTCC. Ultimement, essaye en écrasant la variable HOSTCC par la même valeur que CC avec qqch du genre : ENV += HOSTCC=$$(CC) dans le Makefile 0 Citer
Amsonia Posté(e) le 25 mai 2012 Auteur Posté(e) le 25 mai 2012 Voilà ce que je pense être pertinent dans le --help : To assign environment variables (e.g., CC, CFLAGS...), specify them as VAR=VALUE. See below for descriptions of some of the useful variables. (plein de trucs ici...) Optional Packages: --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) --with-chroot-dir specify the chroot directory (default: /var/empty) --with-privdrop-user specify which user to drop privileges to (default: nobody) --with-pcap=DIR prefix to libpcap installation Some influential environment variables: CC C compiler command CFLAGS C compiler flags LDFLAGS linker flags, e.g. -L<lib dir> if you have libraries in a nonstandard directory <lib dir> LIBS libraries to pass to the linker, e.g. -l<library> CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I<include dir> if you have headers in a nonstandard directory <include dir> CPP C preprocessor Use these variables to override the choices made by `configure' or to help it to find libraries and programs with nonstandard names/locations. 0 Citer
Amsonia Posté(e) le 25 mai 2012 Auteur Posté(e) le 25 mai 2012 Si je lis correctement la chose, il faudrait que je rajoute la chose suivante dand mon Makefile : CONFIGURE_ARGS = CC= euh quoi ? Je me suis un peu baladé dans ce dossier cross/darkstat/work-88f6281/darkstat-3.0.715 et le config.log me semble bien dire que les bons compilateurs ont été trouvés. Par exemple : configure:2214: checking for arm-none-linux-gnueabi-gcc configure:2241: result: /home/amsonia/spksrc/toolchains/syno-88f6281/work/arm-none-linux-gnueabi/bin/arm-none-linux-gnueabi-gcc configure:2510: checking for C compiler version configure:2519: /home/amsonia/spksrc/toolchains/syno-88f6281/work/arm-none-linux-gnueabi/bin/arm-none-linux-gnueabi-gcc --version >&5 arm-none-linux-gnueabi-gcc (GCC) 4.2.1 0 Citer
Diaoul Posté(e) le 25 mai 2012 Posté(e) le 25 mai 2012 Recherche HOSTCC dans le config.log, le Makefile. En général, c'est dans les .in comme configure.in etc. Parfois dans les ac 0 Citer
Amsonia Posté(e) le 25 mai 2012 Auteur Posté(e) le 25 mai 2012 (modifié) Dans config.log j'ai rien. Dans Makefile et Makefile.in j'ai plusieurs choses : CC = /home/amsonia/spksrc/toolchains/syno-88f6281/work/arm-none-linux-gnueabi/bin/arm-none-linux-gnueabi-gcc CFLAGS = -pipe -I/home/amsonia/spksrc/cross/darkstat/work-88f6281/install//usr/local/include CPP = /home/amsonia/spksrc/toolchains/syno-88f6281/work/arm-none-linux-gnueabi/bin/arm-none-linux-gnueabi-cpp CPPFLAGS = -I/home/amsonia/spksrc/cross/darkstat/work-88f6281/install//usr/local/include INSTALL = /usr/bin/install -c LDFLAGS = -L/home/amsonia/spksrc/cross/darkstat/work-88f6281/install//usr/local/lib -Wl,--rpath-link,/home/amsonia/spksrc/cross/darkstat/work-88f6281/install//usr/local/lib -Wl,--rpath,/usr/local/lib LIBS = -lpcap -lz HOSTCC ?= $(CC) HOSTCFLAGS ?= $(CFLAGS) Ca pointe bien au bon endroit non ? $(STATICHS): c-ify c-ify: static/c-ify.c $(AM_V_HOSTCC) $(AM_V_at)$(HOSTCC) $(HOSTCFLAGS) static/c-ify.c -o $@ # silent-rules AM_DEFAULT_VERBOSITY = 0 AM_V_CC = $(am__v_CC_$(V)) am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY)) am__v_CC_0 = @echo " CC " $@; AM_V_LINK = $(am__v_LINK_$(V)) am__v_LINK_ = $(am__v_LINK_$(AM_DEFAULT_VERBOSITY)) am__v_LINK_0 = @echo " LINK " $@; AM_V_HOSTCC = $(am__v_HOSTCC_$(V)) am__v_HOSTCC_ = $(am__v_HOSTCC_$(AM_DEFAULT_VERBOSITY)) am__v_HOSTCC_0 = @echo " HOSTCC" $@; AM_V_CIFY = $(am__v_CIFY_$(V)) am__v_CIFY_ = $(am__v_CIFY_$(AM_DEFAULT_VERBOSITY)) am__v_CIFY_0 = @echo " C-IFY " $@; AM_V_at = $(am__v_at_$(V)) am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY)) am__v_at_0 = @ edit : rajouté la définition des variables en haut et voici le pastebin du makefile complet : http://pastebin.com/c5i4ebfd Modifié le 25 mai 2012 par Amsonia 0 Citer
Diaoul Posté(e) le 25 mai 2012 Posté(e) le 25 mai 2012 (modifié) Ce que je ne comprends pas c'est pourquoi il a besoin d'un HOSTCC alors que ce n'est pas précisé dans le configure. Bref, quand c'est comme ça ce que tu fais c'est : Recherche Google avec ton erreur Investigue toi même comme tu le fais Consulter les règles de OpenEmbedded s'ils l'ont http://cgit.openembe...ed/tree/recipes Consulter les règles Optware s'ils l'ont http://trac.nslu2-li...e/browser/trunk Tout ça a fin de trouver les bonnes variables à mettre et les bons arguments. Essaye d'écraser HOSTCC par "gcc" tout simplement en rajoutant HOSTCC=gcc dans CONFIGURE_ARGS Si ça ne marche pas, essaye de le mettre dans ENV : ENV += HOSTCC=gcc J'ai l'impression que ce darkstat est un bon cas d'école Modifié le 25 mai 2012 par Diaoul 0 Citer
Amsonia Posté(e) le 25 mai 2012 Auteur Posté(e) le 25 mai 2012 Diaoul, il fallait bien mettre ENV += HOSTCC=gcc dans le makefile ! J'ai bien darkstat dans cross/darkstat/work/88f6281/install/usr/local/sbin ! Le plist de darkstat a aussi été généré. Pour mon archi ppc853x par contre, ça ne marche pas Ca bloque au même endoit et me dit HOSTCC c-ify `-mcpu=' is deprecated. Use `-mtune=' or '-march=' instead. cc1: error: unrecognized command line option "-mfloat-gprs=double" static/c-ify.c:1: error: bad value (8548) for -mtune= switch On est reparti pour un tour... 0 Citer
Diaoul Posté(e) le 25 mai 2012 Posté(e) le 25 mai 2012 Non c'est pas reparti pour un tour Là c'est ton HOSTCC (gcc sur ta machine host, x86 donc) qui utilise les arguments (CFLAGS) du gcc de la toolchain (un gcc qui permet de faire des binaires utilisables sur la target : le NAS). Tu as bien mis le doigt dessus : HOSTCC ?= $(CC) HOSTCFLAGS ?= $(CFLAGS) On a corrigé le HOSTCC qui prennait le mauvais GCC mais on n'a pas corrigé les arguments qui y sont passés et qui sont spécifique à l'ARCH. ENV += HOSTCC=gcc HOSTCFLAGS=[/code] 0 Citer
Amsonia Posté(e) le 25 mai 2012 Auteur Posté(e) le 25 mai 2012 À tout hasard je remets les infos que j'ai trouvé sur le makefile de OpenWRT - https://dev.openwrt.org/browser/packages/net/darkstat/Makefile CONFIGURE_ARGS += \ --disable-debug \ --with-chroot-dir=/var/empty TARGET_CFLAGS += -std=gnu99 define Build/Compile $(HOSTCC) $(PKG_BUILD_DIR)/static/c-ify.c \ -o $(PKG_BUILD_DIR)/c-ify $(call Build/Compile/Default) endef 0 Citer
Amsonia Posté(e) le 25 mai 2012 Auteur Posté(e) le 25 mai 2012 (modifié) Non c'est pas reparti pour un tour Là c'est ton HOSTCC (gcc sur ta machine host, x86 donc) qui utilise les arguments (CFLAGS) du gcc de la toolchain (un gcc qui permet de faire des binaires utilisables sur la target : le NAS). Tu as bien mis le doigt dessus : HOSTCC ?= $(CC) HOSTCFLAGS ?= $(CFLAGS) On a corrigé le HOSTCC qui prennait le mauvais GCC mais on n'a pas corrigé les arguments qui y sont passés et qui sont spécifique à l'ARCH. ENV += HOSTCC=gcc HOSTCFLAGS=[/code] Ok tu as raison, évidemment. Ca marche pour mon PPC également. Je tente sur 'all-archs' pour voir. Ca d/l les busybox de chaque archi là... En attendant, je repasse dans pour la suite des évènements. Les modifications du .plist si je me souviens bien Modifié le 25 mai 2012 par Amsonia 0 Citer
Amsonia Posté(e) le 25 mai 2012 Auteur Posté(e) le 25 mai 2012 Voilà, tous binaires proprement générés. On passe à l'étape suivante :-D 0 Citer
bud77 Posté(e) le 25 mai 2012 Posté(e) le 25 mai 2012 Wooohooo félicitations, on va voir un nouveau SPK 0 Citer
Amsonia Posté(e) le 25 mai 2012 Auteur Posté(e) le 25 mai 2012 Wooohooo félicitations, on va voir un nouveau SPK Si j'arrive jusqu'au bout ! 0 Citer
Messages recommandés
Rejoindre la conversation
Vous pouvez publier maintenant et vous inscrire plus tard. Si vous avez un compte, connectez-vous maintenant pour publier avec votre compte.