feat: add backgroundDisplay for play ascii video in terminal feat: add musicPlayer for play music in terminal
84 lines
3.3 KiB
CMake
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)
|