# Translating Prolog into WAM-based Intermediate Code
def pl2am(name, src, out):
  from os.path import basename, dirname

  genrule(
    name = name,
    out = out,
    cmd = 'echo "go :- '
      + 'load_files(['
        + "'$SRCDIR/src/compiler/package_fx.pl',"
        + "'$SRCDIR/src/builtin/system.pl',"
        + "'$SRCDIR/src/compiler/pl2am.pl'"
      + ']),'
      + 'pl2am(['
        + "'%s'," % basename(src)
        + "'$OUT',"
        + '[ed,ac,ie,rc,idx]'
      + ']).'
      + '">$TMP/go.pl;'
      + 'cd $SRCDIR/%s;' % dirname(src)
      + 'swipl --traditional --quiet -g go,halt -t "halt(1)" $TMP/go.pl',
    srcs = [
      'src/compiler/package_fx.pl',
      'src/compiler/pl2am.pl',
      'src/builtin/system.pl',
      src,
    ],
  )

# Translating WAM-based Intermediate Code into Java
def am2j(name, am, out):
  genrule(
    name = name,
    out = out,
    cmd = 'echo "go :- '
      + 'load_files(['
        + "'$SRCDIR/src/compiler/am2j.pl'"
      + ']),'
      + 'am2j(['
        + "'$(location %s)'," % am
        + "'$TMP/java'"
      + ']).'
      + '">$TMP/go.pl;'
      + 'mkdir $TMP/java;'
      + 'swipl --traditional --quiet -g go,halt -t "halt(1)" $TMP/go.pl;'
      + 'cd $TMP/java; zip -qr $OUT .',
    srcs = ['src/compiler/am2j.pl'],
  )

def pl2j(name, src, out):
  pl2am(
    name = name + '.am',
    src = src,
    out = name + '.am',
  )
  am2j(
    name = name,
    am = ':' + name + '.am',
    out = out,
  )
