Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Bug dans les liens avec cmake #4

Open
Jordan08 opened this issue Jan 14, 2021 · 16 comments
Open

Bug dans les liens avec cmake #4

Jordan08 opened this issue Jan 14, 2021 · 16 comments

Comments

@Jordan08
Copy link
Member

` bash: cmake .. -DCMAKE_INSTALL_PREFIX=../../OUT3 -DCMAKE_PREFIX_PATH=/home/XXXXX/IBEX/GIT_IBEX/OUT3/ -DASL_DIR='/home/XXXXX/IBEX/GIT_ASL/OUT/'
-- The CXX compiler identification is GNU 9.3.0
-- Check for working CXX compiler: /usr/bin/c++
-- Check for working CXX compiler: /usr/bin/c++ -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Found Ibex version 2.8.9.1
-- Running on system Linux-5.8.0-36-generic with processor x86_64
-- Using CMake 3.16.3
-- C++ compiler: GNU 9.3.0
-- Will build static libraries
-- Setting build type to 'Release' as none was specified.
-- Ibex was compiled with interval library Filib 3.0.2.2
-- Ibex was compiled without any Linear Programming library
-- Looking for asl/asl.h
-- Looking for asl/asl.h -- found at /home/XXXXX/IBEX/GIT_ASL/OUT/include
-- Looking for asl
-- Looking for asl -- found at /home/XXXXX/IBEX/GIT_ASL/OUT/lib/libasl.a
-- Could NOT find CppUnit (missing: CPPUNIT_LIBRARY CPPUNIT_INC_DIR)
-- Will not run tests, required cppunit library was not found
-- Configuring done
-- Generating done
-- Build files have been written to: /home/XXXXX/IBEX/GIT_AMPL/ibex-ampl/build

bash:~/XXXXX/IBEX/GIT_AMPL/ibex-ampl/build$ make
Scanning dependencies of target ibex-ampl
[ 25%] Building CXX object src/CMakeFiles/ibex-ampl.dir/system/ibex_AmplInterface.cpp.o
/home/XXXXX/IBEX/GIT_AMPL/ibex-ampl/src/system/ibex_AmplInterface.cpp:18:10: fatal error: asl/asl.h: Aucun fichier ou dossier de ce type
18 | #include "asl/asl.h"
| ^~~~~~~~~~~
compilation terminated.
make[2]: *** [src/CMakeFiles/ibex-ampl.dir/build.make:63 : src/CMakeFiles/ibex-ampl.dir/system/ibex_AmplInterface.cpp.o] Erreur 1
make[1]: *** [CMakeFiles/Makefile2:966 : src/CMakeFiles/ibex-ampl.dir/all] Erreur 2
make: *** [Makefile:141 : all] Erreur 2`

@Jordan08
Copy link
Member Author

Je vois que j'ai récupérer des truc de la branch master et pas de celle develop, nottamment tous le contenu des dossiers cmake.utils et cmake.install
Je suis ouvert à toute aide et à tout ménage
Merci d'avance

@Jordan08
Copy link
Member Author

ça y est ça marche mieux
Mais la compilation de ibexopt-ampl bug toujours
Je comprends pas comment faire les liens.

J'ai mis a jour ASL car il y avec des oubli dans la version du depot grace à lui:
ampl/asl#4

Normalement, pour trouver ASL, il suffit de faire ça:
find_package(ampl-asl CONFIG)
target_link_libraries(main PRIVATE ampl-asl)

mais ma compétence en cmake s'arrete là......

@cyrilbouvier
Copy link
Contributor

Je regarderai les scripts CMake quand j'aurais le temps. Quelques questions:

  • quelles bibliothèques il y a besoin pour compiler ? asl ? amplsolvers ? dlfcn ?
  • il y a actuellement 3 versions pour ibexopt (une dans ibex-lib, une dans ibex-optim-extras et une dans ibex-ampl), est-ce qu'il y a besoin de compiler le binaire dans ampl ou est-ce qu'on peut utiliser le même que dans optim-extras ?

@gchabert
Copy link

il y a actuellement 3 versions pour ibexopt (une dans ibex-lib, une dans ibex-optim-extras et une dans ibex-ampl), est-ce qu'il y a besoin de compiler le binaire dans ampl ou est-ce qu'on peut utiliser le même que dans optim-extras ?

Je propose la chose suivante: il faudrait en fait qu'il n'y ait qu'un seul exécutable dans le package ibex-ampl, que j'appellerais bien ibex-ampl2mbx, et qui se contenterait de traduire un fichier AMPL en Minibex. Jordan, pour l'export en Minibex, c'est très simple il suffit d'utiliser la fonction System::minibex(bool) (en mettant le paramètre à false par précaution).

