| cmake_minimum_required(VERSION 3.14) # I like pie | |
| project(PocketSphinx VERSION 5.0.0 | |
| DESCRIPTION "A small speech recognizer" | |
| HOMEPAGE_URL "https://github.com/cmusphinx/pocketsphinx" | |
| LANGUAGES C) | |
| include(CMakePrintHelpers) | |
| set(PACKAGE_NAME ${PROJECT_NAME}) | |
| string(TOLOWER ${PROJECT_NAME} PROJECT_SHORTNAME) | |
| set(PACKAGE_VERSION ${PROJECT_VERSION}) | |
| set(PACKAGE_STRING "${PROJECT_NAME} ${PROJECT_VERSION}") | |
| set(PACKAGE_TARNAME "${PROJECT_SHORTNAME}-${PROJECT_VERSION}") | |
| set(PACKAGE_URL ${PROJECT_HOMEPAGE_URL}) | |
| set(PACKAGE_BUGREPORT dhdaines@gmail.com) | |
| if(CMAKE_PROJECT_NAME STREQUAL PROJECT_NAME) | |
| include(CTest) | |
| add_custom_target(check COMMAND ${CMAKE_CTEST_COMMAND}) | |
| endif() | |
| include(CheckTypeSize) | |
| include(CheckSymbolExists) | |
| include(CheckLibraryExists) | |
| include(TestBigEndian) | |
| include(GNUInstallDirs) | |
| CHECK_INCLUDE_FILE(unistd.h HAVE_UNISTD_H) | |
| CHECK_INCLUDE_FILE(sys/types.h HAVE_SYS_TYPES_H) | |
| CHECK_INCLUDE_FILE(sys/stat.h HAVE_SYS_STAT_H) | |
| CHECK_INCLUDE_FILE(stdint.h HAVE_STDINT_H) | |
| CHECK_SYMBOL_EXISTS(snprintf stdio.h HAVE_SNPRINTF) | |
| CHECK_SYMBOL_EXISTS(popen stdio.h HAVE_POPEN) | |
| CHECK_TYPE_SIZE(long LONG) | |
| CHECK_TYPE_SIZE("long long" LONG_LONG) | |
| # OMG CMake is so incredibly awful | |
| set(SIZEOF_LONG ${LONG}) | |
| set(SIZEOF_LONG_LONG ${LONG_LONG}) | |
| cmake_print_variables(SIZEOF_LONG SIZEOF_LONG_LONG) | |
| test_big_endian(WORDS_BIGENDIAN) | |
| cmake_print_variables(WORDS_BIGENDIAN) | |
| # Don't do this | |
| #if(CMAKE_BUILD_TYPE STREQUAL Debug) | |
| # set(SPHINX_DEBUG 1) | |
| #endif() | |
| # Compiles some code as the wrong endianness in order to ensure that | |
| # it works properly | |
| if(DEBUG_ENDIAN) | |
| add_definitions(-DDEBUG_ENDIAN) | |
| endif() | |
| cmake_print_variables(SPHINX_DEBUG DEBUG_ENDIAN) | |
| if(MSVC) | |
| add_compile_options(/W3) | |
| else() | |
| add_compile_options(-Wall -Wextra) | |
| endif() | |
| option(FIXED_POINT "Build using fixed-point math" OFF) | |
| if(NOT DEFAULT_RADIX) | |
| set(DEFAULT_RADIX 12) | |
| endif() | |
| cmake_print_variables(FIXED_POINT DEFAULT_RADIX) | |
| # Maybe not a great idea, but it does work on both Windows and Linux | |
| set (CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}) | |
| set (CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}) | |
| set (CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}) | |
| configure_file(config.h.in config.h) | |
| configure_file(sphinx_config.h.in include/pocketsphinx/sphinx_config.h) | |
| add_definitions(-DHAVE_CONFIG_H) | |
| if(SKBUILD) | |
| # Python build | |
| # Allow compiling against systemwide libpocketsphinx.so for Docker | |
| # or distribution packages | |
| option(USE_INSTALLED_POCKETSPHINX "Build using installed PocketSphinx library" OFF) | |
| if(USE_INSTALLED_POCKETSPHINX) | |
| find_package(PkgConfig) | |
| # Get the libraries and headers | |
| pkg_check_modules(POCKETSPHINX pocketsphinx) | |
| # Set the model directory to the systemwide one. Don't try to use | |
| # CMAKE_INSTALL_FULL_DATADIR! That is not what you want. | |
| pkg_get_variable(MODELDIR pocketsphinx modeldir) | |
| else() | |
| add_subdirectory(src) | |
| endif() | |
| add_subdirectory(cython) | |
| else() | |
| # C build | |
| # Set the default model directory to the install location | |
| set(MODELDIR ${CMAKE_INSTALL_FULL_DATADIR}/pocketsphinx/model) | |
| option(BUILD_SHARED_LIBS "Build using shared libraries" OFF) | |
| if(BUILD_SHARED_LIBS) | |
| add_definitions(-DSPHINX_DLL) | |
| endif() | |
| add_subdirectory(src) | |
| add_subdirectory(model) | |
| add_subdirectory(doxygen) | |
| add_subdirectory(programs) | |
| add_subdirectory(examples) | |
| if(CMAKE_PROJECT_NAME STREQUAL PROJECT_NAME AND BUILD_TESTING) | |
| add_subdirectory(test) | |
| endif() | |
| configure_file(pocketsphinx.pc.in pocketsphinx.pc @ONLY) | |
| install(TARGETS pocketsphinx LIBRARY) | |
| install(DIRECTORY include TYPE INCLUDE) | |
| install(DIRECTORY ${CMAKE_BINARY_DIR}/include TYPE INCLUDE) | |
| install(FILES ${CMAKE_BINARY_DIR}/pocketsphinx.pc DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig) | |
| option(BUILD_GSTREAMER "Build GStreamer plugin" OFF) | |
| if(BUILD_GSTREAMER) | |
| add_subdirectory(gst) | |
| endif() | |
| endif() | |
| # Can print this at the end, just to know what it was | |
| cmake_print_variables(MODELDIR) | |