cmake_minimum_required(VERSION 3.20)
project(LucyOptionalSpeech VERSION 1.52.0 LANGUAGES C)
# Standalone GPL-3.0-or-later speech executable. Never linked into lucy_core.
if(NOT ESPEAK_SOURCE OR NOT ESPEAK_DATA)
  message(FATAL_ERROR "ESPEAK_SOURCE and ESPEAK_DATA are required")
endif()
file(TO_CMAKE_PATH "${ESPEAK_SOURCE}" ESPEAK_SOURCE)
file(TO_CMAKE_PATH "${ESPEAK_DATA}" ESPEAK_DATA)
set(USE_KLATT ON)
set(USE_ASYNC OFF)
set(USE_LIBPCAUDIO OFF)
set(USE_LIBSONIC OFF)
set(USE_MBROLA OFF)
set(USE_SPEECHPLAYER OFF)
set(HAVE_MKSTEMP 1)
set(CMAKE_INSTALL_PREFIX "/")
add_library(espeak-include INTERFACE)
target_include_directories(espeak-include INTERFACE "${ESPEAK_SOURCE}/src/include" "${ESPEAK_SOURCE}/src/include/compat")
add_subdirectory("${ESPEAK_SOURCE}/src/ucd-tools" ucd)
add_subdirectory("${ESPEAK_SOURCE}/src/libespeak-ng" lib)
if(EMSCRIPTEN)
  # musl declares the wide character functions in wchar.h too. Include that
  # before upstream's wctype.h macro aliases, preserving its Unicode tables.
  target_compile_options(espeak-ng PRIVATE -include wchar.h)
endif()
add_executable(speech synth.c)
target_link_libraries(speech PRIVATE espeak-ng)
if(EMSCRIPTEN)
  set_target_properties(speech PROPERTIES OUTPUT_NAME espeak SUFFIX .js)
  target_link_options(speech PRIVATE --no-entry "-sMODULARIZE=1" "-sEXPORT_ES6=1"
    "-sEXPORT_NAME=createEspeakModule" "-sENVIRONMENT=worker,node"
    "-sALLOW_MEMORY_GROWTH=1" "-sFILESYSTEM=1"
    "-sEXPORTED_FUNCTIONS=['_lucy_espeak_init','_lucy_espeak_synth','_lucy_espeak_pcm','_malloc','_free']"
    "-sEXPORTED_RUNTIME_METHODS=['ccall','HEAP16','lengthBytesUTF8','stringToUTF8']"
    "SHELL:--preload-file \"${ESPEAK_DATA}@/espeak-ng-data\"")
else()
  target_sources(speech PRIVATE windows_main.c)
  target_link_libraries(speech PRIVATE winmm)
  set_target_properties(speech PROPERTIES OUTPUT_NAME espeak-ng)
endif()
