Uploaded image for project: 'Qbs ("Cubes")'
  1. Qbs ("Cubes")
  2. QBS-1527

make multiplexing operate at a finer granularity



    • Type: Suggestion
    • Status: Reported
    • Priority: Not Evaluated
    • Resolution: Unresolved
    • Affects Version/s: None
    • Fix Version/s: None
    • Labels:


      currently, the multiplexing implementation uses a very coarse multi-pass structure operating at the product level, with a pass for every "cell" (variant) of the multiplexing matrix, and an optional aggregation pass. a completely separate evaluation context is set up for each pass, which requires it to happen very early, thus considerably constraining the possibilities, e.g., the multiplexable properties need to be defined in the qbs module, and skipping passes based on absence of dependencies is not possible.

      to address these issues, multiplexing needs to operate at a much finer granularity, within a single evaluation context. specifically, at the expression level, whenever the evaluator accesses a property which is multiplexed, the result would be also automatically multiplexed (i.e., the expression is evaluated for each value of the property); this may happen over multiple axes in a single expression.

      dependency variants which can be selected based upon multiplexed properties must also be multiplexed; this is closely related to QBS-995.

      this feature is an enabler for other features. as nothing changes about the fundamental fact that expressions are evaluated in multiple passes, existing code should keep working unmodified.


      MuxProps {
          arch: [ "x86", "arm" ]
          type: [ "debug", "release" ]
      knolf: "foobar"
      // no muxing here
      // => "foobar baz"
      deriv_n: knolf + " baz"
      // one-axis muxing
      // => "foobar x86 baz"
      // => "foobar arm baz"
      deriv_1d: knolf + " " + arch + " baz"
      // two-axis muxing
      // => "foobar x86 debug baz"
      // => "foobar x86 release baz"
      // => "foobar arm debug baz"
      // => "foobar arm release baz"
      deriv_2d: knolf + " " + arch + " " + type + " baz"
      // transitive one-axis muxing
      // => "zort foobar x86 baz"
      // => "zort foobar arm baz"
      deriv2_1d: "zort " + deriv_1d
      // partially transitive two-axis muxing
      // - this shows that we mux each axis only once
      // => "zort x86 foobar x86 debug baz"
      // => "zort x86 foobar x86 release baz"
      // => "zort arm foobar arm debug baz"
      // => "zort arm foobar arm release baz"
      deriv2_2d: "zort " + arch + " " + deriv_2d


          Issue Links

          No reviews matched the request. Check your Options in the drop-down menu of this sections header.



              kandeler Christian Kandeler
              buddenha Oswald Buddenhagen
              0 Vote for this issue
              1 Start watching this issue



                  Gerrit Reviews

                  There are no open Gerrit changes