<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40"><head><meta http-equiv=Content-Type content="text/html; charset=utf-8"><meta name=Generator content="Microsoft Word 15 (filtered medium)"><style><!--
/* Font Definitions */
@font-face
        {font-family:"Cambria Math";
        panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0in;
        margin-bottom:.0001pt;
        font-size:11.0pt;
        font-family:"Calibri",sans-serif;}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:blue;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {mso-style-priority:99;
        color:purple;
        text-decoration:underline;}
p.msonormal0, li.msonormal0, div.msonormal0
        {mso-style-name:msonormal;
        mso-margin-top-alt:auto;
        margin-right:0in;
        mso-margin-bottom-alt:auto;
        margin-left:0in;
        font-size:11.0pt;
        font-family:"Calibri",sans-serif;}
span.EmailStyle18
        {mso-style-type:personal-reply;
        font-family:"Calibri",sans-serif;
        color:windowtext;}
.MsoChpDefault
        {mso-style-type:export-only;
        font-family:"Calibri",sans-serif;}
@page WordSection1
        {size:8.5in 11.0in;
        margin:1.0in 1.0in 1.0in 1.0in;}
div.WordSection1
        {page:WordSection1;}
--></style><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext="edit">
<o:idmap v:ext="edit" data="1" />
</o:shapelayout></xml><![endif]--></head><body lang=EN-US link=blue vlink=purple><div class=WordSection1><p class=MsoNormal>Got it.  At the June 2018 P4 Workshop, in the Mellanox P4 to SAI demo, I asked where is the SAI API generated from in p4c?  I thought I heard, “by the midend”.   Since SAI is also independent of any asic, SAI API generation should also be invoked after the frontend.  Maybe, someone from Mellanox can confirm since I don’t see details in their slide nor the abstract.  I would like to what, if SAI API generation is done after the frontend processing, before any midend processing is run?<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Thanks,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Hemant<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><b>From:</b> Antonin Bas <antonin@barefootnetworks.com> <br><b>Sent:</b> Monday, September 10, 2018 10:09 AM<br><b>To:</b> hemant@mnkcg.com<br><b>Cc:</b> p4-dev <p4-dev@lists.p4.org><br><b>Subject:</b> Re: [P4-dev] control-plane API generation<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><div><div><p class=MsoNormal>This is a hard rule as far as I'm concerned. We actually worked hard to ensure that API generation happens right after the frontend and does not depend on the backend (or the midend passes that this backend chooses to use). The generated P4Info message should be exactly the same independently of which backend you are using.<o:p></o:p></p><div><p class=MsoNormal>What we can do though is invoke midend passes independently of the backend in the P4Info generation code (<a href="https://github.com/p4lang/p4c/blob/master/control-plane/p4RuntimeSerializer.cpp#L1328" target="_blank">https://github.com/p4lang/p4c/blob/master/control-plane/p4RuntimeSerializer.cpp#L1328</a>). I believe that usually it is best avoided: you want the P4Info message / the runtime APIs to match exactly the contents of the P4 program.<o:p></o:p></p></div></div></div><div><p class=MsoNormal><o:p> </o:p></p><div><p class=MsoNormal>On Wed, Sep 5, 2018 at 1:33 PM, <<a href="mailto:hemant@mnkcg.com" target="_blank">hemant@mnkcg.com</a>> wrote:<o:p></o:p></p><blockquote style='border:none;border-left:solid #CCCCCC 1.0pt;padding:0in 0in 0in 6.0pt;margin-left:4.8pt;margin-right:0in'><div><div><p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto'><span style='font-size:12.0pt'>In the bmv2 backend, I see that P4Runtime/control-plane API generation is called in p4c/backends/bmv2/simple_switch/main.cpp after frontend.run().   Is this a hard rule or can one move the API generation, for example, to be after midend.process()?   </span><o:p></o:p></p><p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto'><span style='font-size:12.0pt'> </span><o:p></o:p></p><p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto'><span style='font-size:12.0pt'>Thanks in advance.</span><o:p></o:p></p><p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto'><span style='font-size:12.0pt'> </span><o:p></o:p></p><p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto'><span style='font-size:12.0pt'>Hemant</span><o:p></o:p></p><p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto'> <o:p></o:p></p><p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto'>MNK Consulting<o:p></o:p></p><p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto'><a href="http://mnkcg.com/" target="_blank">http://mnkcg.com</a><o:p></o:p></p><p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto'> <o:p></o:p></p></div></div><p class=MsoNormal style='margin-bottom:12.0pt'><br>_______________________________________________<br>P4-dev mailing list<br><a href="mailto:P4-dev@lists.p4.org">P4-dev@lists.p4.org</a><br><a href="http://lists.p4.org/mailman/listinfo/p4-dev_lists.p4.org" target="_blank">http://lists.p4.org/mailman/listinfo/p4-dev_lists.p4.org</a><o:p></o:p></p></blockquote></div><p class=MsoNormal><br><br clear=all><o:p></o:p></p><div><p class=MsoNormal><o:p> </o:p></p></div><p class=MsoNormal>-- <o:p></o:p></p><div><div><p class=MsoNormal>Antonin<o:p></o:p></p></div></div></div></div></body></html>