De cette façon une personne installant ibex-ampl pourrait utiliser ibex-opt avec n'importe quel fichier AMPL au prix d'une petite commande supplémentaire. Ca évite de multiplier les versions d'ibexopt inutilement.

@cyrilbouvier
Copy link
Contributor

Autres questions:

  • est-ce qu'il faut utiliser asl ou asl2 ?
  • où est définie la fonction add_goal (utilisé lignes 439 et 441 du fichier ibex_AmplInterface.cpp) ?

@Jordan08
Copy link
Member Author

Jordan08 commented Jan 15, 2021

Salut,

Je n'avais pas vu qu'il y avait une autre version dans ibex-optim-extra.

@gchabert Le problème s'est que AMPL demande un unique executable pour pouvoir utiliser ibexopt dans AMPL ou sur NEOS.
Il demande que l'on puisse faire ça:
ibexopt -AMPL exemple.nl

Dans ce depot, j'ai copié le code ibexopt.cpp pour faire ibexopt-ampl.cpp
J'y ai rajouté l'interface AMPL pour faire ceci:
ibexopt-ampl -AMPL exemple.nl

Personnellement je n'aime pas ce nom ibexopt-ampl mais c'est un detail. Le problème s'est que dans AMPL le nom de l'exécutable est le nom de l'optimiseur.... a voir donc...

