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)