CMakeLists.txt 8.45 KB
Newer Older
1
# Copyright (c) 2017-2018 Intel Corporation
Maslennikov, Andrey's avatar
Maslennikov, Andrey committed
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
#
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documentation files (the "Software"), to deal
# in the Software without restriction, including without limitation the rights
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
# copies of the Software, and to permit persons to whom the Software is
# furnished to do so, subject to the following conditions:
#
# The above copyright notice and this permission notice shall be included in all
# copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
# SOFTWARE.

21
cmake_minimum_required( VERSION 3.6 )
Maslennikov, Andrey's avatar
Maslennikov, Andrey committed
22 23
project( mediasdk )

24 25
include(CMakeDependentOption)

Maslennikov, Andrey's avatar
Maslennikov, Andrey committed
26 27
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)

28
# Default to `release` build if nothing was specified
29
if(NOT CMAKE_BUILD_TYPE)
30 31
  message(STATUS "No build type selected, default to release")
  set(CMAKE_BUILD_TYPE release)
32 33
endif()

34
set( BUILDER_ROOT "${CMAKE_HOME_DIRECTORY}/builder" )
Maslennikov, Andrey's avatar
Maslennikov, Andrey committed
35 36 37 38 39

if( NOT DEFINED CMAKE_MFX_HOME )
  set( CMAKE_MFX_HOME "${CMAKE_HOME_DIRECTORY}/api" )
endif()

40 41 42 43
if(NOT DEFINED $ENV{MFX_HOME} )
  set( MFX_HOME ${CMAKE_HOME_DIRECTORY} )
else()
  set( MFX_HOME $ENV{MFX_HOME} )
44 45
endif()

Maslennikov, Andrey's avatar
Maslennikov, Andrey committed
46
option( ENABLE_OPENCL "Build targets dependent on OpenCL?" ON )
47 48 49 50 51 52 53 54 55 56 57 58 59

# -DENABLE_ALL will enable all the dependencies and features unless user did not
# explicitly switched some of them OFF, i.e. configuring in the following way
# is possible:
#   cmake -DENABLE_ALL=ON -DENABLE_TEXTLOG=OFF
# and it will configure all targets except samples.
#
# TODO: As of now ENABLE_ALL is not fully implemented, it will not affect all
#   of the ENABLE_* options. Those options it don't affect are placed above
#   ENABLE_ALL definition and require some rework and/or pending CI adoption.
#
option( ENABLE_ALL "Enable all dependencies and features?" OFF )

60 61 62 63 64
if( CMAKE_SYSTEM_NAME MATCHES Linux )
  option( ENABLE_X11_DRI3 "Build X11 DRI3 versions of the targets?" ${ENABLE_ALL} )
  option( ENABLE_WAYLAND "Build WAYLAND versions of the targets?" ${ENABLE_ALL} )
endif()

65 66
option( ENABLE_ITT "Build targets with ITT instrumentation support (requires VTune)?" ${ENABLE_ALL} )

Dmitry Rogozhkin's avatar
Dmitry Rogozhkin committed
67 68
option( ENABLE_TEXTLOG "Enable textlog tracing?" "${ENABLE_ALL}")
option( ENABLE_STAT "Enable stat tracing?" "${ENABLE_ALL}")
69

70 71 72 73 74 75
# -DBUILD_ALL will enable all the build targets unless user did not explicitly
# switched some targets OFF, i.e. configuring in the following way is possible:
#   cmake -DBUILD_ALL=ON -DBUILD_SAMPLES=OFF
# and it will configure all targets except samples.
option( BUILD_ALL "Build all the targets?" OFF )

76
option( BUILD_RUNTIME "Build mediasdk runtime (library, plugins, etc.)?" ON )
77 78
option( BUILD_DISPATCHER "Build dispatcher?" ON )
cmake_dependent_option(BUILD_SAMPLES "Build samples?" ON "BUILD_DISPATCHER" OFF )
79 80
# Tools depend on samples (sample_common) and can't be built without it. The
# following BUILD_TOOLS option declaration assures that.
Dmitry Rogozhkin's avatar
Dmitry Rogozhkin committed
81
cmake_dependent_option(BUILD_TOOLS "Build tools?" "${BUILD_ALL}" "BUILD_SAMPLES" OFF)
82
option(BUILD_TESTS "Build tests?" "${BUILD_ALL}")
83

Maslennikov, Andrey's avatar
Maslennikov, Andrey committed
84 85 86 87 88 89
include( ${BUILDER_ROOT}/FindOpenCL.cmake )
include( ${BUILDER_ROOT}/FindFunctions.cmake )
include( ${BUILDER_ROOT}/FindGlobals.cmake )
include( ${BUILDER_ROOT}/FindMFX.cmake )
include( ${BUILDER_ROOT}/FindPackages.cmake )
include( ${BUILDER_ROOT}/FindInternals.cmake )
90
include( ${BUILDER_ROOT}/FindITT.cmake )
91
include( ${BUILDER_ROOT}/ConfTargets.cmake )
Maslennikov, Andrey's avatar
Maslennikov, Andrey committed
92

93 94 95 96 97
# should prepend others to define target mfx
if (BUILD_DISPATCHER)
  add_subdirectory(api/mfx_dispatch/linux)
endif()

98
if (BUILD_TOOLS)
99 100 101
  add_subdirectory(${CMAKE_HOME_DIRECTORY}/tools)
endif()

102 103 104 105
if (BUILD_SAMPLES)
  add_subdirectory(${CMAKE_HOME_DIRECTORY}/samples)
endif()

106
if (BUILD_RUNTIME)
107
  add_subdirectory(${CMAKE_HOME_DIRECTORY}/contrib/ipp)
