autotools

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentes Révision précédente
Prochaine révision
Révision précédente
autotools [2021/05/14 19:40] – full writing phswautotools [2023/04/11 11:06] (Version actuelle) – Add --with-foo phsw
Ligne 34: Ligne 34:
  
 AC_PROG_CC # cherche un compilateur C AC_PROG_CC # cherche un compilateur C
 +AM_PROG_CC_C_O # enable per-target flags, required for automake < 1.14
  
 AC_CONFIG_FILES([Makefile src/Makefile]) # liste des fichiers Makefile à traiter AC_CONFIG_FILES([Makefile src/Makefile]) # liste des fichiers Makefile à traiter
Ligne 62: Ligne 63:
  
 Placer le fichier source de la macro dans un dossier ''m4'' à la racine du projet, et ajouter le paramètre ''-I m4'' à la commande ''autoreconf''. Placer le fichier source de la macro dans un dossier ''m4'' à la racine du projet, et ajouter le paramètre ''-I m4'' à la commande ''autoreconf''.
 +
 +A priori il faut aussi placer
 +<code autoconf>
 +m4_include([m4/m4_ax_gcc_x86_cpu_supports.m4])
 +</code>
 +en haut du configure (sinon ''./config.status --recheck'' peut planter).
 +
 +Une autre solution semble être:
 +<code autoconf>
 +AC_CONFIG_MACRO_DIR([m4])
 +</code>
 +dans le configure ([[https://autotools.io/autoconf/macros.html|source]]).
  
  
Ligne 101: Ligne 114:
  
 <code autoconf> <code autoconf>
 +have_mpi=no
 AC_PATH_PROG(mpicc_path, mpicc, [no]) AC_PATH_PROG(mpicc_path, mpicc, [no])
 +AM_CONDITIONAL([HAVE_MPI], [test x$mpicc_path != xno])
 +if test x$mpicc_path != xno; then
 +    CC=$mpicc_path
 +    have_mpi=yes
 +fi
 </code> </code>
 Paramètres: Paramètres:
   - Variable qui contiendra le chemin du programme   - Variable qui contiendra le chemin du programme
   - Programme à chercher   - Programme à chercher
-  - Optionnel: valeur par défaut si le programme n'est pas trouvé+  - Optionnel: valeur par défaut si le programme n'est pas trouvé. Par défaut, renvoie une chaîne de caractères vide si le programme n'est pas trouvé.
   - Il est aussi possible de préciser le ''PATH''   - Il est aussi possible de préciser le ''PATH''
  
  
-==== Changer le compilateur ====+==== Compilateur ==== 
 + 
 + 
 +=== Changer le compilateur ===
  
 Il suffit de définir la variable ''CC'' avant de faire appel à ''AC_PROG_CC'' Il suffit de définir la variable ''CC'' avant de faire appel à ''AC_PROG_CC''
  
  
 +=== CFLAGS ===
 +
 +Des CFLAGS sont positionnés par défaut dès que l'on fait un test qui implique un compilateur. Il faut donc définir les CFLAGS au début du configure.
 +
 +L'utilisateur peut ajouter des CFLAGS en lançant:
 +<code bash>
 +./configure CFLAGS="-foo"
 +</code>
 +Il faut donc aussi le récupérer dans le configure:
 +<code autoconf>
 +CFLAGS="$CFLAGS -O0 -g"
 +</code>
 ==== Chercher une bibliothèque ==== ==== Chercher une bibliothèque ====
  
Ligne 138: Ligne 172:
 endif endif
 </code> </code>
 +
 +Il est possible de définir les flags pour toutes les cibles, en mettant en haut d'un ''Makefile.am'' :
 +<code make>
 +LDADD = $(HWLOC_LIBS)
 +AM_CFLAGS = $(HWLOC_CFLAGS)
 +</code>
 +
 +Il est possible de chercher une bibliothèque et utiliser les flags requis, depuis le fichier ''configure.ac'' ([[https://autotools.info/autoconf/finding.html|source]]) :
 +<code autoconf>
 +AC_SEARCH_LIBS([hwloc_free],[hwloc],,AC_MSG_ERROR([hwloc library unavailable]))
 +</code>
 +
 +
 +
 +==== Chercher une fonction dans une bibliothèque ====
 +
 +Il est nécessaire de mettre à jour les flags pour que le compilateur puisse linker la bibliothèque où la fonction est supposée être:
 +<code autoconf>
 +PKG_CHECK_MODULES([STARPU], [starpumpi-1.3], [have_starpu=yes], [have_starpu=no])
 +AM_CONDITIONAL(HAVE_STARPU, test x$have_starpu = xyes)
 +if test x$have_starpu = xyes; then
 +    save_LIBS="$LIBS"
 +    save_CFLAGS="$CFLAGS"
 +    CFLAGS="$CFLAGS $STARPU_CFLAGS"
 +    LIBS="$LIBS $STARPU_LIBS"
 +    AC_CHECK_FUNCS([starpu_free_noflag])
 +    CFLAGS="$save_CFLAGS"
 +    LIBS="$save_LIBS"
 +fi
 +</code>
 +Cela va définir une constante de préprocesseur ''HAVE_STARPU_FREE_NOFLAG'' si la fonction est trouvée.
 +
 +Il est possible de chercher des fonctions en précisant dans quel fichier d'en-tête chercher:
 +<code autoconf>
 +AC_CHECK_DECLS([_mm_stream_si32], [], [], [[#include <x86intrin.h>]])
 +</code>
 +Cela va définir une constante de préprocesseur ''HAVE_DECL__MM_STREAM_SI32''.
  
  
Ligne 193: Ligne 264:
     foo     foo
 ]) ])
 +</code>
 +
 +
 +
 +==== Enable option ====
 +
 +  * [[https://www.gnu.org/software/autoconf/manual/autoconf-2.69/html_node/Package-Options.html]]
 +
 +<code autoconf>
 +AC_MSG_CHECKING(whether debug mode should be enabled)
 +AC_ARG_ENABLE(debug, [AS_HELP_STRING([--enable-debug], [enable debug mode])],
 +                        enable_debug=$enableval, enable_debug=no)
 +AC_MSG_RESULT($enable_debug)
 +
 +if test x$enable_debug = xyes; then
 +    CFLAGS="$CFLAGS -O0 -g"
 +else
 +    CFLAGS="$CFLAGS -O3"
 +fi
 +</code>
 +
 +On peut ensuite appeler:
 +<code bash>
 +../configure --enable-debug
 +</code>
 +
 +
 +
 +==== Composants externes ====
 +
 +<code autoconf>
 +mpicc_name=mpicc
 +AC_ARG_WITH(mpicc, [AS_HELP_STRING([--with-mpicc=<mpicc name>], [Name of the MPI compiler])],[mpicc_name=$withval])
 </code> </code>
  
  • autotools.1621014026.txt.gz
  • Dernière modification : 2021/05/14 19:40
  • de phsw