1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137
|
Description: Find and use system antlr4 executable
Forwarded: not-needed
--- a/cmake/FindANTLR.cmake
+++ b/cmake/FindANTLR.cmake
@@ -0,0 +1,121 @@
+find_package(Java QUIET COMPONENTS Runtime)
+
+SET(ANTLR_EXECUTABLE "/usr/bin/antlr4")
+
+if(ANTLR_EXECUTABLE AND Java_JAVA_EXECUTABLE)
+ execute_process(
+ COMMAND ${ANTLR_EXECUTABLE}
+ OUTPUT_VARIABLE ANTLR_COMMAND_OUTPUT
+ ERROR_VARIABLE ANTLR_COMMAND_ERROR
+ RESULT_VARIABLE ANTLR_COMMAND_RESULT
+ OUTPUT_STRIP_TRAILING_WHITESPACE)
+
+ if(ANTLR_COMMAND_RESULT EQUAL 0)
+ string(REGEX MATCH "Version [0-9]+(\\.[0-9])*" ANTLR_VERSION ${ANTLR_COMMAND_OUTPUT})
+ string(REPLACE "Version " "" ANTLR_VERSION ${ANTLR_VERSION})
+ else()
+ message(
+ SEND_ERROR
+ "Command '${ANTLR_EXECUTABLE}' "
+ "failed with the output '${ANTLR_COMMAND_ERROR}'")
+ endif()
+
+ macro(ANTLR_TARGET Name InputFile)
+ set(ANTLR_OPTIONS LEXER PARSER LISTENER VISITOR)
+ set(ANTLR_ONE_VALUE_ARGS PACKAGE OUTPUT_DIRECTORY DEPENDS_ANTLR)
+ set(ANTLR_MULTI_VALUE_ARGS COMPILE_FLAGS DEPENDS)
+ cmake_parse_arguments(ANTLR_TARGET
+ "${ANTLR_OPTIONS}"
+ "${ANTLR_ONE_VALUE_ARGS}"
+ "${ANTLR_MULTI_VALUE_ARGS}"
+ ${ARGN})
+
+ set(ANTLR_${Name}_INPUT ${InputFile})
+
+ get_filename_component(ANTLR_INPUT ${InputFile} NAME_WE)
+
+ if(ANTLR_TARGET_OUTPUT_DIRECTORY)
+ set(ANTLR_${Name}_OUTPUT_DIR ${ANTLR_TARGET_OUTPUT_DIRECTORY})
+ else()
+ set(ANTLR_${Name}_OUTPUT_DIR
+ ${CMAKE_CURRENT_BINARY_DIR}/antlr4cpp_generated_src/${ANTLR_INPUT})
+ endif()
+
+ unset(ANTLR_${Name}_CXX_OUTPUTS)
+
+ if((ANTLR_TARGET_LEXER AND NOT ANTLR_TARGET_PARSER) OR
+ (ANTLR_TARGET_PARSER AND NOT ANTLR_TARGET_LEXER))
+ list(APPEND ANTLR_${Name}_CXX_OUTPUTS
+ ${ANTLR_${Name}_OUTPUT_DIR}/${ANTLR_INPUT}.h
+ ${ANTLR_${Name}_OUTPUT_DIR}/${ANTLR_INPUT}.cpp)
+ set(ANTLR_${Name}_OUTPUTS
+ ${ANTLR_${Name}_OUTPUT_DIR}/${ANTLR_INPUT}.interp
+ ${ANTLR_${Name}_OUTPUT_DIR}/${ANTLR_INPUT}.tokens)
+ else()
+ list(APPEND ANTLR_${Name}_CXX_OUTPUTS
+ ${ANTLR_${Name}_OUTPUT_DIR}/${ANTLR_INPUT}Lexer.h
+ ${ANTLR_${Name}_OUTPUT_DIR}/${ANTLR_INPUT}Lexer.cpp
+ ${ANTLR_${Name}_OUTPUT_DIR}/${ANTLR_INPUT}Parser.h
+ ${ANTLR_${Name}_OUTPUT_DIR}/${ANTLR_INPUT}Parser.cpp)
+ list(APPEND ANTLR_${Name}_OUTPUTS
+ ${ANTLR_${Name}_OUTPUT_DIR}/${ANTLR_INPUT}Lexer.interp
+ ${ANTLR_${Name}_OUTPUT_DIR}/${ANTLR_INPUT}Lexer.tokens)
+ endif()
+
+ if(ANTLR_TARGET_LISTENER)
+ list(APPEND ANTLR_${Name}_CXX_OUTPUTS
+ ${ANTLR_${Name}_OUTPUT_DIR}/${ANTLR_INPUT}BaseListener.h
+ ${ANTLR_${Name}_OUTPUT_DIR}/${ANTLR_INPUT}BaseListener.cpp
+ ${ANTLR_${Name}_OUTPUT_DIR}/${ANTLR_INPUT}Listener.h
+ ${ANTLR_${Name}_OUTPUT_DIR}/${ANTLR_INPUT}Listener.cpp)
+ list(APPEND ANTLR_TARGET_COMPILE_FLAGS -listener)
+ endif()
+
+ if(ANTLR_TARGET_VISITOR)
+ list(APPEND ANTLR_${Name}_CXX_OUTPUTS
+ ${ANTLR_${Name}_OUTPUT_DIR}/${ANTLR_INPUT}BaseVisitor.h
+ ${ANTLR_${Name}_OUTPUT_DIR}/${ANTLR_INPUT}BaseVisitor.cpp
+ ${ANTLR_${Name}_OUTPUT_DIR}/${ANTLR_INPUT}Visitor.h
+ ${ANTLR_${Name}_OUTPUT_DIR}/${ANTLR_INPUT}Visitor.cpp)
+ list(APPEND ANTLR_TARGET_COMPILE_FLAGS -visitor)
+ endif()
+
+ if(ANTLR_TARGET_PACKAGE)
+ list(APPEND ANTLR_TARGET_COMPILE_FLAGS -package ${ANTLR_TARGET_PACKAGE})
+ endif()
+
+ list(APPEND ANTLR_${Name}_OUTPUTS ${ANTLR_${Name}_CXX_OUTPUTS})
+
+ if(ANTLR_TARGET_DEPENDS_ANTLR)
+ if(ANTLR_${ANTLR_TARGET_DEPENDS_ANTLR}_INPUT)
+ list(APPEND ANTLR_TARGET_DEPENDS
+ ${ANTLR_${ANTLR_TARGET_DEPENDS_ANTLR}_INPUT})
+ list(APPEND ANTLR_TARGET_DEPENDS
+ ${ANTLR_${ANTLR_TARGET_DEPENDS_ANTLR}_OUTPUTS})
+ else()
+ message(SEND_ERROR
+ "ANTLR target '${ANTLR_TARGET_DEPENDS_ANTLR}' not found")
+ endif()
+ endif()
+
+ add_custom_command(
+ OUTPUT ${ANTLR_${Name}_OUTPUTS}
+ COMMAND ${ANTLR_EXECUTABLE}
+ ${InputFile}
+ -o ${ANTLR_${Name}_OUTPUT_DIR}
+ -no-listener
+ -Dlanguage=Cpp
+ ${ANTLR_TARGET_COMPILE_FLAGS}
+ DEPENDS ${InputFile}
+ ${ANTLR_TARGET_DEPENDS}
+ WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
+ COMMENT "Building ${Name} with ANTLR ${ANTLR_VERSION}")
+ endmacro(ANTLR_TARGET)
+
+endif(ANTLR_EXECUTABLE AND Java_JAVA_EXECUTABLE)
+
+include(FindPackageHandleStandardArgs)
+find_package_handle_standard_args(
+ ANTLR
+ REQUIRED_VARS ANTLR_EXECUTABLE Java_JAVA_EXECUTABLE
+ VERSION_VAR ANTLR_VERSION)
--- a/parsers/CMakeLists.txt
+++ b/parsers/CMakeLists.txt
@@ -43,6 +43,7 @@ else()
message(STATUS "Using generated ANTLR files")
endif()
+INCLUDE_DIRECTORIES("/usr/include/antlr4-runtime/")
add_parser(arg_parser/ArgumentList.g4)
add_parser(action_expression/ActionExpression.g4)
|