108 109 110
  add_subdirectory(${CMAKE_HOME_DIRECTORY}/_studio)
endif()

111 112
if (BUILD_TESTS)
  enable_testing()
113 114 115 116 117 118 119 120 121 122 123 124 125 126


  set (INSTALL_GTEST OFF)
  add_subdirectory(${CMAKE_HOME_DIRECTORY}/googletest)

  # For some Linux distro versions there is an unused-result warning
  # generated inside the Gtest code at a call to fwrite. Since Gtest sets -Werror
  # internally the only way to make it compile without modifying its source is to disable the
  # unused-result warnings for Gtest/Gmock only.
  target_compile_options (gtest PRIVATE "-Wno-unused-result")
  target_compile_options (gmock PRIVATE "-Wno-unused-result")
  target_compile_options (gtest_main PRIVATE "-Wno-unused-result")
  target_compile_options (gmock_main PRIVATE "-Wno-unused-result")

127 128 129
  add_subdirectory(tests)
endif()

Maslennikov, Andrey's avatar
Maslennikov, Andrey committed
130
create_plugins_cfg(${CMAKE_BINARY_DIR})
131 132 133

message("")
message("********************** Media SDK Configuration Summary **********************")
134 135 136 137
message("MediaSDK:")
message("  API (request to use this version)       : ${API}")
message("  API_VERSION                             : ${API_VERSION}")
message("  API_FLAGS                               : ${API_FLAGS}")
138 139 140
message("  MFX_CONFIG_FILE                         : ${MFX_CONFIG_FILE}")
message("  See detailed per-component mediasdk configuration in the auto-generated file:")
message("    ${CMAKE_CURRENT_BINARY_DIR}/mfxconfig.h")
141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168
message("Cmake:")
message("  CMAKE_VERSION                           : ${CMAKE_VERSION}")
message("  CMAKE_GENERATOR                         : ${CMAKE_GENERATOR}")
message("  CMAKE_BUILD_TOOL                        : ${CMAKE_BUILD_TOOL}")
message("Target:")
message("  CMAKE_SYSTEM_NAME                       : ${CMAKE_SYSTEM_NAME}")
message("  CMAKE_SYSTEM_VERSION                    : ${CMAKE_SYSTEM_VERSION}")
message("  CMAKE_SYSTEM_PROCESSOR                  : ${CMAKE_SYSTEM_PROCESSOR}")
message("General:")
message("  CMAKE_BUILD_TYPE                        : ${CMAKE_BUILD_TYPE}")
message("  CMAKE_TOOLCHAIN_FILE                    : ${CMAKE_TOOLCHAIN_FILE}")
message("  CMAKE_C_COMPILER                        : ${CMAKE_C_COMPILER}")
message("  CMAKE_CXX_COMPILER                      : ${CMAKE_CXX_COMPILER}")
if(CMAKE_SIZEOF_VOID_P EQUAL 8)
  message("  Building architecture                   : 64-bit")
else()
  message("  Building architecture                   : 32-bit")
endif()
message("Flags:")
message("  CMAKE_C_FLAGS                           : ${CMAKE_C_FLAGS}")
message("  CMAKE_CXX_FLAGS                         : ${CMAKE_CXX_FLAGS}")
message("Release flags:")
message("  CMAKE_C_FLAGS_RELEASE                   : ${CMAKE_C_FLAGS_RELEASE}")
message("  CMAKE_CXX_FLAGS_RELEASE                 : ${CMAKE_CXX_FLAGS_RELEASE}")
message("Debug flags:")
message("  CMAKE_C_FLAGS_DEBUG                     : ${CMAKE_C_FLAGS_DEBUG}")
message("  CMAKE_CXX_FLAGS_DEBUG                   : ${CMAKE_CXX_FLAGS_DEBUG}")
message("Install:")
169
message("  CMAKE_INSTALL_PREFIX                    : ${CMAKE_INSTALL_PREFIX}")
170 171 172
if (BUILD_TOOLS)
  message("  CMAKE_INSTALL_FULL_BINDIR               : ${CMAKE_INSTALL_FULL_BINDIR}")
endif()
173 174
message("  CMAKE_INSTALL_FULL_INCLUDEDIR           : ${CMAKE_INSTALL_FULL_INCLUDEDIR}")
message("  CMAKE_INSTALL_FULL_LIBDIR               : ${CMAKE_INSTALL_FULL_LIBDIR}")
175
message("  CMAKE_INSTALL_FULL_DATADIR              : ${CMAKE_INSTALL_FULL_DATADIR}")
176 177 178 179 180 181
message("Enable:")
message("  ENABLE_OPENCL                           : ${ENABLE_OPENCL}")
if( CMAKE_SYSTEM_NAME MATCHES Linux )
  message("  ENABLE_X11_DRI3                         : ${ENABLE_X11_DRI3}")
  message("  ENABLE_WAYLAND                          : ${ENABLE_WAYLAND}")
endif()
182
message("  ENABLE_ITT                              : ${ENABLE_ITT}")
183 184
message("  ENABLE_TEXTLOG                          : ${ENABLE_TEXTLOG}")
message("  ENABLE_STAT                             : ${ENABLE_STAT}")
185
message("Build:")
186
message("  BUILD_RUNTIME                           : ${BUILD_RUNTIME}")
187
message("  BUILD_DISPATCHER                        : ${BUILD_DISPATCHER}")
188
message("  BUILD_SAMPLES                           : ${BUILD_SAMPLES}")
189
message("  BUILD_TESTS                             : ${BUILD_TESTS}")
190
message("  BUILD_TOOLS                             : ${BUILD_TOOLS}")
191
message("  BUILD_KERNELS                           : ${BUILD_KERNELS}")
192
message("*****************************************************************************")