cmake_minimum_required(VERSION 3.22) project(SubWave LANGUAGES CXX) set(CMAKE_CXX_STANDARD 20) set(CMAKE_CXX_STANDARD_REQUIRED ON) set(CMAKE_AUTOMOC ON) set(CMAKE_AUTORCC ON) # dependencies find_package(Qt6 REQUIRED COMPONENTS Core Widgets Multimedia OpenGL OpenGLWidgets ) find_package(PkgConfig REQUIRED) pkg_check_modules(FFMPEG REQUIRED IMPORTED_TARGET libavformat libavcodec libavutil libswresample ) pkg_check_modules(FFTW REQUIRED IMPORTED_TARGET fftw3) # sources set(SOURCES src/main.cpp src/config/Config.cpp src/gui/CoverArtWidget.cpp src/gui/SpectrogramWidget.cpp src/gui/GradientDialog.cpp src/gui/EqualizerWidget.cpp src/gui/EqualizerPresetManager.cpp src/gui/FreqCurveWidget.cpp src/gui/TrackDelegate.cpp src/gui/MainWindow.cpp src/gui/NowPlayingPanel.cpp # controllers src/controllers/PlaybackController.cpp src/controllers/LibraryController.cpp # engine src/engine/AudioEngine.cpp src/engine/EqProcessor.cpp src/engine/SpectrumAnalyzer.cpp src/engine/MusicLibrary.cpp src/engine/MetadataReader.cpp src/engine/AlbumReencoder.cpp # ffmpeg src/engine/ffmpeg/FormatContext.cpp src/engine/ffmpeg/CodecContext.cpp src/engine/ffmpeg/Resampler.cpp src/engine/ffmpeg/FFmpegDecoder.cpp # playlists src/playlists/PlaylistModel.cpp src/playlists/PlaylistManager.cpp src/playlists/PlaylistCreatorDialog.cpp src/playlists/PlaylistBrowserDialog.cpp # reencode src/gui/ReencodeDialog.cpp ) set(HEADERS src/config/Config.h src/gui/CoverArtWidget.h src/gui/SpectrogramWidget.h src/gui/GradientDialog.h src/gui/EqualizerWidget.h src/gui/EqualizerPresetManager.h src/gui/FreqCurveWidget.h src/gui/TrackDelegate.h src/gui/MainWindow.h src/gui/NowPlayingPanel.h # controllers src/controllers/PlaybackController.h src/controllers/LibraryController.h # engine src/engine/AudioEngine.h src/engine/EqProcessor.h src/engine/SpectrumAnalyzer.h src/engine/AudioBuffer.h src/engine/Track.h src/engine/MetadataReader.h src/engine/MusicLibrary.h src/engine/ReencodeJob.h src/engine/AlbumReencoder.h # ffmpeg wrapper src/engine/ffmpeg/FormatContext.h src/engine/ffmpeg/CodecContext.h src/engine/ffmpeg/Resampler.h src/engine/ffmpeg/FFmpegDecoder.h # playlists src/playlists/PlaylistModel.h src/playlists/PlaylistManager.h src/playlists/PlaylistCreatorDialog.h src/playlists/PlaylistBrowserDialog.h # reencode src/gui/ReencodeDialog.h ) # qrc resources set(RESOURCES src/shaders.qrc src/application.qrc ) # target add_executable(SubWave ${SOURCES} ${HEADERS} ${RESOURCES}) if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES) message(STATUS "Setting build type to 'RelWithDebInfo' as none was specified.") set(CMAKE_BUILD_TYPE "RelWithDebInfo" CACHE STRING "Choose the type of build." FORCE) endif() if(MSVC) target_compile_options(SubWave PRIVATE /O2 /fp:fast) else() target_compile_options(SubWave PRIVATE -O3 -ffast-math -march=native) endif() # headers target_include_directories(SubWave PRIVATE src src/config src/controllers src/engine src/engine/ffmpeg src/playlists src/gui ) # link to qt and ffmpeg and fftw target_link_libraries(SubWave PRIVATE Qt6::Core Qt6::Widgets Qt6::Multimedia Qt6::OpenGL Qt6::OpenGLWidgets PkgConfig::FFMPEG PkgConfig::FFTW ) # For windows stupid ahh if(WIN32) set_target_properties(SubWave PROPERTIES WIN32_EXECUTABLE TRUE) endif()