-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathCMakeLists.txt
More file actions
85 lines (74 loc) · 2.69 KB
/
Copy pathCMakeLists.txt
File metadata and controls
85 lines (74 loc) · 2.69 KB
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
cmake_minimum_required(VERSION 3.16)
project(muscriptor LANGUAGES C CXX)
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
# Mel conditioner tensor names exceed default GGML_MAX_NAME of 64
add_compile_definitions(GGML_MAX_NAME=128)
option(MUSCRIPTOR_CUDA "Build with ggml-cuda backend" OFF)
option(MUSCRIPTOR_BUILD_TESTS "Build C++ regression tests" ON)
if (APPLE)
option(MUSCRIPTOR_METAL "Build with ggml-metal backend" ON)
else()
option(MUSCRIPTOR_METAL "Build with ggml-metal backend" OFF)
endif()
if (APPLE AND MUSCRIPTOR_METAL)
set(GGML_METAL ON CACHE BOOL "" FORCE)
endif()
if (MUSCRIPTOR_CUDA)
set(GGML_CUDA ON CACHE BOOL "" FORCE)
# Help CMake find nvcc when Toolkit is present but compiler ID is unknown (common on aarch64).
if (NOT CMAKE_CUDA_COMPILER)
if (DEFINED ENV{CUDACXX} AND EXISTS "$ENV{CUDACXX}")
set(CMAKE_CUDA_COMPILER "$ENV{CUDACXX}" CACHE FILEPATH "" FORCE)
elseif (EXISTS "/usr/local/cuda/bin/nvcc")
set(CMAKE_CUDA_COMPILER "/usr/local/cuda/bin/nvcc" CACHE FILEPATH "" FORCE)
endif()
endif()
if (NOT CMAKE_CUDA_COMPILER)
message(FATAL_ERROR
"MUSCRIPTOR_CUDA=ON but CMAKE_CUDA_COMPILER/nvcc was not found.\n"
" export CUDACXX=$$(command -v nvcc)\n"
" # or: cmake -DCMAKE_CUDA_COMPILER=/usr/local/cuda/bin/nvcc ...")
endif()
endif()
add_subdirectory(third_party/ggml)
set(MUSCRIPTOR_CORE_SOURCES
src/backend.cpp
src/wav_io.cpp
src/resample.cpp
src/vocab.cpp
src/mt3.cpp
src/events.cpp
src/encode_helpers.cpp
src/midi_io.cpp
src/sampling.cpp
src/mel.cpp
src/transformer.cpp
src/lm.cpp
src/pipeline.cpp
)
add_library(muscriptor_core ${MUSCRIPTOR_CORE_SOURCES})
target_include_directories(muscriptor_core PUBLIC src third_party/pocketfft)
target_link_libraries(muscriptor_core PUBLIC ggml)
add_executable(muscriptor src/main.cpp)
target_link_libraries(muscriptor PRIVATE muscriptor_core)
if (MUSCRIPTOR_BUILD_TESTS)
enable_testing()
function(muscriptor_test name)
add_executable(muscriptor_test_${name} tests/cpp/test_${name}.cpp)
target_link_libraries(muscriptor_test_${name} PRIVATE muscriptor_core)
add_test(NAME ${name} COMMAND muscriptor_test_${name} WORKING_DIRECTORY ${CMAKE_SOURCE_DIR})
endfunction()
muscriptor_test(smoke)
muscriptor_test(notes)
muscriptor_test(events)
muscriptor_test(midi)
muscriptor_test(sampling)
muscriptor_test(mt3)
muscriptor_test(conditioners)
muscriptor_test(transformer)
muscriptor_test(prelude_forcing)
muscriptor_test(strict_instruments)
muscriptor_test(pipeline)
muscriptor_test(integration)
endif()