37 lines
1.1 KiB
CMake
37 lines
1.1 KiB
CMake
# Copyright 2017 the Monicelli project authors. All rights reserved.
|
|
# Use of this source code is governed by a GPLv3 license, see LICENSE.txt.
|
|
|
|
find_program(RAGEL ragel)
|
|
|
|
if (${RAGEL} STREQUAL "RAGEL-NOTFOUND")
|
|
message(FATAL_ERROR "Please install ragel to compile Monicelli.")
|
|
else()
|
|
message(STATUS "Found ragel: ${RAGEL}")
|
|
endif()
|
|
|
|
function(add_ragel_library name ragel_source)
|
|
set(generated_source "${ragel_source}.cpp")
|
|
set(extra_sources "${ARGN}")
|
|
|
|
add_custom_command(
|
|
OUTPUT "${generated_source}"
|
|
MAIN_DEPENDENCY "${ragel_source}"
|
|
COMMAND ${RAGEL} -G2 "${CMAKE_CURRENT_SOURCE_DIR}/${ragel_source}" -o "${generated_source}"
|
|
WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}"
|
|
VERBATIM
|
|
)
|
|
|
|
add_library(${name} "${generated_source}" "${extra_sources}")
|
|
|
|
set_target_properties(${name}
|
|
PROPERTIES
|
|
CXX_STANDARD 11
|
|
CXX_STANDARD_REQUIRED true
|
|
)
|
|
|
|
# The lexer uses implicit fallthroughs all over, but it's OK.
|
|
target_compile_options(${name} PRIVATE -Wno-implicit-fallthrough)
|
|
|
|
target_include_directories(${name} PUBLIC ${CMAKE_CURRENT_SOURCE_DIR})
|
|
endfunction()
|