Hi Alberto,
Please see inline ….

On Apr 8, 2015, at 1:54 AM, [email protected]<mailto:[email protected]> 
wrote:

Dear all,

I'm trying to create a new message to send with Sandesh protocol, however I 
don't know how to compile the generated code.

Just a high level overview which you might already know. The sandesh 
compiler/code generator will be present in build/bin/sandesh after you execute 
scons at the top level. The source code for same is at This is used to generate 
the python/C++ code based on the .sandesh file. The generated code - .py files 
for python and .cpp files for C++ need to be used with the pysandesh package 
for python and libsandesh for C++ in client applications to send Sandesh 
messages to the contrail collector.

Are you using C++ or python?

We intend to use this messaging for testing purposes (at the moment) by means 
of an extra application which will send Sandesh messages each second.


I have found the following explaination for the compilation with Scons:
--------
 To use Sandesh, the following needs to be added to the module SConscript:
/
 # Generate the source files
 SandeshGenFiles  = env.SandeshGenCpp('VNS.sandesh')
 SandeshGenFiles += env.SandeshGenCpp('VNSwitch.sandesh')

 # The above returns VNS_types.h, VNS_types.cpp, VNS_constants.h
 # VNS_constants.cpp, VNSwitch_types.h, VNSwitch_types.cpp,
 # VNSwitch_constants.h, VNSwitch_constants.cpp

 # To include the header files above from your module's sources
 env.Append(CPPPATH = env['TOP'])

 # Extract the .cpp files to be used as sources
 SandeshGenSrcs = env.ExtractCpp(SandeshGenFiles)

 Add SandeshGenSrcs to the module source files

 Add libsandesh, and libbase to the module libraries.
--------

However I don't really get what's going on (I'm new to Scons).

The SandeshGenCpp function/ scons builder is defined in tools/build/rules.py - 
https://github.com/Juniper/contrail-build

Below is a relevant snippet …


# SandeshGenCpp Methods
        def SandeshCppBuilder(target, source, env):
        opath = target[0].dir.path
        sname = os.path.join(opath, os.path.splitext(source[0].name)[0])

        code = subprocess.call(env['SANDESH'] + ' --gen cpp --gen html -I 
controller/src/ -I tools -out '
        + opath + " " + source[0].path, shell=True)
        if code != 0:
        raise SCons.Errors.StopError(SandeshCodeGeneratorError,
        'SandeshCpp code generation failed')
        tname = sname + "_html_template.cpp"
        hname = os.path.basename(sname + ".xml")
        cname = sname + "_html.cpp"
        if not env.Detect('xxd'):
        raise SCons.Errors.StopError(SandeshCodeGeneratorError,
        'xxd not detected on system')
        os.system("echo \"namespace {\"" + " >> " + cname)
        os.system("(cd " + opath + " ; xxd -i " + hname + " >> " + 
os.path.basename(cname) + " )")
        os.system("echo \"}\"" + " >> " + cname)
        os.system("cat " + tname + " >> " + cname)



As you can see, it runs build/bin/sandesh —gen cpp —gen html  <other options> 
<.sandesh file> to produce the .cpp, .h files which then need to be compiled in 
the client application.


I tried to copy the SConscript of the control module and adapt it but without 
results.

Can anyone help me?

Hope the above helps and please let me know if any more information is needed.

Thanks

Megh


Best Regards,
Alberto.



_______________________________________________
Dev mailing list
[email protected]<mailto:[email protected]>
http://lists.opencontrail.org/mailman/listinfo/dev_lists.opencontrail.org

_______________________________________________
Dev mailing list
[email protected]
http://lists.opencontrail.org/mailman/listinfo/dev_lists.opencontrail.org

Reply via email to