Files
NanamiAdmin 00b7c0b324 feat: add lyricResolve for resole .lrc file
feat: add backgroundDisplay for play ascii video in terminal
	feat: add musicPlayer for play music in terminal
2026-08-30 11:35:47 +08:00

84 lines
3.3 KiB
CMake

cmake_minimum_required(VERSION 3.16)
project(hatsune-miku-shoshitsu
VERSION 0.1.0
LANGUAGES CXX)
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
# --- dependencies -----------------------------------------------------------
find_package(PkgConfig REQUIRED)
find_package(Threads REQUIRED)
# Video decoding uses the FFmpeg C API (libavformat / libavcodec / libavutil /
# libswscale). On Debian: sudo apt install libavformat-dev libavcodec-dev \
# libavutil-dev libswscale-dev pkg-config
pkg_check_modules(FFMPEG REQUIRED IMPORTED_TARGET libavformat libavcodec libavutil libswscale)
# --- core library: video / lyrics / music modules ---------------------------
# MINIAUDIO_IMPLEMENTATION lives in musicPlayer.cpp, so it is compiled once.
add_library(hms-core STATIC
modules/backgroundDisplay.cpp
modules/lyricResolve.cpp
modules/musicPlayer.cpp)
target_include_directories(hms-core PUBLIC modules third_party)
target_link_libraries(hms-core PUBLIC
PkgConfig::FFMPEG
Threads::Threads
${CMAKE_DL_LIBS})
# miniaudio audio backends. Disable backends whose dev headers are missing so
# the build still succeeds; at runtime the device will just be unavailable.
if(WIN32)
# WASAPI / WinMM on Windows (MSYS2 / MSVC)
target_link_libraries(hms-core PUBLIC ole32 winmm)
elseif(UNIX AND NOT APPLE)
pkg_check_modules(ALSA QUIET IMPORTED_TARGET alsa)
pkg_check_modules(PULSE QUIET IMPORTED_TARGET libpulse-simple)
if(ALSA_FOUND)
target_link_libraries(hms-core PUBLIC PkgConfig::ALSA)
# Lets musicPlayer suppress ALSA's own error chatter (which would
# otherwise corrupt the TUI when no sound card exists).
target_compile_definitions(hms-core PUBLIC HMS_HAS_ALSA=1)
else()
target_compile_definitions(hms-core PUBLIC MA_NO_ALSA)
endif()
if(PULSE_FOUND)
target_link_libraries(hms-core PUBLIC PkgConfig::PULSE)
else()
target_compile_definitions(hms-core PUBLIC
MA_NO_PULSEAUDIO MA_NO_JACK MA_NO_OSS MA_NO_SNDIO)
endif()
target_link_libraries(hms-core PUBLIC m)
endif()
# --- the uninstall-entry binary ---------------------------------------------
# Placeholder main() for now (uninstall.cpp); will become the real uninstall
# hook that runs the show.
add_executable(hatsune-miku-shoshitsu uninstall.cpp)
target_link_libraries(hatsune-miku-shoshitsu PRIVATE hms-core)
# Installed to /usr/bin — the Debian packaging relies on this rule.
install(TARGETS hatsune-miku-shoshitsu
RUNTIME DESTINATION bin)
# --- demo driver: previews the show (video + music + lyrics) ----------------
# Default resource paths are baked in as string-literal macros. TO_CMAKE_PATH
# normalises to forward slashes so the literals stay valid on Windows builds.
file(TO_CMAKE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/asciivision/demo-videos/demo.mp4" HMS_DEMO_VIDEO)
file(TO_CMAKE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/res/music.flac" HMS_DEMO_MUSIC)
file(TO_CMAKE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/res/lyric.lrc" HMS_DEMO_LYRICS)
add_executable(hatsune-miku-demo tools/demo.cpp)
target_compile_definitions(hatsune-miku-demo PRIVATE
HMS_DEMO_VIDEO="${HMS_DEMO_VIDEO}"
HMS_DEMO_MUSIC="${HMS_DEMO_MUSIC}"
HMS_DEMO_LYRICS="${HMS_DEMO_LYRICS}")
target_link_libraries(hatsune-miku-demo PRIVATE hms-core)