Pour compiler ibex-ampl, il faut la libraire ASL et la librairie dl.

  • ASL est disponible ici: https://github.com/ampl/asl
    mais il faut prendre en compte la correction de bug proposé ici: Remove BUILD_DYNRT_LIBS, install missing headers and export cmake targets ampl/asl#4
    Il y a longtemps j'ai récupérer la version de ASL qui est disponible sur Netlib et j'ai modifié les makefile pour faire amplsolvers.zip pour que ça marche avec le waf.
    Dans ASL, il faut prendre asl. ( j'ai jamais essayé asl2)

  • Pour la librairie dl, elle n'est pas disponible sur windows me semble-t-il. D'ou son installation avec l'archive dlfcn-win32-master.tar.gz
    Je pense que j'ai pas encore mis le link avec cette librairie dans le CMakeList

  • J'ai modifié un peu SystemFactory (avec le add_goal modifié nottamment). @gchabert a accepté le pull dans la branch develop de ibex-lib ce matin même. Donc il faut la toute dernier version de la branch develop pour que ça marche.

encore merci

@Jordan08
Copy link
Member Author

Jordan08 commented Jan 15, 2021

L'avantage de cette solution qu'une fois que ibexopt-ampl est compilé. On a plus besion des .nl
On copie l'executable dans un sous dossier de AMPL et c'est tout.

Il sufffit de faire son model AMPL dans le logiciel AMPL, c'est-à-dire on écrit le fichier "exemple.mod"
A la fin on met ces options:
option solver ibexopt-ampl; solve;

et le résultat s'affiche dans AMPL.
Pas besoin, de faire le fichier nl puis d'utiliser ibex-ampl pour faire le minibex, puis de lancer ibexopt....

@cyrilbouvier
Copy link
Contributor

Est-ce que la bibliothèque ibex-ampl est destinée à être installée ? Ou elle est seulement utilisée pour construire ibexopt-ampl ?

@gchabert
Copy link

La bibliothèque sert aussi pour ibex-optim-extra

@gchabert
Copy link

Sinon, je comprends ce que tu dis Jordan pour l'exécutable.
Mon avis du coup: si vous parvenez à une compilation propre via cmake du package ibex-ampl, on peut alors envisager de mettre ça dans le noyau et de n'avoir qu'un seul exécutable ibexopt. Cyril, dis-moi ce que tu en penses; au départ j'avais préféré séparer AMPL du noyau pour simplifier les scripts d'ibex-lib.

@cyrilbouvier
Copy link
Contributor

J'ai commité une première version de la détection et de l'installation automatique de la lib ASL.
L'installation automatique ne marche pas encore, mais en installation ASL moi meme, j'arrive à tous compiler (d'ailleurs le test TestAmpl ne passe pas).

@cyrilbouvier
Copy link
Contributor

Mon avis du coup: si vous parvenez à une compilation propre via cmake du package ibex-ampl, on peut alors envisager de mettre ça dans le noyau et de n'avoir qu'un seul exécutable ibexopt. Cyril, dis-moi ce que tu en penses; au départ j'avais préféré séparer AMPL du noyau pour simplifier les scripts d'ibex-lib.

Les scripts CMake de ibex-ampl ne devraient pas être très compliqué.
Les incovénients de mettre ibex-ampl dans le noyau est que ça rajouter une option et une dépendence vers une bibliothèque externe. L'avantage est que ça évrite d'avoir trois versions de l'optmizer qui traine dans des répos séparées et qui vont finir, au bout d'un moment, par diverger ce qui peut devenir un vrai casse tête.

@gchabert
Copy link

Les incovénients de mettre ibex-ampl dans le noyau est que ça rajouter une option et une dépendence vers une bibliothèque externe.

Si on intègre ibex-ampldans le noyau, je propose qu'il n'y ait pas d'option et que le code correspondant soit systématiquement compilé. Ce qui veut dire que la dépendance sera aussi systématique.

L'idéal serait peut-être de garder un package séparé et que l'exécutable du package ibex-ampl soit juste un script qui fait un appel à ibex-ampl2mbx suivit d'un appel à ibex-opt. Jordan qu'en penses-tu?

@Jordan08
Copy link
Member Author

Je pense qu'une intégration dans le noyau serait le plus simple à l'utilisation.
Si ill y a trop de ibexopt différent tout le monde va se perdre...
Je pense que si l'on veut que ibexopt soit le plus simple à utiliser, ça serait une bonne plus value qu'il puisse prendre du MinIbex et du AMPL.
En plus je ne suis pas très fan du script pour faire la conversion .nl en minibex puis lancer ibexopt. Il va y avoir des problèmes à l'utilisation.

Normalement j'ai codé l'interface pour qu'il n'y ait pas besoin des fichiers .h de ASL, il suffit juste d'ajouter " -lasl -ldl "
Les chemins des include de ASL ne sont donc pas à intégrer à ceux d'ibex (pas comme filib ou gaol)
ça va donc pas faire grossir beaucoup les commandes dans le pkgconf de ibex.pc

Par contre, faut vraiment que l'install de ASL marche nickel partout
J'ai vu que l'option -DASL_DIR= ne marche plus et il me semble qu'il y a encore des oublis dans le CMakeLists.txt de ASL
D'ailleurs est-ce que l'on vire " asl2 " de l'archive, vu que l'on en pas besoin?

@gchabert
Copy link

Effectivement un script posera des problèmes sous Windows.

Ce qui m'embête c'est le côté visiblement assez artisanal d'ASL vu les problèmes que tu décris. Et rajouter une dépendance est toujours lourd en terme de maintenance. Surtout que là, ne s'agissant pas d'un paquet standard, j'imagine qu'il est plus difficile de contrôler la version qui est installée pour assurer la compatibilité.

Mais bon, je comprends bien l'intérêt...

D'ailleurs est-ce que l'on vire " asl2 " de l'archive, vu que l'on en pas besoin?

Je suis pour que l'on vire tout ce dont on n'a pas besoin :D

@Jordan08
Copy link
Member Author

Le code de la librairie ASL est stable et bien mis à jour sur Netlib: https://ampl.com/dl/ampl.updates.html
Il est utilisé par tous les solvers qui utilisent AMPL: Couenne, Bonmin, cplex,....

Par contre l'installateur cmake est pas super. Je l'ai récupéré d'un dépot mais ça n'a pas l'air maintenu.

Le seul truc maintenu est le "configure"
Le problème du configure est que précédement j'avais été obligé de modifier le makefile.u , notamment pour modifier le nom de la librairie amplsolver.a en libamplsolver.a
et oui dans le configure la nom de la librairie n'est pas le même....
En gros l'installation de ASL n'est pas userfriendly.

Pour simplifier tout ça, je propose d'installer toujours notre ASL avec l'archive asl.tar.gz que je viens de mettre à jours. Comme ça, on peut controler que tout se passe bien avec les bon nom de librairie et les bons liens.

voici le copyright des fichiers de ASL:

/*******************************************************************
Copyright (C) 2016, 2020 AMPL Optimization, Inc.; written by David M. Gay.
Permission to use, copy, modify, and distribute this software and its
documentation for any purpose and without fee is hereby granted,
provided that the above copyright notice appear in all copies and that
both that the copyright notice and this permission notice and warranty
disclaimer appear in supporting documentation.
The author and AMPL Optimization, Inc. disclaim all warranties with
regard to this software, including all implied warranties of
merchantability and fitness. In no event shall the author be liable
for any special, indirect or consequential damages or any damages
whatsoever resulting from loss of use, data or profits, whether in an
action of contract, negligence or other tortious action, arising out
of or in connection with the use or performance of this software.
*******************************************************************/

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants