]> gitweb.ps.run Git - toc/blob - antlr4-cpp-runtime-4.9.2-source/runtime/CMakeLists.txt
add antlr source code and ReadMe
[toc] / antlr4-cpp-runtime-4.9.2-source / runtime / CMakeLists.txt
1
2 include(${CMAKE_ROOT}/Modules/ExternalProject.cmake)
3
4 set(THIRDPARTY_DIR ${CMAKE_BINARY_DIR}/runtime/thirdparty)
5 set(UTFCPP_DIR ${THIRDPARTY_DIR}/utfcpp)
6 ExternalProject_Add(
7   utfcpp
8   GIT_REPOSITORY        "git://github.com/nemtrif/utfcpp"
9   GIT_TAG               "v3.1.1"
10   SOURCE_DIR            ${UTFCPP_DIR}
11   UPDATE_DISCONNECTED   1
12   CMAKE_ARGS            -DCMAKE_INSTALL_PREFIX=${UTFCPP_DIR}/install -Dgtest_force_shared_crt=ON
13   TEST_AFTER_INSTALL    1
14   STEP_TARGETS          build)
15
16
17 include_directories(
18   ${PROJECT_SOURCE_DIR}/runtime/src
19   ${PROJECT_SOURCE_DIR}/runtime/src/atn
20   ${PROJECT_SOURCE_DIR}/runtime/src/dfa
21   ${PROJECT_SOURCE_DIR}/runtime/src/misc
22   ${PROJECT_SOURCE_DIR}/runtime/src/support
23   ${PROJECT_SOURCE_DIR}/runtime/src/tree
24   ${PROJECT_SOURCE_DIR}/runtime/src/tree/pattern
25   ${PROJECT_SOURCE_DIR}/runtime/src/tree/xpath
26   ${UTFCPP_DIR}/install/include/utf8cpp
27   ${UTFCPP_DIR}/install/include/utf8cpp/utf8
28 )
29
30
31 file(GLOB libantlrcpp_SRC
32   "${PROJECT_SOURCE_DIR}/runtime/src/*.cpp"
33   "${PROJECT_SOURCE_DIR}/runtime/src/atn/*.cpp"
34   "${PROJECT_SOURCE_DIR}/runtime/src/dfa/*.cpp"
35   "${PROJECT_SOURCE_DIR}/runtime/src/misc/*.cpp"
36   "${PROJECT_SOURCE_DIR}/runtime/src/support/*.cpp"
37   "${PROJECT_SOURCE_DIR}/runtime/src/tree/*.cpp"
38   "${PROJECT_SOURCE_DIR}/runtime/src/tree/pattern/*.cpp"
39   "${PROJECT_SOURCE_DIR}/runtime/src/tree/xpath/*.cpp"
40 )
41
42 add_library(antlr4_shared SHARED ${libantlrcpp_SRC})
43 add_library(antlr4_static STATIC ${libantlrcpp_SRC})
44
45 set(LIB_OUTPUT_DIR "${CMAKE_HOME_DIRECTORY}/dist") # put generated libraries here.
46 message(STATUS "Output libraries to ${LIB_OUTPUT_DIR}")
47
48 # make sure 'make' works fine even if ${LIB_OUTPUT_DIR} is deleted.
49 add_custom_target(make_lib_output_dir ALL
50     COMMAND ${CMAKE_COMMAND} -E make_directory ${LIB_OUTPUT_DIR}
51     )
52
53 add_dependencies(antlr4_shared make_lib_output_dir utfcpp)
54 add_dependencies(antlr4_static make_lib_output_dir utfcpp)
55
56 if(CMAKE_SYSTEM_NAME MATCHES "Linux")
57   target_link_libraries(antlr4_shared ${UUID_LIBRARIES})
58   target_link_libraries(antlr4_static ${UUID_LIBRARIES})
59 elseif(APPLE)
60   target_link_libraries(antlr4_shared ${COREFOUNDATION_LIBRARY})
61   target_link_libraries(antlr4_static ${COREFOUNDATION_LIBRARY})
62 endif()
63
64 if(CMAKE_CXX_COMPILER_ID MATCHES "MSVC")
65   set(disabled_compile_warnings "/wd4251")
66 else()
67   set(disabled_compile_warnings "-Wno-overloaded-virtual")
68 endif()
69
70
71 if("${CMAKE_CXX_COMPILER_ID}" MATCHES "Clang")
72   set(disabled_compile_warnings "${disabled_compile_warnings} -Wno-dollar-in-identifier-extension -Wno-four-char-constants")
73 elseif("${CMAKE_CXX_COMPILER_ID}" MATCHES "GNU" OR "${CMAKE_CXX_COMPILER_ID}" MATCHES "Intel")
74   set(disabled_compile_warnings "${disabled_compile_warnings} -Wno-multichar")
75 endif()
76
77 set(extra_share_compile_flags "")
78 set(extra_static_compile_flags "")
79 if(WIN32)
80   set(extra_share_compile_flags "-DANTLR4CPP_EXPORTS")
81   set(extra_static_compile_flags "-DANTLR4CPP_STATIC")
82 endif(WIN32)
83 if(CMAKE_CXX_COMPILER_ID MATCHES "MSVC")
84   if(WITH_STATIC_CRT)
85     target_compile_options(antlr4_shared PRIVATE "/MT$<$<CONFIG:Debug>:d>")
86     target_compile_options(antlr4_static PRIVATE "/MT$<$<CONFIG:Debug>:d>")
87   else()
88     target_compile_options(antlr4_shared PRIVATE "/MD$<$<CONFIG:Debug>:d>")
89     target_compile_options(antlr4_static PRIVATE "/MD$<$<CONFIG:Debug>:d>")
90   endif()
91 endif()
92
93 set(static_lib_suffix "")
94 if(CMAKE_CXX_COMPILER_ID MATCHES "MSVC")
95   set(static_lib_suffix "-static")
96 endif()
97
98 if(CMAKE_CXX_COMPILER_ID MATCHES "MSVC")
99   set(extra_share_compile_flags "-DANTLR4CPP_EXPORTS -MP /wd4251")
100   set(extra_static_compile_flags "-DANTLR4CPP_STATIC -MP")
101 endif()
102
103 set_target_properties(antlr4_shared
104                       PROPERTIES VERSION   ${ANTLR_VERSION}
105                                  SOVERSION ${ANTLR_VERSION}
106                                  OUTPUT_NAME antlr4-runtime
107                                  LIBRARY_OUTPUT_DIRECTORY ${LIB_OUTPUT_DIR}
108                                  # TODO: test in windows. DLL is treated as runtime.
109                                  # see https://cmake.org/cmake/help/v3.0/prop_tgt/LIBRARY_OUTPUT_DIRECTORY.html
110                                  RUNTIME_OUTPUT_DIRECTORY ${LIB_OUTPUT_DIR}
111                                  ARCHIVE_OUTPUT_DIRECTORY ${LIB_OUTPUT_DIR}
112                                  COMPILE_FLAGS "${disabled_compile_warnings} ${extra_share_compile_flags}")
113
114 set_target_properties(antlr4_static
115                       PROPERTIES VERSION   ${ANTLR_VERSION}
116                                  SOVERSION ${ANTLR_VERSION}
117                                  OUTPUT_NAME "antlr4-runtime${static_lib_suffix}"
118                                  ARCHIVE_OUTPUT_DIRECTORY ${LIB_OUTPUT_DIR}
119                                  COMPILE_FLAGS "${disabled_compile_warnings} ${extra_static_compile_flags}")
120
121 install(TARGETS antlr4_shared
122         DESTINATION lib
123         EXPORT antlr4-targets)
124 install(TARGETS antlr4_static
125         DESTINATION lib
126         EXPORT antlr4-targets)
127
128 install(DIRECTORY "${PROJECT_SOURCE_DIR}/runtime/src/"
129         DESTINATION "include/antlr4-runtime"
130         COMPONENT dev
131         FILES_MATCHING PATTERN "*.h"
132         )
133
134 install(FILES "${UTFCPP_DIR}/source/utf8.h"
135         DESTINATION "include/antlr4-runtime")
136 install(DIRECTORY "${UTFCPP_DIR}/source/utf8"
137         DESTINATION "include/antlr4-runtime"
138         COMPONENT dev
139         FILES_MATCHING PATTERN "*.h"
140         )
141
142
143