Remove antlr_undefines.h. (#2664)
[cvc5.git] / src / parser / CMakeLists.txt
1 set(ANTLR_HOME ${ANTLR_DIR})
2 find_package(ANTLR REQUIRED)
3
4 if(NOT HAVE_ANTLR3_FILE_STREAM_NEW)
5 add_definitions(-DCVC4_ANTLR3_OLD_INPUT_STREAM)
6 endif()
7
8 # Java runtime is required for ANTLR
9 find_package(Java COMPONENTS Runtime REQUIRED)
10
11 #-----------------------------------------------------------------------------#
12 # libcvc4parser source files
13
14 set(libcvc4parser_src_files
15 antlr_input.cpp
16 antlr_input.h
17 antlr_input_imports.cpp
18 antlr_line_buffered_input.cpp
19 antlr_line_buffered_input.h
20 antlr_tracing.h
21 bounded_token_buffer.cpp
22 bounded_token_buffer.h
23 bounded_token_factory.cpp
24 bounded_token_factory.h
25 cvc/cvc_input.cpp
26 cvc/cvc_input.h
27 input.cpp
28 input.h
29 line_buffer.cpp
30 line_buffer.h
31 memory_mapped_input_buffer.cpp
32 memory_mapped_input_buffer.h
33 parser.cpp
34 parser.h
35 parser_builder.cpp
36 parser_builder.h
37 parser_exception.h
38 smt1/smt1.cpp
39 smt1/smt1.h
40 smt1/smt1_input.cpp
41 smt1/smt1_input.h
42 smt2/smt2.cpp
43 smt2/smt2.h
44 smt2/smt2_input.cpp
45 smt2/smt2_input.h
46 smt2/sygus_input.cpp
47 smt2/sygus_input.h
48 tptp/TptpLexer.c
49 tptp/TptpParser.c
50 tptp/tptp.cpp
51 tptp/tptp.h
52 tptp/tptp_input.cpp
53 tptp/tptp_input.h
54 )
55
56 #-----------------------------------------------------------------------------#
57 # Generate parsers for all supported languages
58
59 foreach(lang Cvc Smt1 Smt2 Tptp)
60 string(TOLOWER ${lang} lang_dir)
61 file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/${lang_dir})
62 add_custom_command(
63 OUTPUT
64 ${CMAKE_CURRENT_BINARY_DIR}/${lang_dir}/${lang}Lexer.c
65 ${CMAKE_CURRENT_BINARY_DIR}/${lang_dir}/${lang}Lexer.h
66 ${CMAKE_CURRENT_BINARY_DIR}/${lang_dir}/${lang}Parser.c
67 ${CMAKE_CURRENT_BINARY_DIR}/${lang_dir}/${lang}Parser.h
68 ${CMAKE_CURRENT_BINARY_DIR}/${lang_dir}/${lang}.tokens
69 COMMAND
70 ${ANTLR_BINARY}
71 ${CMAKE_CURRENT_SOURCE_DIR}/${lang_dir}/${lang}.g
72 -fo ${CMAKE_CURRENT_BINARY_DIR}/${lang_dir}
73 DEPENDS
74 ${lang_dir}/${lang}.g
75 )
76 set(gen_src_files
77 ${CMAKE_CURRENT_BINARY_DIR}/${lang_dir}/${lang}Lexer.c
78 ${CMAKE_CURRENT_BINARY_DIR}/${lang_dir}/${lang}Parser.c)
79
80 # Tell cmake that generated source files are actually c++ files
81 set_source_files_properties(${gen_src_files} PROPERTIES LANGUAGE CXX)
82 set_source_files_properties(${gen_src_files} PROPERTIES GENERATED TRUE)
83
84 # We don't want to enable -Wall for code generated by ANTLR.
85 set_source_files_properties(
86 ${gen_src_files} PROPERTIES COMPILE_FLAGS -Wno-all)
87
88 # Add generated source files to the parser source files
89 list(APPEND libcvc4parser_src_files ${gen_src_files})
90 endforeach()
91
92 #-----------------------------------------------------------------------------#
93 # libcvc4parser configuration
94
95 add_library(cvc4parser ${libcvc4parser_src_files})
96 set_target_properties(cvc4parser PROPERTIES SOVERSION ${CVC4_SOVERSION})
97 target_compile_definitions(cvc4parser PRIVATE -D__BUILDING_CVC4PARSERLIB)
98 target_link_libraries(cvc4parser cvc4 ${ANTLR_LIBRARIES})
99 target_include_directories(cvc4parser PRIVATE ${ANTLR_INCLUDE_DIR})
100 install(TARGETS cvc4parser DESTINATION lib)
101
102 # The generated lexer/parser files define some functions as
103 # __declspec(dllexport) via the ANTLR3_API macro, which leads to lots of
104 # unresolved symbols when linking against libcvc4parser.
105 # -Wl,--export-all-symbols makes sure that all symbols are exported when
106 # building a DLL.
107 if(CVC4_WINDOWS_BUILD)
108 set_target_properties(cvc4parser
109 PROPERTIES LINK_FLAGS "-Wl,--export-all-symbols")
110 endif()