# A general XOR script
# (https://www.klayout.de/forum/discussion/100/xor-vs-diff-tool)
# This script uses KLayout's DRC language to implement a generic
# XOR between two layouts. The name of the layouts is given
# in $a and $b.

# For layout-to-layout XOR with multiple cores, run this script with
#   ./klayout -r xor.drc -rd thr=NUM_CORES -rd top_cell=TOP_CELL_NAME -rd a=a.gds -rd b=b.gds -rd ol=xor.gds -zz
# (replace NUM_CORES by the desired number of cores to utilize

# enable timing output
verbose

# set up input a
a = source($a, $top_cell)

# set up input b
b = source($b, $top_cell)

$o && $ext != "gds" && report("XOR #{$a} vs. #{$b}", $o)
$ol && $ext == "gds" && target($ol, $co || "XOR")

$thr && threads($thr) || threads(2)

# collect all common layers
layers = {}
[ a.layout, b.layout ].each do |ly|
  ly.layer_indices.each do |li|
    i = ly.get_info(li)
    layers[i.to_s] = i
  end
end

# perform the XOR's
layers.keys.sort.each do |l|
  i = layers[l]
  info("--- Running XOR for #{l} ---")
  x = a.input(l) ^ b.input(l)
  info("XOR differences: #{x.data.size}")
  $o && $ext != "gds" && x.output(l, "XOR results for layer #{l} #{i.name}")
  $ol && $ext == "gds" && x.output(i.layer, i.datatype, i.name)
end
