find_package(Java REQUIRED COMPONENTS Runtime)

set(SYSY_GRAMMAR "${PROJECT_SOURCE_DIR}/src/antlr4/SysY.g4")
set(SYSY_ANTLR_JAR "${PROJECT_SOURCE_DIR}/third_party/antlr-4.13.2-complete.jar")
set(SYSY_ANTLR_OUTPUTS
  "${ANTLR4_GENERATED_DIR}/SysYLexer.cpp"
  "${ANTLR4_GENERATED_DIR}/SysYLexer.h"
  "${ANTLR4_GENERATED_DIR}/SysYParser.cpp"
  "${ANTLR4_GENERATED_DIR}/SysYParser.h"
  "${ANTLR4_GENERATED_DIR}/SysYVisitor.cpp"
  "${ANTLR4_GENERATED_DIR}/SysYVisitor.h"
  "${ANTLR4_GENERATED_DIR}/SysYBaseVisitor.cpp"
  "${ANTLR4_GENERATED_DIR}/SysYBaseVisitor.h"
)

add_custom_command(
  OUTPUT ${SYSY_ANTLR_OUTPUTS}
  COMMAND ${CMAKE_COMMAND} -E make_directory "${ANTLR4_GENERATED_DIR}"
  COMMAND ${Java_JAVA_EXECUTABLE} -jar "${SYSY_ANTLR_JAR}" -Dlanguage=Cpp -visitor -no-listener -o "${ANTLR4_GENERATED_DIR}" -Xexact-output-dir "${SYSY_GRAMMAR}"
  DEPENDS "${SYSY_GRAMMAR}" "${SYSY_ANTLR_JAR}"
  COMMENT "Generating SysY parser with ANTLR4"
  VERBATIM
)

add_library(frontend STATIC
  AntlrDriver.cpp
  SyntaxTreePrinter.cpp
  ${SYSY_ANTLR_OUTPUTS}
)

target_link_libraries(frontend PUBLIC
  build_options
  ${ANTLR4_RUNTIME_TARGET}
)
