How Can I automate choices in a Calibre xRC flow ?

Version 4

    Automating choices in a PEX flow can be accomplished through several means.

    One method is to put placeholders in the ruledeck that you adjust through a set of values

    across several PEX runs using a scripting language of your choice, e.g. csh, bash, tcl, perl, etc.

    Another method of running a PEX flow across several cells in an automated manner is by using the

    unix "sed" command to change a placeholder cellname in the rules for the desired primary cell name.

      sed "s/placeholder_layout_primary_cellname/target_cellname_1/g"  rules.reference > rules.temp1

      sed "s/placeholder_source_primary_cellname/target_cellname_1/g"  rules.temp1 > rules

    In the rules.reference file:

        LAYOUT PRIMARY "placeholder_layout_primary_cellname"  .  .  . 
        SOURCE PRIMARY "placeholder_source_primary_cellname"  .  .  . 

    Another method of controlling a PEX flow through a set of several choice is by using a combination

    of environment variables and rulefile pre-processor directive IFDEFs to influence the desired rulefile settings.

    If you run the extraction flow directly from a c-shell, you
    could set an environment variable using arguments to the run script

        setenv $1 $2

    This environment variable can be used to control several
    choices of EXCLUDE statements in the rules file

    Your run script could look like this:

    #!/bin/csh -f



    setenv MGC_HOME <path-to-calibre-product-tree>
    setenv PATH $MGC_HOME/bin:$PATH

    # clear the svdb and log files
    /bin/rm -rf *svd* *SVD* *log

    setenv $1 $2

    calibre -xrc -phdb                 xrc.rule >&! phdb.log
    calibre -xrc -pdb -rcc -select xrc.rule >&! pdb.log
    calibre -xrc -fmt -all              xrc.rule >&! fmt.log

    where you could invoke the run script with:

          run_xrc ISET 1
    or   run_xrc ISET 2
    or   run_xrc ISET 3

    Since the IFDEF constructs have the form:
    (from chapter 1 of the SVRF manual available at
      $MGC_HOME/shared/pdfdocs/svrf_ur.pdf  )

        Conditionals have the following form:

        { #IFDEF name [value] rule_file_text |
          #IFNDEF name [value] rule_file_text }
            [ #ELSE rule_file_text ]

        where name is a replaceable string that is defined
        with the #DEFINE directive, or implicitly defined
        from the shell environment. The value is an optional
        string that appears in a #DEFINE directive, or it is
        the value that name is assigned in the shell environment.
        #IFDEF (acronym for ?if defined?) and #IFNDEF (?if not defined?)
        test whether or not a name is defined, and do the
        opposite of the other. #ELSE statements are executed
        if the preceding #IFDEF or #IFNDEF
        conditionals evaluate to ?false?.

    Your rule file could have sections like this:

        #IFDEF $ISET 1

            // Include set 1
            PEX EXTRACT INCLUDE  net100 net101 ...


        #IFDEF $ISET 2

            // Include set 2
            PEX EXTRACT INCLUDE  net200 net201 ...


        #IFDEF $ISET 3

            // Include set 3
            PEX EXTRACT INCLUDE  net300 net301 ...


    And you don't have to work this through runscript arguments...

    You could query the user for a response instead of
    working this through the runscript arguments:

    You could use some user choice code like this
    to set an environment variable to a chosen value

    This block of code is switched into play by the
    environment variable called RUNTYPE set to "pex"

    if(($RUNTYPE == "pex") || ($RUNTYPE == "PEX")) then
       echo " "
       echo "Which set of nets do you want to exclude? "
       echo " "
       echo "     if set A then enter: A"
       echo "     if set B then enter: B"
       echo " "
       echo " Your entry: "
       set mychosenset = $<
       switch ($mychosenset)
          case a:
          case A:
                  setenv ISET A

          case b:
          case B:
                  setenv ISET B


    And the rulefile would need IFDEF sections defined
    similar to those mentioned above.