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
) |