Commit 85c76c08 authored by Erwan Jahier's avatar Erwan Jahier
Browse files

lurette unstable_1_43.8 Tue, 06 Jun 2006 14:26:40 +0200 by jahier

Parent-Version:      unstable_1_43.7
Version-Log:

Implement a luc4c API so that lucky programs can be called from C.
This is meant to be used be luc2c.

nb : not yet working.
There is a seg fault when launched from the scade tck gui. Strangely,
it seems to work when run from the command-line simulation executable.

Add code to be able to parse type definitions that are coming
from the Scade tcl Gui. Thanks to that, we do not need to parse
generated C header files anymore. This change comes from a manual merge
with the main branch.

source/parse_luc.ml
   Enhance the parser error msgs.

source/gen_stubs_common.ml
   Implement a typdef parser for type definition that are coming
   from the Scade tcl Gui (this change comes from a manual merge
   with the main branch).

polka/caml/polka_lexer.mll
   Allow ident starting by _.

source/gen_fake_lucky.ml:
   add a log file for gen_fake_lucky, which is useful for debugging,
   but also for users.

source/type.mli:
source/type.ml
   When generating, C code, translate ocaml float into C double instead
   of C float.

source/gnuplot-rif.ml
   Allow true, false, True, and False as RIF data.

source/liblutin_c.c:
   This a change from Pascal :
    The interval algorithm was completely false .

source/graphUtil.ml
source/graphUtil.mli
   Add a top_sort function that performs a topological sort in a graph
   with no cycle.

source/luc2c.ml
   More work on that.

source/luc_exe.ml
source/lurette.ml
source/lucky.ml
source/util.ml
source/parse_c_scade.ml
install/configure.in
OcamlMakefile
Makefile
source/Makefile
source/luc4ocaml.ml
source/Makefile.release
   Some Trivial changes.

NEW FILES:
source/luc4c_stubs.h
source/luc4c_stubs.c
source/luc4c_caml.ml
source/luc4c.mli
source/luc4c.ml
   The luc4c API files.

examples/lucky/C/test.rif.exp
examples/lucky/C/test.res
examples/lucky/C/foo.luc
examples/lucky/C/call_foo.c
   A few non-reg tests broke because of the changes to lutin_lib.c.

examples/lucky/C/Makefile
   Some changes.

