Skip to content
Snippets Groups Projects
CMakeLists.txt 4.94 KiB
Newer Older
  • Learn to ignore specific revisions
  • # minimum required cmake version
    cmake_minimum_required( VERSION 3.5 FATAL_ERROR )
    
    # project name
    if( EXTENSION_360_VIDEO )
      project( NextSoftware360 )
    else()
      project( NextSoftware )
    endif()
    
    # use ccache
    find_program( CCACHE_FOUND ccache )
    if( CCACHE_FOUND )
      message( STATUS "ccache found. using it." )
      set_property( GLOBAL PROPERTY RULE_LAUNCH_COMPILE ccache )
      set_property( GLOBAL PROPERTY RULE_LAUNCH_LINK ccache )
    endif()
    
    # set default CMAKE_BUILD_TYPE to Release if not set
    if( NOT CMAKE_BUILD_TYPE )
      set( CMAKE_BUILD_TYPE "Release" CACHE STRING "Choose the type of build, options are: Debug Release RelWithDebInfo MinSizeRel." FORCE )
    endif()
    
    if( CMAKE_SYSTEM_NAME STREQUAL "Linux" )
      if( CMAKE_CXX_COMPILER_ID STREQUAL "GNU" )
        set( USE_ADDRESS_SANITIZER OFF CACHE BOOL "Compiles with -sanitize=address and links to libasan" )
      endif()
    endif()
    
    set( EXTENSION_360_VIDEO OFF CACHE BOOL "If EXTENSION_360_VIDEO is on, 360Lib will be added" )
    
    set( EXTENSION_HDRTOOLS OFF CACHE BOOL "If EXTENSION_HDRTOOLS is on, HDRLib will be added" )
    
    
    if (DEFINED ENABLE_TRACING)
      set( ENABLE_TRACING OFF CACHE BOOL "ENABLE_TRACING will be set to this value" )
    endif()
    
    if (DEFINED ENABLE_HIGH_BITDEPTH)
      set( ENABLE_HIGH_BITDEPTH OFF CACHE BOOL "ENABLE_HIGH_BITDEPTH will be set to this value" )
    endif()
    
    
    if( CMAKE_COMPILER_IS_GNUCC )
      set( BUILD_STATIC OFF CACHE BOOL "Build static executables" )
    endif()
    
    
    # set c++17
    set( CMAKE_CXX_STANDARD 17 )
    
    set( CMAKE_CXX_STANDARD_REQUIRED ON )
    
    # compile everything position independent (even static libraries)
    set( CMAKE_POSITION_INDEPENDENT_CODE TRUE )
    
    # set verbose compile options
    #set( CMAKE_VERBOSE_MAKEFILE ON )
    
    # use folders in IDEs for projects (e.g. lib sample app test)
    set_property( GLOBAL PROPERTY USE_FOLDERS ON )
    
    # Include a utility module providing functions, macros, and settings
    include( ${CMAKE_SOURCE_DIR}/cmake/CMakeBuild/cmake/modules/BBuildEnv.cmake )
    
    # Enable warnings for some generators and toolsets.
    
    # bb_enable_warnings( gcc warnings-as-errors -Wno-sign-compare )
    
    # bb_enable_warnings( gcc -Wno-unused-variable )
    # bb_enable_warnings( gcc-4.8 warnings-as-errors -Wno-unused-variable )
    
    bb_enable_warnings( gcc warnings-as-errors -Wno-sign-compare)
    
    
    if( XCODE )
      bb_enable_warnings( clang warnings-as-errors
                                -Wno-deprecated-declarations
                                -Wno-unknown-attributes
                                -Wno-pessimizing-move
                                -Wno-absolute-value
    
                                -Wno-unused-const-variable
                                -Wno-unused-command-line-argument )
    
    else()
      bb_enable_warnings( clang warnings-as-errors
                                -Wno-unknown-attributes
                                -Wno-pessimizing-move
                                -Wno-absolute-value
                                -Wno-unused-const-variable )
    endif()
    #bb_enable_warnings( clang warnings-as-errors )
    
    # enable warnings
    bb_enable_warnings( msvc warnings-as-errors "/wd4996" )
    
    # enable sse4.1 build for all source files for gcc and clang
    
    Frank Bossen's avatar
    Frank Bossen committed
    if( (UNIX OR MINGW) AND NOT (CMAKE_SYSTEM_PROCESSOR STREQUAL "arm64") )
    
      add_compile_options( "-msse4.1" )
    endif()
    
    # enable parallel build for Visual Studio
    if( MSVC )
      add_compile_options( "/MP" )
      add_compile_options( "/EHsc" )
    endif()
    
    # set address sanitizer compiler arguments
    if( CMAKE_CXX_COMPILER_ID STREQUAL "GNU" )
      if( CMAKE_SYSTEM_NAME STREQUAL "Linux" )
        if( USE_ADDRESS_SANITIZER )
          # add compile options
          add_compile_options( "-fsanitize=address" )
    
          add_link_options( "-fsanitize=address" )
    
        endif()
      endif()
    
      if( CMAKE_CXX_COMPILER_VERSION VERSION_LESS 5.0 )
        add_compile_options( "-fabi-version=6" )
      endif()
    endif()
    
    # modify .lldbinit for lldb custom data formatters
    if( XCODE )
      set( LLDB_INSTALL_ROOT "$ENV{HOME}/.lldb.d" )
      set( LLDBINIT_FILE "$ENV{HOME}/.lldbinit" )
      set( ENABLE_LLDBINIT_UPDATE ON )
      # add custom target to install LLDB files.
      add_subdirectory( "lldb" )
    endif()
    
    # add needed subdirectories
    add_subdirectory( "source/Lib/CommonLib" )
    add_subdirectory( "source/Lib/CommonAnalyserLib" )
    if( EXTENSION_360_VIDEO )
      add_subdirectory( "source/Lib/Lib360" )
      add_subdirectory( "source/Lib/AppEncHelper360" )
    endif()
    
    if ( EXTENSION_HDRTOOLS )
      add_subdirectory( "source/Lib/HDRLib")
    endif()
    
    add_subdirectory( "source/Lib/DecoderAnalyserLib" )
    add_subdirectory( "source/Lib/DecoderLib" )
    add_subdirectory( "source/Lib/EncoderLib" )
    add_subdirectory( "source/Lib/Utilities" )
    
    add_subdirectory( "source/App/DecoderAnalyserApp" )
    add_subdirectory( "source/App/DecoderApp" )
    add_subdirectory( "source/App/EncoderApp" )
    add_subdirectory( "source/App/SEIRemovalApp" )
    
    add_subdirectory( "source/App/SEIFilmGrainApp" )
    
    add_subdirectory( "source/App/StreamMergeApp" )
    
    add_subdirectory( "source/App/BitstreamExtractorApp" )
    
    add_subdirectory( "source/App/SubpicMergeApp" )
    
    if( EXTENSION_360_VIDEO )
      add_subdirectory( "source/App/utils/360ConvertApp" )
    endif()