Skip to content
Extraits de code Groupes Projets
Sélectionner une révision Git
  • 6372f711cbb0568f87e62c6ce7c1d0106dfadf4e
  • master par défaut
  • script
  • new-devel
  • devel
  • timingView-edit
  • fix-mpv
7 résultats

CMakeLists.txt

Blame
  • CMakeLists.txt 2,92 Kio
    cmake_minimum_required(VERSION 3.5)
    
    project(Vivy VERSION 0.1)
    
    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")
    set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -g")
    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g")
    
    # Grab all files
    file(GLOB Vivy_SRC
        "${CMAKE_CURRENT_SOURCE_DIR}/src/*.cc"
        "${CMAKE_CURRENT_SOURCE_DIR}/src/*.c"
        "${CMAKE_CURRENT_SOURCE_DIR}/src/Document/*.cc"
        "${CMAKE_CURRENT_SOURCE_DIR}/src/Document/*.c"
        "${CMAKE_CURRENT_SOURCE_DIR}/src/Ass/*.cc"
        "${CMAKE_CURRENT_SOURCE_DIR}/src/Ass/*.c"
    )
    file(GLOB Vivy_INC
        "${CMAKE_CURRENT_SOURCE_DIR}/src/*.h"
        "${CMAKE_CURRENT_SOURCE_DIR}/src/*.hh"
        "${CMAKE_CURRENT_SOURCE_DIR}/src/Document/*.h"
        "${CMAKE_CURRENT_SOURCE_DIR}/src/Document/*.hh"
        "${CMAKE_CURRENT_SOURCE_DIR}/src/Ass/*.h"
        "${CMAKE_CURRENT_SOURCE_DIR}/src/Ass/*.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}
        )
    else()
        add_executable(Vivy
            ${PROJECT_SOURCES}
        )
    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})
    
    target_include_directories(Vivy PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/inc)
    
    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()