FindANTLR.cmake 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. ################################################################################
  2. # HPCC SYSTEMS software Copyright (C) 2012 HPCC Systems®.
  3. #
  4. # Licensed under the Apache License, Version 2.0 (the "License");
  5. # you may not use this file except in compliance with the License.
  6. # You may obtain a copy of the License at
  7. #
  8. # http://www.apache.org/licenses/LICENSE-2.0
  9. #
  10. # Unless required by applicable law or agreed to in writing, software
  11. # distributed under the License is distributed on an "AS IS" BASIS,
  12. # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  13. # See the License for the specific language governing permissions and
  14. # limitations under the License.
  15. ################################################################################
  16. # - Attempt to find the ANTLR jar needed to build and run ANTLR Lexers and Parsers
  17. # Once done this will define
  18. #
  19. # ANTLR_FOUND - ANTLR found in local system
  20. # ANTLR_BUILDTIME_JAR - The jar needed to build/generate ANTLR Lexers and Parsers
  21. # ANTLR_RUNTIME_JAR - The jar needed to build/generate ANTLR Lexers and Parsers
  22. ################################################################################
  23. include(UseJava)
  24. set(ANTLR_BUILDTIME_DEP "antlr-3.4-complete" CACHE STRING "ANTLR buildtime jar file name.")
  25. set(ANTLR_RUNTIME_DEP "antlr-runtime-3.4" CACHE STRING "ANTLR runtime jar file name.")
  26. set(ANTLR_PATH "${HPCC_SOURCE_DIR}/esp/services/ws_sql/libantlr3c" CACHE PATH "Location of ANTLR jar files.")
  27. set(ANTLR_PKG_FIND_ERROR_MSG "Could not locate jars.\nPlease run `git submodule update --init --recursive`\n")
  28. find_jar(ANTLR_BUILDTIME_JAR ${ANTLR_BUILDTIME_DEP} PATHS ${ANTLR_PATH})
  29. find_jar(ANTLR_RUNTIME_JAR ${ANTLR_RUNTIME_DEP} PATHS ${ANTLR_PATH})
  30. include(FindPackageHandleStandardArgs)
  31. find_package_handle_standard_args(
  32. ANTLR
  33. ${ANTLR_PKG_FIND_ERROR_MSG}
  34. ANTLR_BUILDTIME_JAR
  35. ANTLR_RUNTIME_JAR
  36. )
  37. mark_as_advanced(ANTLR_BUILDTIME_JAR ANTLR_RUNTIME_JAR)
  38. function(ANTLR_TARGET)
  39. # argument setup
  40. set(options "")
  41. set(oneValueArgs GRAMMAR_PREFIX DESTINATION)
  42. set(multiValueArgs GRAMMAR_FILES)
  43. cmake_parse_arguments(antlr "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN})
  44. list(GET ARGN 0 target_name)
  45. if(antlr_DESTINATION)
  46. # normalize path
  47. string(REGEX REPLACE "[/]$" "" antlr_DESTINATION "${antlr_DESTINATION}")
  48. set(antlr_options ${antlr_options} -o ${antlr_DESTINATION})
  49. else()
  50. set(antlr_options ${antlr_options} -o ${CMAKE_CURRENT_BINARY_DIR})
  51. endif()
  52. set(generated_sources
  53. ${antlr_DESTINATION}/${antlr_GRAMMAR_PREFIX}Lexer.c
  54. ${antlr_DESTINATION}/${antlr_GRAMMAR_PREFIX}Parser.c
  55. )
  56. set(generated_headers
  57. ${antlr_DESTINATION}/${antlr_GRAMMAR_PREFIX}Lexer.h
  58. ${antlr_DESTINATION}/${antlr_GRAMMAR_PREFIX}Parser.h
  59. )
  60. set(generated_misc
  61. ${antlr_DESTINATION}/${antlr_GRAMMAR_PREFIX}.tokens
  62. )
  63. add_custom_command(OUTPUT ${generated_sources} ${generated_headers}
  64. COMMAND ${Java_JAVA_EXECUTABLE} -jar ${ANTLR_BUILDTIME_JAR} ${antlr_GRAMMAR_FILES} ${antlr_options}
  65. COMMENT "Generated ANTLR3 Lexer and Parser from grammars"
  66. DEPENDS ${antlr_GRAMMAR_FILES}
  67. VERBATIM
  68. )
  69. add_custom_target("${target_name}"
  70. DEPENDS ${generated_sources} ${generated_headers}
  71. )
  72. set_source_files_properties(
  73. ${generated_sources}
  74. ${generated_headers}
  75. PROPERTIES GENERATED TRUE
  76. )
  77. if(antlr_DESTINATION)
  78. set_property(DIRECTORY PROPERTY INCLUDE_DIRECTORIES ${antlr_DESTINATION})
  79. endif()
  80. set_property(DIRECTORY PROPERTY
  81. ADDITIONAL_MAKE_CLEAN_FILES
  82. ${generated_sources}
  83. ${generated_headers}
  84. ${generated_misc}
  85. )
  86. set(ANTLR_${target_name}_OUTPUTS ${generated_sources} ${generated_headers} ${generated_misc} PARENT_SCOPE)
  87. set(ANTLR_${target_name}_SOURCES ${generated_sources} PARENT_SCOPE)
  88. set(ANTLR_${target_name}_HEADERS ${generated_headers} PARENT_SCOPE)
  89. set(ANTLR_${target_name}_MISC ${generated_misc} PARENT_SCOPE)
  90. endfunction(ANTLR_TARGET)