diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 0000000..c7e4c0e --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,114 @@ +cmake_minimum_required(VERSION 3.1) +project(marisa CXX) + +include(GNUInstallDirs) + +option(BUILD_SHARED_LIBS "Build as shared library" OFF) +option(BUILD_TOOLS "Build tools" ON) +option(ENABLE_TESTS "Build and run tests" ON) + +if(BUILD_SHARED_LIBS) + set(MARISA_LIBRARY_TYPE SHARED) +else() + set(MARISA_LIBRARY_TYPE STATIC) +endif(BUILD_SHARED_LIBS) + +set(CMAKE_CXX_STANDARD 11) + +if(NOT CMAKE_BUILD_TYPE) + set(CMAKE_BUILD_TYPE Debug) +endif() + +set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall") + +if(NOT MSVC) + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Weffc++ -Wextra -Wconversion") +endif() + +if(BUILD_SHARED_LIBS AND MSVC) + set(CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS TRUE) +endif() + +include_directories("${PROJECT_SOURCE_DIR}/include") +include_directories("${PROJECT_SOURCE_DIR}/lib") + +set(HDR_COMPAT + include/marisa.h) + +set(HDR_PUBLIC + include/marisa/agent.h + include/marisa/base.h + include/marisa/exception.h + include/marisa/iostream.h + include/marisa/key.h + include/marisa/keyset.h + include/marisa/query.h + include/marisa/scoped-array.h + include/marisa/scoped-ptr.h + include/marisa/stdio.h + include/marisa/trie.h) +add_library(marisa ${MARISA_LIBRARY_TYPE} + "${PROJECT_SOURCE_DIR}/lib/marisa/grimoire/io/mapper.cc" + "${PROJECT_SOURCE_DIR}/lib/marisa/grimoire/io/reader.cc" + "${PROJECT_SOURCE_DIR}/lib/marisa/grimoire/io/writer.cc" + "${PROJECT_SOURCE_DIR}/lib/marisa/grimoire/trie/tail.cc" + "${PROJECT_SOURCE_DIR}/lib/marisa/grimoire/trie/louds-trie.cc" + "${PROJECT_SOURCE_DIR}/lib/marisa/grimoire/vector/bit-vector.cc" + "${PROJECT_SOURCE_DIR}/lib/marisa/keyset.cc" + "${PROJECT_SOURCE_DIR}/lib/marisa/trie.cc" + "${PROJECT_SOURCE_DIR}/lib/marisa/agent.cc") + +install(TARGETS marisa + RUNTIME DESTINATION ${CMAKE_INSTALL_FULL_BINDIR} + LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} + ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}) + +if(BUILD_TOOLS) + add_library(cmdopt OBJECT "${PROJECT_SOURCE_DIR}/tools/cmdopt.cc") + set(TOOLS + marisa-benchmark + marisa-build + marisa-common-prefix-search + marisa-dump + marisa-lookup + marisa-predictive-search + marisa-reverse-lookup + ) + + foreach(TOOL ${TOOLS}) + add_executable(${TOOL} "${PROJECT_SOURCE_DIR}/tools/${TOOL}.cc") + target_link_libraries(${TOOL} PRIVATE marisa cmdopt) + install(TARGETS ${TOOL} + RUNTIME DESTINATION ${CMAKE_INSTALL_FULL_BINDIR}) + endforeach(TOOL) +endif() + +if(ENABLE_TESTS) + enable_testing() + set(TESTS + base-test + io-test + trie-test + vector-test + marisa-test + ) + + foreach(TEST ${TESTS}) + add_executable(${TEST} "${PROJECT_SOURCE_DIR}/tests/${TEST}.cc") + target_link_libraries(${TEST} PRIVATE marisa) + add_test(${TEST} ${TEST}) + endforeach(TEST) +endif() + +configure_file( + ${PROJECT_SOURCE_DIR}/marisa.pc.in + ${PROJECT_BINARY_DIR}/marisa.pc + @ONLY) +install(FILES ${PROJECT_BINARY_DIR}/marisa.pc + DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig) + +install(FILES ${HDR_COMPAT} + DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}) + +install(FILES ${HDR_PUBLIC} + DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/marisa)