Project-Description: Lurette
parent 2d0aacef
This diff is collapsed.
Limitations de la version courante de Lurette/scade V0.1
--------------------------------------------------------
* CONFIGURATION
Il faut définir une configuration qui s'appele Lurette.
* COMPILATEUR C
Je n'ai essayé qu'avec le gcc (et le make) de MinGw ; je ne suis pas trop
sur que ca marche avec ceux de MVC++.
nb : il faut que mingw32-make.exe soit dans le path, ce qui devrait
etre le cas car il est rangé au même endroit que le gcc de MinGw.
* BUILD
Avant de pouvoir lancer Lurette, il faut faire un BUILD dans la toolbar
« simulation et code generation » de Scade. En effet, c'est ce BUILD
qui génére le Makefile qui permet de générer les binaires de simulations
(+ les headers qui sont necessaires à la génération d'environnements par
defauts (<NODE>_env.luc et <NODE>_env_UD.luc).
* ROOT NODE
Pour pouvoir utiliser Lurette, il faut spécifier un root node (ie,
ne pas utiliser le mode <selected node>).
remarque : évidemment, ce root node doit utiliser le noeud à tester
(comme pour une simulation classique), mais il doit aussi utiliser
le noeud qui sert d'oracle.
* AFFICHAGE
Le rafraichissement de l'affichage s'effectue mal. On peut le forcer en
cliquant sur le bouton le plus à droite de la toolbar lurette
(tooltip="update the display")
......@@ -16,3 +16,10 @@ gen_version:
rm -f source/version.ml
echo "let str=\"$(VERSION)\"" > source/version.ml
ci:
prcs checkin lurette.prs
make gen_version
touch:
cd test && make touch
\ No newline at end of file
......@@ -48,7 +48,6 @@ else
CAML_INSTALL_DIR=/import/linux/soft/ocaml/3.09.0/
SYNCHRONE_DIR=/usr/local/www/SYNCHRONE
SYNCHRONE_LURETTE_DIR=/usr/local/www/SYNCHRONE/lurette/
EXE := #
HOSTTYPE32=$(HOST_TYPE)
DWIN32 =
endif
......
......@@ -5,7 +5,7 @@
# For updates see:
# http://www.oefai.at/~markus/ocaml_sources
#
# $Id: OcamlMakefile 1.54 Mon, 26 Sep 2005 13:51:19 +0200 jahier $
# $Id: OcamlMakefile 1.55 Tue, 06 Jun 2006 14:26:40 +0200 jahier $
#
###########################################################################
......@@ -190,7 +190,7 @@ endif
export OCAMLYACC
ifndef CAMLIDL
CAMLIDL := camlidl.opt
CAMLIDL := camlidl
endif
export CAMLIDL
......
* Dumper un diagnostic html (dump_html_diag) qui contiendrait un résumé de ce
qui s'est passé, un gif du gnuplot, etc.
* R1: Il faudrait que je fasse une espece de wizard qui, lors de la génération
des environnements par defaut, demande aux gens entre quelles valeurs
min et max les variables à générer doivent elles evoluer.
* Aubanel: trouver des zoulies icones. Celles que j'ai pour l'instant sont
pas belles.
-> email aubanel
* LP: il faudrait que j'arrive a appeler depuis Lurette le Build de la
toolbar "code gen & simu" (sans passer par un appel system !)
-> essayer de faire un source du gen_make_l4.tcl
* R1(LP): le gen_fake_lucky devrait compiler ce dont il a besoin (le .h idoine)
-> j'ai besoin d'avoir acces au Build de scade pour ca !!! (cf ci-dessus)
* LP: Bug a l'affichage des fichiers .luc que je rajoute depuis
LuretteGUILauncher.tcl dans l'onglet Fileview. Je les vois bien
quand je relance Scade par contre.
-> reglé par Aubanel...
* LP: Bug du rafraichissement de l'affichage des messages du stdout de lurettetop.
-> demander a daniel lopes daniel.lopes@esterel-technologies.com
Aubanel pense qu'un callback pour reveiller le thread tcl existe deja.
* LP et R1: automatiser la generation des oracles, et en particulier
(1) la generation proprement dite
(2) le branchement de l'oracle sur le noeud (pour pouvoir le compiler
automatiquement)
rem : une alternative à ce branchement un peu artificiel serait de
rajouter un argument au compilateur scade pour lui dire de compiler
aussi l'oracle quand bien meme il n'est pas appelé explicitement.
En plus, (2) engendre pas mal de filasse ; faudrait pouvoir cacher les fils.
-> Aubanel sait faire (API tcl en ecriture)
qu : on pourrait aussi generer du lustre textuel direct
* le bouton "stop current run" tue tous les process lurette.exe ; faudrait
reussir à choper le bon PID... Ca n'a pas l'air facile ...
* un truc qui serait joli a propos de cette fenetre "lurette
settings", ce serait de n'afficher que les oracles et les
environnements dont l'interface est compatible avec celle du noeud
selectionné dans cette meme fenetre. On doit pouvoir gerer ca soit à
l'aide de la configuration, soit en ecrivant un petit script qui
recupere l'interface de tout ce petit monde.
-> pour ca, il me faut les types des differents noeud. cf plus haut...
* LP: faire le gen_fake_lucky à partir des infos données par scade plutot qu'en
parsant le <root_node>.h
-> ...
* R1: le mode step by step n'est pas implanté
......@@ -2,6 +2,7 @@
# run all the non-regression tests
test:
rm -f */.lurette_rc */*/.lurette_rc */*/*/.lurette_rc
cd lucky/external_code && make test;
cd lucky/other && make test ;
cd lucky/tut-examples/ && make test;
......
CC = gcc
EXE=
CFLAGS = \
-L../../lib \
-I../../include \
-Winline -Wimplicit-function-declaration
LIBS = -lluc4c_nc -llucky_nc -lgmp -lm -ldl -lstdc++
LUC2C=../../bin/luc2c
ifeq ($(HOST_TYPE),win32)
EXE=.exe
CFLAGS = \
-L../../../win32/lib -L/cygdrive/c/TEMP/MinGW/lib \
-I../../../win32/include \
-Winline -Wimplicit-function-declaration
LIBS = -lluc4c_nc -llucky_nc -lgmp -lws2_32 -lm -lstdc++
LUC2C=../../../win32/bin/luc2c$(EXE)
endif
foo.c: foo.luc
$(LUC2C) foo.luc
foo.o : foo.c
$(CC) -c $(CFLAGS) foo.c
call_foo.o: call_foo.c
$(CC) -c $(CFLAGS) call_foo.c
foo: foo.o call_foo.o
$(CC) $(CFLAGS) -o $@ $^ $(LIBS)
clean:
rm -f run *.o *~ foo foo.h foo.c *.gp *.plot *.rif
test : foo$(EXE)
ifeq ($(HOST_TYPE),win32)
foo$(EXE)
else
./foo > test.rif
rm -f test.res && diff -u -i test.rif.exp test.rif > test.res
[ ! -s test.res ] && make clean
endif
utest:
cp test.rif test.rif.exp
#include <stdlib.h>
#include <stdio.h>
#include "foo.h"
// Output procedures
void foo_O_x(foo_ctx* ctx, int v) { ctx->_x = v; };
void foo_O_y(foo_ctx* ctx, int v) { ctx->_y = v; };
void foo_O_z(foo_ctx* ctx, double v) { ctx->_z = v; };
// a little main that calls the foo.luc program
int main(){
int i = 0;
foo_ctx* ctx;
ctx = foo_new_ctx(NULL);
lucky_set_seed(1);
// setting inputs
foo_I_a(ctx, 10);
foo_I_b(ctx, 0);
foo_I_c(ctx, 20.0);
printf("#inputs \"a\":int \"b\":bool \"c\":real\n");
printf("#outputs \"x\":int \"y\":bool \"z\":real\n");
for (i=0; i<10; i++){
foo_step(ctx, step_inside);
printf("# step %d \n%d %d %f \n#outs %d %d %f\n",
i, ctx->_a, ctx->_b, ctx->_c, ctx->_x, ctx->_y, ctx->_z);
}
return 0;
}
--
inputs { a:int; b:bool; c:float }
outputs { x:int; y:bool; z:float }
states { 0:stable }
start_state { 0 }
transitions { 0 -> 0 ~cond b=>y and abs(x - a) < 5 and abs(z - c) < 5.0 }
#inputs "a":int "b":bool "c":real
#outputs "x":int "y":bool "z":real
# step 0
10 0 20.000000
#outs 8 1 22.487099
# step 1
10 0 20.000000
#outs 13 1 23.112029
# step 2
10 0 20.000000
#outs 7 0 24.131036
# step 3
10 0 20.000000
#outs 11 0 20.028104
# step 4
10 0 20.000000
#outs 9 1 22.397564
# step 5
10 0 20.000000
#outs 11 0 15.746614
# step 6
10 0 20.000000
#outs 7 1 21.404414
# step 7
10 0 20.000000
#outs 14 1 23.836677
# step 8
10 0 20.000000
#outs 9 1 18.946283
# step 9
10 0 20.000000
#outs 13 1 23.062652
set_test_length 10000
set_draw_nb 1
set_compute_volume true
set_output "onlyroll2-30.rif"
set_sut "onlyroll2.lus" "onlyroll"
set_env "env_onlyroll.luc"
set_oracle "" ""
set_step_by_step_off
set_seed_randomly
set_draw_inside 0
set_draw_edges 0
set_draw_all_vertices true
set_step_mode inside
set_draw_all_formula false
set_display_sim2chro false
set_precision 2
set_display_local_var true
set_verbose 0
set_show_step true
set_sut_compiler "verimag"
set_oracle_compiler "verimag"
set_extra_cfiles ""
set_extra_libs ""
set_extra_libdirs ""
set_extra_includedirs ""
set_c_generator_flag ""
set_preprocessor "lucky_cpp"
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
set_test_length 20000
set_draw_nb 1
set_compute_volume false
set_output "Data/sut_sildex-env-20000-3.rif"
set_sut "sut_sildex.c" "sut_sildex"
set_env "env.luc"
set_oracle "oracle_sildex.c" "oracle_sildex"
set_step_by_step_off
set_seed_randomly
set_draw_inside 10
set_draw_edges 0
set_draw_all_vertices true
set_step_mode inside
set_draw_all_formula false
set_display_sim2chro false
set_precision 2
set_display_local_var true
set_verbose 0
set_show_step true
set_sut_compiler "sildex"
set_oracle_compiler "sildex"
set_extra_cfiles ""
set_extra_libs ""
set_extra_libdirs ""
set_extra_includedirs ""
set_c_generator_flag ""
# seed = 1015403953
#program "lurette chronogram ( /home/jahier/lurette/examples/xlurette/heater/temp_int.luc) "
#program "lurette chronogram ( /home/jahier/lws1/examples/xlurette/heater/temp_int.luc) "
#@inputs
"U":int
@#
......@@ -26,4 +26,4 @@
14 #outs T
#step 10
11 #outs T
The execution lasted 2.47 seconds.
The execution lasted 1.17 second.
# seed = 1
#program "lurette chronogram ( /net/joly/local/jahier/WS1/examples/xlurette/heater/temp_int.luc) "
#program "lurette chronogram ( /home/jahier/lws1/examples/xlurette/heater/temp_int.luc) "
#@inputs
"U":int
@#
......@@ -100,4 +100,4 @@
#step 30
10 #outs T
#locs -1 F
The execution lasted 0.03 second.
The execution lasted 0.04 second.
# seed = 1
#program "lurette chronogram ( /net/joly/local/jahier/WS1/examples/xlurette/heater/temp_float.luc) "
#program "lurette chronogram ( /home/jahier/lws1/examples/xlurette/heater/temp_float.luc) "
#@inputs
"U":real
@#
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment