File size: 3,617 Bytes
4688879
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
cmake_minimum_required(VERSION 3.10)
project(xtts_inference)

set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

# Options
option(BUILD_SHARED_LIBS "Build shared libraries" ON)
option(XTTS_BUILD_TESTS "Build tests" OFF)
option(XTTS_USE_CUDA "Use CUDA acceleration" OFF)
option(XTTS_USE_METAL "Use Metal acceleration (iOS/macOS)" OFF)

# Find dependencies
find_package(Threads REQUIRED)

# GGML configuration
set(GGML_DIR "${CMAKE_CURRENT_SOURCE_DIR}/ggml" CACHE PATH "Path to GGML")
if(NOT EXISTS ${GGML_DIR})
    message(STATUS "GGML not found, downloading...")
    execute_process(
        COMMAND git clone https://github.com/ggerganov/ggml.git ${GGML_DIR}
        RESULT_VARIABLE GIT_RESULT
    )
    if(NOT GIT_RESULT EQUAL "0")
        message(FATAL_ERROR "Failed to download GGML")
    endif()
endif()

# Add GGML
add_subdirectory(${GGML_DIR} ggml_build)

# XTTS library
add_library(xtts_inference
    xtts_inference.cpp
    xtts_inference.h
)

target_include_directories(xtts_inference PUBLIC
    ${CMAKE_CURRENT_SOURCE_DIR}
    ${GGML_DIR}/include
)

target_link_libraries(xtts_inference
    ggml
    ${CMAKE_THREAD_LIBS_INIT}
)

# Platform-specific configurations
if(ANDROID)
    target_compile_definitions(xtts_inference PRIVATE XTTS_ANDROID)
    target_link_libraries(xtts_inference log android)
elseif(IOS)
    target_compile_definitions(xtts_inference PRIVATE XTTS_IOS)
    set_target_properties(xtts_inference PROPERTIES
        FRAMEWORK TRUE
        MACOSX_FRAMEWORK_IDENTIFIER com.genmedlabs.xtts
    )
endif()

# CUDA support
if(XTTS_USE_CUDA)
    find_package(CUDA REQUIRED)
    target_compile_definitions(xtts_inference PRIVATE GGML_USE_CUDA)
    target_link_libraries(xtts_inference ${CUDA_LIBRARIES})
endif()

# Metal support (iOS/macOS)
if(XTTS_USE_METAL)
    target_compile_definitions(xtts_inference PRIVATE GGML_USE_METAL)
    find_library(METAL_FRAMEWORK Metal REQUIRED)
    find_library(METALPERFORMANCE_FRAMEWORK MetalPerformanceShaders REQUIRED)
    target_link_libraries(xtts_inference
        ${METAL_FRAMEWORK}
        ${METALPERFORMANCE_FRAMEWORK}
    )
endif()

# Optimization flags
if(CMAKE_BUILD_TYPE STREQUAL "Release")
    if(CMAKE_CXX_COMPILER_ID MATCHES "GNU|Clang")
        target_compile_options(xtts_inference PRIVATE
            -O3
            -march=native
            -ffast-math
            -funroll-loops
        )
    endif()
endif()

# React Native module (optional)
if(BUILD_REACT_NATIVE)
    add_library(xtts_rn MODULE
        ../react-native/XTTSModule.cpp
    )

    target_include_directories(xtts_rn PRIVATE
        ${CMAKE_CURRENT_SOURCE_DIR}
        ${REACT_NATIVE_DIR}/ReactCommon/jsi
        ${REACT_NATIVE_DIR}/ReactCommon/turbomodule/core
    )

    target_link_libraries(xtts_rn
        xtts_inference
        jsi
        turbomodule
    )
endif()

# Installation
install(TARGETS xtts_inference
    LIBRARY DESTINATION lib
    ARCHIVE DESTINATION lib
    RUNTIME DESTINATION bin
    FRAMEWORK DESTINATION Frameworks
)

install(FILES xtts_inference.h
    DESTINATION include
)

# Tests
if(XTTS_BUILD_TESTS)
    add_executable(xtts_test
        test/xtts_test.cpp
    )
    target_link_libraries(xtts_test xtts_inference)
    enable_testing()
    add_test(NAME xtts_test COMMAND xtts_test)
endif()

# Package configuration
include(CMakePackageConfigHelpers)

configure_package_config_file(
    "${CMAKE_CURRENT_SOURCE_DIR}/cmake/XTTSConfig.cmake.in"
    "${CMAKE_CURRENT_BINARY_DIR}/XTTSConfig.cmake"
    INSTALL_DESTINATION lib/cmake/XTTS
)

install(FILES
    "${CMAKE_CURRENT_BINARY_DIR}/XTTSConfig.cmake"
    DESTINATION lib/cmake/XTTS
)