diff options
author | Adrian Thurston <thurston@colm.net> | 2020-10-18 11:44:43 -0700 |
---|---|---|
committer | Adrian Thurston <thurston@colm.net> | 2020-10-18 11:44:43 -0700 |
commit | 85b76476de71f43d3eb25d6bef4ee6d84cb71f6c (patch) | |
tree | 65c127fbcf70e62d8a4848be2c9c4ff7d74d86a1 /src/libfsm/CMakeLists.txt | |
parent | 86bb5882a70224a29650ccfa1e46c9b023c2a3ef (diff) | |
download | colm-85b76476de71f43d3eb25d6bef4ee6d84cb71f6c.tar.gz |
lift all source code into src/ dirinto-src
Diffstat (limited to 'src/libfsm/CMakeLists.txt')
-rw-r--r-- | src/libfsm/CMakeLists.txt | 154 |
1 files changed, 154 insertions, 0 deletions
diff --git a/src/libfsm/CMakeLists.txt b/src/libfsm/CMakeLists.txt new file mode 100644 index 00000000..3e797981 --- /dev/null +++ b/src/libfsm/CMakeLists.txt @@ -0,0 +1,154 @@ +# Package name +set(_PACKAGE_NAME ragel) + +# Read project configuration from ../configure.ac file +file(STRINGS ../configure.ac _PROJECT_CONFIGS + REGEX "(RAGEL_VERSION=)|(RAGEL_PUBDATE=)") +foreach(_PROJECT_CONFIG ${_PROJECT_CONFIGS}) + if(_PROJECT_CONFIG MATCHES "RAGEL_VERSION=\"([^\"]+)") + string(STRIP ${CMAKE_MATCH_1} RAGEL_VERSION) + endif() + if(_PROJECT_CONFIG MATCHES "RAGEL_PUBDATE=\"([^\"]+)") + string(STRIP ${CMAKE_MATCH_1} RAGEL_PUBDATE) + endif() +endforeach() + +## Generate headers +configure_file(version.h.cmake.in version.h @ONLY) +configure_file(ragel-config.cmake.in + "${PROJECT_BINARY_DIR}/${_PACKAGE_NAME}-config.cmake" @ONLY) + +# Runtime headers +set(RUNTIME_HDR + action.h fsmgraph.h ragel.h common.h + gendata.h redfsm.h dot.h) + +# Other CMake modules +include(GNUInstallDirs) + +# libfsm +add_library(libfsm + buffer.h codegen.h + actloop.h actexp.h + tables.h + binary.h bingoto.h binbreak.h binvar.h + flat.h flatgoto.h flatbreak.h flatvar.h + switch.h switchgoto.h switchbreak.h switchvar.h + goto.h gotoloop.h gotoexp.h + ipgoto.h asm.h + idbase.cc fsmstate.cc fsmbase.cc fsmattach.cc fsmmin.cc fsmgraph.cc + fsmap.cc fsmcond.cc fsmnfa.cc common.cc redfsm.cc gendata.cc + allocgen.cc codegen.cc + actexp.cc binvar.cc + tables.cc tabgoto.cc tabbreak.cc tabvar.cc + binary.cc bingoto.cc binbreak.cc actloop.cc + flat.cc flatgoto.cc flatbreak.cc flatvar.cc + switch.cc switchgoto.cc switchbreak.cc switchvar.cc + goto.cc gotoloop.cc gotoexp.cc ipgoto.cc + dot.cc asm.cc) + +target_include_directories(libfsm + PUBLIC + $<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}> + $<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}/../src> + $<BUILD_INTERFACE:${CMAKE_CURRENT_LIST_DIR}/../aapl> + $<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>) + +set_target_properties(libfsm PROPERTIES + OUTPUT_NAME fsm) + +# libragel +add_library(libragel + # dist + parsedata.h parsetree.h inputdata.h pcheck.h reducer.h rlscan.h load.h + parsetree.cc longest.cc parsedata.cc inputdata.cc load.cc reducer.cc) + +if(BUILD_STANDALONE) + # libragel acts as an intermediate library so we can apply + # flags we want to apply to all ragel targets to libragel + # and they'll automatically propogate. This is a best effort + # to get `-static` placed sooner in the link line where it + # matters at least. + if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU") + target_link_libraries(libragel PUBLIC -static) + else() + message(FATAL_ERROR "Unsupported toolset for standalone build.") + endif() +endif() + +target_link_libraries(libragel PRIVATE colm::libcolm) + +target_include_directories(libragel + PUBLIC + $<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}> + $<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}/..> + $<BUILD_INTERFACE:${CMAKE_CURRENT_LIST_DIR}> + $<BUILD_INTERFACE:${CMAKE_CURRENT_LIST_DIR}/..> + $<BUILD_INTERFACE:${CMAKE_CURRENT_LIST_DIR}/../aapl> + $<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>) + +set_target_properties(libragel PROPERTIES + OUTPUT_NAME ragel) + +set_property(TARGET libragel APPEND PROPERTY + COMPILE_DEFINITIONS BINDIR="${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_BINDIR}") + +# ragel program + +set(RAGEL_LM + rlparse.lm + ragel.lm + rlreduce.lm) + +add_custom_command(OUTPUT + "${CMAKE_CURRENT_BINARY_DIR}/parse.c" + "${CMAKE_CURRENT_BINARY_DIR}/rlreduce.cc" + DEPENDS ${RAGEL_LM} #$(COLM_BINDEP) + COMMAND colm::colm + ARGS -c -b rlparseC + -o "${CMAKE_CURRENT_BINARY_DIR}/parse.c" + -m "${CMAKE_CURRENT_BINARY_DIR}/rlreduce.cc" + rlparse.lm + WORKING_DIRECTORY "${CMAKE_CURRENT_LIST_DIR}") + +add_executable(ragel + main.cc + "${CMAKE_CURRENT_BINARY_DIR}/parse.c" + "${CMAKE_CURRENT_BINARY_DIR}/rlreduce.cc") + +target_link_libraries(ragel libragel libfsm) + +foreach(_SUBDIR host-ruby host-asm host-julia host-ocaml host-c host-d + host-csharp host-go host-java host-rust host-crack host-js) + add_subdirectory(${_SUBDIR}) +endforeach() + +if(${PROJECT_NAME}_MAKE_INSTALL) + if(NOT DEFINED CMAKE_INSTALL_CMAKEDIR) + set(CMAKE_INSTALL_CMAKEDIR + "${CMAKE_INSTALL_LIBDIR}/cmake/${_PACKAGE_NAME}" + CACHE STRING "CMake packages") + endif() + install(FILES ${RUNTIME_HDR} + DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}/ragel") + install(TARGETS libfsm libragel ragel + EXPORT ${_PACKAGE_NAME}-targets + RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}" + LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}" + ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}") + install(EXPORT ${_PACKAGE_NAME}-targets + NAMESPACE ${_PACKAGE_NAME}:: + DESTINATION "${CMAKE_INSTALL_CMAKEDIR}") + export(EXPORT ${_PACKAGE_NAME}-targets + NAMESPACE ${_PACKAGE_NAME}:: + FILE "${PROJECT_BINARY_DIR}/${_PACKAGE_NAME}-targets.cmake") + include(CMakePackageConfigHelpers) + write_basic_package_version_file( + "${PROJECT_BINARY_DIR}/${_PACKAGE_NAME}-config-version.cmake" + VERSION ${RAGEL_VERSION} + COMPATIBILITY AnyNewerVersion) + install(FILES + "${PROJECT_BINARY_DIR}/${_PACKAGE_NAME}-config.cmake" + "${PROJECT_BINARY_DIR}/${_PACKAGE_NAME}-config-version.cmake" + DESTINATION "${CMAKE_INSTALL_CMAKEDIR}") +endif() |