1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153
|
# vim: syntax=cmake
if(ENABLE_HDR10_PLUS)
add_library(dynamicHDR10 OBJECT
BasicStructures.h
json11/json11.cpp json11/json11.h
JsonHelper.cpp JsonHelper.h
metadataFromJson.cpp metadataFromJson.h
SeiMetadataDictionary.cpp SeiMetadataDictionary.h
hdr10plus.h
api.cpp )
cmake_minimum_required (VERSION 2.8.11)
project(dynamicHDR10)
include(CheckIncludeFiles)
include(CheckFunctionExists)
include(CheckSymbolExists)
include(CheckCXXCompilerFlag)
SET(CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR}/cmake" "${CMAKE_MODULE_PATH}")
if(GCC)
add_definitions(-Wall -Wextra -Wshadow)
add_definitions(-D__STDC_LIMIT_MACROS=1)
add_definitions(-std=c++11)
if(ENABLE_PIC)
add_definitions(-fPIC)
endif(ENABLE_PIC)
if(NATIVE_BUILD)
if(INTEL_CXX)
add_definitions(-xhost)
else()
add_definitions(-march=native)
endif()
elseif(X86 AND NOT X64)
string(FIND "${CMAKE_CXX_FLAGS}" "-march" marchPos)
if(marchPos LESS "0")
add_definitions(-march=i686)
if(WIN32 AND NOT INTEL_CXX AND NOT CLANG AND
CMAKE_CXX_COMPILER_VERSION VERSION_GREATER 6.0 AND CMAKE_CXX_COMPILER_VERSION VERSION_LESS 7.0)
add_definitions(-mpreferred-stack-boundary=2)
endif()
endif()
endif()
if(ARM AND CROSS_COMPILE_ARM)
set(ARM_ARGS -march=armv6 -mfloat-abi=soft -mfpu=vfp -marm -fPIC)
elseif(ARM)
find_package(Neon)
if(CPU_HAS_NEON)
set(ARM_ARGS -mcpu=native -mfloat-abi=hard -mfpu=neon -marm -fPIC)
add_definitions(-DHAVE_NEON)
else()
set(ARM_ARGS -mcpu=native -mfloat-abi=hard -mfpu=vfp -marm)
endif()
endif()
add_definitions(${ARM_ARGS})
if(FPROFILE_GENERATE)
if(INTEL_CXX)
add_definitions(-prof-gen -prof-dir="${CMAKE_CURRENT_BINARY_DIR}")
list(APPEND LINKER_OPTIONS "-prof-gen")
else()
check_cxx_compiler_flag(-fprofile-generate CC_HAS_PROFILE_GENERATE)
if(CC_HAS_PROFILE_GENERATE)
add_definitions(-fprofile-generate)
list(APPEND LINKER_OPTIONS "-fprofile-generate")
endif(CC_HAS_PROFILE_GENERATE)
endif(INTEL_CXX)
endif(FPROFILE_GENERATE)
if(FPROFILE_USE)
if(INTEL_CXX)
add_definitions(-prof-use -prof-dir="${CMAKE_CURRENT_BINARY_DIR}")
list(APPEND LINKER_OPTIONS "-prof-use")
else()
check_cxx_compiler_flag(-fprofile-use CC_HAS_PROFILE_USE)
check_cxx_compiler_flag(-fprofile-correction CC_HAS_PROFILE_CORRECTION)
check_cxx_compiler_flag(-Wno-error=coverage-mismatch CC_HAS_COVMISMATCH)
if(CC_HAS_PROFILE_USE)
add_definitions(-fprofile-use)
list(APPEND LINKER_OPTIONS "-fprofile-use")
endif(CC_HAS_PROFILE_USE)
if(CC_HAS_PROFILE_CORRECTION)
# auto-correct corrupted counters (happens a lot with x265)
add_definitions(-fprofile-correction)
endif(CC_HAS_PROFILE_CORRECTION)
if(CC_HAS_COVMISMATCH)
# ignore coverage mismatches (also happens a lot)
add_definitions(-Wno-error=coverage-mismatch)
endif(CC_HAS_COVMISMATCH)
endif(INTEL_CXX)
endif(FPROFILE_USE)
if(STATIC_LINK_CRT)
add_definitions(-static)
list(APPEND LINKER_OPTIONS "-static")
endif(STATIC_LINK_CRT)
check_cxx_compiler_flag(-Wno-strict-overflow CC_HAS_NO_STRICT_OVERFLOW)
check_cxx_compiler_flag(-Wno-narrowing CC_HAS_NO_NARROWING)
check_cxx_compiler_flag(-Wno-array-bounds CC_HAS_NO_ARRAY_BOUNDS)
if (CC_HAS_NO_ARRAY_BOUNDS)
add_definitions(-Wno-array-bounds) # these are unhelpful
endif()
check_cxx_compiler_flag(-ffast-math CC_HAS_FAST_MATH)
if (CC_HAS_FAST_MATH)
add_definitions(-ffast-math)
endif()
check_cxx_compiler_flag(-mstackrealign CC_HAS_STACK_REALIGN)
if (CC_HAS_STACK_REALIGN)
add_definitions(-mstackrealign)
endif()
# Disable exceptions. Reduce executable size, increase compability.
check_cxx_compiler_flag(-fno-exceptions CC_HAS_FNO_EXCEPTIONS_FLAG)
if(CC_HAS_FNO_EXCEPTIONS_FLAG)
add_definitions(-fno-exceptions)
endif()
set(FSANITIZE "" CACHE STRING "-fsanitize options for GCC/clang")
if(FSANITIZE)
add_definitions(-fsanitize=${FSANITIZE})
# clang and gcc need the sanitize options to be passed at link
# time so the appropriate ASAN/TSAN runtime libraries can be
# linked.
list(APPEND LINKER_OPTIONS "-fsanitize=${FSANITIZE}")
endif()
option(ENABLE_AGGRESSIVE_CHECKS "Enable stack protection and -ftrapv" OFF)
if(ENABLE_AGGRESSIVE_CHECKS)
# use with care, -ftrapv can cause testbench SIGILL exceptions
# since it is testing corner cases of signed integer math
add_definitions(-DUSING_FTRAPV=1)
check_cxx_compiler_flag(-fsanitize=undefined-trap CC_HAS_CATCH_UNDEFINED) # clang
check_cxx_compiler_flag(-ftrapv CC_HAS_FTRAPV) # gcc
check_cxx_compiler_flag(-fstack-protector-all CC_HAS_STACK_PROTECT) # gcc
if(CC_HAS_FTRAPV)
add_definitions(-ftrapv)
endif()
if(CC_HAS_CATCH_UNDEFINED)
add_definitions(-fsanitize=undefined-trap -fsanitize-undefined-trap-on-error)
endif()
if(CC_HAS_STACK_PROTECT)
add_definitions(-fstack-protector-all)
if(MINGW)
list(APPEND PLATFORM_LIBS ssp)
endif()
endif()
endif(ENABLE_AGGRESSIVE_CHECKS)
execute_process(COMMAND ${CMAKE_CXX_COMPILER} -dumpversion OUTPUT_VARIABLE CC_VERSION)
endif(GCC)
# Build options
set(LIB_INSTALL_DIR lib CACHE STRING "Install location of libraries")
set(BIN_INSTALL_DIR bin CACHE STRING "Install location of executables")
option(ENABLE_SHARED "Build shared library" OFF)
install(FILES hdr10plus.h DESTINATION include)
endif()
|