CMakeLists.txt 3,57 Kio
cmake_minimum_required(VERSION 3.5)
project(Vivy VERSION 0.1 LANGUAGES CXX)
set(CMAKE_INCLUDE_CURRENT_DIR ON)
cmake_policy(SET CMP0100 NEW) # Let cmake use moc and uic for .hh files
set(CMAKE_AUTOUIC ON)
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC ON)
set(CMAKE_CXX_STANDARD 20)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(THREADS_PREFER_PTHREAD_FLAG ON)
# Find all dependencies
find_package(QT NAMES Qt6 Qt5 COMPONENTS Widgets REQUIRED)
find_package(Qt${QT_VERSION_MAJOR} COMPONENTS Widgets REQUIRED)
find_library(AVCODEC_LIBRARY avcodec 4.0 REQUIRED)
find_library(AVUTIL_LIBRARY avutil 4.0 REQUIRED)
find_library(SWRESAMPLE_LIBRARY swresample REQUIRED)
find_library(AVFORMAT_LIBRARY avformat REQUIRED)
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fopenmp")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fopenmp")
# Grab all files
file(GLOB Vivy_SRC
"${CMAKE_CURRENT_SOURCE_DIR}/src/*.cc"
"${CMAKE_CURRENT_SOURCE_DIR}/src/Document/*.cc"
"${CMAKE_CURRENT_SOURCE_DIR}/src/Ass/*.cc"
"${CMAKE_CURRENT_SOURCE_DIR}/src/Lib/*.cc"
"${CMAKE_CURRENT_SOURCE_DIR}/src/UI/*.cc"
)
file(GLOB Vivy_INC
"${CMAKE_CURRENT_SOURCE_DIR}/src/*.hh"
"${CMAKE_CURRENT_SOURCE_DIR}/src/Document/*.hh"
"${CMAKE_CURRENT_SOURCE_DIR}/src/Ass/*.hh"
"${CMAKE_CURRENT_SOURCE_DIR}/src/Lib/*.hh"
"${CMAKE_CURRENT_SOURCE_DIR}/src/UI/*.hh"
)
set(PROJECT_SOURCES
${Vivy_SRC}
${Vivy_INC}
)
# Add the Vivy executable
if(${QT_VERSION_MAJOR} GREATER_EQUAL 6)
qt_add_executable(Vivy
MANUAL_FINALIZATION
${PROJECT_SOURCES}
utils/rsc/VivyRessources.qrc
)
else()
add_executable(Vivy
${PROJECT_SOURCES}
utils/rsc/VivyRessources.qrc
)
endif()
# Link dependencies to Vivy
target_link_libraries(Vivy PRIVATE Qt${QT_VERSION_MAJOR}::Widgets)
target_link_libraries(Vivy PRIVATE ${AVCODEC_LIBRARY})
target_link_libraries(Vivy PRIVATE ${AVUTIL_LIBRARY})
target_link_libraries(Vivy PRIVATE ${SWRESAMPLE_LIBRARY})
target_link_libraries(Vivy PRIVATE ${AVFORMAT_LIBRARY})
# Headers related things
target_include_directories(Vivy PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/inc)
target_precompile_headers(Vivy PRIVATE
# ASS headers
"${CMAKE_CURRENT_SOURCE_DIR}/src/Ass/Ass.hh"
"${CMAKE_CURRENT_SOURCE_DIR}/src/Ass/Line.hh"
"${CMAKE_CURRENT_SOURCE_DIR}/src/Ass/Syl.hh"
"${CMAKE_CURRENT_SOURCE_DIR}/src/Ass/Style.hh"
"${CMAKE_CURRENT_SOURCE_DIR}/src/Ass/AssFactory.hh"
"${CMAKE_CURRENT_SOURCE_DIR}/src/Ass/Char.hh"
# Libs
"${CMAKE_CURRENT_SOURCE_DIR}/src/Lib/Utils.hh"
"${CMAKE_CURRENT_SOURCE_DIR}/src/Lib/Audio.hh"
# Document headers
"${CMAKE_CURRENT_SOURCE_DIR}/src/Document/VivyDocument.hh"
"${CMAKE_CURRENT_SOURCE_DIR}/src/Document/VivyDocumentStore.hh"
"${CMAKE_CURRENT_SOURCE_DIR}/src/Document/CRTPSubDocument.hh"
)
# More options and warnings
target_compile_options(Vivy PRIVATE
-Wall -Wextra -Wshadow -pedantic
-Wcast-align -Wconversion -Wsign-conversion
-Wmisleading-indentation -Wnull-dereference -Wdouble-promotion
-Wformat=2
$<$<COMPILE_LANGUAGE:CXX>:
-Woverloaded-virtual
-Wnon-virtual-dtor
>
)
if (${CMAKE_CXX_COMPILER_ID} STREQUAL "Clang")
target_compile_options(Vivy PRIVATE
-Wno-unused-private-field # Skip the unused private fields for now
)
elseif (${CMAKE_CXX_COMPILER_ID} STREQUAL "GNU")
endif()
set_target_properties(Vivy PROPERTIES
MACOSX_BUNDLE_GUI_IDENTIFIER vivy.iiens.net
MACOSX_BUNDLE_BUNDLE_VERSION ${PROJECT_VERSION}
MACOSX_BUNDLE_SHORT_VERSION_STRING ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}
)
if(QT_VERSION_MAJOR EQUAL 6)
qt_finalize_executable(Vivy)
endif()