]> gitweb.ps.run Git - toc/blobdiff - antlr4-cpp-runtime-4.9.2-source/CMakeLists.txt
add antlr source code and ReadMe
[toc] / antlr4-cpp-runtime-4.9.2-source / CMakeLists.txt
diff --git a/antlr4-cpp-runtime-4.9.2-source/CMakeLists.txt b/antlr4-cpp-runtime-4.9.2-source/CMakeLists.txt
new file mode 100644 (file)
index 0000000..e549f11
--- /dev/null
@@ -0,0 +1,220 @@
+# -*- mode:cmake -*-
+cmake_minimum_required (VERSION 2.8)
+# 2.8 needed because of ExternalProject
+
+# Detect build type, fallback to release and throw a warning if use didn't specify any
+if(NOT CMAKE_BUILD_TYPE)
+  message(WARNING "Build type not set, falling back to Release mode.
+ To specify build type use:
+ -DCMAKE_BUILD_TYPE=<mode> where <mode> is Debug or Release.")
+  set(CMAKE_BUILD_TYPE "Release" CACHE STRING
+       "Choose the type of build, options are: Debug Release."
+       FORCE)
+endif(NOT CMAKE_BUILD_TYPE)
+
+if(NOT WITH_DEMO)
+  message(STATUS "Building without demo. To enable demo build use: -DWITH_DEMO=True")
+  set(WITH_DEMO False CACHE STRING
+    "Chose to build with or without demo executable"
+    FORCE)
+endif(NOT WITH_DEMO)
+
+option(WITH_LIBCXX "Building with clang++ and libc++(in Linux). To enable with: -DWITH_LIBCXX=On" Off)
+option(WITH_STATIC_CRT "(Visual C++) Enable to statically link CRT, which avoids requiring users to install the redistribution package.
+ To disable with: -DWITH_STATIC_CRT=Off" On)
+
+project(LIBANTLR4)
+
+if(CMAKE_VERSION VERSION_EQUAL "3.0.0" OR
+   CMAKE_VERSION VERSION_GREATER "3.0.0")
+  CMAKE_POLICY(SET CMP0026 NEW)
+  CMAKE_POLICY(SET CMP0054 OLD)
+  CMAKE_POLICY(SET CMP0045 OLD)
+  CMAKE_POLICY(SET CMP0042 OLD)
+endif()
+
+if(CMAKE_VERSION VERSION_EQUAL "3.3.0" OR
+   CMAKE_VERSION VERSION_GREATER "3.3.0")
+  CMAKE_POLICY(SET CMP0059 OLD)
+  CMAKE_POLICY(SET CMP0054 OLD)
+endif()
+
+if(CMAKE_SYSTEM_NAME MATCHES "Linux")
+  find_package(PkgConfig REQUIRED)
+  pkg_check_modules(UUID REQUIRED uuid)
+endif()
+if(APPLE)
+  find_library(COREFOUNDATION_LIBRARY CoreFoundation)
+endif()
+
+file(STRINGS "VERSION" ANTLR_VERSION)
+
+if(WITH_DEMO)
+  # Java is not necessary if building without demos.
+  find_package(Java COMPONENTS Runtime REQUIRED)
+
+  if(NOT ANTLR_JAR_LOCATION)
+    message(FATAL_ERROR "Missing antlr4.jar location. You can specify it's path using: -DANTLR_JAR_LOCATION=<path>")
+  else()
+    get_filename_component(ANTLR_NAME ${ANTLR_JAR_LOCATION} NAME_WE)
+    if(NOT EXISTS "${ANTLR_JAR_LOCATION}")
+      message(FATAL_ERROR "Unable to find ${ANTLR_NAME} in ${ANTLR_JAR_LOCATION}")
+    else()
+      message(STATUS "Found ${ANTLR_NAME}: ${ANTLR_JAR_LOCATION}")
+    endif()
+  endif()
+endif(WITH_DEMO)
+
+if(MSVC_VERSION)
+  set(MY_CXX_WARNING_FLAGS "  /W4")
+else()
+  set(MY_CXX_WARNING_FLAGS "  -Wall -pedantic -W")
+endif()
+
+# Define USE_UTF8_INSTEAD_OF_CODECVT macro.
+# set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DUSE_UTF8_INSTEAD_OF_CODECVT")
+
+# Initialize CXXFLAGS.
+if("${CMAKE_VERSION}" VERSION_GREATER 3.1.0)
+  if(NOT DEFINED CMAKE_CXX_STANDARD)
+    # only set CMAKE_CXX_STANDARD if not already set
+    # this allows the standard to be set by the caller, for example with -DCMAKE_CXX_STANDARD:STRING=17
+    set(CMAKE_CXX_STANDARD 11)
+  endif()
+  set(CMAKE_CXX_STANDARD_REQUIRED ON)
+  set(CMAKE_CXX_EXTENSIONS OFF)
+else()
+  set(CMAKE_CXX_FLAGS                "${CMAKE_CXX_FLAGS} -std=c++11")
+  set(CMAKE_CXX_FLAGS_DEBUG          "${CMAKE_CXX_FLAGS_DEBUG} -std=c++11")
+  set(CMAKE_CXX_FLAGS_MINSIZEREL     "${CMAKE_CXX_FLAGS_MINSIZEREL} -std=c++11")
+  set(CMAKE_CXX_FLAGS_RELEASE        "${CMAKE_CXX_FLAGS_RELEASE} -std=c++11")
+  set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS_RELWITHDEBINFO} -std=c++11")
+endif()
+
+set(CMAKE_CXX_FLAGS                  "${CMAKE_CXX_FLAGS} ${MY_CXX_WARNING_FLAGS}")
+if(MSVC_VERSION)
+  set(CMAKE_CXX_FLAGS_DEBUG          "${CMAKE_CXX_FLAGS_DEBUG} /Od /Zi /MP ${MY_CXX_WARNING_FLAGS}")
+  set(CMAKE_CXX_FLAGS_MINSIZEREL     "${CMAKE_CXX_FLAGS_MINSIZEREL} /O1 /Oi /Ob2 /Gy /MP /DNDEBUG ${MY_CXX_WARNING_FLAGS}")
+  set(CMAKE_CXX_FLAGS_RELEASE        "${CMAKE_CXX_FLAGS_RELEASE} /O2 /Oi /Ob2 /Gy /MP /DNDEBUG ${MY_CXX_WARNING_FLGAS}")
+  set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS_RELWITHDEBINFO} /O2 /Oi /Ob2 /Gy /MP /Zi ${MY_CXX_WARNING_FLAGS}")
+else()
+  set(CMAKE_CXX_FLAGS_DEBUG          "${CMAKE_CXX_FLAGS_DEBUG} -O0 -g ${MY_CXX_WARNING_FLAGS}")
+  set(CMAKE_CXX_FLAGS_MINSIZEREL     "${CMAKE_CXX_FLAGS_MINSIZEREL} -Os -DNDEBUG ${MY_CXX_WARNING_FLAGS}")
+  set(CMAKE_CXX_FLAGS_RELEASE        "${CMAKE_CXX_FLAGS_RELEASE} -O3 -DNDEBUG ${MY_CXX_WARNING_FLGAS}")
+  set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS_RELWITHDEBINFO} -O2 -g ${MY_CXX_WARNING_FLAGS}")
+endif()
+
+# Compiler-specific C++11 activation.
+if("${CMAKE_CXX_COMPILER_ID}" MATCHES "GNU" OR "${CMAKE_CXX_COMPILER_ID}" MATCHES "Intel")
+    execute_process(
+        COMMAND ${CMAKE_CXX_COMPILER} -dumpversion OUTPUT_VARIABLE GCC_VERSION)
+    # Just g++-5.0 and greater contain <codecvt> header. (test in ubuntu)
+    if(NOT (GCC_VERSION VERSION_GREATER 5.0 OR GCC_VERSION VERSION_EQUAL 5.0))
+        message(FATAL_ERROR "${PROJECT_NAME} requires g++ 5.0 or greater.")
+    endif ()
+elseif ("${CMAKE_CXX_COMPILER_ID}" MATCHES "Clang" AND ANDROID) 
+       # Need -Os cflag and cxxflags here to work with exception handling on armeabi.
+       # see  https://github.com/android-ndk/ndk/issues/573
+       # and without -stdlib=libc++ cxxflags
+elseif ("${CMAKE_CXX_COMPILER_ID}" MATCHES "Clang" AND APPLE)
+    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -stdlib=libc++")
+elseif ("${CMAKE_CXX_COMPILER_ID}" MATCHES "Clang" AND ( CMAKE_SYSTEM_NAME MATCHES "Linux" OR CMAKE_SYSTEM_NAME MATCHES "FreeBSD") )
+    execute_process(
+        COMMAND ${CMAKE_CXX_COMPILER} -dumpversion OUTPUT_VARIABLE CLANG_VERSION)
+    if(NOT (CLANG_VERSION VERSION_GREATER 4.2.1 OR CLANG_VERSION VERSION_EQUAL 4.2.1))
+        message(FATAL_ERROR "${PROJECT_NAME} requires clang 4.2.1 or greater.")
+    endif()
+    # You can use libc++ to compile this project when g++ is NOT greater than or equal to 5.0.
+    if(WITH_LIBCXX)
+        set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -stdlib=libc++")
+    endif()
+elseif(MSVC_VERSION GREATER 1800 OR MSVC_VERSION EQUAL 1800)
+  # Visual Studio 2012+ supports c++11 features 
+elseif(CMAKE_SYSTEM_NAME MATCHES "Emscripten")
+    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -stdlib=libc++")
+else()
+    message(FATAL_ERROR "Your C++ compiler does not support C++11.")
+endif()
+
+
+add_subdirectory(runtime)
+if(WITH_DEMO)
+ add_subdirectory(demo)
+endif(WITH_DEMO)
+
+# Generate CMake Package Files only if install is active
+if (ANTLR4_INSTALL)
+
+  include(GNUInstallDirs)
+  include(CMakePackageConfigHelpers)
+
+  if(NOT ANTLR4_CMAKE_DIR)
+    set(ANTLR4_CMAKE_DIR ${CMAKE_INSTALL_LIBDIR}/cmake CACHE STRING
+      "Installation directory for cmake files." FORCE )
+  endif(NOT ANTLR4_CMAKE_DIR)
+
+  set(version_runtime_config ${PROJECT_BINARY_DIR}/antlr4-runtime-config-version.cmake)
+  set(version_generator_config ${PROJECT_BINARY_DIR}/antlr4-generator-config-version.cmake)
+  set(project_runtime_config ${PROJECT_BINARY_DIR}/antlr4-runtime-config.cmake)
+  set(project_generator_config ${PROJECT_BINARY_DIR}/antlr4-generator-config.cmake)
+  set(targets_export_name antlr4-targets)
+
+  set(ANTLR4_LIB_DIR ${CMAKE_INSTALL_LIBDIR} CACHE STRING
+      "Installation directory for libraries, relative to ${CMAKE_INSTALL_PREFIX}.")
+  
+  set(ANTLR4_INCLUDE_DIR ${CMAKE_INSTALL_INCLUDEDIR}/antlr4-runtime CACHE STRING
+      "Installation directory for include files, relative to ${CMAKE_INSTALL_PREFIX}.")
+
+  configure_package_config_file(
+    cmake/antlr4-runtime.cmake.in
+    ${project_runtime_config}
+    INSTALL_DESTINATION ${ANTLR4_CMAKE_DIR}/antlr4-runtime
+    PATH_VARS 
+    ANTLR4_INCLUDE_DIR
+    ANTLR4_LIB_DIR )
+  
+  configure_package_config_file(
+    cmake/antlr4-generator.cmake.in
+    ${project_generator_config}
+    INSTALL_DESTINATION ${ANTLR4_CMAKE_DIR}/antlr4-generator
+    PATH_VARS 
+    ANTLR4_INCLUDE_DIR
+    ANTLR4_LIB_DIR )
+  
+  write_basic_package_version_file(
+    ${version_runtime_config}
+    VERSION ${ANTLR_VERSION}
+    COMPATIBILITY SameMajorVersion )
+
+  write_basic_package_version_file(
+    ${version_generator_config}
+    VERSION ${ANTLR_VERSION}
+    COMPATIBILITY SameMajorVersion )
+
+  install(EXPORT ${targets_export_name}
+          DESTINATION ${ANTLR4_CMAKE_DIR}/antlr4-runtime )
+
+  install(FILES ${project_runtime_config}
+                ${version_runtime_config}
+          DESTINATION ${ANTLR4_CMAKE_DIR}/antlr4-runtime )
+
+  install(FILES ${project_generator_config}
+                ${version_generator_config}
+          DESTINATION ${ANTLR4_CMAKE_DIR}/antlr4-generator )
+
+endif(ANTLR4_INSTALL)
+
+if(EXISTS LICENSE.txt)
+install(FILES LICENSE.txt
+        DESTINATION "share/doc/libantlr4")
+elseif(EXISTS ../../LICENSE.txt) 
+install(FILES ../../LICENSE.txt
+    DESTINATION "share/doc/libantlr4")
+endif()
+
+install(FILES README.md VERSION 
+    DESTINATION "share/doc/libantlr4")
+
+set(CPACK_PACKAGE_CONTACT "antlr-discussion@googlegroups.com")
+set(CPACK_PACKAGE_VERSION ${ANTLR_VERSION})
+include(CPack)