SynDEx Frequently Asked Questions


Is SynDEx free?

SynDEx is not (yet) a free software in the sense of the Free Software Foundation, as all sources are not distributed. However, SynDEx is freely available for non-commercial use. You may download and use it, provided that you agree with the COPYRIGHT.


TCL_init or TK_init failed : can't find a usable init.tcl

This error message means that the SynDEx binary executable cannot find the Tcl/Tk initialization script, which is expected to be found in a directory given in the TCL_LIBRARY environment variable.

This mostly happens when you try to start SynDEx by executing directly its binary executable located in the syndex/bin directory, and the TCL_LIBRARY or TK_LIBRARY environment variable is not set.

Start SynDEx as recommended in the README file, by executing the syndex shell-script, which sets all the required environment variables before executing the SynDEx binary executable.


Where can I find publications about AAA/SynDEx?

We recommend to read first these 4 articles. There is also a complete list of our publications, in reverse chronological order.


Where can I find a documentation about SynDEx?

The web documentation is the main repository for all SynDEx documentations and available sources.

SynDEx also includes a (limited) on-line documentation in its Tcl/Tk interface (look at the Help menu in the menu bar of the SynDEx window).


Where can I find documentations for m4, gcc, make...?

Online documentation for m4, make, and other GNU utilities, may be found at GNU web server


Why is chronometric logging presently limited to monoprocessor architectures?

When the Chrono option is checked (menu Code), SynDEx generates macro-executives intended to support chronometric logging at runtime, stored in the local memory of each processor (macros Chrono_), and chronometric logs collection during the finalization phase of the application, from all processors up to the "root" processor's mass memory (macros saveFrom_ and saveUpto_).

The Chrono_ macro is defined in the C.m4x executive kernel, which is dedicated to C-programmed architectures. The Chrono_ macro generates calls to the Unix "gettimeofday" system function, but this may be easily changed by the user redefining the macro Chrono_GetTime_ (see comments in the "Chronometric logging" section in C.m4x).

The saveFrom_ and saveUpto_ macros, which should be defined in TCP.m4x, have not yet been developped. Therefore chronometric logs cannot be collected in an architecture with more than one processor.


I am a beginner CyCab user: how do I start?

  1. Read the article cesa98; although it is about the "old" (first prototype) CyCab, and about the "old" (version 4) SynDEx, it gives a good overall introduction.
  2. Have a look at the AAA/SynDEx front page.
  3. Read the 3 first chapters of "execv4".
  4. Read the aaaAEE slides.
  5. Download and install SynDEx.
  6. Download and install the MPC555 cross-compiler.
    It is already installed on AFS machines at INRIA (only on PC/Linux machines for now, but it may be installed on SUN/Solaris and DEC/Alpha machines if needed); to use it, add to your path the directory /usr/local/src/users/lavarenn/mpc555/@sys/bin (if the command "echo $shell" returns "/bin/tcsh", add to your "~/.login" file the line "set path = ($path /usr/local/src/users/lavarenn/mpc555/@sys/bin)"; if you use another shell, you should know how to do that for your shell). The MPC555 cross-compiler executables are all prefixed with "ppc-elf32-" (for example, "ppc-elf32-gcc" is the executable name of gcc). The man files are provided.
    If your machine is not under AFS, you must download from www.redhat.com the sources of the "GNUPro Toolchain", read carefully its documentation, and configure with the options "--target=ppc-elf32 --with-newlib" before compiling; decide yourself where you want to install the cross-compiler (option "--prefix=somePath").
  7. Read the README file, which recommends a reading order of other files in the SynDEx distribution, to guide you gradually in writing your application "operations"; copy the examples in your home directory, and test them: do it!
  8. Create your own application by copying and modifying the "CyCab" example application (soon available in the cycab directory). Save your modified application as "myappli" for example (menu File/SaveAs); hereunder, substitute each reference to "myappli" by your own application name.
    Generate your application executive (menu Adequation/Genexec), to get four files: "myappli.m4", "root.m4", "f555.m4", and "r555.m4". Rename the file "cycab.m4x" to "myappli.m4x", and inside it substitute in the macro-definitions "f555_ProcID_" and "r555_ProcID_" the processor identifiers specific to your CyCab (these identifiers are given by Robosoft).
  9. Write your application specific "operations", for example in C: they MUST NOT access global variables, they may only compute their output arguments (functional result or passed by reference) from their input arguments (passed by value or by reference). In your "myappli.m4x" application specific file, write a macro for each application specific "operation" of your own; if you have followed carefully step 4 above, it is an easy task.
  10. In the GNUmakefile file (copied from the CyCab example), change the line "A=cycab" by "A=myappli", and read carefully the comments explaining how to separately compile and link the source files coding your application specific "operations".
  11. Everything is now ready for the "make" command to automatically:
    1. translate "myappli.m4" into the makefile "myappli.mk"
    2. compile separately the source file(s) of your application specific operations
    3. translate "root.m4" into "root.s", compile it into "root.386", and link it into "root", the PC executable part of your application
    4. translate "f555.m4" into "f555.s", compile it into "f555.555", link it into "f555.elf" (and generate the link-map "f555.elf.map"), convert it into "f555" in the SynDEx loader format
    5. as above, substituting "f555" by "r555"
    6. load and execute your distributed application with the command "./root f555 r555"


Is there a SynDEx tutorial for beginners?

The SynDEx tutorial is available here


Last update: 2009/08/07