Skip to content

Commit d46ef90

Browse files
committed
Fixed some cmake issues. Closes issue #13 and issue #8.
Additionally a warning was fixed (std::move prevents copy elision)
1 parent 196e8ab commit d46ef90

File tree

5 files changed

+37
-12
lines changed

5 files changed

+37
-12
lines changed

runtime/Cpp/CMakeLists.txt

Lines changed: 19 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,8 @@ if(NOT WITH_DEMO)
1818
FORCE)
1919
endif(NOT WITH_DEMO)
2020

21+
option(WITH_LIBCXX "Building with clang++ and libc++(in Linux). To enable with: -DWITH_LIBCXX=On" On)
22+
2123
project(LIBANTLR4)
2224

2325
if(CMAKE_VERSION VERSION_EQUAL "3.0.0" OR
@@ -36,11 +38,12 @@ if(APPLE)
3638
find_library(COREFOUNDATION_LIBRARY CoreFoundation)
3739
endif()
3840

39-
find_package(Java REQUIRED)
40-
4141
file(STRINGS "VERSION" ANTLR_VERSION)
4242

4343
if (WITH_DEMO)
44+
# Java is not necessary if building without demos.
45+
find_package(Java REQUIRED)
46+
4447
if (NOT ANTLR_JAR_LOCATION)
4548
message(FATAL_ERROR "Missing antlr4.jar location. You can specify it's path using: -DANTLR_JAR_LOCATION=<path>")
4649
else()
@@ -56,18 +59,21 @@ endif(WITH_DEMO)
5659
set(MY_CXX_WARNING_FLAGS " -Wall -pedantic -W")
5760

5861
# Initialize CXXFLAGS.
59-
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -std=c++11 ${MY_CXX_WARNING_FLAGS}")
60-
set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -O0 -g -std=c++11 ${MY_CXX_WARNING_FLAGS}")
61-
set(CMAKE_CXX_FLAGS_MINSIZEREL "${CMAKE_CXX_FLAGS_MINSIZEREL} -Os -DNDEBUG -std=c++11 ${MY_CXX_WARNING_FLAGS}")
62-
set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -O3 -DNDEBUG -std=c++11 ${MY_CXX_WARNING_FLGAS}")
63-
set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS_RELWITHDEBINFO} -O2 -g -std=c++11 ${MY_CXX_WARNING_FLAGS}")
62+
set(CMAKE_CXX_STANDARD 11)
63+
set(CMAKE_CXX_STANDARD_REQUIRED ON)
64+
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall ${MY_CXX_WARNING_FLAGS}")
65+
set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -O0 -g ${MY_CXX_WARNING_FLAGS}")
66+
set(CMAKE_CXX_FLAGS_MINSIZEREL "${CMAKE_CXX_FLAGS_MINSIZEREL} -Os -DNDEBUG ${MY_CXX_WARNING_FLAGS}")
67+
set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -O3 -DNDEBUG ${MY_CXX_WARNING_FLGAS}")
68+
set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS_RELWITHDEBINFO} -O2 -g ${MY_CXX_WARNING_FLAGS}")
6469

