xtts-gguf / cpp /CMakeLists.txt
bnewton-genmedlabs's picture
Initial GGUF implementation with C++ inference engine
4688879 verified
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
)