2 include(${CMAKE_ROOT}/Modules/ExternalProject.cmake)
4 set(THIRDPARTY_DIR ${CMAKE_BINARY_DIR}/runtime/thirdparty)
5 set(UTFCPP_DIR ${THIRDPARTY_DIR}/utfcpp)
8 GIT_REPOSITORY "git://github.com/nemtrif/utfcpp"
10 SOURCE_DIR ${UTFCPP_DIR}
12 CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=${UTFCPP_DIR}/install -Dgtest_force_shared_crt=ON
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
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"
42 add_library(antlr4_shared SHARED ${libantlrcpp_SRC})
43 add_library(antlr4_static STATIC ${libantlrcpp_SRC})
45 set(LIB_OUTPUT_DIR "${CMAKE_HOME_DIRECTORY}/dist") # put generated libraries here.
46 message(STATUS "Output libraries to ${LIB_OUTPUT_DIR}")
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}
53 add_dependencies(antlr4_shared make_lib_output_dir utfcpp)
54 add_dependencies(antlr4_static make_lib_output_dir utfcpp)
56 if(CMAKE_SYSTEM_NAME MATCHES "Linux")
57 target_link_libraries(antlr4_shared ${UUID_LIBRARIES})
58 target_link_libraries(antlr4_static ${UUID_LIBRARIES})
60 target_link_libraries(antlr4_shared ${COREFOUNDATION_LIBRARY})
61 target_link_libraries(antlr4_static ${COREFOUNDATION_LIBRARY})
64 if(CMAKE_CXX_COMPILER_ID MATCHES "MSVC")
65 set(disabled_compile_warnings "/wd4251")
67 set(disabled_compile_warnings "-Wno-overloaded-virtual")
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")
77 set(extra_share_compile_flags "")
78 set(extra_static_compile_flags "")
80 set(extra_share_compile_flags "-DANTLR4CPP_EXPORTS")
81 set(extra_static_compile_flags "-DANTLR4CPP_STATIC")
83 if(CMAKE_CXX_COMPILER_ID MATCHES "MSVC")
85 target_compile_options(antlr4_shared PRIVATE "/MT$<$<CONFIG:Debug>:d>")
86 target_compile_options(antlr4_static PRIVATE "/MT$<$<CONFIG:Debug>:d>")
88 target_compile_options(antlr4_shared PRIVATE "/MD$<$<CONFIG:Debug>:d>")
89 target_compile_options(antlr4_static PRIVATE "/MD$<$<CONFIG:Debug>:d>")
93 set(static_lib_suffix "")
94 if(CMAKE_CXX_COMPILER_ID MATCHES "MSVC")
95 set(static_lib_suffix "-static")
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")
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}")
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}")
121 install(TARGETS antlr4_shared
123 EXPORT antlr4-targets)
124 install(TARGETS antlr4_static
126 EXPORT antlr4-targets)
128 install(DIRECTORY "${PROJECT_SOURCE_DIR}/runtime/src/"
129 DESTINATION "include/antlr4-runtime"
131 FILES_MATCHING PATTERN "*.h"
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"
139 FILES_MATCHING PATTERN "*.h"