6570
# Compiler-specific C++11 activation.
6671
if ("${CMAKE_CXX_COMPILER_ID}" MATCHES "GNU")
6772
execute_process(
6873
COMMAND ${CMAKE_CXX_COMPILER} -dumpversion OUTPUT_VARIABLE GCC_VERSION)
69-
if (NOT (GCC_VERSION VERSION_GREATER 4.7 OR GCC_VERSION VERSION_EQUAL 4.7))
70-
message(FATAL_ERROR "${PROJECT_NAME} requires g++ 4.7 or greater.")
74+
# Just g++-5.0 and greater contain <codecvt> header. (test in ubuntu)
75+
if (NOT (GCC_VERSION VERSION_GREATER 5.0 OR GCC_VERSION VERSION_EQUAL 5.0))
76+
message(FATAL_ERROR "${PROJECT_NAME} requires g++ 5.0 or greater.")
7177
endif ()
7278
elseif ("${CMAKE_CXX_COMPILER_ID}" MATCHES "Clang" AND APPLE)
7379
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -stdlib=libc++")
@@ -77,6 +83,10 @@ elseif ("${CMAKE_CXX_COMPILER_ID}" MATCHES "Clang" AND CMAKE_SYSTEM_NAME MATCHES
7783
if (NOT (CLANG_VERSION VERSION_GREATER 4.2.1 OR CLANG_VERSION VERSION_EQUAL 4.2.1))
7884
message(FATAL_ERROR "${PROJECT_NAME} requires clang 4.2.1 or greater.")
7985
endif ()
86+
# You can use libc++ to compile this project when g++ is NOT greater than or equal to 5.0.
87+
if (WITH_LIBCXX)
88+
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -stdlib=libc++")
89+
endif()
8090
else ()
8191
message(FATAL_ERROR "Your C++ compiler does not support C++11.")
8292
endif ()

runtime/Cpp/README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ The minimum C++ version to compile the ANTLR C++ runtime with is C++11. The supp
3838

3939
Include the antlr4-runtime.h umbrella header in your target application to get everything needed to use the library.
4040

41-
If you are compiling with cmake, the minimum version required is cmake 3.3.
41+
If you are compiling with cmake, the minimum version required is cmake 2.8.
4242

4343
#### Compiling on Windows
4444
Simply open the VS solution (VS 2013+) and build it.

runtime/Cpp/runtime/CMakeLists.txt

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,16 @@ file(GLOB libantlrcpp_SRC
2424
add_library(antlr4_shared SHARED ${libantlrcpp_SRC})
2525
add_library(antlr4_static STATIC ${libantlrcpp_SRC})
2626

27+
set(LIB_OUTPUT_DIR "${CMAKE_HOME_DIRECTORY}/dist") # put generated libraries here.
28+
message(STATUS "Output libraries to ${LIB_OUTPUT_DIR}")
29+
30+
# make sure 'make' works fine even if ${LIB_OUTPUT_DIR} is deleted.
31+
add_custom_target(make_lib_output_dir ALL
32+
COMMAND ${CMAKE_COMMAND} -E make_directory ${LIB_OUTPUT_DIR}
33+
)
34+
35+
add_dependencies(antlr4_shared make_lib_output_dir)
36+
add_dependencies(antlr4_static make_lib_output_dir)
2737

2838
if(CMAKE_SYSTEM_NAME MATCHES "Linux")
2939
target_link_libraries(antlr4_shared ${UUID_LIBRARIES})
@@ -45,12 +55,17 @@ set_target_properties(antlr4_shared
4555
PROPERTIES VERSION ${ANTLR_VERSION}
4656
SOVERSION ${ANTLR_VERSION}
4757
OUTPUT_NAME antlr4-runtime
58+
LIBRARY_OUTPUT_DIRECTORY ${LIB_OUTPUT_DIR}
59+
# TODO: test in windows. DLL is treated as runtime.
60+
# see https://cmake.org/cmake/help/v3.0/prop_tgt/LIBRARY_OUTPUT_DIRECTORY.html
61+
RUNTIME_OUTPUT_DIRECTORY ${LIB_OUTPUT_DIR}
4862
COMPILE_FLAGS "${disabled_compile_warnings}")
4963

5064
set_target_properties(antlr4_static
5165
PROPERTIES VERSION ${ANTLR_VERSION}
5266
SOVERSION ${ANTLR_VERSION}
5367
OUTPUT_NAME antlr4-runtime
68+
ARCHIVE_OUTPUT_DIRECTORY ${LIB_OUTPUT_DIR}
5469
COMPILE_FLAGS "${disabled_compile_warnings}")
5570

5671
install(TARGETS antlr4_shared

runtime/Cpp/runtime/src/ANTLRInputStream.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@ ANTLRInputStream::ANTLRInputStream(std::istream &stream) {
5757
}
5858

5959
void ANTLRInputStream::load(const std::string &input) {
60-
// Remove the UTF-8 BOM if present
60+
// Remove the UTF-8 BOM if present.
6161
const char bom[4] = "\xef\xbb\xbf";
6262
if (input.compare(0, 3, bom, 3) == 0)
6363
_data = antlrcpp::utfConverter.from_bytes(input.substr(3, std::string::npos));

runtime/Cpp/runtime/src/tree/pattern/ParseTreePatternMatcher.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -101,7 +101,7 @@ ParseTreeMatch ParseTreePatternMatcher::match(Ref<ParseTree> const& tree, const
101101
}
102102

103103
ParseTreePattern ParseTreePatternMatcher::compile(const std::string &pattern, int patternRuleIndex) {
104-
ListTokenSource tokenSrc(std::move(tokenize(pattern)));
104+
ListTokenSource tokenSrc(tokenize(pattern));
105105
CommonTokenStream tokens(&tokenSrc);
106106

107107
ParserInterpreter parserInterp(_parser->getGrammarFileName(), _parser->getVocabulary(),

0 commit comments

Comments
 (0)