diff options
Diffstat (limited to 'third_party/aom/build')
18 files changed, 1045 insertions, 445 deletions
diff --git a/third_party/aom/build/cmake/aom_config.c.cmake b/third_party/aom/build/cmake/aom_config.c.cmake index 70bf950371..62f0a10ab3 100644 --- a/third_party/aom/build/cmake/aom_config.c.cmake +++ b/third_party/aom/build/cmake/aom_config.c.cmake @@ -10,6 +10,4 @@ */ #include "aom/aom_codec.h" static const char* const cfg = "${AOM_CMAKE_CONFIG}"; -static const char* const aom_git_hash = "${AOM_GIT_HASH}"; const char *aom_codec_build_config(void) {return cfg;} -const char *aom_codec_git_hash(void) {return aom_git_hash;} diff --git a/third_party/aom/build/cmake/aom_config_defaults.cmake b/third_party/aom/build/cmake/aom_config_defaults.cmake index abdae1d66d..488401be1f 100644 --- a/third_party/aom/build/cmake/aom_config_defaults.cmake +++ b/third_party/aom/build/cmake/aom_config_defaults.cmake @@ -8,170 +8,208 @@ ## Media Patent License 1.0 was not distributed with this source code in the ## PATENTS file, you can obtain it at www.aomedia.org/license/patent. ## - # Defaults for every libaom configuration variable. Here we add all libaom # config variables to the cmake variable cache, but omit the FORCE parameter to # allow users to specify values when executing cmake to generate build files. # Values here are used only if not set by the user. -set(RESTRICT "" CACHE STRING "Sets RESTRICT value for current target.") set(INLINE "" CACHE STRING "Sets INLINE value for current target.") +set(RESTRICT "" CACHE STRING "Sets RESTRICT value for current target.") + +# CPUs. set(ARCH_ARM 0 CACHE NUMBER "Enables ARM architecture.") set(ARCH_MIPS 0 CACHE NUMBER "Enables MIPS architecture.") set(ARCH_X86 0 CACHE NUMBER "Enables X86 architecture.") set(ARCH_X86_64 0 CACHE NUMBER "Enables X86_64 architecture.") -set(HAVE_EDSP 0 CACHE NUMBER "Enables EDSP optimizations.") + +# ARM optimization flags. set(HAVE_NEON 0 CACHE NUMBER "Enables NEON intrinsics optimizations.") set(HAVE_NEON_ASM 0 CACHE NUMBER "Enables NEON assembly optimizations.") -set(HAVE_MIPS32 0 CACHE NUMBER "Enables MIPS32 optimizations.") + +# MIPS optimization flags. set(HAVE_DSPR2 0 CACHE NUMBER "Enables DSPR2 optimizations.") -set(HAVE_MSA 0 CACHE NUMBER "Enables MSA optimizations.") +set(HAVE_MIPS32 0 CACHE NUMBER "Enables MIPS32 optimizations.") set(HAVE_MIPS64 0 CACHE NUMBER "Enables MIPS64 optimizations. ") +set(HAVE_MSA 0 CACHE NUMBER "Enables MSA optimizations.") + +# x86/x86_64 optimization flags. +set(HAVE_AVX 0 CACHE NUMBER "Enables AVX optimizations.") +set(HAVE_AVX2 0 CACHE NUMBER "Enables AVX2 optimizations.") set(HAVE_MMX 0 CACHE NUMBER "Enables MMX optimizations. ") set(HAVE_SSE 0 CACHE NUMBER "Enables SSE optimizations.") set(HAVE_SSE2 0 CACHE NUMBER "Enables SSE2 optimizations.") set(HAVE_SSE3 0 CACHE NUMBER "Enables SSE3 optimizations.") -set(HAVE_SSSE3 0 CACHE NUMBER "Enables SSSE3 optimizations.") set(HAVE_SSE4_1 0 CACHE NUMBER "Enables SSE 4.1 optimizations.") -set(HAVE_AVX 0 CACHE NUMBER "Enables AVX optimizations.") -set(HAVE_AVX2 0 CACHE NUMBER "Enables AVX2 optimizations.") +set(HAVE_SSSE3 0 CACHE NUMBER "Enables SSSE3 optimizations.") + +# Flags describing the build environment. set(HAVE_AOM_PORTS 0 CACHE NUMBER "Internal flag, deprecated.") set(HAVE_FEXCEPT 0 CACHE NUMBER "Internal flag, GNU fenv.h present for target.") set(HAVE_PTHREAD_H 0 CACHE NUMBER "Internal flag, target pthread support.") set(HAVE_UNISTD_H 0 CACHE NUMBER "Internal flag, unistd.h present for target.") set(HAVE_WXWIDGETS 0 CACHE NUMBER "WxWidgets present.") -set(CONFIG_DEPENDENCY_TRACKING 1 CACHE NUMBER "Internal flag.") -set(CONFIG_EXTERNAL_BUILD 0 CACHE NUMBER "Internal flag.") -set(CONFIG_INSTALL_BINS 0 CACHE NUMBER "Internal flag.") -set(CONFIG_INSTALL_LIBS 0 CACHE NUMBER "Internal flag.") -set(CONFIG_INSTALL_SRCS 0 CACHE NUMBER "Internal flag.") -set(CONFIG_DEBUG 0 CACHE NUMBER "Internal flag.") -set(CONFIG_GPROF 0 CACHE NUMBER "Internal flag.") -set(CONFIG_GCOV 0 CACHE NUMBER "Internal flag.") -set(CONFIG_RVCT 0 CACHE NUMBER "Internal flag.") -set(CONFIG_GCC 0 CACHE NUMBER "Internal flag.") -set(CONFIG_MSVS 0 CACHE NUMBER "Internal flag.") -set(CONFIG_PIC 0 CACHE NUMBER "Internal flag.") -set(CONFIG_BIG_ENDIAN 0 CACHE NUMBER "Internal flag.") -set(CONFIG_CODEC_SRCS 0 CACHE NUMBER "Internal flag.") -set(CONFIG_DEBUG_LIBS 0 CACHE NUMBER "Internal flag.") -set(CONFIG_RUNTIME_CPU_DETECT 1 CACHE NUMBER "Internal flag.") -set(CONFIG_POSTPROC 1 CACHE NUMBER "Internal flag.") -set(CONFIG_MULTITHREAD 1 CACHE NUMBER "Internal flag.") -set(CONFIG_INTERNAL_STATS 0 CACHE NUMBER "Internal flag.") -set(CONFIG_AV1_ENCODER 1 CACHE NUMBER "Enable AV1 encoder.") -set(CONFIG_AV1_DECODER 1 CACHE NUMBER "Enable AV1 decoder.") + +# Deprecated flags preserved for compatibility with configure build. +set(CONFIG_CODEC_SRCS 0 CACHE NUMBER "Deprecated flag.") +set(CONFIG_DEBUG_LIBS 0 CACHE NUMBER "Deprecated flag.") +set(CONFIG_DEPENDENCY_TRACKING 1 CACHE NUMBER "Deprecated flag.") +set(CONFIG_EXPERIMENTAL 0 CACHE NUMBER "Deprecated flag.") +set(CONFIG_EXTERNAL_BUILD 0 CACHE NUMBER "Deprecated flag.") +set(CONFIG_INSTALL_BINS 0 CACHE NUMBER "Deprecated flag.") +set(CONFIG_INSTALL_DOCS 0 CACHE NUMBER "Deprecated flag.") +set(CONFIG_INSTALL_LIBS 0 CACHE NUMBER "Deprecated flag.") +set(CONFIG_INSTALL_SRCS 0 CACHE NUMBER "Deprecated flag.") +set(CONFIG_POSTPROC 1 CACHE NUMBER "Deprecated flag.") +set(CONFIG_POSTPROC_VISUALIZER 0 CACHE NUMBER "Deprecated flag.") +set(CONFIG_RVCT 0 CACHE NUMBER "Deprecated flag.") +set(CONFIG_SMALL 0 CACHE NUMBER "Deprecated flag.") +set(CONFIG_STATIC_MSVCRT 0 CACHE NUMBER "Deprecated flag.") + +# Build configuration flags. set(CONFIG_AV1 1 CACHE NUMBER "Internal flag.") -set(CONFIG_STATIC_MSVCRT 0 CACHE NUMBER "Internal flag.") -set(CONFIG_SPATIAL_RESAMPLING 1 CACHE NUMBER "Internal flag.") -set(CONFIG_REALTIME_ONLY 0 CACHE NUMBER "Internal flag.") -set(CONFIG_ONTHEFLY_BITPACKING 0 CACHE NUMBER "Internal flag.") -set(CONFIG_ERROR_CONCEALMENT 0 CACHE NUMBER "Internal flag.") -set(CONFIG_SHARED 0 CACHE NUMBER "Internal flag.") -set(CONFIG_STATIC 1 CACHE NUMBER "Internal flag.") -set(CONFIG_SMALL 0 CACHE NUMBER "Internal flag.") -set(CONFIG_POSTPROC_VISUALIZER 0 CACHE NUMBER "Internal flag.") +set(CONFIG_AV1_DECODER 1 CACHE NUMBER "Enable AV1 decoder.") +set(CONFIG_AV1_ENCODER 1 CACHE NUMBER "Enable AV1 encoder.") +set(CONFIG_BIG_ENDIAN 0 CACHE NUMBER "Internal flag.") +set(CONFIG_GCC 0 CACHE NUMBER "Building with GCC (detected).") +set(CONFIG_GCOV 0 CACHE NUMBER "Enable gcov support.") +set(CONFIG_GPROF 0 CACHE NUMBER "Enable gprof support.") +set(CONFIG_LIBYUV 1 CACHE NUMBER "Enables libyuv scaling/conversion support.") +set(CONFIG_MSVS 0 CACHE NUMBER "Building with MS Visual Studio (detected).") +set(CONFIG_MULTITHREAD 1 CACHE NUMBER "Multithread support.") set(CONFIG_OS_SUPPORT 0 CACHE NUMBER "Internal flag.") -set(CONFIG_UNIT_TESTS 1 CACHE NUMBER "Internal flag.") +set(CONFIG_PIC 0 CACHE NUMBER "Build with PIC enabled.") +set(CONFIG_RUNTIME_CPU_DETECT 1 CACHE NUMBER "Runtime CPU detection support.") +set(CONFIG_SHARED 0 CACHE NUMBER "Build shared libs.") +set(CONFIG_STATIC 1 CACHE NUMBER "Build static libs.") set(CONFIG_WEBM_IO 1 CACHE NUMBER "Enables WebM support.") -set(CONFIG_LIBYUV 1 CACHE NUMBER "Enables libyuv scaling and conversion support.") + +# Debugging flags. +set(CONFIG_BITSTREAM_DEBUG 0 CACHE NUMBER "Bitstream debugging flag.") +set(CONFIG_DEBUG 0 CACHE NUMBER "Debug build flag.") + +# Testing flags. +set(CONFIG_DECODE_PERF_TESTS 0 CACHE NUMBER "Enables decoder performance test.") +set(CONFIG_ENCODE_PERF_TESTS 0 CACHE NUMBER "Enables encoder performance test.") +set(CONFIG_UNIT_TESTS 1 CACHE NUMBER "Enables unit tests.") + +# AV1 feature flags. set(CONFIG_ACCOUNTING 0 CACHE NUMBER "Enables bit accounting.") +set(CONFIG_ANALYZER 0 CACHE NUMBER "Enables bit stream analyzer.") +set(CONFIG_COEFFICIENT_RANGE_CHECKING 0 CACHE NUMBER "Coefficient range check.") +set(CONFIG_HIGHBITDEPTH 1 CACHE NUMBER "Enables high bit depth support.") set(CONFIG_INSPECTION 0 CACHE NUMBER "Enables bitstream inspection.") -set(CONFIG_DECODE_PERF_TESTS 0 CACHE NUMBER "Internal flag.") -set(CONFIG_ENCODE_PERF_TESTS 0 CACHE NUMBER "Internal flag.") -set(CONFIG_COEFFICIENT_RANGE_CHECKING 0 CACHE NUMBER "Internal flag.") -set(CONFIG_LOWBITDEPTH 1 CACHE NUMBER "Internal flag.") -set(CONFIG_HIGHBITDEPTH 1 CACHE NUMBER "Internal flag.") -set(CONFIG_EXPERIMENTAL 0 CACHE NUMBER "Internal flag.") -set(CONFIG_SIZE_LIMIT 0 CACHE NUMBER "Internal flag.") -set(CONFIG_COLORSPACE_HEADERS 0 CACHE NUMBER "Internal flag.") -set(CONFIG_FP_MB_STATS 0 CACHE NUMBER "Internal flag.") -set(CONFIG_CDEF 1 CACHE NUMBER "Internal flag.") -set(CONFIG_VAR_TX 1 CACHE NUMBER "Internal flag.") -set(CONFIG_RECT_TX 1 CACHE NUMBER "Internal flag.") -set(CONFIG_RECT_TX_EXT 0 CACHE NUMBER "Internal flag.") -set(CONFIG_TPL_MV 0 CACHE NUMBER "Internal flag.") -set(CONFIG_DUAL_FILTER 1 CACHE NUMBER "Internal flag.") -set(CONFIG_CONVOLVE_ROUND 0 CACHE NUMBER "Internal flag.") -set(CONFIG_COMPOUND_ROUND 0 CACHE NUMBER "Internal flag.") -set(CONFIG_EXT_TX 1 CACHE NUMBER "Internal flag.") -set(CONFIG_DPCM_INTRA 0 CACHE NUMBER "Internal flag.") -set(CONFIG_TX64X64 0 CACHE NUMBER "Internal flag.") -set(CONFIG_EXT_INTRA 1 CACHE NUMBER "Internal flag.") -set(CONFIG_INTRA_INTERP 0 CACHE NUMBER "Internal flag.") -set(CONFIG_FILTER_INTRA 0 CACHE NUMBER "Internal flag.") -set(CONFIG_INTRA_EDGE 0 CACHE NUMBER "Internal flag.") -set(CONFIG_INTRABC 0 CACHE NUMBER "Internal flag.") -set(CONFIG_EXT_INTER 1 CACHE NUMBER "Internal flag.") -set(CONFIG_INTERINTRA 1 CACHE NUMBER "Internal flag.") -set(CONFIG_WEDGE 1 CACHE NUMBER "Internal flag.") -set(CONFIG_COMPOUND_SEGMENT 1 CACHE NUMBER "Internal flag.") -set(CONFIG_EXT_REFS 1 CACHE NUMBER "Internal flag.") -set(CONFIG_SPEED_REFS 0 CACHE NUMBER "Internal flag.") -set(CONFIG_GLOBAL_MOTION 1 CACHE NUMBER "Internal flag.") -set(CONFIG_NEW_QUANT 0 CACHE NUMBER "Internal flag.") -set(CONFIG_SUPERTX 0 CACHE NUMBER "Internal flag.") -set(CONFIG_ANS 0 CACHE NUMBER "Internal flag.") -set(CONFIG_LOOP_RESTORATION 0 CACHE NUMBER "Internal flag.") -set(CONFIG_EXT_PARTITION 0 CACHE NUMBER "Internal flag.") -set(CONFIG_EXT_PARTITION_TYPES 0 CACHE NUMBER "Internal flag.") -set(CONFIG_UNPOISON_PARTITION_CTX 0 CACHE NUMBER "Internal flag.") -set(CONFIG_EXT_TILE 0 CACHE NUMBER "Internal flag.") -set(CONFIG_MOTION_VAR 1 CACHE NUMBER "Internal flag.") -set(CONFIG_NCOBMC 0 CACHE NUMBER "Internal flag.") -set(CONFIG_WARPED_MOTION 1 CACHE NUMBER "Internal flag.") -set(CONFIG_Q_ADAPT_PROBS 0 CACHE NUMBER "Internal flag.") -set(CONFIG_BITSTREAM_DEBUG 0 CACHE NUMBER "Internal flag.") -set(CONFIG_ALT_INTRA 1 CACHE NUMBER "Internal flag.") -set(CONFIG_PALETTE 1 CACHE NUMBER "Internal flag.") -set(CONFIG_PALETTE_DELTA_ENCODING 0 CACHE NUMBER "Internal flag.") -set(CONFIG_RAWBITS 0 CACHE NUMBER "Internal flag.") -set(CONFIG_EC_SMALLMUL 1 CACHE NUMBER "Internal flag.") -set(CONFIG_PVQ 0 CACHE NUMBER "Internal flag.") -set(CONFIG_CFL 0 CACHE NUMBER "Internal flag.") -set(CONFIG_XIPHRC 0 CACHE NUMBER "Internal flag.") -set(CONFIG_CB4X4 1 CACHE NUMBER "Internal flag.") -set(CONFIG_CHROMA_2X2 0 CACHE NUMBER "Internal flag.") -set(CONFIG_CHROMA_SUB8X8 1 CACHE NUMBER "Internal flag.") -set(CONFIG_FRAME_SIZE 0 CACHE NUMBER "Internal flag.") -set(CONFIG_DELTA_Q 1 CACHE NUMBER "Internal flag.") -set(CONFIG_EXT_DELTA_Q 1 CACHE NUMBER "Internal flag.") -set(CONFIG_ADAPT_SCAN 0 CACHE NUMBER "Internal flag.") -set(CONFIG_FILTER_7BIT 1 CACHE NUMBER "Internal flag.") -set(CONFIG_PARALLEL_DEBLOCKING 1 CACHE NUMBER "Internal flag.") -set(CONFIG_LOOPFILTERING_ACROSS_TILES 1 CACHE NUMBER "Internal flag.") -set(CONFIG_TEMPMV_SIGNALING 1 CACHE NUMBER "Internal flag.") -set(CONFIG_RD_DEBUG 0 CACHE NUMBER "Internal flag.") -set(CONFIG_REFERENCE_BUFFER 1 CACHE NUMBER "Internal flag.") -set(CONFIG_COEF_INTERLEAVE 0 CACHE NUMBER "Internal flag.") -set(CONFIG_ENTROPY_STATS 0 CACHE NUMBER "Internal flag.") -set(CONFIG_MASKED_TX 0 CACHE NUMBER "Internal flag.") -set(CONFIG_DEPENDENT_HORZTILES 0 CACHE NUMBER "Internal flag.") -set(CONFIG_DAALA_DIST 0 CACHE NUMBER "Internal flag.") -set(CONFIG_TRIPRED 0 CACHE NUMBER "Internal flag.") -set(CONFIG_PALETTE_THROUGHPUT 1 CACHE NUMBER "Internal flag.") -set(CONFIG_REF_ADAPT 0 CACHE NUMBER "Internal flag.") -set(CONFIG_LV_MAP 0 CACHE NUMBER "Internal flag.") -set(CONFIG_TXK_SEL 0 CACHE NUMBER "Internal flag.") -set(CONFIG_MV_COMPRESS 1 CACHE NUMBER "Internal flag.") -set(CONFIG_FRAME_SUPERRES 0 CACHE NUMBER "Internal flag.") -set(CONFIG_NEW_MULTISYMBOL 0 CACHE NUMBER "Internal flag.") -set(CONFIG_COMPOUND_SINGLEREF 0 CACHE NUMBER "Internal flag.") -set(CONFIG_AOM_QM 0 CACHE NUMBER "Internal flag.") -set(CONFIG_ONE_SIDED_COMPOUND 1 CACHE NUMBER "Internal flag.") -set(CONFIG_EXT_COMP_REFS 0 CACHE NUMBER "Internal flag.") -set(CONFIG_SMOOTH_HV 1 CACHE NUMBER "Internal flag.") -set(CONFIG_VAR_REFS 0 CACHE NUMBER "Internal flag.") -set(CONFIG_RECT_INTRA_PRED 0 CACHE NUMBER "Internal flag.") -set(CONFIG_LGT 0 CACHE NUMBER "Internal flag.") -set(CONFIG_SBL_SYMBOL 0 CACHE NUMBER "Internal flag.") -set(CONFIG_NCOBMC_ADAPT_WEIGHT 0 CACHE NUMBER "Internal flag.") -set(CONFIG_BGSPRITE 0 CACHE NUMBER "Internal flag.") -set(CONFIG_VAR_TX_NO_TX_MODE 0 CACHE NUMBER "Internal flag.") -set(CONFIG_ANALYZER 0 CACHE NUMBER "Internal flag.") -set(CONFIG_DCT_ONLY 0 CACHE NUMBER "Internal flag.") -set(CONFIG_DAALA_DCT4 0 CACHE NUMBER "Internal flag.") -set(CONFIG_DAALA_DCT8 0 CACHE NUMBER "Internal flag.") -set(CONFIG_GF_GROUPS 0 CACHE NUMBER "Internal flag.") -set(CONFIG_MRC_TX 0 CACHE NUMBER "Internal flag.") -set(CONFIG_INTER_STATS_ONLY 0 CACHE NUMBER "Internal flag.") -set(CONFIG_DIST_8X8 0 CACHE NUMBER "Internal flag.") +set(CONFIG_INTERNAL_STATS 0 CACHE NUMBER "Codec stats.") +set(CONFIG_LOWBITDEPTH 1 CACHE NUMBER "Enables low bit depth support.") +set(CONFIG_REALTIME_ONLY 0 CACHE NUMBER "Support only realtime encodes.") +set(CONFIG_SIZE_LIMIT 0 CACHE NUMBER "Limit max decode width/height.") +set(CONFIG_SPATIAL_RESAMPLING 1 CACHE NUMBER "Spatial resampling.") +set(CONFIG_SYMBOLRATE 0 CACHE NUMBER "Enables symbol rate accounting.") + +# AV1 experiment flags. +set(CONFIG_ADAPT_SCAN 0 CACHE NUMBER "AV1 experiment flag.") +set(CONFIG_AMVR 0 CACHE NUMBER "AV1 experiment flag.") +set(CONFIG_ANS 0 CACHE NUMBER "AV1 experiment flag.") +set(CONFIG_AOM_QM 1 CACHE NUMBER "AV1 experiment flag.") +set(CONFIG_BGSPRITE 0 CACHE NUMBER "AV1 experiment flag.") +set(CONFIG_CB4X4 1 CACHE NUMBER "AV1 experiment flag.") +set(CONFIG_CDEF 1 CACHE NUMBER "AV1 experiment flag.") +set(CONFIG_CDEF_SINGLEPASS 0 CACHE NUMBER "AV1 experiment flag.") +set(CONFIG_CFL 0 CACHE NUMBER "AV1 experiment flag.") +set(CONFIG_CHROMA_2X2 0 CACHE NUMBER "AV1 experiment flag.") +set(CONFIG_CHROMA_SUB8X8 1 CACHE NUMBER "AV1 experiment flag.") +set(CONFIG_COEF_INTERLEAVE 0 CACHE NUMBER "AV1 experiment flag.") +set(CONFIG_COLORSPACE_HEADERS 0 CACHE NUMBER "AV1 experiment flag.") +set(CONFIG_COMPOUND_ROUND 0 CACHE NUMBER "AV1 experiment flag.") +set(CONFIG_COMPOUND_SEGMENT 1 CACHE NUMBER "AV1 experiment flag.") +set(CONFIG_COMPOUND_SINGLEREF 0 CACHE NUMBER "AV1 experiment flag.") +set(CONFIG_CONVOLVE_ROUND 1 CACHE NUMBER "AV1 experiment flag.") +set(CONFIG_CTX1D 0 CACHE NUMBER "AV1 experiment flag.") +set(CONFIG_DAALA_DCT16 0 CACHE NUMBER "AV1 experiment flag.") +set(CONFIG_DAALA_DCT32 0 CACHE NUMBER "AV1 experiment flag.") +set(CONFIG_DAALA_DCT4 0 CACHE NUMBER "AV1 experiment flag.") +set(CONFIG_DAALA_DCT64 0 CACHE NUMBER "AV1 experiment flag.") +set(CONFIG_DAALA_DCT8 0 CACHE NUMBER "AV1 experiment flag.") +set(CONFIG_DAALA_TX 0 CACHE NUMBER "AV1 experiment flag.") +set(CONFIG_DCT_ONLY 0 CACHE NUMBER "AV1 experiment flag.") +set(CONFIG_DEBLOCK_13TAP 0 CACHE NUMBER "AV1 experiment flag.") +set(CONFIG_DEPENDENT_HORZTILES 0 CACHE NUMBER "AV1 experiment flag.") +set(CONFIG_DIST_8X8 1 CACHE NUMBER "AV1 experiment flag.") +set(CONFIG_DUAL_FILTER 1 CACHE NUMBER "AV1 experiment flag.") +set(CONFIG_ENTROPY_STATS 0 CACHE NUMBER "AV1 experiment flag.") +set(CONFIG_EXT_COMP_REFS 1 CACHE NUMBER "AV1 experiment flag.") +set(CONFIG_EXT_DELTA_Q 1 CACHE NUMBER "AV1 experiment flag.") +set(CONFIG_EXT_INTRA 1 CACHE NUMBER "AV1 experiment flag.") +set(CONFIG_EXT_PARTITION 0 CACHE NUMBER "AV1 experiment flag.") +set(CONFIG_EXT_PARTITION_TYPES 0 CACHE NUMBER "AV1 experiment flag.") +set(CONFIG_EXT_PARTITION_TYPES_AB 0 CACHE NUMBER "AV1 experiment flag.") +set(CONFIG_EXT_REFS 1 CACHE NUMBER "AV1 experiment flag.") +set(CONFIG_EXT_SKIP 0 CACHE NUMBER "AV1 experiment flag.") +set(CONFIG_EXT_TILE 0 CACHE NUMBER "AV1 experiment flag.") +set(CONFIG_EXT_TX 1 CACHE NUMBER "AV1 experiment flag.") +set(CONFIG_FILTER_INTRA 0 CACHE NUMBER "AV1 experiment flag.") +set(CONFIG_FP_MB_STATS 0 CACHE NUMBER "AV1 experiment flag.") +set(CONFIG_FRAME_MARKER 0 CACHE NUMBER "AV1 experiment flag.") +set(CONFIG_FRAME_SIGN_BIAS 0 CACHE NUMBER "AV1 experiment flag.") +set(CONFIG_FRAME_SIZE 0 CACHE NUMBER "AV1 experiment flag.") +set(CONFIG_FRAME_SUPERRES 0 CACHE NUMBER "AV1 experiment flag.") +set(CONFIG_GLOBAL_MOTION 1 CACHE NUMBER "AV1 experiment flag.") +set(CONFIG_HASH_ME 0 CACHE NUMBER "AV1 experiment flag.") +set(CONFIG_HORZONLY_FRAME_SUPERRES 0 CACHE NUMBER "AV1 experiment flag.") +set(CONFIG_INTERINTRA 1 CACHE NUMBER "AV1 experiment flag.") +set(CONFIG_INTER_STATS_ONLY 0 CACHE NUMBER "AV1 experiment flag.") +set(CONFIG_INTRABC 0 CACHE NUMBER "AV1 experiment flag.") +set(CONFIG_INTRA_EDGE 1 CACHE NUMBER "AV1 experiment flag.") +set(CONFIG_INTRA_INTERP 0 CACHE NUMBER "AV1 experiment flag.") +set(CONFIG_JNT_COMP 0 CACHE NUMBER "AV1 experiment flag.") +set(CONFIG_KF_CTX 0 CACHE NUMBER "AV1 experiment flag.") +set(CONFIG_LGT 0 CACHE NUMBER "AV1 experiment flag.") +set(CONFIG_LGT_FROM_PRED 0 CACHE NUMBER "AV1 experiment flag.") +set(CONFIG_LOOPFILTERING_ACROSS_TILES 1 CACHE NUMBER "AV1 experiment flag.") +set(CONFIG_LOOPFILTER_LEVEL 0 CACHE NUMBER "AV1 experiment flag.") +set(CONFIG_LOOP_RESTORATION 1 CACHE NUMBER "AV1 experiment flag.") +set(CONFIG_LPF_DIRECT 0 CACHE NUMBER "AV1 experiment flag.") +set(CONFIG_LPF_SB 0 CACHE NUMBER "AV1 experiment flag.") +set(CONFIG_LV_MAP 0 CACHE NUMBER "AV1 experiment flag.") +set(CONFIG_MASKED_TX 0 CACHE NUMBER "AV1 experiment flag.") +set(CONFIG_MAX_TILE 0 CACHE NUMBER "AV1 experiment flag.") +set(CONFIG_MFMV 0 CACHE NUMBER "AV1 experiment flag.") +set(CONFIG_MOTION_VAR 1 CACHE NUMBER "AV1 experiment flag.") +set(CONFIG_MRC_TX 0 CACHE NUMBER "AV1 experiment flag.") +set(CONFIG_MV_COMPRESS 1 CACHE NUMBER "AV1 experiment flag.") +set(CONFIG_NCOBMC 0 CACHE NUMBER "AV1 experiment flag.") +set(CONFIG_NCOBMC_ADAPT_WEIGHT 0 CACHE NUMBER "AV1 experiment flag.") +set(CONFIG_NEW_MULTISYMBOL 0 CACHE NUMBER "AV1 experiment flag.") +set(CONFIG_NEW_QUANT 0 CACHE NUMBER "AV1 experiment flag.") +set(CONFIG_NO_FRAME_CONTEXT_SIGNALING 0 CACHE NUMBER "AV1 experiment flag.") +set(CONFIG_OBU 0 CACHE NUMBER "AV1 experiment flag.") +set(CONFIG_ONE_SIDED_COMPOUND 1 CACHE NUMBER "AV1 experiment flag.") +set(CONFIG_OPT_REF_MV 0 CACHE NUMBER "AV1 experiment flag.") +set(CONFIG_PALETTE_DELTA_ENCODING 0 CACHE NUMBER "AV1 experiment flag.") +set(CONFIG_PALETTE_THROUGHPUT 1 CACHE NUMBER "AV1 experiment flag.") +set(CONFIG_PARALLEL_DEBLOCKING 1 CACHE NUMBER "AV1 experiment flag.") +set(CONFIG_PVQ 0 CACHE NUMBER "AV1 experiment flag.") +set(CONFIG_Q_ADAPT_PROBS 0 CACHE NUMBER "AV1 experiment flag.") +set(CONFIG_RAWBITS 0 CACHE NUMBER "AV1 experiment flag.") +set(CONFIG_RD_DEBUG 0 CACHE NUMBER "AV1 experiment flag.") +set(CONFIG_RECT_TX 1 CACHE NUMBER "AV1 experiment flag.") +set(CONFIG_RECT_TX_EXT 0 CACHE NUMBER "AV1 experiment flag.") +set(CONFIG_REFERENCE_BUFFER 1 CACHE NUMBER "AV1 experiment flag.") +set(CONFIG_REF_ADAPT 0 CACHE NUMBER "AV1 experiment flag.") +set(CONFIG_RESTRICT_COMPRESSED_HDR 0 CACHE NUMBER "AV1 experiment flag.") +set(CONFIG_SBL_SYMBOL 0 CACHE NUMBER "AV1 experiment flag.") +set(CONFIG_SEGMENT_ZEROMV 0 CACHE NUMBER "AV1 experiment flag.") +set(CONFIG_SMOOTH_HV 1 CACHE NUMBER "AV1 experiment flag.") +set(CONFIG_STRIPED_LOOP_RESTORATION 0 CACHE NUMBER "AV1 experiment flag.") +set(CONFIG_SUPERTX 0 CACHE NUMBER "AV1 experiment flag.") +set(CONFIG_TEMPMV_SIGNALING 1 CACHE NUMBER "AV1 experiment flag.") +set(CONFIG_TMV 0 CACHE NUMBER "AV1 experiment flag.") +set(CONFIG_TPL_MV 0 CACHE NUMBER "AV1 experiment flag.") +set(CONFIG_TX64X64 0 CACHE NUMBER "AV1 experiment flag.") +set(CONFIG_TXK_SEL 0 CACHE NUMBER "AV1 experiment flag.") +set(CONFIG_TXMG 1 CACHE NUMBER "AV1 experiment flag.") +set(CONFIG_UNPOISON_PARTITION_CTX 0 CACHE NUMBER "AV1 experiment flag.") +set(CONFIG_VAR_REFS 0 CACHE NUMBER "AV1 experiment flag.") +set(CONFIG_VAR_TX 1 CACHE NUMBER "AV1 experiment flag.") +set(CONFIG_VAR_TX_NO_TX_MODE 0 CACHE NUMBER "AV1 experiment flag.") +set(CONFIG_WARPED_MOTION 1 CACHE NUMBER "AV1 experiment flag.") +set(CONFIG_WEDGE 1 CACHE NUMBER "AV1 experiment flag.") +set(CONFIG_XIPHRC 0 CACHE NUMBER "AV1 experiment flag.") diff --git a/third_party/aom/build/cmake/aom_configure.cmake b/third_party/aom/build/cmake/aom_configure.cmake index 1c373e5891..3553710d38 100644 --- a/third_party/aom/build/cmake/aom_configure.cmake +++ b/third_party/aom/build/cmake/aom_configure.cmake @@ -33,9 +33,11 @@ endforeach() string(STRIP "${AOM_CMAKE_CONFIG}" AOM_CMAKE_CONFIG) include("${AOM_ROOT}/build/cmake/aom_config_defaults.cmake") +include("${AOM_ROOT}/build/cmake/aom_experiment_deps.cmake") include("${AOM_ROOT}/build/cmake/aom_optimization.cmake") include("${AOM_ROOT}/build/cmake/compiler_flags.cmake") include("${AOM_ROOT}/build/cmake/compiler_tests.cmake") +include("${AOM_ROOT}/build/cmake/util.cmake") # Build a list of all configurable variables. get_cmake_property(cmake_cache_vars CACHE_VARIABLES) @@ -45,6 +47,24 @@ foreach (var ${cmake_cache_vars}) endif () endforeach () +# Adopted experiments get enabled by default. For debugging, make it possible to +# to turn them all off with a single option. +if (NOT ENABLE_ADOPTED_EXPERIMENTS) + get_cmake_property(cmake_cache_vars CACHE_VARIABLES) + unset(var) + foreach (var ${cmake_cache_vars}) + unset(var_helpstring) + get_property(var_helpstring CACHE ${var} PROPERTY HELPSTRING) + if ("${var_helpstring}" STREQUAL "AV1 experiment flag.") + if ("${var}" STREQUAL "CONFIG_CB4X4") + # CB4X4 is required and can not be disabled. + else () + set(${var} 0) + endif () + endif () + endforeach () +endif () + # Detect target CPU. if (NOT AOM_TARGET_CPU) if ("${CMAKE_SYSTEM_PROCESSOR}" STREQUAL "AMD64" OR @@ -83,17 +103,28 @@ string(STRIP "${AOM_CMAKE_CONFIG}" AOM_CMAKE_CONFIG) message("--- aom_configure: Detected CPU: ${AOM_TARGET_CPU}") set(AOM_TARGET_SYSTEM ${CMAKE_SYSTEM_NAME}) -if (BUILD_SHARED_LIBS) - set(CONFIG_PIC 1) - set(CONFIG_SHARED 1) - set(CMAKE_POSITION_INDEPENDENT_CODE ON) +if ("${CMAKE_BUILD_TYPE}" MATCHES "Deb") + set(CONFIG_DEBUG 1) +endif () - if ("${AOM_TARGET_SYSTEM}" STREQUAL "Linux" AND - "${AOM_TARGET_CPU}" MATCHES "^armv7") - set(AOM_AS_FLAGS ${AOM_AS_FLAGS} --defsym PIC=1) - else () - set(AOM_AS_FLAGS ${AOM_AS_FLAGS} -DPIC) +if (NOT MSVC) + if (BUILD_SHARED_LIBS) + set(CONFIG_PIC 1) + set(CONFIG_SHARED 1) + set(CONFIG_STATIC 0) + endif () + + if (CONFIG_PIC) + set(CMAKE_POSITION_INDEPENDENT_CODE ON) + if ("${AOM_TARGET_SYSTEM}" STREQUAL "Linux" AND + "${AOM_TARGET_CPU}" MATCHES "^armv7") + set(AOM_AS_FLAGS ${AOM_AS_FLAGS} --defsym PIC=1) + else () + set(AOM_AS_FLAGS ${AOM_AS_FLAGS} -DPIC) + endif () endif () +else () + set(CONFIG_MSVS 1) endif () if (NOT "${AOM_SUPPORTED_CPU_TARGETS}" MATCHES "${AOM_TARGET_CPU}") @@ -112,8 +143,9 @@ if ("${AOM_TARGET_CPU}" STREQUAL "x86" OR "${AOM_TARGET_CPU}" STREQUAL "x86_64") endif () if (NOT AS_EXECUTABLE) - message(FATAL_ERROR "Unable to find yasm. To build without optimizations, " - "add -DAOM_TARGET_CPU=generic to your cmake command line.") + message(FATAL_ERROR "Unable to find assembler. To build without " + "optimizations, add -DAOM_TARGET_CPU=generic to your cmake command " + "line.") endif () get_asm_obj_format("objformat") set(AOM_AS_FLAGS -f ${objformat} ${AOM_AS_FLAGS}) @@ -134,26 +166,71 @@ elseif ("${AOM_TARGET_CPU}" MATCHES "arm") string(STRIP "${AOM_AS_FLAGS}" AOM_AS_FLAGS) endif () +if (CONFIG_ANALYZER) + find_package(wxWidgets REQUIRED adv base core) + include(${wxWidgets_USE_FILE}) +endif () + +if (NOT MSVC AND CMAKE_C_COMPILER_ID MATCHES "GNU\|Clang") + set(CONFIG_GCC 1) +endif () + +if (CONFIG_GCOV) + message("--- Testing for CONFIG_GCOV support.") + require_linker_flag("-fprofile-arcs -ftest-coverage") + require_compiler_flag("-fprofile-arcs -ftest-coverage" YES) +endif () + +if (CONFIG_GPROF) + message("--- Testing for CONFIG_GPROF support.") + require_compiler_flag("-pg" YES) +endif () + +if ("${AOM_TARGET_SYSTEM}" MATCHES "Darwin\|Linux\|Windows") + set(CONFIG_OS_SUPPORT 1) +endif () + +################################################################################ +# Fix CONFIG_* dependencies. This must be done before including cpu.cmake to +# ensure RTCD_CONFIG_* are properly set. +fix_experiment_configs() + +# Test compiler support. +aom_get_inline("INLINE") + +# TODO(tomfinegan): aom_ports_check is legacy; HAVE_AOM_PORTS is not used +# anywhere in the aom sources. To be removed after parity with the legacy +# build system stops being important. +aom_check_source_compiles("aom_ports_check" + "#include \"${AOM_ROOT}/aom/aom_integer.h\"" + HAVE_AOM_PORTS) +aom_check_source_compiles("pthread_check" "#include <pthread.h>" HAVE_PTHREAD_H) +aom_check_source_compiles("unistd_check" "#include <unistd.h>" HAVE_UNISTD_H) + +if (NOT MSVC) + aom_push_var(CMAKE_REQUIRED_LIBRARIES "m") + aom_check_c_compiles("fenv_check" + "#define _GNU_SOURCE + #include <fenv.h> + void unused(void) { + (void)unused; + (void)feenableexcept(FE_DIVBYZERO | FE_INVALID); + }" HAVE_FEXCEPT) + aom_pop_var(CMAKE_REQUIRED_LIBRARIES) +endif() + include("${AOM_ROOT}/build/cmake/cpu.cmake") if (ENABLE_CCACHE) - find_program(CCACHE "ccache") - if (NOT "${CCACHE}" STREQUAL "") - set(CMAKE_C_COMPILER_LAUNCHER "${CCACHE}") - set(CMAKE_CXX_COMPILER_LAUNCHER "${CCACHE}") - else () - message("--- Cannot find ccache, ENABLE_CCACHE ignored.") - endif () + set_compiler_launcher(ENABLE_CCACHE ccache) endif () if (ENABLE_DISTCC) - find_program(DISTCC "distcc") - if (NOT "${DISTCC}" STREQUAL "") - set(CMAKE_C_COMPILER_LAUNCHER "${DISTCC}") - set(CMAKE_CXX_COMPILER_LAUNCHER "${DISTCC}") - else () - message("--- Cannot find distcc, ENABLE_DISTCC ignored.") - endif () + set_compiler_launcher(ENABLE_DISTCC distcc) +endif () + +if (ENABLE_GOMA) + set_compiler_launcher(ENABLE_GOMA gomacc) endif () if (NOT CONFIG_AV1_DECODER AND NOT CONFIG_AV1_ENCODER) @@ -175,8 +252,10 @@ else () add_compiler_flag_if_supported("-Wextra") add_compiler_flag_if_supported("-Wfloat-conversion") add_compiler_flag_if_supported("-Wimplicit-function-declaration") + add_compiler_flag_if_supported("-Wlogical-op") add_compiler_flag_if_supported("-Wpointer-arith") add_compiler_flag_if_supported("-Wsign-compare") + add_compiler_flag_if_supported("-Wstack-usage=320000") add_compiler_flag_if_supported("-Wstring-conversion") add_compiler_flag_if_supported("-Wtype-limits") add_compiler_flag_if_supported("-Wuninitialized") @@ -199,10 +278,6 @@ else () # to the existing configure/make build system. add_compiler_flag_if_supported("-Wno-unused-function") - if (CMAKE_C_COMPILER_ID MATCHES "GNU\|Clang") - set(CONFIG_GCC 1) - endif () - if ("${CMAKE_BUILD_TYPE}" MATCHES "Rel") add_compiler_flag_if_supported("-U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=0") endif () @@ -210,86 +285,6 @@ else () add_compiler_flag_if_supported("-D_FILE_OFFSET_BITS=64") endif () -if ("${AOM_TARGET_SYSTEM}" MATCHES "Darwin\|Linux\|Windows") - set(CONFIG_OS_SUPPORT 1) -endif () - -# Test compiler support. -aom_get_inline("INLINE") - -# TODO(tomfinegan): aom_ports_check is legacy; HAVE_AOM_PORTS is not used -# anywhere in the aom sources. To be removed after parity with the legacy -# build system stops being important. -aom_check_source_compiles("aom_ports_check" - "#include \"${AOM_ROOT}/aom/aom_integer.h\"" - HAVE_AOM_PORTS) -aom_check_source_compiles("pthread_check" "#include <pthread.h>" HAVE_PTHREAD_H) -aom_check_source_compiles("unistd_check" "#include <unistd.h>" HAVE_UNISTD_H) - -if (CONFIG_ANALYZER) - find_package(wxWidgets REQUIRED adv base core) - include(${wxWidgets_USE_FILE}) - - if (NOT CONFIG_INSPECTION) - set(CONFIG_INSPECTION 1) - message(WARNING - "--- Enabled CONFIG_INSPECTION, required for CONFIG_ANALYZER.") - endif () -endif () - -if (CONFIG_VAR_TX_NO_TX_MODE AND NOT CONFIG_VAR_TX) - message(WARNING - "--- CONFIG_VAR_TX_NO_TX_MODE requires CONFIG_VAR_TX, disabling.") - set(CONFIG_VAR_TX_NO_TX_MODE 0) -endif() - -if (CONFIG_DAALA_DCT4) - if (NOT CONFIG_DCT_ONLY) - message(WARNING - "--- Enabled CONFIG_DCT_ONLY, needed for CONFIG_DAALA_DCT4.") - set(CONFIG_DCT_ONLY 1) - endif() -endif() - -if (CONFIG_DAALA_DCT4 OR CONFIG_DAALA_DCT8) - if (HAVE_MMX) - message(WARNING - "--- Disabled HAVE_MMX, incompatible with CONFIG_DAALA_DCTx.") - set(HAVE_MMX 0) - endif() - if (CONFIG_RECT_TX) - message(WARNING - "--- Disabled CONFIG_RECT_TX, incompatible with CONFIG_DAALA_DCTx.") - set(CONFIG_RECT_TX 0) - endif() - if (CONFIG_VAR_TX) - message(WARNING - "--- Disabled CONFIG_VAR_TX, incompatible with CONFIG_DAALA_DCTx.") - set(CONFIG_VAR_TX 0) - endif() - if (CONFIG_LGT) - message(WARNING - "--- Disabled CONFIG_LGT, incompatible with CONFIG_DAALA_DCTx.") - set(CONFIG_LGT 0) - endif() - if (NOT CONFIG_LOWBITDEPTH) - message(WARNING - "--- Enabled CONFIG_LOWBITDEPTH, needed for CONFIG_DAALA_DCTx.") - set(CONFIG_LOWBITDEPTH 1) - endif() -endif() - -if (NOT MSVC) - aom_push_var(CMAKE_REQUIRED_LIBRARIES "m") - aom_check_c_compiles("fenv_check" - "#define _GNU_SOURCE - #include <fenv.h> - void unused(void) { - (void)feenableexcept(FE_DIVBYZERO | FE_INVALID); - }" HAVE_FEXCEPT) - aom_pop_var(CMAKE_REQUIRED_LIBRARIES) -endif() - set(AOM_LIB_LINK_TYPE PUBLIC) if (EMSCRIPTEN) # Avoid CMake generation time errors resulting from collisions with the form @@ -311,19 +306,8 @@ configure_file("${aom_config_h_template}" "${AOM_CONFIG_DIR}/aom_config.h") # Read the current git hash. find_package(Git) -set(AOM_GIT_DESCRIPTION) -set(AOM_GIT_HASH) -if (GIT_FOUND) - # TODO(tomfinegan): Add build rule so users don't have to re-run cmake to - # create accurately versioned cmake builds. - execute_process(COMMAND ${GIT_EXECUTABLE} - --git-dir=${AOM_ROOT}/.git rev-parse HEAD - OUTPUT_VARIABLE AOM_GIT_HASH) - execute_process(COMMAND ${GIT_EXECUTABLE} --git-dir=${AOM_ROOT}/.git describe - OUTPUT_VARIABLE AOM_GIT_DESCRIPTION ERROR_QUIET) - # Consume the newline at the end of the git output. - string(STRIP "${AOM_GIT_HASH}" AOM_GIT_HASH) - string(STRIP "${AOM_GIT_DESCRIPTION}" AOM_GIT_DESCRIPTION) +if (NOT GIT_FOUND) + message("--- Git missing, version will be read from CHANGELOG.") endif () configure_file("${AOM_ROOT}/build/cmake/aom_config.c.cmake" @@ -367,64 +351,26 @@ foreach(NUM RANGE ${AOM_RTCD_CUSTOM_COMMAND_COUNT}) OUTPUT_FILE ${AOM_RTCD_HEADER_FILE}) endforeach() -function (add_rtcd_build_step config output source symbol) - add_custom_command( - OUTPUT ${output} - COMMAND ${PERL_EXECUTABLE} - ARGS "${AOM_ROOT}/build/make/rtcd.pl" - --arch=${AOM_TARGET_CPU} - --sym=${symbol} - ${AOM_RTCD_FLAGS} - --config=${AOM_CONFIG_DIR}/${AOM_TARGET_CPU}_rtcd_config.rtcd - ${config} - > ${output} - DEPENDS ${config} - COMMENT "Generating ${output}" - WORKING_DIRECTORY ${AOM_CONFIG_DIR} - VERBATIM) - set_property(SOURCE ${source} PROPERTY OBJECT_DEPENDS ${output}) - set_property(SOURCE ${output} PROPERTY GENERATED) -endfunction () - # Generate aom_version.h. -if ("${AOM_GIT_DESCRIPTION}" STREQUAL "") - set(AOM_GIT_DESCRIPTION "${AOM_ROOT}/CHANGELOG") -endif () execute_process( - COMMAND ${PERL_EXECUTABLE} "${AOM_ROOT}/build/cmake/aom_version.pl" - --version_data=${AOM_GIT_DESCRIPTION} - --version_filename=${AOM_CONFIG_DIR}/aom_version.h) + COMMAND ${CMAKE_COMMAND} + -DAOM_CONFIG_DIR=${AOM_CONFIG_DIR} + -DAOM_ROOT=${AOM_ROOT} + -DGIT_EXECUTABLE=${GIT_EXECUTABLE} + -DPERL_EXECUTABLE=${PERL_EXECUTABLE} + -P "${AOM_ROOT}/build/cmake/version.cmake") -# Generate aom.pc (pkg-config file). if (NOT MSVC) - # Extract the version string from aom_version.h - file(STRINGS "${AOM_CONFIG_DIR}/aom_version.h" aom_version - REGEX "VERSION_STRING_NOSP") - string(REPLACE "#define VERSION_STRING_NOSP \"v" "" aom_version - "${aom_version}") - string(REPLACE "\"" "" aom_version "${aom_version}") - - # Write pkg-config info. - set(prefix "${CMAKE_INSTALL_PREFIX}") - set(pkgconfig_file "${AOM_CONFIG_DIR}/aom.pc") - string(TOLOWER ${CMAKE_PROJECT_NAME} pkg_name) - file(WRITE "${pkgconfig_file}" "# libaom pkg-config.\n") - file(APPEND "${pkgconfig_file}" "prefix=${prefix}\n") - file(APPEND "${pkgconfig_file}" "exec_prefix=${prefix}/bin\n") - file(APPEND "${pkgconfig_file}" "libdir=${prefix}/lib\n") - file(APPEND "${pkgconfig_file}" "includedir=${prefix}/include\n\n") - file(APPEND "${pkgconfig_file}" "Name: ${pkg_name}\n") - file(APPEND "${pkgconfig_file}" "Description: AV1 codec library.\n") - file(APPEND "${pkgconfig_file}" "Version: ${aom_version}\n") - file(APPEND "${pkgconfig_file}" "Requires:\n") - file(APPEND "${pkgconfig_file}" "Conflicts:\n") - file(APPEND "${pkgconfig_file}" "Libs: -L${prefix}/lib -l${pkg_name} -lm\n") - if (CONFIG_MULTITHREAD AND HAVE_PTHREAD_H) - file(APPEND "${pkgconfig_file}" "Libs.private: -lm -lpthread\n") - else () - file(APPEND "${pkgconfig_file}" "Libs.private: -lm\n") - endif () - file(APPEND "${pkgconfig_file}" "Cflags: -I${prefix}/include\n") + # Generate aom.pc (pkg-config file). + execute_process( + COMMAND ${CMAKE_COMMAND} + -DAOM_CONFIG_DIR=${AOM_CONFIG_DIR} + -DAOM_ROOT=${AOM_ROOT} + -DCMAKE_INSTALL_PREFIX=${CMAKE_INSTALL_PREFIX} + -DCMAKE_PROJECT_NAME=${CMAKE_PROJECT_NAME} + -DCONFIG_MULTITHREAD=${CONFIG_MULTITHREAD} + -DHAVE_PTHREAD_H=${HAVE_PTHREAD_H} + -P "${AOM_ROOT}/build/cmake/pkg_config.cmake") endif () endif () # AOM_BUILD_CMAKE_AOM_CONFIGURE_CMAKE_ diff --git a/third_party/aom/build/cmake/aom_experiment_deps.cmake b/third_party/aom/build/cmake/aom_experiment_deps.cmake new file mode 100644 index 0000000000..938af23862 --- /dev/null +++ b/third_party/aom/build/cmake/aom_experiment_deps.cmake @@ -0,0 +1,139 @@ +## +## Copyright (c) 2017, Alliance for Open Media. All rights reserved +## +## This source code is subject to the terms of the BSD 2 Clause License and +## the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License +## was not distributed with this source code in the LICENSE file, you can +## obtain it at www.aomedia.org/license/software. If the Alliance for Open +## Media Patent License 1.0 was not distributed with this source code in the +## PATENTS file, you can obtain it at www.aomedia.org/license/patent. +## +if (NOT AOM_BUILD_CMAKE_AOM_EXPERIMENT_DEPS_CMAKE_) +set(AOM_BUILD_CMAKE_AOM_EXPERIMENT_DEPS_CMAKE_ 1) + +# Adjusts CONFIG_* CMake variables to address conflicts between active AV1 +# experiments. +macro (fix_experiment_configs) + if (CONFIG_ANALYZER) + if (NOT CONFIG_INSPECTION) + change_config_and_warn(CONFIG_INSPECTION 1 CONFIG_ANALYZER) + endif () + endif () + + if (CONFIG_VAR_TX_NO_TX_MODE AND NOT CONFIG_VAR_TX) + change_config_and_warn(CONFIG_VAR_TX 1 CONFIG_VAR_TX_NO_TX_MODE) + endif () + + if (CONFIG_CHROMA_2X2) + change_config_and_warn(CONFIG_CHROMA_SUB8X8 0 CONFIG_CHROMA_2X2) + endif () + + if (CONFIG_DAALA_TX) + set(CONFIG_DAALA_DCT4 1) + set(CONFIG_DAALA_DCT8 1) + set(CONFIG_DAALA_DCT16 1) + set(CONFIG_DAALA_DCT32 1) + set(CONFIG_DAALA_DCT64 1) + endif () + + if (CONFIG_DAALA_DCT64) + if (NOT CONFIG_TX64X64) + set(CONFIG_DAALA_DCT64 0) + message("--- DAALA_DCT64 requires TX64X64: disabled DAALA_DCT64") + endif () + endif () + + if (CONFIG_DAALA_DCT4 OR CONFIG_DAALA_DCT8 OR CONFIG_DAALA_DCT16 OR + CONFIG_DAALA_DCT32 OR CONFIG_DAALA_DCT64) + if (CONFIG_LGT) + change_config_and_warn(CONFIG_LGT 0 CONFIG_DAALA_DCTx) + endif () + if (NOT CONFIG_LOWBITDEPTH) + change_config_and_warn(CONFIG_LOWBITDEPTH 1 CONFIG_DAALA_DCTx) + endif () + endif () + + if (CONFIG_TXK_SEL) + if (NOT CONFIG_LV_MAP) + change_config_and_warn(CONFIG_LV_MAP 1 CONFIG_TXK_SEL) + endif () + endif () + + if (CONFIG_CTX1D) + if (NOT CONFIG_LV_MAP) + change_config_and_warn(CONFIG_LV_MAP 1 CONFIG_CTX1D) + endif () + if (NOT CONFIG_EXT_TX) + change_config_and_warn(CONFIG_EXT_TX 1 CONFIG_CTX1D) + endif () + endif () + + if (CONFIG_EXT_COMP_REFS) + if (NOT CONFIG_EXT_REFS) + change_config_and_warn(CONFIG_EXT_REFS 1 CONFIG_EXT_COMP_REFS) + endif () + endif () + + if (CONFIG_STRIPED_LOOP_RESTORATION) + if (NOT CONFIG_LOOP_RESTORATION) + change_config_and_warn(CONFIG_LOOP_RESTORATION 1 + CONFIG_STRIPED_LOOP_RESTORATION) + endif () + endif () + + if (CONFIG_MFMV) + if (NOT CONFIG_FRAME_MARKER) + change_config_and_warn(CONFIG_FRAME_MARKER 1 CONFIG_MFMV) + endif () + endif () + + if (CONFIG_NEW_MULTISYMBOL) + if (NOT CONFIG_RESTRICT_COMPRESSED_HDR) + change_config_and_warn(CONFIG_RESTRICT_COMPRESSED_HDR 1 + CONFIG_NEW_MULTISYMBOL) + endif () + endif () + + if (CONFIG_EXT_PARTITION_TYPES) + if (CONFIG_SUPERTX) + change_config_and_warn(CONFIG_SUPERTX 0 + CONFIG_EXT_PARTITION_TYPES) + endif () + endif () + + if (CONFIG_JNT_COMP) + if (NOT CONFIG_FRAME_MARKER) + change_config_and_warn(CONFIG_FRAME_MARKER 1 CONFIG_JNT_COMP) + endif () + endif () + + if (CONFIG_AMVR) + change_config_and_warn(CONFIG_HASH_ME 1 CONFIG_AMVR) + endif () + + if (CONFIG_PVQ) + if (CONFIG_EXT_TX) + change_config_and_warn(CONFIG_EXT_TX 0 CONFIG_PVQ) + endif () + if (CONFIG_HIGHBITDEPTH) + change_config_and_warn(CONFIG_HIGHBITDEPTH 0 CONFIG_PVQ) + endif () + if (CONFIG_PALETTE_THROUGHPUT) + change_config_and_warn(CONFIG_PALETTE_THROUGHPUT 0 CONFIG_PVQ) + endif () + if (CONFIG_RECT_TX) + change_config_and_warn(CONFIG_RECT_TX 0 CONFIG_PVQ) + endif () + if (CONFIG_VAR_TX) + change_config_and_warn(CONFIG_VAR_TX 0 CONFIG_PVQ) + endif () + endif () + + if (CONFIG_HORZONLY_FRAME_SUPERRES) + if (NOT CONFIG_FRAME_SUPERRES) + change_config_and_warn(CONFIG_FRAME_SUPERRES 1 CONFIG_HORZONLY_FRAME_SUPERRES) + endif () + endif () +endmacro () + +endif () # AOM_BUILD_CMAKE_AOM_EXPERIMENT_DEPS_CMAKE_ diff --git a/third_party/aom/build/cmake/aom_optimization.cmake b/third_party/aom/build/cmake/aom_optimization.cmake index 456798cebe..c58c3993ec 100644 --- a/third_party/aom/build/cmake/aom_optimization.cmake +++ b/third_party/aom/build/cmake/aom_optimization.cmake @@ -238,4 +238,27 @@ function (test_nasm) endif () endfunction () +# Adds build command for generation of rtcd C source files using +# build/make/rtcd.pl. $config is the input perl file, $output is the output C +# include file, $source is the C source file, and $symbol is used for the symbol +# argument passed to rtcd.pl. +function (add_rtcd_build_step config output source symbol) + add_custom_command( + OUTPUT ${output} + COMMAND ${PERL_EXECUTABLE} + ARGS "${AOM_ROOT}/build/make/rtcd.pl" + --arch=${AOM_TARGET_CPU} + --sym=${symbol} + ${AOM_RTCD_FLAGS} + --config=${AOM_CONFIG_DIR}/${AOM_TARGET_CPU}_rtcd_config.rtcd + ${config} + > ${output} + DEPENDS ${config} + COMMENT "Generating ${output}" + WORKING_DIRECTORY ${AOM_CONFIG_DIR} + VERBATIM) + set_property(SOURCE ${source} PROPERTY OBJECT_DEPENDS ${output}) + set_property(SOURCE ${output} PROPERTY GENERATED) +endfunction () + endif () # AOM_BUILD_CMAKE_AOM_OPTIMIZATION_CMAKE_ diff --git a/third_party/aom/build/cmake/compiler_flags.cmake b/third_party/aom/build/cmake/compiler_flags.cmake index ee6d12bd34..aa34b83aef 100644 --- a/third_party/aom/build/cmake/compiler_flags.cmake +++ b/third_party/aom/build/cmake/compiler_flags.cmake @@ -13,53 +13,93 @@ set(AOM_BUILD_CMAKE_COMPILER_FLAGS_CMAKE_ 1) include(CheckCCompilerFlag) include(CheckCXXCompilerFlag) +include("${AOM_ROOT}/build/cmake/compiler_tests.cmake") -# Strings used to cache failed C/CXX flags. +# Strings used to cache flags. +set(AOM_C_FLAGS) +set(AOM_CXX_FLAGS) +set(AOM_EXE_LINKER_FLAGS) set(AOM_FAILED_C_FLAGS) set(AOM_FAILED_CXX_FLAGS) -# Checks C compiler for support of $c_flag. Adds $c_flag to $CMAKE_C_FLAGS when -# the compile test passes. Caches $c_flag in $AOM_FAILED_C_FLAGS when the test -# fails. +# Sets variable named by $out_is_present to YES in the caller's scope when $flag +# is found in the string variable named by $flag_cache. Sets the var to NO +# otherwise. +function(is_flag_present flag_cache flag out_is_present) + string(FIND "${${flag_cache}}" "${flag}" flag_pos) + if (${flag_pos} EQUAL -1) + set(${out_is_present} NO PARENT_SCOPE) + else () + set(${out_is_present} YES PARENT_SCOPE) + endif () +endfunction () + +# Appends $flag to $flags. Ignores scope via use of FORCE with set() call. +function (append_flag flags flag) + string(FIND "${${flags}}" "${flag}" found) + if (${found} EQUAL -1) + set(${flags} "${${flags}} ${flag}" CACHE STRING "" FORCE) + endif () +endfunction () + +# Checks C compiler for support of $c_flag. Adds $c_flag to all +# $CMAKE_C_FLAGS_<CONFIG>s stored in AOM_C_CONFIGS when the compile test passes. +# Caches $c_flag in $AOM_C_FLAGS or $AOM_FAILED_C_FLAGS depending on test +# outcome. function (add_c_flag_if_supported c_flag) - unset(C_FLAG_FOUND CACHE) - string(FIND "${CMAKE_C_FLAGS}" "${c_flag}" C_FLAG_FOUND) - unset(C_FLAG_FAILED CACHE) - string(FIND "${AOM_FAILED_C_FLAGS}" "${c_flag}" C_FLAG_FAILED) - - if (${C_FLAG_FOUND} EQUAL -1 AND ${C_FLAG_FAILED} EQUAL -1) - unset(C_FLAG_SUPPORTED CACHE) - message("Checking C compiler flag support for: " ${c_flag}) - check_c_compiler_flag("${c_flag}" C_FLAG_SUPPORTED) - if (C_FLAG_SUPPORTED) - set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${c_flag}" CACHE STRING "" FORCE) - else () - set(AOM_FAILED_C_FLAGS "${AOM_FAILED_C_FLAGS} ${c_flag}" CACHE STRING "" - FORCE) - endif () + if (DEBUG_CMAKE_DISABLE_COMPILER_TESTS) + return() + endif () + + is_flag_present(AOM_C_FLAGS "${c_flag}" flag_ok) + is_flag_present(AOM_FAILED_C_FLAGS "${c_flag}" flag_failed) + if (${flag_ok} OR ${flag_failed}) + return () + endif () + + unset(C_FLAG_SUPPORTED CACHE) + message("Checking C compiler flag support for: " ${c_flag}) + check_c_compiler_flag("${c_flag}" C_FLAG_SUPPORTED) + + if (${C_FLAG_SUPPORTED}) + append_flag(AOM_C_FLAGS "${c_flag}") + foreach (config ${AOM_C_CONFIGS}) + unset(C_FLAG_FOUND) + append_flag("${config}" "${c_flag}") + endforeach () + else () + append_flag(AOM_FAILED_C_FLAGS "${c_flag}") endif () endfunction () -# Checks C++ compiler for support of $cxx_flag. Adds $cxx_flag to -# $CMAKE_CXX_FLAGS when the compile test passes. Caches $c_flag in -# $AOM_FAILED_CXX_FLAGS when the test fails. +# Checks C++ compiler for support of $cxx_flag. Adds $cxx_flag to all +# $CMAKE_CXX_FLAGS_<CONFIG>s stored in AOM_CXX_CONFIGS when the compile test +# passes. +# Caches $cxx_flag in $AOM_CXX_FLAGS or $AOM_FAILED_CXX_FLAGS depending on test +# outcome. function (add_cxx_flag_if_supported cxx_flag) - unset(CXX_FLAG_FOUND CACHE) - string(FIND "${CMAKE_CXX_FLAGS}" "${cxx_flag}" CXX_FLAG_FOUND) - unset(CXX_FLAG_FAILED CACHE) - string(FIND "${AOM_FAILED_CXX_FLAGS}" "${cxx_flag}" CXX_FLAG_FAILED) - - if (${CXX_FLAG_FOUND} EQUAL -1 AND ${CXX_FLAG_FAILED} EQUAL -1) - unset(CXX_FLAG_SUPPORTED CACHE) - message("Checking CXX compiler flag support for: " ${cxx_flag}) - check_cxx_compiler_flag("${cxx_flag}" CXX_FLAG_SUPPORTED) - if (CXX_FLAG_SUPPORTED) - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${cxx_flag}" CACHE STRING "" - FORCE) - else() - set(AOM_FAILED_CXX_FLAGS "${AOM_FAILED_CXX_FLAGS} ${cxx_flag}" CACHE - STRING "" FORCE) - endif () + if (DEBUG_CMAKE_DISABLE_COMPILER_TESTS) + return() + endif () + + is_flag_present(AOM_CXX_FLAGS "${cxx_flag}" flag_ok) + is_flag_present(AOM_FAILED_CXX_FLAGS "${cxx_flag}" flag_failed) + if (${flag_ok} OR ${flag_failed}) + return () + endif () + + unset(CXX_FLAG_SUPPORTED CACHE) + message("Checking C++ compiler flag support for: " ${cxx_flag}) + check_cxx_compiler_flag("${cxx_flag}" CXX_FLAG_SUPPORTED) + + if (${CXX_FLAG_SUPPORTED}) + append_flag(AOM_CXX_FLAGS "${cxx_flag}") + foreach (config ${AOM_CXX_CONFIGS}) + unset(CXX_FLAG_FOUND) + append_flag("${config}" "${cxx_flag}") + endforeach () + else () + append_flag(AOM_FAILED_CXX_FLAGS "${cxx_flag}") endif () endfunction () @@ -73,47 +113,78 @@ endfunction () # Checks C compiler for support of $c_flag and terminates generation when # support is not present. function (require_c_flag c_flag update_c_flags) - unset(C_FLAG_FOUND CACHE) - string(FIND "${CMAKE_C_FLAGS}" "${c_flag}" C_FLAG_FOUND) - - if (${C_FLAG_FOUND} EQUAL -1) - unset(HAVE_C_FLAG CACHE) - message("Checking C compiler flag support for: " ${c_flag}) - check_c_compiler_flag("${c_flag}" HAVE_C_FLAG) - if (NOT HAVE_C_FLAG) - message(FATAL_ERROR - "${PROJECT_NAME} requires support for C flag: ${c_flag}.") - endif () - if (update_c_flags) - set(CMAKE_C_FLAGS "${c_flag} ${CMAKE_C_FLAGS}" CACHE STRING "" FORCE) - endif () + if (DEBUG_CMAKE_DISABLE_COMPILER_TESTS) + return() + endif () + + is_flag_present(AOM_C_FLAGS "${c_flag}" flag_ok) + if (${flag_ok}) + return () + endif () + + if (NOT "${AOM_EXE_LINKER_FLAGS}" STREQUAL "") + aom_push_var(CMAKE_EXE_LINKER_FLAGS "${AOM_EXE_LINKER_FLAGS}") + endif () + + unset(HAVE_C_FLAG CACHE) + message("Checking C compiler flag support for: " ${c_flag}) + check_c_compiler_flag("${c_flag}" HAVE_C_FLAG) + if (NOT HAVE_C_FLAG) + message(FATAL_ERROR + "${PROJECT_NAME} requires support for C flag: ${c_flag}.") + endif () + + if (NOT "${AOM_EXE_LINKER_FLAGS}" STREQUAL "") + aom_pop_var(CMAKE_EXE_LINKER_FLAGS) + endif () + + append_flag(AOM_C_FLAGS "${c_flag}") + if (update_c_flags) + foreach (config ${AOM_C_CONFIGS}) + set(${config} "${${config}} ${c_flag}" CACHE STRING "" FORCE) + endforeach () endif () endfunction () # Checks CXX compiler for support of $cxx_flag and terminates generation when # support is not present. function (require_cxx_flag cxx_flag update_cxx_flags) - unset(CXX_FLAG_FOUND CACHE) - string(FIND "${CMAKE_CXX_FLAGS}" "${cxx_flag}" CXX_FLAG_FOUND) - - if (${CXX_FLAG_FOUND} EQUAL -1) - unset(HAVE_CXX_FLAG CACHE) - message("Checking CXX compiler flag support for: " ${cxx_flag}) - check_cxx_compiler_flag("${cxx_flag}" HAVE_CXX_FLAG) - if (NOT HAVE_CXX_FLAG) - message(FATAL_ERROR - "${PROJECT_NAME} requires support for CXX flag: ${cxx_flag}.") - endif () - if (update_cxx_flags) - set(CMAKE_CXX_FLAGS "${cxx_flag} ${CMAKE_CXX_FLAGS}" CACHE STRING "" - FORCE) - endif () + if (DEBUG_CMAKE_DISABLE_COMPILER_TESTS) + return() + endif () + + is_flag_present(AOM_CXX_FLAGS "${cxx_flag}" flag_ok) + if (${flag_ok}) + return () + endif () + + if (NOT "${AOM_EXE_LINKER_FLAGS}" STREQUAL "") + aom_push_var(CMAKE_EXE_LINKER_FLAGS "${AOM_EXE_LINKER_FLAGS}") + endif () + + unset(HAVE_CXX_FLAG CACHE) + message("Checking C compiler flag support for: " ${cxx_flag}) + check_cxx_compiler_flag("${cxx_flag}" HAVE_CXX_FLAG) + if (NOT HAVE_CXX_FLAG) + message(FATAL_ERROR + "${PROJECT_NAME} requires support for C flag: ${cxx_flag}.") + endif () + + if (NOT "${AOM_EXE_LINKER_FLAGS}" STREQUAL "") + aom_pop_var(CMAKE_EXE_LINKER_FLAGS) + endif () + + append_flag(AOM_CXX_FLAGS "${cxx_flag}") + if (update_cxx_flags) + foreach (config ${AOM_CXX_CONFIGS}) + set(${config} "${${config}} ${cxx_flag}" CACHE STRING "" FORCE) + endforeach () endif () endfunction () # Checks for support of $flag by both the C and CXX compilers. Terminates # generation when support is not present in both compilers. -function (require_flag flag update_cmake_flags) +function (require_compiler_flag flag update_cmake_flags) require_c_flag(${flag} ${update_cmake_flags}) require_cxx_flag(${flag} ${update_cmake_flags}) endfunction () @@ -137,7 +208,7 @@ endfunction () # Checks only non-MSVC targets for support of $flag by both the C and CXX # compilers. Terminates generation when support is not present in both # compilers. -function (require_flag_nomsvc flag update_cmake_flags) +function (require_compiler_flag_nomsvc flag update_cmake_flags) require_c_flag_nomsvc(${flag} ${update_cmake_flags}) require_cxx_flag_nomsvc(${flag} ${update_cmake_flags}) endfunction () @@ -145,25 +216,29 @@ endfunction () # Adds $preproc_def to C compiler command line (as -D$preproc_def) if not # already present. function (add_c_preproc_definition preproc_def) - unset(PREPROC_DEF_FOUND CACHE) - string(FIND "${CMAKE_C_FLAGS}" "${preproc_def}" PREPROC_DEF_FOUND) - - if (${PREPROC_DEF_FOUND} EQUAL -1) - set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -D${preproc_def}" CACHE STRING "" - FORCE) + set(preproc_def "-D${preproc_def}") + is_flag_present(AOM_C_FLAGS "${preproc_def}" flag_cached) + if (${flag_cached}) + return () endif () + + foreach (config ${AOM_C_CONFIGS}) + set(${config} "${${config}} ${preproc_def}" CACHE STRING "" FORCE) + endforeach () endfunction () # Adds $preproc_def to CXX compiler command line (as -D$preproc_def) if not # already present. function (add_cxx_preproc_definition preproc_def) - unset(PREPROC_DEF_FOUND CACHE) - string(FIND "${CMAKE_CXX_FLAGS}" "${preproc_def}" PREPROC_DEF_FOUND) - - if (${PREPROC_DEF_FOUND} EQUAL -1) - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -D${preproc_def}" CACHE STRING "" - FORCE) + set(preproc_def "-D${preproc_def}") + is_flag_present(AOM_CXX_FLAGS "${preproc_def}" flag_cached) + if (${flag_cached}) + return () endif () + + foreach (config ${AOM_CXX_CONFIGS}) + set(${config} "${${config}} ${preproc_def}" CACHE STRING "" FORCE) + endforeach () endfunction () # Adds $preproc_def to C and CXX compiler command line (as -D$preproc_def) if @@ -175,32 +250,35 @@ endfunction () # Adds $flag to assembler command line. function (append_as_flag flag) - unset(AS_FLAG_FOUND CACHE) - string(FIND "${AOM_AS_FLAGS}" "${flag}" AS_FLAG_FOUND) - - if (${AS_FLAG_FOUND} EQUAL -1) - set(AOM_AS_FLAGS "${AOM_AS_FLAGS} ${flag}" CACHE STRING "" FORCE) + is_flag_present(AOM_AS_FLAGS "${flag}" flag_cached) + if (${flag_cached}) + return () endif () + append_flag(AOM_AS_FLAGS "${flag}") endfunction () # Adds $flag to the C compiler command line. function (append_c_flag flag) - unset(C_FLAG_FOUND CACHE) - string(FIND "${CMAKE_C_FLAGS}" "${flag}" C_FLAG_FOUND) - - if (${C_FLAG_FOUND} EQUAL -1) - set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${flag}" CACHE STRING "" FORCE) + is_flag_present(AOM_C_FLAGS "${flag}" flag_cached) + if (${flag_cached}) + return () endif () + + foreach (config ${AOM_C_CONFIGS}) + append_flag(${config} "${flag}") + endforeach () endfunction () # Adds $flag to the CXX compiler command line. function (append_cxx_flag flag) - unset(CXX_FLAG_FOUND CACHE) - string(FIND "${CMAKE_CXX_FLAGS}" "${flag}" CXX_FLAG_FOUND) - - if (${CXX_FLAG_FOUND} EQUAL -1) - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${flag}" CACHE STRING "" FORCE) + is_flag_present(AOM_CXX_FLAGS "${flag}" flag_cached) + if (${flag_cached}) + return () endif () + + foreach (config ${AOM_CXX_CONFIGS}) + append_flag(${config} "${flag}") + endforeach () endfunction () # Adds $flag to the C and CXX compiler command lines. @@ -209,30 +287,29 @@ function (append_compiler_flag flag) append_cxx_flag(${flag}) endfunction () -# Adds $flag to the executable linker command line. +# Adds $flag to the executable linker command line when not present. function (append_exe_linker_flag flag) - unset(LINKER_FLAG_FOUND CACHE) - string(FIND "${CMAKE_EXE_LINKER_FLAGS}" "${flag}" LINKER_FLAG_FOUND) - - if (${LINKER_FLAG_FOUND} EQUAL -1) - set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${flag}" CACHE STRING - "" FORCE) + is_flag_present(AOM_EXE_LINKER_FLAGS "${flag}" flag_cached) + if (${flag_cached}) + return() endif () + + append_flag(AOM_EXE_LINKER_FLAGS "${flag}") + foreach (config ${AOM_EXE_LINKER_CONFIGS}) + append_flag(${config} "${flag}") + endforeach () endfunction () # Adds $flag to the link flags for $target. -function (append_link_flag_to_target target flags) +function (append_link_flag_to_target target flag) unset(target_link_flags) get_target_property(target_link_flags ${target} LINK_FLAGS) if (target_link_flags) - unset(link_flag_found) - string(FIND "${target_link_flags}" "${flags}" link_flag_found) - - if (NOT ${link_flag_found} EQUAL -1) + is_flag_present(target_link_flags "${flag}" flag_found) + if (${flag_found}) return() endif () - set(target_link_flags "${target_link_flags} ${flags}") else () set(target_link_flags "${flags}") @@ -241,4 +318,55 @@ function (append_link_flag_to_target target flags) set_target_properties(${target} PROPERTIES LINK_FLAGS ${target_link_flags}) endfunction () +# Adds $flag to executable linker flags, and makes sure C/CXX builds still work. +function (require_linker_flag flag) + if (DEBUG_CMAKE_DISABLE_COMPILER_TESTS) + return() + endif () + + append_exe_linker_flag(${flag}) + + unset(c_passed) + aom_check_c_compiles("LINKER_FLAG_C_TEST(${flag})" "" c_passed) + unset(cxx_passed) + aom_check_cxx_compiles("LINKER_FLAG_CXX_TEST(${flag})" "" cxx_passed) + + if (NOT c_passed OR NOT cxx_passed) + message(FATAL_ERROR "Linker flag test for ${flag} failed.") + endif () +endfunction () + +# Appends flags in $AOM_EXTRA_<TYPE>_FLAGS variables to the flags used at build +# time. +function (set_user_flags) + # Linker flags are handled first because some C/CXX flags require that a + # linker flag is present at link time. + if (AOM_EXTRA_EXE_LINKER_FLAGS) + is_flag_present(AOM_EXE_LINKER_FLAGS "${AOM_EXTRA_EXE_LINKER_FLAGS}" + extra_present) + if (NOT ${extra_present}) + require_linker_flag("${AOM_EXTRA_EXE_LINKER_FLAGS}") + endif () + endif () + if (AOM_EXTRA_AS_FLAGS) + # TODO(tomfinegan): assembler flag testing would be a good thing to have. + is_flag_present(AOM_AS_FLAGS "${AOM_EXTRA_AS_FLAGS}" extra_present) + if (NOT ${extra_present}) + append_flag(AOM_AS_FLAGS "${AOM_EXTRA_AS_FLAGS}") + endif () + endif () + if (AOM_EXTRA_C_FLAGS) + is_flag_present(AOM_C_FLAGS "${AOM_EXTRA_C_FLAGS}" extra_present) + if (NOT ${extra_present}) + require_c_flag("${AOM_EXTRA_C_FLAGS}" YES) + endif () + endif () + if (AOM_EXTRA_CXX_FLAGS) + is_flag_present(AOM_CXX_FLAGS "${AOM_EXTRA_CXX_FLAGS}" extra_present) + if (NOT ${extra_present}) + require_cxx_flag("${AOM_EXTRA_CXX_FLAGS}" YES) + endif () + endif () +endfunction () + endif () # AOM_BUILD_CMAKE_COMPILER_FLAGS_CMAKE_ diff --git a/third_party/aom/build/cmake/compiler_tests.cmake b/third_party/aom/build/cmake/compiler_tests.cmake index 89f0bc12cd..8a73ec8fff 100644 --- a/third_party/aom/build/cmake/compiler_tests.cmake +++ b/third_party/aom/build/cmake/compiler_tests.cmake @@ -14,6 +14,34 @@ set(AOM_BUILD_CMAKE_COMPILER_TESTS_CMAKE_ 1) include(CheckCSourceCompiles) include(CheckCXXSourceCompiles) +# CMake passes command line flags like this: +# $compiler $lang_flags $lang_flags_config ... +# To ensure the flags tested here and elsewhere are obeyed a list of active +# build configuration types is built, and flags are applied to the flag strings +# for each configuration currently active for C and CXX builds as determined by +# reading $CMAKE_CONFIGURATION_TYPES and $CMAKE_BUILD_TYPE. When +# $CMAKE_CONFIGURATION_TYPES is non-empty a multi-configuration generator is in +# use: currently this includes MSVC and Xcode. For other generators +# $CMAKE_BUILD_TYPE is used. For both cases AOM_<LANG>_CONFIGS is populated with +# CMake string variable names that contain flags for the currently available +# configuration(s). +unset(AOM_C_CONFIGS) +unset(AOM_CXX_CONFIGS) +list(LENGTH CMAKE_CONFIGURATION_TYPES num_configs) +if (${num_configs} GREATER 0) + foreach (config ${CMAKE_CONFIGURATION_TYPES}) + string(TOUPPER ${config} config) + list(APPEND AOM_C_CONFIGS "CMAKE_C_FLAGS_${config}") + list(APPEND AOM_CXX_CONFIGS "CMAKE_CXX_FLAGS_${config}") + list(APPEND AOM_EXE_LINKER_CONFIGS "CMAKE_EXE_LINKER_FLAGS_${config}") + endforeach () +else () + string(TOUPPER ${CMAKE_BUILD_TYPE} config) + set(AOM_C_CONFIGS "CMAKE_C_FLAGS_${config}") + set(AOM_CXX_CONFIGS "CMAKE_CXX_FLAGS_${config}") + set(AOM_EXE_LINKER_CONFIGS "CMAKE_EXE_LINKER_FLAGS_${config}") +endif () + # The basic main() function used in all compile tests. set(AOM_C_MAIN "\nint main(void) { return 0; }") set(AOM_CXX_MAIN "\nint main() { return 0; }") @@ -25,8 +53,8 @@ set(AOM_CXX_PASSED_TESTS) set(AOM_CXX_FAILED_TESTS) function(aom_push_var var new_value) - set(SAVED_${var} ${var} PARENT_SCOPE) - set(${var} ${new_value} PARENT_SCOPE) + set(SAVED_${var} ${${var}} PARENT_SCOPE) + set(${var} "${${var}} ${new_value}" PARENT_SCOPE) endfunction () function(aom_pop_var var) @@ -40,6 +68,10 @@ endfunction () # The test is not run if the test name is found in either of the passed or # failed test variables. function(aom_check_c_compiles test_name test_source result_var) + if (DEBUG_CMAKE_DISABLE_COMPILER_TESTS) + return() + endif () + unset(C_TEST_PASSED CACHE) unset(C_TEST_FAILED CACHE) string(FIND "${AOM_C_PASSED_TESTS}" "${test_name}" C_TEST_PASSED) @@ -71,6 +103,10 @@ endfunction () # The test is not run if the test name is found in either of the passed or # failed test variables. function(aom_check_cxx_compiles test_name test_source result_var) + if (DEBUG_CMAKE_DISABLE_COMPILER_TESTS) + return() + endif () + unset(CXX_TEST_PASSED CACHE) unset(CXX_TEST_FAILED CACHE) string(FIND "${AOM_CXX_PASSED_TESTS}" "${test_name}" CXX_TEST_PASSED) @@ -100,9 +136,9 @@ endfunction () # Convenience function that confirms $test_source compiles as C and C++. # $result_var is set to 1 when both tests are successful, and 0 when one or both # tests fail. -# Note: This function is intended to be used to write to result variables that are -# expanded via configure_file(). $result_var is set to 1 or 0 to allow direct -# usage of the value in generated source files. +# Note: This function is intended to be used to write to result variables that +# are expanded via configure_file(). $result_var is set to 1 or 0 to allow +# direct usage of the value in generated source files. function(aom_check_source_compiles test_name test_source result_var) unset(C_PASSED) unset(CXX_PASSED) diff --git a/third_party/aom/build/cmake/dist.cmake b/third_party/aom/build/cmake/dist.cmake index 0de68a44d4..ad1e069fe1 100644 --- a/third_party/aom/build/cmake/dist.cmake +++ b/third_party/aom/build/cmake/dist.cmake @@ -17,8 +17,8 @@ function (listify_string in_string out_string) set(${out_string} "${${out_string}}" PARENT_SCOPE) endfunction () -set(REQUIRED_ARGS "AOM_ROOT" "AOM_CONFIG_DIR" "AOM_DIST_DIR" "AOM_DIST_EXAMPLES" - "AOM_DIST_APPS" "AOM_DIST_INCLUDES" "AOM_DIST_LIBS" "ENABLE_DOCS") +set(REQUIRED_ARGS "AOM_ROOT" "AOM_CONFIG_DIR" "AOM_DIST_DIR" "AOM_DIST_INCLUDES" + "AOM_DIST_LIBS" "ENABLE_DOCS") foreach (arg ${REQUIRED_ARGS}) if ("${${arg}}" STREQUAL "") @@ -30,15 +30,27 @@ if (ENABLE_DOCS) file(INSTALL "${AOM_CONFIG_DIR}/docs" DESTINATION "${AOM_DIST_DIR}") endif () -listify_string("${AOM_DIST_EXAMPLES}" "AOM_DIST_EXAMPLES") -foreach (example ${AOM_DIST_EXAMPLES}) - file(INSTALL "${example}" DESTINATION "${AOM_DIST_DIR}/bin/examples") -endforeach () +if (AOM_DIST_EXAMPLES) + listify_string("${AOM_DIST_EXAMPLES}" "AOM_DIST_EXAMPLES") + foreach (example ${AOM_DIST_EXAMPLES}) + if (NOT "${example}" MATCHES "aomdec\|aomenc") + file(INSTALL "${example}" DESTINATION "${AOM_DIST_DIR}/bin/examples") + endif () + endforeach () +endif () -listify_string("${AOM_DIST_APPS}" "AOM_DIST_APPS") -foreach (app ${AOM_DIST_APPS}) - file(INSTALL "${app}" DESTINATION "${AOM_DIST_DIR}/bin") -endforeach () +if (AOM_DIST_TOOLS) + foreach (tool ${AOM_DIST_TOOLS}) + file(INSTALL "${tool}" DESTINATION "${AOM_DIST_DIR}/bin/tools") + endforeach () +endif () + +if (AOM_DIST_APPS) + listify_string("${AOM_DIST_APPS}" "AOM_DIST_APPS") + foreach (app ${AOM_DIST_APPS}) + file(INSTALL "${app}" DESTINATION "${AOM_DIST_DIR}/bin") + endforeach () +endif () listify_string("${AOM_DIST_INCLUDES}" "AOM_DIST_INCLUDES") foreach (inc ${AOM_DIST_INCLUDES}) diff --git a/third_party/aom/build/cmake/pkg_config.cmake b/third_party/aom/build/cmake/pkg_config.cmake new file mode 100644 index 0000000000..aee375f430 --- /dev/null +++ b/third_party/aom/build/cmake/pkg_config.cmake @@ -0,0 +1,57 @@ +## +## Copyright (c) 2017, Alliance for Open Media. All rights reserved +## +## This source code is subject to the terms of the BSD 2 Clause License and +## the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License +## was not distributed with this source code in the LICENSE file, you can +## obtain it at www.aomedia.org/license/software. If the Alliance for Open +## Media Patent License 1.0 was not distributed with this source code in the +## PATENTS file, you can obtain it at www.aomedia.org/license/patent. +## +cmake_minimum_required(VERSION 3.5) + +set(REQUIRED_ARGS + "AOM_ROOT" "AOM_CONFIG_DIR" "CMAKE_INSTALL_PREFIX" "CMAKE_PROJECT_NAME" + "CONFIG_MULTITHREAD" "HAVE_PTHREAD_H") + +foreach (arg ${REQUIRED_ARGS}) + if ("${${arg}}" STREQUAL "") + message(FATAL_ERROR "${arg} must not be empty.") + endif () +endforeach () + +include("${AOM_ROOT}/build/cmake/util.cmake") + +extract_version_string("${AOM_CONFIG_DIR}/aom_version.h" aom_version) + +# Create a version string suitable for comparison using the RPM version compare +# algorithm: strip out everything after the number. +string(FIND "${aom_version}" "-" dash_pos) +if (${dash_pos} EQUAL -1) + set(package_version "${aom_version}") +else () + string(SUBSTRING "${aom_version}" 0 ${dash_pos} package_version) +endif () + +# Write pkg-config info. +set(prefix "${CMAKE_INSTALL_PREFIX}") +set(pkgconfig_file "${AOM_CONFIG_DIR}/aom.pc") +string(TOLOWER ${CMAKE_PROJECT_NAME} pkg_name) +file(WRITE "${pkgconfig_file}" "# libaom pkg-config.\n") +file(APPEND "${pkgconfig_file}" "prefix=${prefix}\n") +file(APPEND "${pkgconfig_file}" "exec_prefix=${prefix}/bin\n") +file(APPEND "${pkgconfig_file}" "libdir=${prefix}/lib\n") +file(APPEND "${pkgconfig_file}" "includedir=${prefix}/include\n\n") +file(APPEND "${pkgconfig_file}" "Name: ${pkg_name}\n") +file(APPEND "${pkgconfig_file}" + "Description: AV1 codec library v${aom_version}.\n") +file(APPEND "${pkgconfig_file}" "Version: ${package_version}\n") +file(APPEND "${pkgconfig_file}" "Requires:\n") +file(APPEND "${pkgconfig_file}" "Conflicts:\n") +file(APPEND "${pkgconfig_file}" "Libs: -L${prefix}/lib -l${pkg_name} -lm\n") +if (CONFIG_MULTITHREAD AND HAVE_PTHREAD_H) + file(APPEND "${pkgconfig_file}" "Libs.private: -lm -lpthread\n") +else () + file(APPEND "${pkgconfig_file}" "Libs.private: -lm\n") +endif () +file(APPEND "${pkgconfig_file}" "Cflags: -I${prefix}/include\n") diff --git a/third_party/aom/build/cmake/sanitizers.cmake b/third_party/aom/build/cmake/sanitizers.cmake new file mode 100644 index 0000000000..2b90678680 --- /dev/null +++ b/third_party/aom/build/cmake/sanitizers.cmake @@ -0,0 +1,29 @@ +## +## Copyright (c) 2017, Alliance for Open Media. All rights reserved +## +## This source code is subject to the terms of the BSD 2 Clause License and +## the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License +## was not distributed with this source code in the LICENSE file, you can +## obtain it at www.aomedia.org/license/software. If the Alliance for Open +## Media Patent License 1.0 was not distributed with this source code in the +## PATENTS file, you can obtain it at www.aomedia.org/license/patent. +## +if (NOT AOM_BUILD_CMAKE_SANITIZERS_CMAKE_) +set(AOM_BUILD_CMAKE_SANITIZERS_CMAKE_ 1) + +if (MSVC OR NOT SANITIZE) + return () +endif () + +include("${AOM_ROOT}/build/cmake/compiler_flags.cmake") + +string(TOLOWER ${SANITIZE} SANITIZE) + +# Require the sanitizer requested. +require_linker_flag("-fsanitize=${SANITIZE}") +require_compiler_flag("-fsanitize=${SANITIZE}" YES) + +# Make callstacks accurate. +require_compiler_flag("-fno-omit-frame-pointer -fno-optimize-sibling-calls" YES) + +endif() # AOM_BUILD_CMAKE_SANITIZERS_CMAKE_ diff --git a/third_party/aom/build/cmake/toolchains/mips32-linux-gcc.cmake b/third_party/aom/build/cmake/toolchains/mips32-linux-gcc.cmake index 11406bd08a..b452e368f3 100644 --- a/third_party/aom/build/cmake/toolchains/mips32-linux-gcc.cmake +++ b/third_party/aom/build/cmake/toolchains/mips32-linux-gcc.cmake @@ -66,6 +66,10 @@ set(CMAKE_CXX_COMPILER_ARG1 "-EL ${MIPS_CXXFLAGS}") set(CMAKE_SYSTEM_PROCESSOR "mips32") # No runtime cpu detect for mips32-linux-gcc. -set(CONFIG_RUNTIME_CPU_DETECT 0 CACHE NUMBER "") +if (CONFIG_RUNTIME_CPU_DETECT) + message("--- CONFIG_RUNTIME_CPU_DETECT not supported for mips32 targets.") +endif () + +set(CONFIG_RUNTIME_CPU_DETECT 0 CACHE NUMBER "" FORCE) endif () # AOM_BUILD_CMAKE_TOOLCHAINS_MIPS32_LINUX_GCC_CMAKE_ diff --git a/third_party/aom/build/cmake/toolchains/mips64-linux-gcc.cmake b/third_party/aom/build/cmake/toolchains/mips64-linux-gcc.cmake index fffb495bfb..0b63d778d5 100644 --- a/third_party/aom/build/cmake/toolchains/mips64-linux-gcc.cmake +++ b/third_party/aom/build/cmake/toolchains/mips64-linux-gcc.cmake @@ -43,6 +43,10 @@ set(CMAKE_CXX_COMPILER_ARG1 "-EL ${MIPS_CXXFLAGS}") set(CMAKE_SYSTEM_PROCESSOR "mips64") # No runtime cpu detect for mips64-linux-gcc. -set(CONFIG_RUNTIME_CPU_DETECT 0 CACHE NUMBER "") +if (CONFIG_RUNTIME_CPU_DETECT) + message("--- CONFIG_RUNTIME_CPU_DETECT not supported for mips64 targets.") +endif () + +set(CONFIG_RUNTIME_CPU_DETECT 0 CACHE NUMBER "" FORCE) endif () # AOM_BUILD_CMAKE_TOOLCHAINS_MIPS64_LINUX_GCC_CMAKE_ diff --git a/third_party/aom/build/cmake/toolchains/x86-linux.cmake b/third_party/aom/build/cmake/toolchains/x86-linux.cmake index 077c8f325b..42cc614673 100644 --- a/third_party/aom/build/cmake/toolchains/x86-linux.cmake +++ b/third_party/aom/build/cmake/toolchains/x86-linux.cmake @@ -8,7 +8,12 @@ ## Media Patent License 1.0 was not distributed with this source code in the ## PATENTS file, you can obtain it at www.aomedia.org/license/patent. ## +if (NOT AOM_BUILD_CMAKE_TOOLCHAINS_X86_LINUX_CMAKE_) +set(AOM_BUILD_CMAKE_TOOLCHAINS_X86_LINUX_CMAKE_ 1) + set(CMAKE_SYSTEM_PROCESSOR "x86") set(CMAKE_SYSTEM_NAME "Linux") set(CMAKE_C_COMPILER_ARG1 "-m32") set(CMAKE_CXX_COMPILER_ARG1 "-m32") + +endif () # AOM_BUILD_CMAKE_TOOLCHAINS_X86_LINUX_CMAKE_ diff --git a/third_party/aom/build/cmake/toolchains/x86-mingw-gcc.cmake b/third_party/aom/build/cmake/toolchains/x86-mingw-gcc.cmake new file mode 100644 index 0000000000..bdd3fa5396 --- /dev/null +++ b/third_party/aom/build/cmake/toolchains/x86-mingw-gcc.cmake @@ -0,0 +1,29 @@ +## +## Copyright (c) 2017, Alliance for Open Media. All rights reserved +## +## This source code is subject to the terms of the BSD 2 Clause License and +## the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License +## was not distributed with this source code in the LICENSE file, you can +## obtain it at www.aomedia.org/license/software. If the Alliance for Open +## Media Patent License 1.0 was not distributed with this source code in the +## PATENTS file, you can obtain it at www.aomedia.org/license/patent. +## +if (NOT AOM_BUILD_CMAKE_TOOLCHAINS_X86_MINGW_GCC_CMAKE_) +set(AOM_BUILD_CMAKE_TOOLCHAINS_X86_MINGW_GCC_CMAKE_ 1) + +set(CMAKE_SYSTEM_PROCESSOR "x86") +set(CMAKE_SYSTEM_NAME "Windows") +set(CMAKE_C_COMPILER_ARG1 "-m32") +set(CMAKE_CXX_COMPILER_ARG1 "-m32") + +if ("${CROSS}" STREQUAL "") + set(CROSS i686-w64-mingw32-) +endif () + +set(CMAKE_C_COMPILER ${CROSS}gcc) +set(CMAKE_CXX_COMPILER ${CROSS}g++) + +# Disable the use of the gtest's CMake support. +set(AOM_DISABLE_GTEST_CMAKE 1) + +endif () # AOM_BUILD_CMAKE_TOOLCHAINS_X86_MINGW_GCC_CMAKE_ diff --git a/third_party/aom/build/cmake/toolchains/x86_64-mingw-gcc.cmake b/third_party/aom/build/cmake/toolchains/x86_64-mingw-gcc.cmake new file mode 100644 index 0000000000..be94332b4e --- /dev/null +++ b/third_party/aom/build/cmake/toolchains/x86_64-mingw-gcc.cmake @@ -0,0 +1,27 @@ +## +## Copyright (c) 2017, Alliance for Open Media. All rights reserved +## +## This source code is subject to the terms of the BSD 2 Clause License and +## the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License +## was not distributed with this source code in the LICENSE file, you can +## obtain it at www.aomedia.org/license/software. If the Alliance for Open +## Media Patent License 1.0 was not distributed with this source code in the +## PATENTS file, you can obtain it at www.aomedia.org/license/patent. +## +if (NOT AOM_BUILD_CMAKE_TOOLCHAINS_X86_64_MINGW_GCC_CMAKE_) +set(AOM_BUILD_CMAKE_TOOLCHAINS_X86_64_MINGW_GCC_CMAKE_ 1) + +set(CMAKE_SYSTEM_PROCESSOR "x86_64") +set(CMAKE_SYSTEM_NAME "Windows") + +if ("${CROSS}" STREQUAL "") + set(CROSS x86_64-w64-mingw32-) +endif () + +set(CMAKE_C_COMPILER ${CROSS}gcc) +set(CMAKE_CXX_COMPILER ${CROSS}g++) + +# Disable the use of the gtest's CMake support. +set(AOM_DISABLE_GTEST_CMAKE 1) + +endif () # AOM_BUILD_CMAKE_TOOLCHAINS_X86_64_MINGW_GCC_CMAKE_ diff --git a/third_party/aom/build/cmake/util.cmake b/third_party/aom/build/cmake/util.cmake index 62841a63b8..d6c4322297 100644 --- a/third_party/aom/build/cmake/util.cmake +++ b/third_party/aom/build/cmake/util.cmake @@ -11,9 +11,12 @@ if (NOT AOM_BUILD_CMAKE_UTIL_CMAKE_) set(AOM_BUILD_CMAKE_UTIL_CMAKE_ 1) +# Creates dummy source file in $AOM_CONFIG_DIR named $basename.$extension and +# returns the full path to the dummy source file via the $out_file_path +# parameter. function (create_dummy_source_file basename extension out_file_path) set(dummy_source_file "${AOM_CONFIG_DIR}/${basename}.${extension}") - file(WRITE "${dummy_source_file}" + file(WRITE "${dummy_source_file}" "// Generated file. DO NOT EDIT!\n" "// ${target_name} needs a ${extension} file to force link language, \n" "// or to silence a harmless CMake warning: Ignore me.\n" @@ -21,10 +24,61 @@ function (create_dummy_source_file basename extension out_file_path) set(${out_file_path} ${dummy_source_file} PARENT_SCOPE) endfunction () +# Convenience function for adding a dummy source file to $target_name using +# $extension as the file extension. Wraps create_dummy_source_file(). function (add_dummy_source_file_to_target target_name extension) create_dummy_source_file("${target_name}" "${extension}" "dummy_source_file") target_sources(${target_name} PRIVATE ${dummy_source_file}) endfunction () +# Sets the value of the variable referenced by $feature to $value, and reports +# the change to the user via call to message(WARNING ...). $cause is expected to +# be a configuration variable that conflicts with $feature in some way. +function (change_config_and_warn feature value cause) + set(${feature} ${value} PARENT_SCOPE) + if (${value} EQUAL 1) + set(verb "Enabled") + set(reason "required for") + else () + set(verb "Disabled") + set(reason "incompatible with") + endif () + set(warning_message "${verb} ${feature}, ${reason} ${cause}.") + message(WARNING "--- ${warning_message}") +endfunction () + +# Extracts the version string from $version_file and returns it to the user via +# $version_string_out_var. To achieve this VERSION_STRING_NOSP is located in +# $version_file and then everything but the string literal assigned to the +# variable is removed. Quotes and the leading 'v' are stripped from the +# returned string. +function (extract_version_string version_file version_string_out_var) + file(STRINGS "${version_file}" aom_version REGEX "VERSION_STRING_NOSP") + string(REPLACE "#define VERSION_STRING_NOSP " "" aom_version + "${aom_version}") + string(REPLACE "\"" "" aom_version "${aom_version}") + string(REPLACE " " "" aom_version "${aom_version}") + string(FIND "${aom_version}" "v" v_pos) + if (${v_pos} EQUAL 0) + string(SUBSTRING "${aom_version}" 1 -1 aom_version) + endif () + set("${version_string_out_var}" "${aom_version}" PARENT_SCOPE) +endfunction () + +# Sets CMake compiler launcher to $launcher_name when $launcher_name is found in +# $PATH. Warns user about ignoring build flag $launcher_flag when $launcher_name +# is not found in $PATH. +function (set_compiler_launcher launcher_flag launcher_name) + find_program(launcher_path "${launcher_name}") + if (launcher_path) + set(CMAKE_C_COMPILER_LAUNCHER "${launcher_path}" PARENT_SCOPE) + set(CMAKE_CXX_COMPILER_LAUNCHER "${launcher_path}" PARENT_SCOPE) + message("--- Using ${launcher_name} as compiler launcher.") + else () + message(WARNING + "--- Cannot find ${launcher_name}, ${launcher_flag} ignored.") + endif () +endfunction () + endif() # AOM_BUILD_CMAKE_UTIL_CMAKE_ diff --git a/third_party/aom/build/cmake/version.cmake b/third_party/aom/build/cmake/version.cmake new file mode 100644 index 0000000000..c2b3bdb613 --- /dev/null +++ b/third_party/aom/build/cmake/version.cmake @@ -0,0 +1,55 @@ +## +## Copyright (c) 2017, Alliance for Open Media. All rights reserved +## +## This source code is subject to the terms of the BSD 2 Clause License and +## the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License +## was not distributed with this source code in the LICENSE file, you can +## obtain it at www.aomedia.org/license/software. If the Alliance for Open +## Media Patent License 1.0 was not distributed with this source code in the +## PATENTS file, you can obtain it at www.aomedia.org/license/patent. +## +cmake_minimum_required(VERSION 3.5) + +set(REQUIRED_ARGS + "AOM_ROOT" "AOM_CONFIG_DIR" "GIT_EXECUTABLE" "PERL_EXECUTABLE") + +foreach (arg ${REQUIRED_ARGS}) + if ("${${arg}}" STREQUAL "") + message(FATAL_ERROR "${arg} must not be empty.") + endif () +endforeach () + +include("${AOM_ROOT}/build/cmake/util.cmake") + +# Generate the version string for this run. +unset(aom_version) +if (EXISTS "${GIT_EXECUTABLE}") + execute_process(COMMAND ${GIT_EXECUTABLE} --git-dir=${AOM_ROOT}/.git describe + OUTPUT_VARIABLE aom_version ERROR_QUIET) + string(STRIP "${aom_version}" aom_version) + + # Remove the leading 'v' from the version string. + string(FIND "${aom_version}" "v" v_pos) + if (${v_pos} EQUAL 0) + string(SUBSTRING "${aom_version}" 1 -1 aom_version) + endif () +endif () + +if ("${aom_version}" STREQUAL "") + set(aom_version "${AOM_ROOT}/CHANGELOG") +endif () + +unset(last_aom_version) +if (EXISTS "${AOM_CONFIG_DIR}/aom_version.h") + extract_version_string("${AOM_CONFIG_DIR}/aom_version.h" last_aom_version) +endif () + +if (NOT "${aom_version}" STREQUAL "${last_aom_version}") + # TODO(tomfinegan): Perl dependency is unnecessary. CMake can do everything + # that is done by version.pl on its own (if a bit more verbose...). + execute_process( + COMMAND ${PERL_EXECUTABLE} "${AOM_ROOT}/build/cmake/version.pl" + --version_data=${aom_version} + --version_filename=${AOM_CONFIG_DIR}/aom_version.h + VERBATIM) +endif () diff --git a/third_party/aom/build/cmake/aom_version.pl b/third_party/aom/build/cmake/version.pl index 3412feebdf..323e178f87 100755 --- a/third_party/aom/build/cmake/aom_version.pl +++ b/third_party/aom/build/cmake/version.pl @@ -14,6 +14,7 @@ use warnings; use 5.010; use Getopt::Long; +my $git_desc; my $version_data; my $version_filename; GetOptions('version_data=s' => \$version_data, @@ -27,6 +28,7 @@ if (!defined $version_data || length($version_data) == 0 || # Determine if $version_data is a filename or a git tag/description. my $version_string; +chomp($version_data); if (-r $version_data) { # $version_data is the path to the CHANGELOG. Parse the most recent version. my $changelog_filename = $version_data; @@ -45,6 +47,7 @@ if (-r $version_data) { # tagName OR tagName-commitsSinceTag-shortCommitHash # In either case we want the first element of the array returned by split. $version_string = (split("-", $version_data))[0]; + $git_desc = $version_data; } if (substr($version_string, 0, 1) eq "v") { @@ -80,7 +83,19 @@ my $lic_block = << "EOF"; EOF select $version_file; -print << "EOF"; +if (length($git_desc)) { + print << "EOF"; +$lic_block +#define VERSION_MAJOR $version_major +#define VERSION_MINOR $version_minor +#define VERSION_PATCH $version_patch +#define VERSION_EXTRA \"$version_extra\" +#define VERSION_PACKED $version_packed +#define VERSION_STRING_NOSP \"$git_desc\" +#define VERSION_STRING \" $git_desc\" +EOF +} else { + print << "EOF"; $lic_block #define VERSION_MAJOR $version_major #define VERSION_MINOR $version_minor @@ -90,4 +105,5 @@ $lic_block #define VERSION_STRING_NOSP \"v$version_string\" #define VERSION_STRING \" v$version_string\" EOF +} close($version_file); |